blob: 5a28a0da39780108e5d820927b1616cb0436196f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.cocoon.portal.pluto.om;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Locale;
import java.util.StringTokenizer;
import org.apache.cocoon.portal.pluto.om.common.ContentTypeSetImpl;
import org.apache.cocoon.portal.pluto.om.common.DescriptionSetImpl;
import org.apache.cocoon.portal.pluto.om.common.DisplayNameSetImpl;
import org.apache.cocoon.portal.pluto.om.common.LanguageSetImpl;
import org.apache.cocoon.portal.pluto.om.common.ParameterSetImpl;
import org.apache.cocoon.portal.pluto.om.common.PreferenceSetImpl;
import org.apache.cocoon.portal.pluto.om.common.SecurityRoleRefSetImpl;
import org.apache.cocoon.portal.pluto.om.common.Support;
import org.apache.pluto.invoker.PortletInvoker;
import org.apache.pluto.om.common.Description;
import org.apache.pluto.om.common.DescriptionSet;
import org.apache.pluto.om.common.DisplayName;
import org.apache.pluto.om.common.DisplayNameSet;
import org.apache.pluto.om.common.LanguageSet;
import org.apache.pluto.om.common.ObjectID;
import org.apache.pluto.om.common.ParameterSet;
import org.apache.pluto.om.common.PreferenceSet;
import org.apache.pluto.om.common.SecurityRoleRefSet;
import org.apache.pluto.om.portlet.ContentTypeSet;
import org.apache.pluto.om.portlet.PortletApplicationDefinition;
import org.apache.pluto.om.portlet.PortletDefinition;
import org.apache.pluto.om.portlet.PortletDefinitionCtrl;
import org.apache.pluto.om.servlet.ServletDefinition;
/**
*
*
* @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
*
* @version CVS $Id$
*/
public class PortletDefinitionImpl
implements PortletDefinition, PortletDefinitionCtrl, java.io.Serializable, Support {
private PortletApplicationDefinition application = null;
private LanguageSet castorResources = null;
// contains String objects
private ArrayList castorSupportedLocales = new ArrayList();
private ClassLoader classLoader;
private String className;
private ContentTypeSet contentTypes = new ContentTypeSetImpl();
private DescriptionSet descriptions = new DescriptionSetImpl();
private DisplayNameSet displayNames = new DisplayNameSetImpl();
private String expirationCache;
public String id = "";
private ParameterSet initParams = new ParameterSetImpl();
private SecurityRoleRefSet initSecurityRoleRefs = new SecurityRoleRefSetImpl();
private String name;
private ObjectID objectId;
private PreferenceSet preferences = new PreferenceSetImpl();
// private PortletInfoImpl portletInfo = null;
private String resourceBundle;
private ServletDefinition servlet;
// contains Locale objects
private ArrayList supportedLocales = new ArrayList();
/** is this a local portlet? */
protected boolean localPortlet = false;
/** The local portlet invoker */
protected PortletInvoker localPortletInvoker;
// PortletDefinition implementation.
public ObjectID getId() {
if (objectId==null) {
objectId = org.apache.cocoon.portal.pluto.om.common.ObjectIDImpl.createFromString(getGUID());
}
return objectId;
}
public String getClassName() {
return className;
}
public String getName() {
return name;
}
/* (non-Javadoc)
* @see org.apache.pluto.om.portlet.PortletDefinition#getDescription(Locale)
*/
public Description getDescription(Locale locale) {
return descriptions.get(locale);
}
public LanguageSet getLanguageSet() {
((LanguageSetImpl)castorResources).setClassLoader(this.getPortletClassLoader());
return castorResources;
}
public ParameterSet getInitParameterSet() {
return initParams;
}
public SecurityRoleRefSet getInitSecurityRoleRefSet() {
return initSecurityRoleRefs;
}
public PreferenceSet getPreferenceSet() {
((PreferenceSetImpl)preferences).setClassLoader(this.getPortletClassLoader());
return preferences;
}
public ContentTypeSet getContentTypeSet() {
return contentTypes;
}
public PortletApplicationDefinition getPortletApplicationDefinition() {
return application;
}
public ServletDefinition getServletDefinition() {
return servlet;
}
public DisplayName getDisplayName(Locale locale) {
return displayNames.get(locale);
}
public String getExpirationCache() {
return expirationCache;
}
// PortletDefinitionCtrl implementation.
public void setId(String id) {
// todo excep
}
public void setClassName(String className) {
this.className = className;
}
public void setName(String name) {
this.name = name;
}
/* (non-Javadoc)
* @see org.apache.pluto.om.portlet.PortletDefinitionCtrl#setDescriptions(DescriptionSet)
*/
public void setDescriptions(DescriptionSet descriptions) {
this.descriptions = descriptions;
}
public void setDisplayNames(DisplayNameSet displayNames) {
this.displayNames = displayNames;
}
public void setPortletClassLoader(ClassLoader loader) {
this.classLoader = loader;
}
public void store() throws java.io.IOException {
// not supported
}
public void postBuild(Object parameter) throws Exception {
setServletDefinition((ServletDefinition)parameter);
((Support)contentTypes).postBuild(this);
if (castorResources!=null) {
((Support)castorResources).postBuild(this);
}
}
public void postLoad(Object parameter) throws Exception {
((Support)contentTypes).postLoad(this);
// create Locale objects for given locale entries
Iterator iterator = castorSupportedLocales.iterator();
while (iterator.hasNext()) {
String locale = (String)iterator.next();
// parse locale String
StringTokenizer tokenizer = new StringTokenizer(locale,"_");
String[] localeDef = new String[3];
for (int i=0; i<3 ;i++) {
if (tokenizer.hasMoreTokens()) {
localeDef[i] = tokenizer.nextToken();
} else {
localeDef[i] = "";
}
}
supportedLocales.add(new java.util.Locale(localeDef[0], localeDef[1], localeDef[2]));
}
if (castorResources==null) {
castorResources = new LanguageSetImpl();
}
if (resourceBundle!=null) {
((LanguageSetImpl)castorResources).setResources(resourceBundle);
}
((Support)castorResources).postLoad(this.supportedLocales);
((Support)descriptions).postLoad(parameter);
((Support)displayNames).postLoad(parameter);
}
public void postStore(Object parameter) throws Exception {
((Support)contentTypes).postStore(this);
if (castorResources!=null) {
((Support)castorResources).postStore(this);
}
}
public void preBuild(Object parameter) throws Exception {
setPortletApplicationDefinition((PortletApplicationDefinition)parameter);
((Support)contentTypes).preBuild(this);
if (castorResources!=null) {
((Support)castorResources).preBuild(this);
}
}
public void preStore(Object parameter) throws Exception {
((Support)contentTypes).preStore(this);
if (castorResources!=null) {
((Support)castorResources).preStore(this);
}
}
// additional methods.
public Collection getCastorContentTypes() {
return(ContentTypeSetImpl)contentTypes;
}
public Collection getCastorDisplayNames() {
return(DisplayNameSetImpl)displayNames;
}
public Collection getCastorDescriptions() {
return(DescriptionSetImpl)descriptions;
}
public Collection getDescriptions() {
return(DescriptionSetImpl)descriptions;
}
public Collection getCastorInitParams() {
return(ParameterSetImpl)initParams;
}
public SecurityRoleRefSet getCastorInitSecurityRoleRefs() {
return initSecurityRoleRefs;
}
public PreferenceSet getCastorPreferences() {
return preferences;
}
public LanguageSet getCastorResources() {
return castorResources;
}
// not yet fully supported
// public Collection getSecurityRoleRef()
// {
// return securityRoleRef;
// }
// public void setSecurityRoleRef(Collection securityRoleRef)
// {
// this.securityRoleRef = (ArrayList)securityRoleRef;
// }
// additional internal methods
public Collection getCastorSupportedLocales() {
return castorSupportedLocales;
}
private String getGUID() {
String portletID = "";
if (getName()!=null) portletID += getName();
portletID = application.getId().toString() + "."+portletID;
return portletID;
}
public ClassLoader getPortletClassLoader() {
return classLoader;
}
public String getResourceBundle() {
return this.resourceBundle;
}
public Collection getSupportedLocales() {
return supportedLocales;
}
public void setCastorContentTypes(ContentTypeSet castorContentTypes) {
this.contentTypes = castorContentTypes;
}
public void setCastorInitParams(ParameterSet castorInitParams) {
this.initParams = castorInitParams;
}
public void setCastorInitSecurityRoleRefs(SecurityRoleRefSet castorInitSecurityRoleRefs) {
this.initSecurityRoleRefs = castorInitSecurityRoleRefs;
}
public void setCastorDisplayNames(DisplayNameSet castorDisplayNames) {
this.displayNames = castorDisplayNames;
}
public void setCastorDescriptions(DescriptionSet castorDescriptions) {
this.descriptions = castorDescriptions;
}
public void setCastorPreferences(PreferenceSet castorPreferences) {
this.preferences = castorPreferences;
}
public void setCastorResources(LanguageSet resources) {
this.castorResources = resources;
}
public void setCastorSupportedLocales(Collection castorSupportedLocales) {
this.castorSupportedLocales = (ArrayList)castorSupportedLocales;
}
public void setExpirationCache(String expirationCache) {
this.expirationCache = expirationCache;
}
protected void setPortletApplicationDefinition(PortletApplicationDefinition application) {
this.application = application;
}
public void setResourceBundle(String resourceBundle) {
this.resourceBundle = resourceBundle;
}
protected void setServletDefinition(ServletDefinition servlet) {
this.servlet = servlet;
}
/**
* @return Returns the localPortlet.
*/
public boolean isLocalPortlet() {
return this.localPortlet;
}
/**
* @param localPortlet The localPortlet to set.
*/
public void setLocalPortlet(boolean localPortlet) {
this.localPortlet = localPortlet;
}
/**
* @return Returns the localPortletInvoker.
*/
public PortletInvoker getLocalPortletInvoker() {
return this.localPortletInvoker;
}
/**
* Set a local portlet invoker for caching
* @param localPortletInvoker The localPortletInvoker to set.
*/
public void setLocalPortletInvoker(PortletInvoker localPortletInvoker) {
this.localPortletInvoker = localPortletInvoker;
}
}