You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by mc...@apache.org on 2016/04/29 22:32:26 UTC

[13/13] nifi git commit: NIFI-1554: - Populating component entities in the REST API to decouple key fields from the configuration DTOs. - Added initial support for components in UI when access isn't allowed. Formal styling to come later.

NIFI-1554:
- Populating component entities in the REST API to decouple key fields from the configuration DTOs.
- Added initial support for components in UI when access isn't allowed. Formal styling to come later.


Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/ff98d823
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/ff98d823
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/ff98d823

Branch: refs/heads/master
Commit: ff98d823e20f5042dfbb05d9f8efda0daf3d3ba4
Parents: a4409d3
Author: Matt Gilman <ma...@gmail.com>
Authored: Fri Apr 29 14:49:13 2016 -0400
Committer: Matt Gilman <ma...@gmail.com>
Committed: Fri Apr 29 14:49:14 2016 -0400

----------------------------------------------------------------------
 .../org/apache/nifi/authorization/Resource.java |   2 +-
 .../nifi-framework/nifi-administration/pom.xml  |  38 -
 .../authorization/AuthorizerFactoryBean.java    | 342 ---------
 .../StandardAuthorizerConfigurationContext.java |  54 --
 ...StandardAuthorizerInitializationContext.java |  41 --
 .../java/org/apache/nifi/user/NiFiUser.java     |  97 ---
 .../org/apache/nifi/user/NiFiUserGroup.java     |   2 +
 .../resources/nifi-administration-context.xml   |   5 -
 .../src/main/xsd/authorizers.xsd                |  49 --
 .../nifi/web/api/dto/AccessPolicyDTO.java       |  62 ++
 .../apache/nifi/web/api/dto/ComponentDTO.java   |  94 +++
 .../apache/nifi/web/api/dto/ConnectionDTO.java  |   2 +-
 .../nifi/web/api/dto/ControllerServiceDTO.java  |   2 +-
 .../apache/nifi/web/api/dto/DimensionsDTO.java  |  61 ++
 .../org/apache/nifi/web/api/dto/FunnelDTO.java  |   2 +-
 .../org/apache/nifi/web/api/dto/LabelDTO.java   |   2 +-
 .../nifi/web/api/dto/NiFiComponentDTO.java      | 106 ---
 .../org/apache/nifi/web/api/dto/PortDTO.java    |   2 +-
 .../nifi/web/api/dto/ProcessGroupDTO.java       |  20 +-
 .../apache/nifi/web/api/dto/ProcessorDTO.java   |   2 +-
 .../nifi/web/api/dto/RemoteProcessGroupDTO.java |   2 +-
 .../nifi/web/api/dto/ReportingTaskDTO.java      |   2 +-
 .../org/apache/nifi/web/api/dto/SnippetDTO.java |  19 +-
 .../web/api/dto/flow/FlowBreadcrumbDTO.java     |  80 +++
 .../apache/nifi/web/api/dto/flow/FlowDTO.java   | 174 +++++
 .../web/api/dto/flow/ProcessGroupFlowDTO.java   | 112 +++
 .../nifi/web/api/entity/ComponentEntity.java    | 119 ++++
 .../nifi/web/api/entity/ConnectionEntity.java   | 107 ++-
 .../nifi/web/api/entity/ConnectionsEntity.java  |  14 +-
 .../web/api/entity/ControllerServiceEntity.java |   2 +-
 .../org/apache/nifi/web/api/entity/Entity.java  |   5 +-
 .../apache/nifi/web/api/entity/FlowEntity.java  |  44 ++
 .../nifi/web/api/entity/FunnelEntity.java       |  12 +-
 .../nifi/web/api/entity/FunnelsEntity.java      |  14 +-
 .../nifi/web/api/entity/InputPortEntity.java    |  41 --
 .../nifi/web/api/entity/InputPortsEntity.java   |  14 +-
 .../apache/nifi/web/api/entity/LabelEntity.java |  29 +-
 .../nifi/web/api/entity/LabelsEntity.java       |  14 +-
 .../nifi/web/api/entity/OutputPortEntity.java   |  41 --
 .../nifi/web/api/entity/OutputPortsEntity.java  |  14 +-
 .../apache/nifi/web/api/entity/PortEntity.java  |  50 ++
 .../nifi/web/api/entity/ProcessGroupEntity.java |  12 +-
 .../web/api/entity/ProcessGroupFlowEntity.java  |  44 ++
 .../web/api/entity/ProcessGroupsEntity.java     |  15 +-
 .../nifi/web/api/entity/ProcessorEntity.java    |  15 +-
 .../nifi/web/api/entity/ProcessorsEntity.java   |  14 +-
 .../api/entity/RemoteProcessGroupEntity.java    |  12 +-
 .../api/entity/RemoteProcessGroupsEntity.java   |  14 +-
 .../src/main/xsd/authorizations.xsd             |   1 -
 .../nifi-framework-authorization/pom.xml        |  59 +-
 .../authorization/AccessDeniedException.java    |  39 ++
 .../authorization/AuthorizerFactoryBean.java    | 341 +++++++++
 .../StandardAuthorizerConfigurationContext.java |  54 ++
 ...StandardAuthorizerInitializationContext.java |  41 ++
 .../authorization/resource/Authorizable.java    | 129 ++++
 .../authorization/resource/ResourceFactory.java |   1 -
 .../authorization/resource/ResourceType.java    |   1 +
 .../nifi/authorization/user/NiFiUser.java       |  97 +++
 .../authorization/user/NiFiUserDetails.java     |  91 +++
 .../nifi/authorization/user/NiFiUserUtils.java  |  59 ++
 .../nifi-framework-authorization-context.xml    |  26 +
 .../src/main/xsd/authorizers.xsd                |  49 ++
 .../cluster/manager/impl/WebClusterManager.java |  42 +-
 .../nifi-framework-core-api/pom.xml             |   4 +
 .../apache/nifi/connectable/Connectable.java    |   3 +-
 .../org/apache/nifi/connectable/Connection.java |   3 +-
 .../apache/nifi/controller/AbstractPort.java    |  48 +-
 .../apache/nifi/controller/ProcessorNode.java   |  14 +-
 .../apache/nifi/controller/StandardFunnel.java  |  49 +-
 .../org/apache/nifi/controller/label/Label.java |   3 +-
 .../org/apache/nifi/groups/ProcessGroup.java    |   3 +-
 .../apache/nifi/groups/RemoteProcessGroup.java  |   3 +-
 .../nifi/connectable/StandardConnection.java    |  48 +-
 .../nifi/controller/StandardProcessorNode.java  |  60 +-
 .../nifi/controller/label/StandardLabel.java    |  23 +-
 .../nifi/fingerprint/FingerprintFactory.java    |   6 +-
 .../nifi/groups/StandardProcessGroup.java       |  42 +-
 .../nifi/remote/StandardRemoteProcessGroup.java |  70 +-
 .../java/org/apache/nifi/util/SnippetUtils.java |  22 +-
 .../controller/StandardFlowServiceTest.java     |   1 -
 .../zookeeper/TestZooKeeperStateProvider.java   |  13 +-
 .../nifi/remote/StandardRemoteGroupPort.java    |   6 +
 .../nifi/audit/ComponentStateAuditor.java       |   4 +-
 .../apache/nifi/audit/ControllerAuditor.java    |   4 +-
 .../nifi/audit/ControllerServiceAuditor.java    |   4 +-
 .../org/apache/nifi/audit/FunnelAuditor.java    |   4 +-
 .../java/org/apache/nifi/audit/PortAuditor.java |   4 +-
 .../apache/nifi/audit/ProcessGroupAuditor.java  |   4 +-
 .../org/apache/nifi/audit/ProcessorAuditor.java |   4 +-
 .../apache/nifi/audit/RelationshipAuditor.java  |   4 +-
 .../nifi/audit/RemoteProcessGroupAuditor.java   |   4 +-
 .../apache/nifi/audit/ReportingTaskAuditor.java |   4 +-
 .../org/apache/nifi/audit/SnippetAuditor.java   |   4 +-
 .../org/apache/nifi/web/NiFiServiceFacade.java  | 107 +--
 .../nifi/web/NiFiWebApiConfiguration.java       |   1 +
 .../nifi/web/StandardNiFiContentAccess.java     |   4 +-
 .../nifi/web/StandardNiFiServiceFacade.java     | 584 +++++++++++-----
 .../StandardNiFiWebConfigurationContext.java    |  18 +-
 .../apache/nifi/web/StandardNiFiWebContext.java |  16 +-
 .../java/org/apache/nifi/web/UpdateResult.java  |  40 ++
 .../org/apache/nifi/web/api/AccessResource.java |   6 +-
 .../nifi/web/api/ApplicationResource.java       |   2 +-
 .../apache/nifi/web/api/ClusterResource.java    | 223 ------
 .../apache/nifi/web/api/ConnectionResource.java |  83 +--
 .../apache/nifi/web/api/ControllerResource.java |   4 +-
 .../nifi/web/api/ControllerServiceResource.java |  50 --
 .../org/apache/nifi/web/api/FlowResource.java   | 257 ++++++-
 .../org/apache/nifi/web/api/FunnelResource.java |  84 +--
 .../apache/nifi/web/api/InputPortResource.java  |  92 ++-
 .../org/apache/nifi/web/api/LabelResource.java  |  84 +--
 .../apache/nifi/web/api/OutputPortResource.java |  92 ++-
 .../nifi/web/api/ProcessGroupResource.java      | 668 ++++++------------
 .../apache/nifi/web/api/ProcessorResource.java  | 102 ++-
 .../web/api/RemoteProcessGroupResource.java     |  88 ++-
 .../apache/nifi/web/api/TemplateResource.java   |   8 -
 .../api/config/AccessDeniedExceptionMapper.java |   7 +-
 .../org/apache/nifi/web/api/dto/DtoFactory.java | 171 ++++-
 .../apache/nifi/web/api/dto/EntityFactory.java  | 155 +++++
 .../nifi/web/controller/ControllerFacade.java   |  17 +-
 .../org/apache/nifi/web/dao/TemplateDAO.java    |   3 +-
 .../web/dao/impl/StandardConnectionDAO.java     |  19 +-
 .../apache/nifi/web/filter/RequestLogger.java   |   4 +-
 .../src/main/resources/nifi-web-api-context.xml |  20 +-
 .../apache/nifi/integration/NiFiWebApiTest.java |  30 +-
 .../accesscontrol/AccessTokenEndpointTest.java  |   4 +-
 .../accesscontrol/AdminAccessControlTest.java   |  22 +-
 .../accesscontrol/DfmAccessControlTest.java     | 144 ++--
 .../ReadOnlyAccessControlTest.java              |  20 +-
 .../nifi-web/nifi-web-content-viewer/pom.xml    |   5 +
 .../nifi/web/ContentViewerController.java       |   2 +-
 .../web/StandardOptimisticLockingManager.java   |   3 +-
 .../nifi-web/nifi-web-security/pom.xml          |   4 +
 .../web/security/NiFiAuthenticationFilter.java  |   2 +-
 .../nifi/web/security/ProxiedEntitiesUtils.java |   2 +-
 .../anonymous/NiFiAnonymousUserFilter.java      |   5 +-
 .../security/jwt/JwtAuthenticationProvider.java |   4 +-
 .../security/node/NodeAuthorizedUserFilter.java |   5 +-
 .../security/otp/OtpAuthenticationProvider.java |   4 +-
 .../nifi/web/security/user/NiFiUserDetails.java |  92 ---
 .../nifi/web/security/user/NiFiUserUtils.java   |  89 ---
 .../x509/X509AuthenticationProvider.java        |  33 +-
 .../resources/nifi-web-security-context.xml     |   3 +-
 .../otp/OtpAuthenticationProviderTest.java      |   2 +-
 .../controllers/nf-ng-breadcrumbs-controller.js |  12 +-
 .../src/main/webapp/js/nf/canvas/nf-actions.js  | 171 ++---
 .../src/main/webapp/js/nf/canvas/nf-birdseye.js |  28 +-
 .../webapp/js/nf/canvas/nf-canvas-header.js     |  20 +-
 .../webapp/js/nf/canvas/nf-canvas-toolbar.js    |  93 +--
 .../webapp/js/nf/canvas/nf-canvas-toolbox.js    |  50 +-
 .../main/webapp/js/nf/canvas/nf-canvas-utils.js | 118 ++--
 .../src/main/webapp/js/nf/canvas/nf-canvas.js   |  29 +-
 .../main/webapp/js/nf/canvas/nf-connectable.js  |  10 +-
 .../js/nf/canvas/nf-connection-configuration.js |  66 +-
 .../main/webapp/js/nf/canvas/nf-connection.js   | 664 +++++++++---------
 .../main/webapp/js/nf/canvas/nf-context-menu.js | 115 ++-
 .../main/webapp/js/nf/canvas/nf-draggable.js    |  62 +-
 .../src/main/webapp/js/nf/canvas/nf-funnel.js   |  62 +-
 .../src/main/webapp/js/nf/canvas/nf-go-to.js    |  24 +-
 .../js/nf/canvas/nf-label-configuration.js      |   6 +-
 .../src/main/webapp/js/nf/canvas/nf-label.js    | 270 +++-----
 .../js/nf/canvas/nf-port-configuration.js       |  17 +-
 .../main/webapp/js/nf/canvas/nf-port-details.js |   2 +-
 .../src/main/webapp/js/nf/canvas/nf-port.js     | 228 +++---
 .../nf/canvas/nf-process-group-configuration.js |   8 +-
 .../js/nf/canvas/nf-process-group-details.js    |   2 +-
 .../webapp/js/nf/canvas/nf-process-group.js     | 691 +++++++++----------
 .../js/nf/canvas/nf-processor-configuration.js  |  16 +-
 .../main/webapp/js/nf/canvas/nf-processor.js    | 270 ++++----
 .../webapp/js/nf/canvas/nf-queue-listing.js     |   2 +-
 .../nf-remote-process-group-configuration.js    |   8 +-
 .../canvas/nf-remote-process-group-details.js   |   2 +-
 .../nf/canvas/nf-remote-process-group-ports.js  |  10 +-
 .../js/nf/canvas/nf-remote-process-group.js     | 689 +++++++++---------
 .../src/main/webapp/js/nf/canvas/nf-snippet.js  |  16 +-
 .../main/webapp/js/nf/nf-connection-details.js  |  16 +-
 .../main/webapp/js/nf/nf-processor-details.js   |   4 +-
 .../views/nf-ng-breadcrumbs-directive-view.html |   2 +-
 177 files changed, 6082 insertions(+), 4700 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-api/src/main/java/org/apache/nifi/authorization/Resource.java
----------------------------------------------------------------------
diff --git a/nifi-api/src/main/java/org/apache/nifi/authorization/Resource.java b/nifi-api/src/main/java/org/apache/nifi/authorization/Resource.java
index 7756bda..661b326 100644
--- a/nifi-api/src/main/java/org/apache/nifi/authorization/Resource.java
+++ b/nifi-api/src/main/java/org/apache/nifi/authorization/Resource.java
@@ -29,7 +29,7 @@ public interface Resource {
     String getIdentifier();
 
     /**
-     * The name of this resource.
+     * The name of this resource. May be null.
      *
      * @return name of this resource
      */

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/pom.xml
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/pom.xml b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/pom.xml
index c9a9c0e..2aac209 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/pom.xml
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/pom.xml
@@ -21,40 +21,6 @@
         <version>1.0.0-SNAPSHOT</version>
     </parent>
     <artifactId>nifi-administration</artifactId>
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-            </resource>
-            <resource>
-                <directory>src/main/xsd</directory>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>jaxb2-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>current</id>
-                        <goals>
-                            <goal>xjc</goal>
-                        </goals>
-                        <configuration>
-                            <packageName>org.apache.nifi.authorization.generated</packageName>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-checkstyle-plugin</artifactId>
-                <configuration>
-                    <excludes>**/authorization/generated/*.java,</excludes>
-                </configuration>
-            </plugin>            
-        </plugins>
-    </build>
     <dependencies>
         <dependency>
             <groupId>org.apache.nifi</groupId>
@@ -116,9 +82,5 @@
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-collections4</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.apache.nifi</groupId>
-            <artifactId>nifi-expression-language</artifactId>
-        </dependency>
     </dependencies>
 </project>

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/authorization/AuthorizerFactoryBean.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/authorization/AuthorizerFactoryBean.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/authorization/AuthorizerFactoryBean.java
deleted file mode 100644
index 3d3e826..0000000
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/authorization/AuthorizerFactoryBean.java
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
- * 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.authorization;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.nifi.authorization.annotation.AuthorizerContext;
-import org.apache.nifi.authorization.exception.AuthorizationAccessException;
-import org.apache.nifi.authorization.exception.AuthorizerCreationException;
-import org.apache.nifi.authorization.exception.AuthorizerDestructionException;
-import org.apache.nifi.authorization.generated.Authorizers;
-import org.apache.nifi.authorization.generated.Property;
-import org.apache.nifi.nar.ExtensionManager;
-import org.apache.nifi.nar.NarCloseable;
-import org.apache.nifi.util.NiFiProperties;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.DisposableBean;
-import org.springframework.beans.factory.FactoryBean;
-import org.xml.sax.SAXException;
-
-import javax.xml.XMLConstants;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-import java.io.File;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Factory bean for loading the configured authorizer.
- */
-public class AuthorizerFactoryBean implements FactoryBean, DisposableBean, AuthorizerLookup {
-
-    private static final Logger logger = LoggerFactory.getLogger(AuthorizerFactoryBean.class);
-    private static final String AUTHORIZERS_XSD = "/authorizers.xsd";
-    private static final String JAXB_GENERATED_PATH = "org.apache.nifi.authorization.generated";
-    private static final JAXBContext JAXB_CONTEXT = initializeJaxbContext();
-
-    /**
-     * Load the JAXBContext.
-     */
-    private static JAXBContext initializeJaxbContext() {
-        try {
-            return JAXBContext.newInstance(JAXB_GENERATED_PATH, AuthorizerFactoryBean.class.getClassLoader());
-        } catch (JAXBException e) {
-            throw new RuntimeException("Unable to create JAXBContext.");
-        }
-    }
-
-    private Authorizer authorizer;
-    private NiFiProperties properties;
-    private final Map<String, Authorizer> authorizers = new HashMap<>();
-
-    @Override
-    public Authorizer getAuthorizer(String identifier) {
-        return authorizers.get(identifier);
-    }
-
-    @Override
-    public Object getObject() throws Exception {
-        if (authorizer == null) {
-            // look up the authorizer to use
-            final String authorizerIdentifier = properties.getProperty(NiFiProperties.SECURITY_USER_AUTHORIZER);
-
-            // ensure the authorizer class name was specified
-            if (StringUtils.isBlank(authorizerIdentifier)) {
-                // if configured for ssl, the authorizer must be specified
-                if (properties.getSslPort() != null) {
-                    throw new Exception("When running securely, the authorizer identifier must be specified in the nifi properties file.");
-                }
-
-                // use a default authorizer... only allowable when running not securely
-                authorizer = createDefaultAuthorizer();
-            } else {
-                final Authorizers authorizerConfiguration = loadAuthorizersConfiguration();
-
-                // create each authorizer
-                for (final org.apache.nifi.authorization.generated.Authorizer authorizer : authorizerConfiguration.getAuthorizer()) {
-                    authorizers.put(authorizer.getIdentifier(), createAuthorizer(authorizer.getIdentifier(), authorizer.getClazz()));
-                }
-
-                // configure each authorizer
-                for (final org.apache.nifi.authorization.generated.Authorizer provider : authorizerConfiguration.getAuthorizer()) {
-                    final Authorizer instance = authorizers.get(provider.getIdentifier());
-                    instance.onConfigured(loadAuthorizerConfiguration(provider));
-                }
-
-                // get the authorizer instance
-                authorizer = getAuthorizer(authorizerIdentifier);
-
-                // ensure it was found
-                if (authorizer == null) {
-                    throw new Exception(String.format("The specified authorizer '%s' could not be found.", authorizerIdentifier));
-                }
-            }
-        }
-
-        return authorizer;
-    }
-
-    private Authorizers loadAuthorizersConfiguration() throws Exception {
-        final File authorizersConfigurationFile = properties.getAuthorizerConfiguraitonFile();
-
-        // load the authorizers from the specified file
-        if (authorizersConfigurationFile.exists()) {
-            try {
-                // find the schema
-                final SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
-                final Schema schema = schemaFactory.newSchema(Authorizers.class.getResource(AUTHORIZERS_XSD));
-
-                // attempt to unmarshal
-                final Unmarshaller unmarshaller = JAXB_CONTEXT.createUnmarshaller();
-                unmarshaller.setSchema(schema);
-                final JAXBElement<Authorizers> element = unmarshaller.unmarshal(new StreamSource(authorizersConfigurationFile), Authorizers.class);
-                return element.getValue();
-            } catch (SAXException | JAXBException e) {
-                throw new Exception("Unable to load the authorizer configuration file at: " + authorizersConfigurationFile.getAbsolutePath(), e);
-            }
-        } else {
-            throw new Exception("Unable to find the authorizer configuration file at " + authorizersConfigurationFile.getAbsolutePath());
-        }
-    }
-
-    private Authorizer createAuthorizer(final String identifier, final String authorizerClassName) throws Exception {
-        // get the classloader for the specified authorizer
-        final ClassLoader authorizerClassLoader = ExtensionManager.getClassLoader(authorizerClassName);
-        if (authorizerClassLoader == null) {
-            throw new Exception(String.format("The specified authorizer class '%s' is not known to this nifi.", authorizerClassName));
-        }
-
-        // get the current context classloader
-        final ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
-
-        final Authorizer instance;
-        try {
-            // set the appropriate class loader
-            Thread.currentThread().setContextClassLoader(authorizerClassLoader);
-
-            // attempt to load the class
-            Class<?> rawAuthorizerClass = Class.forName(authorizerClassName, true, authorizerClassLoader);
-            Class<? extends Authorizer> authorizerClass = rawAuthorizerClass.asSubclass(Authorizer.class);
-
-            // otherwise create a new instance
-            Constructor constructor = authorizerClass.getConstructor();
-            instance = (Authorizer) constructor.newInstance();
-
-            // method injection
-            performMethodInjection(instance, authorizerClass);
-
-            // field injection
-            performFieldInjection(instance, authorizerClass);
-
-            // call post construction lifecycle event
-            instance.initialize(new StandardAuthorizerInitializationContext(identifier, this));
-        } finally {
-            if (currentClassLoader != null) {
-                Thread.currentThread().setContextClassLoader(currentClassLoader);
-            }
-        }
-
-        return withNarLoader(instance);
-    }
-
-    private AuthorizerConfigurationContext loadAuthorizerConfiguration(final org.apache.nifi.authorization.generated.Authorizer authorizer) {
-        final Map<String, String> authorizerProperties = new HashMap<>();
-
-        for (final Property property : authorizer.getProperty()) {
-            authorizerProperties.put(property.getName(), property.getValue());
-        }
-
-        return new StandardAuthorizerConfigurationContext(authorizer.getIdentifier(), authorizerProperties);
-    }
-
-    private void performMethodInjection(final Authorizer instance, final Class authorizerClass) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
-        for (final Method method : authorizerClass.getMethods()) {
-            if (method.isAnnotationPresent(AuthorizerContext.class)) {
-                // make the method accessible
-                final boolean isAccessible = method.isAccessible();
-                method.setAccessible(true);
-
-                try {
-                    final Class<?>[] argumentTypes = method.getParameterTypes();
-
-                    // look for setters (single argument)
-                    if (argumentTypes.length == 1) {
-                        final Class<?> argumentType = argumentTypes[0];
-
-                        // look for well known types
-                        if (NiFiProperties.class.isAssignableFrom(argumentType)) {
-                            // nifi properties injection
-                            method.invoke(instance, properties);
-                        }
-                    }
-                } finally {
-                    method.setAccessible(isAccessible);
-                }
-            }
-        }
-
-        final Class parentClass = authorizerClass.getSuperclass();
-        if (parentClass != null && Authorizer.class.isAssignableFrom(parentClass)) {
-            performMethodInjection(instance, parentClass);
-        }
-    }
-
-    private void performFieldInjection(final Authorizer instance, final Class authorizerClass) throws IllegalArgumentException, IllegalAccessException {
-        for (final Field field : authorizerClass.getDeclaredFields()) {
-            if (field.isAnnotationPresent(AuthorizerContext.class)) {
-                // make the method accessible
-                final boolean isAccessible = field.isAccessible();
-                field.setAccessible(true);
-
-                try {
-                    // get the type
-                    final Class<?> fieldType = field.getType();
-
-                    // only consider this field if it isn't set yet
-                    if (field.get(instance) == null) {
-                        // look for well known types
-                        if (NiFiProperties.class.isAssignableFrom(fieldType)) {
-                            // nifi properties injection
-                            field.set(instance, properties);
-                        }
-                    }
-
-                } finally {
-                    field.setAccessible(isAccessible);
-                }
-            }
-        }
-
-        final Class parentClass = authorizerClass.getSuperclass();
-        if (parentClass != null && Authorizer.class.isAssignableFrom(parentClass)) {
-            performFieldInjection(instance, parentClass);
-        }
-    }
-
-    /**
-     * @return a default Authorizer to use when running unsecurely with no authorizer configured
-     */
-    private Authorizer createDefaultAuthorizer() {
-        return new Authorizer() {
-            @Override
-            public AuthorizationResult authorize(final AuthorizationRequest request) throws AuthorizationAccessException {
-                return AuthorizationResult.approved();
-            }
-
-            @Override
-            public void initialize(AuthorizerInitializationContext initializationContext) throws AuthorizerCreationException {
-            }
-
-            @Override
-            public void onConfigured(AuthorizerConfigurationContext configurationContext) throws AuthorizerCreationException {
-            }
-
-            @Override
-            public void preDestruction() throws AuthorizerDestructionException {
-            }
-        };
-    }
-
-    /**
-     * Decorates the base authorizer to ensure the nar context classloader is used when invoking the underlying methods.
-     *
-     * @param baseAuthorizer base authorizer
-     * @return authorizer
-     */
-    public Authorizer withNarLoader(final Authorizer baseAuthorizer) {
-        return new Authorizer() {
-            @Override
-            public AuthorizationResult authorize(final AuthorizationRequest request) throws AuthorizationAccessException {
-                try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) {
-                    return baseAuthorizer.authorize(request);
-                }
-            }
-
-            @Override
-            public void initialize(AuthorizerInitializationContext initializationContext) throws AuthorizerCreationException {
-                try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) {
-                    baseAuthorizer.initialize(initializationContext);
-                }
-            }
-
-            @Override
-            public void onConfigured(AuthorizerConfigurationContext configurationContext) throws AuthorizerCreationException {
-                try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) {
-                    baseAuthorizer.onConfigured(configurationContext);
-                }
-            }
-
-            @Override
-            public void preDestruction() throws AuthorizerDestructionException {
-                try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) {
-                    baseAuthorizer.preDestruction();
-                }
-            }
-        };
-    }
-
-    @Override
-    public Class getObjectType() {
-        return Authorizer.class;
-    }
-
-    @Override
-    public boolean isSingleton() {
-        return true;
-    }
-
-    @Override
-    public void destroy() throws Exception {
-        if (authorizer != null) {
-            authorizer.preDestruction();
-        }
-    }
-
-    public void setProperties(NiFiProperties properties) {
-        this.properties = properties;
-    }
-}

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/authorization/StandardAuthorizerConfigurationContext.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/authorization/StandardAuthorizerConfigurationContext.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/authorization/StandardAuthorizerConfigurationContext.java
deleted file mode 100644
index 3010c92..0000000
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/authorization/StandardAuthorizerConfigurationContext.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.authorization;
-
-import org.apache.nifi.attribute.expression.language.StandardPropertyValue;
-import org.apache.nifi.components.PropertyValue;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- *
- */
-public class StandardAuthorizerConfigurationContext implements AuthorizerConfigurationContext {
-
-    private final String identifier;
-    private final Map<String, String> properties;
-
-    public StandardAuthorizerConfigurationContext(String identifier, Map<String, String> properties) {
-        this.identifier = identifier;
-        this.properties = Collections.unmodifiableMap(new HashMap<String, String>(properties));
-    }
-
-    @Override
-    public String getIdentifier() {
-        return identifier;
-    }
-
-    @Override
-    public Map<String, String> getProperties() {
-        return properties;
-    }
-
-    @Override
-    public PropertyValue getProperty(String property) {
-        return new StandardPropertyValue(properties.get(property), null);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/authorization/StandardAuthorizerInitializationContext.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/authorization/StandardAuthorizerInitializationContext.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/authorization/StandardAuthorizerInitializationContext.java
deleted file mode 100644
index 344f49c..0000000
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/authorization/StandardAuthorizerInitializationContext.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.authorization;
-
-/**
- *
- */
-public class StandardAuthorizerInitializationContext implements AuthorizerInitializationContext {
-
-    private final String identifier;
-    private final AuthorizerLookup authorizerLookup;
-
-    public StandardAuthorizerInitializationContext(String identifier, AuthorizerLookup authorizerLookup) {
-        this.identifier = identifier;
-        this.authorizerLookup = authorizerLookup;
-    }
-
-    @Override
-    public String getIdentifier() {
-        return identifier;
-    }
-
-    public AuthorizerLookup getAuthorizerLookup() {
-        return authorizerLookup;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/user/NiFiUser.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/user/NiFiUser.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/user/NiFiUser.java
deleted file mode 100644
index 3a919ba..0000000
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/user/NiFiUser.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * 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.user;
-
-import java.io.Serializable;
-import java.util.Objects;
-
-/**
- * An NiFiUser.
- */
-public class NiFiUser implements Serializable {
-
-    public static final NiFiUser ANONYMOUS = new NiFiUser("anonymous");
-
-    private String identity;
-    private String userName;
-
-    private NiFiUser chain;
-
-    public NiFiUser(String identity) {
-        this(identity, identity, null);
-    }
-
-    public NiFiUser(String identity, String userName) {
-        this(identity, userName, null);
-    }
-
-    public NiFiUser(String identity, NiFiUser chain) {
-        this(identity, identity, chain);
-    }
-
-    public NiFiUser(String identity, String userName, NiFiUser chain) {
-        this.identity = identity;
-        this.userName = userName;
-        this.chain = chain;
-    }
-
-    /* getters / setters */
-
-    public String getIdentity() {
-        return identity;
-    }
-
-    public String getUserName() {
-        return userName;
-    }
-
-    public NiFiUser getChain() {
-        return chain;
-    }
-
-    public boolean isAnonymous() {
-        return this == ANONYMOUS;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == null) {
-            return false;
-        }
-        if (getClass() != obj.getClass()) {
-            return false;
-        }
-        final NiFiUser other = (NiFiUser) obj;
-        if (!Objects.equals(this.identity, other.identity)) {
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        int hash = 7;
-        hash = 53 * hash + Objects.hashCode(this.identity);
-        return hash;
-    }
-
-    @Override
-    public String toString() {
-        return String.format("identity[%s], userName[%s]", getIdentity(), getUserName(), ", ");
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/user/NiFiUserGroup.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/user/NiFiUserGroup.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/user/NiFiUserGroup.java
index 7586fd1..e4b7130 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/user/NiFiUserGroup.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/user/NiFiUserGroup.java
@@ -16,6 +16,8 @@
  */
 package org.apache.nifi.user;
 
+import org.apache.nifi.authorization.user.NiFiUser;
+
 import java.util.Set;
 
 /**

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/resources/nifi-administration-context.xml
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/resources/nifi-administration-context.xml b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/resources/nifi-administration-context.xml
index deec073..e717686 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/resources/nifi-administration-context.xml
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/resources/nifi-administration-context.xml
@@ -18,11 +18,6 @@
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
 
-    <!-- user/entity authorizer -->
-    <bean id="authorizer" class="org.apache.nifi.authorization.AuthorizerFactoryBean">
-        <property name="properties" ref="nifiProperties"/>
-    </bean>
-
     <!-- initialize the user key data source -->
     <bean id="keyDataSource" class="org.apache.nifi.admin.KeyDataSourceFactoryBean" destroy-method="shutdown">
         <property name="properties" ref="nifiProperties"/>

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/xsd/authorizers.xsd
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/xsd/authorizers.xsd b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/xsd/authorizers.xsd
deleted file mode 100644
index 4b68b00..0000000
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/xsd/authorizers.xsd
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0"?>
-<!--
-  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.
--->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-    <!-- role -->
-    <xs:complexType name="Authorizer">
-        <xs:sequence>
-            <xs:element name="identifier" type="NonEmptyStringType"/>
-            <xs:element name="class" type="NonEmptyStringType"/>
-            <xs:element name="property" type="Property" minOccurs="0" maxOccurs="unbounded" />
-        </xs:sequence>
-    </xs:complexType>
-
-    <!-- Name/Value properties-->
-    <xs:complexType name="Property">
-        <xs:simpleContent>
-            <xs:extension base="xs:string">
-                <xs:attribute name="name" type="NonEmptyStringType"></xs:attribute>
-            </xs:extension>
-        </xs:simpleContent>
-    </xs:complexType>
-
-    <xs:simpleType name="NonEmptyStringType">
-        <xs:restriction base="xs:string">
-            <xs:minLength value="1"/>
-        </xs:restriction>
-    </xs:simpleType>
-
-    <!-- users -->
-    <xs:element name="authorizers">
-        <xs:complexType>
-            <xs:sequence>
-                <xs:element name="authorizer" type="Authorizer" minOccurs="0" maxOccurs="unbounded"/>
-            </xs:sequence>
-        </xs:complexType>
-    </xs:element>
-</xs:schema>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/AccessPolicyDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/AccessPolicyDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/AccessPolicyDTO.java
new file mode 100644
index 0000000..1564362
--- /dev/null
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/AccessPolicyDTO.java
@@ -0,0 +1,62 @@
+/*
+ * 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.web.api.dto;
+
+import com.wordnik.swagger.annotations.ApiModelProperty;
+
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * Details for the access configuration.
+ */
+@XmlType(name = "accessPolicy")
+public class AccessPolicyDTO {
+
+    private Boolean canRead;
+    private Boolean canWrite;
+
+    /**
+     * @return Indicates whether the user can read a given resource.
+     */
+    @ApiModelProperty(
+            value = "Indicates whether the user can read a given resource.",
+            readOnly = true
+    )
+    public Boolean getCanRead() {
+        return canRead;
+    }
+
+    public void setCanRead(Boolean canRead) {
+        this.canRead = canRead;
+    }
+
+    /**
+     * @return Indicates whether the user can write a given resource.
+     */
+    @ApiModelProperty(
+            value = "Indicates whether the user can write a given resource.",
+            readOnly = true
+    )
+    public Boolean getCanWrite() {
+        return canWrite;
+    }
+
+    public void setCanWrite(Boolean canWrite) {
+        this.canWrite = canWrite;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ComponentDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ComponentDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ComponentDTO.java
new file mode 100644
index 0000000..ca5e06f
--- /dev/null
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ComponentDTO.java
@@ -0,0 +1,94 @@
+/*
+ * 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.web.api.dto;
+
+import com.wordnik.swagger.annotations.ApiModelProperty;
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * Base class for all nifi components.
+ */
+@XmlType(name = "component")
+public class ComponentDTO {
+
+    private String id;
+    private String uri;
+    private String parentGroupId;
+    private PositionDTO position;
+
+    /**
+     * The id for this component.
+     *
+     * @return The id
+     */
+    @ApiModelProperty(
+            value = "The id of the component."
+    )
+    public String getId() {
+        return this.id;
+    }
+
+    public void setId(final String id) {
+        this.id = id;
+    }
+
+    /**
+     * @return id for the parent group of this component if applicable, null otherwise
+     */
+    @ApiModelProperty(
+            value = "The id of parent process group of this component if applicable."
+    )
+    public String getParentGroupId() {
+        return parentGroupId;
+    }
+
+    public void setParentGroupId(String parentGroupId) {
+        this.parentGroupId = parentGroupId;
+    }
+
+    /**
+     * The uri for linking to this component in this NiFi.
+     *
+     * @return The uri
+     */
+    @ApiModelProperty(
+            value = "The URI for futures requests to the component."
+    )
+    public String getUri() {
+        return uri;
+    }
+
+    public void setUri(String uri) {
+        this.uri = uri;
+    }
+
+    /**
+     * The position of this component in the UI if applicable, null otherwise.
+     *
+     * @return The position
+     */
+    @ApiModelProperty(
+        value = "The position of this component in the UI if applicable."
+    )
+    public PositionDTO getPosition() {
+        return position;
+    }
+
+    public void setPosition(final PositionDTO position) {
+        this.position = position;
+    }
+}

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ConnectionDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ConnectionDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ConnectionDTO.java
index 96da9e3..e4ea0cc 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ConnectionDTO.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ConnectionDTO.java
@@ -25,7 +25,7 @@ import javax.xml.bind.annotation.XmlType;
  * A connection between two connectable components.
  */
 @XmlType(name = "connection")
-public class ConnectionDTO extends NiFiComponentDTO {
+public class ConnectionDTO extends ComponentDTO {
 
     private ConnectableDTO source;
     private ConnectableDTO destination;

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ControllerServiceDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ControllerServiceDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ControllerServiceDTO.java
index 5d51698..f40e181 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ControllerServiceDTO.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ControllerServiceDTO.java
@@ -26,7 +26,7 @@ import javax.xml.bind.annotation.XmlType;
  * A Controller Service that can be shared by other components
  */
 @XmlType(name = "controllerService")
-public class ControllerServiceDTO extends NiFiComponentDTO {
+public class ControllerServiceDTO extends ComponentDTO {
 
     private String name;
     private String type;

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/DimensionsDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/DimensionsDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/DimensionsDTO.java
new file mode 100644
index 0000000..58df0c0
--- /dev/null
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/DimensionsDTO.java
@@ -0,0 +1,61 @@
+/*
+ * 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.web.api.dto;
+
+import com.wordnik.swagger.annotations.ApiModelProperty;
+
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * A position on the canvas.
+ */
+@XmlType(name = "dimensions")
+public class DimensionsDTO {
+
+    private Double width;
+    private Double height;
+
+    /* getters / setters */
+
+    /**
+     * @return height of the label in pixels when at a 1:1 scale
+     */
+    @ApiModelProperty(
+        value = "The height of the label in pixels when at a 1:1 scale."
+    )
+    public Double getHeight() {
+        return height;
+    }
+
+    public void setHeight(Double height) {
+        this.height = height;
+    }
+
+    /**
+     * @return width of the label in pixels when at a 1:1 scale
+     */
+    @ApiModelProperty(
+        value = "The width of the label in pixels when at a 1:1 scale."
+    )
+    public Double getWidth() {
+        return width;
+    }
+
+    public void setWidth(Double width) {
+        this.width = width;
+    }
+}

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/FunnelDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/FunnelDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/FunnelDTO.java
index 1240501..4687737 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/FunnelDTO.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/FunnelDTO.java
@@ -22,7 +22,7 @@ import javax.xml.bind.annotation.XmlType;
  * Details of a funnel.
  */
 @XmlType(name = "funnel")
-public class FunnelDTO extends NiFiComponentDTO {
+public class FunnelDTO extends ComponentDTO {
 
     public FunnelDTO() {
     }

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/LabelDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/LabelDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/LabelDTO.java
index e9016db..063ff65 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/LabelDTO.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/LabelDTO.java
@@ -25,7 +25,7 @@ import javax.xml.bind.annotation.XmlType;
  * Details of a label.
  */
 @XmlType(name = "label")
-public class LabelDTO extends NiFiComponentDTO {
+public class LabelDTO extends ComponentDTO {
 
     private String label;
 

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/NiFiComponentDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/NiFiComponentDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/NiFiComponentDTO.java
deleted file mode 100644
index e89fb5d..0000000
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/NiFiComponentDTO.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * 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.web.api.dto;
-
-import com.wordnik.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlType;
-
-/**
- * Base class for all nifi components.
- */
-@XmlType(name = "nifiComponent")
-public class NiFiComponentDTO {
-
-    private String id;
-    private String uri;
-    private PositionDTO position;
-    private String parentGroupId;
-
-    public NiFiComponentDTO() {
-    }
-
-    public NiFiComponentDTO(final String id) {
-        this.id = id;
-    }
-
-    public NiFiComponentDTO(final String id, final double x, final double y) {
-        this.id = id;
-        this.position = new PositionDTO(x, y);
-    }
-
-    /**
-     * The id for this component.
-     *
-     * @return The id
-     */
-    @ApiModelProperty(
-            value = "The id of the component."
-    )
-    public String getId() {
-        return this.id;
-    }
-
-    public void setId(final String id) {
-        this.id = id;
-    }
-
-    /**
-     * @return id for the parent group of this component if applicable, null otherwise
-     */
-    @ApiModelProperty(
-            value = "The id of parent process group of this component if applicable."
-    )
-    public String getParentGroupId() {
-        return parentGroupId;
-    }
-
-    public void setParentGroupId(String parentGroupId) {
-        this.parentGroupId = parentGroupId;
-    }
-
-    /**
-     * The uri for linking to this component in this NiFi.
-     *
-     * @return The uri
-     */
-    @ApiModelProperty(
-            value = "The URI for futures requests to the component."
-    )
-    public String getUri() {
-        return uri;
-    }
-
-    public void setUri(String uri) {
-        this.uri = uri;
-    }
-
-    public void setPosition(final PositionDTO position) {
-        this.position = position;
-    }
-
-    /**
-     * The position of this component in the UI if applicable, null otherwise.
-     *
-     * @return The position
-     */
-    @ApiModelProperty(
-            value = "The position of this component in the UI if applicable."
-    )
-    public PositionDTO getPosition() {
-        return position;
-    }
-}

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/PortDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/PortDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/PortDTO.java
index 489ed0c..f8e4081 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/PortDTO.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/PortDTO.java
@@ -25,7 +25,7 @@ import javax.xml.bind.annotation.XmlType;
  * The details for a port within this NiFi flow.
  */
 @XmlType(name = "port")
-public class PortDTO extends NiFiComponentDTO {
+public class PortDTO extends ComponentDTO {
 
     private String name;
     private String comments;

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ProcessGroupDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ProcessGroupDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ProcessGroupDTO.java
index 93c4ea9..224db57 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ProcessGroupDTO.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ProcessGroupDTO.java
@@ -23,14 +23,12 @@ import javax.xml.bind.annotation.XmlType;
  * The details for a process group within this NiFi flow.
  */
 @XmlType(name = "processGroup")
-public class ProcessGroupDTO extends NiFiComponentDTO {
+public class ProcessGroupDTO extends ComponentDTO {
 
     private String name;
     private String comments;
     private Boolean running;
 
-    private ProcessGroupDTO parent;
-
     private Integer runningCount;
     private Integer stoppedCount;
     private Integer invalidCount;
@@ -64,22 +62,6 @@ public class ProcessGroupDTO extends NiFiComponentDTO {
     }
 
     /**
-     * This Process Group's parent
-     *
-     * @return This Process Group's parent
-     */
-    @ApiModelProperty(
-            value = "The part of the process group."
-    )
-    public ProcessGroupDTO getParent() {
-        return parent;
-    }
-
-    public void setParent(ProcessGroupDTO parent) {
-        this.parent = parent;
-    }
-
-    /**
      * @return comments for this process group
      */
     @ApiModelProperty(

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ProcessorDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ProcessorDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ProcessorDTO.java
index b0b9daa..dbd06a3 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ProcessorDTO.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ProcessorDTO.java
@@ -26,7 +26,7 @@ import javax.xml.bind.annotation.XmlType;
  * Details for a processor within this NiFi.
  */
 @XmlType(name = "processor")
-public class ProcessorDTO extends NiFiComponentDTO {
+public class ProcessorDTO extends ComponentDTO {
 
     private String name;
     private String type;

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/RemoteProcessGroupDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/RemoteProcessGroupDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/RemoteProcessGroupDTO.java
index 2e30001..b303d4d 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/RemoteProcessGroupDTO.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/RemoteProcessGroupDTO.java
@@ -27,7 +27,7 @@ import org.apache.nifi.web.api.dto.util.DateTimeAdapter;
  * Details of a remote process group in this NiFi.
  */
 @XmlType(name = "remoteProcessGroup")
-public class RemoteProcessGroupDTO extends NiFiComponentDTO {
+public class RemoteProcessGroupDTO extends ComponentDTO {
 
     private String targetUri;
     private Boolean targetSecure;

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ReportingTaskDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ReportingTaskDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ReportingTaskDTO.java
index 182535d..5972ac7 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ReportingTaskDTO.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ReportingTaskDTO.java
@@ -26,7 +26,7 @@ import javax.xml.bind.annotation.XmlType;
  * Component that is capable of reporting internal NiFi state to an external service
  */
 @XmlType(name = "reportingTask")
-public class ReportingTaskDTO extends NiFiComponentDTO {
+public class ReportingTaskDTO extends ComponentDTO {
 
     private String name;
     private String type;

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/SnippetDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/SnippetDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/SnippetDTO.java
index 431df17..bf5d319 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/SnippetDTO.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/SnippetDTO.java
@@ -17,9 +17,10 @@
 package org.apache.nifi.web.api.dto;
 
 import com.wordnik.swagger.annotations.ApiModelProperty;
+
+import javax.xml.bind.annotation.XmlType;
 import java.util.HashSet;
 import java.util.Set;
-import javax.xml.bind.annotation.XmlType;
 
 /**
  * The contents of a snippet of a flow.
@@ -42,8 +43,6 @@ public class SnippetDTO {
     private Set<String> labels = new HashSet<>();
     private Set<String> funnels = new HashSet<>();
 
-    private FlowSnippetDTO contents;
-
     /**
      * @return id of this snippet
      */
@@ -230,18 +229,4 @@ public class SnippetDTO {
         this.remoteProcessGroups = remoteProcessGroups;
     }
 
-    /**
-     * @return the contents of the configuration for this snippet
-     */
-    @ApiModelProperty(
-            value = "The contents of the configuration for the snippet."
-    )
-    public FlowSnippetDTO getContents() {
-        return contents;
-    }
-
-    public void setContents(FlowSnippetDTO contents) {
-        this.contents = contents;
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/flow/FlowBreadcrumbDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/flow/FlowBreadcrumbDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/flow/FlowBreadcrumbDTO.java
new file mode 100644
index 0000000..afdfb64
--- /dev/null
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/flow/FlowBreadcrumbDTO.java
@@ -0,0 +1,80 @@
+/*
+ * 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.web.api.dto.flow;
+
+import com.wordnik.swagger.annotations.ApiModelProperty;
+
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * Breadcrumb for the flow.
+ */
+@XmlType(name = "flowBreadcrumb")
+public class FlowBreadcrumbDTO {
+
+    private String id;
+    private String name;
+    private FlowBreadcrumbDTO parentBreadcrumb;
+
+    /**
+     * The id for this group.
+     *
+     * @return The id
+     */
+    @ApiModelProperty(
+        value = "The id of the group."
+    )
+    public String getId() {
+        return this.id;
+    }
+
+    public void setId(final String id) {
+        this.id = id;
+    }
+
+    /**
+     * The name for this group.
+     *
+     * @return The name
+     */
+    @ApiModelProperty(
+        value = "The id of the group."
+    )
+    public String getName() {
+        return this.name;
+    }
+
+    public void setName(final String name) {
+        this.name = name;
+    }
+
+    /**
+     * The parent breadcrumb for this breadcrumb.
+     *
+     * @return The parent breadcrumb for this breadcrumb
+     */
+    @ApiModelProperty(
+        value = "The parent breadcrumb for this breadcrumb."
+    )
+    public FlowBreadcrumbDTO getParentBreadcrumb() {
+        return parentBreadcrumb;
+    }
+
+    public void setParentBreadcrumb(FlowBreadcrumbDTO parentBreadcrumb) {
+        this.parentBreadcrumb = parentBreadcrumb;
+    }
+}

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/flow/FlowDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/flow/FlowDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/flow/FlowDTO.java
new file mode 100644
index 0000000..a3a3ae7
--- /dev/null
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/flow/FlowDTO.java
@@ -0,0 +1,174 @@
+/*
+ * 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.web.api.dto.flow;
+
+import com.wordnik.swagger.annotations.ApiModelProperty;
+import org.apache.nifi.web.api.entity.ConnectionEntity;
+import org.apache.nifi.web.api.entity.ControllerServiceEntity;
+import org.apache.nifi.web.api.entity.FunnelEntity;
+import org.apache.nifi.web.api.entity.LabelEntity;
+import org.apache.nifi.web.api.entity.PortEntity;
+import org.apache.nifi.web.api.entity.ProcessGroupEntity;
+import org.apache.nifi.web.api.entity.ProcessorEntity;
+import org.apache.nifi.web.api.entity.RemoteProcessGroupEntity;
+
+import javax.xml.bind.annotation.XmlType;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+/**
+ * The structure of the flow.
+ */
+@XmlType(name = "flow")
+public class FlowDTO {
+
+    private Set<ProcessGroupEntity> processGroups = new LinkedHashSet<>();
+    private Set<RemoteProcessGroupEntity> remoteProcessGroups = new LinkedHashSet<>();
+    private Set<ProcessorEntity> processors = new LinkedHashSet<>();
+    private Set<PortEntity> inputPorts = new LinkedHashSet<>();
+    private Set<PortEntity> outputPorts = new LinkedHashSet<>();
+    private Set<ConnectionEntity> connections = new LinkedHashSet<>();
+    private Set<LabelEntity> labels = new LinkedHashSet<>();
+    private Set<FunnelEntity> funnels = new LinkedHashSet<>();
+    private Set<ControllerServiceEntity> controllerServices = new LinkedHashSet<>();
+
+    /**
+     * @return connections in this flow
+     */
+    @ApiModelProperty(
+            value = "The connections in this flow."
+    )
+    public Set<ConnectionEntity> getConnections() {
+        return connections;
+    }
+
+    public void setConnections(Set<ConnectionEntity> connections) {
+        this.connections = connections;
+    }
+
+    /**
+     * @return input ports in this flow
+     */
+    @ApiModelProperty(
+            value = "The input ports in this flow."
+    )
+    public Set<PortEntity> getInputPorts() {
+        return inputPorts;
+    }
+
+    public void setInputPorts(Set<PortEntity> inputPorts) {
+        this.inputPorts = inputPorts;
+    }
+
+    /**
+     * @return labels in this flow
+     */
+    @ApiModelProperty(
+            value = "The labels in this flow."
+    )
+    public Set<LabelEntity> getLabels() {
+        return labels;
+    }
+
+    public void setLabels(Set<LabelEntity> labels) {
+        this.labels = labels;
+    }
+
+    /**
+     * @return funnels in this flow
+     */
+    @ApiModelProperty(
+            value = "The funnels in this flow."
+    )
+    public Set<FunnelEntity> getFunnels() {
+        return funnels;
+    }
+
+    public void setFunnels(Set<FunnelEntity> funnels) {
+        this.funnels = funnels;
+    }
+
+    /**
+     * @return output ports in this flow
+     */
+    @ApiModelProperty(
+            value = "The output ports in this flow."
+    )
+    public Set<PortEntity> getOutputPorts() {
+        return outputPorts;
+    }
+
+    public void setOutputPorts(Set<PortEntity> outputPorts) {
+        this.outputPorts = outputPorts;
+    }
+
+    /**
+     * @return process groups in this flow
+     */
+    @ApiModelProperty(
+            value = "The process groups in this flow."
+    )
+    public Set<ProcessGroupEntity> getProcessGroups() {
+        return processGroups;
+    }
+
+    public void setProcessGroups(Set<ProcessGroupEntity> processGroups) {
+        this.processGroups = processGroups;
+    }
+
+    /**
+     * @return processors in this flow
+     */
+    @ApiModelProperty(
+            value = "The processors in this flow."
+    )
+    public Set<ProcessorEntity> getProcessors() {
+        return processors;
+    }
+
+    public void setProcessors(Set<ProcessorEntity> processors) {
+        this.processors = processors;
+    }
+
+    /**
+     * @return remote process groups in this flow
+     */
+    @ApiModelProperty(
+            value = "The remote process groups in this flow."
+    )
+    public Set<RemoteProcessGroupEntity> getRemoteProcessGroups() {
+        return remoteProcessGroups;
+    }
+
+    public void setRemoteProcessGroups(Set<RemoteProcessGroupEntity> remoteProcessGroups) {
+        this.remoteProcessGroups = remoteProcessGroups;
+    }
+
+    /**
+     * @return the Controller Services in this flow
+     */
+    @ApiModelProperty(
+            value = "The controller services in this flow."
+    )
+    public Set<ControllerServiceEntity> getControllerServices() {
+        return controllerServices;
+    }
+
+    public void setControllerServices(Set<ControllerServiceEntity> controllerServices) {
+        this.controllerServices = controllerServices;
+    }
+}

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/flow/ProcessGroupFlowDTO.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/flow/ProcessGroupFlowDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/flow/ProcessGroupFlowDTO.java
new file mode 100644
index 0000000..b651efc
--- /dev/null
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/flow/ProcessGroupFlowDTO.java
@@ -0,0 +1,112 @@
+/*
+ * 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.web.api.dto.flow;
+
+import com.wordnik.swagger.annotations.ApiModelProperty;
+
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * The NiFi flow starting at a given Process Group.
+ */
+@XmlType(name = "processGroupflow")
+public class ProcessGroupFlowDTO {
+
+    private String id;
+    private String uri;
+    private String parentGroupId;
+    private FlowBreadcrumbDTO breadcrumb;
+    private FlowDTO flow;
+
+    /**
+     * @return contents of this process group. This field will be populated if the request is marked verbose
+     */
+    @ApiModelProperty(
+        value = "The flow structure starting at this Process Group."
+    )
+    public FlowDTO getFlow() {
+        return flow;
+    }
+
+    public void setFlow(FlowDTO flow) {
+        this.flow = flow;
+    }
+
+    /**
+     * The id for this component.
+     *
+     * @return The id
+     */
+    @ApiModelProperty(
+        value = "The id of the component."
+    )
+    public String getId() {
+        return this.id;
+    }
+
+    public void setId(final String id) {
+        this.id = id;
+    }
+
+    /**
+     * The breadcrumb for this ProcessGroup flow.
+     *
+     * @return The breadcrumb for this ProcessGroup flow
+     */
+    @ApiModelProperty(
+        value = "The breadcrumb of the process group."
+    )
+    public FlowBreadcrumbDTO getBreadcrumb() {
+        return breadcrumb;
+    }
+
+    public void setBreadcrumb(FlowBreadcrumbDTO breadcrumb) {
+        this.breadcrumb = breadcrumb;
+    }
+
+    /**
+     * @return id for the parent group of this component if applicable, null otherwise
+     */
+    @ApiModelProperty(
+        value = "The id of parent process group of this component if applicable."
+    )
+    public String getParentGroupId() {
+        return parentGroupId;
+    }
+
+    public void setParentGroupId(String parentGroupId) {
+        this.parentGroupId = parentGroupId;
+    }
+
+    /**
+     * The uri for linking to this component in this NiFi.
+     *
+     * @return The uri
+     */
+    @ApiModelProperty(
+        value = "The URI for futures requests to the component."
+    )
+    public String getUri() {
+        return uri;
+    }
+
+    public void setUri(String uri) {
+        this.uri = uri;
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/nifi/blob/ff98d823/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/entity/ComponentEntity.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/entity/ComponentEntity.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/entity/ComponentEntity.java
new file mode 100644
index 0000000..e0c85fa
--- /dev/null
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/entity/ComponentEntity.java
@@ -0,0 +1,119 @@
+/*
+ * 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.web.api.entity;
+
+import com.wordnik.swagger.annotations.ApiModelProperty;
+import org.apache.nifi.web.api.dto.AccessPolicyDTO;
+import org.apache.nifi.web.api.dto.PositionDTO;
+import org.apache.nifi.web.api.dto.RevisionDTO;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ * A base type for request/response entities.
+ */
+@XmlRootElement(name = "entity")
+public class ComponentEntity extends Entity {
+
+    private RevisionDTO revision;
+    private String id;
+    private String uri;
+    private PositionDTO position;
+    private AccessPolicyDTO accessPolicy;
+
+    /**
+     * @return revision for this request/response
+     */
+    @ApiModelProperty(
+            value = "The revision for this request/response. The revision is required for any mutable flow requests and is included in all responses."
+    )
+    public RevisionDTO getRevision() {
+        if (revision == null) {
+            return new RevisionDTO();
+        } else {
+            return revision;
+        }
+    }
+
+    public void setRevision(RevisionDTO revision) {
+        this.revision = revision;
+    }
+
+    /**
+     * The id for this component.
+     *
+     * @return The id
+     */
+    @ApiModelProperty(
+        value = "The id of the component."
+    )
+    public String getId() {
+        return this.id;
+    }
+
+    public void setId(final String id) {
+        this.id = id;
+    }
+
+    /**
+     * The uri for linking to this component in this NiFi.
+     *
+     * @return The uri
+     */
+    @ApiModelProperty(
+        value = "The URI for futures requests to the component."
+    )
+    public String getUri() {
+        return uri;
+    }
+
+    public void setUri(String uri) {
+        this.uri = uri;
+    }
+
+    /**
+     * The position of this component in the UI if applicable, null otherwise.
+     *
+     * @return The position
+     */
+    @ApiModelProperty(
+        value = "The position of this component in the UI if applicable."
+    )
+    public PositionDTO getPosition() {
+        return position;
+    }
+
+    public void setPosition(PositionDTO position) {
+        this.position = position;
+    }
+
+    /**
+     * The access policy for this component.
+     *
+     * @return The access policy
+     */
+    @ApiModelProperty(
+        value = "The access policy for this component."
+    )
+    public AccessPolicyDTO getAccessPolicy() {
+        return accessPolicy;
+    }
+
+    public void setAccessPolicy(AccessPolicyDTO accessPolicy) {
+        this.accessPolicy = accessPolicy;
+    }
+}