/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.server.service.admin.ajax;
import org.springframework.web.util.HtmlUtils;
import com.enonic.esl.util.Base64Util;
import com.enonic.cms.core.preference.PreferenceKey;
import com.enonic.cms.core.preference.PreferenceScopeKey;
import com.enonic.cms.core.structure.menuitem.MenuItemEntity;
import com.enonic.cms.server.service.admin.ajax.dto.PreferenceDto;
import com.enonic.cms.store.dao.MenuItemDao;
import com.enonic.cms.store.dao.PortletDao;
import com.enonic.cms.store.dao.PreferenceDao;
import com.enonic.cms.store.dao.SiteDao;
import com.enonic.cms.core.preference.PreferenceEntity;
import com.enonic.cms.core.preference.PreferenceScopeType;
import com.enonic.cms.core.structure.SiteEntity;
import com.enonic.cms.core.structure.portlet.PortletEntity;
public class PreferenceDtoCreator
{
private PortletDao portletDao;
private PreferenceDao preferenceDao;
private SiteDao siteDao;
private MenuItemDao menuItemDao;
public PreferenceDtoCreator( PortletDao portletDao, PreferenceDao preferenceDao, SiteDao siteDao, MenuItemDao menuItemDao )
{
this.portletDao = portletDao;
this.preferenceDao = preferenceDao;
this.siteDao = siteDao;
this.menuItemDao = menuItemDao;
}
public PreferenceDto createPreferenceDto( PreferenceEntity preferenceEntity )
{
PreferenceDto preferenceDto = new PreferenceDto();
final PreferenceKey preferenceKey = preferenceEntity.getKey();
PreferenceScopeType scopeType = preferenceKey.getScopeType();
preferenceDto.setKey( preferenceKey.getBaseKey() );
String value = HtmlUtils.htmlEscape( preferenceEntity.getValue() );
switch ( scopeType )
{
case GLOBAL:
return createTypeGlobalDto( preferenceKey, value, scopeType );
case SITE:
return createTypeSiteDto( preferenceKey, value, scopeType );
case PAGE:
return createTypePageDto( preferenceKey, value, scopeType );
case PORTLET:
return createTypePortletDto( preferenceKey, value, scopeType );
case WINDOW:
return createTypeWindowDto( preferenceKey, value, scopeType );
}
return preferenceDto;
}
private PreferenceDto createTypeGlobalDto( PreferenceKey preferenceKey, String preferenceValue, PreferenceScopeType scopeType )
{
PreferenceDto preferenceDto = createCommonTypePortletDto( preferenceKey, preferenceValue, scopeType );
preferenceDto.setPath( preferenceKey.getScopeType().getName() );
preferenceDto.setSiteName( "" );
preferenceDto.setMenuItemPath( "" );
preferenceDto.setPortletName( "" );
return preferenceDto;
}
private PreferenceDto createTypeSiteDto( PreferenceKey preferenceKey, String preferenceValue, PreferenceScopeType scopeType )
{
PreferenceScopeKey scopeKey = preferenceKey.getScopeKey();
Integer siteKey = scopeKey.getFirstKey();
SiteEntity site = siteDao.findByKey( siteKey );
if ( site == null )
{
return null;
}
PreferenceDto preferenceDto = createCommonTypePortletDto( preferenceKey, preferenceValue, scopeType );
String siteName = site.getName();
preferenceDto.setPath( siteName );
preferenceDto.setSiteName( siteName );
preferenceDto.setMenuItemPath( "" );
preferenceDto.setPortletName( "" );
return preferenceDto;
}
private PreferenceDto createTypePageDto( PreferenceKey preferenceKey, String preferenceValue, PreferenceScopeType scopeType )
{
PreferenceScopeKey scopeKey = preferenceKey.getScopeKey();
Integer menuItemKey = scopeKey.getFirstKey();
MenuItemEntity menuItem = menuItemDao.findByKey( menuItemKey );
if ( menuItem == null )
{
return null;
}
PreferenceDto preferenceDto = createCommonTypePortletDto( preferenceKey, preferenceValue, scopeType );
String siteName = menuItem.getSite().getName();
String memuItemPath = menuItem.getPathAsString();
preferenceDto.setPath( memuItemPath );
preferenceDto.setSiteName( siteName );
preferenceDto.setMenuItemPath( memuItemPath );
preferenceDto.setPortletName( "" );
return preferenceDto;
}
private PreferenceDto createTypePortletDto( PreferenceKey preferenceKey, String preferenceValue, PreferenceScopeType scopeType )
{
PreferenceScopeKey scopeKey = preferenceKey.getScopeKey();
Integer portletKey = scopeKey.getFirstKey();
PortletEntity portlet = portletDao.findByKey( portletKey );
if ( portlet == null )
{
return null;
}
PreferenceDto preferenceDto = createCommonTypePortletDto( preferenceKey, preferenceValue, scopeType );
String portletName = portlet.getName();
String siteName = portlet.getSite().getName();
preferenceDto.setPath( siteName + " : " + portletName );
preferenceDto.setSiteName( siteName );
preferenceDto.setMenuItemPath( "" );
preferenceDto.setPortletName( portletName );
return preferenceDto;
}
private PreferenceDto createTypeWindowDto( PreferenceKey preferenceKey, String preferenceValue, PreferenceScopeType scopeType )
{
PreferenceScopeKey scopeKey = preferenceKey.getScopeKey();
Integer menuItemKey = scopeKey.getFirstKey();
Integer portletKey = scopeKey.getSecondKey();
MenuItemEntity menuItem = menuItemDao.findByKey( menuItemKey );
PortletEntity portlet = portletDao.findByKey( portletKey );
if ( menuItem == null || portlet == null )
{
return null;
}
PreferenceDto preferenceDto = createCommonTypePortletDto( preferenceKey, preferenceValue, scopeType );
String memuItemPath = menuItem.getPathAsString();
String siteName = portlet.getSite().getName();
String portletName = portlet.getName();
preferenceDto.setPath( memuItemPath + " : " + portletName );
preferenceDto.setSiteName( siteName );
preferenceDto.setMenuItemPath( memuItemPath );
preferenceDto.setPortletName( portletName );
return preferenceDto;
}
private PreferenceDto createCommonTypePortletDto( PreferenceKey preferenceKey, String preferenceValue, PreferenceScopeType scopeType )
{
PreferenceDto preferenceDto = new PreferenceDto();
String value = HtmlUtils.htmlEscape( preferenceValue );
String valueBase64Encoded = Base64Util.encode( value.getBytes() );
preferenceDto.setKey( preferenceKey.getBaseKey() );
preferenceDto.setValue( valueBase64Encoded );
preferenceDto.setScope( scopeType.getName() );
return preferenceDto;
}
}