/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.vertical.adminweb.handlers;
import java.util.Map;
import org.jdom.Document;
import org.jdom.Element;
import com.google.common.collect.Maps;
import com.enonic.vertical.engine.handlers.MenuHandler;
import com.enonic.cms.framework.xml.XMLDocument;
import com.enonic.cms.framework.xml.XMLDocumentFactory;
import com.enonic.cms.core.content.ContentLocationXmlCreator;
import com.enonic.cms.core.content.ContentLocations;
import com.enonic.cms.core.structure.SiteKey;
import com.enonic.cms.core.structure.SiteProperties;
import com.enonic.cms.core.structure.SiteXmlCreator;
import com.enonic.cms.core.structure.menuitem.MenuItemAccumulatedAccessRights;
import com.enonic.cms.core.structure.menuitem.MenuItemAndUserAccessRights;
import com.enonic.cms.core.structure.menuitem.MenuItemEntity;
import com.enonic.cms.core.structure.menuitem.MenuItemKey;
import com.enonic.cms.core.structure.menuitem.MenuItemXMLCreatorSetting;
import com.enonic.cms.core.structure.menuitem.MenuItemXmlCreator;
import com.enonic.cms.core.structure.page.template.PageTemplateEntity;
import com.enonic.cms.core.structure.page.template.PageTemplateXmlCreator;
/**
* Jan 7, 2010
*/
public class ContentEditFormModel
{
private ContentLocations contentLocations;
private Map<MenuItemKey, MenuItemAndUserAccessRights> menuItemAndUserAccessRightsMapByMenuItemKey;
private Map<SiteKey, PageTemplateEntity> pageTemplateBySite;
private PageTemplateXmlCreator pageTemplateXmlCreator = new PageTemplateXmlCreator();
public void setContentLocations( ContentLocations value )
{
this.contentLocations = value;
}
public void setMenuItemAndUserAccessRightsMapByMenuItemKey( Map<MenuItemKey, MenuItemAndUserAccessRights> value )
{
this.menuItemAndUserAccessRightsMapByMenuItemKey = value;
}
public void setPageTemplateBySite( Map<SiteKey, PageTemplateEntity> pageTemplateBySite )
{
this.pageTemplateBySite = pageTemplateBySite;
}
XMLDocument locationsToXML()
{
return XMLDocumentFactory.create( new Document( createLocationElement() ) );
}
XMLDocument locationMenuitemsToXML()
{
return XMLDocumentFactory.create( new Document( createLocationMenuitemsElement() ) );
}
XMLDocument locationSitesToXML( MenuHandler menuHandler )
{
return XMLDocumentFactory.create( new Document( createLocationSitesElement( menuHandler ) ) );
}
XMLDocument pageTemplateBySiteToXML()
{
return XMLDocumentFactory.create( new Document( createPageTemlateBySiteElement() ) );
}
private Element createLocationElement()
{
ContentLocationXmlCreator contentLocationXmlCreator = new ContentLocationXmlCreator();
contentLocationXmlCreator.setIncludeUserDefinedSectionHomeInfo( true );
return contentLocationXmlCreator.createLocationElement( contentLocations, true );
}
private Element createLocationMenuitemsElement()
{
Element locationMenuitemsEl = new Element( "location-menuitems" );
MenuItemXMLCreatorSetting menuItemXMLCreatorSetting = new MenuItemXMLCreatorSetting();
menuItemXMLCreatorSetting.includeChildren = false;
menuItemXMLCreatorSetting.includeDocumentElement = false;
menuItemXMLCreatorSetting.includeHiddenMenuItems = true;
menuItemXMLCreatorSetting.includeTypeSpecificXML = true;
menuItemXMLCreatorSetting.includeParents = false;
MenuItemXmlCreator menuItemXmlCreator = new MenuItemXmlCreator( menuItemXMLCreatorSetting, null );
menuItemXmlCreator.setIncludeAnonynousReadInfo( true );
menuItemXmlCreator.setIncludeUserAccessRightsInfo( true );
for ( MenuItemEntity menuItem : contentLocations.getMenuItems() )
{
MenuItemAndUserAccessRights menuItemAndUserAccessRights = menuItemAndUserAccessRightsMapByMenuItemKey.get( menuItem.getKey() );
final MenuItemAccumulatedAccessRights accessRightsForExecutor = menuItemAndUserAccessRights.getAccessRightsForUser();
final MenuItemAccumulatedAccessRights accessRightsForAnonymous = menuItemAndUserAccessRights.getAccessrightsForAnonymous();
locationMenuitemsEl.addContent(
menuItemXmlCreator.createMenuItemElement( menuItem, accessRightsForExecutor, accessRightsForAnonymous ) );
}
return locationMenuitemsEl;
}
private Element createLocationSitesElement( MenuHandler menuHandler )
{
SiteXmlCreator siteXmlCreator = new SiteXmlCreator( null, menuHandler );
return siteXmlCreator.createSitesElement( contentLocations.getSites(), Maps.<SiteKey, SiteProperties>newHashMap(),
"location-sites" );
}
private Element createPageTemlateBySiteElement()
{
Element rootEl = new Element( "page-template-by-site" );
for ( Map.Entry<SiteKey, PageTemplateEntity> entry : pageTemplateBySite.entrySet() )
{
Element siteEl = new Element( "site" );
siteEl.setAttribute( "key", entry.getKey().toString() );
siteEl.addContent( pageTemplateXmlCreator.createPageTemlateElement( entry.getValue() ) );
rootEl.addContent( siteEl );
}
return rootEl;
}
}