blob: e989fce427a47f991571b012caf30906b999a5c2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.help.internal.webapp.data;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.eclipse.help.internal.webapp.servlet.*;
import org.eclipse.help.internal.workingset.*;
/**
* This class manages help working sets
*/
public class WorkingSetManagerData extends RequestData {
private final static int NONE = 0;
private final static int ADD = 1;
private final static int REMOVE = 2;
private final static int EDIT = 3;
private String name;
private WebappWorkingSetManager wsmgr;
// Indicates whether operation specified in the request failed
private boolean saved = true;
public WorkingSetManagerData(ServletContext context,
HttpServletRequest request, HttpServletResponse response) {
super(context, request, response);
wsmgr = new WebappWorkingSetManager(request, response, getLocale());
name = request.getParameter("workingSet"); //$NON-NLS-1$
try {
switch (getOperation()) {
case ADD :
addWorkingSet();
break;
case REMOVE :
removeWorkingSet();
break;
case EDIT :
editWorkingSet();
break;
default :
break;
}
} catch (IOException ioe) {
saved = false;
}
}
public void addWorkingSet() throws IOException {
if (name != null && name.length() > 0) {
String[] hrefs = request.getParameterValues("hrefs"); //$NON-NLS-1$
if (hrefs == null)
hrefs = new String[0];
ArrayList selectedElements = new ArrayList(hrefs.length);
for (int i = 0; i < hrefs.length; i++) {
AdaptableHelpResource res = getAdaptableHelpResource(hrefs[i]);
if (res != null)
selectedElements.add(res);
}
AdaptableHelpResource[] elements = new AdaptableHelpResource[selectedElements
.size()];
selectedElements.toArray(elements);
WorkingSet ws = wsmgr.createWorkingSet(name, elements);
wsmgr.addWorkingSet(ws);
}
}
public void removeWorkingSet() {
if (name != null && name.length() > 0) {
WorkingSet ws = wsmgr.getWorkingSet(name);
if (ws != null)
wsmgr.removeWorkingSet(ws);
}
}
public void editWorkingSet() throws IOException {
if (name != null && name.length() > 0) {
String oldName = request.getParameter("oldName"); //$NON-NLS-1$
if (oldName == null || oldName.length() == 0)
oldName = name;
WorkingSet ws = wsmgr.getWorkingSet(oldName);
if (ws != null) {
String[] hrefs = request.getParameterValues("hrefs"); //$NON-NLS-1$
if (hrefs == null)
hrefs = new String[0];
ArrayList selectedElements = new ArrayList(hrefs.length);
for (int i = 0; i < hrefs.length; i++) {
AdaptableHelpResource res = getAdaptableHelpResource(hrefs[i]);
if (res != null)
selectedElements.add(res);
}
AdaptableHelpResource[] elements = new AdaptableHelpResource[selectedElements
.size()];
selectedElements.toArray(elements);
ws.setElements(elements);
ws.setName(name);
// should also change the name....
// We send this notification, so that the manager fires to its
// listeners
wsmgr.workingSetChanged(ws);
}
}
}
public String[] getWorkingSets() {
WorkingSet[] workingSets = wsmgr.getWorkingSets();
String[] sets = new String[workingSets.length];
for (int i = 0; i < workingSets.length; i++)
sets[i] = workingSets[i].getName();
return sets;
}
public String getWorkingSetName() {
if (name == null || name.length() == 0) {
// See if anything is set in the preferences
name = wsmgr.getCurrentWorkingSet();
if (name == null || name.length() == 0
|| wsmgr.getWorkingSet(name) == null)
name = ServletResources.getString("All", request); //$NON-NLS-1$
}
return name;
}
public WorkingSet getWorkingSet() {
if (name != null && name.length() > 0)
return wsmgr.getWorkingSet(name);
return null;
}
public boolean isCurrentWorkingSet(int i) {
WorkingSet[] workingSets = wsmgr.getWorkingSets();
return workingSets[i].getName().equals(name);
}
private int getOperation() {
String op = request.getParameter("operation"); //$NON-NLS-1$
if ("add".equals(op)) //$NON-NLS-1$
return ADD;
else if ("remove".equals(op)) //$NON-NLS-1$
return REMOVE;
else if ("edit".equals(op)) //$NON-NLS-1$
return EDIT;
else
return NONE;
}
private AdaptableHelpResource getAdaptableHelpResource(String internalId) {
AdaptableHelpResource res = wsmgr.getAdaptableToc(internalId);
if (res == null)
res = wsmgr.getAdaptableTopic(internalId);
return res;
}
/**
* @return null or error message if saving saved
*/
public String getSaveError() {
if (saved) {
return null;
}
return UrlUtil.JavaScriptEncode(ServletResources.getString(
"cookieSaveFailed", request)); //$NON-NLS-1$
}
}