/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.portal.datasource.context; import java.util.Map; import org.jdom.Element; import com.enonic.cms.core.structure.TemplateParameter; import com.enonic.cms.core.structure.menuitem.MenuItemEntity; import com.enonic.cms.core.structure.menuitem.MenuItemRequestParameter; import com.enonic.cms.core.structure.page.Region; import com.enonic.cms.core.structure.page.Regions; import com.enonic.cms.core.structure.page.Window; import com.enonic.cms.core.structure.page.template.PageTemplateEntity; import com.enonic.cms.core.structure.portlet.PortletEntity; /** * May 15, 2009 */ final class PageContextXmlCreator { public Element createPageElementForMenuItemRequest( final Regions regions, final MenuItemEntity menuItem, final PageTemplateEntity pageTemplate ) { final Element pageEl = new Element( "page" ); pageEl.addContent( createParametersElement( menuItem ) ); pageEl.addContent( createPageTemplateElement( pageTemplate ) ); final Element regionsEl = new Element( "regions" ); for ( Region region : regions.getRegions() ) { regionsEl.addContent( createRegionElement( region ) ); } pageEl.addContent( regionsEl ); return pageEl; } public Element createPageElementForContentRequest( final Regions regions, final PageTemplateEntity pageTemplate ) { final Element pageEl = new Element( "page" ); pageEl.addContent( createPageTemplateElement( pageTemplate ) ); final Element regionsEl = new Element( "regions" ); for ( Region region : regions.getRegions() ) { regionsEl.addContent( createRegionElement( region ) ); } pageEl.addContent( regionsEl ); return pageEl; } private Element createParametersElement( MenuItemEntity menuItem ) { Element parametersEl = new Element( "parameters" ); for ( MenuItemRequestParameter parameter : menuItem.getRequestParameters().values() ) { Element parameterEl = new Element( "parameter" ); parameterEl.addContent( new Element( "name" ).setText( parameter.getName() ) ); parameterEl.addContent( new Element( "overrideable" ).setText( parameter.isOverridableByRequest() ? "true" : "false" ) ); parameterEl.addContent( new Element( "value" ).setText( asEmptyIfNull( parameter.getValue() ) ) ); parametersEl.addContent( parameterEl ); } return parametersEl; } private Element createPageTemplateElement( PageTemplateEntity pageTemplate ) { Element pageTemplateEl = new Element( "page-template" ); pageTemplateEl.addContent( new Element( "name" ).setText( pageTemplate.getName() ) ); return pageTemplateEl; } private Element createRegionElement( Region region ) { Element regionEl = new Element( "region" ); regionEl.addContent( new Element( "name" ).setText( region.getName() ) ); Element windowsEl = new Element( "windows" ); for ( Window window : region.getWindows() ) { Element portletWindowEl = createPortletWindowElement( window ); windowsEl.addContent( portletWindowEl ); } regionEl.addContent( windowsEl ); return regionEl; } private Element createPortletWindowElement( Window window ) { PortletEntity portlet = window.getPortlet(); Element windowEl = new Element( "window" ); windowEl.setAttribute( "key", window.getKey().toString() ); windowEl.addContent( new Element( "name" ).setText( portlet.getName() ) ); Map<String, TemplateParameter> templateParameters = portlet.getTemplateParameters(); Element parametersEl = new Element( "parameters" ); for ( TemplateParameter templateParameter : templateParameters.values() ) { Element parameterEl = new Element( "parameter" ); Element nameEl = new Element( "name" ); Element valueEl = new Element( "value" ); nameEl.setText( templateParameter.getName() ); valueEl.setText( templateParameter.getValue() ); parameterEl.addContent( nameEl ); parameterEl.addContent( valueEl ); parametersEl.addContent( parameterEl ); } windowEl.addContent( parametersEl ); windowEl.addContent( createPortletElement( portlet ) ); return windowEl; } private Element createPortletElement( PortletEntity portlet ) { Element portletEl = new Element( "portlet" ); portletEl.setAttribute( "key", portlet.getPortletKey().toString() ); portletEl.addContent( new Element( "name" ).setText( portlet.getName() ) ); return portletEl; } private String asEmptyIfNull( final String value ) { return value != null ? value : ""; } }