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

[03/22] nifi git commit: NIFI-1551: - Removing the AuthorityProvider. - Refactoring REST API in preparation for introduction of the Authorizer. - Updating UI accordingly. - Removing unneeded properties from nifi.properties. - Addressing comments from PR.

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/users/user-group-dialog.jsp
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/users/user-group-dialog.jsp b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/users/user-group-dialog.jsp
deleted file mode 100644
index 0578825..0000000
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/users/user-group-dialog.jsp
+++ /dev/null
@@ -1,27 +0,0 @@
-<%--
- Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
---%>
-<%@ page contentType="text/html" pageEncoding="UTF-8" session="false" %>
-<div id="user-group-dialog">
-    <div class="dialog-content">
-        <div class="setting">
-            <div class="setting-name">Group name</div>
-            <div class="setting-field">
-                <input id="group-name" name="group-name" type="text"/>
-            </div>
-        </div>
-    </div>
-</div>

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/users/user-revoke-dialog.jsp
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/users/user-revoke-dialog.jsp b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/users/user-revoke-dialog.jsp
deleted file mode 100644
index 498c3c2..0000000
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/users/user-revoke-dialog.jsp
+++ /dev/null
@@ -1,23 +0,0 @@
-<%--
- Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
---%>
-<%@ page contentType="text/html" pageEncoding="UTF-8" session="false" %>
-<div id="user-revoke-dialog">
-    <div class="dialog-content">
-        <input type="hidden" id="user-id-revoke-dialog"/>
-        Are you sure you want to revoke access for '<span id="user-name-revoke-dialog"></span>'?
-    </div>
-</div>

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/users/user-roles-dialog.jsp
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/users/user-roles-dialog.jsp b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/users/user-roles-dialog.jsp
deleted file mode 100644
index dfd256b..0000000
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/users/user-roles-dialog.jsp
+++ /dev/null
@@ -1,60 +0,0 @@
-<%--
- Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
---%>
-<%@ page contentType="text/html" pageEncoding="UTF-8" session="false" %>
-<div id="user-roles-dialog">
-    <div class="dialog-content">
-        <div class="setting">
-            <input type="hidden" id="user-id-roles-dialog"/>
-            <div class="setting-name">User</div>
-            <div class="setting-field">
-                <span id="user-name-roles-dialog"></span>
-            </div>
-            <div class="clear"></div>
-        </div>
-        <div class="setting">
-            <div class="setting-name">Justification</div>
-            <div class="setting-field">
-                <div id="user-justification-roles-dialog"></div>
-            </div>
-            <div class="clear"></div>
-        </div>
-        <div class="setting">
-            <div class="setting-name">Roles</div>
-            <div class="roles-container">
-                <div class="role-container">
-                    <div id="role-admin-checkbox" class="role-checkbox nf-checkbox checkbox-unchecked"></div><div class="role-name">Administrator</div>
-                </div>
-                <div class="role-container">
-                    <div id="role-dfm-checkbox" class="role-checkbox nf-checkbox checkbox-unchecked"></div><div class="role-name">Data Flow Manager</div>
-                </div>
-                <div class="role-container">
-                    <div id="role-monitor-checkbox" class="role-checkbox nf-checkbox checkbox-unchecked"></div><div class="role-name">Read Only</div>
-                </div>
-                <div class="role-container" style="margin-top: 5px;">
-                    <div id="role-provenance-checkbox" class="role-checkbox nf-checkbox checkbox-unchecked"></div><div class="role-name">Provenance</div>
-                </div>
-                <div class="role-container" style="margin-top: 5px;">
-                    <div id="role-nifi-checkbox" class="role-checkbox nf-checkbox checkbox-unchecked"></div><div class="role-name">NiFi</div>
-                </div>
-                <div class="role-container">
-                    <div id="role-proxy-checkbox" class="role-checkbox nf-checkbox checkbox-unchecked"></div><div class="role-name">Proxy</div>
-                </div>
-            </div>
-            <div class="clear"></div>
-        </div>
-    </div>
-</div>

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/users/users-content.jsp
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/users/users-content.jsp b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/users/users-content.jsp
deleted file mode 100644
index cdaf6c1..0000000
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/users/users-content.jsp
+++ /dev/null
@@ -1,46 +0,0 @@
-<%--
- Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
---%>
-<%@ page contentType="text/html" pageEncoding="UTF-8" session="false" %>
-<div id="users">
-    <div id="users-header-and-filter">
-        <div id="users-header-text">NiFi Users</div>
-        <div id="users-filter-controls">
-            <div id="users-filter-container">
-                <input type="text" id="users-filter"/>
-                <div id="users-filter-type"></div>
-            </div>
-            <div id="users-filter-stats">
-                Displaying&nbsp;<span id="displayed-users"></span>&nbsp;of&nbsp;<span id="total-users"></span>
-            </div>
-        </div>
-    </div>
-    <div id="users-refresh-container">
-        <div id="refresh-button" class="users-refresh pointer" title="Refresh"></div>
-        <div id="users-last-refreshed-container">
-            Last updated:&nbsp;<span id="users-last-refreshed"></span>
-        </div>
-        <div id="users-loading-container" class="loading-container"></div>
-        <div id="group-controls-container">
-            <div id="group-collaspe-container">
-                <div id="group-collaspe-checkbox" class="nf-checkbox checkbox-unchecked"></div>
-                <span>&nbsp;Show by group</span>
-            </div>
-            <div id="group-button" class="button-normal pointer">Group</div>
-        </div>
-    </div>
-    <div id="users-table"></div>
-</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/header.css
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/header.css b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/header.css
index 200f6bb..0dd10d7 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/header.css
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/header.css
@@ -622,19 +622,6 @@ div.provenance-link-disabled {
     background: transparent url(../images/iconProvenance.png) no-repeat scroll top right;
 }
 
-div.users-link {
-    background: transparent url(../images/iconAdminUser.png) no-repeat scroll top left;
-}
-
-div.users-link-hover {
-    background: transparent url(../images/iconAdminUser.png) no-repeat scroll top center;
-    cursor: pointer;
-}
-
-div.users-link-disabled {
-    background: transparent url(../images/iconAdminUser.png) no-repeat scroll top right;
-}
-
 div.cluster-link {
     background: transparent url(../images/iconCluster.png) no-repeat scroll top left;
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/port-configuration.css
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/port-configuration.css b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/port-configuration.css
index ce1f00a..f48d893 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/port-configuration.css
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/port-configuration.css
@@ -54,137 +54,4 @@ div.port-enabled-container {
     float: left;
     margin-top: 5px;
     margin-left: 10px;
-}
-
-/*
-    Secure port configuration
-*/
-
-#secure-port-configuration {
-    z-index: 1301;
-    display: none;
-    width: 400px;
-    height: 450px;
-}
-
-#secure-port-configuration div.dialog-content {
-    margin-top: -10px;
-}
-#secure-port-configuration-tabs {
-    background-color: transparent;
-    border-bottom: 3px solid #666666;
-    height: 21px;
-    width: 380px;
-}
-
-#secure-port-configuration div.configuration-tab {
-    z-index: 1301;
-    display: none;
-    background: url("../images/bgTabContainer.png") repeat-x scroll 0 0 #EEEEEE;
-    padding: 10px;
-    width: 360px;
-    height: 340px;
-}
-
-#secure-port-name {
-    width: 280px;
-    float: left;
-}
-
-.secure-port-field {
-    width: 350px;
-}
-
-textarea.secure-port-field {
-    height: 100px;
-}
-
-div.secure-port-setting {
-    margin-bottom: 15px;
-    width: 360px;
-}
-
-input.search-users {
-    color: #888;
-}
-
-#search-users-results .ui-autocomplete {
-    max-height: 300px;
-    overflow: auto;
-    border: 1px solid #aaaaaa;
-    z-index: 1351;
-    border-radius: 0;
-}
-
-#search-users-results .ui-menu .ui-menu-item a.ui-state-focus {
-    background: #D4E0E5 !important;
-    border: 1px solid #999999;
-    border-radius: 0;
-}
-
-li.search-users-header {
-    font-weight: bold;
-    padding-top: 4px;
-    padding-left: 4px;
-    padding-right: 4px;
-    height: 14px;
-}
-
-div.search-users-match-header {
-    font-weight: normal;
-    margin-left: 10px;
-}
-
-li.search-users-no-matches {
-    padding: 4px;
-    font-weight: bold;
-    color: #aaa;
-    font-style: italic;
-}
-
-#secure-port-configuration div.port-setting-left {
-    margin-right: 10px;
-}
-
-#secure-port-configuration div.port-setting-left, #secure-port-configuration div.port-setting-right {
-    width: 185px;
-    float: left;
-}
-
-div.allowed-container {
-    width: 358px;
-    height: 100px;
-    border: 1px solid #aaa;
-    overflow-x: hidden;
-    overflow-y: scroll;
-}
-
-ul.allowed {
-    list-style-type: none;
-}
-
-ul.allowed li {
-    height: 16px;
-    width: 331px;
-    border: 1px solid #618BA3;
-    background-color: #c5d5de;
-    color: #555;
-    overflow: hidden;
-    margin: 2px;
-    padding: 2px;
-    line-height: 16px;
-    font-weight: bold;
-}
-
-span.allowed-entity {
-    float: left;
-    width: 310px;
-}
-
-div.remove-allowed-entity {
-    float: right;
-    width: 16px;
-    height: 16px;
-    background-image: url(../images/iconDelete.png);
-    cursor: pointer;
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/port-details.css
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/port-details.css b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/port-details.css
index 831c5ee..055103e 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/port-details.css
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/port-details.css
@@ -23,31 +23,4 @@
     display: none;
     width: 400px;
     height: 300px;
-}
-
-/*
-    Secure port details.
-*/
-
-#secure-port-details {
-    z-index: 1301;
-    display: none;
-    height: 425px;
-    width: 400px;
-}
-
-#secure-port-details-tabs {
-    background-color: transparent;
-    border-bottom: 3px solid #666666;
-    height: 21px;
-    width: 380px;
-}
-
-#secure-port-details div.configuration-tab {
-    background: url("../images/bgTabContainer.png") repeat-x scroll 0 0 #EEEEEE;
-    display: none;
-    height: 315px;
-    padding: 10px;
-    width: 360px;
-    z-index: 1301;
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/users.css
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/users.css b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/users.css
deleted file mode 100644
index 9c304fe..0000000
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/users.css
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
-    Counters Styles
-*/
-
-#users {
-    position: absolute;
-    top: 0px;
-    bottom: 0px;
-    left: 0px;
-    right: 0px;
-}
-
-#users-header-and-filter {
-    height: 35px;
-    margin-top: 20px;
-    margin-left: 20px;
-    margin-right: 20px;
-}
-
-#users-header-text {
-    float: left;
-    font-size: 16px;
-    font-weight: bold;
-}
-
-#users-refresh-container {
-    height: 26px;
-    margin-left: 20px;
-    margin-right: 20px;
-    margin-top: 18px;
-    -webkit-user-select: none;
-    -moz-user-select: none;
-}
-
-#users-last-refreshed-container {
-    float: left;
-    color: #666;
-    font-weight: normal;
-    margin-top: 6px;
-    margin-left: 3px;
-}
-
-#users-loading-container {
-    float: left;
-    width: 16px;
-    height: 16px;
-    background-color: transparent;
-    margin-top: 4px;
-    margin-left: 3px;
-}
-
-#users-last-refreshed {
-    font-weight: bold;
-}
-
-#users-header {
-    padding-top: 10px;
-}
-
-#refresh-button {
-    height: 24px;
-    width: 26px;
-    float: left;
-}
-
-/* group controls */
-
-#group-controls-container {
-    position: absolute;
-    right: 20px;
-    top: 75px;
-}
-
-#group-collaspe-container {
-    float: left;
-    margin-top: 5px;
-    margin-right: 10px;
-}
-
-#group-button {
-    height: 20px;
-    line-height: 20px;
-    width: 55px;
-    text-align: center;
-    font-weight: bold;
-    border: 1px solid #AAAAAA;
-    color: #525252;
-    float: left;
-}
-
-/* group dialog */
-
-#user-group-dialog {
-    display: none;
-    width: 350px;
-    height: 150px;
-    z-index: 1301;
-}
-
-#group-name {
-    width: 320px;
-}
-
-/* filter controls */
-
-#users-filter-controls {
-    float: right;
-}
-
-#users-filter-container {
-    height: 24px;
-    width: 318px;
-}
-
-#users-filter {
-    padding: 3px 0px 1px 3px;
-    font-size: 12px;
-    height: 18px;
-    line-height: 20px;
-    width: 173px;
-    border: 1px solid #ccc;
-    margin-right: 3px;
-    float: left;
-}
-
-input.users-filter-list {
-    color: #888;
-}
-
-#users-filter-type {
-    width: 127px;
-    height: 18px;
-    line-height: 18px;
-    float: left;
-}
-
-#users-filter-stats {
-    font-size: 9px;
-    font-weight: bold;
-    color: #9f6000;
-    clear: left; 
-    line-height: normal;
-    margin-left: 5px;
-}
-
-/* users table */
-
-#users-table {
-    position: absolute;
-    top: 100px;
-    left: 20px;
-    bottom: 20px;
-    right: 20px;
-    border: 1px solid #666;
-    overflow: hidden;
-}
-
-a.user-account-action:link, a.user-account-action:visited, a.user-account-action:active {
-    color: #355b6a;
-    text-decoration: underline;
-}
-
-a.user-account-action:hover {
-    color: #4b788a;
-    text-decoration: none;
-}
-
-/* user details dialog */
-
-#user-details-dialog {
-    display: none;
-    width: 350px;
-    height: 400px;
-    z-index: 1301;
-}
-
-#user-justification-details-dialog {
-    max-height: 120px;
-    overflow-y: auto;
-}
-
-#user-roles-dialog {
-    display: none;
-    width: 350px;
-    height: 400px;
-    z-index: 1301;
-}
-
-#user-justification-roles-dialog {
-    max-height: 120px;
-    overflow-y: auto;
-}
-
-#group-roles-dialog {
-    display: none;
-    width: 350px;
-    height: 375px;
-    z-index: 1301;
-}
-
-div.roles-container {
-    margin-top: 3px;
-    margin-left: 3px;
-}
-
-div.role-container {
-    height: 16px;
-}
-
-div.role-name {
-    display: inline-block;
-    line-height: normal;
-}
-
-/* user revoke dialog */
-
-#user-revoke-dialog {
-    display: none;
-    width: 450px;
-    height: 165px;
-    z-index: 1301;
-}
-
-#group-revoke-dialog {
-    display: none;
-    width: 450px;
-    height: 165px;
-    z-index: 1301;
-}
-
-/* user delete dialog */
-
-#user-delete-dialog {
-    display: none;
-    width: 450px;
-    height: 165px;
-    z-index: 1301;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/images/iconAdminUser.png
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/images/iconAdminUser.png b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/images/iconAdminUser.png
deleted file mode 100755
index fbaf73b..0000000
Binary files a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/images/iconAdminUser.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/propertytable/jquery.propertytable.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/propertytable/jquery.propertytable.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/propertytable/jquery.propertytable.js
index b686eb9..4de1e1c 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/propertytable/jquery.propertytable.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/propertytable/jquery.propertytable.js
@@ -891,7 +891,7 @@
                     // add the new controller service
                     $.ajax({
                         type: 'POST',
-                        url: '../nifi-api/controller/controller-services/node',
+                        url: '../nifi-api/controller-services/node',
                         data: {
                             version: revision.version,
                             clientId: revision.clientId,

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/bulletin-board/nf-bulletin-board.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/bulletin-board/nf-bulletin-board.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/bulletin-board/nf-bulletin-board.js
index 55d0a9d..d318d27 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/bulletin-board/nf-bulletin-board.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/bulletin-board/nf-bulletin-board.js
@@ -34,7 +34,7 @@ nf.BulletinBoard = (function () {
         urls: {
             banners: '../nifi-api/controller/banners',
             controllerAbout: '../nifi-api/controller/about',
-            bulletinBoard: '../nifi-api/controller/bulletin-board'
+            bulletinBoard: '../nifi-api/bulletin-board'
         },
         styles: {
             filterList: 'bulletin-board-filter-list',

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-actions.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-actions.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-actions.js
index d92ebc2..9a1e934 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-actions.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-actions.js
@@ -56,23 +56,21 @@ nf.Actions = (function () {
     
 
     /**
-     * Updates the resource with the specified data.
+     * Updates the resource with the specified entity.
      * 
      * @param {string} uri
-     * @param {object} data
+     * @param {object} entity
      */
-    var updateResource = function (uri, data) {
-        var revision = nf.Client.getRevision();
-
-        // ensure the version and client ids are specified
-        data.version = revision.version;
-        data.clientId = revision.clientId;
+    var updateResource = function (uri, entity) {
+        // add the revision
+        entity['revision'] = nf.Client.getRevision();
 
         return $.ajax({
             type: 'PUT',
             url: uri,
-            data: data,
-            dataType: 'json'
+            data: JSON.stringify(entity),
+            dataType: 'json',
+            contentType: 'application/json'
         }).done(function (response) {
             // update the revision
             nf.Client.setRevision(response.revision);
@@ -412,7 +410,15 @@ nf.Actions = (function () {
                 // enable the selected processors
                 componentsToEnable.each(function (d) {
                     var selected = d3.select(this);
-                    enableRequests.push(updateResource(d.component.uri, {state: 'STOPPED'}).done(function (response) {
+
+                    // build the entity
+                    var entity = {};
+                    entity[nf[d.type].getEntityKey()] = {
+                        'id': d.component.id,
+                        'state': 'STOPPED'
+                    };
+
+                    enableRequests.push(updateResource(d.component.uri, entity).done(function (response) {
                         if (nf.CanvasUtils.isProcessor(selected)) {
                             nf.Processor.set(response.processor);
                         } else if (nf.CanvasUtils.isInputPort(selected)) {
@@ -451,7 +457,15 @@ nf.Actions = (function () {
                 // disable the selected components
                 componentsToDisable.each(function (d) {
                     var selected = d3.select(this);
-                    disableRequests.push(updateResource(d.component.uri, {state: 'DISABLED'}).done(function (response) {
+
+                    // build the entity
+                    var entity = {};
+                    entity[nf[d.type].getEntityKey()] = {
+                        'id': d.component.id,
+                        'state': 'DISABLED'
+                    };
+
+                    disableRequests.push(updateResource(d.component.uri, entity).done(function (response) {
                         if (nf.CanvasUtils.isProcessor(selected)) {
                             nf.Processor.set(response.processor);
                         } else if (nf.CanvasUtils.isInputPort(selected)) {
@@ -494,7 +508,15 @@ nf.Actions = (function () {
          */
         start: function (selection) {
             if (selection.empty()) {
-                updateResource(config.urls.controller + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()), {running: true}).done(updateProcessGroup);
+                // build the entity
+                var entity = {
+                    'processGroup': {
+                        'id': nf.Canvas.getGroupId(),
+                        'running': true
+                    }
+                };
+
+                updateResource(config.urls.controller + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()), entity).done(updateProcessGroup);
             } else {
                 var componentsToStart = selection.filter(function (d) {
                     return nf.CanvasUtils.isRunnable(d3.select(this));
@@ -514,14 +536,20 @@ nf.Actions = (function () {
                         var selected = d3.select(this);
 
                         // processor endpoint does not use running flag...
-                        var data = {};
+                        var component = {
+                            'id': d.component.id,
+                        };
                         if (nf.CanvasUtils.isProcessor(selected) || nf.CanvasUtils.isInputPort(selected) || nf.CanvasUtils.isOutputPort(selected)) {
-                            data['state'] = 'RUNNING';
+                            component['state'] = 'RUNNING';
                         } else {
-                            data['running'] = true;
+                            component['running'] = true;
                         }
 
-                        startRequests.push(updateResource(d.component.uri, data).done(function (response) {
+                        // build the entity
+                        var entity = {};
+                        entity[nf[d.type].getEntityKey()] = component;
+
+                        startRequests.push(updateResource(d.component.uri, entity).done(function (response) {
                             if (nf.CanvasUtils.isProcessor(selected)) {
                                 nf.Processor.set(response.processor);
                             } else if (nf.CanvasUtils.isProcessGroup(selected)) {
@@ -557,7 +585,15 @@ nf.Actions = (function () {
          */
         stop: function (selection) {
             if (selection.empty()) {
-                updateResource(config.urls.controller + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()), {running: false}).done(updateProcessGroup);
+                // build the entity
+                var entity = {
+                    'processGroup': {
+                        'id': nf.Canvas.getGroupId(),
+                        'running': false
+                    }
+                };
+
+                updateResource(config.urls.controller + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()), entity).done(updateProcessGroup);
             } else {
                 var componentsToStop = selection.filter(function (d) {
                     return nf.CanvasUtils.isStoppable(d3.select(this));
@@ -577,14 +613,20 @@ nf.Actions = (function () {
                         var selected = d3.select(this);
 
                         // processor endpoint does not use running flag...
-                        var data = {};
+                        var component = {
+                            'id': d.component.id,
+                        };
                         if (nf.CanvasUtils.isProcessor(selected) || nf.CanvasUtils.isInputPort(selected) || nf.CanvasUtils.isOutputPort(selected)) {
-                            data['state'] = 'STOPPED';
+                            component['state'] = 'STOPPED';
                         } else {
-                            data['running'] = false;
+                            component['running'] = false;
                         }
 
-                        stopRequests.push(updateResource(d.component.uri, data).done(function (response) {
+                        // build the entity
+                        var entity = {};
+                        entity[nf[d.type].getEntityKey()] = component;
+
+                        stopRequests.push(updateResource(d.component.uri, entity).done(function (response) {
                             if (nf.CanvasUtils.isProcessor(selected)) {
                                 nf.Processor.set(response.processor);
                             } else if (nf.CanvasUtils.isProcessGroup(selected)) {
@@ -625,7 +667,15 @@ nf.Actions = (function () {
 
             // start each selected component
             componentsToEnable.each(function (d) {
-                updateResource(d.component.uri, {transmitting: true}).done(function (response) {
+                // build the entity
+                var entity = {};
+                entity[nf[d.type].getEntityKey()] = {
+                    'id': d.component.id,
+                    'transmitting': true
+                };
+
+                // start transmitting
+                updateResource(d.component.uri, entity).done(function (response) {
                     nf.RemoteProcessGroup.set(response.remoteProcessGroup);
                 });
             });
@@ -643,7 +693,14 @@ nf.Actions = (function () {
 
             // stop each selected component
             componentsToDisable.each(function (d) {
-                updateResource(d.component.uri, {transmitting: false}).done(function (response) {
+                // build the entity
+                var entity = {};
+                entity[nf[d.type].getEntityKey()] = {
+                    'id': d.component.id,
+                    'transmitting': false
+                };
+
+                updateResource(d.component.uri, entity).done(function (response) {
                     nf.RemoteProcessGroup.set(response.remoteProcessGroup);
                 });
             });
@@ -665,12 +722,7 @@ nf.Actions = (function () {
                 } else if (nf.CanvasUtils.isRemoteProcessGroup(selection)) {
                     nf.RemoteProcessGroupConfiguration.showConfiguration(selection);
                 } else if (nf.CanvasUtils.isInputPort(selection) || nf.CanvasUtils.isOutputPort(selection)) {
-                    // ports in the root group can be configured for access control
-                    if (nf.Canvas.getParentGroupId() === null && nf.Canvas.isSecureSiteToSite()) {
-                        nf.SecurePortConfiguration.showConfiguration(selection);
-                    } else {
-                        nf.PortConfiguration.showConfiguration(selection);
-                    }
+                    nf.PortConfiguration.showConfiguration(selection);
                 } else if (nf.CanvasUtils.isConnection(selection)) {
                     nf.ConnectionConfiguration.showConfiguration(selection);
                 }
@@ -688,12 +740,7 @@ nf.Actions = (function () {
                 } else if (nf.CanvasUtils.isRemoteProcessGroup(selection)) {
                     nf.RemoteProcessGroupDetails.showDetails(selection);
                 } else if (nf.CanvasUtils.isInputPort(selection) || nf.CanvasUtils.isOutputPort(selection)) {
-                    // ports in the root group can be configured for access control
-                    if (nf.Canvas.getParentGroupId() === null && nf.Canvas.isSecureSiteToSite()) {
-                        nf.SecurePortDetails.showDetails(selection);
-                    } else {
-                        nf.PortDetails.showDetails(selection);
-                    }
+                    nf.PortDetails.showDetails(selection);
                 } else if (nf.CanvasUtils.isConnection(selection)) {
                     nf.ConnectionDetails.showDetails(nf.Canvas.getGroupId(), selectionData.component.id);
                 }
@@ -1018,7 +1065,8 @@ nf.Actions = (function () {
                     $.ajax({
                         type: 'POST',
                         url: connection.component.uri + '/drop-requests',
-                        dataType: 'json'
+                        dataType: 'json',
+                        contentType: 'application/json'
                     }).done(function(response) {
                         // initialize the progress bar value
                         updateProgress(0);
@@ -1383,18 +1431,22 @@ nf.Actions = (function () {
                 // use one higher
                 var zIndex = maxZIndex + 1;
 
-                var revision = nf.Client.getRevision();
+                // build the connection entity
+                var connectionEntity = {
+                    'revision': nf.Client.getRevision(),
+                    'connection': {
+                        'id': connection.component.id,
+                        'zIndex': zIndex
+                    }
+                };
 
                 // update the edge in question
                 $.ajax({
                     type: 'PUT',
                     url: connection.component.uri,
-                    data: {
-                        version: revision.version,
-                        clientId: revision.clientId,
-                        zIndex: zIndex
-                    },
-                    dataType: 'json'
+                    data: JSON.stringify(connectionEntity),
+                    dataType: 'json',
+                    contentType: 'application/json'
                 }).done(function (response) {
                     // update the edge's zIndex
                     nf.Connection.set(response.connection);

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-header.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-header.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-header.js
index 80cabe4..02000c5 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-header.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-header.js
@@ -71,15 +71,6 @@ nf.CanvasHeader = (function () {
                 });
             });
 
-            // mouse over for the users link
-            if (nf.Common.isAdmin()) {
-                nf.Common.addHoverEffect('#users-link', 'users-link', 'users-link-hover').click(function () {
-                    nf.Shell.showPage('users');
-                });
-            } else {
-                $('#users-link').addClass('users-link-disabled');
-            }
-
             // mouse over for the cluster link
             if (nf.Canvas.isClustered()) {
                 nf.Common.addHoverEffect('#cluster-link', 'cluster-link', 'cluster-link-hover').click(function () {
@@ -181,8 +172,6 @@ nf.CanvasHeader = (function () {
                                 // color the selected components
                                 selection.each(function (d) {
                                     var selected = d3.select(this);
-
-                                    var revision = nf.Client.getRevision();
                                     var selectedData = selected.datum();
 
                                     // get the color and update the styles
@@ -190,16 +179,24 @@ nf.CanvasHeader = (function () {
 
                                     // ensure the color actually changed
                                     if (color !== selectedData.component.style['background-color']) {
+                                        // build the request entity
+                                        var entity = {
+                                            'revision': nf.Client.getRevision()
+                                        };
+                                        entity[nf[selectedData.type].getEntityKey()] = {
+                                            'id': selectedData.component.id,
+                                            'style': {
+                                                'background-color': color
+                                            }
+                                        };
+
                                         // update the style for the specified component
                                         $.ajax({
                                             type: 'PUT',
                                             url: selectedData.component.uri,
-                                            data: {
-                                                'version': revision.version,
-                                                'clientId': revision.clientId,
-                                                'style[background-color]': color
-                                            },
-                                            dataType: 'json'
+                                            data: JSON.stringify(entity),
+                                            dataType: 'json',
+                                            contentType: 'application/json'
                                         }).done(function (response) {
                                             // update the revision
                                             nf.Client.setRevision(response.revision);

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-toolbox.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-toolbox.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-toolbox.js
index 8c666ab..3d6a33f 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-toolbox.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-toolbox.js
@@ -36,6 +36,7 @@ nf.CanvasToolbox = (function () {
             filterList: 'filter-list'
         },
         urls: {
+            api: '../nifi-api',
             controller: '../nifi-api/controller',
             processorTypes: '../nifi-api/controller/processor-types',
             templates: '../nifi-api/controller/templates'
@@ -361,21 +362,25 @@ nf.CanvasToolbox = (function () {
      * @argument {object} pt                The point that the processor was dropped
      */
     var createProcessor = function (name, processorType, pt) {
-        var revision = nf.Client.getRevision();
+        var processorEntity = {
+            'revision': nf.Client.getRevision(),
+            'processor': {
+                'type': processorType,
+                'name': name,
+                'position': {
+                    'x': pt.x,
+                    'y': pt.y
+                }
+            }
+        };
 
         // create a new processor of the defined type
         $.ajax({
             type: 'POST',
-            url: config.urls.controller + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()) + '/processors',
-            data: {
-                version: revision.version,
-                clientId: revision.clientId,
-                name: name,
-                type: processorType,
-                x: pt.x,
-                y: pt.y
-            },
-            dataType: 'json'
+            url: config.urls.api + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()) + '/processors',
+            data: JSON.stringify(processorEntity),
+            dataType: 'json',
+            contentType: 'application/json'
         }).done(function (response) {
             if (nf.Common.isDefinedAndNotNull(response.processor)) {
                 // update the revision
@@ -448,20 +453,24 @@ nf.CanvasToolbox = (function () {
      * @argument {object} pt                The point that the input port was dropped
      */
     var createInputPort = function (portName, pt) {
-        var revision = nf.Client.getRevision();
-
+        var inputPortEntity = {
+            'revision': nf.Client.getRevision(),
+            'inputPort': {
+                'name': portName,
+                'position': {
+                    'x': pt.x,
+                    'y': pt.y
+                }
+            }
+        };
+        
         // create a new processor of the defined type
         $.ajax({
             type: 'POST',
-            url: config.urls.controller + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()) + '/input-ports',
-            data: {
-                version: revision.version,
-                clientId: revision.clientId,
-                name: portName,
-                x: pt.x,
-                y: pt.y
-            },
-            dataType: 'json'
+            url: config.urls.api + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()) + '/input-ports',
+            data: JSON.stringify(inputPortEntity),
+            dataType: 'json',
+            contentType: 'application/json'
         }).done(function (response) {
             if (nf.Common.isDefinedAndNotNull(response.inputPort)) {
                 // update the revision
@@ -534,20 +543,24 @@ nf.CanvasToolbox = (function () {
      * @argument {object} pt                The point that the output port was dropped
      */
     var createOutputPort = function (portName, pt) {
-        var revision = nf.Client.getRevision();
+        var outputPortEntity = {
+            'revision': nf.Client.getRevision(),
+            'outputPort': {
+                'name': portName,
+                'position': {
+                    'x': pt.x,
+                    'y': pt.y
+                }
+            }
+        };
 
         // create a new processor of the defined type
         $.ajax({
             type: 'POST',
-            url: config.urls.controller + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()) + '/output-ports',
-            data: {
-                version: revision.version,
-                clientId: revision.clientId,
-                name: portName,
-                x: pt.x,
-                y: pt.y
-            },
-            dataType: 'json'
+            url: config.urls.api + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()) + '/output-ports',
+            data: JSON.stringify(outputPortEntity),
+            dataType: 'json',
+            contentType: 'application/json'
         }).done(function (response) {
             if (nf.Common.isDefinedAndNotNull(response.outputPort)) {
                 // update the revision
@@ -574,20 +587,24 @@ nf.CanvasToolbox = (function () {
      * @argument {object} pt        The point that the group was dropped
      */
     var createGroup = function (groupName, pt) {
-        var revision = nf.Client.getRevision();
+        var processGroupEntity = {
+            'revision': nf.Client.getRevision(),
+            'processGroup': {
+                'name': groupName,
+                'position': {
+                    'x': pt.x,
+                    'y': pt.y
+                }
+            }
+        };
 
         // create a new processor of the defined type
         return $.ajax({
             type: 'POST',
-            url: config.urls.controller + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()) + '/process-group-references',
-            data: {
-                version: revision.version,
-                clientId: revision.clientId,
-                name: groupName,
-                x: pt.x,
-                y: pt.y
-            },
-            dataType: 'json'
+            url: config.urls.api + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()) + '/process-groups',
+            data: JSON.stringify(processGroupEntity),
+            dataType: 'json',
+            contentType: 'application/json'
         }).done(function (response) {
             if (nf.Common.isDefinedAndNotNull(response.processGroup)) {
                 // update the revision
@@ -657,20 +674,24 @@ nf.CanvasToolbox = (function () {
      * @argument {object} pt                            The point that the remote group was dropped
      */
     var createRemoteProcessGroup = function (remoteProcessGroupUri, pt) {
-        var revision = nf.Client.getRevision();
+        var remoteProcessGroupEntity = {
+            'revision': nf.Client.getRevision(),
+            'remoteProcessGroup': {
+                'targetUri': remoteProcessGroupUri,
+                'position': {
+                    'x': pt.x,
+                    'y': pt.y
+                }
+            }
+        };
 
         // create a new processor of the defined type
         $.ajax({
             type: 'POST',
-            url: config.urls.controller + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()) + '/remote-process-groups',
-            data: {
-                version: revision.version,
-                clientId: revision.clientId,
-                uri: remoteProcessGroupUri,
-                x: pt.x,
-                y: pt.y
-            },
-            dataType: 'json'
+            url: config.urls.api + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()) + '/remote-process-groups',
+            data: JSON.stringify(remoteProcessGroupEntity),
+            dataType: 'json',
+            contentType: 'application/json'
         }).done(function (response) {
             if (nf.Common.isDefinedAndNotNull(response.remoteProcessGroup)) {
                 // update the revision
@@ -696,19 +717,23 @@ nf.CanvasToolbox = (function () {
      * @argument {object} pt        The point that the funnel was dropped
      */
     var createFunnel = function (pt) {
-        var revision = nf.Client.getRevision();
+        var outputPortEntity = {
+            'revision': nf.Client.getRevision(),
+            'funnel': {
+                'position': {
+                    'x': pt.x,
+                    'y': pt.y
+                }
+            }
+        };
 
         // create a new funnel
         $.ajax({
             type: 'POST',
-            url: config.urls.controller + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()) + '/funnels',
-            data: {
-                version: revision.version,
-                clientId: revision.clientId,
-                x: pt.x,
-                y: pt.y
-            },
-            dataType: 'json'
+            url: config.urls.api + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()) + '/funnels',
+            data: JSON.stringify(outputPortEntity),
+            dataType: 'json',
+            contentType: 'application/json'
         }).done(function (response) {
             if (nf.Common.isDefinedAndNotNull(response.funnel)) {
                 // update the revision
@@ -803,7 +828,7 @@ nf.CanvasToolbox = (function () {
         // create a new instance of the new template
         $.ajax({
             type: 'POST',
-            url: config.urls.controller + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()) + '/template-instance',
+            url: config.urls.api + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()) + '/template-instance',
             data: {
                 version: revision.version,
                 clientId: revision.clientId,
@@ -833,21 +858,25 @@ nf.CanvasToolbox = (function () {
      * @argument {object} pt        The point that the label was dropped
      */
     var createLabel = function (pt) {
-        var revision = nf.Client.getRevision();
+        var labelEntity = {
+            'revision': nf.Client.getRevision(),
+            'label': {
+                'width': nf.Label.config.width,
+                'height': nf.Label.config.height,
+                'position': {
+                    'x': pt.x,
+                    'y': pt.y
+                }
+            }
+        };
 
         // create a new label
         $.ajax({
             type: 'POST',
-            url: config.urls.controller + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()) + '/labels',
-            data: {
-                version: revision.version,
-                clientId: revision.clientId,
-                x: pt.x,
-                y: pt.y,
-                width: nf.Label.config.width,
-                height: nf.Label.config.height
-            },
-            dataType: 'json'
+            url: config.urls.api + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()) + '/labels',
+            data: JSON.stringify(labelEntity),
+            dataType: 'json',
+            contentType: 'application/json'
         }).done(function (response) {
             if (nf.Common.isDefinedAndNotNull(response.label)) {
                 // update the revision

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas.js
index ae3323b..84cc2c4 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas.js
@@ -76,12 +76,13 @@ nf.Canvas = (function () {
 
     var config = {
         urls: {
+            api: '../nifi-api',
             identity: '../nifi-api/controller/identity',
             authorities: '../nifi-api/controller/authorities',
             kerberos: '../nifi-api/access/kerberos',
             revision: '../nifi-api/controller/revision',
             status: '../nifi-api/controller/status',
-            bulletinBoard: '../nifi-api/controller/bulletin-board',
+            bulletinBoard: '../nifi-api/bulletin-board',
             banners: '../nifi-api/controller/banners',
             controller: '../nifi-api/controller',
             controllerConfig: '../nifi-api/controller/config',
@@ -782,7 +783,7 @@ nf.Canvas = (function () {
         // load the controller
         return $.ajax({
             type: 'GET',
-            url: config.urls.controller + '/process-groups/' + encodeURIComponent(processGroupId),
+            url: config.urls.api + '/process-groups/' + encodeURIComponent(processGroupId),
             data: {
                 verbose: true
             },
@@ -833,7 +834,7 @@ nf.Canvas = (function () {
         return $.Deferred(function (deferred) {
             $.ajax({
                 type: 'GET',
-                url: config.urls.controller + '/process-groups/' + encodeURIComponent(processGroupId) + '/status',
+                url: config.urls.api + '/process-groups/' + encodeURIComponent(processGroupId) + '/status',
                 data: {
                     recursive: false
                 },
@@ -1108,12 +1109,10 @@ nf.Canvas = (function () {
                             nf.RemoteProcessGroupConfiguration.init();
                             nf.RemoteProcessGroupPorts.init();
                             nf.PortConfiguration.init();
-                            nf.SecurePortConfiguration.init();
                             nf.LabelConfiguration.init();
                             nf.ProcessorDetails.init();
                             nf.ProcessGroupDetails.init();
                             nf.PortDetails.init();
-                            nf.SecurePortDetails.init();
                             nf.ConnectionDetails.init();
                             nf.RemoteProcessGroupDetails.init();
                             nf.GoTo.init();

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-component-state.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-component-state.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-component-state.js
index fd2f4f6..afef31c 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-component-state.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-component-state.js
@@ -255,15 +255,15 @@ nf.ComponentState = (function () {
 
                     if (stateEntryCount > 0) {
                         // clear the state
-                        var revision = nf.Client.getRevision();
+                        var revision = {
+                            'revision': nf.Client.getRevision()
+                        };
+                        
                         var component = componentStateTable.data('component');
                         $.ajax({
                             type: 'POST',
                             url: component.uri + '/state/clear-requests',
-                            data: {
-                                version: revision.version,
-                                clientId: revision.clientId
-                            },
+                            data: JSON.stringify(revision),
                             dataType: 'json'
                         }).done(function (response) {
                             // update the revision

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection-configuration.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection-configuration.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection-configuration.js
index 9f83fae..73ea71b 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection-configuration.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection-configuration.js
@@ -24,7 +24,7 @@ nf.ConnectionConfiguration = (function () {
 
     var config = {
         urls: {
-            controller: '../nifi-api/controller',
+            api: '../nifi-api',
             prioritizers: '../nifi-api/controller/prioritizers'
         }
     };
@@ -248,7 +248,7 @@ nf.ConnectionConfiguration = (function () {
 
             $.ajax({
                 type: 'GET',
-                url: config.urls.controller + '/process-groups/' + encodeURIComponent(processGroupData.component.id),
+                url: config.urls.api + '/process-groups/' + encodeURIComponent(processGroupData.component.id),
                 data: {
                     verbose: true
                 },
@@ -473,7 +473,7 @@ nf.ConnectionConfiguration = (function () {
 
             $.ajax({
                 type: 'GET',
-                url: config.urls.controller + '/process-groups/' + encodeURIComponent(processGroupData.component.id),
+                url: config.urls.api + '/process-groups/' + encodeURIComponent(processGroupData.component.id),
                 data: {
                     verbose: true
                 },
@@ -717,8 +717,14 @@ nf.ConnectionConfiguration = (function () {
 
             var xOffset = nf.Connection.config.selfLoopXOffset;
             var yOffset = nf.Connection.config.selfLoopYOffset;
-            bends.push((rightCenter.x + xOffset) + ',' + (rightCenter.y - yOffset));
-            bends.push((rightCenter.x + xOffset) + ',' + (rightCenter.y + yOffset));
+            bends.push({
+                'x': (rightCenter.x + xOffset),
+                'y': (rightCenter.y - yOffset)
+            });
+            bends.push({
+                'x': (rightCenter.x + xOffset),
+                'y': (rightCenter.y + yOffset)
+            });
         } else {
             var existingConnections = [];
 
@@ -794,10 +800,16 @@ nf.ConnectionConfiguration = (function () {
                     while (positioned === false) {
                         // consider above and below, then increment and try again (if necessary)
                         if (collides(xCandidate - xStep, yCandidate - yStep) === false) {
-                            bends.push((xCandidate - xStep) + ',' + (yCandidate - yStep));
+                            bends.push({
+                                'x': (xCandidate - xStep),
+                                'y': (yCandidate - yStep)
+                            });
                             positioned = true;
                         } else if (collides(xCandidate + xStep, yCandidate + yStep) === false) {
-                            bends.push((xCandidate + xStep) + ',' + (yCandidate + yStep));
+                            bends.push({
+                                'x': (xCandidate + xStep),
+                                'y': (yCandidate + yStep)
+                            });
                             positioned = true;
                         }
 
@@ -827,30 +839,36 @@ nf.ConnectionConfiguration = (function () {
         var prioritizers = $('#prioritizer-selected').sortable('toArray');
 
         if (validateSettings()) {
-            var revision = nf.Client.getRevision();
+            var connectionEntity = {
+                'revision': nf.Client.getRevision(),
+                'connection': {
+                    'name': connectionName,
+                    'source': {
+                        'id': sourceId,
+                        'groupId': sourceGroupId,
+                        'type': sourceType
+                    },
+                    'destination': {
+                        'id': destinationId,
+                        'groupId': destinationGroupId,
+                        'type': destinationType
+                    },
+                    'selectedRelationships': selectedRelationships,
+                    'flowFileExpiration': flowFileExpiration,
+                    'backPressureDataSizeThreshold': backPressureDataSizeThreshold,
+                    'backPressureObjectThreshold': backPressureObjectThreshold,
+                    'bends': bends,
+                    'prioritizers': prioritizers
+                }
+            };
 
             // create the new connection
             $.ajax({
                 type: 'POST',
-                url: config.urls.controller + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()) + '/connections',
-                data: {
-                    version: revision.version,
-                    clientId: revision.clientId,
-                    sourceId: sourceId,
-                    sourceGroupId: sourceGroupId,
-                    sourceType: sourceType,
-                    relationships: selectedRelationships,
-                    bends: bends,
-                    name: connectionName,
-                    flowFileExpiration: flowFileExpiration,
-                    backPressureObjectThreshold: backPressureObjectThreshold,
-                    backPressureDataSizeThreshold: backPressureDataSizeThreshold,
-                    prioritizers: prioritizers,
-                    destinationId: destinationId,
-                    destinationGroupId: destinationGroupId,
-                    destinationType: destinationType
-                },
-                dataType: 'json'
+                url: config.urls.api + '/process-groups/' + encodeURIComponent(nf.Canvas.getGroupId()) + '/connections',
+                data: JSON.stringify(connectionEntity),
+                dataType: 'json',
+                contentType: 'application/json'
             }).done(function (response) {
                 // update the revision
                 nf.Client.setRevision(response.revision);
@@ -882,6 +900,7 @@ nf.ConnectionConfiguration = (function () {
      */
     var updateConnection = function (selectedRelationships) {
         // get the connection details
+        var connectionId = $('#connection-id').text();
         var connectionUri = $('#connection-uri').val();
 
         // get the source details
@@ -904,26 +923,31 @@ nf.ConnectionConfiguration = (function () {
         var prioritizers = $('#prioritizer-selected').sortable('toArray');
 
         if (validateSettings()) {
-            var revision = nf.Client.getRevision();
+            var connectionEntity = {
+                'revision': nf.Client.getRevision(),
+                'connection': {
+                    'id': connectionId,
+                    'name': connectionName,
+                    'destination': {
+                        'id': destinationId,
+                        'groupId': destinationGroupId,
+                        'type': destinationType
+                    },
+                    'selectedRelationships': selectedRelationships,
+                    'flowFileExpiration': flowFileExpiration,
+                    'backPressureDataSizeThreshold': backPressureDataSizeThreshold,
+                    'backPressureObjectThreshold': backPressureObjectThreshold,
+                    'prioritizers': prioritizers
+                }
+            };
 
             // update the connection
             return $.ajax({
                 type: 'PUT',
                 url: connectionUri,
-                data: {
-                    version: revision.version,
-                    clientId: revision.clientId,
-                    relationships: selectedRelationships,
-                    name: connectionName,
-                    flowFileExpiration: flowFileExpiration,
-                    backPressureObjectThreshold: backPressureObjectThreshold,
-                    backPressureDataSizeThreshold: backPressureDataSizeThreshold,
-                    prioritizers: prioritizers,
-                    destinationId: destinationId,
-                    destinationType: destinationType,
-                    destinationGroupId: destinationGroupId
-                },
-                dataType: 'json'
+                data: JSON.stringify(connectionEntity),
+                dataType: 'json',
+                contentType: 'application/json'
             }).done(function (response) {
                 if (nf.Common.isDefinedAndNotNull(response.connection)) {
                     var connection = response.connection;

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection.js
index ec0ed4f..8cab85e 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection.js
@@ -1168,18 +1168,20 @@ nf.Connection = (function () {
                                     connection.call(updateConnections, true, false);
                                 });
                             } else {
-                                var revision = nf.Client.getRevision();
-
                                 // get the destination details
                                 var destinationData = destination.datum();
                                 var destinationType = nf.CanvasUtils.getConnectableTypeForDestination(destination);
 
-                                var updatedConnectionData = {
-                                    version: revision.version,
-                                    clientId: revision.clientId,
-                                    destinationId: destinationData.component.id,
-                                    destinationType: destinationType,
-                                    destinationGroupId: nf.Canvas.getGroupId()
+                                var connectionEntity = {
+                                    'revision': nf.Client.getRevision(),
+                                    'connection': {
+                                        'id': connectionData.component.id,
+                                        'destination': {
+                                            'id': destinationData.component.id,
+                                            'groupId': nf.Canvas.getGroupId(),
+                                            'type': destinationType
+                                        }
+                                    }
                                 };
 
                                 // if this is a self loop and there are less than 2 bends, add them
@@ -1191,16 +1193,23 @@ nf.Connection = (function () {
                                     var xOffset = nf.Connection.config.selfLoopXOffset;
                                     var yOffset = nf.Connection.config.selfLoopYOffset;
 
-                                    updatedConnectionData.bends = [];
-                                    updatedConnectionData.bends.push((rightCenter.x + xOffset) + ',' + (rightCenter.y - yOffset));
-                                    updatedConnectionData.bends.push((rightCenter.x + xOffset) + ',' + (rightCenter.y + yOffset));
+                                    connectionEntity.connection.bends = [];
+                                    connectionEntity.connection.bends.push({
+                                        'x': (rightCenter.x + xOffset),
+                                        'y': (rightCenter.y - yOffset)
+                                    });
+                                    connectionEntity.connection.bends.push({
+                                        'x': (rightCenter.x + xOffset),
+                                        'y': (rightCenter.y + yOffset)
+                                    });
                                 }
 
                                 $.ajax({
                                     type: 'PUT',
                                     url: connectionData.component.uri,
-                                    data: updatedConnectionData,
-                                    dataType: 'json'
+                                    data: JSON.stringify(connectionEntity),
+                                    dataType: 'json',
+                                    contentType: 'application/json'
                                 }).done(function (response) {
                                     var updatedConnectionData = response.connection;
 

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-controller-service.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-controller-service.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-controller-service.js
index ebaf6c1..2cf0fc0 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-controller-service.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-controller-service.js
@@ -548,7 +548,7 @@ nf.ControllerService = (function () {
         
         return $.ajax({
             type: 'GET',
-            url: '../nifi-api/controller/bulletin-board',
+            url: '../nifi-api/bulletin-board',
             data: {
                 sourceId: ids
             },
@@ -564,22 +564,26 @@ nf.ControllerService = (function () {
      * @param {function} pollCondition
      */
     var setEnabled = function (controllerService, enabled, pollCondition) {
-        var revision = nf.Client.getRevision();
-        
+        // build the request entity
+        var controllerServiceEntity = {
+            'revision': nf.Client.getRevision(),
+            'controllerService': {
+                'id': controllerService.id,
+                'state': enabled ? 'ENABLED' : 'DISABLED'
+            }
+        };
+
         var updated = $.ajax({
             type: 'PUT',
             url: controllerService.uri,
-            data: {
-                clientId: revision.clientId,
-                version: revision.version,
-                state: enabled === true ? 'ENABLED' : 'DISABLED'
-            },
-            dataType: 'json'
+            data: JSON.stringify(controllerServiceEntity),
+            dataType: 'json',
+            contentType: 'application/json'
         }).done(function (response) {
             nf.Client.setRevision(response.revision);
         }).fail(nf.Common.handleAjaxError);
         
-        // wait unil the polling of each service finished
+        // wait until the polling of each service finished
         return $.Deferred(function(deferred) {
             updated.done(function() {
                 var serviceUpdated = pollService(controllerService, function (service, bulletins) {
@@ -650,18 +654,19 @@ nf.ControllerService = (function () {
      * @param {function} pollCondition
      */
     var updateReferencingSchedulableComponents = function (controllerService, running, pollCondition) {
-        var revision = nf.Client.getRevision();
-        
+        var referenceEntity = {
+            'revision': nf.Client.getRevision(),
+            'id': controllerService.id,
+            'state': running ? 'RUNNING' : 'STOPPED'
+        };
+
         // issue the request to update the referencing components
         var updated = $.ajax({
             type: 'PUT',
             url: controllerService.uri + '/references',
-            data: {
-                clientId: revision.clientId,
-                version: revision.version,
-                state: running ? 'RUNNING' : 'STOPPED'
-            },
-            dataType: 'json'
+            data: JSON.stringify(referenceEntity),
+            dataType: 'json',
+            contentType: 'application/json'
         }).done(function (response) {
             nf.Client.setRevision(response.revision);
         }).fail(nf.Common.handleAjaxError);
@@ -908,18 +913,20 @@ nf.ControllerService = (function () {
      * @param {function} pollCondition
      */
     var updateReferencingServices = function (controllerService, enabled, pollCondition) {
-        var revision = nf.Client.getRevision();
+        // build the reference entity
+        var referenceEntity = {
+            'revision': nf.Client.getRevision(),
+            'id': controllerService.id,
+            'state': enabled ? 'ENABLED' : 'DISABLED'
+        };
         
         // issue the request to update the referencing components
         var updated = $.ajax({
             type: 'PUT',
             url: controllerService.uri + '/references',
-            data: {
-                clientId: revision.clientId,
-                version: revision.version,
-                state: enabled ? 'ENABLED' : 'DISABLED'
-            },
-            dataType: 'json'
+            data: JSON.stringify(referenceEntity),
+            dataType: 'json',
+            contentType: 'application/json'
         }).done(function (response) {
             nf.Client.setRevision(response.revision);
         }).fail(nf.Common.handleAjaxError);
@@ -1301,7 +1308,6 @@ nf.ControllerService = (function () {
                 data: JSON.stringify(updatedControllerService),
                 url: controllerService.uri,
                 dataType: 'json',
-                processData: false,
                 contentType: 'application/json'
             }).done(function (response) {
                 if (nf.Common.isDefinedAndNotNull(response.controllerService)) {
@@ -1605,7 +1611,7 @@ nf.ControllerService = (function () {
             // get the controller service history
             var loadHistory = $.ajax({
                 type: 'GET',
-                url: '../nifi-api/controller/history/controller-services/' + encodeURIComponent(controllerService.id),
+                url: '../nifi-api/history/controller-services/' + encodeURIComponent(controllerService.id),
                 dataType: 'json'
             });
             
@@ -1762,7 +1768,7 @@ nf.ControllerService = (function () {
             // get the controller service history
             var loadHistory = $.ajax({
                 type: 'GET',
-                url: '../nifi-api/controller/history/controller-services/' + encodeURIComponent(controllerService.id),
+                url: '../nifi-api/history/controller-services/' + encodeURIComponent(controllerService.id),
                 dataType: 'json'
             });
             

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-draggable.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-draggable.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-draggable.js
index d44f1ed..d4dd1de 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-draggable.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-draggable.js
@@ -27,7 +27,6 @@ nf.Draggable = (function () {
      * @param {selection} dragSelection The current drag selection
      */
     var updateComponentsPosition = function (dragSelection) {
-        var revision = nf.Client.getRevision();
         var updates = d3.map();
 
         // determine the drag delta
@@ -44,8 +43,19 @@ nf.Draggable = (function () {
         
         var updateComponentPosition = function(d) {
             var newPosition = {
-                x: d.component.position.x + delta.x,
-                y: d.component.position.y + delta.y
+                'x': d.component.position.x + delta.x,
+                'y': d.component.position.y + delta.y
+            };
+
+            // build the entity
+            var entity = {
+                'revision': nf.Client.getRevision()
+            };
+
+            // use bracket notation to dynamic get the key based on the entity type
+            entity[nf[d.type].getEntityKey(d)] = {
+                'id': d.component.id,
+                'position': newPosition
             };
 
             // update the component positioning
@@ -53,13 +63,9 @@ nf.Draggable = (function () {
                 $.ajax({
                     type: 'PUT',
                     url: d.component.uri,
-                    data: {
-                        version: revision.version,
-                        clientId: revision.clientId,
-                        x: newPosition.x,
-                        y: newPosition.y
-                    },
-                    dataType: 'json'
+                    data: JSON.stringify(entity),
+                    dataType: 'json',
+                    contentType: 'application/json'
                 }).done(function (response) {
                     // update the revision
                     nf.Client.setRevision(response.revision);

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-funnel.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-funnel.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-funnel.js
index 8943ddf..555450e 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-funnel.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-funnel.js
@@ -253,7 +253,14 @@ nf.Funnel = (function () {
                 set(funnels);
             }
         },
-        
+
+        /**
+         * Returns the entity key when marshalling an entity of this type.
+         */
+        getEntityKey: function (d) {
+            return 'funnel';
+        },
+
         /**
          * Removes the specified funnel.
          * 

http://git-wip-us.apache.org/repos/asf/nifi/blob/153f63ef/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-go-to.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-go-to.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-go-to.js
index 2c75b7e..f3d0738 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-go-to.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-go-to.js
@@ -24,8 +24,8 @@ nf.GoTo = (function () {
 
     var config = {
         urls: {
-            controller: '../nifi-api/controller',
-            processGroups: '../nifi-api/controller/process-groups/'
+            api: '../nifi-api',
+            processGroups: '../nifi-api/process-groups/'
         }
     };
 
@@ -350,7 +350,7 @@ nf.GoTo = (function () {
 
             $.ajax({
                 type: 'GET',
-                url: config.urls.controller + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
+                url: config.urls.api + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
                 dataType: 'json'
             }).done(function (response) {
                 var connections = response.connections;
@@ -389,7 +389,7 @@ nf.GoTo = (function () {
 
             $.ajax({
                 type: 'GET',
-                url: config.urls.controller + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
+                url: config.urls.api + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
                 dataType: 'json'
             }).done(function (response) {
                 var connections = response.connections;
@@ -428,7 +428,7 @@ nf.GoTo = (function () {
 
             $.ajax({
                 type: 'GET',
-                url: config.urls.controller + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
+                url: config.urls.api + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
                 dataType: 'json'
             }).done(function (response) {
                 var connections = response.connections;
@@ -467,7 +467,7 @@ nf.GoTo = (function () {
 
             $.ajax({
                 type: 'GET',
-                url: config.urls.controller + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
+                url: config.urls.api + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
                 dataType: 'json'
             }).done(function (response) {
                 var connections = response.connections;
@@ -506,7 +506,7 @@ nf.GoTo = (function () {
 
             $.ajax({
                 type: 'GET',
-                url: config.urls.controller + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
+                url: config.urls.api + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
                 dataType: 'json'
             }).done(function (response) {
                 var connections = response.connections;
@@ -545,7 +545,7 @@ nf.GoTo = (function () {
 
             $.ajax({
                 type: 'GET',
-                url: config.urls.controller + '/process-groups/' + encodeURIComponent(nf.Canvas.getParentGroupId()) + '/connections',
+                url: config.urls.api + '/process-groups/' + encodeURIComponent(nf.Canvas.getParentGroupId()) + '/connections',
                 dataType: 'json'
             }).done(function (response) {
                 var connections = response.connections;
@@ -587,7 +587,7 @@ nf.GoTo = (function () {
 
             $.ajax({
                 type: 'GET',
-                url: config.urls.controller + '/process-groups/' + encodeURIComponent(nf.Canvas.getParentGroupId()) + '/connections',
+                url: config.urls.api + '/process-groups/' + encodeURIComponent(nf.Canvas.getParentGroupId()) + '/connections',
                 dataType: 'json'
             }).done(function (response) {
                 var connections = response.connections;
@@ -629,7 +629,7 @@ nf.GoTo = (function () {
 
             $.ajax({
                 type: 'GET',
-                url: config.urls.controller + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
+                url: config.urls.api + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
                 dataType: 'json'
             }).done(function (response) {
                 var connections = response.connections;
@@ -668,7 +668,7 @@ nf.GoTo = (function () {
 
             $.ajax({
                 type: 'GET',
-                url: config.urls.controller + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
+                url: config.urls.api + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
                 dataType: 'json'
             }).done(function (response) {
                 var connections = response.connections;
@@ -704,7 +704,7 @@ nf.GoTo = (function () {
 
             $.ajax({
                 type: 'GET',
-                url: config.urls.controller + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
+                url: config.urls.api + '/process-groups/' + encodeURIComponent(selectionData.component.parentGroupId) + '/connections',
                 dataType: 'json'
             }).done(function (response) {
                 var connections = response.connections;