You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by at...@apache.org on 2012/09/18 01:05:15 UTC
svn commit: r1386900 - in
/rave/sandbox/content-services/demo-portal/src/main:
java/org/apache/rave/portal/web/mvc/controller/
java/org/apache/rave/portal/web/mvc/interceptors/ resources/
webapp/WEB-INF/ webapp/WEB-INF/jsp/views/layouts/ webapp/WEB-INF...
Author: ate
Date: Mon Sep 17 23:05:14 2012
New Revision: 1386900
URL: http://svn.apache.org/viewvc?rev=1386900&view=rev
Log:
RAVE-696: rave-web-jcr / demo-portal
- mostly complete refactoring of PageController -> hmvc controller model and extra HandlerInterceptors
- large restructuring and cleanup of freemarker/jsp view templates for page controller(s)
layout templates now properly pulled and executed using the hmvc model instead of being pushed through Tiles
Added:
rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageContentController.java (with props)
rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageLayoutController.java (with props)
rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageTabsController.java (with props)
rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/
rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/AuthenticatedUserInterceptor.java (with props)
rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/MobileDeviceInterceptor.java (with props)
rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/UserPageInterceptor.java (with props)
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/layouts/
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/layouts/columns_1.jsp
- copied unchanged from r1385243, rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/layouts/columns_1.jsp
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/layouts/columns_2.jsp
- copied unchanged from r1385243, rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/layouts/columns_2.jsp
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/layouts/columns_2wn.jsp
- copied unchanged from r1385243, rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/layouts/columns_2wn.jsp
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/layouts/columns_3.jsp
- copied unchanged from r1385243, rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/layouts/columns_3.jsp
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/layouts/columns_3_newuser.jsp
- copied, changed from r1385243, rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/layouts/columns_3_newuser.jsp
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/layouts/columns_3nwn.jsp
- copied unchanged from r1385243, rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/layouts/columns_3nwn.jsp
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/layouts/columns_3nwn_1_bottom.jsp
- copied unchanged from r1385243, rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/layouts/columns_3nwn_1_bottom.jsp
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/layouts/columns_4.jsp
- copied unchanged from r1385243, rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/layouts/columns_4.jsp
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/layouts/mobile.jsp (with props)
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-content-mobile.jsp
- copied, changed from r1385242, rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-content.jsp
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-tabs-mobile.jsp
- copied, changed from r1385242, rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-tabs.jsp
Removed:
rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageController.java
Modified:
rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/PageHeaderController.java
rave/sandbox/content-services/demo-portal/src/main/resources/page-config.json
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-body.jsp
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-content.jsp
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-tabs.jsp
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/nested-dispatcher-servlet.xml
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/page-definitions.xml
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/routes.xml
Modified: rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/PageHeaderController.java
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/PageHeaderController.java?rev=1386900&r1=1386899&r2=1386900&view=diff
==============================================================================
--- rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/PageHeaderController.java (original)
+++ rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/PageHeaderController.java Mon Sep 17 23:05:14 2012
@@ -20,7 +20,6 @@ import org.apache.rave.portal.model.Page
import org.apache.rave.portal.model.PageUser;
import org.apache.rave.portal.model.User;
import org.apache.rave.portal.web.mvc.Named;
-import org.apache.rave.portal.web.mvc.HandlerConfig;
import org.apache.rave.portal.web.model.NavigationItem;
import org.apache.rave.portal.web.model.NavigationMenu;
import org.apache.rave.portal.web.mvc.NestedHandlerContext;
Added: rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageContentController.java
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageContentController.java?rev=1386900&view=auto
==============================================================================
--- rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageContentController.java (added)
+++ rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageContentController.java Mon Sep 17 23:05:14 2012
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.rave.portal.web.mvc.controller;
+
+import org.apache.rave.portal.web.mvc.Named;
+import org.apache.rave.portal.web.mvc.NestedHandlerContext;
+import org.apache.rave.portal.web.mvc.Routed;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@Routed
+@Controller
+public class UserPageContentController {
+
+ @Named
+ @RequestMapping
+ public String render(NestedHandlerContext hc, @ModelAttribute boolean mobileDevice) {
+ if (mobileDevice) {
+ return hc.getConfig().getViewName() + "-mobile";
+ }
+ else {
+ return hc.getConfig().getViewName();
+ }
+ }
+}
Propchange: rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageContentController.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageContentController.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageLayoutController.java
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageLayoutController.java?rev=1386900&view=auto
==============================================================================
--- rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageLayoutController.java (added)
+++ rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageLayoutController.java Mon Sep 17 23:05:14 2012
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.rave.portal.web.mvc.controller;
+
+import org.apache.rave.portal.model.Page;
+import org.apache.rave.portal.web.mvc.Named;
+import org.apache.rave.portal.web.mvc.NestedHandlerContext;
+import org.apache.rave.portal.web.mvc.Routed;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@Routed
+@Controller
+public class UserPageLayoutController {
+
+ @Named
+ @RequestMapping
+ public String render(@ModelAttribute Page page, @ModelAttribute("mobileDevice") boolean mobileDevice) {
+ if (mobileDevice) {
+ return "layouts/mobile";
+ }
+ else {
+ return "layouts/"+page.getPageLayout().getCode();
+ }
+ }
+}
Propchange: rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageLayoutController.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageLayoutController.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageTabsController.java
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageTabsController.java?rev=1386900&view=auto
==============================================================================
--- rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageTabsController.java (added)
+++ rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageTabsController.java Mon Sep 17 23:05:14 2012
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.rave.portal.web.mvc.controller;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.rave.portal.model.Page;
+import org.apache.rave.portal.model.PageInvitationStatus;
+import org.apache.rave.portal.model.PageUser;
+import org.apache.rave.portal.model.User;
+import org.apache.rave.portal.service.PageLayoutService;
+import org.apache.rave.portal.service.PageService;
+import org.apache.rave.portal.web.mvc.Named;
+import org.apache.rave.portal.web.mvc.NestedHandlerContext;
+import org.apache.rave.portal.web.mvc.Routed;
+import org.apache.rave.portal.web.util.ModelKeys;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@Routed
+@Controller
+public class UserPageTabsController {
+
+ private PageService pageService;
+ private PageLayoutService pageLayoutService;
+
+ @Autowired
+ public UserPageTabsController(PageService pageService, PageLayoutService pageLayoutService) {
+ this.pageService = pageService;
+ this.pageLayoutService = pageLayoutService;
+ }
+
+ @Named
+ @RequestMapping
+ public String render(NestedHandlerContext hc, @ModelAttribute("mobileDevice") boolean mobileDevice, @ModelAttribute User user, Model model) {
+ model.addAttribute(ModelKeys.PAGES, getAllPagesForAuthenticatedUser(user));
+ model.addAttribute(ModelKeys.PAGE_LAYOUTS, pageLayoutService.getAllUserSelectable());
+ if (mobileDevice) {
+ return hc.getConfig().getViewName() + "-mobile";
+ }
+ else {
+ return hc.getConfig().getViewName();
+ }
+ }
+
+ private List<Page> getAllPagesForAuthenticatedUser(User user) {
+ List<Page> pages = pageService.getAllUserPages(user.getId());
+ // we add pages to this list which the corresponding pageUser object is not set to "refused"
+ List<Page> viewablePages = new ArrayList<Page>();
+ for(Page page : pages){
+ for(PageUser pageUser : page.getMembers()){
+ if(pageUser != null && pageUser.getUser().equals(user) && !pageUser.getPageStatus().equals(PageInvitationStatus.REFUSED)){
+ viewablePages.add(page);
+ }
+ }
+ }
+ return viewablePages;
+ }
+}
Propchange: rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageTabsController.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/controller/UserPageTabsController.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/AuthenticatedUserInterceptor.java
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/AuthenticatedUserInterceptor.java?rev=1386900&view=auto
==============================================================================
--- rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/AuthenticatedUserInterceptor.java (added)
+++ rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/AuthenticatedUserInterceptor.java Mon Sep 17 23:05:14 2012
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.rave.portal.web.mvc.interceptors;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.rave.portal.service.UserService;
+import org.apache.rave.portal.web.mvc.PreHandleModelHandlerInterceptor;
+import org.apache.rave.portal.web.util.ModelKeys;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.ui.ExtendedModelMap;
+
+public class AuthenticatedUserInterceptor extends PreHandleModelHandlerInterceptor {
+
+ private final Logger logger = LoggerFactory.getLogger(getClass());
+
+ private UserService userService;
+
+ @Autowired
+ public AuthenticatedUserInterceptor(UserService userService) {
+ this.userService = userService;
+ }
+
+ @Override
+ protected boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler, final ExtendedModelMap modelMap) throws Exception {
+ modelMap.put(ModelKeys.USER, userService.getAuthenticatedUser());
+ return true;
+ }
+}
Propchange: rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/AuthenticatedUserInterceptor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/AuthenticatedUserInterceptor.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/MobileDeviceInterceptor.java
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/MobileDeviceInterceptor.java?rev=1386900&view=auto
==============================================================================
--- rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/MobileDeviceInterceptor.java (added)
+++ rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/MobileDeviceInterceptor.java Mon Sep 17 23:05:14 2012
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.rave.portal.web.mvc.interceptors;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.rave.portal.web.mvc.PreHandleModelHandlerInterceptor;
+import org.springframework.mobile.device.DeviceUtils;
+import org.springframework.ui.ExtendedModelMap;
+
+public class MobileDeviceInterceptor extends PreHandleModelHandlerInterceptor {
+
+ @Override
+ protected boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler, final ExtendedModelMap modelMap) throws Exception {
+ modelMap.addAttribute("mobileDevice", Boolean.valueOf(DeviceUtils.getCurrentDevice(request).isMobile()));
+ return true;
+ }
+}
Propchange: rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/MobileDeviceInterceptor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/MobileDeviceInterceptor.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/UserPageInterceptor.java
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/UserPageInterceptor.java?rev=1386900&view=auto
==============================================================================
--- rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/UserPageInterceptor.java (added)
+++ rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/UserPageInterceptor.java Mon Sep 17 23:05:14 2012
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.rave.portal.web.mvc.interceptors;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.rave.portal.model.Page;
+import org.apache.rave.portal.model.PageInvitationStatus;
+import org.apache.rave.portal.model.PageUser;
+import org.apache.rave.portal.model.User;
+import org.apache.rave.portal.service.PageService;
+import org.apache.rave.portal.web.mvc.PreHandleModelHandlerInterceptor;
+import org.apache.rave.portal.web.util.ModelKeys;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.ui.ExtendedModelMap;
+
+public class UserPageInterceptor extends PreHandleModelHandlerInterceptor {
+
+ private final Logger logger = LoggerFactory.getLogger(getClass());
+
+ private PageService pageService;
+
+ @Autowired
+ public UserPageInterceptor(PageService pageService) {
+ this.pageService = pageService;
+ }
+
+ @Override
+ protected boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler, final ExtendedModelMap modelMap) throws Exception {
+ Map<String, String> uriTemplateVariables = getUriTemplateVariables(request);
+ Long pageId = null;
+ User user = (User) modelMap.get(ModelKeys.USER);
+ if (user == null) {
+ throw new RuntimeException("Unresolved User Model attribute");
+ }
+ if (uriTemplateVariables.get("pageId") != null) {
+ pageId = Long.valueOf(uriTemplateVariables.get("pageId"));
+ }
+ Page page = null;
+ if (pageId != null) {
+ try {
+ page = pageService.getPage(pageId);
+ }
+ catch (Exception e) {
+ logger.info("unable to get page - possibly because a shared page was revoked by its owner");
+ }
+ }
+ if (page == null) {
+ List<Page> pages = pageService.getAllUserPages(user.getId());
+ // we find the first page in this list which the corresponding pageUser object is not set to "refused"
+ for(Page p : pages) {
+ for(PageUser pageUser : p.getMembers()){
+ if(pageUser != null && pageUser.getUser().equals(user) && !pageUser.getPageStatus().equals(PageInvitationStatus.REFUSED)){
+ page = p;
+ break;
+ }
+ }
+ if (page != null) {
+ break;
+ }
+ }
+ if (page == null) {
+ // create a new default page for the user
+ logger.info("User {} does not have any pages - creating default page", user.getUsername());
+ page = pageService.addNewDefaultUserPage(user.getId());
+ }
+ }
+ modelMap.put(ModelKeys.PAGE, page);
+
+ for(PageUser pageUser : page.getMembers()){
+ if(pageUser.getUser().equals(user)){
+ modelMap.addAttribute(ModelKeys.PAGE_USER, pageUser);
+ break;
+ }
+ }
+ return true;
+ }
+}
Propchange: rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/UserPageInterceptor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: rave/sandbox/content-services/demo-portal/src/main/java/org/apache/rave/portal/web/mvc/interceptors/UserPageInterceptor.java
------------------------------------------------------------------------------
svn:keywords = Id
Modified: rave/sandbox/content-services/demo-portal/src/main/resources/page-config.json
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/resources/page-config.json?rev=1386900&r1=1386899&r2=1386900&view=diff
==============================================================================
--- rave/sandbox/content-services/demo-portal/src/main/resources/page-config.json (original)
+++ rave/sandbox/content-services/demo-portal/src/main/resources/page-config.json Mon Sep 17 23:05:14 2012
@@ -3,26 +3,27 @@
"jcr:primaryType":"raveconfig:routes",
"r1":{
"jcr:primaryType":"raveconfig:route",
- "path":"/home",
+ "path":"/",
"target":"/userPage",
- "action":"defaultPage"
+ "interceptors":"userPage"
},
"r2":{
"jcr:primaryType":"raveconfig:route",
"path":"/page",
"target":"/userPage",
- "action":"defaultPage"
+ "interceptors":"userPage"
},
"r3":{
"jcr:primaryType":"raveconfig:route",
"path":"/page/view",
"target":"/userPage",
- "action":"defaultPage"
+ "interceptors":"userPage"
},
"r4":{
"jcr:primaryType":"raveconfig:route",
"path":"/page/view/{pageId}",
- "target":"/userPage"
+ "target":"/userPage",
+ "interceptors":"userPage"
},
"r5":{
"jcr:primaryType":"raveconfig:route",
@@ -35,7 +36,6 @@
"userPage":{
"jcr:primaryType":"raveconfig:pagefragment",
"name":"userPage",
- "controller":"org.apache.rave.portal.web.mvc.controller.UserPageController",
"extends":"extended",
"viewName":"jcr:/pages/userpage/page",
"body":{
@@ -45,19 +45,24 @@
"tabs":{
"jcr:primaryType":"raveconfig:pagefragment",
"name":"tabs",
+ "controller":"org.apache.rave.portal.web.mvc.controller.UserPageTabsController",
"viewName":"pages/userpage/page-tabs"
},
"content":{
"jcr:primaryType":"raveconfig:pagefragment",
"name":"content",
- "viewName":"pages/userpage/page-content"
+ "viewName":"pages/userpage/page-content",
+ "layout": {
+ "jcr:primaryType":"raveconfig:pagefragment",
+ "name":"layout",
+ "controller":"org.apache.rave.portal.web.mvc.controller.UserPageLayoutController"
+ }
}
}
},
"extended":{
"jcr:primaryType":"raveconfig:pagefragment",
"name":"extended",
- "controller":"org.apache.rave.portal.web.mvc.controller.UserPageController",
"extends":"standard",
"viewName":"pages/userpage/page",
"header":{
@@ -70,7 +75,6 @@
"standard":{
"jcr:primaryType":"raveconfig:pagefragment",
"name":"standard",
- "controller":"org.apache.rave.portal.web.mvc.controller.UserPageController",
"viewName":"pages/userpage/page",
"header":{
"jcr:primaryType":"raveconfig:pagefragment",
Copied: rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/layouts/columns_3_newuser.jsp (from r1385243, rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/layouts/columns_3_newuser.jsp)
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/layouts/columns_3_newuser.jsp?p2=rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/layouts/columns_3_newuser.jsp&p1=rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/layouts/columns_3_newuser.jsp&r1=1385243&r2=1386900&rev=1386900&view=diff
==============================================================================
--- rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/layouts/columns_3_newuser.jsp (original)
+++ rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/layouts/columns_3_newuser.jsp Mon Sep 17 23:05:14 2012
@@ -19,7 +19,6 @@
--%>
<fmt:setBundle basename="messages"/>
-<%--@elvariable id="page" type="org.apache.rave.portal.model.Page"--%>
<div class="columns_3_newuser_static">
<fmt:message key="page.layout.newuser.introtext"/>
</div>
Added: rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/layouts/mobile.jsp
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/layouts/mobile.jsp?rev=1386900&view=auto
==============================================================================
--- rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/layouts/mobile.jsp (added)
+++ rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/layouts/mobile.jsp Mon Sep 17 23:05:14 2012
@@ -0,0 +1,41 @@
+<%--
+ ~ 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 language="java" trimDirectiveWhitespaces="true" %>
+<%@ include file="/WEB-INF/jsp/includes/taglibs.jsp" %>
+<%-- the mobile view will only show one column of widgets --%>
+<div id="pageContent" class="pageContent-mobile">
+ <c:forEach var="region" items="${page.regions}">
+ <div class="region-mobile" id="region-${region.id}-id">
+ <c:forEach var="regionWidget" items="${region.regionWidgets}">
+ <div class="widget-wrapper widget-wrapper-mobile" id="widget-${regionWidget.id}-wrapper">
+ <div class="widget-title-bar widget-title-bar-mobile" onclick="rave.toggleMobileWidget(${regionWidget.id});">
+ <span id="widget-${regionWidget.id}-collapse" class="widget-toolbar-toggle-collapse" title="<fmt:message key="widget.chrome.toggle"/>"></span>
+ <div id="widget-${regionWidget.id}-title" class="widget-title">
+ <c:out value="${regionWidget.widget.title}"/>
+ </div>
+ </div>
+ <div class="widget-prefs" id="widget-${regionWidget.id}-prefs-content"></div>
+ <div class="widget widget-mobile" id="widget-${regionWidget.id}-body">
+ <portal:render-widget regionWidget="${regionWidget}" />
+ </div>
+ </div>
+ </c:forEach>
+ </div>
+ </c:forEach>
+</div>
Propchange: rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/layouts/mobile.jsp
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/layouts/mobile.jsp
------------------------------------------------------------------------------
svn:keywords = Id
Modified: rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-body.jsp
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-body.jsp?rev=1386900&r1=1386899&r2=1386900&view=diff
==============================================================================
--- rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-body.jsp (original)
+++ rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-body.jsp Mon Sep 17 23:05:14 2012
@@ -1,26 +1,5 @@
<%@ page language="java" trimDirectiveWhitespaces="true" %>
<%@ include file="/WEB-INF/jsp/includes/taglibs.jsp" %>
<%@ taglib uri="http://www.apache-rave.org/jsp/hmvc" prefix="rave-hmvc" %>
-<jsp:useBean id="pageUser" type="org.apache.rave.portal.model.PageUser" scope="request"/>
-<sec:authentication property="principal.username" var="principleUsername" scope="request"/>
-
<rave-hmvc:include ref="tabs"/>
-<rave-hmvc:include ref="content"/>
-
-<portal:register-init-script location="${'AFTER_RAVE'}">
- <script>
- $(function () {
- rave.initPageEditorStatus(<c:out value="${pageUser.editor}"/>);
- rave.initProviders();
- rave.initWidgets();
- rave.initUI();
- rave.layout.init();
- rave.layout.searchHandler.setDefaults("<c:out value="${principleUsername}"/>", "<sec:authentication property="principal.id" />", "<c:out value="${page.id}"/>", "${pageUser.pageStatus}");
- rave.runOnPageInitializedHandlers();
- });
- </script>
- <c:forEach var="members" items="${page.members}">
- <script>rave.layout.searchHandler.addExistingMember("${members.user.username}", ${members.editor});</script>
- </c:forEach>
-</portal:register-init-script>
-
+<rave-hmvc:include ref="content"/>
\ No newline at end of file
Copied: rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-content-mobile.jsp (from r1385242, rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-content.jsp)
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-content-mobile.jsp?p2=rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-content-mobile.jsp&p1=rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-content.jsp&r1=1385242&r2=1386900&rev=1386900&view=diff
==============================================================================
--- rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-content.jsp (original)
+++ rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-content-mobile.jsp Mon Sep 17 23:05:14 2012
@@ -1,38 +1,32 @@
-<%@ page language="java" trimDirectiveWhitespaces="true" %>
-<%@ include file="/WEB-INF/jsp/includes/taglibs.jsp" %>
-<fmt:setBundle basename="messages"/>
-<jsp:useBean id="pageUser" type="org.apache.rave.portal.model.PageUser" scope="request"/>
-<div class="row-fluid">
- <div id="emptyPageMessageWrapper" class="emptyPageMessageWrapper hidden">
- <div class="emptyPageMessage">
- <c:choose>
- <c:when test="${pageUser.editor == true}">
- <a href="<spring:url value="/app/store?referringPageId=${page.id}" />"><fmt:message key="page.general.empty"/></a>
- </c:when>
- <c:otherwise>
- <fmt:message key="page.general.non.editing.empty"/>
- </c:otherwise>
- </c:choose>
- </div>
- </div>
- <div class="regions">
- <%-- insert the region layout template --%>
+<%--
+ 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
- <%-- TODO: hardcoded columns_3_newuser template for now --%>
- <div class="columns_3_newuser_static">
- <fmt:message key="page.layout.newuser.introtext"/>
- </div>
+ http://www.apache.org/licenses/LICENSE-2.0
- <div class="columns_3_newuser_widgets">
- <div class="columns_3_newuser_subtitle"><fmt:message key="page.layout.newuser.subtitle"/></div>
- <div class="widgetRow upperRow">
- <rave:region region="${page.regions[0]}" regionIdx="1" />
- <rave:region region="${page.regions[1]}" regionIdx="2" />
- </div>
- <div class="widgetRow bottomRow">
- <rave:region region="${page.regions[2]}" regionIdx="3" />
- </div>
- </div>
- </div>
- <div class="clear-float"> </div>
-</div>
+ 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 language="java" trimDirectiveWhitespaces="true" %>
+<%@ include file="/WEB-INF/jsp/includes/taglibs.jsp" %>
+<%@ taglib uri="http://www.apache-rave.org/jsp/hmvc" prefix="rave-hmvc" %>
+<rave-hmvc:include ref="layout"/>
+<portal:register-init-script location="${'AFTER_RAVE'}">
+ <script>
+ $(function() {
+ rave.initPageEditorStatus(<c:out value="${pageUser.editor}"/>);
+ rave.setMobile(true);
+ rave.initProviders();
+ rave.initWidgets();
+ });
+ </script>
+</portal:register-init-script>
\ No newline at end of file
Modified: rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-content.jsp
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-content.jsp?rev=1386900&r1=1386899&r2=1386900&view=diff
==============================================================================
--- rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-content.jsp (original)
+++ rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-content.jsp Mon Sep 17 23:05:14 2012
@@ -1,10 +1,30 @@
+<%--
+ 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 language="java" trimDirectiveWhitespaces="true" %>
<%@ include file="/WEB-INF/jsp/includes/taglibs.jsp" %>
+<%@ taglib uri="http://www.apache-rave.org/jsp/hmvc" prefix="rave-hmvc" %>
<fmt:setBundle basename="messages"/>
-<jsp:useBean id="pageUser" type="org.apache.rave.portal.model.PageUser" scope="request"/>
+<sec:authentication property="principal.username" var="principleUsername" scope="request"/>
<div class="row-fluid">
<div id="emptyPageMessageWrapper" class="emptyPageMessageWrapper hidden">
- <div class="emptyPageMessage">
+ <c:if test="${pageUser.pageStatus != 'PENDING'}">
+ <div class="emptyPageMessage">
<c:choose>
<c:when test="${pageUser.editor == true}">
<a href="<spring:url value="/app/store?referringPageId=${page.id}" />"><fmt:message key="page.general.empty"/></a>
@@ -14,25 +34,50 @@
</c:otherwise>
</c:choose>
</div>
+ </c:if>
</div>
- <div class="regions">
- <%-- insert the region layout template --%>
-
- <%-- TODO: hardcoded columns_3_newuser template for now --%>
- <div class="columns_3_newuser_static">
- <fmt:message key="page.layout.newuser.introtext"/>
+ <c:choose>
+ <c:when test="${pageUser.pageStatus != 'PENDING'}">
+ <div class="regions">
+ <%-- insert the region layout template --%>
+ <rave-hmvc:include ref="layout"/>
</div>
-
- <div class="columns_3_newuser_widgets">
- <div class="columns_3_newuser_subtitle"><fmt:message key="page.layout.newuser.subtitle"/></div>
- <div class="widgetRow upperRow">
- <rave:region region="${page.regions[0]}" regionIdx="1" />
- <rave:region region="${page.regions[1]}" regionIdx="2" />
+ <div class="clear-float"> </div>
+ </c:when>
+ <c:otherwise>
+ <div class="emptyPageMessage">
+ <div>
+ <div id="confirmSharePageLegend">
+ <fmt:message key="sharing.page.confirm.message">
+ <fmt:param value="${page.owner.username}"/>
+ </fmt:message>
+ </div>
+ </div>
+ <div> </div>
+ <div>
+ <a href="#" onclick="rave.layout.searchHandler.acceptShare()"><fmt:message key="_rave_client.common.accept"/></a>
</div>
- <div class="widgetRow bottomRow">
- <rave:region region="${page.regions[2]}" regionIdx="3" />
+ <div>
+ <a href="#" onclick="rave.layout.searchHandler.declineShare();"><fmt:message key="_rave_client.common.decline"/></a>
</div>
+ <div class="clear-float"> </div>
</div>
- </div>
- <div class="clear-float"> </div>
+ </c:otherwise>
+ </c:choose>
</div>
+<portal:register-init-script location="${'AFTER_RAVE'}">
+ <script>
+ $(function () {
+ rave.initPageEditorStatus(<c:out value="${pageUser.editor}"/>);
+ rave.initProviders();
+ rave.initWidgets();
+ rave.initUI();
+ rave.layout.init();
+ rave.layout.searchHandler.setDefaults("<c:out value="${principleUsername}"/>", "<sec:authentication property="principal.id" />", "<c:out value="${page.id}"/>", "${pageUser.pageStatus}");
+ rave.runOnPageInitializedHandlers();
+ });
+ </script>
+ <c:forEach var="members" items="${page.members}">
+ <script>rave.layout.searchHandler.addExistingMember("${members.user.username}", ${members.editor});</script>
+ </c:forEach>
+</portal:register-init-script>
Copied: rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-tabs-mobile.jsp (from r1385242, rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-tabs.jsp)
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-tabs-mobile.jsp?p2=rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-tabs-mobile.jsp&p1=rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-tabs.jsp&r1=1385242&r2=1386900&rev=1386900&view=diff
==============================================================================
--- rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-tabs.jsp (original)
+++ rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-tabs-mobile.jsp Mon Sep 17 23:05:14 2012
@@ -1,244 +1,97 @@
+<%--
+ 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 language="java" trimDirectiveWhitespaces="true" %>
<%@ include file="/WEB-INF/jsp/includes/taglibs.jsp" %>
<fmt:setBundle basename="messages"/>
-<jsp:useBean id="pages" type="java.util.List<org.apache.rave.portal.model.Page>" scope="request"/>
-<jsp:useBean id="pageUser" type="org.apache.rave.portal.model.PageUser" scope="request"/>
-<jsp:useBean id="pageLayouts" type="java.util.List<org.apache.rave.portal.model.JpaPageLayout>" scope="request"/>
-
-<c:set var="hasOnlyOnePage" scope="request">
- <c:choose>
- <c:when test="${fn:length(pages) == 1}">true</c:when>
- <c:otherwise>false</c:otherwise>
- </c:choose>
-</c:set>
-<c:set var="canMoveWidgetsToEditablePage" scope="request" value="false"/>
-
-<div id="pageContent" class="container-fluid">
- <nav>
- <ul class="nav nav-tabs">
- <c:forEach var="userPage" items="${pages}">
- <%-- determine if the current page in the list matches the page the user is viewing --%>
- <c:set var="isCurrentPage">
- <c:choose>
- <c:when test="${page.id == userPage.id}">true</c:when>
- <c:otherwise>false</c:otherwise>
- </c:choose>
- </c:set>
- <c:set var="isSharedToMe">
- <c:choose>
- <c:when test="${userPage.owner.username == principleUsername}">false</c:when>
- <c:otherwise>true</c:otherwise>
- </c:choose>
- </c:set>
- <c:set var="isSharedByMe">
- <c:choose>
- <c:when test="${fn:length(userPage.members) > 1 and isSharedToMe == false}">true</c:when>
- <c:otherwise>false</c:otherwise>
- </c:choose>
- </c:set>
- <fmt:message key="sharing.page.tab.icon.tip.from" var="iconShareToolTipFrom">
- <fmt:param value="${userPage.owner.username}"/>
- </fmt:message>
- <fmt:message key="sharing.page.tab.icon.tip.to" var="iconShareToolTipTo"/>
+<div id="tabsHeader">
+ <%-- render the page links --%>
+ <div id="tabs" class="rave-ui-tabs">
+ <c:forEach var="userPage" items="${pages}">
+ <%-- determine if the current page in the list matches the page the user is viewing --%>
+ <c:set var="isCurrentPage">
<c:choose>
- <c:when test="${isCurrentPage}">
- <li id="tab-${userPage.id}" class="active dropdown" >
- <a href="#" class="dropdown-toggle" data-toggle="dropdown">
- <c:if test="${isSharedToMe}">
- <b id="pageMenuSharedIcon" class="ui-icon ui-icon-person" title="<c:out value="${iconShareToolTipFrom}"/>"></b>
- </c:if>
- <c:if test="${isSharedByMe}">
- <b id="pageMenuSharedIcon" class="ui-icon ui-icon-folder-open" title="<c:out value="${iconShareToolTipTo}"/>"></b>
- </c:if>
- <c:out value="${userPage.name}"/>
- <b class="caret"></b>
- </a>
- <ul class="dropdown-menu" >
- <li id="pageMenuEdit" class="<c:if test="${isSharedToMe}">menu-item-disabled</c:if>"><a href="#"><fmt:message key="page.general.editpage"/></a></li>
- <li id="pageMenuDelete" class="<c:if test='${hasOnlyOnePage or isSharedToMe}'>menu-item-disabled</c:if>"><a href="#"><fmt:message key="page.general.deletepage"/></a></li>
- <li id="pageMenuMove" class="<c:if test='${hasOnlyOnePage}'>menu-item-disabled</c:if>"><a href="#"><fmt:message key="page.general.movepage"/></a></li>
- <li id="pageMenuShare" class="<c:if test="${isSharedToMe}">menu-item-disabled</c:if>"><a href="#"><fmt:message key="page.general.sharepage"/></a></li>
- <li id="pageMenuRevokeShare" class="<c:if test="${isSharedToMe == false}">menu-item-disabled</c:if>"><a href="#"><fmt:message key="page.general.removeshare"/></a></li>
- </ul>
- </li>
- </c:when>
- <c:otherwise>
- <li id="tab-${userPage.id}" onclick="rave.viewPage(${userPage.id});">
- <c:choose>
- <c:when test="${isSharedToMe}">
- <a href="#" class="rave-ui-tab-shared-to-me">
- <b id="pageMenuSharedIcon" class="ui-icon ui-icon-person" title="<c:out value="${iconShareToolTipFrom}"/>"></b>
- <c:out value="${userPage.name}"/>
- </a>
- </c:when>
- <c:when test="${isSharedByMe}">
- <a href="#" class="rave-ui-tab-shared-by-me">
- <b id="pageMenuSharedIcon" class="ui-icon ui-icon-folder-open" title="<c:out value="${iconShareToolTipTo}"/>"></b>
- <c:out value="${userPage.name}"/>
- </a>
- </c:when>
- <c:otherwise>
- <a href="#"><c:out value="${userPage.name}"/></a>
- </c:otherwise>
- </c:choose>
- </li>
- </c:otherwise>
+ <c:when test="${page.id == userPage.id}">true</c:when>
+ <c:otherwise>false</c:otherwise>
</c:choose>
- <c:forEach var="members" items="${userPage.members}">
- <c:if test="${members.user.username == principleUsername and members.editor and userPage.id != page.id}">
- <c:set var="canMoveWidgetsToEditablePage" scope="request" value="true"/>
- </c:if>
- </c:forEach>
+ </c:set>
+ <div id="tab-${userPage.id}" class="rave-ui-tab rave-ui-tab-mobile<c:if test="${isCurrentPage}"> rave-ui-tab-selected rave-ui-tab-selected-mobile</c:if>">
+ <div id="pageTitle-${userPage.id}" class="page-title" onclick="rave.viewPage(${userPage.id});"><c:out value="${userPage.name}"/></div>
+ </div>
+ </c:forEach>
+ <%-- display the add page button at the end of the tabs --%>
+ <fmt:message key="page.general.addnewpage" var="addNewPageTitle"/>
+ <button id="add_page" title="${addNewPageTitle}" style="display: none;"></button>
+ </div>
+</div>
+<fmt:message key="page.general.addnewpage" var="addNewPageTitle"/>
+<div id="dialog" title="${addNewPageTitle}" class="dialog hidden">
+ <form id="pageForm">
+ <div id="pageFormErrors" class="error"></div>
+ <fieldset class="ui-helper-reset">
+ <input type="hidden" name="tab_id" id="tab_id" value="" />
+ <label for="tab_title"><fmt:message key="page.general.addpage.title"/></label>
+ <input type="text" name="tab_title" id="tab_title" value="" class="required ui-widget-content ui-corner-all" />
+ <label for="pageLayout"><fmt:message key="page.general.addpage.selectlayout"/></label>
+ <select name="pageLayout" id="pageLayout">
+ <option value="columns_1" id="columns_1_id"><fmt:message key="page.general.addpage.layout.columns_1"/></option>
+ <option value="columns_2" id="columns_2_id" selected="selected"><fmt:message key="page.general.addpage.layout.columns_2"/></option>
+ <option value="columns_2wn" id="columns_2wn_id"><fmt:message key="page.general.addpage.layout.columns_2wn"/></option>
+ <option value="columns_3" id="columns_3_id"><fmt:message key="page.general.addpage.layout.columns_3"/></option>
+ <option value="columns_3nwn" id="columns_3nwn_id"><fmt:message key="page.general.addpage.layout.columns_3nwn"/></option>
+ <option value="columns_4" id="columns_4_id"><fmt:message key="page.general.addpage.layout.columns_4"/></option>
+ <option value="columns_3nwn_1_bottom" id="columns_3nwn_1_bottom"><fmt:message key="page.general.addpage.layout.columns_3nwn_1_bottom"/></option>
+ </select>
+ </fieldset>
+ </form>
+</div>
+<fmt:message key="page.general.movepage" var="movePageTitle"/>
+<div id="movePageDialog" title="${movePageTitle}" class="dialog hidden">
+ <div><fmt:message key="page.general.movethispage"/></div>
+ <form id="movePageForm">
+ <select id="moveAfterPageId">
+ <c:if test="${pageUser.renderSequence != 1}">
+ <option value="-1"><fmt:message key="page.general.movethispage.tofirst"/></option>
+ </c:if>
+ <c:forEach var="userPage" items="${pages}">
+ <c:if test="${userPage.id != page.id}">
+ <option value="${userPage.id}">
+ <fmt:message key="page.general.movethispage.after">
+ <fmt:param><c:out value="${userPage.name}"/></fmt:param>
+ </fmt:message>
+ </option>
+ </c:if>
</c:forEach>
- <li id="addPageButton"><a href="#"><i class="icon-plus"></i></a></li>
- </ul>
- </nav>
-</div>
-
-<div id="pageMenuDialog" class="modal hide" data-backdrop="static">
- <div class="modal-header">
- <a href="#" class="close" data-dismiss="modal">×</a>
- <h3 id="pageMenuDialogHeader"></h3>
- </div>
- <div class="modal-body">
- <form id="pageForm" class="form-horizontal">
- <input type="hidden" name="tab_id" id="tab_id" value=""/>
- <fieldset>
- <div class="control-group error">
- <label id="pageFormErrors" class="control-label"></label>
- </div>
- <div class="control-group">
- <label class="control-label" for="tab_title"><fmt:message key="page.general.addpage.title"/></label>
- <div class="controls">
- <input id="tab_title" name="tab_title" class="input-xlarge focused required" type="text" value="" />
- </div>
- </div>
- <div class="control-group">
- <label class="control-label" for="pageLayout"><fmt:message key="page.general.addpage.selectlayout"/></label>
- <div class="controls">
- <select name="pageLayout" id="pageLayout">
- <c:forEach var="pageLayout" items="${pageLayouts}">
- <option value="${pageLayout.code}" id="${pageLayout.code}_id">
- <fmt:message key="page.general.addpage.layout.${pageLayout.code}"/></option>
- </c:forEach>
- </select>
- </div>
- </div>
- </fieldset>
- </form>
- </div>
- <div class="modal-footer">
- <a id="pageMenuCloseButton" href="#" class="btn"><fmt:message key="_rave_client.common.cancel"/></a>
- <a id="pageMenuUpdateButton" href="#" class="btn btn-primary"></a>
- </div>
-</div>
-
-<div id="movePageDialog" class="modal hide" data-backdrop="static">
- <div class="modal-header">
- <a href="#" class="close" data-dismiss="modal">×</a>
- <h3><fmt:message key="page.general.movethispage"/></h3>
- </div>
- <div class="modal-body">
- <form id="movePageForm" class="form-horizontal">
- <fieldset>
- <div class="control-group">
- <div class="controls">
- <select id="moveAfterPageId">
- <c:if test="${pageUser.renderSequence != 1}">
- <option value="-1"><fmt:message key="page.general.movethispage.tofirst"/></option>
- </c:if>
- <c:forEach var="userPage" items="${pages}">
- <c:if test="${userPage.id != page.id}">
- <option value="${userPage.id}">
- <fmt:message key="page.general.movethispage.after">
- <fmt:param><c:out value="${userPage.name}"/></fmt:param>
- </fmt:message>
- </option>
- </c:if>
- </c:forEach>
- </select>
- </div>
- </div>
- </fieldset>
- </form>
- </div>
- <div class="modal-footer">
- <a href="#" class="btn" onclick="$('#movePageDialog').modal('hide');"><fmt:message key="_rave_client.common.cancel"/></a>
- <a href="#" class="btn btn-primary" onclick="rave.layout.movePage();"><fmt:message key="page.general.movepage"/></a>
- </div>
+ </select>
+ </form>
</div>
-
<fmt:message key="widget.menu.movetopage" var="moveWidgetToPageTitle"/>
-<div id="moveWidgetModal" class="modal hide" data-backdrop="static">
- <div class="modal-header">
- <a href="#" class="close" data-dismiss="modal">×</a>
- <h3><fmt:message key="widget.menu.movethiswidget"/></h3>
- </div>
- <div class="modal-body">
- <form id="moveWidgetForm" class="form-horizontal">
- <fieldset>
- <div class="control-group">
- <div class="controls">
- <select id="moveToPageId">
- <c:forEach var="userPage" items="${pages}">
- <c:forEach var="members" items="${userPage.members}">
- <c:if test="${members.user.username == principleUsername and members.editor and userPage.id != page.id}">
- <option value="${userPage.id}">
- <c:out value="${userPage.name}"/>
- </option>
- </c:if>
- </c:forEach>
- </c:forEach>
- </select>
- </div>
- </div>
- </fieldset>
- </form>
- </div>
- <div class="modal-footer">
- <a href="#" class="btn" onclick="$('#moveWidgetModal').modal('hide');"><fmt:message key="_rave_client.common.cancel"/></a>
- <a href="#" class="btn btn-primary" onclick="rave.layout.moveWidgetToPage($('#moveWidgetModal').data('regionWidgetId'));"><fmt:message key="_rave_client.common.move"/></a>
- </div>
-</div>
-
-<div id="sharePageDialog" class="modal hide" data-backdrop="static">
- <div class="modal-header">
- <a href="#" class="close" data-dismiss="modal">×</a>
- <h3><fmt:message key="page.general.search.title"/></h3>
- </div>
- <div class="modal-body">
- <div id="sharePageDialogContent" >
- <div id="shareContent">
- <div id="searchControls"><input id="searchTerm" name="searchTerm" type="text"/>
- <input id="shareSearchButton" value="<fmt:message key="page.store.search.button"/>" type="submit"/>
- <input id="clearSearchButton" value="<fmt:message key="admin.clearsearch"/>" type="submit" class="hide"/>
- </div>
- <div id="shareSearchListHeader"></div>
- <div id="shareSearchListPaging"></div>
- <div id="shareSearchResults"></div>
- </div>
- </div>
- </div>
- <div class="modal-footer">
- <a href="#" class="btn" onclick="$('#sharePageDialog').modal('hide');"><fmt:message key="_rave_client.common.cancel"/></a>
- </div>
-</div>
-
-<div id="confirmSharePageDialog" class="modal hide" data-backdrop="static">
- <div class="modal-header">
- <a href="#" class="close" data-dismiss="modal">×</a>
- <h3><fmt:message key="sharing.dialog.confirm.title"/></h3>
- </div>
- <div class="modal-body">
- <div id="confirmSharePageDialogLegend">
- <fmt:message key="sharing.dialog.confirm.message">
- <fmt:param value="${page.owner.username}"/>
- </fmt:message>
- </div>
- </div>
- <div class="modal-footer">
- <a href="#" class="btn btn-primary" onclick="rave.layout.searchHandler.acceptShare()"><fmt:message key="_rave_client.common.accept"/></a>
- <a href="#" class="btn" onclick="rave.layout.searchHandler.declineShare();"><fmt:message key="_rave_client.common.decline"/></a>
- <a href="#" class="btn" onclick="$('#confirmSharePageDialog').modal('hide');"><fmt:message key="_rave_client.common.cancel"/></a>
- </div>
+<div id="moveWidgetDialog" title="${moveWidgetToPageTitle}" class="dialog hidden">
+ <div><fmt:message key="widget.menu.movethiswidget"/></div>
+ <form id="moveWidgetForm">
+ <select id="moveToPageId">
+ <c:forEach var="userPage" items="${pages}">
+ <c:if test="${userPage.id != page.id}">
+ <option value="${userPage.id}">
+ <c:out value="${userPage.name}"/>
+ </option>
+ </c:if>
+ </c:forEach>
+ </select>
+ </form>
</div>
Modified: rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-tabs.jsp
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-tabs.jsp?rev=1386900&r1=1386899&r2=1386900&view=diff
==============================================================================
--- rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-tabs.jsp (original)
+++ rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/jsp/views/pages/userpage/page-tabs.jsp Mon Sep 17 23:05:14 2012
@@ -1,9 +1,7 @@
<%@ page language="java" trimDirectiveWhitespaces="true" %>
<%@ include file="/WEB-INF/jsp/includes/taglibs.jsp" %>
<fmt:setBundle basename="messages"/>
-<jsp:useBean id="pages" type="java.util.List<org.apache.rave.portal.model.Page>" scope="request"/>
-<jsp:useBean id="pageUser" type="org.apache.rave.portal.model.PageUser" scope="request"/>
-<jsp:useBean id="pageLayouts" type="java.util.List<org.apache.rave.portal.model.JpaPageLayout>" scope="request"/>
+<sec:authentication property="principal.username" var="principleUsername" scope="request"/>
<c:set var="hasOnlyOnePage" scope="request">
<c:choose>
Modified: rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/nested-dispatcher-servlet.xml
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/nested-dispatcher-servlet.xml?rev=1386900&r1=1386899&r2=1386900&view=diff
==============================================================================
--- rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/nested-dispatcher-servlet.xml (original)
+++ rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/nested-dispatcher-servlet.xml Mon Sep 17 23:05:14 2012
@@ -147,10 +147,22 @@
<constructor-arg index="4" value="true"/>
</bean>
+ <util:map id="routeInterceptors">
+ <entry key="userPage">
+ <list>
+ <bean class="org.apache.rave.portal.web.mvc.interceptors.MobileDeviceInterceptor"/>
+ <bean class="org.apache.rave.portal.web.mvc.interceptors.AuthenticatedUserInterceptor"/>
+ <bean class="org.apache.rave.portal.web.mvc.interceptors.UserPageInterceptor"/>
+ </list>
+ </entry>
+ </util:map>
+
<!-- JCR|File based LOADING -->
<bean name="nestedHandlerMethodHandlerMapping" class="org.apache.rave.portal.web.mvc.NestedHandlerMethodHandlerMapping">
<property name="order" value="-1"/>
<property name="configManager" ref="enhancedPagesConfigManager"/>
+ <property name="interceptors" ref="interceptors"/>
+ <property name="routeInterceptors" ref="routeInterceptors"/>
</bean>
<bean id="jcrPagesConfigManager" class="org.apache.rave.portal.web.mvc.config.jcr.JcrPagesConfigManager" destroy-method="shutdown">
Modified: rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/page-definitions.xml
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/page-definitions.xml?rev=1386900&r1=1386899&r2=1386900&view=diff
==============================================================================
--- rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/page-definitions.xml (original)
+++ rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/page-definitions.xml Mon Sep 17 23:05:14 2012
@@ -19,12 +19,21 @@
-->
<pageDefinitions name="default">
- <pageFragment name="/userPage" viewName="pages/userpage/page" controller="org.apache.rave.portal.web.mvc.controller.UserPageController">
- <pageFragment name="header" viewName="pages/userpage/page-header" controller="org.apache.rave.portal.web.mvc.controller.PageHeaderController"/>
- <pageFragment name="body" viewName="pages/userpage/page-body">
- <pageFragment name="tabs" viewName="pages/userpage/page-tabs"/>
- <pageFragment name="content" viewName="pages/userpage/page-content"/>
+ <pageFragment name="userPage" viewName="jcr:/pages/userpage/page" extends="extended">
+ <pageFragment name="body" viewName="pages/userpage/page-body">
+ <pageFragment name="tabs" viewName="pages/userpage/page-tabs" controller="org.apache.rave.portal.web.mvc.controller.UserPageTabsController"/>
+ <pageFragment name="content" viewName="pages/userpage/page-content" controller="org.apache.rave.portal.web.mvc.controller.UserPageContentController">
+ <pageFragment name="layout" controller="org.apache.rave.portal.web.mvc.controller.UserPageLayoutController"/>
+ </pageFragment>
</pageFragment>
+ </pageFragment>
+
+ <pageFragment name="extended" viewName="pages/userpage/page" extends="standard">
+ <pageFragment name="header" viewName="pages/userpage/page-header" controller="org.apache.rave.portal.web.mvc.controller.PageHeaderController"/>
+ </pageFragment>
+
+ <pageFragment name="standard" viewName="pages/userpage/page">
+ <pageFragment name="header" viewName="pages/header"/>
<pageFragment name="footer" viewName="pages/footer"/>
</pageFragment>
Modified: rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/routes.xml
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/routes.xml?rev=1386900&r1=1386899&r2=1386900&view=diff
==============================================================================
--- rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/routes.xml (original)
+++ rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/routes.xml Mon Sep 17 23:05:14 2012
@@ -18,9 +18,9 @@
under the License.
-->
<routes name="default">
- <route path="/" target="/userPage" action="defaultPage"/>
- <route path="/page" target="/userPage" action="defaultPage"/>
- <route path="/page/view" target="/userPage" action="defaultPage"/>
- <route path="/page/view/{pageId}" target="/userPage"/>
+ <route path="/" target="/userPage" interceptors="userPage"/>
+ <route path="/page" target="/userPage" interceptors="userPage"/>
+ <route path="/page/view" target="/userPage" interceptors="userPage"/>
+ <route path="/page/view/{pageId}" target="/userPage" interceptors="userPage"/>
<route path="/dynapi/rest/widgets" target="org.apache.rave.portal.web.mvc.api.rest.DynWidgetApi"/>
</routes>