You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by kd...@apache.org on 2018/09/22 02:11:08 UTC
[09/51] [partial] nifi-registry git commit: NIFIREG-201 Refactoring
project structure to better isolate extensions
http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6f26290d/nifi-registry-core/nifi-registry-web-api/src/test/resources/db/clearDB.sql
----------------------------------------------------------------------
diff --git a/nifi-registry-core/nifi-registry-web-api/src/test/resources/db/clearDB.sql b/nifi-registry-core/nifi-registry-web-api/src/test/resources/db/clearDB.sql
new file mode 100644
index 0000000..7661df5
--- /dev/null
+++ b/nifi-registry-core/nifi-registry-web-api/src/test/resources/db/clearDB.sql
@@ -0,0 +1,19 @@
+-- Licensed to the Apache Software Foundation (ASF) under one or more
+-- contributor license agreements. See the NOTICE file distributed with
+-- this work for additional information regarding copyright ownership.
+-- The ASF licenses this file to You under the Apache License, Version 2.0
+-- (the "License"); you may not use this file except in compliance with
+-- the License. You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+DELETE FROM FLOW_SNAPSHOT;
+DELETE FROM FLOW;
+DELETE FROM BUCKET_ITEM;
+DELETE FROM BUCKET;
http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6f26290d/nifi-registry-core/nifi-registry-web-api/src/test/resources/keys/README.md
----------------------------------------------------------------------
diff --git a/nifi-registry-core/nifi-registry-web-api/src/test/resources/keys/README.md b/nifi-registry-core/nifi-registry-web-api/src/test/resources/keys/README.md
new file mode 100644
index 0000000..c3059cf
--- /dev/null
+++ b/nifi-registry-core/nifi-registry-web-api/src/test/resources/keys/README.md
@@ -0,0 +1,47 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+# Integration Test Keys
+
+The integration tests that run a secure NiFi require keystores and truststores for the server and client in order
+to establish a two-way TLS connection.
+
+The keys/certs for these tests were generated with the tls-toolkit included with NiFi Toolkit v1.4.0.
+
+The steps for generating replacements are:
+
+ # use NiFi tls-toolkit to generate CA, server key/cert, client key/cert
+ ./nifi-toolkit-1.4.0/bin/tls-toolkit.sh standalone --certificateAuthorityHostname localhost --hostnames localhost --nifiDnSuffix ", OU=nifi" --keyStorePassword localhostKeystorePassword --trustStorePassword localhostTruststorePassword --clientCertDn "CN=user1, OU=nifi" --clientCertPassword u1Pass --days 3650 --outputDirectory nifireg-integrationtest
+
+ # change to tls-toolkit output directory
+ cd ./nifireg-integrationtest
+
+ # copy server's key/trust stores
+ mkdir keys
+ cp localhost/keystore.jks keys/localhost-ks.jks
+ cp localhost/truststore.jks keys/localhost-ts.jks
+
+ # create a Java Key Store (JKS) from the client key
+ keytool -importkeystore -destkeystore keys/client-ks.jks -deststorepass clientKeystorePassword -destkeypass u1Pass -srckeystore CN=user1_OU=nifi.p12 -srcstorepass u1Pass -srcstoretype PKCS12
+
+
+You should now have a directory with the following contents:
+
+ keys/
+ +-- client-ks.jks # client keystore: keystorePass=clientKeystorePassword, keyPass=u1Pass
+ +-- localhost-ks.jks # server keystore: keystorePass=localhostKeystorePassword, keyPass=localhostKeystorePassword
+ +-- localhost-ts.jks # server/client truststore (contains CA): truststorePass=localhostTruststorePassword
+
+Copy these files to the test/resources/keys/ directory.
+
http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6f26290d/nifi-registry-core/nifi-registry-web-api/src/test/resources/keys/client-ks.jks
----------------------------------------------------------------------
diff --git a/nifi-registry-core/nifi-registry-web-api/src/test/resources/keys/client-ks.jks b/nifi-registry-core/nifi-registry-web-api/src/test/resources/keys/client-ks.jks
new file mode 100644
index 0000000..f2e0a1a
Binary files /dev/null and b/nifi-registry-core/nifi-registry-web-api/src/test/resources/keys/client-ks.jks differ
http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6f26290d/nifi-registry-core/nifi-registry-web-api/src/test/resources/keys/localhost-ks.jks
----------------------------------------------------------------------
diff --git a/nifi-registry-core/nifi-registry-web-api/src/test/resources/keys/localhost-ks.jks b/nifi-registry-core/nifi-registry-web-api/src/test/resources/keys/localhost-ks.jks
new file mode 100644
index 0000000..7421aaa
Binary files /dev/null and b/nifi-registry-core/nifi-registry-web-api/src/test/resources/keys/localhost-ks.jks differ
http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6f26290d/nifi-registry-core/nifi-registry-web-api/src/test/resources/keys/localhost-ts.jks
----------------------------------------------------------------------
diff --git a/nifi-registry-core/nifi-registry-web-api/src/test/resources/keys/localhost-ts.jks b/nifi-registry-core/nifi-registry-web-api/src/test/resources/keys/localhost-ts.jks
new file mode 100644
index 0000000..21eb2c0
Binary files /dev/null and b/nifi-registry-core/nifi-registry-web-api/src/test/resources/keys/localhost-ts.jks differ
http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6f26290d/nifi-registry-core/nifi-registry-web-docs/pom.xml
----------------------------------------------------------------------
diff --git a/nifi-registry-core/nifi-registry-web-docs/pom.xml b/nifi-registry-core/nifi-registry-web-docs/pom.xml
new file mode 100644
index 0000000..da2b600
--- /dev/null
+++ b/nifi-registry-core/nifi-registry-web-docs/pom.xml
@@ -0,0 +1,68 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.nifi.registry</groupId>
+ <artifactId>nifi-registry-core</artifactId>
+ <version>0.3.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>nifi-registry-web-docs</artifactId>
+ <packaging>war</packaging>
+
+ <properties>
+ <maven.javadoc.skip>true</maven.javadoc.skip>
+ <source.skip>true</source.skip>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <configuration>
+ <excludes combine.children="append">
+ <exclude>src/main/webapp/js/jquery.min.js</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.nifi.registry</groupId>
+ <artifactId>nifi-registry-utils</artifactId>
+ <version>0.3.0-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ </dependency>
+ <!-- Needed this dependency to resolve the taglib inside documentation.jsp, otherwise an error is encountered
+ "The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved" -->
+ <dependency>
+ <groupId>javax.servlet.jsp.jstl</groupId>
+ <artifactId>jstl</artifactId>
+ <version>1.2</version>
+ </dependency>
+ </dependencies>
+</project>
http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6f26290d/nifi-registry-core/nifi-registry-web-docs/src/main/java/org/apache/nifi/registry/web/docs/DocumentationController.java
----------------------------------------------------------------------
diff --git a/nifi-registry-core/nifi-registry-web-docs/src/main/java/org/apache/nifi/registry/web/docs/DocumentationController.java b/nifi-registry-core/nifi-registry-web-docs/src/main/java/org/apache/nifi/registry/web/docs/DocumentationController.java
new file mode 100644
index 0000000..3283c73
--- /dev/null
+++ b/nifi-registry-core/nifi-registry-web-docs/src/main/java/org/apache/nifi/registry/web/docs/DocumentationController.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.registry.web.docs;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ *
+ */
+public class DocumentationController extends HttpServlet {
+
+ private static final int GENERAL_LINK_COUNT = 4;
+ private static final int DEVELOPER_LINK_COUNT = 2;
+
+ // context for accessing the extension mapping
+ private ServletContext servletContext;
+
+ @Override
+ public void init(final ServletConfig config) throws ServletException {
+ super.init(config);
+ servletContext = config.getServletContext();
+ }
+
+ /**
+ *
+ * @param request servlet request
+ * @param response servlet response
+ * @throws ServletException if a servlet-specific error occurs
+ * @throws IOException if an I/O error occurs
+ */
+ @Override
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ // forward appropriately
+ request.getRequestDispatcher("/WEB-INF/jsp/documentation.jsp").forward(request, response);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6f26290d/nifi-registry-core/nifi-registry-web-docs/src/main/resources/META-INF/LICENSE
----------------------------------------------------------------------
diff --git a/nifi-registry-core/nifi-registry-web-docs/src/main/resources/META-INF/LICENSE b/nifi-registry-core/nifi-registry-web-docs/src/main/resources/META-INF/LICENSE
new file mode 100644
index 0000000..10865c2
--- /dev/null
+++ b/nifi-registry-core/nifi-registry-web-docs/src/main/resources/META-INF/LICENSE
@@ -0,0 +1,223 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+This product bundles 'JQuery' which is available under and MIT style license.
+ (c) 2005, 2014 jQuery Foundation, Inc.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6f26290d/nifi-registry-core/nifi-registry-web-docs/src/main/resources/META-INF/NOTICE
----------------------------------------------------------------------
diff --git a/nifi-registry-core/nifi-registry-web-docs/src/main/resources/META-INF/NOTICE b/nifi-registry-core/nifi-registry-web-docs/src/main/resources/META-INF/NOTICE
new file mode 100644
index 0000000..d0f21e6
--- /dev/null
+++ b/nifi-registry-core/nifi-registry-web-docs/src/main/resources/META-INF/NOTICE
@@ -0,0 +1,14 @@
+nifi-web-docs
+Copyright 2014-2017 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+************************
+Common Development and Distribution License 1.1
+************************
+
+The following binary components are provided under the Common Development and Distribution License 1.1. See project link for details.
+
+ (CDDL 1.1) (GPL2 w/ CPE) Java Servlet API (javax.servlet:javax.servlet-api:jar:3.1.0 - http://servlet-spec.java.net)
+ (CDDL 1.1) (GPL2 w/ CPE) JavaServer Pages Standard Tag Library (javax.servlet.jsp.jstl:jstl:jar:1.2 - https://javaee.github.io/jstl-api/)
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6f26290d/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/WEB-INF/jsp/documentation.jsp
----------------------------------------------------------------------
diff --git a/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/WEB-INF/jsp/documentation.jsp b/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/WEB-INF/jsp/documentation.jsp
new file mode 100644
index 0000000..fa4d574
--- /dev/null
+++ b/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/WEB-INF/jsp/documentation.jsp
@@ -0,0 +1,84 @@
+<%--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+--%>
+<%@ page contentType="text/html" pageEncoding="UTF-8" session="false" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <link rel="shortcut icon" href="../nifi/images/nifi16.ico"/>
+ <title>NiFi Registry Documentation</title>
+ <script type="text/javascript" src="js/jquery.min.js"></script>
+ <script type="text/javascript" src="js/application.js"></script>
+ <link href="css/main.css" rel="stylesheet" type="text/css" />
+ <link href="css/component-usage.css" rel="stylesheet" type="text/css" />
+ </head>
+ <body id="documentation-body">
+ <div id="banner-header" class="main-banner-header"></div>
+ <span id="initial-selection-type" style="display: none;">
+ <%= request.getParameter("select") == null ? "" : org.apache.nifi.registry.util.EscapeUtils.escapeHtml(request.getParameter("select")) %>
+ </span>
+ <span id="initial-selection-bundle-group" style="display: none;">
+ <%= request.getParameter("group") == null ? "" : org.apache.nifi.registry.util.EscapeUtils.escapeHtml(request.getParameter("group")) %>
+ </span>
+ <span id="initial-selection-bundle-artifact" style="display: none;">
+ <%= request.getParameter("artifact") == null ? "" : org.apache.nifi.registry.util.EscapeUtils.escapeHtml(request.getParameter("artifact")) %>
+ </span>
+ <span id="initial-selection-bundle-version" style="display: none;">
+ <%= request.getParameter("version") == null ? "" : org.apache.nifi.registry.util.EscapeUtils.escapeHtml(request.getParameter("version")) %>
+ </span>
+ <div id="documentation-header" class="documentation-header">
+ <div id="component-list-toggle-link">-</div>
+ <div id="header-contents">
+ <div id="nf-title">NiFi Registry Documentation</div>
+ <div id="nf-version" class="version"></div>
+ <div id="selected-component"></div>
+ </div>
+ </div>
+ <div id="component-root-container">
+ <div id="component-listing-container">
+ <div id="component-listing" class="component-listing">
+ <div class="section">
+ <div class="header">General</div>
+ <div id="general-links" class="component-links">
+ <ul>
+ <li class="component-item"><a class="document-link admin-guide" href="html/getting-started.html" target="component-usage">Getting Started</a></li>
+ <li class="component-item"><a class="document-link admin-guide" href="html/user-guide.html" target="component-usage">User Guide</a></li>
+ <li class="component-item"><a class="document-link admin-guide" href="html/administration-guide.html" target="component-usage">Admin Guide</a></li>
+ </ul>
+ <span class="no-matching no-components hidden">No matching guides</span>
+ </div>
+ </div>
+ <div class="section">
+ <div class="header">Developer</div>
+ <div id="developer-links" class="component-links">
+ <ul>
+ <li class="component-item"><a class="document-link rest-api" href="rest-api/index.html" target="component-usage">Rest Api</a></li>
+ </ul>
+ <span class="no-matching no-components hidden">No matching developer guides</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="component-usage-container">
+ <iframe id="component-usage" name="component-usage" frameborder="0" class="component-usage"></iframe>
+ </div>
+ </div>
+ <div id="banner-footer" class="main-banner-footer"></div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6f26290d/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/WEB-INF/jsp/no-documentation-found.jsp
----------------------------------------------------------------------
diff --git a/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/WEB-INF/jsp/no-documentation-found.jsp b/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/WEB-INF/jsp/no-documentation-found.jsp
new file mode 100644
index 0000000..567d0be
--- /dev/null
+++ b/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/WEB-INF/jsp/no-documentation-found.jsp
@@ -0,0 +1,31 @@
+<%--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+--%>
+<%@ page contentType="text/html" pageEncoding="UTF-8" session="false" %>
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>NiFi</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
+ <link rel="shortcut icon" href="../nifi/images/nifi16.ico"/>
+ <link href="../../css/component-usage.css" rel="stylesheet" type="text/css" />
+ </head>
+ <body>
+ <h2>Yikes!</h2>
+ <p>Unable to locate the documentation for the selected item.</p>
+ </body>
+</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6f26290d/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/WEB-INF/web.xml b/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..eb6bb67
--- /dev/null
+++ b/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
+ <display-name>nifi-registry-docs</display-name>
+ <error-page>
+ <error-code>404</error-code>
+ <location>/WEB-INF/jsp/no-documentation-found.jsp</location>
+ </error-page>
+ <servlet>
+ <servlet-name>documentation-controller</servlet-name>
+ <servlet-class>org.apache.nifi.registry.web.docs.DocumentationController</servlet-class>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>documentation-controller</servlet-name>
+ <url-pattern>/documentation</url-pattern>
+ </servlet-mapping>
+ <welcome-file-list>
+ <welcome-file>documentation</welcome-file>
+ </welcome-file-list>
+</web-app>
http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6f26290d/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/css/component-usage.css
----------------------------------------------------------------------
diff --git a/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/css/component-usage.css b/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/css/component-usage.css
new file mode 100644
index 0000000..1ae578b
--- /dev/null
+++ b/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/css/component-usage.css
@@ -0,0 +1,183 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic|Noto+Serif:400,400italic,700,700italic|Droid+Sans+Mono:400";
+
+html, html a {
+ -webkit-font-smoothing: antialiased;
+ text-shadow: 1px 1px 1px rgba(0,0,0,0.004);
+}
+
+body {
+ margin: 0 auto;
+ display: block;
+ font-family: "Open Sans","DejaVu Sans",sans-serif;
+}
+
+.title {
+ font-weight: bold;
+ color: #7a2518;
+ font-size: 18px;
+}
+
+.hidden {
+ display: none;
+}
+
+/* tables */
+
+table {
+ color:#666;
+ font-size:14px;
+ background:#eaebec;
+ border:#ccc 1px solid;
+ -webkit-border-radius:3px;
+ border-radius:3px;
+ width: 100%;
+ word-wrap: break-word;
+}
+
+table th {
+ padding:11px 15px 12px 15px;
+ border-top:1px solid #fafafa;
+ border-bottom:1px solid #e0e0e0;
+
+ background: #ededed;
+}
+
+table th:first-child {
+ text-align: left;
+ padding-left:10px;
+}
+
+table th:last-child {
+ text-align: left;
+ padding-left:10px;
+}
+
+table tr:first-child th:first-child {
+ border-top-left-radius:3px;
+}
+
+table tr:first-child th:last-child {
+ border-top-right-radius:3px;
+}
+
+table tr {
+ text-align: center;
+ padding-left:10px;
+}
+
+table td:first-child {
+ text-align: left;
+ padding-left:10px;
+ border-left: 0;
+}
+
+table td:last-child {
+ text-align: left;
+ padding-left:10px;
+ border-left: 0;
+ vertical-align: top;
+
+}
+
+table td {
+ padding:12px;
+ background: #fafafa;
+}
+
+table tr:last-child td {
+ border-bottom:0;
+}
+
+table tr:last-child td:first-child {
+ border-bottom-left-radius:3px;
+}
+
+table tr:last-child td:last-child {
+ border-bottom-right-radius:3px;
+}
+
+td#allowable-values, td#default-value, td#name, td#value {
+ max-width: 200px;
+}
+
+td#description {
+ vertical-align: middle;
+}
+
+/* links */
+
+a, a:link, a:visited {
+ cursor: pointer;
+ color: #2156a5;
+ text-decoration: none;
+ border: none;
+}
+
+a:hover, a:active {
+ color: #2156a5;
+ text-decoration: none;
+ border: none;
+}
+
+.clear {
+ clear: both;
+}
+
+/* p */
+
+p {
+ font-family: 'Noto Serif', 'DejaVu Serif', serif;
+ font-size: 16px;
+}
+
+p strong {
+ font-weight: bold;
+}
+
+/* ul li */
+td ul {
+ margin: 0px 0px 0px 0px;
+ padding-left: 20px;
+}
+ul li {
+ text-align: left;
+ display: list-item;
+}
+
+ul li strong {
+ font-weight: bold;
+}
+
+h2 {
+ font-weight: normal;
+ color: #ba3925;
+}
+
+/* pre */
+
+pre {
+ font-size: 14px;
+ background-color: #fefefe;
+ border: 1px solid #ccc;
+ border-left: 6px solid #ccc;
+ color: #555;
+ margin-bottom: 10px;
+ padding: 5px 8px;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6f26290d/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/css/main.css
----------------------------------------------------------------------
diff --git a/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/css/main.css b/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/css/main.css
new file mode 100644
index 0000000..8b50064
--- /dev/null
+++ b/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/css/main.css
@@ -0,0 +1,217 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+* {
+ margin: 0;
+ padding: 0;
+}
+
+#documentation-body {
+ width: 100%;
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+}
+
+/* banners */
+
+div.main-banner-header {
+ display: none;
+ font-weight: bold;
+ font-size: 1em;
+ text-align: center;
+ line-height: 15px;
+ color: #7e7e7e;
+ margin: 0px auto;
+ width: 100%;
+ height: 1em;
+ background-color: #fff;
+ background-image: url(../images/bgHeader.png);
+ background-position: center;
+ background-repeat: no-repeat;
+}
+
+div.main-banner-footer {
+ display: none;
+ color: #fff;
+ text-align: center;
+ font-weight: bold;
+ font-size: 1em;
+ overflow: visible;
+ background-color: #9eb9c7;
+ background-image: url(../images/bgBannerFoot.png);
+ background-repeat: repeat-x;
+ background-position: left top;
+}
+
+/* documentation */
+
+div.documentation-header {
+ border-bottom: 1px solid #d1dee5;
+ color: #365c6a;
+ font-size: 13px;
+ display: flex;
+}
+
+#component-list-toggle-link {
+ padding: 4px;
+ font-size: 14px;
+ font-weight: bold;
+ color: #264c58;
+ cursor: pointer;
+ width: 12px;
+ text-align: center;
+ align-self: flex-end;
+}
+
+#header-contents {
+ display: flex;
+ flex-wrap: wrap;
+}
+
+#nf-title {
+ font-size: 20px;
+ margin: 5px 5px 0px 5px;
+}
+
+#nf-version {
+ font-size: 14px;
+ margin: 11px 5px 0px 5px;
+ flex-grow: 1;
+}
+
+.version {
+ font-style: italic;
+ color: #aaa;
+}
+
+#selected-component {
+ font-size: 20px;
+ margin: 5px 5px 0px 5px;
+}
+
+/* content flex-box containers */
+
+#component-root-container {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: stretch;
+ width: 100%;
+}
+
+#component-listing-container {
+ flex-grow: 1;
+ min-width: 312px;
+ max-width: 350px;
+ padding: 0px 4px 0px 4px;
+}
+
+#component-usage-container {
+ flex-grow: 4;
+ min-width: 300px;
+ padding: 0px 4px 0px 4px;
+}
+
+/* component listing */
+
+div.component-listing {
+ overflow: auto;
+ font-size: 16px;
+}
+
+div.component-listing div.section {
+ margin-bottom: 15px;
+}
+
+div.component-listing div.header {
+ font-weight: bold;
+ color: #264c58;
+}
+
+div.component-links ul {
+ list-style: none;
+}
+
+li.component-item {
+ padding: 2px;
+ padding-left: 4px;
+ border-left: 8px solid transparent;
+ font-family: "Open Sans","DejaVu Sans",sans-serif;
+ font-size: 15px;
+}
+
+li.component-item a {
+ color: #1e373f;
+}
+
+li.component-item:hover {
+ border-left: 8px solid #d1dee5;
+}
+
+li.component-item:hover a {
+ color: #264c58;
+}
+
+li.component-item.selected {
+ border-left: 8px solid #7098ad;
+}
+
+div.component-links span.no-components {
+ font-style: italic;
+ color: #777;
+}
+
+/* component filter control */
+
+#component-filter-controls {
+}
+
+#component-filter-container {
+ margin-left: 2px;
+}
+
+#component-filter {
+ font-size: 12px;
+ height: 18px;
+ line-height: 20px;
+ width: 98%;
+ float: left;
+}
+
+input.component-filter-list {
+ color: #888;
+ font-style: italic;
+}
+
+#component-filter-stats {
+ font-size: 9px;
+ font-weight: bold;
+ color: #9f6000;
+ clear: left;
+ line-height: normal;
+ margin-left: 7px;
+}
+
+/* component usage */
+
+#component-usage {
+ overflow: auto;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6f26290d/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/images/bgBannerFoot.png
----------------------------------------------------------------------
diff --git a/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/images/bgBannerFoot.png b/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/images/bgBannerFoot.png
new file mode 100755
index 0000000..16a17fe
Binary files /dev/null and b/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/images/bgBannerFoot.png differ
http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6f26290d/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/images/bgHeader.png
----------------------------------------------------------------------
diff --git a/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/images/bgHeader.png b/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/images/bgHeader.png
new file mode 100644
index 0000000..3cf88c5
Binary files /dev/null and b/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/images/bgHeader.png differ
http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6f26290d/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/images/bgTableHeader.png
----------------------------------------------------------------------
diff --git a/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/images/bgTableHeader.png b/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/images/bgTableHeader.png
new file mode 100755
index 0000000..8f5e058
Binary files /dev/null and b/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/images/bgTableHeader.png differ
http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6f26290d/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/js/application.js
----------------------------------------------------------------------
diff --git a/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/js/application.js b/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/js/application.js
new file mode 100644
index 0000000..e0b4558
--- /dev/null
+++ b/nifi-registry-core/nifi-registry-web-docs/src/main/webapp/js/application.js
@@ -0,0 +1,400 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* global top */
+
+$(document).ready(function () {
+
+ var isUndefined = function (obj) {
+ return typeof obj === 'undefined';
+ };
+
+ var isNull = function (obj) {
+ return obj === null;
+ };
+
+ var isDefinedAndNotNull = function (obj) {
+ return !isUndefined(obj) && !isNull(obj);
+ };
+
+ /**
+ * Get the filter text.
+ *
+ * @returns {unresolved}
+ */
+ var getFilterText = function () {
+ var filter = '';
+ var ruleFilter = $('#component-filter');
+ if (!ruleFilter.hasClass('component-filter-list')) {
+ filter = ruleFilter.val();
+ }
+ return filter;
+ };
+
+ var applyComponentFilter = function (componentContainer) {
+ var matchingComponents = 0;
+ var componentLinks = $(componentContainer).find('a.component-link, a.document-link');
+
+ if (componentLinks.length === 0) {
+ return matchingComponents;
+ }
+
+ // get the filter text
+ var filter = getFilterText();
+ if (filter !== '') {
+ var filterExp = new RegExp(filter, 'i');
+
+ // update the displayed rule count
+ $.each(componentLinks, function (_, componentLink) {
+ var a = $(componentLink);
+ var li = a.closest('li.component-item');
+
+ // get the rule text for matching
+ var componentName = a.text();
+
+ // see if any of the text from this rule matches
+ var componentMatches = componentName.search(filterExp) >= 0;
+
+ // handle whether the rule matches
+ if (componentMatches === true) {
+ li.show();
+ matchingComponents++;
+ } else {
+ // hide the rule
+ li.hide();
+ }
+ });
+ } else {
+ // ensure every rule is visible
+ componentLinks.closest('li.component-item').show();
+
+ // set the number of displayed rules
+ matchingComponents = componentLinks.length;
+ }
+
+ // show whether there are status if appropriate
+ var noMatching = componentContainer.find('span.no-matching');
+ if (matchingComponents === 0) {
+ noMatching.show();
+ } else {
+ noMatching.hide();
+ }
+
+ return matchingComponents;
+ };
+
+ var applyFilter = function () {
+ var matchingGeneral = applyComponentFilter($('#general-links'));
+ var matchingProcessors = applyComponentFilter($('#processor-links'));
+ var matchingControllerServices = applyComponentFilter($('#controller-service-links'));
+ var matchingReportingTasks = applyComponentFilter($('#reporting-task-links'));
+ var matchingDeveloper = applyComponentFilter($('#developer-links'));
+
+ // update the rule count
+ $('#displayed-components').text(matchingGeneral + matchingProcessors + matchingControllerServices + matchingReportingTasks + matchingDeveloper);
+ };
+
+ var selectComponent = function (selectedExtension, selectedBundleGroup, selectedBundleArtifact, selectedArtifactVersion) {
+ var componentLinks = $('a.component-link');
+
+ // consider each link
+ $.each(componentLinks, function () {
+ var componentLink = $(this);
+ var item = componentLink.closest('li.component-item');
+ var extension = item.find('span.extension-class').text();
+ var group = item.find('span.bundle-group').text();
+ var artifact = item.find('span.bundle-artifact').text();
+ var version = item.find('span.bundle-version').text();
+
+ if (extension === selectedExtension && group === selectedBundleGroup
+ && artifact === selectedBundleArtifact && version === selectedArtifactVersion) {
+
+ // remove all selected styles
+ $('li.component-item').removeClass('selected');
+
+ // select this links item
+ item.addClass('selected');
+
+ // set the header
+ $('#selected-component').text(componentLink.text());
+
+ // stop iteration
+ return false;
+ }
+ });
+ };
+
+ var selectDocument = function (documentName) {
+ var documentLinks = $('a.document-link');
+
+ // consider each link
+ $.each(documentLinks, function () {
+ var documentLink = $(this);
+ if (documentName === $.trim(documentLink.text())) {
+ // remove all selected styles
+ $('li.component-item').removeClass('selected');
+
+ // select this links item
+ documentLink.closest('li.component-item').addClass('selected');
+
+ // set the header
+ $('#selected-component').text(documentLink.text());
+
+ // stop iteration
+ return false;
+ }
+ });
+ };
+
+ // get the banners if we're not in the shell
+ var bannerHeaderHeight = 0;
+ var bannerFooterHeight = 0;
+ var banners = $.Deferred(function (deferred) {
+ if (top === window) {
+ $.ajax({
+ type: 'GET',
+ url: '../nifi-api/flow/banners',
+ dataType: 'json'
+ }).then(function (response) {
+ // ensure the banners response is specified
+ if (isDefinedAndNotNull(response.banners)) {
+ if (isDefinedAndNotNull(response.banners.headerText) && response.banners.headerText !== '') {
+ // update the header text
+ var bannerHeader = $('#banner-header').text(response.banners.headerText).show();
+ bannerHeaderHeight = bannerHeader.height();
+ }
+
+ if (isDefinedAndNotNull(response.banners.footerText) && response.banners.footerText !== '') {
+ // update the footer text and show it
+ var bannerFooter = $('#banner-footer').text(response.banners.footerText).show();
+ bannerFooterHeight = bannerFooter.height();
+ }
+ }
+
+ deferred.resolve();
+ }, function () {
+ deferred.reject();
+ });
+ } else {
+ deferred.resolve();
+ }
+ }).promise();
+
+ // get the about details
+ var about = $.ajax({
+ type: 'GET',
+ url: '../nifi-api/flow/about',
+ dataType: 'json'
+ }).done(function (response) {
+ var aboutDetails = response.about;
+
+ // set the document title and the about title
+ $('#nf-version').text(aboutDetails.version);
+ });
+
+ // once the banners have loaded, function with remainder of the page
+ $.when(banners, about).always(function () {
+ // define the function for filtering the list
+ $('#component-filter').keyup(function () {
+ applyFilter();
+ }).focus(function () {
+ if ($(this).hasClass('component-filter-list')) {
+ $(this).removeClass('component-filter-list').val('');
+ }
+ }).blur(function () {
+ if ($(this).val() === '') {
+ $(this).addClass('component-filter-list').val('Filter');
+ }
+ }).addClass('component-filter-list').val('Filter');
+
+ // get the component containers to install the window listener
+ var documentationHeader = $('#documentation-header');
+ var componentRootContainer = $('#component-root-container');
+ var componentListingContainer = $('#component-listing-container', componentRootContainer);
+ var componentListing = $('#component-listing', componentListingContainer);
+ var componentFilterControls = $('#component-filter-controls', componentRootContainer);
+ var componentUsageContainer = $('#component-usage-container', componentUsageContainer);
+ var componentUsage = $('#component-usage', componentUsageContainer);
+
+ var componentListingContainerPaddingX = 0;
+ componentListingContainerPaddingX += parseInt(componentListingContainer.css("padding-right"), 10);
+ componentListingContainerPaddingX += parseInt(componentListingContainer.css("padding-left"), 10);
+
+ var componentListingContainerPaddingY = 0;
+ componentListingContainerPaddingY += parseInt(componentListingContainer.css("padding-top"), 10);
+ componentListingContainerPaddingY += parseInt(componentListingContainer.css("padding-bottom"), 10);
+
+ var componentUsageContainerPaddingX = 0;
+ componentUsageContainerPaddingX += parseInt(componentUsageContainer.css("padding-right"), 10);
+ componentUsageContainerPaddingX += parseInt(componentUsageContainer.css("padding-left"), 10);
+
+ var componentUsageContainerPaddingY = 0;
+ componentUsageContainerPaddingY += parseInt(componentUsageContainer.css("padding-top"), 10);
+ componentUsageContainerPaddingY += parseInt(componentUsageContainer.css("padding-bottom"), 10);
+
+ var componentListingContainerMinWidth = parseInt(componentListingContainer.css("min-width"), 10) + componentListingContainerPaddingX;
+ var componentUsageContainerMinWidth = parseInt(componentUsageContainer.css("min-width"), 10) + componentUsageContainerPaddingX;
+ var smallDisplayBoundary = componentListingContainerMinWidth + componentUsageContainerMinWidth;
+
+ var cssComponentListingNormal = { backgroundColor: "#ffffff" };
+ var cssComponentListingSmall = { backgroundColor: "#fbfbfb" };
+
+ // add a window resize listener
+ $(window).resize(function () {
+ // This -1 is the border-top of #component-usage-container
+ var baseHeight = window.innerHeight - 1;
+ baseHeight -= bannerHeaderHeight;
+ baseHeight -= bannerFooterHeight;
+ baseHeight -= documentationHeader.height();
+
+ // resize component list accordingly
+ if (smallDisplayBoundary > window.innerWidth) {
+ // screen is not wide enough to display content usage
+ // within the same row.
+ componentListingContainer.css(cssComponentListingSmall);
+ componentListingContainer.css({
+ borderBottom: "1px solid #ddddd8"
+ });
+ componentListing.css({
+ height: "200px"
+ });
+ // resize the iframe accordingly
+ var componentUsageHeight = baseHeight;
+ if (componentListingContainer.is(":visible")) {
+ componentUsageHeight -= componentListingContainer.height();
+ componentUsageHeight -= 1; // border-bottom
+ }
+ componentUsageHeight -= componentListingContainerPaddingY;
+ componentUsageHeight -= componentUsageContainerPaddingY;
+ componentUsage.css({
+ width: componentUsageContainer.width(),
+ height: componentUsageHeight
+ });
+ componentUsageContainer.css({
+ height: componentUsage.height()
+ });
+ } else {
+ componentListingContainer.css(cssComponentListingNormal);
+
+ var componentListingHeight = baseHeight;
+ componentListingHeight -= componentFilterControls.height();
+ componentListingHeight -= componentListingContainerPaddingY;
+ componentListing.css({
+ height: componentListingHeight
+ });
+
+ // resize the iframe accordingly
+ componentUsage.css({
+ width: componentUsageContainer.width(),
+ height: baseHeight - componentUsageContainerPaddingY
+ });
+ componentUsageContainer.css({
+ height: componentUsage.height()
+ });
+ componentListingContainer.css({
+ borderBottom: "0px"
+ });
+ }
+ });
+
+
+ var toggleComponentListing = $('#component-list-toggle-link');
+ toggleComponentListing.click(function(){
+ componentListingContainer.toggle(0, function(){
+ toggleComponentListing.text($(this).is(":visible") ? "-" : "+");
+ $(window).resize();
+ });
+ });
+
+ // listen for loading of the iframe to update the title
+ $('#component-usage').on('load', function () {
+
+ // resize window accordingly.
+ $(window).resize();
+
+ var bundleAndComponent = '';
+ var href = $(this).contents().get(0).location.href;
+
+ // see if the href ends in index.htm[l]
+ var indexOfIndexHtml = href.indexOf('index.htm');
+ if (indexOfIndexHtml >= 0) {
+ href = href.substring(0, indexOfIndexHtml);
+ }
+
+ // remove the trailing separator
+ if (href.length > 0) {
+ var indexOfSeparator = href.lastIndexOf('/');
+ if (indexOfSeparator === href.length - 1) {
+ href = href.substring(0, indexOfSeparator);
+ }
+ }
+
+ // remove the beginning bits
+ if (href.length > 0) {
+ var path = 'nifi-docs/components';
+ var indexOfPath = href.indexOf(path);
+ if (indexOfPath >= 0) {
+ var indexOfBundle = indexOfPath + path.length + 1;
+ if (indexOfBundle < href.length) {
+ bundleAndComponent = href.substr(indexOfBundle);
+ }
+ }
+ }
+
+ // if we could extract the bundle coordinates
+ if (bundleAndComponent !== '') {
+ var bundleTokens = bundleAndComponent.split('/');
+ if (bundleTokens.length === 4) {
+ selectComponent(bundleTokens[3], bundleTokens[0], bundleTokens[1], bundleTokens[2]);
+ }
+ }
+ });
+
+ // listen for on the rest api and user guide and developer guide and admin guide and overview
+ $('a.document-link').on('click', function() {
+ selectDocument($(this).text());
+ });
+
+ // get the initial selection
+ var initialLink = $('a.document-link:first');
+ var initialSelectionType = $.trim($('#initial-selection-type').text());
+
+ if (initialSelectionType !== '') {
+ var initialSelectionBundleGroup = $.trim($('#initial-selection-bundle-group').text());
+ var initialSelectionBundleArtifact = $.trim($('#initial-selection-bundle-artifact').text());
+ var initialSelectionBundleVersion = $.trim($('#initial-selection-bundle-version').text());
+
+ $('a.component-link').each(function () {
+ var componentLink = $(this);
+ var item = componentLink.closest('li.component-item');
+ var extension = item.find('span.extension-class').text();
+ var group = item.find('span.bundle-group').text();
+ var artifact = item.find('span.bundle-artifact').text();
+ var version = item.find('span.bundle-version').text();
+
+ if (extension === initialSelectionType && group === initialSelectionBundleGroup
+ && artifact === initialSelectionBundleArtifact && version === initialSelectionBundleVersion) {
+ initialLink = componentLink;
+ return false;
+ }
+ });
+ }
+
+ // click the first link
+ initialLink[0].click();
+ });
+});