rowcolumncontrolleraction.java
来自「jetspeed源代码」· Java 代码 · 共 636 行 · 第 1/2 页
JAVA
636 行
/*
* Copyright 2000-2001,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.modules.actions.controllers;
//Jetspeed Stuff
import org.apache.jetspeed.om.profile.Profile;
import org.apache.jetspeed.om.registry.RegistryEntry;
import org.apache.jetspeed.om.profile.Portlets;
import org.apache.jetspeed.om.profile.Entry;
import org.apache.jetspeed.om.profile.Layout;
import org.apache.jetspeed.om.profile.psml.PsmlLayout;
import org.apache.jetspeed.portal.PortletSet;
import org.apache.jetspeed.portal.PortletController;
import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
import org.apache.jetspeed.services.Registry;
import org.apache.jetspeed.services.rundata.JetspeedRunData;
import org.apache.jetspeed.util.AutoProfile;
// Turbine stuff
//import org.apache.turbine.util.DynamicURI;
import org.apache.turbine.util.RunData;
import org.apache.turbine.modules.ActionLoader;
// Velocity Stuff
import org.apache.velocity.context.Context;
// Java stuff
import java.util.Vector;
import java.util.List;
import java.util.StringTokenizer;
import java.util.Iterator;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.Collections;
import java.util.Comparator;
/**
* This action builds a context suitable for controllers handlings simple
* sorted lists of portlets
*
* @author <a href="mailto:raphael@apache.org">Rapha雔 Luta</a>
* @author <a href="mailto:paulsp@apache.org">Paul Spencer</a>
*/
public class RowColumnControllerAction extends VelocityControllerAction
{
/**
* Static initialization of the logger for this class
*/
private static final JetspeedLogger logger = JetspeedLogFactoryService.getLogger(RowColumnControllerAction.class.getName());
/**
* Subclasses must override this method to provide default behavior
* for the portlet action
*/
protected void buildNormalContext( PortletController controller,
Context context,
RunData rundata )
{
//retrieve the size for each of the element
String sizes = controller.getConfig().getInitParameter("sizes");
context.put("sizes", getCellSizes(sizes));
}
/** Parses the size config info and returns a list of
* size values for the current set
*
* @param sizeList java.lang.String a comma separated string a values
* @return a List of values
*/
public static List getCellSizes(String sizelist)
{
List list = new Vector();
if (sizelist!=null)
{
StringTokenizer st = new StringTokenizer(sizelist,",");
while (st.hasMoreTokens())
{
list.add(st.nextToken());
}
}
return list;
}
/**
* Adds a "pane" portlet object in the context which represents the
* currently selected pane
*/
protected void buildCustomizeContext( PortletController controller,
Context context,
RunData rundata )
{
super.buildCustomizeContext(controller, context, rundata);
JetspeedRunData jdata = (JetspeedRunData)rundata;
PortletSet set = (PortletSet)jdata.getCustomized();
Portlets portlets = jdata.getCustomizedProfile()
.getDocument()
.getPortletsById(set.getID());
List plist = new ArrayList();
List work = new ArrayList();
List filler = Collections.nCopies(portlets.getPortletsCount()+portlets.getEntryCount(),null);
plist.addAll(filler);
for (int i=0; i < portlets.getPortletsCount(); i++)
{
Portlets p = portlets.getPortlets(i);
if (logger.isDebugEnabled())
{
logger.debug("RowColumnControllerAction: processing portlet: " + p.getTitle());
}
Layout layout = p.getLayout();
if (layout == null)
{
// Pane should always have a layout with correct position
if (logger.isDebugEnabled())
{
logger.debug("RowColumnControllerAction: no layout, creating a new one");
}
layout = new PsmlLayout();
layout.setPosition(i);
p.setLayout(layout);
}
if (layout!=null)
{
try
{
int pos = (int)layout.getPosition();
if (logger.isDebugEnabled())
{
logger.debug("RowColumnControllerAction: layout has position: " + pos);
}
if (pos >= 0 && pos < plist.size())
{
plist.set(pos,p);
}
else
{
work.add(p);
}
}
catch (Exception e)
{
logger.error("Layout error", e);
layout.setPosition(-1);
work.add(p);
}
}
else
{
work.add(p);
}
}
for (int i=0; i < portlets.getEntryCount(); i++)
{
Entry p = portlets.getEntry(i);
Layout layout = p.getLayout();
if (layout!=null)
{
try
{
int pos = (int)layout.getPosition();
if (pos>=0)
{
plist.set(pos,p);
}
else
{
work.add(p);
}
}
catch (Exception e)
{
layout.setPosition(-1);
work.add(p);
}
}
else
{
work.add(p);
}
}
Iterator i = work.iterator();
for(int idx=0;idx < plist.size(); idx++)
{
if (plist.get(idx)==null)
{
if (i.hasNext())
{
plist.set(idx,i.next());
}
else
{
plist.remove(idx);
}
}
}
Map titles = new HashMap();
i = plist.iterator();
while(i.hasNext())
{
Object obj = i.next();
if (obj instanceof Portlets)
{
Portlets entry = (Portlets)obj;
if ((entry.getMetaInfo()!=null)&&(entry.getMetaInfo().getTitle()!=null))
{
titles.put(entry.getId(),entry.getMetaInfo().getTitle());
}
}
else
{
Entry entry = (Entry)obj;
if ((entry.getMetaInfo()!=null)&&(entry.getMetaInfo().getTitle()!=null))
{
titles.put(entry.getId(), entry.getMetaInfo().getTitle());
}
else
{
RegistryEntry pentry = Registry.getEntry(Registry.PORTLET,entry.getParent());
if (pentry!=null)
{
titles.put(entry.getId(), pentry.getTitle());
}
}
}
}
context.put("portlets",plist);
context.put("titles",titles);
/**
* Make a list of all used portlets available thru the 'runs' reference
* --------------------------------------------------------------------------
* last modified: 10/31/01
* Andreas Kempf, Siemens ICM S CP PE, Munich
* mailto: A.Kempf@web.de
*/
context.put("runs", AutoProfile.getPortletList(rundata));
// --------------------------------------------------------------------------
}
/**
* Cancel the current customizations. If this was the last customization
* on the stack, then return the user to the home page.
*/
public void doCancel(RunData data, Context context)
{
((JetspeedRunData)data).setCustomized(null);
if (((JetspeedRunData)data).getCustomized() == null)
{
try
{
ActionLoader.getInstance().exec( data, "controls.EndCustomize" );
}
catch (Exception e)
{
logger.error("Unable to load action controls.EndCustomize ",e);
}
}
}
public void doSave(RunData data, Context context)
{
doApply(data, context);
}
public void doApply(RunData data, Context context)
{
// move one level back in customization
((JetspeedRunData) data).setCustomized(null);
// if we are all done customization
if (((JetspeedRunData) data).getCustomized() == null)
{
// save the edit profile and make it current
try
{
((JetspeedRunData) data).getCustomizedProfile().store();
}
catch (Exception e)
{
logger.error("Unable to save profile ",e);
}
try
{
ActionLoader.getInstance().exec( data, "controls.EndCustomize" );
}
catch (Exception e)
{
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?