/**
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.portal.config.model;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.exoplatform.portal.mop.SiteType;
import org.exoplatform.portal.pom.config.Utils;
import org.exoplatform.portal.pom.data.PortalData;
import org.exoplatform.portal.pom.data.RedirectConditionData;
import org.exoplatform.portal.pom.data.RedirectData;
import org.exoplatform.portal.pom.data.RedirectMappingsData;
/**
* May 13, 2004
*
* @author: Tuan Nguyen
* @email: tuan08@users.sourceforge.net
* @version: $Id: PortalConfig.java,v 1.7 2004/08/06 03:02:29 tuan08 Exp $
**/
public class PortalConfig extends ModelObject {
public static final String USER_TYPE = SiteType.USER.getName();
public static final String GROUP_TYPE = SiteType.GROUP.getName();
public static final String PORTAL_TYPE = SiteType.PORTAL.getName();
public static final Container DEFAULT_LAYOUT = initDefaultLayout();
private String name;
/** Added for new POM . */
private String type;
private String locale;
private String label;
private String description;
private String[] accessPermissions;
private String editPermission;
private Properties properties;
private String skin;
private Container portalLayout;
private transient boolean modifiable;
// TODO: storing this as a LinkedHashMap might make more sense (ordered + able to retrieve element based on redirect name
private ArrayList<PortalRedirect> portalRedirects;
public PortalConfig() {
this(PORTAL_TYPE);
}
public PortalConfig(String type) {
this(type, null);
}
public PortalConfig(String type, String ownerId) {
this(type, ownerId, null);
}
public PortalConfig(String type, String ownerId, String storageId) {
super(storageId);
//
this.type = type;
this.name = ownerId;
this.portalLayout = new Container();
}
public PortalConfig(PortalData data) {
super(data.getStorageId());
//
this.name = data.getName();
this.type = data.getType();
this.locale = data.getLocale();
this.label = data.getLabel();
this.description = data.getDescription();
this.accessPermissions = data.getAccessPermissions().toArray(new String[data.getAccessPermissions().size()]);
this.editPermission = data.getEditPermission();
this.properties = new Properties(data.getProperties());
this.skin = data.getSkin();
this.portalLayout = new Container(data.getPortalLayout());
this.portalRedirects = buildPortalRedirects(data.getRedirects());
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String s) {
name = s;
}
public String getLocale() {
return locale;
}
public void setLocale(String s) {
locale = s;
}
public String[] getAccessPermissions() {
return accessPermissions;
}
public void setAccessPermissions(String[] s) {
accessPermissions = s;
}
public String getEditPermission() {
return editPermission;
}
public void setEditPermission(String editPermission) {
this.editPermission = editPermission;
}
public String getSkin() {
if (skin == null || skin.length() < 1)
return "Default";
return skin;
}
public void setSkin(String s) {
skin = s;
}
public Container getPortalLayout() {
return portalLayout;
}
public void setPortalLayout(Container container) {
portalLayout = container;
}
public boolean isModifiable() {
return modifiable;
}
public void setModifiable(boolean b) {
modifiable = b;
}
public void setPortalRedirects(ArrayList<PortalRedirect> portalRedirects) {
this.portalRedirects = portalRedirects;
}
public ArrayList<PortalRedirect> getPortalRedirects() {
if (portalRedirects == null) {
portalRedirects = new ArrayList<PortalRedirect>();
}
return portalRedirects;
}
public Properties getProperties() {
return properties;
}
public void setProperties(Properties props) {
properties = props;
}
public String getProperty(String name) {
if (name == null)
throw new NullPointerException();
if (properties == null || !properties.containsKey(name))
return null;
return properties.get(name);
}
public String getProperty(String name, String defaultValue) {
String value = getProperty(name);
if (value != null)
return value;
return defaultValue;
}
public void setProperty(String name, String value) {
if (name == null || properties == null)
throw new NullPointerException();
properties.setProperty(name, value);
}
public void removeProperty(String name) {
if (name == null || properties == null)
throw new NullPointerException();
properties.remove(name);
}
public String getSessionAlive() {
return getProperty(PortalProperties.SESSION_ALIVE, PortalProperties.SESSION_ON_DEMAND);
}
public void setSessionAlive(String type) {
setProperty(PortalProperties.SESSION_ALIVE, type);
}
public Boolean isShowInfobar() {
String value = getProperty(PortalProperties.SHOW_PORTLET_INFO, "1");
if (Integer.parseInt(value) == 1) {
return true;
}
return false;
}
public void setShowInfobar(Boolean value) {
if (value) {
setProperty(PortalProperties.SHOW_PORTLET_INFO, "1");
} else {
setProperty(PortalProperties.SHOW_PORTLET_INFO, "0");
}
}
public String getViewport() {
return getProperty(PortalProperties.VIEWPORT);
}
public void setViewport(String viewport) {
setProperty(PortalProperties.VIEWPORT, viewport);
}
public String getSharedLayout() {
return getProperty(PortalProperties.SHARED_LAYOUT, PortalProperties.SHARED_LAYOUT_ALL);
}
public void setSharedLayout(String type) {
if (type.equals(PortalProperties.SHARED_LAYOUT_ADMINS)) {
setProperty(PortalProperties.SHARED_LAYOUT, PortalProperties.SHARED_LAYOUT_ADMINS);
} else {
setProperty(PortalProperties.SHARED_LAYOUT, PortalProperties.SHARED_LAYOUT_ALL);
}
}
public void setDescription(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
public void setLabel(String label) {
this.label = label;
}
public String getLabel() {
return label;
}
public static class PortalConfigSet {
private ArrayList<PortalConfig> portalConfigs;
public ArrayList<PortalConfig> getPortalConfigs() {
return portalConfigs;
}
public void setPortalConfigs(ArrayList<PortalConfig> list) {
portalConfigs = list;
}
}
@Override
public String toString() {
return "PortalConfig[name=" + name + ",type=" + type + "]";
}
/**
* Retuns Container that contains only PageBody
*
* @return
*/
private static Container initDefaultLayout() {
Container container = new Container();
ArrayList<ModelObject> children = new ArrayList<ModelObject>();
children.add(new PageBody());
container.setChildren(children);
return container;
}
public PortalData build() {
List<String> accessPermissions = Utils.safeImmutableList(this.accessPermissions);
Map<String, String> properties = Utils.safeImmutableMap(this.properties);
return new PortalData(storageId, name, type, locale, label, description, accessPermissions, editPermission, properties,
skin, portalLayout.build(), buildRedirectData());
}
private ArrayList<RedirectData> buildRedirectData() {
if (portalRedirects != null) {
ArrayList<RedirectData> redirects = new ArrayList<RedirectData>();
for (PortalRedirect portalRedirect : portalRedirects) {
redirects.add(portalRedirect.build());
}
return redirects;
} else {
return null;
}
}
private ArrayList<PortalRedirect> buildPortalRedirects(List<RedirectData> redirectsData) {
if (redirectsData != null) {
ArrayList<PortalRedirect> portalRedirects = new ArrayList<PortalRedirect>();
for (RedirectData redirectData : redirectsData) {
PortalRedirect portalRedirect = new PortalRedirect();
portalRedirect.setName(redirectData.getRedirectName());
portalRedirect.setRedirectSite(redirectData.getRedirectSiteName());
portalRedirect.setEnabled(redirectData.isEnabled());
portalRedirect.setConditions(buildRedirectConditions(redirectData.getConditions()));
portalRedirect.setMappings(buildRedirectMappings(redirectData.getMappings()));
portalRedirects.add(portalRedirect);
}
return portalRedirects;
}
return null;
}
private ArrayList<RedirectCondition> buildRedirectConditions(List<RedirectConditionData> conditionsData) {
ArrayList<RedirectCondition> redirectConditions = new ArrayList<RedirectCondition>();
for (RedirectConditionData conditionData : conditionsData) {
RedirectCondition redirectCondition = conditionData.build();
redirectConditions.add(redirectCondition);
}
return redirectConditions;
}
private RedirectMappings buildRedirectMappings(RedirectMappingsData mappingsData) {
if (mappingsData != null) {
return mappingsData.build();
} else {
return null;
}
}
}