Author: julien(a)jboss.com
Date: 2008-02-03 12:05:57 -0500 (Sun, 03 Feb 2008)
New Revision: 9722
Added:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/info/ContainerOptionInfo.java
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/info/ContainerInfoBuilder.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/info/ContainerPortletInfo.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/PortletConfigImpl.java
Log:
start to add support for container runtime options
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/info/ContainerInfoBuilder.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/info/ContainerInfoBuilder.java 2008-02-03
16:12:29 UTC (rev 9721)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/info/ContainerInfoBuilder.java 2008-02-03
17:05:57 UTC (rev 9722)
@@ -33,6 +33,7 @@
import org.jboss.portal.portlet.impl.metadata.portlet.PortletInfoMetaData;
import org.jboss.portal.portlet.impl.metadata.security.SecurityConstraintMetaData;
import org.jboss.portal.portlet.impl.metadata.common.InitParamMetaData;
+import org.jboss.portal.portlet.impl.metadata.common.ContainerRuntimeMetaData;
import org.jboss.portal.portlet.impl.metadata.event.EventDefinitionReferenceMetaData;
import org.jboss.portal.portlet.impl.metadata.event.EventDefinitionMetaData;
import org.jboss.portal.portlet.impl.metadata.PortletApplication10MetaData;
@@ -131,6 +132,9 @@
private static final Map<String,FilterMetaData> EMPTY_FILTER_MAP =
Collections.emptyMap();
/** . */
+ private static final Map<String,ContainerRuntimeMetaData>
EMPTY_CONTAINER_RUNTIME_OPTION_MAP = Collections.emptyMap();
+
+ /** . */
private final PortletApplication10MetaData portletApplicationMD;
/** . */
@@ -151,6 +155,9 @@
/** . */
private final Logger log = Logger.getLogger(ContainerInfoBuilder.class);
+ /** . */
+ private Map<String, ContainerOptionInfo> applicationOptions;
+
public ContainerInfoBuilder(
PortletApplication10MetaData portletApplicationMD,
ContainerInfoBuilderContext context)
@@ -215,6 +222,10 @@
{
tmp.setFilterMapping(EMPTY_FILTER_MAPPING_MAP);
}
+ if (tmp.getContainerRuntimeOptions() == null)
+ {
+ tmp.setContainerRuntimeOptions(EMPTY_CONTAINER_RUNTIME_OPTION_MAP);
+ }
}
}
@@ -278,6 +289,10 @@
{
portletMD.setSupportedPublishingEvent(EMPTY_EVENT_DEFINITION_REFERENCE_LIST);
}
+ if (portletMD.getContainerRuntimeOptions() == null)
+ {
+ portletMD.setContainerRuntimeOptions(EMPTY_CONTAINER_RUNTIME_OPTION_MAP);
+ }
}
}
@@ -366,6 +381,17 @@
}
//
+ applicationOptions = build(tmp.getContainerRuntimeOptions().values());
+ if (applicationOptions != null)
+ {
+ applicationOptions = Collections.unmodifiableMap(applicationOptions);
+ }
+ else
+ {
+ applicationOptions = Collections.emptyMap();
+ }
+
+ //
listeners = new
ArrayList<ContainerListenerInfo>(tmp.getListeners().size());
for (ListenerMetaData listenerMD : tmp.getListeners())
{
@@ -472,11 +498,19 @@
ContainerSessionInfo containerSession = buildContainerSession(portletMD);
//
- Map<String, String> initParameters = new HashMap<String, String>();
+ Map<String, String> initParameters = Collections.emptyMap();
for (InitParamMetaData initParamMD : portletMD.getInitParams())
{
+ if (initParameters.isEmpty())
+ {
+ initParameters = new HashMap<String, String>();
+ }
initParameters.put(initParamMD.getName(), initParamMD.getValue());
}
+ if (initParameters.size() > 0)
+ {
+ initParameters = Collections.unmodifiableMap(initParameters);
+ }
//
ContainerPortletInfo containerPortletInfo;
@@ -486,7 +520,7 @@
ContainerNavigationInfo containerNavigation =
buildContainerNavigationInfo(portletMD);
//
- List<String> filters = new ArrayList<String>();
+ List<String> filters = Collections.emptyList();
for (FilterMappingMetaData filterMappingMD :
((PortletApplication20MetaData)portletApplicationMD).getFilterMapping().values())
{
for (String portletName : filterMappingMD.getPortletNames())
@@ -510,12 +544,38 @@
// Add the filter
if (matches)
{
+ if (filters.isEmpty())
+ {
+ filters = new ArrayList<String>();
+ }
filters.add(filterMappingMD.getName());
}
}
}
+ if (filters.size() > 0)
+ {
+ filters = Collections.unmodifiableList(filters);
+ }
//
+ Map<String, ContainerOptionInfo> options =
build(portletMD.getContainerRuntimeOptions().values());
+ if (options != null)
+ {
+ for (Map.Entry<String, ContainerOptionInfo> entry :
applicationOptions.entrySet())
+ {
+ if (!options.containsKey(entry.getKey()))
+ {
+ options.put(entry.getKey(), entry.getValue());
+ }
+ }
+ options = Collections.unmodifiableMap(options);
+ }
+ else
+ {
+ options = applicationOptions;
+ }
+
+ //
containerPortletInfo = new ContainerPortletInfo(
containerCapabilities,
containerPreferences,
@@ -525,12 +585,13 @@
containerSession,
containerEvents,
containerNavigation,
- Collections.unmodifiableList(filters),
+ filters,
portletMD.getPortletName(),
portletMD.getPortletClass(),
- Collections.unmodifiableMap(initParameters),
+ initParameters,
false,
- context.getBundleManager(portletMD)
+ context.getBundleManager(portletMD),
+ options
);
}
else
@@ -554,6 +615,26 @@
return containerPortletInfo;
}
+ private Map<String, ContainerOptionInfo>
build(Collection<ContainerRuntimeMetaData> optionsMD)
+ {
+ Map<String, ContainerOptionInfo> options = null;
+ for (ContainerRuntimeMetaData containerRuntimeMD : optionsMD)
+ {
+ ContainerOptionInfo optionInfo = build(containerRuntimeMD);
+ if (options == null)
+ {
+ options = new HashMap<String, ContainerOptionInfo>();
+ }
+ options.put(optionInfo.getName(), optionInfo);
+ }
+ return options;
+ }
+
+ private ContainerOptionInfo build(ContainerRuntimeMetaData containerRuntimeMD)
+ {
+ return new ContainerOptionInfo(containerRuntimeMD.getName(),
Collections.unmodifiableList(containerRuntimeMD.getValues()));
+ }
+
private ContainerNavigationInfo buildContainerNavigationInfo(PortletMetaData
portletMD)
{
ContainerNavigationInfo navigation = new ContainerNavigationInfo();
Added:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/info/ContainerOptionInfo.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/info/ContainerOptionInfo.java
(rev 0)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/info/ContainerOptionInfo.java 2008-02-03
17:05:57 UTC (rev 9722)
@@ -0,0 +1,55 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * 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.jboss.portal.portlet.impl.info;
+
+import java.util.List;
+
+/**
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 630 $
+ */
+public class ContainerOptionInfo
+{
+
+ /** . */
+ private final String name;
+
+ /** . */
+ private final List<String> values;
+
+ public ContainerOptionInfo(String name, List<String> values)
+ {
+ this.name = name;
+ this.values = values;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public List<String> getValues()
+ {
+ return values;
+ }
+}
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/info/ContainerPortletInfo.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/info/ContainerPortletInfo.java 2008-02-03
16:12:29 UTC (rev 9721)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/info/ContainerPortletInfo.java 2008-02-03
17:05:57 UTC (rev 9722)
@@ -82,6 +82,9 @@
/** . */
private final List<String> filterRefs;
+ /** . */
+ private final Map<String, ContainerOptionInfo> options;
+
public ContainerPortletInfo(
ContainerCapabilitiesInfo capabilities,
ContainerPreferencesInfo preferences,
@@ -109,6 +112,7 @@
this.initParameters = initParameters;
this.remotable = remotable;
this.bundleManager = bundleManager;
+ this.options = Collections.emptyMap();
}
ContainerPortletInfo(
@@ -125,7 +129,8 @@
String className,
Map<String, String> initParameters,
Boolean remotable,
- ResourceBundleManager bundleManager)
+ ResourceBundleManager bundleManager,
+ Map<String, ContainerOptionInfo> options)
{
this.capabilities = capabilities;
this.preferences = preferences;
@@ -141,6 +146,7 @@
this.initParameters = initParameters;
this.remotable = remotable;
this.bundleManager = bundleManager;
+ this.options = options;
}
public String getName()
@@ -148,6 +154,11 @@
return name;
}
+ public Map<String, ContainerOptionInfo> getOptions()
+ {
+ return options;
+ }
+
public ResourceBundleManager getBundleManager()
{
return bundleManager;
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/PortletConfigImpl.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/PortletConfigImpl.java 2008-02-03
16:12:29 UTC (rev 9721)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/PortletConfigImpl.java 2008-02-03
17:05:57 UTC (rev 9722)
@@ -23,9 +23,11 @@
package org.jboss.portal.portlet.impl.jsr168.api;
import org.jboss.portal.common.i18n.ResourceBundleManager;
+import org.jboss.portal.common.util.ParameterMap;
import org.jboss.portal.portlet.impl.info.ContainerParameterInfo;
import org.jboss.portal.portlet.impl.info.ContainerPortletApplicationInfo;
import org.jboss.portal.portlet.impl.info.ContainerPortletInfo;
+import org.jboss.portal.portlet.impl.info.ContainerOptionInfo;
import javax.portlet.PortletConfig;
import javax.portlet.PortletContext;
@@ -66,6 +68,9 @@
/** . */
private List<String> publicRenderParameterNames;
+ /** . */
+ private Map<String, String[]> containerRuntimeOptions;
+
public PortletConfigImpl(
ContainerPortletInfo portletInfo,
ContainerPortletApplicationInfo portletApplicationInfo,
@@ -80,6 +85,24 @@
}
//
+ Map<String, String[]> containerRuntimeOptions;
+ if (portletInfo.getOptions().size() > 0)
+ {
+ ParameterMap tmp = new ParameterMap(ParameterMap.AccessMode.get(true, false));
+ for (ContainerOptionInfo option : portletInfo.getOptions().values())
+ {
+ String name = option.getName();
+ String[] values = option.getValues().toArray(new
String[option.getValues().size()]);
+ tmp.setValues(name, values);
+ }
+ containerRuntimeOptions = Collections.unmodifiableMap(tmp);
+ }
+ else
+ {
+ containerRuntimeOptions = Collections.emptyMap();
+ }
+
+ //
this.portletInfo = portletInfo;
this.portletApplicationInfo = portletApplicationInfo;
this.portletContext = portletContext;
@@ -87,6 +110,7 @@
this.publishingEventQNames = new
ArrayList<QName>(portletInfo.getEventing().getProducedEvents().keySet());
this.processingEventQNames = new
ArrayList<QName>(portletInfo.getEventing().getConsumedEvents().keySet());
this.publicRenderParameterNames = publicRenderParameterNames;
+ this.containerRuntimeOptions = containerRuntimeOptions;
}
public String getPortletName()
@@ -146,7 +170,6 @@
public Map<String, String[]> getContainerRuntimeOptions()
{
- // For now we support no container runtime options
- return Collections.emptyMap();
+ return containerRuntimeOptions;
}
}