📄 portletsjahiacontentserializer.java
字号:
package org.jahia.layout;/** * Title: * Description: * Copyright: Copyright (c) 2002 * Company: Jahia Ltd * @author * @version 1.0 */import org.jahia.exceptions.*;import org.jahia.data.*;import org.jahia.data.fields.*;import org.jahia.data.containers.*;import org.jahia.registries.ServicesRegistry;import org.jahia.utils.JahiaConsole;import java.util.*;/** * Portlet serialization class for shared portlets. Storage is done using Jahia's * content definition system, effectively using containers and fields to store * information relative to portlets. * * The serializer must be created with a JahiaData object in order for the * declaration of the field to be done properly. The portlet group name must be * also specified. The portlet group name is the name of the instance of a * portlet layout manager. This allows a page to have multiple portlet layouts * * @author Serge Huber * @version 1.0 */public class PortletsJahiaContentSerializer { private static final String METADATA_CONTAINER_SUFFIT = "MetaData"; // PortletsAPI Default Parameters private static final int defaultPortletID = 0; private static final int defaultPortletSourceID = 0; private static final int defaultPortletW = 100; private static final int defaultPortletH = 100; private static final int defaultPortletColumn = 0; private static final int defaultPortletRow = 0; private JahiaData jData; private String portletGroupName; /** * The serializer constructor enforces the relationship between a JahiaData * object, a portletGroupName string and the serializer itself. For a single * page we may use multiple serializer if we are processing multiple portlet * groups */ public PortletsJahiaContentSerializer(JahiaData jData, String portletGroupName) throws JahiaException { this.jData = jData; this.portletGroupName = portletGroupName + METADATA_CONTAINER_SUFFIT; // this concatenation is done to keep a relationship between the // content container and the metadata container declareJahiaTemplatePortlets(); } /** * Since we are using Jahia's content storage feature, we need to declare * the storage containers and fields. This function does just that, plus * it defines default values for the field. */ private void declareJahiaTemplatePortlets() throws JahiaException { PortletBean defaultPortlet = new PortletBean(defaultPortletID, defaultPortletSourceID, defaultPortletW, defaultPortletH, defaultPortletColumn, defaultPortletRow); declareJahiaTemplatePortlets(defaultPortlet); } /** * Since we are using Jahia's content storage feature, we need to declare * the storage containers and fields. This function also allows us to define * a set of default values to customize the default values of the fields */ private void declareJahiaTemplatePortlets(PortletBean defaultValues) throws JahiaException { try { jData.containers().declareField( "PortletID", "ID", FieldTypes.SMALLTEXT, Integer.toString(defaultValues.getPortletID()) ); jData.containers().declareField( "PortletSourceID", "Source ID", FieldTypes.SMALLTEXT, Integer.toString(defaultValues.getPortletSourceID()) ); jData.containers().declareField( "PortletW", "Width", FieldTypes.SMALLTEXT, Integer.toString(defaultValues.getPortletW()) ); jData.containers().declareField( "PortletH", "Height", FieldTypes.SMALLTEXT, Integer.toString(defaultValues.getPortletH()) ); jData.containers().declareField( "PortletColumn", "Column", FieldTypes.SMALLTEXT, Integer.toString(defaultValues.getPortletColumn()) ); jData.containers().declareField( "PortletRow", "Row", FieldTypes.SMALLTEXT, Integer.toString(defaultValues.getPortletRow()) ); Vector theFieldList = new Vector(); theFieldList.add( "PortletID"); theFieldList.add( "PortletSourceID" ); theFieldList.add( "PortletW" ); theFieldList.add( "PortletH" ); theFieldList.add( "PortletColumn" ); theFieldList.add( "PortletRow" ); jData.containers().declareContainer( portletGroupName, "Portlet List Meta Data", theFieldList ); JahiaConsole.println("PortletsJahiaContentSerializer", "Container for portlet list meta data [" + portletGroupName + "] declared"); } catch (JahiaException je) { // this probably means we have already declared the portlet // definition. /** @todo find a cleaner way to handle multiple definitions */ JahiaConsole.println("PortletsJahiaContentSerializer.declareJahiaTemplatePortlets", "Portlets already defined..."); } } /** * Returns an enumeration of PortletBean objects that are contained in the * page */ public Enumeration getPortlets(String currentUserName) throws JahiaException { // this first call must be done before any access. It will only declare // the portlets once for each page JahiaContainerList portletContainerList = jData.containers().getContainerList(portletGroupName); Enumeration portletContainerEnumeration = portletContainerList.getContainers(); Vector resultPortletList = new Vector(); while (portletContainerEnumeration.hasMoreElements()) { JahiaContainer portletContainer = (JahiaContainer) portletContainerEnumeration.nextElement(); resultPortletList.add(containerToPortlet(portletContainer)); } return resultPortletList.elements(); } private PortletBean containerToPortlet(JahiaContainer container) throws JahiaException { PortletBean resultPortlet = null; resultPortlet = new PortletBean(container.getField("PortletID").getValue(), container.getField("PortletSourceID").getValue(), container.getField("PortletW").getValue(), container.getField("PortletH").getValue(), container.getField("PortletColumn").getValue(), container.getField("PortletRow").getValue(), container.getID() ); return resultPortlet; } private void portletToContainer(PortletBean pb, JahiaContainer container) throws JahiaException { container.getField("PortletID").setValue(Integer.toString(pb.getPortletID())); container.getField("PortletSourceID").setValue(Integer.toString(pb.getPortletSourceID())); container.getField("PortletW").setValue(Integer.toString(pb.getPortletW())); container.getField("PortletH").setValue(Integer.toString(pb.getPortletH())); container.getField("PortletColumn").setValue(Integer.toString(pb.getPortletColumn())); container.getField("PortletRow").setValue(Integer.toString(pb.getPortletRow())); } public PortletBean getPortlet(String currentUserName, int portletID) throws JahiaException { JahiaContainerList portletContainerList = jData.containers().getContainerList(portletGroupName); Enumeration portletContainerEnumeration = portletContainerList.getContainers(); while (portletContainerEnumeration.hasMoreElements()) { JahiaContainer portletContainer = (JahiaContainer) portletContainerEnumeration.nextElement(); PortletBean portlet = containerToPortlet(portletContainer); if (portlet.getPortletID() == portletID) return portlet; } return null; } /** * Retrieves a list of portlets for the specified column * * @todo this should probably return a sorted list * */ public Enumeration getPortletsFromColumn(int theColumn, String currentUserName) throws JahiaException { Enumeration allPortlets = getPortlets(currentUserName); Vector portletList = new Vector(); while (allPortlets.hasMoreElements()) { PortletBean portlet = (PortletBean) allPortlets.nextElement(); if (portlet.getPortletColumn() == theColumn) { portletList.add(portlet); } } return portletList.elements(); } // end getPortletsFromColumn() public boolean isPortletInStore(PortletBean portlet, String currentUserName) throws JahiaException { return (getPortlet(currentUserName, portlet.getPortletID()) != null); } private JahiaContainer lookupPortletContainer(PortletBean portlet, String currentUserName) throws JahiaException { //JahiaConsole.println("PorletsJahiaContentSerializer.lookupPortletContainer", // "Looking up portlet " + portlet.getPortletSourceID() + " for user currentUserName"); JahiaContainerList portletContainerList = jData.containers().getContainerList(portletGroupName); Enumeration portletContainerEnumeration = portletContainerList.getContainers(); while (portletContainerEnumeration.hasMoreElements()) { JahiaContainer portletContainer = (JahiaContainer) portletContainerEnumeration.nextElement(); int containerPortletID = Integer.parseInt(portletContainer.getField("PortletSourceID").getValue()); //JahiaConsole.println("PortletsJahiaContentSerializer.lookupPortletContainer", "Source ID = " + Integer.toString(containerPortletID)); if (containerPortletID == portlet.getPortletSourceID()) { return portletContainer; } } return null; } public void storePortlet(PortletBean portlet, String currentUserName) throws JahiaException { JahiaConsole.println("PorletsJahiaContentSerializer.storePortlet", "Storing portlet " + portlet.getPortletSourceID() + " meta data for user currentUserName"); JahiaContainer portletContainer = lookupPortletContainer(portlet, currentUserName); if (portletContainer != null) { JahiaConsole.println("PortletsJahiaContentSerializer.storePortlet", "Updating portlet container..."); portletToContainer(portlet, portletContainer); ServicesRegistry.getInstance().getJahiaContainersService().saveContainer(portletContainer, 0, jData.params()); } else { // container not found, let's try to create it then... JahiaConsole.println("PorletsJahiaContentSerializer.storePortlet", "Creating portlet " + portlet.getPortletSourceID() + " meta data for user currentUserName"); JahiaContainerList portletList = jData.containers().getContainerList(this.portletGroupName); ServicesRegistry.getInstance().getJahiaContainersService().saveContainerListInfo(portletList, jData.page().getAclID()); portletList = jData.containers().getContainerList(this.portletGroupName); JahiaConsole.println("PortletsJahiaContentSerializer.storePortlet", "ACL ID of container list=" + Integer.toString(portletList.getAclID())); portletContainer = new JahiaContainer(0, jData.params().getJahiaID(), jData.params().getPageID(), portletList.getID(), 0, /* rank */ portletList.getAclID(), portletList.getctndefid()); JahiaConsole.println("PortletsJahiaContentSerializer.storePortlet", "Setting field values in container"); portletToContainer(portlet, portletContainer); JahiaConsole.println("PortletsJahiaContentSerializer.storePortlet", "Saving container and field data to persistance storage..."); ServicesRegistry.getInstance().getJahiaContainersService().saveContainer(portletContainer, 0, jData.params()); /* throw new JahiaException("Couldn't save portlet data", "Container not found for storing portlet metadata", JahiaException.APPLICATION_ERROR, JahiaException.ERROR); */ } } public void removePortlet(PortletBean portlet, String currentUserName) throws JahiaException { JahiaContainer portletContainer = lookupPortletContainer(portlet, currentUserName); if (portletContainer != null) { ServicesRegistry.getInstance().getJahiaContainersService().deleteContainer( portletContainer.getID(), jData.params() ); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -