You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by jo...@apache.org on 2015/04/22 20:50:23 UTC

[1/6] incubator-nifi git commit: NIFI-271 checkpoint

Repository: incubator-nifi
Updated Branches:
  refs/heads/NIFI-271 888254b2a -> 060a1e0d9


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/StandardOptimisticLockingManager.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/StandardOptimisticLockingManager.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/StandardOptimisticLockingManager.java
index 23ef8eb..6ac0fdd 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/StandardOptimisticLockingManager.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/StandardOptimisticLockingManager.java
@@ -32,31 +32,31 @@ import org.slf4j.LoggerFactory;
 public class StandardOptimisticLockingManager implements OptimisticLockingManager {
 
     private static final Logger logger = LoggerFactory.getLogger(StandardOptimisticLockingManager.class);
-    
+
     private static final String INVALID_REVISION_ERROR = "Given revision %s does not match current revision %s.";
     private static final String SYNC_ERROR = "This NiFi instance has been updated by '%s'. Please refresh to synchronize the view.";
-    
+
     private Revision currentRevision = new Revision(0L, "");
     private String lastModifier = "unknown";
     private final Lock lock = new ReentrantLock();
-    
+
     private void lock() {
         lock.lock();
     }
-    
+
     private void unlock() {
         lock.unlock();
     }
 
     private void checkRevision(final Revision revision) {
         final FlowModification lastMod = getLastModification();
-        
+
         // with lock, verify revision
         boolean approved = lastMod.getRevision().equals(revision);
 
         if (!approved) {
             logger.debug("Revision check failed because current revision is " + lastMod.getRevision() + " but supplied revision is " + revision);
-            
+
             if (lastMod.getRevision().getClientId() == null || lastMod.getRevision().getClientId().trim().isEmpty() || lastMod.getRevision().getVersion() == null) {
                 throw new InvalidRevisionException(String.format(INVALID_REVISION_ERROR, revision, lastMod.getRevision()));
             } else {
@@ -64,11 +64,11 @@ public class StandardOptimisticLockingManager implements OptimisticLockingManage
             }
         }
     }
-    
+
     private Revision updateRevision(final Revision updatedRevision) {
         // record the current modification
         setLastModification(new FlowModification(updatedRevision, NiFiUserUtils.getNiFiUserName()));
-        
+
         // return the revision
         return updatedRevision;
     }
@@ -98,7 +98,7 @@ public class StandardOptimisticLockingManager implements OptimisticLockingManage
         lock();
         try {
             final Revision updatedRevision = updateRevision.execute(getLastModification().getRevision());
-            
+
             // update the revision
             if (updatedRevision != null) {
                 updateRevision(updatedRevision);
@@ -107,7 +107,7 @@ public class StandardOptimisticLockingManager implements OptimisticLockingManage
             unlock();
         }
     }
-    
+
     @Override
     public FlowModification getLastModification() {
         lock();
@@ -119,19 +119,19 @@ public class StandardOptimisticLockingManager implements OptimisticLockingManage
             } else {
                 revision = ctx.getRevision();
             }
-            
+
             return new FlowModification(revision, lastModifier);
         } finally {
             unlock();
         }
     }
-    
+
     private void setLastModification(final FlowModification lastModification) {
         lock();
         try {
             // record the last modifier
             lastModifier = lastModification.getLastModifier();
-            
+
             // record the updated revision in the cluster context if possible
             final ClusterContext ctx = ClusterContextThreadLocal.getContext();
             if (ctx != null) {
@@ -143,10 +143,10 @@ public class StandardOptimisticLockingManager implements OptimisticLockingManage
             unlock();
         }
     }
-    
+
     private Revision incrementRevision(String clientId) {
         final Revision current = getLastModification().getRevision();
-        
+
         final long incrementedVersion;
         if (current.getVersion() == null) {
             incrementedVersion = 0;
@@ -155,5 +155,5 @@ public class StandardOptimisticLockingManager implements OptimisticLockingManage
         }
         return new Revision(incrementedVersion, clientId);
     }
-    
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/UpdateRevision.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/UpdateRevision.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/UpdateRevision.java
index e691bbe..88fcdaa 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/UpdateRevision.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/UpdateRevision.java
@@ -23,9 +23,9 @@ public interface UpdateRevision {
 
     /**
      * Executes the action that will result in an updated revision
-     * 
-     * @param currentRevision       The current revision
-     * @return                      The updated revision
+     *
+     * @param currentRevision The current revision
+     * @return The updated revision
      */
     Revision execute(Revision currentRevision);
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/DnUtils.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/DnUtils.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/DnUtils.java
index b56f23d..f3bd11e 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/DnUtils.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/DnUtils.java
@@ -34,10 +34,8 @@ public class DnUtils {
     private static final Pattern proxyChainPattern = Pattern.compile("<(.*?)>");
 
     /**
-     * Gets the X-ProxiedEntitiesChain from the specified request.
-     *
-     * @param request
-     * @return
+     * @param request http request
+     * @return the X-ProxiedEntitiesChain from the specified request
      */
     public static String getXProxiedEntitiesChain(final HttpServletRequest request) {
         String xProxiedEntitiesChain = request.getHeader("X-ProxiedEntitiesChain");
@@ -60,8 +58,8 @@ public class DnUtils {
      * Formats the specified DN to be set as a HTTP header using well known
      * conventions.
      *
-     * @param dn
-     * @return
+     * @param dn raw dn
+     * @return the dn formatted as an HTTP header
      */
     public static String formatProxyDn(String dn) {
         return "<" + dn + ">";
@@ -70,8 +68,8 @@ public class DnUtils {
     /**
      * Tokenizes the specified proxy chain.
      *
-     * @param rawProxyChain
-     * @return
+     * @param rawProxyChain raw chain
+     * @return tokenized proxy chain
      */
     public static Deque<String> tokenizeProxyChain(String rawProxyChain) {
         final Deque<String> dnList = new ArrayDeque<>();

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/anonymous/NiFiAnonymousUserFilter.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/anonymous/NiFiAnonymousUserFilter.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/anonymous/NiFiAnonymousUserFilter.java
index a82787b..295f09c 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/anonymous/NiFiAnonymousUserFilter.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/anonymous/NiFiAnonymousUserFilter.java
@@ -76,8 +76,8 @@ public class NiFiAnonymousUserFilter extends AnonymousAuthenticationFilter {
     /**
      * Only supports anonymous users for non-secure requests or one way ssl.
      *
-     * @param request
-     * @return
+     * @param request request
+     * @return true if allowed
      */
     @Override
     protected boolean applyAnonymousForThisRequest(HttpServletRequest request) {

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/authentication/NiFiAuthenticationEntryPoint.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/authentication/NiFiAuthenticationEntryPoint.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/authentication/NiFiAuthenticationEntryPoint.java
index d19219c..cd5f1ac 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/authentication/NiFiAuthenticationEntryPoint.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/authentication/NiFiAuthenticationEntryPoint.java
@@ -38,11 +38,12 @@ public class NiFiAuthenticationEntryPoint implements AuthenticationEntryPoint {
 
     /**
      * Always returns a 403 error code to the client.
-     * @param request
-     * @param response
-     * @param ae
-     * @throws java.io.IOException
-     * @throws javax.servlet.ServletException
+     *
+     * @param request request
+     * @param response response
+     * @param ae ae
+     * @throws java.io.IOException ex
+     * @throws javax.servlet.ServletException ex
      */
     @Override
     public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException ae) throws IOException, ServletException {

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/authorization/NiFiAuthorizationService.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/authorization/NiFiAuthorizationService.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/authorization/NiFiAuthorizationService.java
index dec7c4b..95b4669 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/authorization/NiFiAuthorizationService.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/authorization/NiFiAuthorizationService.java
@@ -51,17 +51,17 @@ public class NiFiAuthorizationService implements UserDetailsService {
     private NiFiProperties properties;
 
     /**
-     * Loads the user details for the specified dn. 
-     * 
-     * Synchronizing because we want each request to be authorized atomically since
-     * each may contain any number of DNs. We wanted an access decision made
-     * for each individual request as a whole (without other request potentially
-     * impacting it).
+     * Loads the user details for the specified dn.
+     *
+     * Synchronizing because we want each request to be authorized atomically
+     * since each may contain any number of DNs. We wanted an access decision
+     * made for each individual request as a whole (without other request
+     * potentially impacting it).
      *
-     * @param rawProxyChain
-     * @return
-     * @throws UsernameNotFoundException
-     * @throws org.springframework.dao.DataAccessException
+     * @param rawProxyChain proxy chain
+     * @return user details
+     * @throws UsernameNotFoundException ex
+     * @throws org.springframework.dao.DataAccessException ex
      */
     @Override
     public synchronized UserDetails loadUserByUsername(String rawProxyChain) throws UsernameNotFoundException, DataAccessException {
@@ -75,7 +75,7 @@ public class NiFiAuthorizationService implements UserDetailsService {
         }
 
         NiFiUser proxy = null;
-        
+
         // process each part of the proxy chain
         for (final Iterator<String> dnIter = dnList.iterator(); dnIter.hasNext();) {
             final String dn = dnIter.next();
@@ -92,12 +92,12 @@ public class NiFiAuthorizationService implements UserDetailsService {
                         logger.warn(String.format("Proxy '%s' must have '%s' authority. Current authorities: %s", dn, Authority.ROLE_PROXY.toString(), StringUtils.join(user.getAuthorities(), ", ")));
                         throw new UntrustedProxyException(String.format("Untrusted proxy '%s' must be authorized with '%s'.", dn, Authority.ROLE_PROXY.toString()));
                     }
-                    
+
                     // if we've already encountered a proxy, update the chain
                     if (proxy != null) {
                         user.setChain(proxy);
                     }
-                    
+
                     // record this user as the proxy for the next user in the chain
                     proxy = user;
                 } catch (UsernameNotFoundException unfe) {
@@ -118,7 +118,8 @@ public class NiFiAuthorizationService implements UserDetailsService {
                             // attempting to auto create the user account request
                             final String message = String.format("Account request was already submitted for '%s'", dn);
                             logger.warn(message);
-                            throw new AccountStatusException(message) {};
+                            throw new AccountStatusException(message) {
+                            };
                         }
                     } else {
                         logger.warn(String.format("Untrusted proxy '%s' must be authorized with '%s' authority: %s", dn, Authority.ROLE_PROXY.toString(), unfe.getMessage()));
@@ -130,7 +131,7 @@ public class NiFiAuthorizationService implements UserDetailsService {
                 }
             } else {
                 userDetails = getNiFiUserDetails(dn);
-                
+
                 // if we've already encountered a proxy, update the chain
                 if (proxy != null) {
                     final NiFiUser user = userDetails.getNiFiUser();
@@ -145,8 +146,8 @@ public class NiFiAuthorizationService implements UserDetailsService {
     /**
      * Loads the user details for the specified dn.
      *
-     * @param dn
-     * @return
+     * @param dn user dn
+     * @return user detail
      */
     private NiFiUserDetails getNiFiUserDetails(String dn) {
         try {
@@ -155,7 +156,8 @@ public class NiFiAuthorizationService implements UserDetailsService {
         } catch (AdministrationException ase) {
             throw new AuthenticationServiceException(String.format("An error occurred while accessing the user credentials for '%s': %s", dn, ase.getMessage()), ase);
         } catch (AccountDisabledException | AccountPendingException e) {
-            throw new AccountStatusException(e.getMessage(), e) {};
+            throw new AccountStatusException(e.getMessage(), e) {
+            };
         } catch (AccountNotFoundException anfe) {
             throw new UsernameNotFoundException(anfe.getMessage());
         }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/user/NiFiUserDetails.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/user/NiFiUserDetails.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/user/NiFiUserDetails.java
index d9e8f80..c69b1e6 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/user/NiFiUserDetails.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/user/NiFiUserDetails.java
@@ -36,7 +36,7 @@ public class NiFiUserDetails implements UserDetails {
     /**
      * Creates a new NiFiUserDetails.
      *
-     * @param user
+     * @param user user
      */
     public NiFiUserDetails(NiFiUser user) {
         this.user = user;
@@ -45,7 +45,7 @@ public class NiFiUserDetails implements UserDetails {
     /**
      * Get the user for this UserDetails.
      *
-     * @return
+     * @return user
      */
     public NiFiUser getNiFiUser() {
         return user;
@@ -54,7 +54,7 @@ public class NiFiUserDetails implements UserDetails {
     /**
      * Returns the authorities that this NiFi user has.
      *
-     * @return
+     * @return authorities
      */
     @Override
     public Collection<? extends GrantedAuthority> getAuthorities() {
@@ -66,21 +66,11 @@ public class NiFiUserDetails implements UserDetails {
         return grantedAuthorities;
     }
 
-    /**
-     * Not used.
-     *
-     * @return
-     */
     @Override
     public String getPassword() {
         return StringUtils.EMPTY;
     }
 
-    /**
-     * Gets the user name.
-     *
-     * @return
-     */
     @Override
     public String getUsername() {
         return user.getDn();

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/user/NiFiUserUtils.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/user/NiFiUserUtils.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/user/NiFiUserUtils.java
index acf37dc..a1b6717 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/user/NiFiUserUtils.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/user/NiFiUserUtils.java
@@ -35,7 +35,7 @@ public final class NiFiUserUtils {
     /**
      * Return the authorities for the current user.
      *
-     * @return
+     * @return authorities
      */
     public static Set<String> getAuthorities() {
         Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
@@ -62,7 +62,7 @@ public final class NiFiUserUtils {
      * Returns the current NiFiUser or null if the current user is not a
      * NiFiUser.
      *
-     * @return
+     * @return user
      */
     public static NiFiUser getNiFiUser() {
         NiFiUser user = null;
@@ -79,7 +79,7 @@ public final class NiFiUserUtils {
 
         return user;
     }
-    
+
     public static String getNiFiUserName() {
         // get the nifi user to extract the username
         NiFiUser user = NiFiUserUtils.getNiFiUser();

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/x509/SubjectDnX509PrincipalExtractor.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/x509/SubjectDnX509PrincipalExtractor.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/x509/SubjectDnX509PrincipalExtractor.java
index f290e1f..48a12de 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/x509/SubjectDnX509PrincipalExtractor.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/x509/SubjectDnX509PrincipalExtractor.java
@@ -24,12 +24,6 @@ import org.springframework.security.web.authentication.preauth.x509.X509Principa
  */
 public class SubjectDnX509PrincipalExtractor implements X509PrincipalExtractor {
 
-    /**
-     * Extracts the principal from the specified client certificate.
-     *
-     * @param cert
-     * @return
-     */
     @Override
     public Object extractPrincipal(X509Certificate cert) {
         return cert.getSubjectDN().getName().trim();

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/x509/X509AuthenticationFilter.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/x509/X509AuthenticationFilter.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/x509/X509AuthenticationFilter.java
index 3de4b75..72baecb 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/x509/X509AuthenticationFilter.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/x509/X509AuthenticationFilter.java
@@ -58,16 +58,6 @@ public class X509AuthenticationFilter extends AbstractPreAuthenticatedProcessing
     private NiFiProperties properties;
     private UserService userService;
 
-    /**
-     * Override doFilter in order to properly handle when users could not be
-     * authenticated.
-     *
-     * @param request
-     * @param response
-     * @param chain
-     * @throws IOException
-     * @throws ServletException
-     */
     @Override
     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
         final HttpServletResponse httpResponse = (HttpServletResponse) response;
@@ -194,13 +184,6 @@ public class X509AuthenticationFilter extends AbstractPreAuthenticatedProcessing
         return certificateExtractor.extractClientCertificate(request);
     }
 
-    /**
-     * Sets the response headers for successful proxied requests.
-     *
-     * @param request
-     * @param response
-     * @param authResult
-     */
     @Override
     protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, Authentication authResult) {
         if (StringUtils.isNotBlank(request.getHeader(PROXY_ENTITIES_CHAIN))) {
@@ -209,13 +192,6 @@ public class X509AuthenticationFilter extends AbstractPreAuthenticatedProcessing
         super.successfulAuthentication(request, response, authResult);
     }
 
-    /**
-     * Sets the response headers for unsuccessful proxied requests.
-     *
-     * @param request
-     * @param response
-     * @param failed
-     */
     @Override
     protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException failed) {
         if (StringUtils.isNotBlank(request.getHeader(PROXY_ENTITIES_CHAIN))) {
@@ -228,8 +204,8 @@ public class X509AuthenticationFilter extends AbstractPreAuthenticatedProcessing
      * Determines if the specified request is attempting to register a new user
      * account.
      *
-     * @param request
-     * @return
+     * @param request http request
+     * @return true if new user
      */
     private boolean isNewAccountRequest(HttpServletRequest request) {
         if ("POST".equalsIgnoreCase(request.getMethod())) {
@@ -246,10 +222,10 @@ public class X509AuthenticationFilter extends AbstractPreAuthenticatedProcessing
     /**
      * Handles requests that were unable to be authorized.
      *
-     * @param request
-     * @param response
-     * @param ae
-     * @throws IOException
+     * @param request request
+     * @param response response
+     * @param ae ex
+     * @throws IOException ex
      */
     private void handleUnsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException ae) throws IOException {
         // set the response status
@@ -292,14 +268,6 @@ public class X509AuthenticationFilter extends AbstractPreAuthenticatedProcessing
         }
     }
 
-    /**
-     * Handles requests that failed because of a user service error.
-     *
-     * @param request
-     * @param response
-     * @param e
-     * @throws IOException
-     */
     private void handleUserServiceError(HttpServletRequest request, HttpServletResponse response, int responseCode, String message) throws IOException {
         // set the response status
         response.setContentType("text/plain");
@@ -316,9 +284,9 @@ public class X509AuthenticationFilter extends AbstractPreAuthenticatedProcessing
     /**
      * Handles requests that failed because they were bad input.
      *
-     * @param request
-     * @param response
-     * @throws IOException
+     * @param request request
+     * @param response response
+     * @throws IOException ioe
      */
     private void handleMissingCertificate(HttpServletRequest request, HttpServletResponse response) throws IOException {
         // set the response status

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/x509/X509CertificateExtractor.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/x509/X509CertificateExtractor.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/x509/X509CertificateExtractor.java
index 546d7be..b40d5a5 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/x509/X509CertificateExtractor.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/x509/X509CertificateExtractor.java
@@ -32,8 +32,8 @@ public class X509CertificateExtractor {
      * Extract the client certificate from the specified HttpServletRequest or
      * null if none is specified.
      *
-     * @param request
-     * @return
+     * @param request http request
+     * @return cert
      */
     public X509Certificate extractClientCertificate(HttpServletRequest request) {
         X509Certificate[] certs = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate");

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/x509/ocsp/OcspCertificateValidator.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/x509/ocsp/OcspCertificateValidator.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/x509/ocsp/OcspCertificateValidator.java
index 8d2c318..81e4bd6 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/x509/ocsp/OcspCertificateValidator.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/main/java/org/apache/nifi/web/security/x509/ocsp/OcspCertificateValidator.java
@@ -63,9 +63,6 @@ import org.bouncycastle.ocsp.SingleResp;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-/**
- *
- */
 public class OcspCertificateValidator {
 
     private static final Logger logger = LoggerFactory.getLogger(OcspCertificateValidator.class);
@@ -141,8 +138,8 @@ public class OcspCertificateValidator {
     /**
      * Loads the ocsp certificate if specified. Null otherwise.
      *
-     * @param properties
-     * @return
+     * @param properties nifi properties
+     * @return certificate
      */
     private X509Certificate getOcspCertificate(final NiFiProperties properties) {
         X509Certificate validationAuthorityCertificate = null;
@@ -164,8 +161,8 @@ public class OcspCertificateValidator {
      * Loads the trusted certificate authorities according to the specified
      * properties.
      *
-     * @param properties
-     * @return
+     * @param properties properties
+     * @return map of certificate authorities
      */
     private Map<String, X509Certificate> getTrustedCAs(final NiFiProperties properties) {
         final Map<String, X509Certificate> certificateAuthorities = new HashMap<>();
@@ -211,8 +208,8 @@ public class OcspCertificateValidator {
     /**
      * Validates the specified certificate using OCSP if configured.
      *
-     * @param request
-     * @throws CertificateStatusException
+     * @param request http request
+     * @throws CertificateStatusException ex
      */
     public void validate(final HttpServletRequest request) throws CertificateStatusException {
         final X509Certificate[] certificates = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate");
@@ -235,7 +232,8 @@ public class OcspCertificateValidator {
 
                 // we only disallow when we have a verified response that states the certificate is revoked
                 if (VerificationStatus.Verified.equals(ocspStatus.getVerificationStatus()) && ValidationStatus.Revoked.equals(ocspStatus.getValidationStatus())) {
-                    throw new CertificateStatusException(String.format("Client certificate for <%s> is revoked according to the certificate authority.", subjectCertificate.getSubjectX500Principal().getName()));
+                    throw new CertificateStatusException(String.format("Client certificate for <%s> is revoked according to the certificate authority.",
+                            subjectCertificate.getSubjectX500Principal().getName()));
                 }
             } catch (final UncheckedExecutionException uee) {
                 logger.warn(String.format("Unable to validate client certificate via OCSP: <%s>", subjectCertificate.getSubjectX500Principal().getName()), uee.getCause());
@@ -246,8 +244,8 @@ public class OcspCertificateValidator {
     /**
      * Gets the subject certificate.
      *
-     * @param certificates
-     * @return
+     * @param certificates certs
+     * @return subject cert
      */
     private X509Certificate getSubjectCertificate(final X509Certificate[] certificates) {
         return certificates[0];
@@ -256,8 +254,8 @@ public class OcspCertificateValidator {
     /**
      * Gets the issuer certificate.
      *
-     * @param certificates
-     * @return
+     * @param certificates certs
+     * @return issuer cert
      */
     private X509Certificate getIssuerCertificate(final X509Certificate[] certificates) {
         if (certificates.length > 1) {
@@ -274,9 +272,8 @@ public class OcspCertificateValidator {
     /**
      * Gets the OCSP status for the specified subject and issuer certificates.
      *
-     * @param subjectCertificate
-     * @param issuerCertificate
-     * @return
+     * @param ocspStatusKey status key
+     * @return ocsp status
      */
     private OcspStatus getOcspStatus(final OcspRequest ocspStatusKey) {
         final X509Certificate subjectCertificate = ocspStatusKey.getSubjectCertificate();
@@ -406,9 +403,9 @@ public class OcspCertificateValidator {
      * that issued the subject certificate. Other various checks may be required
      * (this portion is currently not implemented).
      *
-     * @param responderCertificate
-     * @param issuerCertificate
-     * @return
+     * @param responderCertificate cert
+     * @param issuerCertificate cert
+     * @return cert
      */
     private X509Certificate getTrustedResponderCertificate(final X509Certificate responderCertificate, final X509Certificate issuerCertificate) {
         // look for the responder's certificate specifically
@@ -425,13 +422,13 @@ public class OcspCertificateValidator {
 //                if (keyUsage == null || !keyUsage.contains(KP_OCSP_SIGNING_OID)) {
 //                    return null;
 //                }
-//                
+//
 //                // ensure the certificate is valid
 //                responderCertificate.checkValidity();
-//                
+//
 //                // verify the signature
 //                responderCertificate.verify(issuerCertificate.getPublicKey());
-//                
+//
 //                return responderCertificate;
 //            } catch (final CertificateException | NoSuchAlgorithmException | InvalidKeyException | NoSuchProviderException | SignatureException e) {
 //                return null;

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/test/java/org/apache/nifi/web/security/authorization/NiFiAuthorizationServiceTest.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/test/java/org/apache/nifi/web/security/authorization/NiFiAuthorizationServiceTest.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/test/java/org/apache/nifi/web/security/authorization/NiFiAuthorizationServiceTest.java
index 057a854..6d0c3cb 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/test/java/org/apache/nifi/web/security/authorization/NiFiAuthorizationServiceTest.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-security/src/test/java/org/apache/nifi/web/security/authorization/NiFiAuthorizationServiceTest.java
@@ -37,12 +37,11 @@ import org.springframework.security.authentication.AccountStatusException;
 import org.springframework.security.authentication.AuthenticationServiceException;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 
-
 /**
  * Test case for NiFiAuthorizationService.
  */
 public class NiFiAuthorizationServiceTest {
-    
+
     private static final String USER = "user";
     private static final String PROXY = "proxy";
     private static final String PROXY_PROXY = "proxy-proxy";
@@ -51,16 +50,16 @@ public class NiFiAuthorizationServiceTest {
     private static final String USER_PENDING = "user-pending";
     private static final String USER_ADMIN_EXCEPTION = "user-admin-exception";
     private static final String PROXY_NOT_FOUND = "proxy-not-found";
-    
+
     private NiFiAuthorizationService authorizationService;
     private UserService userService;
-    
+
     @Before
     public void setup() throws Exception {
         // mock the web security properties
         final NiFiProperties properties = Mockito.mock(NiFiProperties.class);
         Mockito.when(properties.getSupportNewAccountRequests()).thenReturn(Boolean.TRUE);
-        
+
         userService = Mockito.mock(UserService.class);
         Mockito.doReturn(null).when(userService).createPendingUserAccount(Mockito.anyString(), Mockito.anyString());
         Mockito.doAnswer(new Answer() {
@@ -68,7 +67,7 @@ public class NiFiAuthorizationServiceTest {
             public Object answer(InvocationOnMock invocation) throws Throwable {
                 Object[] args = invocation.getArguments();
                 String dn = (String) args[0];
-                
+
                 if (null != dn) {
                     switch (dn) {
                         case USER_NOT_FOUND:
@@ -93,97 +92,99 @@ public class NiFiAuthorizationServiceTest {
                             return proxy;
                     }
                 }
-                
+
                 return null;
             }
         }).when(userService).checkAuthorization(Mockito.anyString());
-        
+
         // create the authorization service
         authorizationService = new NiFiAuthorizationService();
         authorizationService.setProperties(properties);
         authorizationService.setUserService(userService);
     }
-    
+
     /**
-     * Ensures the authorization service correctly handles users invalid dn chain.
+     * Ensures the authorization service correctly handles users invalid dn
+     * chain.
      *
-     * @throws Exception
+     * @throws Exception ex
      */
     @Test(expected = UntrustedProxyException.class)
     public void testInvalidDnChain() throws Exception {
         authorizationService.loadUserByUsername(USER);
     }
-    
+
     /**
      * Ensures the authorization service correctly handles account not found.
      *
-     * @throws Exception
+     * @throws Exception ex
      */
     @Test(expected = UsernameNotFoundException.class)
     public void testAccountNotFound() throws Exception {
         authorizationService.loadUserByUsername(DnUtils.formatProxyDn(USER_NOT_FOUND));
     }
-    
+
     /**
      * Ensures the authorization service correctly handles account disabled.
      *
-     * @throws Exception
+     * @throws Exception ex
      */
     @Test(expected = AccountStatusException.class)
     public void testAccountDisabled() throws Exception {
         authorizationService.loadUserByUsername(DnUtils.formatProxyDn(USER_DISABLED));
     }
-    
+
     /**
      * Ensures the authorization service correctly handles account pending.
      *
-     * @throws Exception
+     * @throws Exception ex
      */
     @Test(expected = AccountStatusException.class)
     public void testAccountPending() throws Exception {
         authorizationService.loadUserByUsername(DnUtils.formatProxyDn(USER_PENDING));
     }
-    
+
     /**
-     * Ensures the authorization service correctly handles account administration exception.
+     * Ensures the authorization service correctly handles account
+     * administration exception.
      *
-     * @throws Exception
+     * @throws Exception ex
      */
     @Test(expected = AuthenticationServiceException.class)
     public void testAccountAdminException() throws Exception {
         authorizationService.loadUserByUsername(DnUtils.formatProxyDn(USER_ADMIN_EXCEPTION));
     }
-    
+
     /**
      * Tests the case when there is no proxy.
-     * 
-     * @throws Exception 
+     *
+     * @throws Exception ex
      */
     @Test
     public void testNoProxy() throws Exception {
         final NiFiUserDetails details = (NiFiUserDetails) authorizationService.loadUserByUsername(DnUtils.formatProxyDn(USER));
         final NiFiUser user = details.getNiFiUser();
-        
+
         Assert.assertEquals(USER, user.getDn());
         Assert.assertNull(user.getChain());
     }
-    
+
     /**
      * Tests the case when the proxy does not have ROLE_PROXY.
-     * 
-     * @throws Exception 
+     *
+     * @throws Exception ex
      */
     @Test(expected = UntrustedProxyException.class)
     public void testInvalidProxy() throws Exception {
         final String dnChain = DnUtils.formatProxyDn(USER) + DnUtils.formatProxyDn(USER);
         authorizationService.loadUserByUsername(dnChain);
     }
-    
+
     /**
-     * Ensures the authorization service correctly handles proxy not found by attempting
-     * to create an account request for the proxy.
+     * Ensures the authorization service correctly handles proxy not found by
+     * attempting to create an account request for the proxy.
      *
-     * @throws Exception
+     * @throws Exception ex
      */
     @Test(expected = UsernameNotFoundException.class)
     public void testProxyNotFound() throws Exception {
@@ -194,55 +195,55 @@ public class NiFiAuthorizationServiceTest {
             Mockito.verify(userService).createPendingUserAccount(Mockito.eq(PROXY_NOT_FOUND), Mockito.anyString());
         }
     }
-    
+
     /**
      * Tests the case when there is a proxy.
-     * 
-     * @throws Exception 
+     *
+     * @throws Exception ex
      */
     @Test
     public void testProxy() throws Exception {
         final String dnChain = DnUtils.formatProxyDn(USER) + DnUtils.formatProxyDn(PROXY);
         final NiFiUserDetails details = (NiFiUserDetails) authorizationService.loadUserByUsername(dnChain);
         final NiFiUser user = details.getNiFiUser();
-        
+
         // verify the user
         Assert.assertEquals(USER, user.getDn());
         Assert.assertNotNull(user.getChain());
-        
+
         // get the proxy
         final NiFiUser proxy = user.getChain();
-        
+
         // verify the proxy
         Assert.assertEquals(PROXY, proxy.getDn());
         Assert.assertNull(proxy.getChain());
     }
-    
+
     /**
      * Tests the case when there is are multiple proxies.
-     * 
-     * @throws Exception 
+     *
+     * @throws Exception ex
      */
     @Test
     public void testProxyProxy() throws Exception {
         final String dnChain = DnUtils.formatProxyDn(USER) + DnUtils.formatProxyDn(PROXY) + DnUtils.formatProxyDn(PROXY_PROXY);
         final NiFiUserDetails details = (NiFiUserDetails) authorizationService.loadUserByUsername(dnChain);
         final NiFiUser user = details.getNiFiUser();
-        
+
         // verify the user
         Assert.assertEquals(USER, user.getDn());
         Assert.assertNotNull(user.getChain());
-        
+
         // get the proxy
         NiFiUser proxy = user.getChain();
-        
+
         // verify the proxy
         Assert.assertEquals(PROXY, proxy.getDn());
         Assert.assertNotNull(proxy.getChain());
-        
+
         // get the proxies proxy
         proxy = proxy.getChain();
-        
+
         // verify the proxies proxy
         Assert.assertEquals(PROXY_PROXY, proxy.getDn());
         Assert.assertNull(proxy.getChain());


[3/6] incubator-nifi git commit: NIFI-537 fixed identified licensing issue with nifi-web-content-viewer

Posted by jo...@apache.org.
NIFI-537 fixed identified licensing issue with nifi-web-content-viewer


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

Branch: refs/heads/NIFI-271
Commit: 6d512f1e017b4d8cf98f3e79915372f5dc96a4d5
Parents: 9dda16c
Author: joewitt <jo...@apache.org>
Authored: Wed Apr 22 13:43:44 2015 -0400
Committer: joewitt <jo...@apache.org>
Committed: Wed Apr 22 13:43:44 2015 -0400

----------------------------------------------------------------------
 nifi-parent/pom.xml                             |  31 ++-
 nifi/LICENSE                                    |  22 ++
 nifi/nifi-assembly/LICENSE                      |  22 ++
 .../nifi-web/nifi-ui-extension/pom.xml          |  16 +-
 .../nifi-web/nifi-web-content-viewer/pom.xml    |  14 ++
 .../src/main/resources/META-INF/LICENSE         | 232 +++++++++++++++++++
 .../src/main/resources/META-INF/NOTICE          |  12 +-
 .../src/main/webapp/js/hexview/LICENSE          |  32 ---
 .../main/webapp/js/hexview/hexview.default.css  |  34 ++-
 .../src/main/webapp/js/hexview/hexview.js       |  33 +++
 10 files changed, 398 insertions(+), 50 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/6d512f1e/nifi-parent/pom.xml
----------------------------------------------------------------------
diff --git a/nifi-parent/pom.xml b/nifi-parent/pom.xml
index ba9f7ae..3bc24df 100644
--- a/nifi-parent/pom.xml
+++ b/nifi-parent/pom.xml
@@ -333,15 +333,7 @@
                     <includeTestSourceDirectory>true</includeTestSourceDirectory>
                     <excludes>**/HelpMojo.java,**/generated-sources</excludes>
                 </configuration>
-                <executions>
-                    <execution>
-                        <id>check-style</id>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>            
+            </plugin>      
             <plugin>
                 <groupId>org.apache.rat</groupId>
                 <artifactId>apache-rat-plugin</artifactId>
@@ -383,4 +375,25 @@
             </plugin>
         </plugins>
     </build>
+    <profiles>
+        <profile> <!-- will move this up with the always on plugins once we get all checkstyle stuff resolved-->
+            <id>checkstyle</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-checkstyle-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>check-style</id>
+                                <goals>
+                                    <goal>check</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>                
+            </build>
+        </profile>
+    </profiles>
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/6d512f1e/nifi/LICENSE
----------------------------------------------------------------------
diff --git a/nifi/LICENSE b/nifi/LICENSE
index 50150e3..59075cd 100644
--- a/nifi/LICENSE
+++ b/nifi/LICENSE
@@ -455,3 +455,25 @@ This product bundles 'json2.js' which is available in the 'public domain'.
 This product bundles 'reset.css' which is available in the 'public domain'.
     For details see http://meyerweb.com/eric/tools/css/reset/
 
+This product bundles HexViewJS available under an MIT License
+
+   Copyright (c) 2010 Nick McVeity <nm...@gmail.com>
+
+   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.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/6d512f1e/nifi/nifi-assembly/LICENSE
----------------------------------------------------------------------
diff --git a/nifi/nifi-assembly/LICENSE b/nifi/nifi-assembly/LICENSE
index 38386b9..ec360de 100644
--- a/nifi/nifi-assembly/LICENSE
+++ b/nifi/nifi-assembly/LICENSE
@@ -455,6 +455,28 @@ This product bundles 'json2.js' which is available in the 'public domain'.
 This product bundles 'reset.css' which is available in the 'public domain'.
     For details see http://meyerweb.com/eric/tools/css/reset/
 
+This product bundles HexViewJS available under an MIT License
+
+   Copyright (c) 2010 Nick McVeity <nm...@gmail.com>
+
+   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.
 
   The binary distribution of this product bundles 'Slf4j' which is available
   under a "3-clause BSD" license.  For details see http://www.slf4j.org/

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/6d512f1e/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-ui-extension/pom.xml
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-ui-extension/pom.xml b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-ui-extension/pom.xml
index 22388b3..3281df7 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-ui-extension/pom.xml
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-ui-extension/pom.xml
@@ -1,4 +1,18 @@
 <?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.
+-->
 <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/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
@@ -18,4 +32,4 @@
             <artifactId>nifi-user-actions</artifactId>
         </dependency>
     </dependencies>
-</project>
\ No newline at end of file
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/6d512f1e/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/pom.xml
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/pom.xml b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/pom.xml
index 75464c2..da64d4f 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/pom.xml
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/pom.xml
@@ -88,4 +88,18 @@
             <scope>provided</scope>
         </dependency>
     </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.rat</groupId>
+                <artifactId>apache-rat-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>src/main/webapp/js/hexview/hexview.default.css</exclude>
+                        <exclude>src/main/webapp/js/hexview/hexview.js</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/6d512f1e/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/resources/META-INF/LICENSE
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/resources/META-INF/LICENSE b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/resources/META-INF/LICENSE
new file mode 100644
index 0000000..60a144c
--- /dev/null
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/resources/META-INF/LICENSE
@@ -0,0 +1,232 @@
+
+                                 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.
+
+APACHE NIFI SUBCOMPONENTS:
+
+The Apache NiFi project contains subcomponents with separate copyright
+notices and license terms. Your use of the source code for the these
+subcomponents is subject to the terms and conditions of the following
+licenses. 
+
+This product bundles HexViewJS available under an MIT License
+
+   Copyright (c) 2010 Nick McVeity <nm...@gmail.com>
+
+   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/incubator-nifi/blob/6d512f1e/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/resources/META-INF/NOTICE
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/resources/META-INF/NOTICE b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/resources/META-INF/NOTICE
index d91a952..0e52d13 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/resources/META-INF/NOTICE
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/resources/META-INF/NOTICE
@@ -1,5 +1,5 @@
-nifi-web-docs
-Copyright 2014-2015 The Apache Software Foundation
+nifi-web-content-viewer
+Copyright 2015 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
@@ -10,10 +10,8 @@ Apache Software License v2
 
 The following binary components are provided under the Apache Software License v2
 
-  (ASLv2) Apache Commons Lang
+  (ASLv2) Apache Tika
     The following NOTICE information applies:
-      Apache Commons Lang
-      Copyright 2001-2014 The Apache Software Foundation
+      Apache Tika core
+      Copyright 2007-2015 The Apache Software Foundation
 
-      This product includes software from the Spring Framework,
-      under the Apache License 2.0 (see: StringUtils.containsWhitespace())

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/6d512f1e/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/js/hexview/LICENSE
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/js/hexview/LICENSE b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/js/hexview/LICENSE
deleted file mode 100644
index 95e1332..0000000
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/js/hexview/LICENSE
+++ /dev/null
@@ -1,32 +0,0 @@
-
-HexViewJS License
------------------
-
-HexViewJS is written by Nick McVeity <nm...@gmail.com> and is 
-licensed under the terms of the MIT license reproduced below.
-
-========================================================================
-
-Copyright (c) 2010 Nick McVeity <nm...@gmail.com>
-
-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/incubator-nifi/blob/6d512f1e/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/js/hexview/hexview.default.css
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/js/hexview/hexview.default.css b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/js/hexview/hexview.default.css
index 581161e..5fe6a9e 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/js/hexview/hexview.default.css
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/js/hexview/hexview.default.css
@@ -1,4 +1,36 @@
-.hexviewerwindow { font-family: monospace; background-color: #F2F2F2;}
+/*
+HexViewJS License
+-----------------
+
+HexViewJS is written by Nick McVeity <nm...@gmail.com> and is 
+licensed under the terms of the MIT license reproduced below.
+
+========================================================================
+
+Copyright (c) 2010 Nick McVeity <nm...@gmail.com>
+
+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.
+
+========================================================================
+ */
+ .hexviewerwindow { font-family: monospace; background-color: #F2F2F2;}
 div.hexviewerwindow { padding: 20px; }
 .hexviewerwindow_table { border-collapse:collapse; border: 5px solid grey; margin-left: 16px; caption-side:bottom; }
 .hexviewerwindow_offset {background: #A9D0F5; padding-right: 8px; }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/6d512f1e/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/js/hexview/hexview.js
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/js/hexview/hexview.js b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/js/hexview/hexview.js
index 65fee95..0931c75 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/js/hexview/hexview.js
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/js/hexview/hexview.js
@@ -1,3 +1,36 @@
+/*
+HexViewJS License
+-----------------
+
+HexViewJS is written by Nick McVeity <nm...@gmail.com> and is 
+licensed under the terms of the MIT license reproduced below.
+
+========================================================================
+
+Copyright (c) 2010 Nick McVeity <nm...@gmail.com>
+
+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.
+
+========================================================================
+ */
+
 $(document).ready(function () {
     var HEX = '0123456789ABCDEF';
 


[5/6] incubator-nifi git commit: NIFI-537 fixed identified licensing issue with several of the new nars

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/PutS3Object.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/PutS3Object.java b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/PutS3Object.java
index 9a4fc5b..24c82dd 100644
--- a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/PutS3Object.java
+++ b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/PutS3Object.java
@@ -56,35 +56,35 @@ import com.amazonaws.services.s3.model.StorageClass;
 @SeeAlso({FetchS3Object.class})
 @Tags({"Amazon", "S3", "AWS", "Archive", "Put"})
 @CapabilityDescription("Puts FlowFiles to an Amazon S3 Bucket")
-@DynamicProperty(name="The name of a User-Defined Metadata field to add to the S3 Object", 
-	value="The value of a User-Defined Metadata field to add to the S3 Object", 
-	description="Allows user-defined metadata to be added to the S3 object as key/value pairs",
-	supportsExpressionLanguage=true)
-@ReadsAttribute(attribute="filename", description="Uses the FlowFile's filename as the filename for the S3 object")
+@DynamicProperty(name = "The name of a User-Defined Metadata field to add to the S3 Object",
+        value = "The value of a User-Defined Metadata field to add to the S3 Object",
+        description = "Allows user-defined metadata to be added to the S3 object as key/value pairs",
+        supportsExpressionLanguage = true)
+@ReadsAttribute(attribute = "filename", description = "Uses the FlowFile's filename as the filename for the S3 object")
 @WritesAttributes({
-	@WritesAttribute(attribute="s3.version", description="The version of the S3 Object that was put to S3"),
-	@WritesAttribute(attribute="s3.etag", description="The ETag of the S3 Object"),
-	@WritesAttribute(attribute="s3.expiration", description="A human-readable form of the expiration date of the S3 object, if one is set")
+    @WritesAttribute(attribute = "s3.version", description = "The version of the S3 Object that was put to S3"),
+    @WritesAttribute(attribute = "s3.etag", description = "The ETag of the S3 Object"),
+    @WritesAttribute(attribute = "s3.expiration", description = "A human-readable form of the expiration date of the S3 object, if one is set")
 })
 public class PutS3Object extends AbstractS3Processor {
+
     public static final PropertyDescriptor EXPIRATION_RULE_ID = new PropertyDescriptor.Builder()
-        .name("Expiration Time Rule")
-        .required(false)
-        .expressionLanguageSupported(true)
-        .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-        .build();
+            .name("Expiration Time Rule")
+            .required(false)
+            .expressionLanguageSupported(true)
+            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+            .build();
 
     public static final PropertyDescriptor STORAGE_CLASS = new PropertyDescriptor.Builder()
-        .name("Storage Class")
-        .required(true)
-        .allowableValues(StorageClass.Standard.name(), StorageClass.ReducedRedundancy.name())
-        .defaultValue(StorageClass.Standard.name())
-        .build();
+            .name("Storage Class")
+            .required(true)
+            .allowableValues(StorageClass.Standard.name(), StorageClass.ReducedRedundancy.name())
+            .defaultValue(StorageClass.Standard.name())
+            .build();
 
     public static final List<PropertyDescriptor> properties = Collections.unmodifiableList(
-            Arrays.asList(KEY, BUCKET, ACCESS_KEY, SECRET_KEY, CREDENTAILS_FILE, STORAGE_CLASS, REGION, TIMEOUT, EXPIRATION_RULE_ID, 
-                    FULL_CONTROL_USER_LIST, READ_USER_LIST, WRITE_USER_LIST, READ_ACL_LIST, WRITE_ACL_LIST, OWNER) );
-
+            Arrays.asList(KEY, BUCKET, ACCESS_KEY, SECRET_KEY, CREDENTAILS_FILE, STORAGE_CLASS, REGION, TIMEOUT, EXPIRATION_RULE_ID,
+                    FULL_CONTROL_USER_LIST, READ_USER_LIST, WRITE_USER_LIST, READ_ACL_LIST, WRITE_ACL_LIST, OWNER));
 
     @Override
     protected List<PropertyDescriptor> getSupportedPropertyDescriptors() {
@@ -94,21 +94,21 @@ public class PutS3Object extends AbstractS3Processor {
     @Override
     protected PropertyDescriptor getSupportedDynamicPropertyDescriptor(final String propertyDescriptorName) {
         return new PropertyDescriptor.Builder()
-            .name(propertyDescriptorName)
-            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-            .expressionLanguageSupported(true)
-            .dynamic(true)
-            .build();
+                .name(propertyDescriptorName)
+                .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+                .expressionLanguageSupported(true)
+                .dynamic(true)
+                .build();
     }
 
     public void onTrigger(final ProcessContext context, final ProcessSession session) {
         FlowFile flowFile = session.get();
-        if ( flowFile == null ) {
+        if (flowFile == null) {
             return;
         }
-        
+
         final long startNanos = System.nanoTime();
-        
+
         final String bucket = context.getProperty(BUCKET).evaluateAttributeExpressions(flowFile).getValue();
         final String key = context.getProperty(KEY).evaluateAttributeExpressions(flowFile).getValue();
 
@@ -123,59 +123,59 @@ public class PutS3Object extends AbstractS3Processor {
                         final ObjectMetadata objectMetadata = new ObjectMetadata();
                         objectMetadata.setContentDisposition(ff.getAttribute(CoreAttributes.FILENAME.key()));
                         objectMetadata.setContentLength(ff.getSize());
-                        
+
                         final String expirationRule = context.getProperty(EXPIRATION_RULE_ID).evaluateAttributeExpressions(ff).getValue();
-                        if ( expirationRule != null ) {
+                        if (expirationRule != null) {
                             objectMetadata.setExpirationTimeRuleId(expirationRule);
                         }
-    
+
                         final Map<String, String> userMetadata = new HashMap<>();
-                        for ( final Map.Entry<PropertyDescriptor, String> entry : context.getProperties().entrySet() ) {
-                            if ( entry.getKey().isDynamic() ) {
+                        for (final Map.Entry<PropertyDescriptor, String> entry : context.getProperties().entrySet()) {
+                            if (entry.getKey().isDynamic()) {
                                 final String value = context.getProperty(entry.getKey()).evaluateAttributeExpressions(ff).getValue();
                                 userMetadata.put(entry.getKey().getName(), value);
                             }
                         }
-                        
-                        if ( !userMetadata.isEmpty() ) {
+
+                        if (!userMetadata.isEmpty()) {
                             objectMetadata.setUserMetadata(userMetadata);
                         }
-                        
+
                         final PutObjectRequest request = new PutObjectRequest(bucket, key, in, objectMetadata);
                         request.setStorageClass(StorageClass.valueOf(context.getProperty(STORAGE_CLASS).getValue()));
                         final AccessControlList acl = createACL(context, ff);
-                        if ( acl != null ) {
+                        if (acl != null) {
                             request.setAccessControlList(acl);
                         }
-                        
+
                         final PutObjectResult result = s3.putObject(request);
-                        if ( result.getVersionId() != null ) {
+                        if (result.getVersionId() != null) {
                             attributes.put("s3.version", result.getVersionId());
                         }
-                        
+
                         attributes.put("s3.etag", result.getETag());
-                        
+
                         final Date expiration = result.getExpirationTime();
-                        if ( expiration != null ) {
+                        if (expiration != null) {
                             attributes.put("s3.expiration", expiration.toString());
                         }
                     }
                 }
             });
-            
-            if ( !attributes.isEmpty() ) {
+
+            if (!attributes.isEmpty()) {
                 flowFile = session.putAllAttributes(flowFile, attributes);
             }
             session.transfer(flowFile, REL_SUCCESS);
-            
+
             final String url = "http://" + bucket + ".s3.amazonaws.com/" + key;
             final long millis = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNanos);
             session.getProvenanceReporter().send(flowFile, url, millis);
-            
-            getLogger().info("Successfully put {} to Amazon S3 in {} milliseconds", new Object[] {ff, millis});
+
+            getLogger().info("Successfully put {} to Amazon S3 in {} milliseconds", new Object[]{ff, millis});
         } catch (final ProcessException | AmazonClientException pe) {
-            getLogger().error("Failed to put {} to Amazon S3 due to {}", new Object[] {flowFile, pe});
+            getLogger().error("Failed to put {} to Amazon S3 due to {}", new Object[]{flowFile, pe});
             session.transfer(flowFile, REL_FAILURE);
         }
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sns/AbstractSNSProcessor.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sns/AbstractSNSProcessor.java b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sns/AbstractSNSProcessor.java
index 5447169..5b57647 100644
--- a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sns/AbstractSNSProcessor.java
+++ b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sns/AbstractSNSProcessor.java
@@ -28,30 +28,28 @@ import com.amazonaws.services.sns.AmazonSNSClient;
 
 public abstract class AbstractSNSProcessor extends AbstractAWSProcessor<AmazonSNSClient> {
 
-    protected static final AllowableValue ARN_TYPE_TOPIC = 
-        new AllowableValue("Topic ARN", "Topic ARN", "The ARN is the name of a topic");
-    protected static final AllowableValue ARN_TYPE_TARGET = 
-        new AllowableValue("Target ARN", "Target ARN", "The ARN is the name of a particular Target, used to notify a specific subscriber");
-    
+    protected static final AllowableValue ARN_TYPE_TOPIC
+            = new AllowableValue("Topic ARN", "Topic ARN", "The ARN is the name of a topic");
+    protected static final AllowableValue ARN_TYPE_TARGET
+            = new AllowableValue("Target ARN", "Target ARN", "The ARN is the name of a particular Target, used to notify a specific subscriber");
+
     public static final PropertyDescriptor ARN = new PropertyDescriptor.Builder()
-        .name("Amazon Resource Name (ARN)")
-        .description("The name of the resource to which notifications should be published")
-        .expressionLanguageSupported(true)
-        .required(true)
-        .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-        .build();
-    
+            .name("Amazon Resource Name (ARN)")
+            .description("The name of the resource to which notifications should be published")
+            .expressionLanguageSupported(true)
+            .required(true)
+            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+            .build();
+
     public static final PropertyDescriptor ARN_TYPE = new PropertyDescriptor.Builder()
-        .name("ARN Type")
-        .description("The type of Amazon Resource Name that is being used.")
-        .expressionLanguageSupported(false)
-        .required(true)
-        .allowableValues(ARN_TYPE_TOPIC, ARN_TYPE_TARGET)
-        .defaultValue(ARN_TYPE_TOPIC.getValue())
-        .build();
-    
-    
-    
+            .name("ARN Type")
+            .description("The type of Amazon Resource Name that is being used.")
+            .expressionLanguageSupported(false)
+            .required(true)
+            .allowableValues(ARN_TYPE_TOPIC, ARN_TYPE_TARGET)
+            .defaultValue(ARN_TYPE_TOPIC.getValue())
+            .build();
+
     @Override
     protected AmazonSNSClient createClient(final ProcessContext context, final AWSCredentials credentials, final ClientConfiguration config) {
         return new AmazonSNSClient(credentials, config);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sns/PutSNS.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sns/PutSNS.java b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sns/PutSNS.java
index 1de3251..b1a604f 100644
--- a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sns/PutSNS.java
+++ b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sns/PutSNS.java
@@ -46,34 +46,34 @@ import com.amazonaws.services.sns.model.PublishRequest;
 public class PutSNS extends AbstractSNSProcessor {
 
     public static final PropertyDescriptor CHARACTER_ENCODING = new PropertyDescriptor.Builder()
-        .name("Character Set")
-        .description("The character set in which the FlowFile's content is encoded")
-        .defaultValue("UTF-8")
-        .expressionLanguageSupported(true)
-        .addValidator(StandardValidators.CHARACTER_SET_VALIDATOR)
-        .required(true)
-        .build();
+            .name("Character Set")
+            .description("The character set in which the FlowFile's content is encoded")
+            .defaultValue("UTF-8")
+            .expressionLanguageSupported(true)
+            .addValidator(StandardValidators.CHARACTER_SET_VALIDATOR)
+            .required(true)
+            .build();
     public static final PropertyDescriptor USE_JSON_STRUCTURE = new PropertyDescriptor.Builder()
-        .name("Use JSON Structure")
-        .description("If true, the contents of the FlowFile must be JSON with a top-level element named 'default'. Additional elements can be used to send different messages to different protocols. See the Amazon SNS Documentation for more information.")
-        .defaultValue("false")
-        .allowableValues("true", "false")
-        .required(true)
-        .build();
+            .name("Use JSON Structure")
+            .description("If true, the contents of the FlowFile must be JSON with a top-level element named 'default'. Additional elements can be used to send different messages to different protocols. See the Amazon SNS Documentation for more information.")
+            .defaultValue("false")
+            .allowableValues("true", "false")
+            .required(true)
+            .build();
     public static final PropertyDescriptor SUBJECT = new PropertyDescriptor.Builder()
-        .name("E-mail Subject")
-        .description("The optional subject to use for any subscribers that are subscribed via E-mail")
-        .expressionLanguageSupported(true)
-        .required(false)
-        .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-        .build();
-        
+            .name("E-mail Subject")
+            .description("The optional subject to use for any subscribers that are subscribed via E-mail")
+            .expressionLanguageSupported(true)
+            .required(false)
+            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+            .build();
+
     public static final List<PropertyDescriptor> properties = Collections.unmodifiableList(
-            Arrays.asList(ARN, ARN_TYPE, SUBJECT, REGION, ACCESS_KEY, SECRET_KEY, CREDENTAILS_FILE, TIMEOUT, 
-                    USE_JSON_STRUCTURE, CHARACTER_ENCODING) );
+            Arrays.asList(ARN, ARN_TYPE, SUBJECT, REGION, ACCESS_KEY, SECRET_KEY, CREDENTAILS_FILE, TIMEOUT,
+                    USE_JSON_STRUCTURE, CHARACTER_ENCODING));
 
     public static final int MAX_SIZE = 256 * 1024;
-    
+
     @Override
     protected List<PropertyDescriptor> getSupportedPropertyDescriptors() {
         return properties;
@@ -82,71 +82,70 @@ public class PutSNS extends AbstractSNSProcessor {
     @Override
     protected PropertyDescriptor getSupportedDynamicPropertyDescriptor(final String propertyDescriptorName) {
         return new PropertyDescriptor.Builder()
-            .name(propertyDescriptorName)
-            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-            .expressionLanguageSupported(true)
-            .required(false)
-            .dynamic(true)
-            .build();
+                .name(propertyDescriptorName)
+                .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+                .expressionLanguageSupported(true)
+                .required(false)
+                .dynamic(true)
+                .build();
     }
-    
-    
+
     @Override
     public void onTrigger(final ProcessContext context, final ProcessSession session) {
         FlowFile flowFile = session.get();
-        if ( flowFile == null ) {
+        if (flowFile == null) {
             return;
         }
 
-        if ( flowFile.getSize() > MAX_SIZE ) {
-            getLogger().error("Cannot publish {} to SNS because its size exceeds Amazon SNS's limit of 256KB; routing to failure", new Object[] {flowFile});
+        if (flowFile.getSize() > MAX_SIZE) {
+            getLogger().error("Cannot publish {} to SNS because its size exceeds Amazon SNS's limit of 256KB; routing to failure", new Object[]{flowFile});
             session.transfer(flowFile, REL_FAILURE);
             return;
         }
-        
+
         final Charset charset = Charset.forName(context.getProperty(CHARACTER_ENCODING).evaluateAttributeExpressions(flowFile).getValue());
-        
+
         final ByteArrayOutputStream baos = new ByteArrayOutputStream();
         session.exportTo(flowFile, baos);
         final String message = new String(baos.toByteArray(), charset);
-        
+
         final AmazonSNSClient client = getClient();
         final PublishRequest request = new PublishRequest();
         request.setMessage(message);
-        
-        if ( context.getProperty(USE_JSON_STRUCTURE).asBoolean() ) {
+
+        if (context.getProperty(USE_JSON_STRUCTURE).asBoolean()) {
             request.setMessageStructure("json");
         }
-        
+
         final String arn = context.getProperty(ARN).evaluateAttributeExpressions(flowFile).getValue();
         final String arnType = context.getProperty(ARN_TYPE).getValue();
-        if ( arnType.equalsIgnoreCase(ARN_TYPE_TOPIC.getValue()) ) {
+        if (arnType.equalsIgnoreCase(ARN_TYPE_TOPIC.getValue())) {
             request.setTopicArn(arn);
         } else {
             request.setTargetArn(arn);
         }
-        
+
         final String subject = context.getProperty(SUBJECT).evaluateAttributeExpressions(flowFile).getValue();
-        if ( subject != null ) {
+        if (subject != null) {
             request.setSubject(subject);
         }
 
-        for ( final Map.Entry<PropertyDescriptor, String> entry : context.getProperties().entrySet() ) {
-            if ( entry.getKey().isDynamic() && !isEmpty(entry.getValue()) ) {
+        for (final Map.Entry<PropertyDescriptor, String> entry : context.getProperties().entrySet()) {
+            if (entry.getKey().isDynamic() && !isEmpty(entry.getValue())) {
                 final MessageAttributeValue value = new MessageAttributeValue();
                 value.setStringValue(context.getProperty(entry.getKey()).evaluateAttributeExpressions(flowFile).getValue());
                 value.setDataType("String");
                 request.addMessageAttributesEntry(entry.getKey().getName(), value);
             }
         }
-        
+
         try {
             client.publish(request);
             session.transfer(flowFile, REL_SUCCESS);
             session.getProvenanceReporter().send(flowFile, arn);
-            getLogger().info("Successfully published notification for {}", new Object[] {flowFile});
+            getLogger().info("Successfully published notification for {}", new Object[]{flowFile});
         } catch (final Exception e) {
-            getLogger().error("Failed to publish Amazon SNS message for {} due to {}", new Object[] {flowFile, e});
+            getLogger().error("Failed to publish Amazon SNS message for {} due to {}", new Object[]{flowFile, e});
             session.transfer(flowFile, REL_FAILURE);
             return;
         }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sqs/AbstractSQSProcessor.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sqs/AbstractSQSProcessor.java b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sqs/AbstractSQSProcessor.java
index 2ef749f..3cee02d 100644
--- a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sqs/AbstractSQSProcessor.java
+++ b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sqs/AbstractSQSProcessor.java
@@ -28,20 +28,20 @@ import com.amazonaws.services.sqs.AmazonSQSClient;
 public abstract class AbstractSQSProcessor extends AbstractAWSProcessor<AmazonSQSClient> {
 
     public static final PropertyDescriptor BATCH_SIZE = new PropertyDescriptor.Builder()
-        .name("Batch Size")
-        .description("The maximum number of messages to send in a single network request")
-        .required(true)
-        .addValidator(StandardValidators.POSITIVE_INTEGER_VALIDATOR)
-        .defaultValue("25")
-        .build();
+            .name("Batch Size")
+            .description("The maximum number of messages to send in a single network request")
+            .required(true)
+            .addValidator(StandardValidators.POSITIVE_INTEGER_VALIDATOR)
+            .defaultValue("25")
+            .build();
 
     public static final PropertyDescriptor QUEUE_URL = new PropertyDescriptor.Builder()
-        .name("Queue URL")
-        .description("The URL of the queue to act upon")
-        .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-        .expressionLanguageSupported(true)
-        .required(true)
-        .build();
+            .name("Queue URL")
+            .description("The URL of the queue to act upon")
+            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+            .expressionLanguageSupported(true)
+            .required(true)
+            .build();
 
     @Override
     protected AmazonSQSClient createClient(final ProcessContext context, final AWSCredentials credentials, final ClientConfiguration config) {

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sqs/DeleteSQS.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sqs/DeleteSQS.java b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sqs/DeleteSQS.java
index 2416044..65e020d 100644
--- a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sqs/DeleteSQS.java
+++ b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sqs/DeleteSQS.java
@@ -40,54 +40,54 @@ import com.amazonaws.services.sqs.model.DeleteMessageBatchRequestEntry;
 @Tags({"Amazon", "AWS", "SQS", "Queue", "Delete"})
 @CapabilityDescription("Deletes a message from an Amazon Simple Queuing Service Queue")
 public class DeleteSQS extends AbstractSQSProcessor {
+
     public static final PropertyDescriptor RECEIPT_HANDLE = new PropertyDescriptor.Builder()
-        .name("Receipt Handle")
-        .description("The identifier that specifies the receipt of the message")
-        .expressionLanguageSupported(true)
-        .required(true)
-        .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-        .defaultValue("${sqs.receipt.handle}")
-        .build();
-    
+            .name("Receipt Handle")
+            .description("The identifier that specifies the receipt of the message")
+            .expressionLanguageSupported(true)
+            .required(true)
+            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+            .defaultValue("${sqs.receipt.handle}")
+            .build();
+
     public static final List<PropertyDescriptor> properties = Collections.unmodifiableList(
-            Arrays.asList(ACCESS_KEY, SECRET_KEY, REGION, QUEUE_URL, TIMEOUT) );
+            Arrays.asList(ACCESS_KEY, SECRET_KEY, REGION, QUEUE_URL, TIMEOUT));
 
     @Override
     protected List<PropertyDescriptor> getSupportedPropertyDescriptors() {
         return properties;
     }
 
-    
     @Override
     public void onTrigger(final ProcessContext context, final ProcessSession session) {
         List<FlowFile> flowFiles = session.get(1);
-        if ( flowFiles.isEmpty() ) {
+        if (flowFiles.isEmpty()) {
             return;
         }
-        
+
         final FlowFile firstFlowFile = flowFiles.get(0);
         final String queueUrl = context.getProperty(QUEUE_URL).evaluateAttributeExpressions(firstFlowFile).getValue();
-        
+
         final AmazonSQSClient client = getClient();
         final DeleteMessageBatchRequest request = new DeleteMessageBatchRequest();
         request.setQueueUrl(queueUrl);
-        
+
         final List<DeleteMessageBatchRequestEntry> entries = new ArrayList<>(flowFiles.size());
-        
-        for ( final FlowFile flowFile : flowFiles ) {
+
+        for (final FlowFile flowFile : flowFiles) {
             final DeleteMessageBatchRequestEntry entry = new DeleteMessageBatchRequestEntry();
             entry.setReceiptHandle(context.getProperty(RECEIPT_HANDLE).evaluateAttributeExpressions(flowFile).getValue());
             entries.add(entry);
         }
-        
+
         request.setEntries(entries);
-        
+
         try {
             client.deleteMessageBatch(request);
-            getLogger().info("Successfully deleted {} objects from SQS", new Object[] {flowFiles.size()});
+            getLogger().info("Successfully deleted {} objects from SQS", new Object[]{flowFiles.size()});
             session.transfer(flowFiles, REL_SUCCESS);
         } catch (final Exception e) {
-            getLogger().error("Failed to delete {} objects from SQS due to {}", new Object[] {flowFiles.size(), e});
+            getLogger().error("Failed to delete {} objects from SQS due to {}", new Object[]{flowFiles.size(), e});
             session.transfer(flowFiles, REL_FAILURE);
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sqs/GetSQS.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sqs/GetSQS.java b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sqs/GetSQS.java
index 6c0257b..929a437 100644
--- a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sqs/GetSQS.java
+++ b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sqs/GetSQS.java
@@ -51,116 +51,116 @@ import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
 import com.amazonaws.services.sqs.model.ReceiveMessageResult;
 
 @SupportsBatching
-@Tags({ "Amazon", "AWS", "SQS", "Queue", "Get", "Fetch", "Poll"})
+@Tags({"Amazon", "AWS", "SQS", "Queue", "Get", "Fetch", "Poll"})
 @SeeAlso({PutSQS.class, DeleteSQS.class})
 @CapabilityDescription("Fetches messages from an Amazon Simple Queuing Service Queue")
 @WritesAttributes({
-	@WritesAttribute(attribute="hash.value", description="The MD5 sum of the message"),
-	@WritesAttribute(attribute="hash.algorithm", description="MD5"),
-	@WritesAttribute(attribute="sqs.message.id", description="The unique identifier of the SQS message"),
-	@WritesAttribute(attribute="sqs.receipt.handle", description="The SQS Receipt Handle that is to be used to delete the message from the queue")
+    @WritesAttribute(attribute = "hash.value", description = "The MD5 sum of the message"),
+    @WritesAttribute(attribute = "hash.algorithm", description = "MD5"),
+    @WritesAttribute(attribute = "sqs.message.id", description = "The unique identifier of the SQS message"),
+    @WritesAttribute(attribute = "sqs.receipt.handle", description = "The SQS Receipt Handle that is to be used to delete the message from the queue")
 })
 public class GetSQS extends AbstractSQSProcessor {
+
     public static final PropertyDescriptor CHARSET = new PropertyDescriptor.Builder()
-        .name("Character Set")
-        .description("The Character Set that should be used to encode the textual content of the SQS message")
-        .required(true)
-        .defaultValue("UTF-8")
-        .allowableValues(Charset.availableCharsets().keySet().toArray(new String[0]))
-        .build();
-    
+            .name("Character Set")
+            .description("The Character Set that should be used to encode the textual content of the SQS message")
+            .required(true)
+            .defaultValue("UTF-8")
+            .allowableValues(Charset.availableCharsets().keySet().toArray(new String[0]))
+            .build();
+
     public static final PropertyDescriptor AUTO_DELETE = new PropertyDescriptor.Builder()
-        .name("Auto Delete Messages")
-        .description("Specifies whether the messages should be automatically deleted by the processors once they have been received.")
-        .required(true)
-        .allowableValues("true", "false")
-        .defaultValue("true")
-        .build();
-    
+            .name("Auto Delete Messages")
+            .description("Specifies whether the messages should be automatically deleted by the processors once they have been received.")
+            .required(true)
+            .allowableValues("true", "false")
+            .defaultValue("true")
+            .build();
+
     public static final PropertyDescriptor VISIBILITY_TIMEOUT = new PropertyDescriptor.Builder()
-        .name("Visibility Timeout")
-        .description("The amount of time after a message is received but not deleted that the message is hidden from other consumers")
-        .expressionLanguageSupported(false)
-        .required(true)
-        .defaultValue("15 mins")
-        .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
-        .build();
-    
+            .name("Visibility Timeout")
+            .description("The amount of time after a message is received but not deleted that the message is hidden from other consumers")
+            .expressionLanguageSupported(false)
+            .required(true)
+            .defaultValue("15 mins")
+            .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
+            .build();
+
     public static final PropertyDescriptor BATCH_SIZE = new PropertyDescriptor.Builder()
-        .name("Batch Size")
-        .description("The maximum number of messages to send in a single network request")
-        .required(true)
-        .addValidator(StandardValidators.createLongValidator(1L, 10L, true))
-        .defaultValue("10")
-        .build();
-
-    
+            .name("Batch Size")
+            .description("The maximum number of messages to send in a single network request")
+            .required(true)
+            .addValidator(StandardValidators.createLongValidator(1L, 10L, true))
+            .defaultValue("10")
+            .build();
+
     public static final PropertyDescriptor STATIC_QUEUE_URL = new PropertyDescriptor.Builder()
-        .fromPropertyDescriptor(QUEUE_URL)
-        .expressionLanguageSupported(false)
-        .build();
-    
+            .fromPropertyDescriptor(QUEUE_URL)
+            .expressionLanguageSupported(false)
+            .build();
+
     public static final List<PropertyDescriptor> properties = Collections.unmodifiableList(
-            Arrays.asList(STATIC_QUEUE_URL, AUTO_DELETE, ACCESS_KEY, SECRET_KEY, CREDENTAILS_FILE, REGION, BATCH_SIZE, TIMEOUT, CHARSET, VISIBILITY_TIMEOUT) );
+            Arrays.asList(STATIC_QUEUE_URL, AUTO_DELETE, ACCESS_KEY, SECRET_KEY, CREDENTAILS_FILE, REGION, BATCH_SIZE, TIMEOUT, CHARSET, VISIBILITY_TIMEOUT));
 
     @Override
     protected List<PropertyDescriptor> getSupportedPropertyDescriptors() {
         return properties;
     }
-    
+
     @Override
     public Set<Relationship> getRelationships() {
         return Collections.singleton(REL_SUCCESS);
     }
-    
+
     @Override
     public void onTrigger(final ProcessContext context, final ProcessSession session) {
         final String queueUrl = context.getProperty(STATIC_QUEUE_URL).getValue();
-        
+
         final AmazonSQSClient client = getClient();
-        
+
         final ReceiveMessageRequest request = new ReceiveMessageRequest();
         request.setAttributeNames(Collections.singleton("All"));
         request.setMaxNumberOfMessages(context.getProperty(BATCH_SIZE).asInteger());
         request.setVisibilityTimeout(context.getProperty(VISIBILITY_TIMEOUT).asTimePeriod(TimeUnit.SECONDS).intValue());
         request.setQueueUrl(queueUrl);
-        
+
         final Charset charset = Charset.forName(context.getProperty(CHARSET).getValue());
-        
+
         final ReceiveMessageResult result;
         try {
             result = client.receiveMessage(request);
         } catch (final Exception e) {
-            getLogger().error("Failed to receive messages from Amazon SQS due to {}", new Object[] {e});
+            getLogger().error("Failed to receive messages from Amazon SQS due to {}", new Object[]{e});
             context.yield();
             return;
         }
-        
+
         final List<Message> messages = result.getMessages();
-        if ( messages.isEmpty() ) {
+        if (messages.isEmpty()) {
             context.yield();
             return;
         }
 
         final boolean autoDelete = context.getProperty(AUTO_DELETE).asBoolean();
-        
-        for ( final Message message : messages ) {
+
+        for (final Message message : messages) {
             FlowFile flowFile = session.create();
-            
+
             final Map<String, String> attributes = new HashMap<>();
-            for ( final Map.Entry<String, String> entry : message.getAttributes().entrySet() ) {
+            for (final Map.Entry<String, String> entry : message.getAttributes().entrySet()) {
                 attributes.put("sqs." + entry.getKey(), entry.getValue());
             }
-            
-            for ( final Map.Entry<String, MessageAttributeValue> entry : message.getMessageAttributes().entrySet() ) {
+
+            for (final Map.Entry<String, MessageAttributeValue> entry : message.getMessageAttributes().entrySet()) {
                 attributes.put("sqs." + entry.getKey(), entry.getValue().getStringValue());
             }
-            
+
             attributes.put("hash.value", message.getMD5OfBody());
             attributes.put("hash.algorithm", "md5");
             attributes.put("sqs.message.id", message.getMessageId());
             attributes.put("sqs.receipt.handle", message.getReceiptHandle());
-            
+
             flowFile = session.putAllAttributes(flowFile, attributes);
             flowFile = session.write(flowFile, new OutputStreamCallback() {
                 @Override
@@ -168,37 +168,37 @@ public class GetSQS extends AbstractSQSProcessor {
                     out.write(message.getBody().getBytes(charset));
                 }
             });
-            
+
             session.transfer(flowFile, REL_SUCCESS);
             session.getProvenanceReporter().receive(flowFile, queueUrl);
-            
-            getLogger().info("Successfully received {} from Amazon SQS", new Object[] {flowFile});
+
+            getLogger().info("Successfully received {} from Amazon SQS", new Object[]{flowFile});
         }
-        
-        if ( autoDelete ) {
+
+        if (autoDelete) {
             // If we want to auto-delete messages, we must fist commit the session to ensure that the data
             // is persisted in NiFi's repositories.
             session.commit();
-            
+
             final DeleteMessageBatchRequest deleteRequest = new DeleteMessageBatchRequest();
             deleteRequest.setQueueUrl(queueUrl);
             final List<DeleteMessageBatchRequestEntry> deleteRequestEntries = new ArrayList<>();
-            for ( final Message message : messages ) {
+            for (final Message message : messages) {
                 final DeleteMessageBatchRequestEntry entry = new DeleteMessageBatchRequestEntry();
                 entry.setId(message.getMessageId());
                 entry.setReceiptHandle(message.getReceiptHandle());
                 deleteRequestEntries.add(entry);
             }
-            
+
             deleteRequest.setEntries(deleteRequestEntries);
-            
+
             try {
                 client.deleteMessageBatch(deleteRequest);
             } catch (final Exception e) {
-                getLogger().error("Received {} messages from Amazon SQS but failed to delete the messages; these messages may be duplicated. Reason for deletion failure: {}", new Object[] {messages.size(), e});
+                getLogger().error("Received {} messages from Amazon SQS but failed to delete the messages; these messages may be duplicated. Reason for deletion failure: {}", new Object[]{messages.size(), e});
             }
         }
-        
+
     }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sqs/PutSQS.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sqs/PutSQS.java b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sqs/PutSQS.java
index 81268fe..3961f32 100644
--- a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sqs/PutSQS.java
+++ b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/sqs/PutSQS.java
@@ -44,29 +44,28 @@ import com.amazonaws.services.sqs.model.MessageAttributeValue;
 import com.amazonaws.services.sqs.model.SendMessageBatchRequest;
 import com.amazonaws.services.sqs.model.SendMessageBatchRequestEntry;
 
-
 @SupportsBatching
 @Tags({"Amazon", "AWS", "SQS", "Queue", "Put", "Publish"})
 @SeeAlso({GetSQS.class, DeleteSQS.class})
 @CapabilityDescription("Publishes a message to an Amazon Simple Queuing Service Queue")
-@DynamicProperty(name="The name of a Message Attribute to add to the message", value="The value of the Message Attribute", 
-	description="Allows the user to add key/value pairs as Message Attributes by adding a property whose name will become the name of "
-			+ "the Message Attribute and value will become the value of the Message Attribute", supportsExpressionLanguage=true)
+@DynamicProperty(name = "The name of a Message Attribute to add to the message", value = "The value of the Message Attribute",
+        description = "Allows the user to add key/value pairs as Message Attributes by adding a property whose name will become the name of "
+        + "the Message Attribute and value will become the value of the Message Attribute", supportsExpressionLanguage = true)
 public class PutSQS extends AbstractSQSProcessor {
 
     public static final PropertyDescriptor DELAY = new PropertyDescriptor.Builder()
-        .name("Delay")
-        .description("The amount of time to delay the message before it becomes available to consumers")
-        .required(true)
-        .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
-        .defaultValue("0 secs")
-        .build();
+            .name("Delay")
+            .description("The amount of time to delay the message before it becomes available to consumers")
+            .required(true)
+            .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
+            .defaultValue("0 secs")
+            .build();
 
     public static final List<PropertyDescriptor> properties = Collections.unmodifiableList(
-            Arrays.asList(QUEUE_URL, ACCESS_KEY, SECRET_KEY, CREDENTAILS_FILE, REGION, DELAY, TIMEOUT) );
+            Arrays.asList(QUEUE_URL, ACCESS_KEY, SECRET_KEY, CREDENTAILS_FILE, REGION, DELAY, TIMEOUT));
 
     private volatile List<PropertyDescriptor> userDefinedProperties = Collections.emptyList();
-    
+
     @Override
     protected List<PropertyDescriptor> getSupportedPropertyDescriptors() {
         return properties;
@@ -75,70 +74,70 @@ public class PutSQS extends AbstractSQSProcessor {
     @Override
     protected PropertyDescriptor getSupportedDynamicPropertyDescriptor(final String propertyDescriptorName) {
         return new PropertyDescriptor.Builder()
-            .name(propertyDescriptorName)
-            .expressionLanguageSupported(true)
-            .required(false)
-            .dynamic(true)
-            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-            .build();
+                .name(propertyDescriptorName)
+                .expressionLanguageSupported(true)
+                .required(false)
+                .dynamic(true)
+                .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+                .build();
     }
-    
+
     @OnScheduled
     public void setup(final ProcessContext context) {
         userDefinedProperties = new ArrayList<>();
-        for ( final PropertyDescriptor descriptor : context.getProperties().keySet() ) {
-            if ( descriptor.isDynamic() ) {
+        for (final PropertyDescriptor descriptor : context.getProperties().keySet()) {
+            if (descriptor.isDynamic()) {
                 userDefinedProperties.add(descriptor);
             }
         }
     }
-    
+
     @Override
     public void onTrigger(final ProcessContext context, final ProcessSession session) {
         FlowFile flowFile = session.get();
-        if ( flowFile == null ) {
+        if (flowFile == null) {
             return;
         }
-        
+
         final long startNanos = System.nanoTime();
         final AmazonSQSClient client = getClient();
         final SendMessageBatchRequest request = new SendMessageBatchRequest();
         final String queueUrl = context.getProperty(QUEUE_URL).evaluateAttributeExpressions(flowFile).getValue();
         request.setQueueUrl(queueUrl);
-        
+
         final Set<SendMessageBatchRequestEntry> entries = new HashSet<>();
-        
+
         final SendMessageBatchRequestEntry entry = new SendMessageBatchRequestEntry();
         entry.setId(flowFile.getAttribute("uuid"));
         final ByteArrayOutputStream baos = new ByteArrayOutputStream();
         session.exportTo(flowFile, baos);
         final String flowFileContent = baos.toString();
         entry.setMessageBody(flowFileContent);
-        
+
         final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
-        
-        for ( final PropertyDescriptor descriptor : userDefinedProperties ) {
+
+        for (final PropertyDescriptor descriptor : userDefinedProperties) {
             final MessageAttributeValue mav = new MessageAttributeValue();
             mav.setDataType("String");
             mav.setStringValue(context.getProperty(descriptor).evaluateAttributeExpressions(flowFile).getValue());
             messageAttributes.put(descriptor.getName(), mav);
         }
-        
+
         entry.setMessageAttributes(messageAttributes);
         entry.setDelaySeconds(context.getProperty(DELAY).asTimePeriod(TimeUnit.SECONDS).intValue());
         entries.add(entry);
-        
+
         request.setEntries(entries);
-        
+
         try {
             client.sendMessageBatch(request);
         } catch (final Exception e) {
-            getLogger().error("Failed to send messages to Amazon SQS due to {}; routing to failure", new Object[] {e});
+            getLogger().error("Failed to send messages to Amazon SQS due to {}; routing to failure", new Object[]{e});
             session.transfer(flowFile, REL_FAILURE);
             return;
         }
-        
-        getLogger().info("Successfully published message to Amazon SQS for {}", new Object[] {flowFile});
+
+        getLogger().info("Successfully published message to Amazon SQS for {}", new Object[]{flowFile});
         session.transfer(flowFile, REL_SUCCESS);
         final long transmissionMillis = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNanos);
         session.getProvenanceReporter().send(flowFile, queueUrl, transmissionMillis);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/s3/TestFetchS3Object.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/s3/TestFetchS3Object.java b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/s3/TestFetchS3Object.java
index 40f9515..0321514 100644
--- a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/s3/TestFetchS3Object.java
+++ b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/s3/TestFetchS3Object.java
@@ -1,3 +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.
+ */
 package org.apache.nifi.processors.aws.s3;
 
 import java.io.IOException;
@@ -15,30 +31,31 @@ import org.junit.Test;
 
 @Ignore("For local testing only - interacts with S3 so the credentials file must be configured and all necessary buckets created")
 public class TestFetchS3Object {
+
     private final String CREDENTIALS_FILE = System.getProperty("user.home") + "/aws-credentials.properties";
-    
+
     @Test
     public void testGet() throws IOException {
         final TestRunner runner = TestRunners.newTestRunner(new FetchS3Object());
         runner.setProperty(FetchS3Object.BUCKET, "anonymous-test-bucket-00000000");
         runner.setProperty(FetchS3Object.CREDENTAILS_FILE, CREDENTIALS_FILE);
         runner.setProperty(FetchS3Object.KEY, "folder/1.txt");
-        
+
         final Map<String, String> attrs = new HashMap<>();
         attrs.put("start", "0");
-        
+
         runner.enqueue(new byte[0], attrs);
         runner.run(1);
-        
+
         runner.assertAllFlowFilesTransferred(FetchS3Object.REL_SUCCESS, 1);
         final List<MockFlowFile> ffs = runner.getFlowFilesForRelationship(FetchS3Object.REL_SUCCESS);
         final MockFlowFile out = ffs.iterator().next();
-        
+
         final byte[] expectedBytes = Files.readAllBytes(Paths.get("src/test/resources/hello.txt"));
         out.assertContentEquals(new String(expectedBytes));
-        for ( final Map.Entry<String, String> entry : out.getAttributes().entrySet() ) {
+        for (final Map.Entry<String, String> entry : out.getAttributes().entrySet()) {
             System.out.println(entry.getKey() + " : " + entry.getValue());
         }
     }
-    
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/s3/TestPutS3Object.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/s3/TestPutS3Object.java b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/s3/TestPutS3Object.java
index 0a019f3..de7816d 100644
--- a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/s3/TestPutS3Object.java
+++ b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/s3/TestPutS3Object.java
@@ -1,3 +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.
+ */
 package org.apache.nifi.processors.aws.s3;
 
 import java.io.IOException;
@@ -17,55 +33,54 @@ import com.amazonaws.services.s3.model.StorageClass;
 public class TestPutS3Object {
 
     private final String CREDENTIALS_FILE = System.getProperty("user.home") + "/aws-credentials.properties";
-    
+
     @Test
     public void testSimplePut() throws IOException {
         final TestRunner runner = TestRunners.newTestRunner(new PutS3Object());
         runner.setProperty(PutS3Object.CREDENTAILS_FILE, CREDENTIALS_FILE);
         runner.setProperty(PutS3Object.BUCKET, "test-bucket-00000000-0000-0000-0000-123456789012");
         runner.setProperty(PutS3Object.EXPIRATION_RULE_ID, "Expire Quickly");
-        Assert.assertTrue( runner.setProperty("x-custom-prop", "hello").isValid() );
-        
-        for (int i=0; i < 3; i++) {
+        Assert.assertTrue(runner.setProperty("x-custom-prop", "hello").isValid());
+
+        for (int i = 0; i < 3; i++) {
             final Map<String, String> attrs = new HashMap<>();
             attrs.put("filename", String.valueOf(i) + ".txt");
             runner.enqueue(Paths.get("src/test/resources/hello.txt"), attrs);
         }
         runner.run(3);
-        
+
         runner.assertAllFlowFilesTransferred(PutS3Object.REL_SUCCESS, 3);
     }
-    
+
     @Test
     public void testPutInFolder() throws IOException {
         final TestRunner runner = TestRunners.newTestRunner(new PutS3Object());
         runner.setProperty(PutS3Object.BUCKET, "test-bucket-00000000-0000-0000-0000-123456789012");
         runner.setProperty(PutS3Object.CREDENTAILS_FILE, CREDENTIALS_FILE);
         runner.setProperty(PutS3Object.EXPIRATION_RULE_ID, "Expire Quickly");
-        Assert.assertTrue( runner.setProperty("x-custom-prop", "hello").isValid() );
-        
+        Assert.assertTrue(runner.setProperty("x-custom-prop", "hello").isValid());
+
         final Map<String, String> attrs = new HashMap<>();
         attrs.put("filename", "folder/1.txt");
         runner.enqueue(Paths.get("src/test/resources/hello.txt"), attrs);
         runner.run();
-        
+
         runner.assertAllFlowFilesTransferred(PutS3Object.REL_SUCCESS, 1);
     }
 
-
     @Test
     public void testStorageClass() throws IOException {
         final TestRunner runner = TestRunners.newTestRunner(new PutS3Object());
         runner.setProperty(PutS3Object.BUCKET, "test-bucket-00000000-0000-0000-0000-123456789012");
         runner.setProperty(PutS3Object.CREDENTAILS_FILE, CREDENTIALS_FILE);
         runner.setProperty(PutS3Object.STORAGE_CLASS, StorageClass.ReducedRedundancy.name());
-        Assert.assertTrue( runner.setProperty("x-custom-prop", "hello").isValid() );
-        
+        Assert.assertTrue(runner.setProperty("x-custom-prop", "hello").isValid());
+
         final Map<String, String> attrs = new HashMap<>();
         attrs.put("filename", "folder/2.txt");
         runner.enqueue(Paths.get("src/test/resources/hello.txt"), attrs);
         runner.run();
-        
+
         runner.assertAllFlowFilesTransferred(PutS3Object.REL_SUCCESS, 1);
     }
 
@@ -75,12 +90,12 @@ public class TestPutS3Object {
         runner.setProperty(PutS3Object.BUCKET, "test-bucket-00000000-0000-0000-0000-123456789012");
         runner.setProperty(PutS3Object.CREDENTAILS_FILE, CREDENTIALS_FILE);
         runner.setProperty(PutS3Object.FULL_CONTROL_USER_LIST, "28545acd76c35c7e91f8409b95fd1aa0c0914bfa1ac60975d9f48bc3c5e090b5");
-        
+
         final Map<String, String> attrs = new HashMap<>();
         attrs.put("filename", "folder/4.txt");
         runner.enqueue(Paths.get("src/test/resources/hello.txt"), attrs);
         runner.run();
-        
+
         runner.assertAllFlowFilesTransferred(PutS3Object.REL_SUCCESS, 1);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/sns/TestPutSNS.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/sns/TestPutSNS.java b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/sns/TestPutSNS.java
index b505622..1e914c7 100644
--- a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/sns/TestPutSNS.java
+++ b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/sns/TestPutSNS.java
@@ -1,3 +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.
+ */
 package org.apache.nifi.processors.aws.sns;
 
 import static org.junit.Assert.assertTrue;
@@ -14,20 +30,21 @@ import org.junit.Test;
 
 @Ignore("For local testing only - interacts with S3 so the credentials file must be configured and all necessary buckets created")
 public class TestPutSNS {
+
     private final String CREDENTIALS_FILE = System.getProperty("user.home") + "/aws-credentials.properties";
-    
+
     @Test
     public void testPublish() throws IOException {
         final TestRunner runner = TestRunners.newTestRunner(new PutSNS());
         runner.setProperty(PutSNS.CREDENTAILS_FILE, CREDENTIALS_FILE);
         runner.setProperty(PutSNS.ARN, "arn:aws:sns:us-west-2:100515378163:test-topic-1");
-        assertTrue( runner.setProperty("DynamicProperty", "hello!").isValid() );
-        
+        assertTrue(runner.setProperty("DynamicProperty", "hello!").isValid());
+
         final Map<String, String> attrs = new HashMap<>();
         attrs.put("filename", "1.txt");
         runner.enqueue(Paths.get("src/test/resources/hello.txt"), attrs);
         runner.run();
-        
+
         runner.assertAllFlowFilesTransferred(PutSNS.REL_SUCCESS, 1);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/sqs/TestGetSQS.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/sqs/TestGetSQS.java b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/sqs/TestGetSQS.java
index de4a5d9..0e70e7b 100644
--- a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/sqs/TestGetSQS.java
+++ b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/sqs/TestGetSQS.java
@@ -1,3 +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.
+ */
 package org.apache.nifi.processors.aws.sqs;
 
 import java.util.List;
@@ -11,6 +27,7 @@ import org.junit.Test;
 
 @Ignore("For local testing only - interacts with S3 so the credentials file must be configured and all necessary buckets created")
 public class TestGetSQS {
+
     private final String CREDENTIALS_FILE = System.getProperty("user.home") + "/aws-credentials.properties";
 
     @Test
@@ -19,11 +36,11 @@ public class TestGetSQS {
         runner.setProperty(PutSNS.CREDENTAILS_FILE, CREDENTIALS_FILE);
         runner.setProperty(GetSQS.TIMEOUT, "30 secs");
         runner.setProperty(GetSQS.QUEUE_URL, "https://sqs.us-west-2.amazonaws.com/100515378163/test-queue-000000000");
-        
+
         runner.run(1);
-        
+
         final List<MockFlowFile> flowFiles = runner.getFlowFilesForRelationship(GetSQS.REL_SUCCESS);
-        for ( final MockFlowFile mff : flowFiles ) {
+        for (final MockFlowFile mff : flowFiles) {
             System.out.println(mff.getAttributes());
             System.out.println(new String(mff.toByteArray()));
         }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/sqs/TestPutSQS.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/sqs/TestPutSQS.java b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/sqs/TestPutSQS.java
index a90a4ce..1f9851a 100644
--- a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/sqs/TestPutSQS.java
+++ b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/sqs/TestPutSQS.java
@@ -1,3 +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.
+ */
 package org.apache.nifi.processors.aws.sqs;
 
 import java.io.IOException;
@@ -14,6 +30,7 @@ import org.junit.Test;
 
 @Ignore("For local testing only - interacts with S3 so the credentials file must be configured and all necessary buckets created")
 public class TestPutSQS {
+
     private final String CREDENTIALS_FILE = System.getProperty("user.home") + "/aws-credentials.properties";
 
     @Test
@@ -22,13 +39,13 @@ public class TestPutSQS {
         runner.setProperty(PutSNS.CREDENTAILS_FILE, CREDENTIALS_FILE);
         runner.setProperty(PutSQS.TIMEOUT, "30 secs");
         runner.setProperty(PutSQS.QUEUE_URL, "https://sqs.us-west-2.amazonaws.com/100515378163/test-queue-000000000");
-        Assert.assertTrue( runner.setProperty("x-custom-prop", "hello").isValid() );
-        
+        Assert.assertTrue(runner.setProperty("x-custom-prop", "hello").isValid());
+
         final Map<String, String> attrs = new HashMap<>();
         attrs.put("filename", "1.txt");
         runner.enqueue(Paths.get("src/test/resources/hello.txt"), attrs);
         runner.run(1);
-        
+
         runner.assertAllFlowFilesTransferred(PutSQS.REL_SUCCESS, 1);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-aws-bundle/pom.xml
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-aws-bundle/pom.xml b/nifi/nifi-nar-bundles/nifi-aws-bundle/pom.xml
index 117d7dd..4435327 100644
--- a/nifi/nifi-nar-bundles/nifi-aws-bundle/pom.xml
+++ b/nifi/nifi-nar-bundles/nifi-aws-bundle/pom.xml
@@ -30,14 +30,14 @@
         <module>nifi-aws-nar</module>
     </modules>
 
-	<dependencyManagement>
-		<dependencies>
-			<dependency>
-				<groupId>com.amazonaws</groupId>
-				<artifactId>aws-java-sdk</artifactId>
-				<version>1.9.24</version>
-			</dependency>
-		</dependencies>
-	</dependencyManagement>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>com.amazonaws</groupId>
+                <artifactId>aws-java-sdk</artifactId>
+                <version>1.9.24</version>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
 
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-geo-bundle/nifi-geo-nar/src/main/resources/META-INF/NOTICE
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-geo-bundle/nifi-geo-nar/src/main/resources/META-INF/NOTICE b/nifi/nifi-nar-bundles/nifi-geo-bundle/nifi-geo-nar/src/main/resources/META-INF/NOTICE
new file mode 100644
index 0000000..bde2a66
--- /dev/null
+++ b/nifi/nifi-nar-bundles/nifi-geo-bundle/nifi-geo-nar/src/main/resources/META-INF/NOTICE
@@ -0,0 +1,68 @@
+nifi-geo-nar
+Copyright 2015 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+******************
+Apache Software License v2
+******************
+
+The following binary components are provided under the Apache Software License v2
+
+  (ASLv2) Apache Commons Lang
+    The following NOTICE information applies:
+      Apache Commons Lang
+      Copyright 2001-2014 The Apache Software Foundation
+
+      This product includes software from the Spring Framework,
+      under the Apache License 2.0 (see: StringUtils.containsWhitespace())
+
+  (ASLv2) Apache HttpComponents
+    The following NOTICE information applies:
+      Apache HttpClient
+      Copyright 1999-2014 The Apache Software Foundation
+      
+      Apache HttpCore
+      Copyright 2005-2014 The Apache Software Foundation
+
+      This project contains annotations derived from JCIP-ANNOTATIONS
+      Copyright (c) 2005 Brian Goetz and Tim Peierls. See http://www.jcip.net
+
+  (ASLv2) Apache Commons Codec
+    The following NOTICE information applies:
+      Apache Commons Codec
+      Copyright 2002-2014 The Apache Software Foundation
+
+      src/test/org/apache/commons/codec/language/DoubleMetaphoneTest.java
+      contains test data from http://aspell.net/test/orig/batch0.tab.
+      Copyright (C) 2002 Kevin Atkinson (kevina@gnu.org)
+
+      ===============================================================================
+
+      The content of package org.apache.commons.codec.language.bm has been translated
+      from the original php source code available at http://stevemorse.org/phoneticinfo.htm
+      with permission from the original authors.
+      Original source copyright:
+      Copyright (c) 2008 Alexander Beider & Stephen P. Morse.
+
+  (ASLv2) Apache Commons Logging
+    The following NOTICE information applies:
+      Apache Commons Logging
+      Copyright 2003-2013 The Apache Software Foundation
+
+  (ASLv2) GeoIP2 Java API
+    The following NOTICE information applies:
+      GeoIP2 Java API
+      This software is Copyright (c) 2013 by MaxMind, Inc.
+      
+************************
+Creative Commons Attribution-ShareAlike 3.0
+************************
+
+The following binary components are provided under the Creative Commons Attribution-ShareAlike 3.0.  See project link for details.
+
+	(CCAS 3.0) MaxMind DB (https://github.com/maxmind/MaxMind-DB)
+
+
+

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-hl7-bundle/nifi-hl7-nar/src/main/resources/META-INF/NOTICE
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-hl7-bundle/nifi-hl7-nar/src/main/resources/META-INF/NOTICE b/nifi/nifi-nar-bundles/nifi-hl7-bundle/nifi-hl7-nar/src/main/resources/META-INF/NOTICE
new file mode 100644
index 0000000..30b099f
--- /dev/null
+++ b/nifi/nifi-nar-bundles/nifi-hl7-bundle/nifi-hl7-nar/src/main/resources/META-INF/NOTICE
@@ -0,0 +1,29 @@
+nifi-hl7-nar
+Copyright 2015 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+******************
+Apache Software License v2
+******************
+
+The following binary components are provided under the Apache Software License v2
+
+  (ASLv2) Apache Commons Lang
+    The following NOTICE information applies:
+      Apache Commons Lang
+      Copyright 2001-2014 The Apache Software Foundation
+
+      This product includes software from the Spring Framework,
+      under the Apache License 2.0 (see: StringUtils.containsWhitespace())
+
+*****************
+Mozilla Public License v1.1
+*****************
+
+The following binary components are provided under the Mozilla Public License v1.1.  See project link for details.
+
+    (MPL 1.1) HAPI Base (ca.uhn.hapi:hapi-base:2.2 - http://hl7api.sourceforge.net/)
+    (MPL 1.1) HAPI Structures (ca.uhn.hapi:hapi-structures-v*:2.2 - http://hl7api.sourceforge.net/)
+

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-social-media-bundle/nifi-social-media-nar/src/main/resources/META-INF/NOTICE
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-social-media-bundle/nifi-social-media-nar/src/main/resources/META-INF/NOTICE b/nifi/nifi-nar-bundles/nifi-social-media-bundle/nifi-social-media-nar/src/main/resources/META-INF/NOTICE
new file mode 100644
index 0000000..33bcc0d
--- /dev/null
+++ b/nifi/nifi-nar-bundles/nifi-social-media-bundle/nifi-social-media-nar/src/main/resources/META-INF/NOTICE
@@ -0,0 +1,57 @@
+nifi-social-media-nar
+Copyright 2015 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+******************
+Apache Software License v2
+******************
+
+The following binary components are provided under the Apache Software License v2
+
+  (ASLv2) Apache Commons Lang
+    The following NOTICE information applies:
+      Apache Commons Lang
+      Copyright 2001-2014 The Apache Software Foundation
+
+      This product includes software from the Spring Framework,
+      under the Apache License 2.0 (see: StringUtils.containsWhitespace())
+
+  (ASLv2) Apache Commons Codec
+    The following NOTICE information applies:
+      Apache Commons Codec
+      Copyright 2002-2014 The Apache Software Foundation
+
+      src/test/org/apache/commons/codec/language/DoubleMetaphoneTest.java
+      contains test data from http://aspell.net/test/orig/batch0.tab.
+      Copyright (C) 2002 Kevin Atkinson (kevina@gnu.org)
+
+      ===============================================================================
+
+      The content of package org.apache.commons.codec.language.bm has been translated
+      from the original php source code available at http://stevemorse.org/phoneticinfo.htm
+      with permission from the original authors.
+      Original source copyright:
+      Copyright (c) 2008 Alexander Beider & Stephen P. Morse.
+
+  (ASLv2) Apache Commons Logging
+    The following NOTICE information applies:
+      Apache Commons Logging
+      Copyright 2003-2013 The Apache Software Foundation
+
+  (ASLv2) Twitter4J
+    The following NOTICE information applies:
+      Copyright 2007 Yusuke Yamamoto
+      
+      Twitter4J includes software from JSON.org to parse JSON response from the Twitter API. You can see the license term at http://www.JSON.org/license.html
+  
+  (ASLv2) JOAuth
+    The following NOTICE information applies:
+      JOAuth
+      Copyright 2010-2013 Twitter, Inc
+  
+  (ASLv2) Hosebird Client
+    The following NOTICE information applies:
+      Hosebird Client (hbc)
+      Copyright 2013 Twitter, Inc.
\ No newline at end of file


[6/6] incubator-nifi git commit: NIFI-537 fixed identified licensing issue with several of the new nars

Posted by jo...@apache.org.
NIFI-537 fixed identified licensing issue with several of the new nars


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

Branch: refs/heads/NIFI-271
Commit: 060a1e0d9cbc15a1a21ac46c9f1ad4f8a7b2a986
Parents: 0d78382
Author: joewitt <jo...@apache.org>
Authored: Wed Apr 22 14:50:03 2015 -0400
Committer: joewitt <jo...@apache.org>
Committed: Wed Apr 22 14:50:03 2015 -0400

----------------------------------------------------------------------
 nifi/nifi-assembly/NOTICE                       |  35 +-
 nifi/nifi-assembly/pom.xml                      | 928 +++++++++----------
 .../src/main/resources/META-INF/NOTICE          |  74 ++
 .../nifi-aws-bundle/nifi-aws-processors/pom.xml |  19 +-
 .../processors/aws/AbstractAWSProcessor.java    |  99 +-
 .../processors/aws/s3/AbstractS3Processor.java  | 152 ++-
 .../nifi/processors/aws/s3/FetchS3Object.java   |  78 +-
 .../nifi/processors/aws/s3/PutS3Object.java     | 100 +-
 .../aws/sns/AbstractSNSProcessor.java           |  42 +-
 .../apache/nifi/processors/aws/sns/PutSNS.java  |  95 +-
 .../aws/sqs/AbstractSQSProcessor.java           |  24 +-
 .../nifi/processors/aws/sqs/DeleteSQS.java      |  40 +-
 .../apache/nifi/processors/aws/sqs/GetSQS.java  | 136 +--
 .../apache/nifi/processors/aws/sqs/PutSQS.java  |  69 +-
 .../processors/aws/s3/TestFetchS3Object.java    |  31 +-
 .../nifi/processors/aws/s3/TestPutS3Object.java |  45 +-
 .../nifi/processors/aws/sns/TestPutSNS.java     |  25 +-
 .../nifi/processors/aws/sqs/TestGetSQS.java     |  23 +-
 .../nifi/processors/aws/sqs/TestPutSQS.java     |  23 +-
 nifi/nifi-nar-bundles/nifi-aws-bundle/pom.xml   |  18 +-
 .../src/main/resources/META-INF/NOTICE          |  68 ++
 .../src/main/resources/META-INF/NOTICE          |  29 +
 .../src/main/resources/META-INF/NOTICE          |  57 ++
 23 files changed, 1254 insertions(+), 956 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-assembly/NOTICE
----------------------------------------------------------------------
diff --git a/nifi/nifi-assembly/NOTICE b/nifi/nifi-assembly/NOTICE
index f14c662..73780db 100644
--- a/nifi/nifi-assembly/NOTICE
+++ b/nifi/nifi-assembly/NOTICE
@@ -511,44 +511,31 @@ The following binary components are provided under the Apache Software License v
     The following NOTICE information applies:
       JOAuth
       Copyright 2010-2013 Twitter, Inc
-
-      Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0
   
   (ASLv2) Hosebird Client
     The following NOTICE information applies:
       Hosebird Client (hbc)
       Copyright 2013 Twitter, Inc.
 
-      Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0
-
   (ASLv2) GeoIP2 Java API
     The following NOTICE information applies:
       GeoIP2 Java API
       This software is Copyright (c) 2013 by MaxMind, Inc.
       
-      This is free software, licensed under the Apache License, Version 2.0.
-      
-  (ASLv2) Google HTTP Client Library for Java
-    The following NOTICE information applies:
-      Google HTTP Client Library for Java
-      
-      This is free software, licensed under the Apache License, Version 2.0.
-
   (ASLv2) Amazon Web Services SDK
     The following NOTICE information applies:
-		Copyright 2010-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
-
-		This product includes software developed by
-		Amazon Technologies, Inc (http://www.amazon.com/).
-
-		**********************
-		THIRD PARTY COMPONENTS
-		**********************
-		This software includes third party software subject to the following copyrights:
-		- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty.
-		- JSON parsing and utility functions from JSON.org - Copyright 2002 JSON.org.
-		- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc.
+      Copyright 2010-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 
+      This product includes software developed by
+      Amazon Technologies, Inc (http://www.amazon.com/).
+
+      **********************
+      THIRD PARTY COMPONENTS
+      **********************
+      This software includes third party software subject to the following copyrights:
+      - XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty.
+      - JSON parsing and utility functions from JSON.org - Copyright 2002 JSON.org.
+      - PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc.
 
 ************************
 Common Development and Distribution License 1.1

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-assembly/pom.xml
----------------------------------------------------------------------
diff --git a/nifi/nifi-assembly/pom.xml b/nifi/nifi-assembly/pom.xml
index 13ffba8..7b08ed4 100644
--- a/nifi/nifi-assembly/pom.xml
+++ b/nifi/nifi-assembly/pom.xml
@@ -1,484 +1,484 @@
 <?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. -->
+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. -->
 <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">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>org.apache.nifi</groupId>
-		<artifactId>nifi</artifactId>
-		<version>0.1.0-incubating-SNAPSHOT</version>
-	</parent>
-	<artifactId>nifi-assembly</artifactId>
-	<packaging>pom</packaging>
-	<description>This is the assembly Apache NiFi (incubating)</description>
-	<build>
-		<plugins>
-			<plugin>
-				<artifactId>maven-assembly-plugin</artifactId>
-				<configuration>
-					<finalName>nifi-${project.version}</finalName>
-					<attach>false</attach>
-				</configuration>
-				<executions>
-					<execution>
-						<id>make shared resource</id>
-						<goals>
-							<goal>single</goal>
-						</goals>
-						<phase>package</phase>
-						<configuration>
-							<descriptors>
-								<descriptor>src/main/assembly/dependencies.xml</descriptor>
-							</descriptors>
-							<tarLongFileMode>posix</tarLongFileMode>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
-	<dependencies>
-		<dependency>
-			<groupId>ch.qos.logback</groupId>
-			<artifactId>logback-classic</artifactId>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>jcl-over-slf4j</artifactId>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>jul-to-slf4j</artifactId>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>log4j-over-slf4j</artifactId>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-api</artifactId>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-api</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-runtime</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-bootstrap</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-resources</artifactId>
-			<classifier>resources</classifier>
-			<scope>runtime</scope>
-			<type>zip</type>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-docs</artifactId>
-			<classifier>resources</classifier>
-			<scope>runtime</scope>
-			<type>zip</type>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-framework-nar</artifactId>
-			<type>nar</type>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-provenance-repository-nar</artifactId>
-			<type>nar</type>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-standard-services-api-nar</artifactId>
-			<type>nar</type>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-ssl-context-service-nar</artifactId>
-			<type>nar</type>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-distributed-cache-services-nar</artifactId>
-			<type>nar</type>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-standard-nar</artifactId>
-			<type>nar</type>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-jetty-bundle</artifactId>
-			<type>nar</type>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-update-attribute-nar</artifactId>
-			<type>nar</type>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-hadoop-libraries-nar</artifactId>
-			<type>nar</type>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-hadoop-nar</artifactId>
-			<type>nar</type>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-kafka-nar</artifactId>
-			<type>nar</type>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-http-context-map-nar</artifactId>
-			<type>nar</type>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-kite-nar</artifactId>
-			<type>nar</type>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-social-media-nar</artifactId>
-			<version>0.1.0-incubating-SNAPSHOT</version>
-			<type>nar</type>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-hl7-nar</artifactId>
-			<version>0.1.0-incubating-SNAPSHOT</version>
-			<type>nar</type>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-language-translation-nar</artifactId>
-			<version>0.1.0-incubating-SNAPSHOT</version>
-			<type>nar</type>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.nifi</groupId>
-			<artifactId>nifi-geo-nar</artifactId>
-			<version>0.1.0-incubating-SNAPSHOT</version>
-			<type>nar</type>
-		</dependency>
-	</dependencies>
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.nifi</groupId>
+        <artifactId>nifi</artifactId>
+        <version>0.1.0-incubating-SNAPSHOT</version>
+    </parent>
+    <artifactId>nifi-assembly</artifactId>
+    <packaging>pom</packaging>
+    <description>This is the assembly Apache NiFi (incubating)</description>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <configuration>
+                    <finalName>nifi-${project.version}</finalName>
+                    <attach>false</attach>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make shared resource</id>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                        <phase>package</phase>
+                        <configuration>
+                            <descriptors>
+                                <descriptor>src/main/assembly/dependencies.xml</descriptor>
+                            </descriptors>
+                            <tarLongFileMode>posix</tarLongFileMode>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>jcl-over-slf4j</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>jul-to-slf4j</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>log4j-over-slf4j</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-runtime</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-bootstrap</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-resources</artifactId>
+            <classifier>resources</classifier>
+            <scope>runtime</scope>
+            <type>zip</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-docs</artifactId>
+            <classifier>resources</classifier>
+            <scope>runtime</scope>
+            <type>zip</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-framework-nar</artifactId>
+            <type>nar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-provenance-repository-nar</artifactId>
+            <type>nar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-standard-services-api-nar</artifactId>
+            <type>nar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-ssl-context-service-nar</artifactId>
+            <type>nar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-distributed-cache-services-nar</artifactId>
+            <type>nar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-standard-nar</artifactId>
+            <type>nar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-jetty-bundle</artifactId>
+            <type>nar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-update-attribute-nar</artifactId>
+            <type>nar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-hadoop-libraries-nar</artifactId>
+            <type>nar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-hadoop-nar</artifactId>
+            <type>nar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-kafka-nar</artifactId>
+            <type>nar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-http-context-map-nar</artifactId>
+            <type>nar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-kite-nar</artifactId>
+            <type>nar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-social-media-nar</artifactId>
+            <version>0.1.0-incubating-SNAPSHOT</version>
+            <type>nar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-hl7-nar</artifactId>
+            <version>0.1.0-incubating-SNAPSHOT</version>
+            <type>nar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-language-translation-nar</artifactId>
+            <version>0.1.0-incubating-SNAPSHOT</version>
+            <type>nar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-geo-nar</artifactId>
+            <version>0.1.0-incubating-SNAPSHOT</version>
+            <type>nar</type>
+        </dependency>
+    </dependencies>
 
-	<properties>
-		<!--Wrapper Properties -->
-		<nifi.wrapper.jvm.heap.initial.mb>256</nifi.wrapper.jvm.heap.initial.mb>
-		<nifi.wrapper.jvm.heap.max.mb>512</nifi.wrapper.jvm.heap.max.mb>
-		<nifi.initial.permgen.size.mb>128</nifi.initial.permgen.size.mb>
-		<nifi.max.permgen.size.mb>128</nifi.max.permgen.size.mb>
-		<nifi.wrapper.logfile.maxsize>10m</nifi.wrapper.logfile.maxsize>
-		<nifi.wrapper.logfile.maxfiles>10</nifi.wrapper.logfile.maxfiles>
+    <properties>
+        <!--Wrapper Properties -->
+        <nifi.wrapper.jvm.heap.initial.mb>256</nifi.wrapper.jvm.heap.initial.mb>
+        <nifi.wrapper.jvm.heap.max.mb>512</nifi.wrapper.jvm.heap.max.mb>
+        <nifi.initial.permgen.size.mb>128</nifi.initial.permgen.size.mb>
+        <nifi.max.permgen.size.mb>128</nifi.max.permgen.size.mb>
+        <nifi.wrapper.logfile.maxsize>10m</nifi.wrapper.logfile.maxsize>
+        <nifi.wrapper.logfile.maxfiles>10</nifi.wrapper.logfile.maxfiles>
 
-		<!-- nifi.properties: core properties -->
-		<nifi.version>${project.version}</nifi.version>
-		<nifi.flowcontroller.autoResumeState>true</nifi.flowcontroller.autoResumeState>
-		<nifi.flowcontroller.graceful.shutdown.period>10 sec</nifi.flowcontroller.graceful.shutdown.period>
-		<nifi.flowservice.writedelay.interval>500 ms</nifi.flowservice.writedelay.interval>
-		<nifi.administrative.yield.duration>30 sec</nifi.administrative.yield.duration>
-		<nifi.bored.yield.duration>10 millis</nifi.bored.yield.duration>
+        <!-- nifi.properties: core properties -->
+        <nifi.version>${project.version}</nifi.version>
+        <nifi.flowcontroller.autoResumeState>true</nifi.flowcontroller.autoResumeState>
+        <nifi.flowcontroller.graceful.shutdown.period>10 sec</nifi.flowcontroller.graceful.shutdown.period>
+        <nifi.flowservice.writedelay.interval>500 ms</nifi.flowservice.writedelay.interval>
+        <nifi.administrative.yield.duration>30 sec</nifi.administrative.yield.duration>
+        <nifi.bored.yield.duration>10 millis</nifi.bored.yield.duration>
 
-		<nifi.flow.configuration.file>./conf/flow.xml.gz</nifi.flow.configuration.file>
-		<nifi.flow.configuration.archive.dir>./conf/archive/</nifi.flow.configuration.archive.dir>
-		<nifi.authority.provider.configuration.file>./conf/authority-providers.xml</nifi.authority.provider.configuration.file>
-		<nifi.templates.directory>./conf/templates</nifi.templates.directory>
-		<nifi.database.directory>./database_repository</nifi.database.directory>
+        <nifi.flow.configuration.file>./conf/flow.xml.gz</nifi.flow.configuration.file>
+        <nifi.flow.configuration.archive.dir>./conf/archive/</nifi.flow.configuration.archive.dir>
+        <nifi.authority.provider.configuration.file>./conf/authority-providers.xml</nifi.authority.provider.configuration.file>
+        <nifi.templates.directory>./conf/templates</nifi.templates.directory>
+        <nifi.database.directory>./database_repository</nifi.database.directory>
 
-		<nifi.flowfile.repository.implementation>org.apache.nifi.controller.repository.WriteAheadFlowFileRepository</nifi.flowfile.repository.implementation>
-		<nifi.flowfile.repository.directory>./flowfile_repository</nifi.flowfile.repository.directory>
-		<nifi.flowfile.repository.partitions>256</nifi.flowfile.repository.partitions>
-		<nifi.flowfile.repository.checkpoint.interval>2 mins</nifi.flowfile.repository.checkpoint.interval>
-		<nifi.flowfile.repository.always.sync>false</nifi.flowfile.repository.always.sync>
-		<nifi.swap.manager.implementation>org.apache.nifi.controller.FileSystemSwapManager</nifi.swap.manager.implementation>
-		<nifi.queue.swap.threshold>20000</nifi.queue.swap.threshold>
-		<nifi.swap.in.period>5 sec</nifi.swap.in.period>
-		<nifi.swap.in.threads>1</nifi.swap.in.threads>
-		<nifi.swap.out.period>5 sec</nifi.swap.out.period>
-		<nifi.swap.out.threads>4</nifi.swap.out.threads>
+        <nifi.flowfile.repository.implementation>org.apache.nifi.controller.repository.WriteAheadFlowFileRepository</nifi.flowfile.repository.implementation>
+        <nifi.flowfile.repository.directory>./flowfile_repository</nifi.flowfile.repository.directory>
+        <nifi.flowfile.repository.partitions>256</nifi.flowfile.repository.partitions>
+        <nifi.flowfile.repository.checkpoint.interval>2 mins</nifi.flowfile.repository.checkpoint.interval>
+        <nifi.flowfile.repository.always.sync>false</nifi.flowfile.repository.always.sync>
+        <nifi.swap.manager.implementation>org.apache.nifi.controller.FileSystemSwapManager</nifi.swap.manager.implementation>
+        <nifi.queue.swap.threshold>20000</nifi.queue.swap.threshold>
+        <nifi.swap.in.period>5 sec</nifi.swap.in.period>
+        <nifi.swap.in.threads>1</nifi.swap.in.threads>
+        <nifi.swap.out.period>5 sec</nifi.swap.out.period>
+        <nifi.swap.out.threads>4</nifi.swap.out.threads>
 
-		<nifi.content.repository.implementation>org.apache.nifi.controller.repository.FileSystemRepository</nifi.content.repository.implementation>
-		<nifi.content.claim.max.appendable.size>10 MB</nifi.content.claim.max.appendable.size>
-		<nifi.content.claim.max.flow.files>100</nifi.content.claim.max.flow.files>
-		<nifi.content.repository.directory.default>./content_repository</nifi.content.repository.directory.default>
-		<nifi.content.repository.archive.max.retention.period />
-		<nifi.content.repository.archive.max.usage.percentage />
-		<nifi.content.repository.archive.enabled>false</nifi.content.repository.archive.enabled>
-		<nifi.content.repository.always.sync>false</nifi.content.repository.always.sync>
-		<nifi.content.viewer.url />
+        <nifi.content.repository.implementation>org.apache.nifi.controller.repository.FileSystemRepository</nifi.content.repository.implementation>
+        <nifi.content.claim.max.appendable.size>10 MB</nifi.content.claim.max.appendable.size>
+        <nifi.content.claim.max.flow.files>100</nifi.content.claim.max.flow.files>
+        <nifi.content.repository.directory.default>./content_repository</nifi.content.repository.directory.default>
+        <nifi.content.repository.archive.max.retention.period />
+        <nifi.content.repository.archive.max.usage.percentage />
+        <nifi.content.repository.archive.enabled>false</nifi.content.repository.archive.enabled>
+        <nifi.content.repository.always.sync>false</nifi.content.repository.always.sync>
+        <nifi.content.viewer.url />
 
-		<nifi.restore.directory />
-		<nifi.ui.banner.text />
-		<nifi.ui.autorefresh.interval>30 sec</nifi.ui.autorefresh.interval>
-		<nifi.nar.library.directory>./lib</nifi.nar.library.directory>
-		<nifi.nar.working.directory>./work/nar/</nifi.nar.working.directory>
-		<nifi.documentation.working.directory>./work/docs/components</nifi.documentation.working.directory>
+        <nifi.restore.directory />
+        <nifi.ui.banner.text />
+        <nifi.ui.autorefresh.interval>30 sec</nifi.ui.autorefresh.interval>
+        <nifi.nar.library.directory>./lib</nifi.nar.library.directory>
+        <nifi.nar.working.directory>./work/nar/</nifi.nar.working.directory>
+        <nifi.documentation.working.directory>./work/docs/components</nifi.documentation.working.directory>
 
-		<nifi.sensitive.props.algorithm>PBEWITHMD5AND256BITAES-CBC-OPENSSL</nifi.sensitive.props.algorithm>
-		<nifi.sensitive.props.provider>BC</nifi.sensitive.props.provider>
-		<nifi.h2.url.append>;LOCK_TIMEOUT=25000;WRITE_DELAY=0;AUTO_SERVER=FALSE</nifi.h2.url.append>
+        <nifi.sensitive.props.algorithm>PBEWITHMD5AND256BITAES-CBC-OPENSSL</nifi.sensitive.props.algorithm>
+        <nifi.sensitive.props.provider>BC</nifi.sensitive.props.provider>
+        <nifi.h2.url.append>;LOCK_TIMEOUT=25000;WRITE_DELAY=0;AUTO_SERVER=FALSE</nifi.h2.url.append>
 
-		<nifi.remote.input.socket.port>9990</nifi.remote.input.socket.port>
+        <nifi.remote.input.socket.port>9990</nifi.remote.input.socket.port>
 
-		<!-- persistent provenance repository properties -->
-		<nifi.provenance.repository.implementation>org.apache.nifi.provenance.PersistentProvenanceRepository</nifi.provenance.repository.implementation>
-		<nifi.provenance.repository.directory.default>./provenance_repository</nifi.provenance.repository.directory.default>
-		<nifi.provenance.repository.max.storage.time>24 hours</nifi.provenance.repository.max.storage.time>
-		<nifi.provenance.repository.max.storage.size>1 GB</nifi.provenance.repository.max.storage.size>
-		<nifi.provenance.repository.rollover.time>5 mins</nifi.provenance.repository.rollover.time>
-		<nifi.provenance.repository.rollover.size>100 MB</nifi.provenance.repository.rollover.size>
-		<nifi.provenance.repository.query.threads>2</nifi.provenance.repository.query.threads>
-		<nifi.provenance.repository.compress.on.rollover>true</nifi.provenance.repository.compress.on.rollover>
-		<nifi.provenance.repository.indexed.fields>EventType, FlowFileUUID,
-			Filename, ProcessorID</nifi.provenance.repository.indexed.fields>
-		<nifi.provenance.repository.indexed.attributes />
-		<nifi.provenance.repository.index.shard.size>500 MB</nifi.provenance.repository.index.shard.size>
-		<nifi.provenance.repository.always.sync>false</nifi.provenance.repository.always.sync>
-		<nifi.provenance.repository.journal.count>16</nifi.provenance.repository.journal.count>
+        <!-- persistent provenance repository properties -->
+        <nifi.provenance.repository.implementation>org.apache.nifi.provenance.PersistentProvenanceRepository</nifi.provenance.repository.implementation>
+        <nifi.provenance.repository.directory.default>./provenance_repository</nifi.provenance.repository.directory.default>
+        <nifi.provenance.repository.max.storage.time>24 hours</nifi.provenance.repository.max.storage.time>
+        <nifi.provenance.repository.max.storage.size>1 GB</nifi.provenance.repository.max.storage.size>
+        <nifi.provenance.repository.rollover.time>5 mins</nifi.provenance.repository.rollover.time>
+        <nifi.provenance.repository.rollover.size>100 MB</nifi.provenance.repository.rollover.size>
+        <nifi.provenance.repository.query.threads>2</nifi.provenance.repository.query.threads>
+        <nifi.provenance.repository.compress.on.rollover>true</nifi.provenance.repository.compress.on.rollover>
+        <nifi.provenance.repository.indexed.fields>EventType, FlowFileUUID,
+            Filename, ProcessorID</nifi.provenance.repository.indexed.fields>
+        <nifi.provenance.repository.indexed.attributes />
+        <nifi.provenance.repository.index.shard.size>500 MB</nifi.provenance.repository.index.shard.size>
+        <nifi.provenance.repository.always.sync>false</nifi.provenance.repository.always.sync>
+        <nifi.provenance.repository.journal.count>16</nifi.provenance.repository.journal.count>
 
-		<!-- volatile provenance repository properties -->
-		<nifi.provenance.repository.buffer.size>100000</nifi.provenance.repository.buffer.size>
+        <!-- volatile provenance repository properties -->
+        <nifi.provenance.repository.buffer.size>100000</nifi.provenance.repository.buffer.size>
 
-		<!-- Component status repository properties -->
-		<nifi.components.status.repository.implementation>org.apache.nifi.controller.status.history.VolatileComponentStatusRepository</nifi.components.status.repository.implementation>
-		<nifi.components.status.repository.buffer.size>288</nifi.components.status.repository.buffer.size>
-		<nifi.components.status.snapshot.frequency>5 mins</nifi.components.status.snapshot.frequency>
+        <!-- Component status repository properties -->
+        <nifi.components.status.repository.implementation>org.apache.nifi.controller.status.history.VolatileComponentStatusRepository</nifi.components.status.repository.implementation>
+        <nifi.components.status.repository.buffer.size>288</nifi.components.status.repository.buffer.size>
+        <nifi.components.status.snapshot.frequency>5 mins</nifi.components.status.snapshot.frequency>
 
-		<!-- nifi.properties: web properties -->
-		<nifi.web.war.directory>./lib</nifi.web.war.directory>
-		<nifi.web.http.host />
-		<nifi.web.http.port>8080</nifi.web.http.port>
-		<nifi.web.https.host />
-		<nifi.web.https.port />
-		<nifi.jetty.work.dir>./work/jetty</nifi.jetty.work.dir>
-		<nifi.web.jetty.threads>200</nifi.web.jetty.threads>
+        <!-- nifi.properties: web properties -->
+        <nifi.web.war.directory>./lib</nifi.web.war.directory>
+        <nifi.web.http.host />
+        <nifi.web.http.port>8080</nifi.web.http.port>
+        <nifi.web.https.host />
+        <nifi.web.https.port />
+        <nifi.jetty.work.dir>./work/jetty</nifi.jetty.work.dir>
+        <nifi.web.jetty.threads>200</nifi.web.jetty.threads>
 
-		<!-- nifi.properties: security properties -->
-		<nifi.security.keystore />
-		<nifi.security.keystoreType />
-		<nifi.security.keystorePasswd />
-		<nifi.security.keyPasswd />
-		<nifi.security.truststore />
-		<nifi.security.truststoreType />
-		<nifi.security.truststorePasswd />
-		<nifi.security.needClientAuth />
-		<nifi.security.authorizedUsers.file>./conf/authorized-users.xml</nifi.security.authorizedUsers.file>
-		<nifi.security.user.credential.cache.duration>24 hours</nifi.security.user.credential.cache.duration>
-		<nifi.security.user.authority.provider>file-provider</nifi.security.user.authority.provider>
-		<nifi.security.x509.principal.extractor />
-		<nifi.security.support.new.account.requests />
-		<nifi.security.ocsp.responder.url />
-		<nifi.security.ocsp.responder.certificate />
+        <!-- nifi.properties: security properties -->
+        <nifi.security.keystore />
+        <nifi.security.keystoreType />
+        <nifi.security.keystorePasswd />
+        <nifi.security.keyPasswd />
+        <nifi.security.truststore />
+        <nifi.security.truststoreType />
+        <nifi.security.truststorePasswd />
+        <nifi.security.needClientAuth />
+        <nifi.security.authorizedUsers.file>./conf/authorized-users.xml</nifi.security.authorizedUsers.file>
+        <nifi.security.user.credential.cache.duration>24 hours</nifi.security.user.credential.cache.duration>
+        <nifi.security.user.authority.provider>file-provider</nifi.security.user.authority.provider>
+        <nifi.security.x509.principal.extractor />
+        <nifi.security.support.new.account.requests />
+        <nifi.security.ocsp.responder.url />
+        <nifi.security.ocsp.responder.certificate />
 
-		<!-- nifi.properties: cluster common properties (cluster manager and nodes 
-			must have same values) -->
-		<nifi.cluster.protocol.heartbeat.interval>5 sec</nifi.cluster.protocol.heartbeat.interval>
-		<nifi.cluster.protocol.is.secure>false</nifi.cluster.protocol.is.secure>
-		<nifi.cluster.protocol.socket.timeout>30 sec</nifi.cluster.protocol.socket.timeout>
-		<nifi.cluster.protocol.connection.handshake.timeout>45 sec</nifi.cluster.protocol.connection.handshake.timeout>
-		<nifi.cluster.protocol.use.multicast>false</nifi.cluster.protocol.use.multicast>
-		<nifi.cluster.protocol.multicast.address />
-		<nifi.cluster.protocol.multicast.port />
-		<nifi.cluster.protocol.multicast.service.broadcast.delay>500 ms</nifi.cluster.protocol.multicast.service.broadcast.delay>
-		<nifi.cluster.protocol.multicast.service.locator.attempts>3</nifi.cluster.protocol.multicast.service.locator.attempts>
-		<nifi.cluster.protocol.multicast.service.locator.attempts.delay>1 sec</nifi.cluster.protocol.multicast.service.locator.attempts.delay>
+        <!-- nifi.properties: cluster common properties (cluster manager and nodes 
+        must have same values) -->
+        <nifi.cluster.protocol.heartbeat.interval>5 sec</nifi.cluster.protocol.heartbeat.interval>
+        <nifi.cluster.protocol.is.secure>false</nifi.cluster.protocol.is.secure>
+        <nifi.cluster.protocol.socket.timeout>30 sec</nifi.cluster.protocol.socket.timeout>
+        <nifi.cluster.protocol.connection.handshake.timeout>45 sec</nifi.cluster.protocol.connection.handshake.timeout>
+        <nifi.cluster.protocol.use.multicast>false</nifi.cluster.protocol.use.multicast>
+        <nifi.cluster.protocol.multicast.address />
+        <nifi.cluster.protocol.multicast.port />
+        <nifi.cluster.protocol.multicast.service.broadcast.delay>500 ms</nifi.cluster.protocol.multicast.service.broadcast.delay>
+        <nifi.cluster.protocol.multicast.service.locator.attempts>3</nifi.cluster.protocol.multicast.service.locator.attempts>
+        <nifi.cluster.protocol.multicast.service.locator.attempts.delay>1 sec</nifi.cluster.protocol.multicast.service.locator.attempts.delay>
 
-		<!-- nifi.properties: cluster node properties (only configure for cluster 
-			nodes) -->
-		<nifi.cluster.is.node>false</nifi.cluster.is.node>
-		<nifi.cluster.node.address />
-		<nifi.cluster.node.protocol.port />
-		<nifi.cluster.node.protocol.threads>2</nifi.cluster.node.protocol.threads>
-		<nifi.cluster.node.unicast.manager.address />
-		<nifi.cluster.node.unicast.manager.protocol.port />
+        <!-- nifi.properties: cluster node properties (only configure for cluster 
+        nodes) -->
+        <nifi.cluster.is.node>false</nifi.cluster.is.node>
+        <nifi.cluster.node.address />
+        <nifi.cluster.node.protocol.port />
+        <nifi.cluster.node.protocol.threads>2</nifi.cluster.node.protocol.threads>
+        <nifi.cluster.node.unicast.manager.address />
+        <nifi.cluster.node.unicast.manager.protocol.port />
 
-		<!-- nifi.properties: cluster manager properties (only configure for cluster 
-			manager) -->
-		<nifi.cluster.is.manager>false</nifi.cluster.is.manager>
-		<nifi.cluster.manager.address />
-		<nifi.cluster.manager.protocol.port />
-		<nifi.cluster.manager.node.firewall.file />
-		<nifi.cluster.manager.node.event.history.size>10</nifi.cluster.manager.node.event.history.size>
-		<nifi.cluster.manager.node.api.connection.timeout>30 sec</nifi.cluster.manager.node.api.connection.timeout>
-		<nifi.cluster.manager.node.api.read.timeout>30 sec</nifi.cluster.manager.node.api.read.timeout>
-		<nifi.cluster.manager.node.api.request.threads>10</nifi.cluster.manager.node.api.request.threads>
-		<nifi.cluster.manager.flow.retrieval.delay>5 sec</nifi.cluster.manager.flow.retrieval.delay>
-		<nifi.cluster.manager.protocol.threads>10</nifi.cluster.manager.protocol.threads>
-		<nifi.cluster.manager.safemode.duration>0 sec</nifi.cluster.manager.safemode.duration>
-	</properties>
-	<profiles>
-		<profile>
-			<id>rpm</id>
-			<activation>
-				<activeByDefault>false</activeByDefault>
-			</activation>
-			<build>
-				<plugins>
-					<plugin>
-						<artifactId>maven-dependency-plugin</artifactId>
-						<executions>
-							<execution>
-								<id>unpack-shared-resources</id>
-								<goals>
-									<goal>unpack-dependencies</goal>
-								</goals>
-								<phase>generate-resources</phase>
-								<configuration>
-									<outputDirectory>${project.build.directory}/generated-resources</outputDirectory>
-									<includeArtifactIds>nifi-resources</includeArtifactIds>
-									<includeGroupIds>org.apache.nifi</includeGroupIds>
-									<excludeTransitive>false</excludeTransitive>
-								</configuration>
-							</execution>
-							<execution>
-								<id>unpack-docs</id>
-								<goals>
-									<goal>unpack-dependencies</goal>
-								</goals>
-								<phase>generate-resources</phase>
-								<configuration>
-									<outputDirectory>${project.build.directory}/generated-docs</outputDirectory>
-									<includeArtifactIds>nifi-docs</includeArtifactIds>
-									<includeGroupIds>org.apache.nifi</includeGroupIds>
-									<excludeTransitive>false</excludeTransitive>
-								</configuration>
-							</execution>
-						</executions>
-					</plugin>
-					<plugin>
-						<groupId>org.codehaus.mojo</groupId>
-						<artifactId>rpm-maven-plugin</artifactId>
-						<configuration>
-							<summary>Apache NiFi (incubating)</summary>
-							<description>Apache Nifi (incubating) is dataflow system based on
-								the Flow-Based Programming concepts.</description>
-							<license>Apache License, Version 2.0 and others (see included
-								LICENSE file)</license>
-							<url>http://nifi.incubator.apache.org</url>
-							<group>Utilities</group>
-							<prefix>/opt/nifi</prefix>
-							<defineStatements>
-								<defineStatement>_use_internal_dependency_generator 0</defineStatement>
-							</defineStatements>
-							<defaultDirmode>750</defaultDirmode>
-							<defaultFilemode>640</defaultFilemode>
-							<defaultUsername>root</defaultUsername>
-							<defaultGroupname>root</defaultGroupname>
-						</configuration>
-						<executions>
-							<execution>
-								<id>build-bin-rpm</id>
-								<goals>
-									<goal>attached-rpm</goal>
-								</goals>
-								<configuration>
-									<classifier>bin</classifier>
-									<provides>
-										<provide>nifi</provide>
-									</provides>
-									<mappings>
-										<mapping>
-											<directory>/opt/nifi/nifi-${project.version}</directory>
-										</mapping>
-										<mapping>
-											<directory>/opt/nifi/nifi-${project.version}</directory>
-											<sources>
-												<source>
-													<location>./LICENSE</location>
-												</source>
-												<source>
-													<location>./NOTICE</location>
-												</source>
-												<source>
-													<location>../DISCLAIMER</location>
-												</source>
-												<source>
-													<location>./README.md</location>
-													<destination>README</destination>
-												</source>
-											</sources>
-										</mapping>
-										<mapping>
-											<directory>/opt/nifi/nifi-${project.version}/bin</directory>
-											<filemode>750</filemode>
-											<sources>
-												<source>
-													<location>${project.build.directory}/generated-resources/bin/nifi.sh</location>
-													<destination>nifi.sh</destination>
-													<filter>true</filter>
-												</source>
-											</sources>
-										</mapping>
-										<mapping>
-											<directory>/opt/nifi/nifi-${project.version}/conf</directory>
-											<configuration>true</configuration>
-											<sources>
-												<source>
-													<location>${project.build.directory}/generated-resources/conf</location>
-													<filter>true</filter>
-												</source>
-											</sources>
-										</mapping>
-										<mapping>
-											<directory>/opt/nifi/nifi-${project.version}/lib</directory>
-											<dependency>
-												<excludes>
-													<exclude>org.apache.nifi:nifi-bootstrap</exclude>
-													<exclude>org.apache.nifi:nifi-resources</exclude>
-													<exclude>org.apache.nifi:nifi-docs</exclude>
-												</excludes>
-											</dependency>
-										</mapping>
-										<mapping>
-											<directory>/opt/nifi/nifi-${project.version}/lib/bootstrap</directory>
-											<dependency>
-												<includes>
-													<include>org.apache.nifi:nifi-bootstrap</include>
-												</includes>
-											</dependency>
-										</mapping>
-										<mapping>
-											<directory>/opt/nifi/nifi-${project.version}/docs</directory>
-											<sources>
-												<source>
-													<location>${project.build.directory}/generated-docs</location>
-												</source>
-											</sources>
-										</mapping>
-									</mappings>
-								</configuration>
-							</execution>
-						</executions>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-	</profiles>
+        <!-- nifi.properties: cluster manager properties (only configure for cluster 
+        manager) -->
+        <nifi.cluster.is.manager>false</nifi.cluster.is.manager>
+        <nifi.cluster.manager.address />
+        <nifi.cluster.manager.protocol.port />
+        <nifi.cluster.manager.node.firewall.file />
+        <nifi.cluster.manager.node.event.history.size>10</nifi.cluster.manager.node.event.history.size>
+        <nifi.cluster.manager.node.api.connection.timeout>30 sec</nifi.cluster.manager.node.api.connection.timeout>
+        <nifi.cluster.manager.node.api.read.timeout>30 sec</nifi.cluster.manager.node.api.read.timeout>
+        <nifi.cluster.manager.node.api.request.threads>10</nifi.cluster.manager.node.api.request.threads>
+        <nifi.cluster.manager.flow.retrieval.delay>5 sec</nifi.cluster.manager.flow.retrieval.delay>
+        <nifi.cluster.manager.protocol.threads>10</nifi.cluster.manager.protocol.threads>
+        <nifi.cluster.manager.safemode.duration>0 sec</nifi.cluster.manager.safemode.duration>
+    </properties>
+    <profiles>
+        <profile>
+            <id>rpm</id>
+            <activation>
+                <activeByDefault>false</activeByDefault>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-dependency-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>unpack-shared-resources</id>
+                                <goals>
+                                    <goal>unpack-dependencies</goal>
+                                </goals>
+                                <phase>generate-resources</phase>
+                                <configuration>
+                                    <outputDirectory>${project.build.directory}/generated-resources</outputDirectory>
+                                    <includeArtifactIds>nifi-resources</includeArtifactIds>
+                                    <includeGroupIds>org.apache.nifi</includeGroupIds>
+                                    <excludeTransitive>false</excludeTransitive>
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>unpack-docs</id>
+                                <goals>
+                                    <goal>unpack-dependencies</goal>
+                                </goals>
+                                <phase>generate-resources</phase>
+                                <configuration>
+                                    <outputDirectory>${project.build.directory}/generated-docs</outputDirectory>
+                                    <includeArtifactIds>nifi-docs</includeArtifactIds>
+                                    <includeGroupIds>org.apache.nifi</includeGroupIds>
+                                    <excludeTransitive>false</excludeTransitive>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>rpm-maven-plugin</artifactId>
+                        <configuration>
+                            <summary>Apache NiFi (incubating)</summary>
+                            <description>Apache Nifi (incubating) is dataflow system based on
+                                the Flow-Based Programming concepts.</description>
+                            <license>Apache License, Version 2.0 and others (see included
+                                LICENSE file)</license>
+                            <url>http://nifi.incubator.apache.org</url>
+                            <group>Utilities</group>
+                            <prefix>/opt/nifi</prefix>
+                            <defineStatements>
+                                <defineStatement>_use_internal_dependency_generator 0</defineStatement>
+                            </defineStatements>
+                            <defaultDirmode>750</defaultDirmode>
+                            <defaultFilemode>640</defaultFilemode>
+                            <defaultUsername>root</defaultUsername>
+                            <defaultGroupname>root</defaultGroupname>
+                        </configuration>
+                        <executions>
+                            <execution>
+                                <id>build-bin-rpm</id>
+                                <goals>
+                                    <goal>attached-rpm</goal>
+                                </goals>
+                                <configuration>
+                                    <classifier>bin</classifier>
+                                    <provides>
+                                        <provide>nifi</provide>
+                                    </provides>
+                                    <mappings>
+                                        <mapping>
+                                            <directory>/opt/nifi/nifi-${project.version}</directory>
+                                        </mapping>
+                                        <mapping>
+                                            <directory>/opt/nifi/nifi-${project.version}</directory>
+                                            <sources>
+                                                <source>
+                                                    <location>./LICENSE</location>
+                                                </source>
+                                                <source>
+                                                    <location>./NOTICE</location>
+                                                </source>
+                                                <source>
+                                                    <location>../DISCLAIMER</location>
+                                                </source>
+                                                <source>
+                                                    <location>./README.md</location>
+                                                    <destination>README</destination>
+                                                </source>
+                                            </sources>
+                                        </mapping>
+                                        <mapping>
+                                            <directory>/opt/nifi/nifi-${project.version}/bin</directory>
+                                            <filemode>750</filemode>
+                                            <sources>
+                                                <source>
+                                                    <location>${project.build.directory}/generated-resources/bin/nifi.sh</location>
+                                                    <destination>nifi.sh</destination>
+                                                    <filter>true</filter>
+                                                </source>
+                                            </sources>
+                                        </mapping>
+                                        <mapping>
+                                            <directory>/opt/nifi/nifi-${project.version}/conf</directory>
+                                            <configuration>true</configuration>
+                                            <sources>
+                                                <source>
+                                                    <location>${project.build.directory}/generated-resources/conf</location>
+                                                    <filter>true</filter>
+                                                </source>
+                                            </sources>
+                                        </mapping>
+                                        <mapping>
+                                            <directory>/opt/nifi/nifi-${project.version}/lib</directory>
+                                            <dependency>
+                                                <excludes>
+                                                    <exclude>org.apache.nifi:nifi-bootstrap</exclude>
+                                                    <exclude>org.apache.nifi:nifi-resources</exclude>
+                                                    <exclude>org.apache.nifi:nifi-docs</exclude>
+                                                </excludes>
+                                            </dependency>
+                                        </mapping>
+                                        <mapping>
+                                            <directory>/opt/nifi/nifi-${project.version}/lib/bootstrap</directory>
+                                            <dependency>
+                                                <includes>
+                                                    <include>org.apache.nifi:nifi-bootstrap</include>
+                                                </includes>
+                                            </dependency>
+                                        </mapping>
+                                        <mapping>
+                                            <directory>/opt/nifi/nifi-${project.version}/docs</directory>
+                                            <sources>
+                                                <source>
+                                                    <location>${project.build.directory}/generated-docs</location>
+                                                </source>
+                                            </sources>
+                                        </mapping>
+                                    </mappings>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-nar/src/main/resources/META-INF/NOTICE
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-nar/src/main/resources/META-INF/NOTICE b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-nar/src/main/resources/META-INF/NOTICE
new file mode 100644
index 0000000..64d4975
--- /dev/null
+++ b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-nar/src/main/resources/META-INF/NOTICE
@@ -0,0 +1,74 @@
+nifi-aws-nar
+Copyright 2015 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+******************
+Apache Software License v2
+******************
+
+The following binary components are provided under the Apache Software License v2
+
+  (ASLv2) Apache HttpComponents
+    The following NOTICE information applies:
+      Apache HttpClient
+      Copyright 1999-2014 The Apache Software Foundation
+      
+      Apache HttpCore
+      Copyright 2005-2014 The Apache Software Foundation
+
+      This project contains annotations derived from JCIP-ANNOTATIONS
+      Copyright (c) 2005 Brian Goetz and Tim Peierls. See http://www.jcip.net
+
+  (ASLv2) Joda Time
+    The following NOTICE information applies:
+      This product includes software developed by
+      Joda.org (http://www.joda.org/).
+
+  (ASLv2) Apache Commons Codec
+    The following NOTICE information applies:
+      Apache Commons Codec
+      Copyright 2002-2014 The Apache Software Foundation
+
+      src/test/org/apache/commons/codec/language/DoubleMetaphoneTest.java
+      contains test data from http://aspell.net/test/orig/batch0.tab.
+      Copyright (C) 2002 Kevin Atkinson (kevina@gnu.org)
+
+      ===============================================================================
+
+      The content of package org.apache.commons.codec.language.bm has been translated
+      from the original php source code available at http://stevemorse.org/phoneticinfo.htm
+      with permission from the original authors.
+      Original source copyright:
+      Copyright (c) 2008 Alexander Beider & Stephen P. Morse.
+
+  (ASLv2) Apache Commons Logging
+    The following NOTICE information applies:
+      Apache Commons Logging
+      Copyright 2003-2013 The Apache Software Foundation
+
+  (ASLv2) Apache Commons Lang
+    The following NOTICE information applies:
+      Apache Commons Lang
+      Copyright 2001-2014 The Apache Software Foundation
+
+      This product includes software from the Spring Framework,
+      under the Apache License 2.0 (see: StringUtils.containsWhitespace())
+
+  (ASLv2) Amazon Web Services SDK
+    The following NOTICE information applies:
+      Copyright 2010-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+      This product includes software developed by
+      Amazon Technologies, Inc (http://www.amazon.com/).
+
+      **********************
+      THIRD PARTY COMPONENTS
+      **********************
+      This software includes third party software subject to the following copyrights:
+      - XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty.
+      - JSON parsing and utility functions from JSON.org - Copyright 2002 JSON.org.
+      - PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc.
+
+

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/pom.xml
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/pom.xml b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/pom.xml
index 2270773..fdc8718 100644
--- a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/pom.xml
+++ b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/pom.xml
@@ -35,9 +35,9 @@
             <artifactId>nifi-processor-utils</artifactId>
         </dependency>
         <dependency>
-			<groupId>com.amazonaws</groupId>
-			<artifactId>aws-java-sdk</artifactId>
-		</dependency>
+            <groupId>com.amazonaws</groupId>
+            <artifactId>aws-java-sdk</artifactId>
+        </dependency>
 		
         <dependency>
             <groupId>org.apache.nifi</groupId>
@@ -55,4 +55,17 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.rat</groupId>
+                <artifactId>apache-rat-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>src/test/resources/hello.txt</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/AbstractAWSProcessor.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/AbstractAWSProcessor.java b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/AbstractAWSProcessor.java
index 11c6a9d..a781ff9 100644
--- a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/AbstractAWSProcessor.java
+++ b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/AbstractAWSProcessor.java
@@ -58,56 +58,54 @@ public abstract class AbstractAWSProcessor<ClientType extends AmazonWebServiceCl
             new HashSet<>(Arrays.asList(REL_SUCCESS, REL_FAILURE)));
 
     public static final PropertyDescriptor CREDENTAILS_FILE = new PropertyDescriptor.Builder()
-        .name("Credentials File")
-        .expressionLanguageSupported(false)
-        .required(false)
-        .addValidator(StandardValidators.FILE_EXISTS_VALIDATOR)
-        .build();
+            .name("Credentials File")
+            .expressionLanguageSupported(false)
+            .required(false)
+            .addValidator(StandardValidators.FILE_EXISTS_VALIDATOR)
+            .build();
     public static final PropertyDescriptor ACCESS_KEY = new PropertyDescriptor.Builder()
-        .name("Access Key")
-        .expressionLanguageSupported(false)
-        .required(false)
-        .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-        .sensitive(true)
-        .build();
+            .name("Access Key")
+            .expressionLanguageSupported(false)
+            .required(false)
+            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+            .sensitive(true)
+            .build();
     public static final PropertyDescriptor SECRET_KEY = new PropertyDescriptor.Builder()
-        .name("Secret Key")
-        .expressionLanguageSupported(false)
-        .required(false)
-        .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-        .sensitive(true)
-        .build();
+            .name("Secret Key")
+            .expressionLanguageSupported(false)
+            .required(false)
+            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+            .sensitive(true)
+            .build();
     public static final PropertyDescriptor REGION = new PropertyDescriptor.Builder()
-        .name("Region")
-        .required(true)
-        .allowableValues(getAvailableRegions())
-        .defaultValue(createAllowableValue(Regions.DEFAULT_REGION).getValue())
-        .build();
+            .name("Region")
+            .required(true)
+            .allowableValues(getAvailableRegions())
+            .defaultValue(createAllowableValue(Regions.DEFAULT_REGION).getValue())
+            .build();
 
     public static final PropertyDescriptor TIMEOUT = new PropertyDescriptor.Builder()
-        .name("Communications Timeout")
-        .required(true)
-        .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
-        .defaultValue("30 secs")
-        .build();
-
+            .name("Communications Timeout")
+            .required(true)
+            .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
+            .defaultValue("30 secs")
+            .build();
 
     private volatile ClientType client;
 
-
     private static AllowableValue createAllowableValue(final Regions regions) {
         return new AllowableValue(regions.getName(), regions.getName(), regions.getName());
     }
-    
+
     private static AllowableValue[] getAvailableRegions() {
         final List<AllowableValue> values = new ArrayList<>();
-        for ( final Regions regions : Regions.values() ) {
+        for (final Regions regions : Regions.values()) {
             values.add(createAllowableValue(regions));
         }
-        
+
         return (AllowableValue[]) values.toArray(new AllowableValue[values.size()]);
     }
-    
+
     @Override
     public Set<Relationship> getRelationships() {
         return relationships;
@@ -116,52 +114,50 @@ public abstract class AbstractAWSProcessor<ClientType extends AmazonWebServiceCl
     @Override
     protected Collection<ValidationResult> customValidate(final ValidationContext validationContext) {
         final List<ValidationResult> problems = new ArrayList<>(super.customValidate(validationContext));
-        
+
         final boolean accessKeySet = validationContext.getProperty(ACCESS_KEY).isSet();
         final boolean secretKeySet = validationContext.getProperty(SECRET_KEY).isSet();
-        if ( (accessKeySet && !secretKeySet) || (secretKeySet && !accessKeySet) ) {
+        if ((accessKeySet && !secretKeySet) || (secretKeySet && !accessKeySet)) {
             problems.add(new ValidationResult.Builder().input("Access Key").valid(false).explanation("If setting Secret Key or Access Key, must set both").build());
         }
-        
+
         final boolean credentialsFileSet = validationContext.getProperty(CREDENTAILS_FILE).isSet();
-        if ( (secretKeySet || accessKeySet) && credentialsFileSet ) {
+        if ((secretKeySet || accessKeySet) && credentialsFileSet) {
             problems.add(new ValidationResult.Builder().input("Access Key").valid(false).explanation("Cannot set both Credentials File and Secret Key/Access Key").build());
         }
-        
+
         return problems;
     }
 
-
     protected ClientConfiguration createConfiguration(final ProcessContext context) {
         final ClientConfiguration config = new ClientConfiguration();
         config.setMaxConnections(context.getMaxConcurrentTasks());
         config.setMaxErrorRetry(0);
         config.setUserAgent("NiFi");
-        
+
         final int commsTimeout = context.getProperty(TIMEOUT).asTimePeriod(TimeUnit.MILLISECONDS).intValue();
         config.setConnectionTimeout(commsTimeout);
         config.setSocketTimeout(commsTimeout);
-        
+
         return config;
     }
 
-    
     @OnScheduled
     public void onScheduled(final ProcessContext context) {
         final ClientType awsClient = createClient(context, getCredentials(context), createConfiguration(context));
         this.client = awsClient;
-        
+
         // if the processor supports REGION, get the configured region.
-        if ( getSupportedPropertyDescriptors().contains(REGION) ) {
+        if (getSupportedPropertyDescriptors().contains(REGION)) {
             final String region = context.getProperty(REGION).getValue();
-            if ( region != null ) {
+            if (region != null) {
                 client.setRegion(Region.getRegion(Regions.fromName(region)));
             }
         }
     }
 
     protected abstract ClientType createClient(final ProcessContext context, final AWSCredentials credentials, final ClientConfiguration config);
-    
+
     protected ClientType getClient() {
         return client;
     }
@@ -171,23 +167,22 @@ public abstract class AbstractAWSProcessor<ClientType extends AmazonWebServiceCl
         final String secretKey = context.getProperty(SECRET_KEY).getValue();
 
         final String credentialsFile = context.getProperty(CREDENTAILS_FILE).getValue();
-        
-        if ( credentialsFile != null ) {
+
+        if (credentialsFile != null) {
             try {
                 return new PropertiesCredentials(new File(credentialsFile));
             } catch (final IOException ioe) {
                 throw new ProcessException("Could not read Credentials File", ioe);
             }
         }
-        
-        if ( accessKey != null && secretKey != null ) {
+
+        if (accessKey != null && secretKey != null) {
             return new BasicAWSCredentials(accessKey, secretKey);
         }
-        
+
         return new AnonymousAWSCredentials();
     }
 
-    
     protected boolean isEmpty(final String value) {
         return value == null || value.trim().equals("");
     }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/AbstractS3Processor.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/AbstractS3Processor.java b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/AbstractS3Processor.java
index 624015b..76880ef 100644
--- a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/AbstractS3Processor.java
+++ b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/AbstractS3Processor.java
@@ -39,133 +39,131 @@ import com.amazonaws.services.s3.model.Permission;
 public abstract class AbstractS3Processor extends AbstractAWSProcessor<AmazonS3Client> {
 
     public static final PropertyDescriptor FULL_CONTROL_USER_LIST = new PropertyDescriptor.Builder()
-        .name("FullControl User List")
-        .required(false)
-        .expressionLanguageSupported(true)
-        .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-        .description("A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Full Control for an object")
-        .defaultValue("${s3.permissions.full.users}")
-        .build();
+            .name("FullControl User List")
+            .required(false)
+            .expressionLanguageSupported(true)
+            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+            .description("A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Full Control for an object")
+            .defaultValue("${s3.permissions.full.users}")
+            .build();
     public static final PropertyDescriptor READ_USER_LIST = new PropertyDescriptor.Builder()
-        .name("Read Permission User List")
-        .required(false)
-        .expressionLanguageSupported(true)
-        .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-        .description("A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Read Access for an object")
-        .defaultValue("${s3.permissions.read.users}")
-        .build();
+            .name("Read Permission User List")
+            .required(false)
+            .expressionLanguageSupported(true)
+            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+            .description("A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Read Access for an object")
+            .defaultValue("${s3.permissions.read.users}")
+            .build();
     public static final PropertyDescriptor WRITE_USER_LIST = new PropertyDescriptor.Builder()
-        .name("Write Permission User List")
-        .required(false)
-        .expressionLanguageSupported(true)
-        .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-        .description("A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Write Access for an object")
-        .defaultValue("${s3.permissions.write.users}")
-        .build();
+            .name("Write Permission User List")
+            .required(false)
+            .expressionLanguageSupported(true)
+            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+            .description("A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Write Access for an object")
+            .defaultValue("${s3.permissions.write.users}")
+            .build();
     public static final PropertyDescriptor READ_ACL_LIST = new PropertyDescriptor.Builder()
-        .name("Read ACL User List")
-        .required(false)
-        .expressionLanguageSupported(true)
-        .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-        .description("A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have permissions to read the Access Control List for an object")
-        .defaultValue("${s3.permissions.readacl.users}")
-        .build();
+            .name("Read ACL User List")
+            .required(false)
+            .expressionLanguageSupported(true)
+            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+            .description("A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have permissions to read the Access Control List for an object")
+            .defaultValue("${s3.permissions.readacl.users}")
+            .build();
     public static final PropertyDescriptor WRITE_ACL_LIST = new PropertyDescriptor.Builder()
-        .name("Write ACL User List")
-        .required(false)
-        .expressionLanguageSupported(true)
-        .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-        .description("A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have permissions to change the Access Control List for an object")
-        .defaultValue("${s3.permissions.writeacl.users}")
-        .build();
+            .name("Write ACL User List")
+            .required(false)
+            .expressionLanguageSupported(true)
+            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+            .description("A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have permissions to change the Access Control List for an object")
+            .defaultValue("${s3.permissions.writeacl.users}")
+            .build();
     public static final PropertyDescriptor OWNER = new PropertyDescriptor.Builder()
-        .name("Owner")
-        .required(false)
-        .expressionLanguageSupported(true)
-        .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-        .description("The Amazon ID to use for the object's owner")
-        .defaultValue("${s3.owner}")
-        .build();
+            .name("Owner")
+            .required(false)
+            .expressionLanguageSupported(true)
+            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+            .description("The Amazon ID to use for the object's owner")
+            .defaultValue("${s3.owner}")
+            .build();
     public static final PropertyDescriptor BUCKET = new PropertyDescriptor.Builder()
-        .name("Bucket")
-        .expressionLanguageSupported(true)
-        .required(true)
-        .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-        .build();
+            .name("Bucket")
+            .expressionLanguageSupported(true)
+            .required(true)
+            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+            .build();
     public static final PropertyDescriptor KEY = new PropertyDescriptor.Builder()
-        .name("Object Key")
-        .required(true)
-        .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-        .expressionLanguageSupported(true)
-        .defaultValue("${filename}")
-        .build();
-    
-    
+            .name("Object Key")
+            .required(true)
+            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+            .expressionLanguageSupported(true)
+            .defaultValue("${filename}")
+            .build();
+
     @Override
     protected AmazonS3Client createClient(final ProcessContext context, final AWSCredentials credentials, final ClientConfiguration config) {
         return new AmazonS3Client(credentials, config);
     }
-    
-    
+
     protected Grantee createGrantee(final String value) {
-        if ( isEmpty(value) ) {
+        if (isEmpty(value)) {
             return null;
         }
-        
-        if ( value.contains("@") ) {
+
+        if (value.contains("@")) {
             return new EmailAddressGrantee(value);
         } else {
             return new CanonicalGrantee(value);
         }
     }
-    
+
     protected final List<Grantee> createGrantees(final String value) {
-        if ( isEmpty(value) ) {
+        if (isEmpty(value)) {
             return Collections.emptyList();
         }
-        
+
         final List<Grantee> grantees = new ArrayList<>();
         final String[] vals = value.split(",");
-        for ( final String val : vals ) {
+        for (final String val : vals) {
             final String identifier = val.trim();
             final Grantee grantee = createGrantee(identifier);
-            if ( grantee != null ) {
+            if (grantee != null) {
                 grantees.add(grantee);
             }
         }
         return grantees;
     }
-    
+
     protected final AccessControlList createACL(final ProcessContext context, final FlowFile flowFile) {
         final AccessControlList acl = new AccessControlList();
-        
+
         final String ownerId = context.getProperty(OWNER).evaluateAttributeExpressions(flowFile).getValue();
-        if ( !isEmpty(ownerId) ) {
+        if (!isEmpty(ownerId)) {
             final Owner owner = new Owner();
             owner.setId(ownerId);
             acl.setOwner(owner);
         }
-        
-        for ( final Grantee grantee : createGrantees(context.getProperty(FULL_CONTROL_USER_LIST).evaluateAttributeExpressions(flowFile).getValue())) {
+
+        for (final Grantee grantee : createGrantees(context.getProperty(FULL_CONTROL_USER_LIST).evaluateAttributeExpressions(flowFile).getValue())) {
             acl.grantPermission(grantee, Permission.FullControl);
         }
-        
-        for ( final Grantee grantee : createGrantees(context.getProperty(READ_USER_LIST).evaluateAttributeExpressions(flowFile).getValue())) {
+
+        for (final Grantee grantee : createGrantees(context.getProperty(READ_USER_LIST).evaluateAttributeExpressions(flowFile).getValue())) {
             acl.grantPermission(grantee, Permission.Read);
         }
 
-        for ( final Grantee grantee : createGrantees(context.getProperty(WRITE_USER_LIST).evaluateAttributeExpressions(flowFile).getValue())) {
+        for (final Grantee grantee : createGrantees(context.getProperty(WRITE_USER_LIST).evaluateAttributeExpressions(flowFile).getValue())) {
             acl.grantPermission(grantee, Permission.Write);
         }
-        
-        for ( final Grantee grantee : createGrantees(context.getProperty(READ_ACL_LIST).evaluateAttributeExpressions(flowFile).getValue())) {
+
+        for (final Grantee grantee : createGrantees(context.getProperty(READ_ACL_LIST).evaluateAttributeExpressions(flowFile).getValue())) {
             acl.grantPermission(grantee, Permission.ReadAcp);
         }
 
-        for ( final Grantee grantee : createGrantees(context.getProperty(WRITE_ACL_LIST).evaluateAttributeExpressions(flowFile).getValue())) {
+        for (final Grantee grantee : createGrantees(context.getProperty(WRITE_ACL_LIST).evaluateAttributeExpressions(flowFile).getValue())) {
             acl.grantPermission(grantee, Permission.WriteAcp);
         }
-        
+
         return acl;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/060a1e0d/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/FetchS3Object.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/FetchS3Object.java b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/FetchS3Object.java
index 63c8346..2406b67 100644
--- a/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/FetchS3Object.java
+++ b/nifi/nifi-nar-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/s3/FetchS3Object.java
@@ -43,46 +43,44 @@ import com.amazonaws.services.s3.model.GetObjectRequest;
 import com.amazonaws.services.s3.model.ObjectMetadata;
 import com.amazonaws.services.s3.model.S3Object;
 
-
 @SupportsBatching
 @SeeAlso({PutS3Object.class})
 @Tags({"Amazon", "S3", "AWS", "Get", "Fetch"})
 @CapabilityDescription("Retrieves the contents of an S3 Object and writes it to the content of a FlowFile")
 @WritesAttributes({
-	@WritesAttribute(attribute="s3.bucket", description="The name of the S3 bucket"),
-	@WritesAttribute(attribute="path", description="The path of the file"),
-	@WritesAttribute(attribute="absolute.path", description="The path of the file"),
-	@WritesAttribute(attribute="filename", description="The name of the file"),
-	@WritesAttribute(attribute="hash.value", description="The MD5 sum of the file"),
-	@WritesAttribute(attribute="hash.algorithm", description="MD5"),
-	@WritesAttribute(attribute="mime.type", description="If S3 provides the content type/MIME type, this attribute will hold that file"),
-	@WritesAttribute(attribute="s3.etag", description="The ETag that can be used to see if the file has changed"),
-	@WritesAttribute(attribute="s3.expirationTime", description="If the file has an expiration date, this attribute will be set, containing the milliseconds since epoch in UTC time"),
-	@WritesAttribute(attribute="s3.expirationTimeRuleId", description="The ID of the rule that dictates this object's expiration time"),
-	@WritesAttribute(attribute="s3.version", description="The version of the S3 object"),
-})
+    @WritesAttribute(attribute = "s3.bucket", description = "The name of the S3 bucket"),
+    @WritesAttribute(attribute = "path", description = "The path of the file"),
+    @WritesAttribute(attribute = "absolute.path", description = "The path of the file"),
+    @WritesAttribute(attribute = "filename", description = "The name of the file"),
+    @WritesAttribute(attribute = "hash.value", description = "The MD5 sum of the file"),
+    @WritesAttribute(attribute = "hash.algorithm", description = "MD5"),
+    @WritesAttribute(attribute = "mime.type", description = "If S3 provides the content type/MIME type, this attribute will hold that file"),
+    @WritesAttribute(attribute = "s3.etag", description = "The ETag that can be used to see if the file has changed"),
+    @WritesAttribute(attribute = "s3.expirationTime", description = "If the file has an expiration date, this attribute will be set, containing the milliseconds since epoch in UTC time"),
+    @WritesAttribute(attribute = "s3.expirationTimeRuleId", description = "The ID of the rule that dictates this object's expiration time"),
+    @WritesAttribute(attribute = "s3.version", description = "The version of the S3 object"),})
 public class FetchS3Object extends AbstractS3Processor {
 
-	public static final PropertyDescriptor VERSION_ID = new PropertyDescriptor.Builder()
-        .name("Version")
-        .description("The Version of the Object to download")
-        .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-        .expressionLanguageSupported(true)
-        .required(false)
-        .build();
-    
+    public static final PropertyDescriptor VERSION_ID = new PropertyDescriptor.Builder()
+            .name("Version")
+            .description("The Version of the Object to download")
+            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+            .expressionLanguageSupported(true)
+            .required(false)
+            .build();
+
     public static final List<PropertyDescriptor> properties = Collections.unmodifiableList(
-            Arrays.asList(BUCKET, KEY, REGION, ACCESS_KEY, SECRET_KEY, CREDENTAILS_FILE, TIMEOUT, VERSION_ID) );
+            Arrays.asList(BUCKET, KEY, REGION, ACCESS_KEY, SECRET_KEY, CREDENTAILS_FILE, TIMEOUT, VERSION_ID));
 
     @Override
     protected List<PropertyDescriptor> getSupportedPropertyDescriptors() {
         return properties;
     }
-    
+
     @Override
     public void onTrigger(final ProcessContext context, final ProcessSession session) {
         FlowFile flowFile = session.get();
-        if ( flowFile == null ) {
+        if (flowFile == null) {
             return;
         }
 
@@ -90,10 +88,10 @@ public class FetchS3Object extends AbstractS3Processor {
         final String bucket = context.getProperty(BUCKET).evaluateAttributeExpressions(flowFile).getValue();
         final String key = context.getProperty(KEY).evaluateAttributeExpressions(flowFile).getValue();
         final String versionId = context.getProperty(VERSION_ID).evaluateAttributeExpressions(flowFile).getValue();
-        
+
         final AmazonS3 client = getClient();
         final GetObjectRequest request;
-        if ( versionId == null ) {
+        if (versionId == null) {
             request = new GetObjectRequest(bucket, key);
         } else {
             request = new GetObjectRequest(bucket, key, versionId);
@@ -103,12 +101,12 @@ public class FetchS3Object extends AbstractS3Processor {
         try (final S3Object s3Object = client.getObject(request)) {
             flowFile = session.importFrom(s3Object.getObjectContent(), flowFile);
             attributes.put("s3.bucket", s3Object.getBucketName());
-            
+
             final ObjectMetadata metadata = s3Object.getObjectMetadata();
-            if ( metadata.getContentDisposition() != null ) {
+            if (metadata.getContentDisposition() != null) {
                 final String fullyQualified = metadata.getContentDisposition();
                 final int lastSlash = fullyQualified.lastIndexOf("/");
-                if ( lastSlash > -1 && lastSlash < fullyQualified.length() - 1 ) {
+                if (lastSlash > -1 && lastSlash < fullyQualified.length() - 1) {
                     attributes.put(CoreAttributes.PATH.key(), fullyQualified.substring(0, lastSlash));
                     attributes.put(CoreAttributes.ABSOLUTE_PATH.key(), fullyQualified);
                     attributes.put(CoreAttributes.FILENAME.key(), fullyQualified.substring(lastSlash + 1));
@@ -116,42 +114,42 @@ public class FetchS3Object extends AbstractS3Processor {
                     attributes.put(CoreAttributes.FILENAME.key(), metadata.getContentDisposition());
                 }
             }
-            if (metadata.getContentMD5() != null ) {
+            if (metadata.getContentMD5() != null) {
                 attributes.put("hash.value", metadata.getContentMD5());
                 attributes.put("hash.algorithm", "MD5");
             }
-            if ( metadata.getContentType() != null ) {
+            if (metadata.getContentType() != null) {
                 attributes.put(CoreAttributes.MIME_TYPE.key(), metadata.getContentType());
             }
-            if ( metadata.getETag() != null ) {
+            if (metadata.getETag() != null) {
                 attributes.put("s3.etag", metadata.getETag());
             }
-            if ( metadata.getExpirationTime() != null ) {
+            if (metadata.getExpirationTime() != null) {
                 attributes.put("s3.expirationTime", String.valueOf(metadata.getExpirationTime().getTime()));
             }
-            if ( metadata.getExpirationTimeRuleId() != null ) {
+            if (metadata.getExpirationTimeRuleId() != null) {
                 attributes.put("s3.expirationTimeRuleId", metadata.getExpirationTimeRuleId());
             }
-            if ( metadata.getUserMetadata() != null ) {
+            if (metadata.getUserMetadata() != null) {
                 attributes.putAll(metadata.getUserMetadata());
             }
-            if ( metadata.getVersionId() != null ) {
+            if (metadata.getVersionId() != null) {
                 attributes.put("s3.version", metadata.getVersionId());
             }
         } catch (final IOException | AmazonClientException ioe) {
-            getLogger().error("Failed to retrieve S3 Object for {}; routing to failure", new Object[] {flowFile, ioe});
+            getLogger().error("Failed to retrieve S3 Object for {}; routing to failure", new Object[]{flowFile, ioe});
             session.transfer(flowFile, REL_FAILURE);
             return;
         }
 
-        if ( !attributes.isEmpty() ) {
+        if (!attributes.isEmpty()) {
             flowFile = session.putAllAttributes(flowFile, attributes);
         }
 
         session.transfer(flowFile, REL_SUCCESS);
         final long transferMillis = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNanos);
-        getLogger().info("Successfully retrieved S3 Object for {} in {} millis; routing to success", new Object[] {flowFile, transferMillis});
+        getLogger().info("Successfully retrieved S3 Object for {} in {} millis; routing to success", new Object[]{flowFile, transferMillis});
         session.getProvenanceReporter().receive(flowFile, "http://" + bucket + ".amazonaws.com/" + key, transferMillis);
     }
-    
+
 }


[4/6] incubator-nifi git commit: NIFI-537 fixed identified licensing issue with nifi-standard-content-viewer

Posted by jo...@apache.org.
NIFI-537 fixed identified licensing issue with nifi-standard-content-viewer


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

Branch: refs/heads/NIFI-271
Commit: 0d7838273ce9438dbb563d4cfa3c63bfb1aa5e3b
Parents: 6d512f1
Author: joewitt <jo...@apache.org>
Authored: Wed Apr 22 13:51:36 2015 -0400
Committer: joewitt <jo...@apache.org>
Committed: Wed Apr 22 13:51:36 2015 -0400

----------------------------------------------------------------------
 .../src/main/webapp/META-INF/nifi-content-viewer      | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/0d783827/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/webapp/META-INF/nifi-content-viewer
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/webapp/META-INF/nifi-content-viewer b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/webapp/META-INF/nifi-content-viewer
index cbf30b7..c6a78f1 100644
--- a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/webapp/META-INF/nifi-content-viewer
+++ b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/webapp/META-INF/nifi-content-viewer
@@ -1,3 +1,17 @@
+# 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.
 application/xml
 application/json
 text/plain
\ No newline at end of file


[2/6] incubator-nifi git commit: NIFI-271 checkpoint

Posted by jo...@apache.org.
NIFI-271 checkpoint


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

Branch: refs/heads/NIFI-271
Commit: 9dda16c995ba55b8025506a12b0844031f5efcf0
Parents: 888254b
Author: joewitt <jo...@apache.org>
Authored: Wed Apr 22 12:52:00 2015 -0400
Committer: joewitt <jo...@apache.org>
Committed: Wed Apr 22 12:52:00 2015 -0400

----------------------------------------------------------------------
 .../nifi/cluster/context/ClusterContext.java    |  36 +-
 .../cluster/context/ClusterContextImpl.java     |  10 +-
 .../context/ClusterContextThreadLocal.java      |  12 +-
 .../cluster/firewall/ClusterNodeFirewall.java   |   5 +-
 .../impl/FileBasedClusterNodeFirewall.java      |   8 +-
 .../nifi/cluster/flow/ClusterDataFlow.java      |   8 +-
 .../apache/nifi/cluster/flow/DataFlowDao.java   |   2 +-
 .../cluster/flow/DataFlowManagementService.java |  23 +-
 .../nifi/cluster/flow/impl/DataFlowDaoImpl.java |  52 +--
 .../impl/DataFlowManagementServiceImpl.java     |  38 +-
 .../nifi/cluster/manager/ClusterManager.java    |   8 +-
 .../nifi/cluster/manager/NodeResponse.java      |  18 +-
 .../cluster/manager/impl/WebClusterManager.java | 374 +++++++++----------
 .../java/org/apache/nifi/cluster/node/Node.java |   2 +-
 ...anagerProtocolServiceLocatorFactoryBean.java |   2 +-
 .../spring/WebClusterManagerFactoryBean.java    |   8 +-
 .../apache/nifi/web/ConfigurationRequest.java   |   9 +-
 .../apache/nifi/web/ConfigurationSnapshot.java  |   3 +-
 .../org/apache/nifi/web/FlowModification.java   |  16 +-
 .../nifi/web/OptimisticLockingManager.java      |  25 +-
 .../web/StandardOptimisticLockingManager.java   |  32 +-
 .../org/apache/nifi/web/UpdateRevision.java     |   6 +-
 .../org/apache/nifi/web/security/DnUtils.java   |  14 +-
 .../anonymous/NiFiAnonymousUserFilter.java      |   4 +-
 .../NiFiAuthenticationEntryPoint.java           |  11 +-
 .../authorization/NiFiAuthorizationService.java |  38 +-
 .../nifi/web/security/user/NiFiUserDetails.java |  16 +-
 .../nifi/web/security/user/NiFiUserUtils.java   |   6 +-
 .../x509/SubjectDnX509PrincipalExtractor.java   |   6 -
 .../security/x509/X509AuthenticationFilter.java |  50 +--
 .../security/x509/X509CertificateExtractor.java |   4 +-
 .../x509/ocsp/OcspCertificateValidator.java     |  43 +--
 .../NiFiAuthorizationServiceTest.java           |  91 ++---
 33 files changed, 469 insertions(+), 511 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster-web/src/main/java/org/apache/nifi/cluster/context/ClusterContext.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster-web/src/main/java/org/apache/nifi/cluster/context/ClusterContext.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster-web/src/main/java/org/apache/nifi/cluster/context/ClusterContext.java
index 44fb25a..8c3e41b 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster-web/src/main/java/org/apache/nifi/cluster/context/ClusterContext.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster-web/src/main/java/org/apache/nifi/cluster/context/ClusterContext.java
@@ -22,38 +22,44 @@ import org.apache.nifi.action.Action;
 import org.apache.nifi.web.Revision;
 
 /**
- * Contains contextual information about clustering that may be serialized 
+ * Contains contextual information about clustering that may be serialized
  * between manager and node when communicating over HTTP.
  */
 public interface ClusterContext extends Serializable {
-    
+
     /**
-     * Returns a list of auditable actions.  The list is modifiable
-     * and will never be null.
+     * Returns a list of auditable actions. The list is modifiable and will
+     * never be null.
+     *
      * @return a collection of actions
      */
     List<Action> getActions();
-    
+
     Revision getRevision();
-    
+
     void setRevision(Revision revision);
-    
+
     /**
-     * @return true if the request was sent by the cluster manager; false otherwise
+     * @return true if the request was sent by the cluster manager; false
+     * otherwise
      */
     boolean isRequestSentByClusterManager();
-    
+
     /**
      * Sets the flag to indicate if a request was sent by the cluster manager.
-     * @param flag true if the request was sent by the cluster manager; false otherwise
+     *
+     * @param flag true if the request was sent by the cluster manager; false
+     * otherwise
      */
     void setRequestSentByClusterManager(boolean flag);
-    
+
     /**
-     * Gets an id generation seed. This is used to ensure that nodes are able to generate the
-     * same id across the cluster. This is usually handled by the cluster manager creating the
-     * id, however for some actions (snippets, templates, etc) this is not possible.
-     * @return 
+     * Gets an id generation seed. This is used to ensure that nodes are able to
+     * generate the same id across the cluster. This is usually handled by the
+     * cluster manager creating the id, however for some actions (snippets,
+     * templates, etc) this is not possible.
+     *
+     * @return generated id seed
      */
     String getIdGenerationSeed();
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster-web/src/main/java/org/apache/nifi/cluster/context/ClusterContextImpl.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster-web/src/main/java/org/apache/nifi/cluster/context/ClusterContextImpl.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster-web/src/main/java/org/apache/nifi/cluster/context/ClusterContextImpl.java
index 06907d2..43e7c2d 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster-web/src/main/java/org/apache/nifi/cluster/context/ClusterContextImpl.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster-web/src/main/java/org/apache/nifi/cluster/context/ClusterContextImpl.java
@@ -29,13 +29,13 @@ import org.apache.nifi.web.Revision;
 public class ClusterContextImpl implements ClusterContext, Serializable {
 
     private final List<Action> actions = new ArrayList<>();
-    
+
     private Revision revision;
-    
+
     private boolean requestSentByClusterManager;
-    
+
     private final String idGenerationSeed = UUID.randomUUID().toString();
-    
+
     @Override
     public List<Action> getActions() {
         return actions;
@@ -55,7 +55,7 @@ public class ClusterContextImpl implements ClusterContext, Serializable {
     public boolean isRequestSentByClusterManager() {
         return requestSentByClusterManager;
     }
-    
+
     @Override
     public void setRequestSentByClusterManager(boolean requestSentByClusterManager) {
         this.requestSentByClusterManager = requestSentByClusterManager;

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster-web/src/main/java/org/apache/nifi/cluster/context/ClusterContextThreadLocal.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster-web/src/main/java/org/apache/nifi/cluster/context/ClusterContextThreadLocal.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster-web/src/main/java/org/apache/nifi/cluster/context/ClusterContextThreadLocal.java
index c8c7206..79900fb 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster-web/src/main/java/org/apache/nifi/cluster/context/ClusterContextThreadLocal.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster-web/src/main/java/org/apache/nifi/cluster/context/ClusterContextThreadLocal.java
@@ -20,23 +20,23 @@ package org.apache.nifi.cluster.context;
  * Manages a cluster context on a threadlocal.
  */
 public class ClusterContextThreadLocal {
-    
+
     private static final ThreadLocal<ClusterContext> contextHolder = new ThreadLocal<>();
-    
+
     public static void removeContext() {
         contextHolder.remove();
     }
-    
+
     public static ClusterContext createEmptyContext() {
         return new ClusterContextImpl();
     }
-    
+
     public static ClusterContext getContext() {
         return contextHolder.get();
     }
-    
+
     public static void setContext(final ClusterContext context) {
         contextHolder.set(context);
     }
-    
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/firewall/ClusterNodeFirewall.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/firewall/ClusterNodeFirewall.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/firewall/ClusterNodeFirewall.java
index 2e3d278..08d21a5 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/firewall/ClusterNodeFirewall.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/firewall/ClusterNodeFirewall.java
@@ -27,8 +27,9 @@ public interface ClusterNodeFirewall {
      * false otherwise.
      *
      * If an IP is given, then it must be formatted in dotted decimal notation.
-     * @param hostOrIp
-     * @return 
+     *
+     * @param hostOrIp host
+     * @return true if permissible
      */
     boolean isPermissible(String hostOrIp);
 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/firewall/impl/FileBasedClusterNodeFirewall.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/firewall/impl/FileBasedClusterNodeFirewall.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/firewall/impl/FileBasedClusterNodeFirewall.java
index 916ec14..5219629 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/firewall/impl/FileBasedClusterNodeFirewall.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/firewall/impl/FileBasedClusterNodeFirewall.java
@@ -16,10 +16,14 @@
  */
 package org.apache.nifi.cluster.firewall.impl;
 
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
 import org.apache.commons.net.util.SubnetUtils;
 import org.apache.nifi.cluster.firewall.ClusterNodeFirewall;
 import org.apache.nifi.util.file.FileUtils;

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/ClusterDataFlow.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/ClusterDataFlow.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/ClusterDataFlow.java
index c17b429..2803d4c 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/ClusterDataFlow.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/ClusterDataFlow.java
@@ -39,13 +39,13 @@ public class ClusterDataFlow {
     }
 
     public byte[] getControllerServices() {
-    	return controllerServices;
+        return controllerServices;
     }
-    
+
     public byte[] getReportingTasks() {
-    	return reportingTasks;
+        return reportingTasks;
     }
-    
+
     public NodeIdentifier getPrimaryNodeId() {
         return primaryNodeId;
     }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/DataFlowDao.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/DataFlowDao.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/DataFlowDao.java
index a273704..9ee5aa8 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/DataFlowDao.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/DataFlowDao.java
@@ -36,7 +36,7 @@ public interface DataFlowDao {
      * Saves the cluster's dataflow.
      *
      *
-     * @param dataFlow
+     * @param dataFlow flow
      * @throws DaoException if the dataflow was unable to be saved
      */
     void saveDataFlow(ClusterDataFlow dataFlow) throws DaoException;

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/DataFlowManagementService.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/DataFlowManagementService.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/DataFlowManagementService.java
index 082d65e..f354507 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/DataFlowManagementService.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/DataFlowManagementService.java
@@ -31,7 +31,6 @@ import org.apache.nifi.cluster.protocol.NodeIdentifier;
  *
  * Clients must call start() and stop() to initialize and stop the instance.
  *
- * @author unattributed
  */
 public interface DataFlowManagementService {
 
@@ -68,21 +67,23 @@ public interface DataFlowManagementService {
     void updatePrimaryNode(NodeIdentifier nodeId) throws DaoException;
 
     /**
-     * Updates the dataflow with the given serialized form of the Controller Services that are to exist on the NCM.
-     * 
-     * @param serializedControllerServices
-     * @throws DaoException
+     * Updates the dataflow with the given serialized form of the Controller
+     * Services that are to exist on the NCM.
+     *
+     * @param serializedControllerServices services
+     * @throws DaoException ex
      */
     void updateControllerServices(byte[] serializedControllerServices) throws DaoException;
-    
+
     /**
-     * Updates the dataflow with the given serialized form of Reporting Tasks that are to exist on the NCM.
-     * 
-     * @param serviceNodes
-     * @throws DaoException
+     * Updates the dataflow with the given serialized form of Reporting Tasks
+     * that are to exist on the NCM.
+     *
+     * @param serializedReportingTasks tasks
+     * @throws DaoException ex
      */
     void updateReportingTasks(byte[] serializedReportingTasks) throws DaoException;
-    
+
     /**
      * Sets the state of the flow.
      *

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/impl/DataFlowDaoImpl.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/impl/DataFlowDaoImpl.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/impl/DataFlowDaoImpl.java
index dd9d2a3..e2690f7 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/impl/DataFlowDaoImpl.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/impl/DataFlowDaoImpl.java
@@ -187,36 +187,35 @@ public class DataFlowDaoImpl implements DataFlowDao {
             throw new DaoException(ex);
         }
     }
-    
-    
+
     private void syncWithRestore(final File primaryFile, final File restoreFile) throws IOException {
         try (final FileInputStream primaryFis = new FileInputStream(primaryFile);
-             final TarArchiveInputStream primaryIn = new TarArchiveInputStream(primaryFis);
-             final FileInputStream restoreFis = new FileInputStream(restoreFile);
-             final TarArchiveInputStream restoreIn = new TarArchiveInputStream(restoreFis)) {
-            
+                final TarArchiveInputStream primaryIn = new TarArchiveInputStream(primaryFis);
+                final FileInputStream restoreFis = new FileInputStream(restoreFile);
+                final TarArchiveInputStream restoreIn = new TarArchiveInputStream(restoreFis)) {
+
             final ArchiveEntry primaryEntry = primaryIn.getNextEntry();
             final ArchiveEntry restoreEntry = restoreIn.getNextEntry();
 
-            if ( primaryEntry == null && restoreEntry == null ) {
+            if (primaryEntry == null && restoreEntry == null) {
                 return;
             }
 
-            if ( (primaryEntry == null && restoreEntry != null) || (primaryEntry != null && restoreEntry == null) ) {
+            if ((primaryEntry == null && restoreEntry != null) || (primaryEntry != null && restoreEntry == null)) {
                 throw new IllegalStateException(String.format("Primary file '%s' is different than restore file '%s'",
                         primaryFile.getAbsoluteFile(), restoreFile.getAbsolutePath()));
             }
-            
+
             final byte[] primaryMd5 = calculateMd5(primaryIn);
             final byte[] restoreMd5 = calculateMd5(restoreIn);
-            
-            if ( !Arrays.equals(primaryMd5, restoreMd5) ) {
+
+            if (!Arrays.equals(primaryMd5, restoreMd5)) {
                 throw new IllegalStateException(String.format("Primary file '%s' is different than restore file '%s'",
                         primaryFile.getAbsoluteFile(), restoreFile.getAbsolutePath()));
             }
         }
     }
-    
+
     private byte[] calculateMd5(final InputStream in) throws IOException {
         final MessageDigest digest;
         try {
@@ -224,7 +223,7 @@ public class DataFlowDaoImpl implements DataFlowDao {
         } catch (final NoSuchAlgorithmException nsae) {
             throw new IOException(nsae);
         }
-        
+
         int len;
         final byte[] buffer = new byte[8192];
         while ((len = in.read(buffer)) > -1) {
@@ -257,12 +256,14 @@ public class DataFlowDaoImpl implements DataFlowDao {
                     if (primaryStateFile == null) {
                         writeDataFlow(createNewFlowStateFile(restoreDirectory), dataFlow);
                     } else {
-                        throw new DaoException(String.format("Unable to save dataflow because dataflow state file in primary directory '%s' exists, but it does not exist in the restore directory '%s'",
+                        throw new DaoException(String.format("Unable to save dataflow because dataflow state file in primary directory "
+                                + "'%s' exists, but it does not exist in the restore directory '%s'",
                                 primaryDirectory.getAbsolutePath(), restoreDirectory.getAbsolutePath()));
                     }
                 } else {
                     if (primaryStateFile == null) {
-                        throw new DaoException(String.format("Unable to save dataflow because dataflow state file in restore directory '%s' exists, but it does not exist in the primary directory '%s'",
+                        throw new DaoException(String.format("Unable to save dataflow because dataflow state file in restore directory "
+                                + "'%s' exists, but it does not exist in the primary directory '%s'",
                                 restoreDirectory.getAbsolutePath(), primaryDirectory.getAbsolutePath()));
                     } else {
                         final PersistedFlowState primaryFlowState = getPersistedFlowState(primaryStateFile);
@@ -270,14 +271,15 @@ public class DataFlowDaoImpl implements DataFlowDao {
                         if (primaryFlowState == restoreFlowState) {
                             writeDataFlow(restoreStateFile, dataFlow);
                         } else {
-                            throw new DaoException(String.format("Unable to save dataflow because state file in primary directory '%s' has state '%s', but the state file in the restore directory '%s' has state '%s'",
+                            throw new DaoException(String.format("Unable to save dataflow because state file in primary directory "
+                                    + "'%s' has state '%s', but the state file in the restore directory '%s' has state '%s'",
                                     primaryDirectory.getAbsolutePath(), primaryFlowState, restoreDirectory.getAbsolutePath(), restoreFlowState));
                         }
                     }
                 }
             }
 
-            // write dataflow to primary 
+            // write dataflow to primary
             if (primaryStateFile == null) {
                 writeDataFlow(createNewFlowStateFile(primaryDirectory), dataFlow);
             } else {
@@ -477,7 +479,7 @@ public class DataFlowDaoImpl implements DataFlowDao {
         byte[] clusterInfoBytes = new byte[0];
         byte[] controllerServiceBytes = new byte[0];
         byte[] reportingTaskBytes = new byte[0];
-        
+
         try (final InputStream inStream = new FileInputStream(file);
                 final TarArchiveInputStream tarIn = new TarArchiveInputStream(new BufferedInputStream(inStream))) {
             TarArchiveEntry tarEntry;
@@ -500,13 +502,13 @@ public class DataFlowDaoImpl implements DataFlowDao {
                         StreamUtils.fillBuffer(tarIn, clusterInfoBytes, true);
                         break;
                     case CONTROLLER_SERVICES_FILENAME:
-                    	controllerServiceBytes = new byte[(int) tarEntry.getSize()];
-                    	StreamUtils.fillBuffer(tarIn, controllerServiceBytes, true);
-                    	break;
+                        controllerServiceBytes = new byte[(int) tarEntry.getSize()];
+                        StreamUtils.fillBuffer(tarIn, controllerServiceBytes, true);
+                        break;
                     case REPORTING_TASKS_FILENAME:
-                    	reportingTaskBytes = new byte[(int) tarEntry.getSize()];
-                    	StreamUtils.fillBuffer(tarIn, reportingTaskBytes, true);
-                    	break;
+                        reportingTaskBytes = new byte[(int) tarEntry.getSize()];
+                        StreamUtils.fillBuffer(tarIn, reportingTaskBytes, true);
+                        break;
                     default:
                         throw new DaoException("Found Unexpected file in dataflow configuration: " + tarEntry.getName());
                 }
@@ -559,7 +561,7 @@ public class DataFlowDaoImpl implements DataFlowDao {
                 final TarArchiveOutputStream tarOut = new TarArchiveOutputStream(new BufferedOutputStream(fos))) {
 
             final DataFlow dataFlow = clusterDataFlow.getDataFlow();
-            if ( dataFlow == null ) {
+            if (dataFlow == null) {
                 writeTarEntry(tarOut, FLOW_XML_FILENAME, getEmptyFlowBytes());
                 writeTarEntry(tarOut, TEMPLATES_FILENAME, new byte[0]);
                 writeTarEntry(tarOut, SNIPPETS_FILENAME, new byte[0]);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/impl/DataFlowManagementServiceImpl.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/impl/DataFlowManagementServiceImpl.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/impl/DataFlowManagementServiceImpl.java
index 1bb8ca3..4fa6504 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/impl/DataFlowManagementServiceImpl.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/flow/impl/DataFlowManagementServiceImpl.java
@@ -64,12 +64,11 @@ import org.slf4j.LoggerFactory;
 public class DataFlowManagementServiceImpl implements DataFlowManagementService {
 
     /*
-     * Developer Note: 
-     * 
+     * Developer Note:
+     *
      * This class maintains an ExecutorService and a Runnable.
      * Although the class is not externally threadsafe, its internals are protected to
      * accommodate multithread access between the ExecutorServer and the Runnable.
-     * 
      */
     private static final Logger logger = new NiFiLog(LoggerFactory.getLogger(DataFlowManagementServiceImpl.class));
 
@@ -170,13 +169,12 @@ public class DataFlowManagementServiceImpl implements DataFlowManagementService
             resourceLock.unlock("updatePrimaryNode");
         }
     }
-    
-    
+
     @Override
     public void updateControllerServices(final byte[] controllerServiceBytes) throws DaoException {
-    	resourceLock.lock();
-    	try {
-    		final ClusterDataFlow existingClusterDataFlow = flowDao.loadDataFlow();
+        resourceLock.lock();
+        try {
+            final ClusterDataFlow existingClusterDataFlow = flowDao.loadDataFlow();
 
             final StandardDataFlow dataFlow;
             final byte[] reportingTaskBytes;
@@ -192,16 +190,16 @@ public class DataFlowManagementServiceImpl implements DataFlowManagementService
             }
 
             flowDao.saveDataFlow(new ClusterDataFlow(dataFlow, nodeId, controllerServiceBytes, reportingTaskBytes));
-    	} finally {
-    		resourceLock.unlock("updateControllerServices");
-    	}
+        } finally {
+            resourceLock.unlock("updateControllerServices");
+        }
     }
-    
+
     @Override
     public void updateReportingTasks(final byte[] reportingTaskBytes) throws DaoException {
-    	resourceLock.lock();
-    	try {
-    		final ClusterDataFlow existingClusterDataFlow = flowDao.loadDataFlow();
+        resourceLock.lock();
+        try {
+            final ClusterDataFlow existingClusterDataFlow = flowDao.loadDataFlow();
 
             final StandardDataFlow dataFlow;
             final byte[] controllerServiceBytes;
@@ -217,9 +215,9 @@ public class DataFlowManagementServiceImpl implements DataFlowManagementService
             }
 
             flowDao.saveDataFlow(new ClusterDataFlow(dataFlow, nodeId, controllerServiceBytes, reportingTaskBytes));
-    	} finally {
-    		resourceLock.unlock("updateControllerServices");
-    	}
+        } finally {
+            resourceLock.unlock("updateControllerServices");
+        }
     }
 
     @Override
@@ -361,8 +359,8 @@ public class DataFlowManagementServiceImpl implements DataFlowManagementService
                             if (existingClusterDataFlow == null) {
                                 currentClusterDataFlow = new ClusterDataFlow(dataFlow, null, new byte[0], new byte[0]);
                             } else {
-                                currentClusterDataFlow = new ClusterDataFlow(dataFlow, existingClusterDataFlow.getPrimaryNodeId(), 
-                                		existingClusterDataFlow.getControllerServices(), existingClusterDataFlow.getReportingTasks());
+                                currentClusterDataFlow = new ClusterDataFlow(dataFlow, existingClusterDataFlow.getPrimaryNodeId(),
+                                        existingClusterDataFlow.getControllerServices(), existingClusterDataFlow.getReportingTasks());
                             }
                             flowDao.saveDataFlow(currentClusterDataFlow);
                             flowDao.setPersistedFlowState(PersistedFlowState.CURRENT);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/ClusterManager.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/ClusterManager.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/ClusterManager.java
index 3a1dfb2..be52e0f 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/ClusterManager.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/ClusterManager.java
@@ -77,14 +77,14 @@ public interface ClusterManager extends NodeInformant {
     Set<Node> getNodes(Status... statuses);
 
     /**
-     * @param nodeId
+     * @param nodeId node identifier
      * @return returns the node with the given identifier or null if node does
      * not exist
      */
     Node getNode(String nodeId);
 
     /**
-     * @param statuses
+     * @param statuses statuses
      * @return the set of node identifiers with the given node status
      */
     Set<NodeIdentifier> getNodeIds(Status... statuses);
@@ -199,9 +199,7 @@ public interface ClusterManager extends NodeInformant {
     Node getPrimaryNode();
 
     /**
-     * Returns the bulletin repository.
-     *
-     * @return
+     * @return the bulletin repository
      */
     BulletinRepository getBulletinRepository();
 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/NodeResponse.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/NodeResponse.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/NodeResponse.java
index 8bc73ab..958d600 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/NodeResponse.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/NodeResponse.java
@@ -192,19 +192,19 @@ public class NodeResponse {
     }
 
     /**
-     * If this node response has been merged returns the updated entity, 
-     * otherwise null. Also returns null if hasThrowable() is true. The
-     * intent of this method is to support getting the response entity
-     * when it was already consumed during the merge operation. In this
-     * case the client response rom getClientResponse() will not support 
-     * a getEntity(...) or getEntityInputStream()  call.
-     * 
-     * @return 
+     * If this node response has been merged returns the updated entity,
+     * otherwise null. Also returns null if hasThrowable() is true. The intent
+     * of this method is to support getting the response entity when it was
+     * already consumed during the merge operation. In this case the client
+     * response rom getClientResponse() will not support a getEntity(...) or
+     * getEntityInputStream() call.
+     *
+     * @return
      */
     public Entity getUpdatedEntity() {
         return updatedEntity;
     }
-    
+
     /**
      * Creates a Response by mapping the ClientResponse values to it. Since the
      * ClientResponse's input stream can only be read once, this method should

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/impl/WebClusterManager.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/impl/WebClusterManager.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/impl/WebClusterManager.java
index db6421e..94ea17f 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/impl/WebClusterManager.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/impl/WebClusterManager.java
@@ -318,13 +318,13 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
     public static final String PROVENANCE_URI = "/nifi-api/controller/provenance";
     public static final Pattern PROVENANCE_QUERY_URI = Pattern.compile("/nifi-api/controller/provenance/[a-f0-9\\-]{36}");
     public static final Pattern PROVENANCE_EVENT_URI = Pattern.compile("/nifi-api/controller/provenance/events/[0-9]+");
-    
+
     public static final String CONTROLLER_SERVICES_URI = "/nifi-api/controller/controller-services/node";
     public static final Pattern CONTROLLER_SERVICE_URI_PATTERN = Pattern.compile("/nifi-api/controller/controller-services/node/[a-f0-9\\-]{36}");
     public static final Pattern CONTROLLER_SERVICE_REFERENCES_URI_PATTERN = Pattern.compile("/nifi-api/controller/controller-services/node/[a-f0-9\\-]{36}/references");
     public static final String REPORTING_TASKS_URI = "/nifi-api/controller/reporting-tasks/node";
     public static final Pattern REPORTING_TASK_URI_PATTERN = Pattern.compile("/nifi-api/controller/reporting-tasks/node/[a-f0-9\\-]{36}");
-    
+
     private final NiFiProperties properties;
     private final HttpRequestReplicator httpRequestReplicator;
     private final HttpResponseMapper httpResponseMapper;
@@ -427,14 +427,14 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
             public void heartbeat() {
             }
         }, this, encryptor);
-        
+
         // When we construct the scheduling agents, we can pass null for a lot of the arguments because we are only
         // going to be scheduling Reporting Tasks. Otherwise, it would not be okay.
         processScheduler.setSchedulingAgent(SchedulingStrategy.TIMER_DRIVEN, new TimerDrivenSchedulingAgent(null, reportingTaskEngine, null, encryptor));
         processScheduler.setSchedulingAgent(SchedulingStrategy.CRON_DRIVEN, new QuartzSchedulingAgent(null, reportingTaskEngine, null, encryptor));
         processScheduler.setMaxThreadCount(SchedulingStrategy.TIMER_DRIVEN, 10);
         processScheduler.setMaxThreadCount(SchedulingStrategy.CRON_DRIVEN, 10);
-        
+
         controllerServiceProvider = new StandardControllerServiceProvider(processScheduler, bulletinRepository);
     }
 
@@ -479,10 +479,10 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
                 }
 
                 final byte[] serializedServices = clusterDataFlow.getControllerServices();
-                if ( serializedServices != null && serializedServices.length > 0 ) {
-                	ControllerServiceLoader.loadControllerServices(this, new ByteArrayInputStream(serializedServices), encryptor, bulletinRepository, properties.getAutoResumeState());
+                if (serializedServices != null && serializedServices.length > 0) {
+                    ControllerServiceLoader.loadControllerServices(this, new ByteArrayInputStream(serializedServices), encryptor, bulletinRepository, properties.getAutoResumeState());
                 }
-                
+
                 // start multicast broadcasting service, if configured
                 if (servicesBroadcaster != null) {
                     servicesBroadcaster.start();
@@ -493,8 +493,8 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
 
                 // Load and start running Reporting Tasks
                 final byte[] serializedReportingTasks = clusterDataFlow.getReportingTasks();
-                if ( serializedReportingTasks != null && serializedReportingTasks.length > 0 ) {
-                	loadReportingTasks(serializedReportingTasks);
+                if (serializedReportingTasks != null && serializedReportingTasks.length > 0) {
+                    loadReportingTasks(serializedReportingTasks);
                 }
             } catch (final IOException ioe) {
                 logger.warn("Failed to initialize cluster services due to: " + ioe, ioe);
@@ -558,10 +558,10 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
                 servicesBroadcaster.stop();
             }
 
-            if ( processScheduler != null ) {
+            if (processScheduler != null) {
                 processScheduler.shutdown();
             }
-            
+
             if (encounteredException) {
                 throw new IOException("Failed to shutdown Cluster Manager because one or more cluster services failed to shutdown.  Check the logs for details.");
             }
@@ -946,7 +946,7 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
 
                 final String scheduleStateValue = DomUtils.getChild(taskElement, "scheduledState").getTextContent().trim();
                 final ScheduledState scheduledState = ScheduledState.valueOf(scheduleStateValue);
-                
+
                 // Reporting Task Properties
                 for (final Element property : DomUtils.getChildElementsByTagName(taskElement, "property")) {
                     final String name = DomUtils.getChildText(property, "name");
@@ -969,21 +969,21 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
                 final ReportingTask reportingTask = reportingTaskNode.getReportingTask();
 
                 final ComponentLog componentLog = new SimpleProcessLogger(taskId, reportingTask);
-                final ReportingInitializationContext config = new StandardReportingInitializationContext(taskId, taskName, 
+                final ReportingInitializationContext config = new StandardReportingInitializationContext(taskId, taskName,
                         schedulingStrategy, taskSchedulingPeriod, componentLog, this);
                 reportingTask.initialize(config);
 
                 final String annotationData = DomUtils.getChildText(taskElement, "annotationData");
-                if ( annotationData != null ) {
+                if (annotationData != null) {
                     reportingTaskNode.setAnnotationData(annotationData.trim());
                 }
-                
+
                 final Map<PropertyDescriptor, String> resolvedProps;
                 try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) {
                     resolvedProps = new HashMap<>();
                     for (final Map.Entry<String, String> entry : properties.entrySet()) {
                         final PropertyDescriptor descriptor = reportingTask.getPropertyDescriptor(entry.getKey());
-                        if ( entry.getValue() == null ) {
+                        if (entry.getValue() == null) {
                             resolvedProps.put(descriptor, descriptor.getDefaultValue());
                         } else {
                             resolvedProps.put(descriptor, entry.getValue());
@@ -992,24 +992,24 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
                 }
 
                 for (final Map.Entry<PropertyDescriptor, String> entry : resolvedProps.entrySet()) {
-                    if ( entry.getValue() != null ) {
+                    if (entry.getValue() != null) {
                         reportingTaskNode.setProperty(entry.getKey().getName(), entry.getValue());
                     }
                 }
-                
+
                 final String comments = DomUtils.getChildText(taskElement, "comment");
-                if ( comments != null ) {
+                if (comments != null) {
                     reportingTaskNode.setComments(comments);
                 }
 
                 reportingTaskNode.setScheduledState(scheduledState);
-                if ( ScheduledState.RUNNING.equals(scheduledState) ) {
-                    if ( reportingTaskNode.isValid() ) {
+                if (ScheduledState.RUNNING.equals(scheduledState)) {
+                    if (reportingTaskNode.isValid()) {
                         try {
                             processScheduler.schedule(reportingTaskNode);
                         } catch (final Exception e) {
                             logger.error("Failed to start {} due to {}", reportingTaskNode, e);
-                            if ( logger.isDebugEnabled() ) {
+                            if (logger.isDebugEnabled()) {
                                 logger.error("", e);
                             }
                         }
@@ -1017,8 +1017,7 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
                         logger.error("Failed to start {} because it is invalid due to {}", reportingTaskNode, reportingTaskNode.getValidationErrors());
                     }
                 }
-                
-                
+
                 tasks.put(reportingTaskNode.getIdentifier(), reportingTaskNode);
             }
         } catch (final SAXException | ParserConfigurationException | IOException | DOMException | NumberFormatException | InitializationException t) {
@@ -1031,7 +1030,6 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
         return tasks;
     }
 
-    
     @Override
     public ReportingTaskNode createReportingTask(final String type, final String id, final boolean firstTimeAdded) throws ReportingTaskInstantiationException {
         if (type == null) {
@@ -1064,16 +1062,16 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
         final ReportingTaskNode taskNode = new ClusteredReportingTaskNode(task, id, processScheduler,
                 new ClusteredEventAccess(this), bulletinRepository, controllerServiceProvider, validationContextFactory);
         taskNode.setName(task.getClass().getSimpleName());
-        
+
         reportingTasks.put(id, taskNode);
-        if ( firstTimeAdded ) {
+        if (firstTimeAdded) {
             try (final NarCloseable x = NarCloseable.withNarLoader()) {
                 ReflectionUtils.invokeMethodsWithAnnotation(OnAdded.class, task);
             } catch (final Exception e) {
                 throw new ComponentLifeCycleException("Failed to invoke On-Added Lifecycle methods of " + task, e);
             }
         }
-        
+
         return taskNode;
     }
 
@@ -1372,7 +1370,7 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
             writeLock.unlock("handleControllerStartupFailure");
         }
     }
-    
+
     /**
      * Adds an instance of a specified controller service.
      *
@@ -1383,7 +1381,7 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
      */
     @Override
     public ControllerServiceNode createControllerService(final String type, final String id, final boolean firstTimeAdded) {
-    	return controllerServiceProvider.createControllerService(type, id, firstTimeAdded);
+        return controllerServiceProvider.createControllerService(type, id, firstTimeAdded);
     }
 
     @Override
@@ -1410,82 +1408,80 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
     public boolean isControllerServiceEnabling(final String serviceIdentifier) {
         return controllerServiceProvider.isControllerServiceEnabling(serviceIdentifier);
     }
-    
+
     @Override
     public String getControllerServiceName(final String serviceIdentifier) {
-    	return controllerServiceProvider.getControllerServiceName(serviceIdentifier);
+        return controllerServiceProvider.getControllerServiceName(serviceIdentifier);
     }
 
     @Override
     public void removeControllerService(final ControllerServiceNode serviceNode) {
         controllerServiceProvider.removeControllerService(serviceNode);
     }
-    
 
     @Override
     public void enableControllerService(final ControllerServiceNode serviceNode) {
         controllerServiceProvider.enableControllerService(serviceNode);
     }
-    
+
     @Override
     public void enableControllerServices(final Collection<ControllerServiceNode> serviceNodes) {
         controllerServiceProvider.enableControllerServices(serviceNodes);
     }
-    
+
     @Override
     public void disableControllerService(final ControllerServiceNode serviceNode) {
         controllerServiceProvider.disableControllerService(serviceNode);
     }
-    
+
     @Override
     public Set<ControllerServiceNode> getAllControllerServices() {
-    	return controllerServiceProvider.getAllControllerServices();
+        return controllerServiceProvider.getAllControllerServices();
     }
-    
-    
+
     @Override
     public void disableReferencingServices(final ControllerServiceNode serviceNode) {
         controllerServiceProvider.disableReferencingServices(serviceNode);
     }
-    
+
     @Override
     public void enableReferencingServices(final ControllerServiceNode serviceNode) {
         controllerServiceProvider.enableReferencingServices(serviceNode);
     }
-    
+
     @Override
     public void scheduleReferencingComponents(final ControllerServiceNode serviceNode) {
         controllerServiceProvider.scheduleReferencingComponents(serviceNode);
     }
-    
+
     @Override
     public void unscheduleReferencingComponents(final ControllerServiceNode serviceNode) {
         controllerServiceProvider.unscheduleReferencingComponents(serviceNode);
     }
-    
+
     @Override
     public void verifyCanEnableReferencingServices(final ControllerServiceNode serviceNode) {
         controllerServiceProvider.verifyCanEnableReferencingServices(serviceNode);
     }
-    
+
     @Override
     public void verifyCanScheduleReferencingComponents(final ControllerServiceNode serviceNode) {
         controllerServiceProvider.verifyCanScheduleReferencingComponents(serviceNode);
     }
-    
+
     @Override
     public void verifyCanDisableReferencingServices(final ControllerServiceNode serviceNode) {
         controllerServiceProvider.verifyCanDisableReferencingServices(serviceNode);
     }
-    
+
     @Override
     public void verifyCanStopReferencingComponents(final ControllerServiceNode serviceNode) {
         controllerServiceProvider.verifyCanStopReferencingComponents(serviceNode);
     }
-    
+
     private byte[] serialize(final Document doc) throws TransformerException {
-    	final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-    	final DOMSource domSource = new DOMSource(doc);
+        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        final DOMSource domSource = new DOMSource(doc);
         final StreamResult streamResult = new StreamResult(baos);
 
         // configure the transformer and convert the DOM
@@ -1498,91 +1494,89 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
         transformer.transform(domSource, streamResult);
         return baos.toByteArray();
     }
-    
+
     private byte[] serializeControllerServices() throws ParserConfigurationException, TransformerException {
-    	final DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
+        final DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
         final DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
         final Document document = docBuilder.newDocument();
-    	final Element rootElement = document.createElement("controllerServices");
-    	document.appendChild(rootElement);
-    	
-    	for ( final ControllerServiceNode serviceNode : getAllControllerServices() ) {
-    		StandardFlowSerializer.addControllerService(rootElement, serviceNode, encryptor);
-    	}
-    	
-    	return serialize(document);
-    }
-    
+        final Element rootElement = document.createElement("controllerServices");
+        document.appendChild(rootElement);
+
+        for (final ControllerServiceNode serviceNode : getAllControllerServices()) {
+            StandardFlowSerializer.addControllerService(rootElement, serviceNode, encryptor);
+        }
+
+        return serialize(document);
+    }
+
     private byte[] serializeReportingTasks() throws ParserConfigurationException, TransformerException {
-    	final DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
+        final DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
         final DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
         final Document document = docBuilder.newDocument();
-    	final Element rootElement = document.createElement("reportingTasks");
-    	document.appendChild(rootElement);
-    	
-    	for ( final ReportingTaskNode taskNode : getAllReportingTasks() ) {
-    		StandardFlowSerializer.addReportingTask(rootElement, taskNode, encryptor);
-    	}
-    	
-    	return serialize(document);
-    }
-    
-    
+        final Element rootElement = document.createElement("reportingTasks");
+        document.appendChild(rootElement);
+
+        for (final ReportingTaskNode taskNode : getAllReportingTasks()) {
+            StandardFlowSerializer.addReportingTask(rootElement, taskNode, encryptor);
+        }
+
+        return serialize(document);
+    }
+
     public void saveControllerServices() {
-    	try {
-    		dataFlowManagementService.updateControllerServices(serializeControllerServices());
-    	} catch (final Exception e) {
-    		logger.error("Failed to save changes to NCM's Controller Services; changes may be lost on restart due to " + e);
-    		if ( logger.isDebugEnabled() ) {
-    			logger.error("", e);
-    		}
-    		
-    		getBulletinRepository().addBulletin(BulletinFactory.createBulletin("Controller Services", Severity.ERROR.name(), 
-    				"Failed to save changes to NCM's Controller Services; changes may be lost on restart. See logs for more details."));
-    	}
-    }
-    
+        try {
+            dataFlowManagementService.updateControllerServices(serializeControllerServices());
+        } catch (final Exception e) {
+            logger.error("Failed to save changes to NCM's Controller Services; changes may be lost on restart due to " + e);
+            if (logger.isDebugEnabled()) {
+                logger.error("", e);
+            }
+
+            getBulletinRepository().addBulletin(BulletinFactory.createBulletin("Controller Services", Severity.ERROR.name(),
+                    "Failed to save changes to NCM's Controller Services; changes may be lost on restart. See logs for more details."));
+        }
+    }
+
     public void saveReportingTasks() {
-    	try {
-    		dataFlowManagementService.updateReportingTasks(serializeReportingTasks());
-    	} catch (final Exception e) {
-    		logger.error("Failed to save changes to NCM's Reporting Tasks; changes may be lost on restart due to " + e);
-    		if ( logger.isDebugEnabled() ) {
-    			logger.error("", e);
-    		}
-    		
-    		getBulletinRepository().addBulletin(BulletinFactory.createBulletin("Reporting Tasks", Severity.ERROR.name(), 
-    				"Failed to save changes to NCM's Reporting Tasks; changes may be lost on restart. See logs for more details."));
-    	}
+        try {
+            dataFlowManagementService.updateReportingTasks(serializeReportingTasks());
+        } catch (final Exception e) {
+            logger.error("Failed to save changes to NCM's Reporting Tasks; changes may be lost on restart due to " + e);
+            if (logger.isDebugEnabled()) {
+                logger.error("", e);
+            }
+
+            getBulletinRepository().addBulletin(BulletinFactory.createBulletin("Reporting Tasks", Severity.ERROR.name(),
+                    "Failed to save changes to NCM's Reporting Tasks; changes may be lost on restart. See logs for more details."));
+        }
     }
 
     @Override
     public Set<ReportingTaskNode> getAllReportingTasks() {
-    	readLock.lock();
-    	try {
-    		return new HashSet<>(reportingTasks.values());
-    	} finally {
-    		readLock.unlock("getReportingTasks");
-    	}
+        readLock.lock();
+        try {
+            return new HashSet<>(reportingTasks.values());
+        } finally {
+            readLock.unlock("getReportingTasks");
+        }
     }
 
     @Override
     public ReportingTaskNode getReportingTaskNode(final String taskId) {
-    	readLock.lock();
-    	try {
-    		return reportingTasks.get(taskId);
-    	} finally {
-    		readLock.unlock("getReportingTaskNode");
-    	}
+        readLock.lock();
+        try {
+            return reportingTasks.get(taskId);
+        } finally {
+            readLock.unlock("getReportingTaskNode");
+        }
     }
 
     @Override
     public void startReportingTask(final ReportingTaskNode reportingTaskNode) {
         reportingTaskNode.verifyCanStart();
-       	processScheduler.schedule(reportingTaskNode);
+        processScheduler.schedule(reportingTaskNode);
     }
 
-    
     @Override
     public void stopReportingTask(final ReportingTaskNode reportingTaskNode) {
         reportingTaskNode.verifyCanStop();
@@ -1591,52 +1585,50 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
 
     @Override
     public void removeReportingTask(final ReportingTaskNode reportingTaskNode) {
-    	writeLock.lock();
-    	try {
-	        final ReportingTaskNode existing = reportingTasks.get(reportingTaskNode.getIdentifier());
-	        if ( existing == null || existing != reportingTaskNode ) {
-	            throw new IllegalStateException("Reporting Task " + reportingTaskNode + " does not exist in this Flow");
-	        }
-	        
-	        reportingTaskNode.verifyCanDelete();
-	        
-	        try (final NarCloseable x = NarCloseable.withNarLoader()) {
-	            ReflectionUtils.quietlyInvokeMethodsWithAnnotation(OnRemoved.class, reportingTaskNode.getReportingTask(), reportingTaskNode.getConfigurationContext());
-	        }
-	        
-	        for ( final Map.Entry<PropertyDescriptor, String> entry : reportingTaskNode.getProperties().entrySet() ) {
-	            final PropertyDescriptor descriptor = entry.getKey();
-	            if (descriptor.getControllerServiceDefinition() != null ) {
-	                final String value = entry.getValue() == null ? descriptor.getDefaultValue() : entry.getValue();
-	                if ( value != null ) {
-	                    final ControllerServiceNode serviceNode = controllerServiceProvider.getControllerServiceNode(value);
-	                    if ( serviceNode != null ) {
-	                        serviceNode.removeReference(reportingTaskNode);
-	                    }
-	                }
-	            }
-	        }
-	        
-	        reportingTasks.remove(reportingTaskNode.getIdentifier());
-    	} finally {
-    		writeLock.unlock("removeReportingTask");
-    	}
-    }
-    
-    
+        writeLock.lock();
+        try {
+            final ReportingTaskNode existing = reportingTasks.get(reportingTaskNode.getIdentifier());
+            if (existing == null || existing != reportingTaskNode) {
+                throw new IllegalStateException("Reporting Task " + reportingTaskNode + " does not exist in this Flow");
+            }
+
+            reportingTaskNode.verifyCanDelete();
+
+            try (final NarCloseable x = NarCloseable.withNarLoader()) {
+                ReflectionUtils.quietlyInvokeMethodsWithAnnotation(OnRemoved.class, reportingTaskNode.getReportingTask(), reportingTaskNode.getConfigurationContext());
+            }
+
+            for (final Map.Entry<PropertyDescriptor, String> entry : reportingTaskNode.getProperties().entrySet()) {
+                final PropertyDescriptor descriptor = entry.getKey();
+                if (descriptor.getControllerServiceDefinition() != null) {
+                    final String value = entry.getValue() == null ? descriptor.getDefaultValue() : entry.getValue();
+                    if (value != null) {
+                        final ControllerServiceNode serviceNode = controllerServiceProvider.getControllerServiceNode(value);
+                        if (serviceNode != null) {
+                            serviceNode.removeReference(reportingTaskNode);
+                        }
+                    }
+                }
+            }
+
+            reportingTasks.remove(reportingTaskNode.getIdentifier());
+        } finally {
+            writeLock.unlock("removeReportingTask");
+        }
+    }
+
     @Override
     public void disableReportingTask(final ReportingTaskNode reportingTask) {
         reportingTask.verifyCanDisable();
         processScheduler.disableReportingTask(reportingTask);
     }
-    
+
     @Override
     public void enableReportingTask(final ReportingTaskNode reportingTask) {
         reportingTask.verifyCanEnable();
         processScheduler.enableReportingTask(reportingTask);
     }
-    
-    
+
     /**
      * Handle a bulletins message.
      *
@@ -2336,7 +2328,7 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
                 // merge the response
                 final NodeResponse clientResponse = mergeResponses(uri, method, nodeResponses, mutableRequest);
                 holder.set(clientResponse);
-                
+
                 // if we have a response get the updated cluster context for auditing and revision updating
                 Revision updatedRevision = null;
                 if (mutableRequest && clientResponse != null) {
@@ -2367,18 +2359,18 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
                         logger.warn("Classpath issue detected because failed to deserialize cluster context from node response due to: " + cnfe, cnfe);
                     }
                 }
-                
+
                 return updatedRevision;
             }
         };
-        
+
         // federate the request and lock on the revision
         if (mutableRequest) {
             optimisticLockingManager.setRevision(federateRequest);
         } else {
             federateRequest.execute(optimisticLockingManager.getLastModification().getRevision());
         }
-        
+
         return holder.get();
     }
 
@@ -2387,7 +2379,7 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
     }
 
     private static boolean isProcessorEndpoint(final URI uri, final String method) {
-        if (("GET".equalsIgnoreCase(method) || "PUT".equalsIgnoreCase(method)) && (PROCESSOR_URI_PATTERN.matcher(uri.getPath()).matches() || CLUSTER_PROCESSOR_URI_PATTERN.matcher(uri.getPath()).matches()) ) {
+        if (("GET".equalsIgnoreCase(method) || "PUT".equalsIgnoreCase(method)) && (PROCESSOR_URI_PATTERN.matcher(uri.getPath()).matches() || CLUSTER_PROCESSOR_URI_PATTERN.matcher(uri.getPath()).matches())) {
             return true;
         } else if ("POST".equalsIgnoreCase(method) && PROCESSORS_URI_PATTERN.matcher(uri.getPath()).matches()) {
             return true;
@@ -2434,11 +2426,11 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
     private static boolean isProvenanceEventEndpoint(final URI uri, final String method) {
         return "GET".equalsIgnoreCase(method) && PROVENANCE_EVENT_URI.matcher(uri.getPath()).matches();
     }
-    
+
     private static boolean isControllerServicesEndpoint(final URI uri, final String method) {
         return "GET".equalsIgnoreCase(method) && CONTROLLER_SERVICES_URI.equals(uri.getPath());
     }
-    
+
     private static boolean isControllerServiceEndpoint(final URI uri, final String method) {
         if (("GET".equalsIgnoreCase(method) || "PUT".equalsIgnoreCase(method)) && CONTROLLER_SERVICE_URI_PATTERN.matcher(uri.getPath()).matches()) {
             return true;
@@ -2448,19 +2440,19 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
 
         return false;
     }
-    
+
     private static boolean isControllerServiceReferenceEndpoint(final URI uri, final String method) {
         if (("GET".equalsIgnoreCase(method) || "PUT".equalsIgnoreCase(method)) && CONTROLLER_SERVICE_REFERENCES_URI_PATTERN.matcher(uri.getPath()).matches()) {
             return true;
         }
-        
+
         return false;
     }
-    
+
     private static boolean isReportingTasksEndpoint(final URI uri, final String method) {
         return "GET".equalsIgnoreCase(method) && REPORTING_TASKS_URI.equals(uri.getPath());
     }
-    
+
     private static boolean isReportingTaskEndpoint(final URI uri, final String method) {
         if (("GET".equalsIgnoreCase(method) || "PUT".equalsIgnoreCase(method)) && REPORTING_TASK_URI_PATTERN.matcher(uri.getPath()).matches()) {
             return true;
@@ -2661,7 +2653,7 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
             remoteProcessGroup.setAuthorizationIssues(mergedAuthorizationIssues);
         }
     }
-    
+
     private void mergeControllerServiceReferences(final Set<ControllerServiceReferencingComponentDTO> referencingComponents, final Map<NodeIdentifier, Set<ControllerServiceReferencingComponentDTO>> referencingComponentMap) {
         final Map<String, Integer> activeThreadCounts = new HashMap<>();
         final Map<String, String> states = new HashMap<>();
@@ -2669,7 +2661,7 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
             final Set<ControllerServiceReferencingComponentDTO> nodeReferencingComponents = nodeEntry.getValue();
 
             // go through all the nodes referencing components
-            if ( nodeReferencingComponents != null ) {
+            if (nodeReferencingComponents != null) {
                 for (final ControllerServiceReferencingComponentDTO nodeReferencingComponent : nodeReferencingComponents) {
                     // handle active thread counts
                     if (nodeReferencingComponent.getActiveThreadCount() != null && nodeReferencingComponent.getActiveThreadCount() > 0) {
@@ -2680,7 +2672,7 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
                             activeThreadCounts.put(nodeReferencingComponent.getId(), nodeReferencingComponent.getActiveThreadCount() + current);
                         }
                     }
-                    
+
                     // handle controller service state
                     final String state = states.get(nodeReferencingComponent.getId());
                     if (state == null) {
@@ -2692,7 +2684,7 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
                     }
                 }
             }
-        }            
+        }
 
         // go through each referencing components
         for (final ControllerServiceReferencingComponentDTO referencingComponent : referencingComponents) {
@@ -2700,24 +2692,24 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
             if (activeThreadCount != null) {
                 referencingComponent.setActiveThreadCount(activeThreadCount);
             }
-            
+
             final String state = states.get(referencingComponent.getId());
             if (state != null) {
                 referencingComponent.setState(state);
             }
         }
     }
-    
+
     private void mergeControllerService(final ControllerServiceDTO controllerService, final Map<NodeIdentifier, ControllerServiceDTO> controllerServiceMap) {
         final Map<String, Set<NodeIdentifier>> validationErrorMap = new HashMap<>();
         final Set<ControllerServiceReferencingComponentDTO> referencingComponents = controllerService.getReferencingComponents();
         final Map<NodeIdentifier, Set<ControllerServiceReferencingComponentDTO>> nodeReferencingComponentsMap = new HashMap<>();
-        
+
         String state = null;
         for (final Map.Entry<NodeIdentifier, ControllerServiceDTO> nodeEntry : controllerServiceMap.entrySet()) {
             final NodeIdentifier nodeId = nodeEntry.getKey();
             final ControllerServiceDTO nodeControllerService = nodeEntry.getValue();
-            
+
             if (state == null) {
                 if (ControllerServiceState.DISABLING.name().equals(nodeControllerService.getState())) {
                     state = ControllerServiceState.DISABLING.name();
@@ -2725,27 +2717,27 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
                     state = ControllerServiceState.ENABLING.name();
                 }
             }
-            
+
             for (final ControllerServiceReferencingComponentDTO nodeReferencingComponents : nodeControllerService.getReferencingComponents()) {
                 nodeReferencingComponentsMap.put(nodeId, nodeReferencingComponents.getReferencingComponents());
             }
-            
+
             // merge the validation errors
             mergeValidationErrors(validationErrorMap, nodeId, nodeControllerService.getValidationErrors());
         }
-        
+
         // merge the referencing components
         mergeControllerServiceReferences(referencingComponents, nodeReferencingComponentsMap);
-        
+
         // store the 'transition' state is applicable
         if (state != null) {
             controllerService.setState(state);
         }
-        
+
         // set the merged the validation errors
         controllerService.setValidationErrors(normalizedMergedValidationErrors(validationErrorMap, controllerServiceMap.size()));
     }
-    
+
     private void mergeReportingTask(final ReportingTaskDTO reportingTask, final Map<NodeIdentifier, ReportingTaskDTO> reportingTaskMap) {
         final Map<String, Set<NodeIdentifier>> validationErrorMap = new HashMap<>();
 
@@ -2757,24 +2749,25 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
             if (nodeReportingTask.getActiveThreadCount() != null) {
                 activeThreadCount += nodeReportingTask.getActiveThreadCount();
             }
-            
+
             // merge the validation errors
             mergeValidationErrors(validationErrorMap, nodeId, nodeReportingTask.getValidationErrors());
         }
 
         // set the merged active thread counts
         reportingTask.setActiveThreadCount(activeThreadCount);
-        
+
         // set the merged the validation errors
         reportingTask.setValidationErrors(normalizedMergedValidationErrors(validationErrorMap, reportingTaskMap.size()));
     }
 
     /**
-     * Merges the validation errors into the specified map, recording the corresponding node identifier.
-     * 
+     * Merges the validation errors into the specified map, recording the
+     * corresponding node identifier.
+     *
      * @param validationErrorMap
      * @param nodeId
-     * @param nodeValidationErrors 
+     * @param nodeValidationErrors
      */
     public void mergeValidationErrors(final Map<String, Set<NodeIdentifier>> validationErrorMap, final NodeIdentifier nodeId, final Collection<String> nodeValidationErrors) {
         if (nodeValidationErrors != null) {
@@ -2788,13 +2781,14 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
             }
         }
     }
-    
+
     /**
-     * Normalizes the validation errors by prepending the corresponding nodes when the error does not exist across all nodes.
-     * 
+     * Normalizes the validation errors by prepending the corresponding nodes
+     * when the error does not exist across all nodes.
+     *
      * @param validationErrorMap
      * @param totalNodes
-     * @return 
+     * @return
      */
     public Set<String> normalizedMergedValidationErrors(final Map<String, Set<NodeIdentifier>> validationErrorMap, int totalNodes) {
         final Set<String> normalizedValidationErrors = new HashSet<>();
@@ -2812,7 +2806,7 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
         }
         return normalizedValidationErrors;
     }
-    
+
     // requires write lock to be already acquired unless request is not mutable
     private NodeResponse mergeResponses(final URI uri, final String method, final Set<NodeResponse> nodeResponses, final boolean mutableRequest) {
         // holds the one response of all the node responses to return to the client
@@ -3105,7 +3099,7 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
         } else if (hasSuccessfulClientResponse && isControllerServiceEndpoint(uri, method)) {
             final ControllerServiceEntity responseEntity = clientResponse.getClientResponse().getEntity(ControllerServiceEntity.class);
             final ControllerServiceDTO controllerService = responseEntity.getControllerService();
-            
+
             final Map<NodeIdentifier, ControllerServiceDTO> resultsMap = new HashMap<>();
             for (final NodeResponse nodeResponse : updatedNodesMap.values()) {
                 if (problematicNodeResponses.contains(nodeResponse)) {
@@ -3118,12 +3112,12 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
                 resultsMap.put(nodeResponse.getNodeId(), nodeControllerService);
             }
             mergeControllerService(controllerService, resultsMap);
-            
+
             clientResponse = new NodeResponse(clientResponse, responseEntity);
         } else if (hasSuccessfulClientResponse && isControllerServicesEndpoint(uri, method)) {
             final ControllerServicesEntity responseEntity = clientResponse.getClientResponse().getEntity(ControllerServicesEntity.class);
             final Set<ControllerServiceDTO> controllerServices = responseEntity.getControllerServices();
-            
+
             final Map<String, Map<NodeIdentifier, ControllerServiceDTO>> controllerServiceMap = new HashMap<>();
             for (final NodeResponse nodeResponse : updatedNodesMap.values()) {
                 if (problematicNodeResponses.contains(nodeResponse)) {
@@ -3156,7 +3150,7 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
         } else if (hasSuccessfulClientResponse && isControllerServiceReferenceEndpoint(uri, method)) {
             final ControllerServiceReferencingComponentsEntity responseEntity = clientResponse.getClientResponse().getEntity(ControllerServiceReferencingComponentsEntity.class);
             final Set<ControllerServiceReferencingComponentDTO> referencingComponents = responseEntity.getControllerServiceReferencingComponents();
-            
+
             final Map<NodeIdentifier, Set<ControllerServiceReferencingComponentDTO>> resultsMap = new HashMap<>();
             for (final NodeResponse nodeResponse : updatedNodesMap.values()) {
                 if (problematicNodeResponses.contains(nodeResponse)) {
@@ -3169,12 +3163,12 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
                 resultsMap.put(nodeResponse.getNodeId(), nodeReferencingComponents);
             }
             mergeControllerServiceReferences(referencingComponents, resultsMap);
-            
+
             clientResponse = new NodeResponse(clientResponse, responseEntity);
         } else if (hasSuccessfulClientResponse && isReportingTaskEndpoint(uri, method)) {
             final ReportingTaskEntity responseEntity = clientResponse.getClientResponse().getEntity(ReportingTaskEntity.class);
             final ReportingTaskDTO reportingTask = responseEntity.getReportingTask();
-            
+
             final Map<NodeIdentifier, ReportingTaskDTO> resultsMap = new HashMap<>();
             for (final NodeResponse nodeResponse : updatedNodesMap.values()) {
                 if (problematicNodeResponses.contains(nodeResponse)) {
@@ -3187,12 +3181,12 @@ public class WebClusterManager implements HttpClusterManager, ProtocolHandler, C
                 resultsMap.put(nodeResponse.getNodeId(), nodeReportingTask);
             }
             mergeReportingTask(reportingTask, resultsMap);
-            
+
             clientResponse = new NodeResponse(clientResponse, responseEntity);
         } else if (hasSuccessfulClientResponse && isReportingTasksEndpoint(uri, method)) {
             final ReportingTasksEntity responseEntity = clientResponse.getClientResponse().getEntity(ReportingTasksEntity.class);
             final Set<ReportingTaskDTO> reportingTaskSet = responseEntity.getReportingTasks();
-            
+
             final Map<String, Map<NodeIdentifier, ReportingTaskDTO>> reportingTaskMap = new HashMap<>();
             for (final NodeResponse nodeResponse : updatedNodesMap.values()) {
                 if (problematicNodeResponses.contains(nodeResponse)) {

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/node/Node.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/node/Node.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/node/Node.java
index 84565da..1b128f7 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/node/Node.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/node/Node.java
@@ -161,7 +161,7 @@ public class Node implements Cloneable, Comparable<Node> {
      *
      * This method is thread-safe and may be called without obtaining any lock.
      *
-     * @param connectionRequestedTimestamp
+     * @param connectionRequestedTimestamp timestamp
      */
     public void setConnectionRequestedTimestamp(long connectionRequestedTimestamp) {
         this.connectionRequestedTimestamp.set(connectionRequestedTimestamp);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/spring/ClusterManagerProtocolServiceLocatorFactoryBean.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/spring/ClusterManagerProtocolServiceLocatorFactoryBean.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/spring/ClusterManagerProtocolServiceLocatorFactoryBean.java
index e26d196..c369a7f 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/spring/ClusterManagerProtocolServiceLocatorFactoryBean.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/spring/ClusterManagerProtocolServiceLocatorFactoryBean.java
@@ -51,7 +51,7 @@ public class ClusterManagerProtocolServiceLocatorFactoryBean implements FactoryB
     @Override
     public Object getObject() throws Exception {
         /*
-         * If configured for the cluster manager, then the service locator is never used.  
+         * If configured for the cluster manager, then the service locator is never used.
          */
         if (properties.isClusterManager()) {
             return null;

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/spring/WebClusterManagerFactoryBean.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/spring/WebClusterManagerFactoryBean.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/spring/WebClusterManagerFactoryBean.java
index d3cff3b..7bcb203 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/spring/WebClusterManagerFactoryBean.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/spring/WebClusterManagerFactoryBean.java
@@ -49,7 +49,7 @@ public class WebClusterManagerFactoryBean implements FactoryBean, ApplicationCon
     private NiFiProperties properties;
 
     private StringEncryptor encryptor;
-    
+
     private OptimisticLockingManager optimisticLockingManager;
 
     @Override
@@ -58,8 +58,8 @@ public class WebClusterManagerFactoryBean implements FactoryBean, ApplicationCon
             throw new IllegalStateException("Application may be configured as a cluster manager or a node, but not both.");
         } else if (!properties.isClusterManager()) {
             /*
-             * If not configured for the cluster manager, then the cluster manager is never used.  
-             * null is returned so that we don't instantiate a thread pool or other resources. 
+             * If not configured for the cluster manager, then the cluster manager is never used.
+             * null is returned so that we don't instantiate a thread pool or other resources.
              */
             return null;
         } else if (clusterManager == null) {
@@ -127,7 +127,7 @@ public class WebClusterManagerFactoryBean implements FactoryBean, ApplicationCon
     public void setEncryptor(final StringEncryptor encryptor) {
         this.encryptor = encryptor;
     }
-    
+
     public void setOptimisticLockingManager(OptimisticLockingManager optimisticLockingManager) {
         this.optimisticLockingManager = optimisticLockingManager;
     }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/ConfigurationRequest.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/ConfigurationRequest.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/ConfigurationRequest.java
index 939c3f0..c2e940a 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/ConfigurationRequest.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/ConfigurationRequest.java
@@ -20,14 +20,15 @@ package org.apache.nifi.web;
  * Represents a request to configure. The implementations execute method will
  * perform the configuration action. It will return type T which will be
  * encapsulated in a ConfigurationSnapshot.
- * 
- * @param <T>
+ *
+ * @param <T> type of request
  */
 public interface ConfigurationRequest<T> {
 
     /**
-     * Executes a configuration action and returns the updated resulting configuration.
-     * 
+     * Executes a configuration action and returns the updated resulting
+     * configuration.
+     *
      * @return The resulting configuration
      */
     T execute();

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/ConfigurationSnapshot.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/ConfigurationSnapshot.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/ConfigurationSnapshot.java
index 8817d69..c706fd2 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/ConfigurationSnapshot.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/ConfigurationSnapshot.java
@@ -18,7 +18,8 @@ package org.apache.nifi.web;
 
 /**
  * Response object that captures some configuration for a given revision.
- * @param <T>
+ *
+ * @param <T> type of snapshot
  */
 public class ConfigurationSnapshot<T> {
 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/FlowModification.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/FlowModification.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/FlowModification.java
index f6bccb1..70aa30e 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/FlowModification.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/FlowModification.java
@@ -27,9 +27,9 @@ public class FlowModification {
 
     /**
      * Creates a new FlowModification.
-     * 
-     * @param revision
-     * @param lastModifier 
+     *
+     * @param revision revision
+     * @param lastModifier modifier
      */
     public FlowModification(Revision revision, String lastModifier) {
         this.revision = revision;
@@ -38,8 +38,8 @@ public class FlowModification {
 
     /**
      * Get the revision.
-     * 
-     * @return 
+     *
+     * @return the revision
      */
     public Revision getRevision() {
         return revision;
@@ -47,11 +47,11 @@ public class FlowModification {
 
     /**
      * Get the last modifier.
-     * 
-     * @return 
+     *
+     * @return the modifier
      */
     public String getLastModifier() {
         return lastModifier;
     }
-    
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9dda16c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/OptimisticLockingManager.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/OptimisticLockingManager.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/OptimisticLockingManager.java
index 4c54b7c..3cb1d45 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/OptimisticLockingManager.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-optimistic-locking/src/main/java/org/apache/nifi/web/OptimisticLockingManager.java
@@ -26,26 +26,27 @@ package org.apache.nifi.web;
 public interface OptimisticLockingManager {
 
     /**
-     * Attempts to execute the specified configuration request using the specified revision within a lock.
-     * 
-     * @param <T>
-     * @param revision
-     * @param configurationRequest
-     * @return 
+     * Attempts to execute the specified configuration request using the
+     * specified revision within a lock.
+     *
+     * @param <T> type of snapshot
+     * @param revision revision
+     * @param configurationRequest request
+     * @return snapshot
      */
     <T> ConfigurationSnapshot<T> configureFlow(Revision revision, ConfigurationRequest<T> configurationRequest);
-    
+
     /**
      * Updates the revision using the specified revision within a lock.
-     * 
-     * @param updateRevision 
+     *
+     * @param updateRevision new revision
      */
     void setRevision(UpdateRevision updateRevision);
 
     /**
-     * Returns the last flow modification. This is a combination of the revision and the user
-     * who performed the modification.
-     * 
+     * Returns the last flow modification. This is a combination of the revision
+     * and the user who performed the modification.
+     *
      * @return the last modification
      */
     FlowModification getLastModification();