Author: erinnp
Date: Tue Sep  3 19:53:12 2013
New Revision: 1519815

URL: http://svn.apache.org/r1519815
Log:
Rendering widgets, adding and editing of pages

Modified:
    
rave/branches/angular/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/Page.java
    
rave/branches/angular/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/RegionWidget.java
    
rave/branches/angular/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultPageResource.java
    
rave/branches/angular/rave-portal-resources/src/main/webapp/static/html/common/partials/region.html
    
rave/branches/angular/rave-portal-resources/src/main/webapp/static/html/portal/tabs.html
    
rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/common/directives/RenderRegionWidget.js
    
rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/common/resources/RaveResource.js
    
rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/portal/controllers/AddOrEditNewPageModalCtrl.js
    
rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/portal/routes.js

Modified: 
rave/branches/angular/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/Page.java
URL: 
http://svn.apache.org/viewvc/rave/branches/angular/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/Page.java?rev=1519815&r1=1519814&r2=1519815&view=diff
==============================================================================
--- 
rave/branches/angular/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/Page.java
 (original)
+++ 
rave/branches/angular/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/Page.java
 Tue Sep  3 19:53:12 2013
@@ -19,6 +19,8 @@
 
 package org.apache.rave.rest.model;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
 import javax.xml.bind.annotation.*;
 import java.util.ArrayList;
 import java.util.List;

Modified: 
rave/branches/angular/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/RegionWidget.java
URL: 
http://svn.apache.org/viewvc/rave/branches/angular/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/RegionWidget.java?rev=1519815&r1=1519814&r2=1519815&view=diff
==============================================================================
--- 
rave/branches/angular/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/RegionWidget.java
 (original)
+++ 
rave/branches/angular/rave-components/rave-core-api/src/main/java/org/apache/rave/rest/model/RegionWidget.java
 Tue Sep  3 19:53:12 2013
@@ -19,6 +19,7 @@
 
 package org.apache.rave.rest.model;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import org.apache.rave.model.RegionWidgetPreference;
 
 import javax.xml.bind.annotation.*;
@@ -30,6 +31,7 @@ import java.util.List;
         "id", "type", "widgetId", "widgetUrl", "regionId", "collapsed", 
"locked", "hideChrome", "ownerId", "userPrefs"
 })
 @XmlRootElement(name = "RegionWidget")
+@JsonIgnoreProperties(ignoreUnknown = true)
 public class RegionWidget  implements RestEntity{
 
     @XmlAttribute(name="id")

Modified: 
rave/branches/angular/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultPageResource.java
URL: 
http://svn.apache.org/viewvc/rave/branches/angular/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultPageResource.java?rev=1519815&r1=1519814&r2=1519815&view=diff
==============================================================================
--- 
rave/branches/angular/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultPageResource.java
 (original)
+++ 
rave/branches/angular/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultPageResource.java
 Tue Sep  3 19:53:12 2013
@@ -75,7 +75,7 @@ public class DefaultPageResource impleme
     @Override
     public Page createPage(Page page) {
         //TODO: RAVE-977 - when Page type enum is deprecated escape from this 
logic
-        if (page.getPageType().equals("user")) {
+        if (page.getPageType() != null && page.getPageType().equals("user")) {
             if (page.getName() == null) {
                 throw new BadRequestException("Page name property must be 
defined.");
             }

Modified: 
rave/branches/angular/rave-portal-resources/src/main/webapp/static/html/common/partials/region.html
URL: 
http://svn.apache.org/viewvc/rave/branches/angular/rave-portal-resources/src/main/webapp/static/html/common/partials/region.html?rev=1519815&r1=1519814&r2=1519815&view=diff
==============================================================================
--- 
rave/branches/angular/rave-portal-resources/src/main/webapp/static/html/common/partials/region.html
 (original)
+++ 
rave/branches/angular/rave-portal-resources/src/main/webapp/static/html/common/partials/region.html
 Tue Sep  3 19:53:12 2013
@@ -3,6 +3,6 @@
      class="region {{page.pageLayoutCode}}_{{page.regions.indexOf(region)+1}}"
      ui-sortable="sortingOpts" ng-model="region.regionWidgets">
     <div ng-repeat="regionWidget in region.regionWidgets">
-        <div render-region-widget="regionWidget"></div>
+        <div render-region-widget region-widget="regionWidget"></div>
     </div>
 </div>
\ No newline at end of file

Modified: 
rave/branches/angular/rave-portal-resources/src/main/webapp/static/html/portal/tabs.html
URL: 
http://svn.apache.org/viewvc/rave/branches/angular/rave-portal-resources/src/main/webapp/static/html/portal/tabs.html?rev=1519815&r1=1519814&r2=1519815&view=diff
==============================================================================
--- 
rave/branches/angular/rave-portal-resources/src/main/webapp/static/html/portal/tabs.html
 (original)
+++ 
rave/branches/angular/rave-portal-resources/src/main/webapp/static/html/portal/tabs.html
 Tue Sep  3 19:53:12 2013
@@ -72,7 +72,7 @@
 
                     <div class="controls">
                         <select id="pageLayout" ng-model="page.pageLayoutCode" 
required
-                                ng-options="l.code as l.code for l in layouts 
| filter:isUserSelectable"">
+                                ng-options="l.code as l.code for l in layouts 
| filter:isUserSelectable">
                         <option value="">-- Select Layout --</option>
                         </select>
                     </div>

Modified: 
rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/common/directives/RenderRegionWidget.js
URL: 
http://svn.apache.org/viewvc/rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/common/directives/RenderRegionWidget.js?rev=1519815&r1=1519814&r2=1519815&view=diff
==============================================================================
--- 
rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/common/directives/RenderRegionWidget.js
 (original)
+++ 
rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/common/directives/RenderRegionWidget.js
 Tue Sep  3 19:53:12 2013
@@ -8,7 +8,7 @@
  * with the License.  You may obtain a copy of the License at
  *
  *   http://www.apache.org/licenses/LICENSE-2.0
- *
+ *                         registerView
  * 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
@@ -16,6 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+
 /**
  * The RenderRegionWidget directive takes a regionWidget to be rendered in the 
region-widget="" attribute
  * and renders that regionWidget at the location of the directive.
@@ -27,7 +28,7 @@ define(['angular'], function(angular){
             restrict: 'EA',
             replace: true,
             scope:{
-                regionWidget: '=renderRegionWidget'
+                regionWidget: '='
             },
             link: function (scope, element, attrs){
                 scope.$watch('regionWidget', function(){

Modified: 
rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/common/resources/RaveResource.js
URL: 
http://svn.apache.org/viewvc/rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/common/resources/RaveResource.js?rev=1519815&r1=1519814&r2=1519815&view=diff
==============================================================================
--- 
rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/common/resources/RaveResource.js
 (original)
+++ 
rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/common/resources/RaveResource.js
 Tue Sep  3 19:53:12 2013
@@ -20,23 +20,42 @@
 define(['underscore', 'angular'], function (_, angular) {
     return ['$resource', '$http', 'constants', function ($resource, $http, 
constants) {
         var baseUrl = constants.hostedPath + '/api/rest/',
-            transform = $http.defaults.transformResponse.concat([
+            /**
+             * For all requests that return data, unwrap the json response
+             */
+            transformResponse = $http.defaults.transformResponse.concat([
                 function (data) {
                     return data.data || data;
                 }
             ]),
+            /**
+             * For all requests that save data, flatten the data object and do 
not include arrays or nested objects
+             * in the request body
+             */
+            transformRequest = ([
+                function (data) {
+                    data = angular.copy(data);
+                    _.each(data, function(val, key) {
+                        if(_.isArray(val) || _.isObject(val)) {
+                            data[key] = undefined;
+                        }
+                    });
+
+                    return data;
+                }
+            ]).concat($http.defaults.transformRequest),
             defaultActions = {
-                get: {method: 'GET', cache: true, transformResponse: 
transform},
-                save: {method: 'POST', transformResponse: transform},
-                update: {method: 'PUT', transformResponse: transform},
-                query: {method: 'GET', cache: true, isArray: true, 
transformResponse: transform},
-                remove: {method: 'DELETE', transformResponse: transform},
-                delete: {method: 'DELETE', transformResponse: transform}
+                get: {method: 'GET', cache: true, transformResponse: 
transformResponse},
+                save: {method: 'POST', transformRequest:transformRequest, 
transformResponse: transformResponse},
+                update: {method: 'PUT', transformRequest:transformRequest, 
transformResponse: transformResponse},
+                query: {method: 'GET', cache: true, isArray: true, 
transformResponse: transformResponse},
+                remove: {method: 'DELETE', transformResponse: 
transformResponse},
+                delete: {method: 'DELETE', transformResponse: 
transformResponse}
             };
 
         return function RaveResource(url, paramDefaults, actions) {
             var acts = angular.copy(defaultActions),
-                trans = transform;
+                trans = transformResponse;
             url = baseUrl + url;
 
             _.each(actions, function (action, key) {

Modified: 
rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/portal/controllers/AddOrEditNewPageModalCtrl.js
URL: 
http://svn.apache.org/viewvc/rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/portal/controllers/AddOrEditNewPageModalCtrl.js?rev=1519815&r1=1519814&r2=1519815&view=diff
==============================================================================
--- 
rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/portal/controllers/AddOrEditNewPageModalCtrl.js
 (original)
+++ 
rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/portal/controllers/AddOrEditNewPageModalCtrl.js
 Tue Sep  3 19:53:12 2013
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-define(['underscore'], function(_) {
+define(['underscore'], function (_) {
     /* Local Variables */
     var addNewPageTitle = "ADD A NEW PAGE",
         updatePageTitle = "UPDATE PAGE";
@@ -24,46 +24,59 @@ define(['underscore'], function(_) {
     /* Controller Definition */
     return ['$scope', 'dialog', 'page', 'pageLayouts', 'Pages', function 
($scope, dialog, page, pageLayouts, Pages) {
 
-        $scope.page = angular.copy(page);
+        if(page) {
+            $scope.page = angular.copy(page);
+        }                                    else {
+            $scope.page = new Pages({
+                pageType: 'user'
+            });
+        }
 
         $scope.title = resolveModalTitle($scope.page);
 
         $scope.layouts = pageLayouts;
 
-        $scope.isUserSelectable = function(pageLayout) {
+        $scope.isUserSelectable = function (pageLayout) {
             return pageLayout.userSelectable;
         }
 
-        $scope.close = function() {
+        $scope.close = function () {
             dialog.close();
         }
 
-        $scope.savePage = function() {
+        $scope.savePage = function () {
             $scope.error = null;
-            Pages.save($scope.page).$then(function(page) {
-                $scope.page = page;
-                addNewPageToOrUpdatePageInPagesArray($scope);
+
+            if ($scope.page.id) {
+                $scope.page.$update(onSuccess, onError)
+            } else {
+                $scope.page.$save(onSuccess, onError)
+            }
+
+            function onSuccess(page) {
+                addOrUpdatePageInPagesArray($scope);
                 dialog.close();
-            }, function(response) {
-                //TODO: When REST API is fully implemented, set error msg to 
custom response from server
+            }
+
+            function onError(response) {
                 $scope.error = "Server-side ERROR";
-            });
+            }
         }
     }];
 
     /* Helpers */
     function resolveModalTitle(page) {
-       if(page) {
-        return updatePageTitle;
-       } else {
-        return addNewPageTitle;
-       }
+        if (page) {
+            return updatePageTitle;
+        } else {
+            return addNewPageTitle;
+        }
     }
 
-    function addNewPageToOrUpdatePageInPagesArray($scope) {
-        var pageEntry = _.findWhere($scope.pages, $scope.page);
-        if(pageEntry) {
-             _.extend(pageEntry, $scope.page);
+    function addOrUpdatePageInPagesArray($scope) {
+        var pageEntry = _.findWhere($scope.pages, {id: $scope.page.id});
+        if (pageEntry) {
+            _.extend(pageEntry, $scope.page);
         } else {
             $scope.pages.push($scope.page);
         }

Modified: 
rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/portal/routes.js
URL: 
http://svn.apache.org/viewvc/rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/portal/routes.js?rev=1519815&r1=1519814&r2=1519815&view=diff
==============================================================================
--- 
rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/portal/routes.js
 (original)
+++ 
rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/portal/routes.js
 Tue Sep  3 19:53:12 2013
@@ -31,16 +31,20 @@ define(['angular', 'common/resources/ind
              */
             //TODO: once angular 1.2 is released, the resources will expose a 
$promise property
             var resolve = {
-                pages: ['PagesForRender', '$q',
-                    function (PagesForRender, $q) {
+                pages: ['PagesForRender', '$q', '$rootScope',
+                    function (PagesForRender, $q, $rootScope) {
                         var deferred = $q.defer();
 
-                        PagesForRender.query({
-                            context: 'portal',
-                            identifier: '@self'
-                        }).$then(function (response) {
-                                deferred.resolve(response.resource)
-                            });
+                        if ($rootScope.pages) {
+                            deferred.resolve($rootScope.pages)
+                        } else {
+                            PagesForRender.query({
+                                context: 'portal',
+                                identifier: '@self'
+                            }).$then(function (response) {
+                                    deferred.resolve(response.resource)
+                                });
+                        }
 
                         return deferred.promise;
                     }


Reply via email to