/*
* Copyright 2000-2004 The Apache Software Foundation.
*
* Licensed 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.jetspeed.portal.controllers;
//jetspeed support
import org.apache.jetspeed.portal.BasePortletSetConstraints;
import org.apache.jetspeed.portal.PortletConfig;
import org.apache.jetspeed.portal.PortletController;
import org.apache.jetspeed.portal.PortletControllerConfig;
import org.apache.jetspeed.portal.PortletSet;
import org.apache.jetspeed.capability.CapabilityMap;
import org.apache.jetspeed.services.rundata.JetspeedRunData;
import org.apache.jetspeed.services.Registry;
import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
import org.apache.jetspeed.om.registry.PortletControllerEntry;
import org.apache.jetspeed.om.registry.MediaTypeEntry;
import org.apache.jetspeed.util.MimeType;
//turbine support
import org.apache.turbine.util.RunData;
//ecs stuff
import org.apache.ecs.ConcreteElement;
import org.apache.ecs.ElementContainer;
import java.util.Map;
import java.util.Iterator;
/**
@author <a href="mailto:burton@apache.org">Kevin A. Burton</a>
@version $Id: AbstractPortletController.java,v 1.26 2004/02/23 03:25:06 jford Exp $
*/
public abstract class AbstractPortletController implements PortletController
{
/**
* Static initialization of the logger for this class
*/
private static final JetspeedLogger logger = JetspeedLogFactoryService.getLogger(AbstractPortletController.class.getName());
/**
* Default padding to be displayed between portlets
*/
public int DEFAULT_PADDING = 3;
private String width="100%";
private PortletSet portlets = null;
private PortletControllerConfig conf = null;
/**
Allows the user to override the default set of portlets...
*/
public final void setConfig(PortletControllerConfig conf)
{
this.conf = conf;
}
/**
*/
public final PortletControllerConfig getConfig()
{
return this.conf;
}
/**
Allows the user to override the default set of portlets...
*/
public final void setPortlets(PortletSet portlets)
{
this.portlets = portlets;
}
/**
*/
public final PortletSet getPortlets()
{
return this.portlets;
}
/**
*/
public String getWidth() {
return this.width;
}
/**
*/
public void setWidth(String width) {
this.width = width;
}
/**
Returns the padding value between the displayed portlets
*/
public int getPadding() {
int padding = 0;
try {
PortletConfig conf = getPortlets().getPortletConfig();
padding = Integer.parseInt( conf.getSkin( "padding" , String.valueOf( DEFAULT_PADDING ) ) );
} catch ( RuntimeException e ) {
logger.error("Exception getting padding value", e);
padding = DEFAULT_PADDING;
}
return padding;
}
/**
Sets the padding space to be put between portlets
*/
public void setPadding(int padding) {
try {
PortletConfig conf = getPortlets().getPortletConfig();
conf.setSkin( "padding" , String.valueOf( padding ) );
} catch ( RuntimeException e ) {
logger.error("Exception setting padding value", e);
// FIXME: What should we do if there's no portlets, config or skin defined ?
}
}
/**
Sets the padding space to be put between portlets
*/
public void setPadding(String padding) {
try {
PortletConfig conf = getPortlets().getPortletConfig();
conf.setSkin( "padding" , padding );
} catch ( RuntimeException e ) {
logger.error("Exception setting padding value", e);
// FIXME: What should we do if there's no portlets, config or skin defined ?
}
}
/**
*/
public void init()
{
// no specific init
}
/**
@see Portlet#supportsType
*/
public boolean supportsType( MimeType mimeType )
{
// we now need to check that the control also supports the type...
PortletControllerEntry entry =
(PortletControllerEntry)Registry.getEntry(Registry.PORTLET_CONTROLLER,
getConfig().getName() );
String baseType = mimeType.toString();
if (entry!=null)
{
Iterator i = entry.listMediaTypes();
while(i.hasNext())
{
String name = (String)i.next();
MediaTypeEntry media = (MediaTypeEntry)Registry.getEntry(Registry.MEDIA_TYPE, name);
if (media != null)
{
if (baseType.equals(media.getMimeType()))
{
return true;
}
}
}
}
return false;
}
/**
*/
public ConcreteElement getContent( RunData rundata )
{
CapabilityMap map = ((JetspeedRunData)rundata).getCapability();
ConcreteElement content = null;
if ( MimeType.WML.equals( map.getPreferredType() ) )
{
content = getWMLContent( portlets, rundata );
}
else if ( MimeType.HTML.equals( map.getPreferredType() ) )
{
content = getHTMLContent( portlets, rundata );
}
else
{
// we don't know how to handle this type, maybe a subclass knows
content = getContent( portlets, rundata );
}
return content;
}
/**
*/
protected ConcreteElement getContent( PortletSet set, RunData data )
{
return new ElementContainer();
}
/**
*/
protected ConcreteElement getWMLContent( PortletSet set, RunData data )
{
return new ElementContainer();
}
/**
*/
protected ConcreteElement getHTMLContent( PortletSet set, RunData data )
{
return new ElementContainer();
}
/**
* Creates a constraint object based on an original map source.
*
* @param original the source for this constraint object
* @return a new Constraints object appropriate for this controller
*/
public PortletSet.Constraints getConstraints( Map original )
{
PortletSet.Constraints constraints = new BasePortletSetConstraints();
if (original != null) constraints.putAll(original);
return constraints;
}
}