[pal-cvs 2550] [282] added layout editor.

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2007年 7月 17日 (火) 16:56:43 JST


Revision: 282
          http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=pal&view=rev&rev=282
Author:   shinsuke
Date:     2007-07-17 16:56:43 +0900 (Tue, 17 Jul 2007)

Log Message:
-----------
added layout editor.

Modified Paths:
--------------
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/dxo/SiteEditorDxo.java
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/logic/SiteEditorLogic.java
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/service/SiteEditorService.java
    pal-admin/trunk/src/main/resources/appMessages.properties
    pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/site/label.properties

Added Paths:
-----------
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/site/LayoutInfoEditorPage.java
    pal-admin/trunk/src/main/webapp/view/site/layoutInfoEditor.html


-------------- next part --------------
Modified: pal-admin/trunk/src/main/java/jp/sf/pal/admin/dxo/SiteEditorDxo.java
===================================================================
--- pal-admin/trunk/src/main/java/jp/sf/pal/admin/dxo/SiteEditorDxo.java	2007-07-17 06:07:11 UTC (rev 281)
+++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/dxo/SiteEditorDxo.java	2007-07-17 07:56:43 UTC (rev 282)
@@ -4,10 +4,13 @@
 import java.util.Map;
 
 import jp.sf.pal.admin.web.site.FolderInfoEditorPage;
+import jp.sf.pal.admin.web.site.LayoutInfoEditorPage;
 import jp.sf.pal.admin.web.site.PageInfoEditorPage;
 
 public interface SiteEditorDxo extends Serializable {
     public void convert(Map<String, Object> list, PageInfoEditorPage page);
 
     public void convert(Map<String, Object> list, FolderInfoEditorPage page);
+
+    public void convert(Map<String, Object> list, LayoutInfoEditorPage page);
 }

Modified: pal-admin/trunk/src/main/java/jp/sf/pal/admin/logic/SiteEditorLogic.java
===================================================================
--- pal-admin/trunk/src/main/java/jp/sf/pal/admin/logic/SiteEditorLogic.java	2007-07-17 06:07:11 UTC (rev 281)
+++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/logic/SiteEditorLogic.java	2007-07-17 07:56:43 UTC (rev 282)
@@ -16,6 +16,7 @@
 
 import org.apache.jetspeed.PortalReservedParameters;
 import org.apache.jetspeed.decoration.DecorationFactory;
+import org.apache.jetspeed.decoration.LayoutInfo;
 import org.apache.jetspeed.om.folder.Folder;
 import org.apache.jetspeed.om.folder.FolderNotFoundException;
 import org.apache.jetspeed.om.folder.InvalidFolderException;
@@ -334,7 +335,7 @@
         if (index < 0) {
             return null;
         }
-        return path.substring(index);
+        return path.substring(index + 2);
     }
 
     protected String getLayoutOrPortletName(String name) {
@@ -345,6 +346,19 @@
         return name.substring(index + 2);
     }
 
+    public List<Map<String, String>> createLayoutNamesList() {
+        List<Map<String, String>> list = new ArrayList<Map<String, String>>();
+        for (Iterator<LayoutInfo> itr = getDecorationFactory().getLayouts(
+                getRequestContext()).iterator(); itr.hasNext();) {
+            Map<String, String> map = new HashMap<String, String>();
+            LayoutInfo value = itr.next();
+            map.put("label", value.getDisplayName());
+            map.put("value", value.getName());
+            list.add(map);
+        }
+        return list;
+    }
+
     public List<Map<String, String>> createPageDecorationsList() {
         List<Map<String, String>> list = new ArrayList<Map<String, String>>();
         for (Iterator<String> itr = getDecorationFactory().getPageDecorations(
@@ -389,7 +403,7 @@
     public Map<String, Object> getPageInfo(String path) throws CommonException {
         Map<String, Object> map = new HashMap<String, Object>();
 
-        Page page = getPage(path);
+        Page page = getPage(getFolderOrPagePath(path));
         if (page != null) {
             map.put("pageTitle", page.getTitle());
             map.put("pageShortTitle", page.getShortTitle());
@@ -449,7 +463,7 @@
             String pageShortTitle, String pageDecorator,
             String portletDecorator, String desktopTheme, boolean pageHidden)
             throws CommonException {
-        Page page = getPage(path);
+        Page page = getPage(getFolderOrPagePath(path));
         if (page == null) {
             throw new CommonException("could.not.find.page",
                     "Could not find a page: " + path);
@@ -475,7 +489,7 @@
             throws CommonException {
         Map<String, Object> map = new HashMap<String, Object>();
 
-        Folder folder = getFolder(path);
+        Folder folder = getFolder(getFolderOrPagePath(path));
         if (folder != null) {
             map.put("folderTitle", folder.getTitle());
             map.put("folderShortTitle", folder.getShortTitle());
@@ -531,7 +545,7 @@
             String pageShortTitle, String pageDecorator,
             String portletDecorator, String desktopTheme, boolean pageHidden)
             throws CommonException {
-        Folder folder = getFolder(path);
+        Folder folder = getFolder(getFolderOrPagePath(path));
         if (folder == null) {
             throw new CommonException("could.not.find.folder",
                     "Could not find a folder: " + path);
@@ -552,4 +566,47 @@
                     "Could not update a folder: " + path, e);
         }
     }
+
+    public Map<String, Object> getLayoutInfo(String path)
+            throws CommonException {
+        Map<String, Object> map = new HashMap<String, Object>();
+
+        Page page = getPage(getFolderOrPagePath(path));
+        if (page != null) {
+            String fid = getFragmentId(path);
+            Fragment fragment = page.getFragmentById(fid);
+            if (fragment != null) {
+                map.put("fragmentId", fragment.getId());
+                map.put("layoutName", fragment.getName());
+                map.put("decorator", fragment.getDecorator());
+                map.put("desktopTheme", fragment.getSkin());
+            } else {
+                //TODO throw exception
+            }
+        }
+        return map;
+    }
+
+    public void updateLayout(String path, String layoutName, String decorator,
+            String desktopTheme) throws CommonException {
+        Page page = getPage(getFolderOrPagePath(path));
+        if (page == null) {
+            throw new CommonException("could.not.find.layout",
+                    "Could not find a page: " + path);
+        }
+        String fid = getFragmentId(path);
+        Fragment fragment = page.getFragmentById(fid);
+        fragment.setName(layoutName);
+        fragment.setDecorator(decorator);
+        fragment.setSkin(desktopTheme);
+        try {
+            getPageManager().updatePage(page);
+        } catch (PageNotUpdatedException e) {
+            throw new CommonException("could.not.update.layout",
+                    "Could not update a page: " + path, e);
+        } catch (NodeException e) {
+            throw new CommonException("could.not.update.layout",
+                    "Could not update a page: " + path, e);
+        }
+    }
 }

Modified: pal-admin/trunk/src/main/java/jp/sf/pal/admin/service/SiteEditorService.java
===================================================================
--- pal-admin/trunk/src/main/java/jp/sf/pal/admin/service/SiteEditorService.java	2007-07-17 06:07:11 UTC (rev 281)
+++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/service/SiteEditorService.java	2007-07-17 07:56:43 UTC (rev 282)
@@ -9,6 +9,7 @@
 import jp.sf.pal.admin.logic.SiteEditorLogic;
 import jp.sf.pal.admin.web.site.AbstractSiteEditorPage;
 import jp.sf.pal.admin.web.site.FolderInfoEditorPage;
+import jp.sf.pal.admin.web.site.LayoutInfoEditorPage;
 import jp.sf.pal.admin.web.site.PageInfoEditorPage;
 import jp.sf.pal.common.CommonException;
 
@@ -77,7 +78,19 @@
         getSiteEditorDxo().convert(
                 getSiteEditorLogic().getFolderInfo(page.getPath()), page);
     }
+    public void loadPage(LayoutInfoEditorPage page) throws CommonException {
+        loadTree(page);
 
+        page.setLayoutNameItems(getSiteEditorLogic().createLayoutNamesList());
+        page.setDecoratorItems(getSiteEditorLogic()
+                .createPortletDecorationsList());
+        page.setDesktopThemeItems(getSiteEditorLogic()
+                .createDesktopPageDecorationsList());
+
+        getSiteEditorDxo().convert(
+                getSiteEditorLogic().getLayoutInfo(page.getPath()), page);
+    }
+
     protected void loadTree(AbstractSiteEditorPage page) throws CommonException {
         String path = page.getPath();
         if (path != null) {
@@ -106,4 +119,9 @@
                 page.getPageDecorator(), page.getPortletDecorator(),
                 page.getDesktopTheme(), page.isFolderHidden());
     }
+
+    public void updateLayout(LayoutInfoEditorPage page) throws CommonException {
+        getSiteEditorLogic().updateLayout(page.getPath(), page.getLayoutName(),
+                page.getDecorator(), page.getDesktopTheme());
+    }
 }

Added: pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/site/LayoutInfoEditorPage.java
===================================================================
--- pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/site/LayoutInfoEditorPage.java	2007-07-17 06:07:11 UTC (rev 281)
+++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/site/LayoutInfoEditorPage.java	2007-07-17 07:56:43 UTC (rev 282)
@@ -0,0 +1,137 @@
+package jp.sf.pal.admin.web.site;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+import javax.faces.internal.FacesMessageUtil;
+
+import jp.sf.pal.common.CommonException;
+
+import org.seasar.framework.log.Logger;
+import org.seasar.teeda.extension.annotation.takeover.TakeOver;
+import org.seasar.teeda.extension.annotation.takeover.TakeOverType;
+
+public class LayoutInfoEditorPage extends AbstractSiteEditorPage implements
+        Serializable {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 0L;
+
+    /**
+     * Logger for this class
+     */
+    private static final Logger logger = Logger
+            .getLogger(LayoutInfoEditorPage.class);
+
+    private String decorator;
+
+    private List<Map<String, String>> decoratorItems;
+
+    private String desktopTheme;
+
+    private List<Map<String, String>> desktopThemeItems;
+
+    private String fragmentId;
+
+    private String layoutName;
+
+    private List<Map<String, String>> layoutNameItems;
+
+    public String getDecorator() {
+        return decorator;
+    }
+
+    public void setDecorator(String decorator) {
+        this.decorator = decorator;
+    }
+
+    public List<Map<String, String>> getDecoratorItems() {
+        return decoratorItems;
+    }
+
+    public void setDecoratorItems(List<Map<String, String>> decoratorItems) {
+        this.decoratorItems = decoratorItems;
+    }
+
+    public String getDesktopTheme() {
+        return desktopTheme;
+    }
+
+    public void setDesktopTheme(String desktopTheme) {
+        this.desktopTheme = desktopTheme;
+    }
+
+    public List<Map<String, String>> getDesktopThemeItems() {
+        return desktopThemeItems;
+    }
+
+    public void setDesktopThemeItems(List<Map<String, String>> desktopThemeItems) {
+        this.desktopThemeItems = desktopThemeItems;
+    }
+
+    public String getFragmentId() {
+        return fragmentId;
+    }
+
+    public void setFragmentId(String fragmentId) {
+        this.fragmentId = fragmentId;
+    }
+
+    public String getLayoutName() {
+        return layoutName;
+    }
+
+    public void setLayoutName(String layoutName) {
+        this.layoutName = layoutName;
+    }
+
+    public List<Map<String, String>> getLayoutNameItems() {
+        return layoutNameItems;
+    }
+
+    public void setLayoutNameItems(List<Map<String, String>> layoutNameItems) {
+        this.layoutNameItems = layoutNameItems;
+    }
+
+    public Class<?> initialize() {
+        return null;
+    }
+
+    public Class<?> prerender() {
+        if (getPath() == null) {
+            setPath("/");
+            return FolderInfoEditorPage.class;
+        }
+
+        if (getReturnPath() == null) {
+            setReturnPath("/");
+        }
+
+        try {
+            getSiteEditorService().loadPage(this);
+        } catch (CommonException e) {
+            FacesMessageUtil.addErrorMessage(e.getMessageId());
+            logger.log("EPA0001", new Object[] { this.toString() }, e);
+        }
+        return null;
+    }
+
+    @TakeOver(type = TakeOverType.INCLUDE, properties = "path,returnPath")
+    public Class<?> doUpdate() {
+        try {
+            getSiteEditorService().updateLayout(this);
+            FacesMessageUtil.addInfoMessage("updated.layout");
+            return LayoutInfoEditorPage.class;
+        } catch (CommonException e) {
+            FacesMessageUtil.addErrorMessage(e.getMessageId());
+            logger.log("EPA0002", new Object[] { this.toString() }, e);
+        } catch (Exception e) {
+            FacesMessageUtil.addErrorMessage("could.not.update.layout");
+            logger.log("EPA0002", new Object[] { this.toString() }, e);
+        }
+        return null;
+    }
+}


Property changes on: pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/site/LayoutInfoEditorPage.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: pal-admin/trunk/src/main/resources/appMessages.properties
===================================================================
--- pal-admin/trunk/src/main/resources/appMessages.properties	2007-07-17 06:07:11 UTC (rev 281)
+++ pal-admin/trunk/src/main/resources/appMessages.properties	2007-07-17 07:56:43 UTC (rev 282)
@@ -103,3 +103,7 @@
 could.not.find.folder=Could not find the target folder. Please contact a site administrator.
 could.not.update.folder=Could not update the target folder. Please try again. If you see this error message again, please contact a site administrator.
 updated.folder=Updated the target folder.
+
+could.not.find.layout=Could not find the target layout. Please contact a site administrator.
+could.not.update.layout=Could not update the target layout. Please try again. If you see this error message again, please contact a site administrator.
+updated.layout=Updated the target layout.

Modified: pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/site/label.properties
===================================================================
--- pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/site/label.properties	2007-07-17 06:07:11 UTC (rev 281)
+++ pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/site/label.properties	2007-07-17 07:56:43 UTC (rev 282)
@@ -15,3 +15,9 @@
 folderInfoEditor.portletDecorator=Portlet Decorator:
 folderInfoEditor.desktopTheme=Desktop Theme:
 folderInfoEditor.folderHidden=Hide This Folder?:
+
+layoutInfoEditor.fragmentId=ID:
+layoutInfoEditor.layoutName=Layout:
+layoutInfoEditor.decorator=Decorator:
+layoutInfoEditor.desktopTheme=Desktop Theme:
+

Added: pal-admin/trunk/src/main/webapp/view/site/layoutInfoEditor.html
===================================================================
--- pal-admin/trunk/src/main/webapp/view/site/layoutInfoEditor.html	2007-07-17 06:07:11 UTC (rev 281)
+++ pal-admin/trunk/src/main/webapp/view/site/layoutInfoEditor.html	2007-07-17 07:56:43 UTC (rev 282)
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:te="http://www.seasar.org/teeda/extension">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+    <link rel="stylesheet" type="text/css" href="../../css/global.css" />
+  </head>
+  <body>
+    <form id="layoutEditorForm">
+      <div>
+        <span id="allMessages" fatalClass="portlet-msg-error" errorClass="portlet-msg-error" warnClass="portlet-msg-alert" infoClass="portlet-msg-info"></span>
+      </div>
+      <input id="path" type="hidden"/>
+      <input id="returnPath" type="hidden"/>
+<!-- tree: BEGIN -->
+      <div style="width: 200px;height: 400px;float: left;border: 1px solid #666666;overflow: auto;">
+        <div id="nodeItems">
+          <div id="isFolder" style="white-space: nowrap;">
+            <a id="jumpFolderInfoEditor" href="folderInfoEditor.html?path=a&returnPath=b" style="">
+              <img id="folderIcon" src="" border="0" style="vertical-align:middle;" />
+              <span id="name-folder">Name</span>
+            </a>
+          </div>
+          <div id="isPage" style="white-space: nowrap;">
+            <a id="jumpPageInfoEditor" href="pageInfoEditor.html?path=a&returnPath=b" style="">
+              <img id="pageIcon" src="" border="0" style="vertical-align:middle;" />
+              <span id="name-page">Name</span>
+            </a>
+          </div>
+          <div id="isPageLayout" style="white-space: nowrap;">
+            <a id="jumpLayoutInfoEditor" href="layoutInfoEditor.html?path=a&returnPath=b" style="">
+              <img id="layoutIcon" src="" border="0" style="vertical-align:middle;" />
+              <span id="name-layout">Name</span>
+            </a>
+          </div>
+          <div id="isPortlet" style="white-space: nowrap;">
+            <a id="jumpPortletInfoEditor" href="portletInfoEditor.html?path=a&returnPath=b" style="">
+              <img id="portletIcon" src="" border="0" style="vertical-align:middle;" />
+              <span id="name-portlet">Name</span>
+            </a>
+          </div>
+        </div>
+      </div>
+<!-- tree: END -->
+<!-- content: BEGIN -->
+      <dir style="width: 500px;float: left;padding: 5px;margin: 0px;">
+        <div style="padding: 0px 0px 3px 10px; margin:5px 0px;border-bottom:1px solid #000000;">
+          <label id="infoTabLabel" style="border-top:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #ffffff;border-left:1px solid #000000;padding: 3px 5px 3px 5px; margin: 0px 0px;">Information</label>
+          <a id="jumpPageSecurityEditor-tab" href="pageSecurityEditor.html" style="text-decoration: none;">
+            <span id="securityTabLabel" style="font-weight: bold;color:#ffffff;background-color:#999999;border:1px solid #000000; padding: 3px 5px 3px 5px; margin: 0px 0px;">Security</span>
+          </a>
+          <a id="jumpPageMetadataEditor-tab" href="pageMetadataEditor.html" style="text-decoration: none;">
+            <span id="metadataTabLabel" style="font-weight: bold;color:#ffffff;background-color:#999999;border:1px solid #000000; padding: 3px 5px 3px 5px; margin: 0px 0px;">Metadata</span>
+          </a>
+        </div>
+        <div>
+          <!-- TODO : Rename file -->
+          <div style="clear:both;">
+            <div style="width:120px;float: left;"><label id="fragmentIdLabel" for="fragmentId" style="width:100px;">ID:</label></div>
+            <span id="fragmentId">ID</span>
+          </div>
+          <div style="clear:both;">
+            <div style="width:120px;float: left;"><label id="layoutNameLabel" for="pageTitle">Layout:</label></div>
+            <select id="layoutName">
+              <option value="hoge">HOGE</option>
+            </select>
+          </div>
+          <div style="clear:both;">
+            <div style="width:120px;float: left;"><label id="decoratorLabel" for="decorator" style="width:100px;">Decorator:</label></div>
+            <select id="decorator">
+              <option value="hoge">HOGE</option>
+            </select>
+          </div>
+          <div style="clear:both;">
+            <div style="width:120px;float: left;"><label id="desktopThemeLabel" for="desktopTheme" style="width:100px;">Desktop Theme:</label></div>
+            <select id="desktopTheme">
+              <option value="hoge">HOGE</option>
+            </select>
+          </div>
+          <div style="margin-top: 20px;text-align: center;">
+            <input id="doUpdate" type="button" value="Update"/>
+          </div>
+         </div>
+      </dir>
+      <br style="clear: both;" />
+<!-- content: END -->
+    </form>
+  </body>
+</html>


Property changes on: pal-admin/trunk/src/main/webapp/view/site/layoutInfoEditor.html
___________________________________________________________________
Name: svn:eol-style
   + native


pal-cvs メーリングリストの案内
Back to archive index