/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.vertical.adminweb.handlers;
import java.util.HashMap;
import java.util.Map;
import com.enonic.cms.core.content.ContentEntity;
import com.enonic.cms.core.content.ContentKey;
import com.enonic.cms.core.content.ContentLocationSpecification;
import com.enonic.cms.core.content.ContentLocations;
import com.enonic.cms.core.security.SecurityService;
import com.enonic.cms.core.security.user.UserEntity;
import com.enonic.cms.core.structure.SiteEntity;
import com.enonic.cms.core.structure.SiteKey;
import com.enonic.cms.core.structure.menuitem.ContentHomeEntity;
import com.enonic.cms.core.structure.menuitem.MenuItemAccessRightAccumulator;
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.page.template.PageTemplateEntity;
import com.enonic.cms.store.dao.ContentDao;
/**
* Jan 7, 2010
*/
public class ContentEditFormModelFactory
{
private SecurityService securityService;
private ContentDao contentDao;
private MenuItemAccessRightAccumulator menuItemAccessRightAccumulator;
public ContentEditFormModelFactory( ContentDao contentDao, SecurityService securityService,
MenuItemAccessRightAccumulator menuItemAccessRightAccumulator )
{
this.contentDao = contentDao;
this.securityService = securityService;
this.menuItemAccessRightAccumulator = menuItemAccessRightAccumulator;
}
public ContentEditFormModel createContentEditFormModel( ContentKey contentKey, UserEntity executor )
{
ContentEntity content = contentDao.findByKey( contentKey );
ContentLocationSpecification contentLocationSpecificaiton = new ContentLocationSpecification();
contentLocationSpecificaiton.setIncludeInactiveLocationsInSection( true );
ContentLocations contentLocations = content.getLocations( contentLocationSpecificaiton );
ContentEditFormModel contentEditFormModel = new ContentEditFormModel();
contentEditFormModel.setContentLocations( contentLocations );
Map<MenuItemKey, MenuItemAndUserAccessRights> menuItemAndUserAccessRightsMapByMenuItemKey =
new HashMap<MenuItemKey, MenuItemAndUserAccessRights>();
for ( MenuItemEntity menuItem : contentLocations.getMenuItems() )
{
MenuItemAndUserAccessRights menuItemAndUserAccessRights =
new MenuItemAndUserAccessRights( menuItem, resolveUserRights( menuItem, executor ),
resolveUserRights( menuItem, securityService.getAnonymousUser() ) );
menuItemAndUserAccessRightsMapByMenuItemKey.put( menuItem.getKey(), menuItemAndUserAccessRights );
}
contentEditFormModel.setMenuItemAndUserAccessRightsMapByMenuItemKey( menuItemAndUserAccessRightsMapByMenuItemKey );
Map<SiteKey, PageTemplateEntity> pageTemplateBySiteKey = new HashMap<SiteKey, PageTemplateEntity>();
for ( SiteEntity site : contentLocations.getSites() )
{
ContentHomeEntity contentHome = content.getContentHome( site.getKey() );
if ( contentHome != null && contentHome.getPageTemplate() != null )
{
pageTemplateBySiteKey.put( site.getKey(), contentHome.getPageTemplate() );
}
}
contentEditFormModel.setPageTemplateBySite( pageTemplateBySiteKey );
return contentEditFormModel;
}
private MenuItemAccumulatedAccessRights resolveUserRights( final MenuItemEntity menuItem, final UserEntity user )
{
return menuItemAccessRightAccumulator.getAccessRightsAccumulated( menuItem, user );
}
}