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