/*
* 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.modules.actions.controllers;
import java.util.List;
import javax.servlet.ServletRequest;
import org.apache.jetspeed.portal.PortletController;
import org.apache.jetspeed.services.rundata.JetspeedRunData;
import org.apache.jetspeed.services.statemanager.SessionState;
import org.apache.jetspeed.util.StringUtils;
import org.apache.jetspeed.util.template.JspTemplate;
import org.apache.turbine.util.RunData;
import org.apache.velocity.context.Context;
/**
* XMultiColumnControllerAction
*
* @author <a href="mailto:junyang@cisco.com">Jun Yang</a>
*/
public class XMultiColumnControllerAction extends MultiColumnControllerAction {
protected void buildCustomizeContext(PortletController controller,
Context context, RunData rundata) {
super.buildCustomizeContext(controller, context, rundata);
context.put("template", "x-multicolumn-customize.vm");
context.put("action", "controllers.XMultiColumnControllerAction");
context.put("includedContent", new JspTemplate(rundata,
"/controllers/html/x-multicolumn-customize.jsp"));
ServletRequest request = rundata.getRequest();
request.setAttribute("jspContext", context);
// debug
/*
* Object[] columns = (Object[]) context.get("portlets"); Map
* portletTitleMap = (Map) context.get("titles"); for (int i = 0; i <
* columns.length; i++) { List portletList = (List) columns[i]; for (int j =
* 0; j < portletList.size(); j++) { PsmlEntry entry = (PsmlEntry)
* portletList.get(j); String portletTitle = (String)
* portletTitleMap.get(entry.getId());
*
*
* String portletSkinName = entry.getSkin() == null ? "-- Default --" :
* entry.getSkin().getName(); String portletSecurityId =
* entry.getSecurityRef() == null ? "-- Default --" :
* entry.getSecurityRef().getParent(); String controlListBox =
* (entry.getControl() != null && entry.getControl().getName() != null) ?
* JetspeedTool.getPortletParameter(rundata, (Portlet)
* rundata.getUser().getTemp("customizer"), "control",
* entry.getControl().getName()) : JetspeedTool.getPortletParameter(rundata,
* (Portlet) rundata.getUser().getTemp("customizer"), "control");
* controlListBox = controlListBox.substring(12); controlListBox =
* controlListBox.replace('\n', ' '); controlListBox =
* controlListBox.replace('\r', ' '); int z = 0; } }
*/
}
public void doSave(RunData data, Context context) {
applyModelChanges(data, context);
super.doSave(data, context);
}
public void doDelete(RunData data, Context context) {
applyModelChanges(data, context);
super.doDelete(data, context);
}
public void doControl(RunData data, Context context) {
applyModelChanges(data, context);
super.doControl(data, context);
}
protected void applyModelChanges(RunData data, Context context) {
ServletRequest request = data.getRequest();
String[] modelChangeList = request.getParameterValues("modelChangeList");
try {
if (modelChangeList != null && modelChangeList.length > 0) {
if (!modelChangeList[0].equals("")) {
String[] moves = StringUtils.stringToArray(modelChangeList[0], ";");
SessionState customizationState = ((JetspeedRunData) data)
.getPageSessionState();
List[] columns = (List[]) customizationState
.getAttribute("customize-columns");
for (int i = 0; i < moves.length; i++) {
String[] values = StringUtils.stringToArray(moves[i], ",");
int originCol = Integer.parseInt(values[0]);
int originRow = Integer.parseInt(values[1]);
int destCol = Integer.parseInt(values[2]);
int destRow = Integer.parseInt(values[3]);
if (columns[originCol].size() <= originRow)
throw new IndexOutOfBoundsException();
Object portletEntry = columns[originCol].get(originRow);
if (columns[originCol].contains(portletEntry)) {
columns[originCol].remove(originRow);
}
columns[destCol].add(destRow, portletEntry);
}
}
}
} catch (IndexOutOfBoundsException e) {
}
}
}