blob: 5f27c2f9ca6444389aeb6ed6134b852cb979b9cc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 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.wst.ws.internal.explorer.platform.actions;
import java.util.Hashtable;
import java.util.Vector;
import javax.servlet.http.HttpServletRequest;
import org.eclipse.wst.ws.internal.explorer.platform.engine.transformer.CurrentNodeSelectionTransformer;
import org.eclipse.wst.ws.internal.explorer.platform.engine.transformer.ITransformer;
import org.eclipse.wst.ws.internal.explorer.platform.perspective.Controller;
import org.eclipse.wst.ws.internal.explorer.platform.perspective.MessageQueue;
import org.eclipse.wst.ws.internal.explorer.platform.perspective.Perspective;
// Abstract action class used for both Link and Form actions.
public abstract class Action
{
protected Controller controller_;
protected Hashtable propertyTable_;
protected Vector removedProperties_;
public Action()
{
this(null);
}
public Action(Controller controller)
{
controller_ = controller;
propertyTable_ = new Hashtable();
removedProperties_ = new Vector();
}
public final Controller getController()
{
return controller_;
}
/**
* Read properties from an HttpServletRequest and add them to the property table.
* @param HttpServletRequest The HttpServletRequest containing the embedded parameters.
* @return boolean Whether or not the operation was successful.
*/
public abstract boolean populatePropertyTable(HttpServletRequest request);
/**
* Get the property table.
* @return Hashtable A hashtable containing the properties for this action.
*/
public final Hashtable getPropertyTable()
{
return propertyTable_;
}
/**
* Set the property table.
* @return void
*/
public void setPropertyTable(Hashtable propertyTable)
{
propertyTable_ = propertyTable;
}
/**
* Add a property to the property table.
* @param void
*/
public final void addProperty(Object key, Object value)
{
propertyTable_.put(key, value);
}
/**
* Remove a property from the property table. Track the deletions.
* @param Object The key of the property being removed.
*/
public final void removeProperty(Object key)
{
propertyTable_.remove(key);
removedProperties_.addElement(key);
}
public final String[] getPropertyAsStringArray(Object key)
{
Object object = propertyTable_.get(key);
if (object instanceof String[])
return (String[])object;
else if (object != null)
return new String[] {object.toString()};
else
return new String[0];
}
public final boolean execute()
{
return execute(true);
}
public final boolean execute(boolean useActionEngine)
{
if (useActionEngine)
return controller_.getActionEngine().executeAction(this);
else
return run();
}
// Abstract method for running this action.
public abstract boolean run();
/**
* Return the transformers used to normalize the input/output parameters for this action
* @return ITransformer[]
*/
public ITransformer[] getTransformers()
{
return new ITransformer[] {new CurrentNodeSelectionTransformer(controller_)};
}
protected void handleUnexpectedException(Perspective perspective,MessageQueue messageQueue,String exceptionName,Throwable t)
{
messageQueue.addMessage(perspective.getController().getMessage("MSG_ERROR_UNEXPECTED"));
messageQueue.addMessage(exceptionName);
messageQueue.addMessage(t.getMessage());
}
}