Skip to main content

This CGIT instance is deprecated, and repositories have been moved to Gitlab or Github. See the repository descriptions for specific locations.

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine')
-rw-r--r--bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/ActionDataParser.java231
-rw-r--r--bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/ActionEngine.java234
-rw-r--r--bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/constants/ActionDataConstants.java30
-rw-r--r--bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/data/ActionDescriptor.java92
-rw-r--r--bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/data/ScenarioDescriptor.java26
-rw-r--r--bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/data/TransactionDescriptor.java26
-rw-r--r--bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/CurrentNodeSelectionTransformer.java47
-rw-r--r--bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/ITransformer.java19
-rw-r--r--bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/MassNodeIdTransformer.java105
-rw-r--r--bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/MultipartFormDataParserTransformer.java77
-rw-r--r--bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/NodeIdTransformer.java134
-rw-r--r--bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/NodeSelectionTransformer.java163
-rw-r--r--bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/ViewSelectionTransformer.java121
13 files changed, 1305 insertions, 0 deletions
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/ActionDataParser.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/ActionDataParser.java
new file mode 100644
index 000000000..13fce578b
--- /dev/null
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/ActionDataParser.java
@@ -0,0 +1,231 @@
+/*******************************************************************************
+ * 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.engine;
+
+import org.eclipse.wst.ws.internal.explorer.platform.engine.constants.ActionDataConstants;
+import org.eclipse.wst.ws.internal.explorer.platform.engine.data.ActionDescriptor;
+import org.eclipse.wst.ws.internal.explorer.platform.engine.data.ScenarioDescriptor;
+import org.eclipse.wst.ws.internal.explorer.platform.engine.data.TransactionDescriptor;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.FactoryConfigurationError;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.CDATASection;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Node;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+
+public class ActionDataParser
+{
+ private Document doc;
+
+ public ScenarioDescriptor parseScenario(Element e)
+ {
+ ScenarioDescriptor scenarioDescriptor = new ScenarioDescriptor();
+ NodeList transactions = e.getElementsByTagName(ActionDataConstants.ELEMENT_TRANSACTION);
+ TransactionDescriptor[] transactionDescriptors = new TransactionDescriptor[transactions.getLength()];
+ for (int i = 0; i < transactionDescriptors.length; i++)
+ transactionDescriptors[i] = parseTransaction((Element) transactions.item(i));
+ scenarioDescriptor.setTransactionDescriptors(transactionDescriptors);
+ return scenarioDescriptor;
+ }
+
+ public TransactionDescriptor parseTransaction(Element e)
+ {
+ TransactionDescriptor transactionDescriptor = new TransactionDescriptor();
+ NodeList actions = e.getElementsByTagName(ActionDataConstants.ELEMENT_ACTION);
+ ActionDescriptor[] actionDescriptors = new ActionDescriptor[actions.getLength()];
+ for (int i = 0; i < actionDescriptors.length; i++)
+ actionDescriptors[i] = parseAction((Element) actions.item(i));
+ transactionDescriptor.setActionDescriptors(actionDescriptors);
+ return transactionDescriptor;
+ }
+
+ public ActionDescriptor parseAction(Element e)
+ {
+ ActionDescriptor actionDescriptor = new ActionDescriptor();
+ actionDescriptor.setId(e.getAttribute(ActionDataConstants.ATTR_ID));
+ try
+ {
+ actionDescriptor.setAttempts(Integer.parseInt(e.getAttribute(ActionDataConstants.ATTR_ATTEMPTS)));
+ }
+ catch (Throwable t)
+ {
+ actionDescriptor.setAttempts(1);
+ }
+ actionDescriptor.setStatusId(e.getAttribute(ActionDataConstants.ATTR_STATUS_ID));
+ Hashtable propertiesTable = new Hashtable();
+ NodeList properties = e.getElementsByTagName(ActionDataConstants.ELEMENT_PROPERTY);
+ for (int i = 0; i < properties.getLength(); i++)
+ {
+ Element property = (Element) properties.item(i);
+ String name = property.getAttribute(ActionDataConstants.ATTR_NAME);
+ NodeList valueList = property.getElementsByTagName(ActionDataConstants.ELEMENT_VALUE);
+ if (valueList.getLength() > 1)
+ {
+ String[] values = new String[valueList.getLength()];
+ for (int j = 0; j < values.length; j++)
+ {
+ Element value = (Element) valueList.item(j);
+ Node textNode = value.getFirstChild();
+ values[j] = (textNode != null) ? textNode.getNodeValue().trim() : "";
+ }
+ propertiesTable.put(name, values);
+ }
+ else
+ {
+ Node textNode = ((Element) valueList.item(0)).getFirstChild();
+ propertiesTable.put(name, (textNode != null) ? textNode.getNodeValue().trim() : "");
+ }
+ }
+ actionDescriptor.setProperties(propertiesTable);
+ NodeList statusList = e.getElementsByTagName(ActionDataConstants.ELEMENT_STATUS);
+ for (int i = 0; i < statusList.getLength(); i++)
+ {
+ Element status = (Element)statusList.item(i);
+ CDATASection cData = (CDATASection)status.getFirstChild();
+ actionDescriptor.addStatus(cData.getData());
+ }
+ return actionDescriptor;
+ }
+
+ public Element toElement(ScenarioDescriptor scenarioDescriptor)
+ {
+ try
+ {
+ Document document = getDocument();
+ Element scenarioElement = document.createElement(ActionDataConstants.ELEMENT_SCENARIO);
+ TransactionDescriptor[] transactionDescriptors = scenarioDescriptor.getTransactionDescriptors();
+ for (int i = 0; i < transactionDescriptors.length; i++)
+ {
+ Element transactionElement = toElement(transactionDescriptors[i]);
+ if (transactionElement != null)
+ scenarioElement.appendChild(transactionElement);
+ }
+ return scenarioElement;
+ }
+ catch (DOMException dome)
+ {
+ return null;
+ }
+ }
+
+ public Element toElement(TransactionDescriptor transactionDescriptor)
+ {
+ try
+ {
+ Document document = getDocument();
+ Element transactionElement = document.createElement(ActionDataConstants.ELEMENT_TRANSACTION);
+ ActionDescriptor[] actionDescriptors = transactionDescriptor.getActionDescriptors();
+ for (int i = 0; i < actionDescriptors.length; i++)
+ {
+ Element actionElement = toElement(actionDescriptors[i]);
+ if (actionElement != null)
+ transactionElement.appendChild(actionElement);
+ }
+ return transactionElement;
+ }
+ catch (DOMException dome)
+ {
+ return null;
+ }
+ }
+
+ public Element toElement(ActionDescriptor actionDescriptor)
+ {
+ try
+ {
+ Document document = getDocument();
+ Element actionElement = document.createElement(ActionDataConstants.ELEMENT_ACTION);
+ actionElement.setAttribute(ActionDataConstants.ATTR_ID, actionDescriptor.getId());
+ actionElement.setAttribute(ActionDataConstants.ATTR_ATTEMPTS, String.valueOf(actionDescriptor.getAttempts()));
+ String statusId = actionDescriptor.getStatusId();
+ if (statusId != null)
+ actionElement.setAttribute(ActionDataConstants.ATTR_STATUS_ID, statusId);
+ Hashtable properties = actionDescriptor.getProperties();
+ if (properties != null)
+ {
+ for (Iterator it = properties.keySet().iterator(); it.hasNext();)
+ {
+ Object key = it.next();
+ Object value = properties.get(key);
+ Object[] values;
+ if (value.getClass().isArray())
+ values = (Object[])value;
+ else if (value instanceof List)
+ values = ((List)value).toArray();
+ else
+ values = new Object[] {value};
+ boolean isAdded = false;
+ Element propertyElement = document.createElement(ActionDataConstants.ELEMENT_PROPERTY);
+ propertyElement.setAttribute(ActionDataConstants.ATTR_NAME, key.toString());
+ for (int i = 0; i < values.length; i++)
+ {
+ if (values[i] instanceof String)
+ {
+ Element valueElement = document.createElement(ActionDataConstants.ELEMENT_VALUE);
+ valueElement.appendChild(document.createTextNode(values[i].toString()));
+ propertyElement.appendChild(valueElement);
+ isAdded = true;
+ }
+ }
+ if (isAdded)
+ actionElement.appendChild(propertyElement);
+ }
+ }
+ List status = actionDescriptor.getStatus();
+ if (status != null)
+ {
+ for (Iterator it = status.iterator(); it.hasNext();)
+ {
+ Element statusElement = document.createElement(ActionDataConstants.ELEMENT_STATUS);
+ CDATASection cData = document.createCDATASection(it.next().toString());
+ statusElement.appendChild(cData);
+ actionElement.appendChild(statusElement);
+ }
+ }
+ return actionElement;
+ }
+ catch (DOMException dome)
+ {
+ return null;
+ }
+ }
+
+ private Document getDocument()
+ {
+ try
+ {
+ if (doc == null)
+ {
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ doc = builder.newDocument();
+ }
+ return doc;
+ }
+ catch (FactoryConfigurationError fce)
+ {
+ return null;
+ }
+ catch (ParserConfigurationException pce)
+ {
+ return null;
+ }
+ }
+} \ No newline at end of file
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/ActionEngine.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/ActionEngine.java
new file mode 100644
index 000000000..e33e3284b
--- /dev/null
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/ActionEngine.java
@@ -0,0 +1,234 @@
+/*******************************************************************************
+ * 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.engine;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Hashtable;
+import java.util.Vector;
+
+import org.eclipse.wst.ws.internal.explorer.platform.actions.Action;
+import org.eclipse.wst.ws.internal.explorer.platform.actions.ShowPerspectiveAction;
+import org.eclipse.wst.ws.internal.explorer.platform.constants.ActionInputs;
+import org.eclipse.wst.ws.internal.explorer.platform.engine.constants.ActionDataConstants;
+import org.eclipse.wst.ws.internal.explorer.platform.engine.data.ActionDescriptor;
+import org.eclipse.wst.ws.internal.explorer.platform.engine.data.ScenarioDescriptor;
+import org.eclipse.wst.ws.internal.explorer.platform.engine.data.TransactionDescriptor;
+import org.eclipse.wst.ws.internal.explorer.platform.engine.transformer.ITransformer;
+import org.eclipse.wst.ws.internal.explorer.platform.perspective.Controller;
+
+public class ActionEngine
+{
+ public static final byte MODE_DISABLED = 0x0;
+ public static final byte MODE_STOP = 0x1;
+ public static final byte MODE_RECORD = 0x2;
+ public static final byte MODE_PLAY = 0x3;
+
+ private Controller controller;
+ private byte mode;
+ private Vector actionDescriptors;
+
+ public ActionEngine(Controller controller)
+ {
+ this.controller = controller;
+ mode = MODE_DISABLED;
+ actionDescriptors = new Vector();
+ }
+
+ public void executeScenario(ScenarioDescriptor scenarioDescriptor)
+ {
+ TransactionDescriptor[] transactionDescriptors = scenarioDescriptor.getTransactionDescriptors();
+ for (int i = 0; i < transactionDescriptors.length; i++)
+ executeTransaction(transactionDescriptors[i]);
+ }
+
+ public boolean executeTransaction(TransactionDescriptor transactionDescriptor)
+ {
+ boolean result = true;
+ ActionDescriptor[] actionDescriptors = transactionDescriptor.getActionDescriptors();
+ for (int i = 0; i < actionDescriptors.length; i++)
+ {
+ if (result)
+ {
+ if (!executeAction(actionDescriptors[i]))
+ result = false;
+ }
+ else
+ actionDescriptors[i].setStatusId(ActionDataConstants.VALUE_STATUS_ID_UNATTEMPTED);
+ }
+ return result;
+ }
+
+ public boolean executeAction(ActionDescriptor actionDescriptor)
+ {
+ int attempts = actionDescriptor.getAttempts();
+ for (int i = 0; i < attempts; i++)
+ {
+ try
+ {
+ Class classAction = Class.forName(actionDescriptor.getId());
+ if (Action.class.isAssignableFrom(classAction))
+ {
+ Action action = (Action) newInstance(classAction);
+ if (action != null)
+ {
+ Hashtable properties = actionDescriptor.getProperties();
+ ITransformer[] transformers = action.getTransformers();
+ for (int j = 0; j < transformers.length; j++)
+ properties = transformers[j].deNormalize(properties);
+ action.setPropertyTable(properties);
+ boolean actionResult = action.run();
+ // TODO actionDescriptor.addStatus(action.getStatus());
+ if (actionResult)
+ {
+ actionDescriptor.setStatusId(ActionDataConstants.VALUE_STATUS_ID_PASSED);
+ return true;
+ }
+ }
+ else
+ throw new ClassNotFoundException(actionDescriptor.getId());
+ }
+ }
+ catch (ClassNotFoundException cnfe)
+ {
+ cnfe.printStackTrace();
+ StringWriter sw = new StringWriter();
+ cnfe.printStackTrace(new PrintWriter(sw));
+ actionDescriptor.addStatus(sw.getBuffer().toString());
+ }
+ catch (Throwable t)
+ {
+ t.printStackTrace();
+ StringWriter sw = new StringWriter();
+ t.printStackTrace(new PrintWriter(sw));
+ actionDescriptor.addStatus(sw.getBuffer().toString());
+ }
+ }
+ actionDescriptor.setStatusId(ActionDataConstants.VALUE_STATUS_ID_FAILED);
+ return false;
+ }
+
+ private ScenarioDescriptor newScenarioDescriptor()
+ {
+ return new ScenarioDescriptor();
+ }
+
+ private TransactionDescriptor newTransactionDescriptor()
+ {
+ return new TransactionDescriptor();
+ }
+
+ private ActionDescriptor newActionDescriptor(Action action)
+ {
+ ActionDescriptor actionDescriptor = new ActionDescriptor();
+ actionDescriptor.setId(action.getClass().getName());
+ Hashtable properties = new Hashtable(action.getPropertyTable());
+ ITransformer[] transformers = action.getTransformers();
+ for (int i = 0; i < transformers.length; i++)
+ properties = transformers[i].normalize(properties);
+ actionDescriptor.setProperties(properties);
+ return actionDescriptor;
+ }
+
+ private Object newInstance(Class c)
+ {
+ try
+ {
+ // instantiates the action using the constructor that takes in a
+ // controller object
+ Constructor constructor = c.getConstructor(new Class[]{Controller.class});
+ return constructor.newInstance(new Object[]{controller});
+ }
+ catch (NoSuchMethodException nsme)
+ {
+ }
+ catch (InstantiationException ie)
+ {
+ }
+ catch (IllegalAccessException iae)
+ {
+ }
+ catch (InvocationTargetException ite)
+ {
+ }
+ catch (Throwable t)
+ {
+ }
+ Object instance = null;
+ try
+ {
+ // instantiates the action using the default constructor
+ Constructor constructor = c.getConstructor(new Class[0]);
+ instance = constructor.newInstance(new Object[0]);
+ Method method = c.getMethod("setController", new Class[]{Controller.class});
+ method.invoke(instance, new Object[]{controller});
+ }
+ catch (NoSuchMethodException nsme)
+ {
+ }
+ catch (InstantiationException ie)
+ {
+ }
+ catch (IllegalAccessException iae)
+ {
+ }
+ catch (IllegalArgumentException iae)
+ {
+ }
+ catch (InvocationTargetException ite)
+ {
+ }
+ catch (Throwable t)
+ {
+ }
+ return instance;
+ }
+
+ public byte getMode()
+ {
+ return mode;
+ }
+
+ public void setMode(byte mode)
+ {
+ this.mode = mode;
+ if (mode == MODE_RECORD)
+ {
+ actionDescriptors = new Vector();
+ ShowPerspectiveAction showPerspectiveAction = new ShowPerspectiveAction(controller);
+ showPerspectiveAction.addProperty(ActionInputs.PERSPECTIVE, String.valueOf(controller.getCurrentPerspective().getPerspectiveId()));
+ actionDescriptors.add(newActionDescriptor(showPerspectiveAction));
+ }
+ }
+
+ public boolean executeAction(Action action)
+ {
+ if (mode == MODE_RECORD)
+ {
+ ActionDescriptor actionDescriptor = newActionDescriptor(action);
+ actionDescriptors.add(actionDescriptor);
+ }
+ return action.run();
+ }
+
+ public ScenarioDescriptor getScenario()
+ {
+ ScenarioDescriptor scenarioDescriptor = newScenarioDescriptor();
+ TransactionDescriptor transactionDescriptor = newTransactionDescriptor();
+ ActionDescriptor[] actionDescriptorArray = (ActionDescriptor[])actionDescriptors.toArray(new ActionDescriptor[0]);
+ transactionDescriptor.setActionDescriptors(actionDescriptorArray);
+ scenarioDescriptor.setTransactionDescriptors(new TransactionDescriptor[] {transactionDescriptor});
+ return scenarioDescriptor;
+ }
+} \ No newline at end of file
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/constants/ActionDataConstants.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/constants/ActionDataConstants.java
new file mode 100644
index 000000000..7d53ee26b
--- /dev/null
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/constants/ActionDataConstants.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * 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.engine.constants;
+
+public class ActionDataConstants
+{
+ public static final String ATTR_ID = "id";
+ public static final String ATTR_NAME = "name";
+ public static final String ATTR_ATTEMPTS = "attempts";
+ public static final String ATTR_STATUS_ID = "statusId";
+
+ public static final String ELEMENT_SCENARIO = "scenario";
+ public static final String ELEMENT_TRANSACTION = "transaction";
+ public static final String ELEMENT_ACTION = "action";
+ public static final String ELEMENT_PROPERTY = "property";
+ public static final String ELEMENT_VALUE = "value";
+ public static final String ELEMENT_STATUS = "status";
+
+ public static final String VALUE_STATUS_ID_UNATTEMPTED = "unattempted";
+ public static final String VALUE_STATUS_ID_PASSED = "passed";
+ public static final String VALUE_STATUS_ID_FAILED = "failed";
+} \ No newline at end of file
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/data/ActionDescriptor.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/data/ActionDescriptor.java
new file mode 100644
index 000000000..85bb5b7da
--- /dev/null
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/data/ActionDescriptor.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * 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.engine.data;
+
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Vector;
+
+public class ActionDescriptor
+{
+ private String id;
+ private Hashtable properties;
+ private int attempts;
+ private String statusId;
+ private List statusList;
+
+ public ActionDescriptor()
+ {
+ attempts = 1;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+
+ public void setId(String id)
+ {
+ this.id = id;
+ }
+
+ public Hashtable getProperties()
+ {
+ return properties;
+ }
+
+ public void setProperties(Hashtable properties)
+ {
+ this.properties = properties;
+ }
+
+ public int getAttempts()
+ {
+ return attempts;
+ }
+
+ public void setAttempts(int attempts)
+ {
+ this.attempts = attempts;
+ }
+
+ public String getStatusId()
+ {
+ return statusId;
+ }
+
+ public void setStatusId(String statusId)
+ {
+ this.statusId = statusId;
+ }
+
+ public void addStatus(Object status)
+ {
+ if (status != null)
+ {
+ if (statusList == null)
+ statusList = new Vector();
+ statusList.add(status);
+ }
+ }
+
+ public boolean removeStatus(Object status)
+ {
+ if (status != null && statusList != null)
+ return statusList.remove(status);
+ else
+ return false;
+ }
+
+ public List getStatus()
+ {
+ return statusList;
+ }
+} \ No newline at end of file
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/data/ScenarioDescriptor.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/data/ScenarioDescriptor.java
new file mode 100644
index 000000000..41a3f90fe
--- /dev/null
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/data/ScenarioDescriptor.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * 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.engine.data;
+
+public class ScenarioDescriptor
+{
+ private TransactionDescriptor[] transactionDescriptors;
+
+ public TransactionDescriptor[] getTransactionDescriptors()
+ {
+ return transactionDescriptors;
+ }
+
+ public void setTransactionDescriptors(TransactionDescriptor[] transactionDescriptors)
+ {
+ this.transactionDescriptors = transactionDescriptors;
+ }
+} \ No newline at end of file
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/data/TransactionDescriptor.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/data/TransactionDescriptor.java
new file mode 100644
index 000000000..3ef67b972
--- /dev/null
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/data/TransactionDescriptor.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * 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.engine.data;
+
+public class TransactionDescriptor
+{
+ private ActionDescriptor[] actionDescriptors;
+
+ public ActionDescriptor[] getActionDescriptors()
+ {
+ return actionDescriptors;
+ }
+
+ public void setActionDescriptors(ActionDescriptor[] actionDescriptors)
+ {
+ this.actionDescriptors = actionDescriptors;
+ }
+} \ No newline at end of file
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/CurrentNodeSelectionTransformer.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/CurrentNodeSelectionTransformer.java
new file mode 100644
index 000000000..5bf3299f4
--- /dev/null
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/CurrentNodeSelectionTransformer.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * 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.engine.transformer;
+
+import java.util.Hashtable;
+
+import org.eclipse.wst.ws.internal.explorer.platform.constants.ActionInputs;
+import org.eclipse.wst.ws.internal.explorer.platform.perspective.Controller;
+import org.eclipse.wst.ws.internal.explorer.platform.perspective.Node;
+
+public class CurrentNodeSelectionTransformer implements ITransformer
+{
+ protected Controller controller;
+ protected String key;
+
+ public CurrentNodeSelectionTransformer(Controller controller)
+ {
+ this(controller, ActionInputs.NODEID);
+ }
+
+ public CurrentNodeSelectionTransformer(Controller controller, String key)
+ {
+ this.controller = controller;
+ this.key = key;
+ }
+
+ public Hashtable normalize(Hashtable properties)
+ {
+ return properties;
+ }
+
+ public Hashtable deNormalize(Hashtable properties)
+ {
+ Node currNode = controller.getCurrentPerspective().getNodeManager().getSelectedNode();
+ if (currNode != null)
+ properties.put(key, String.valueOf(currNode.getNodeId()));
+ return properties;
+ }
+} \ No newline at end of file
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/ITransformer.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/ITransformer.java
new file mode 100644
index 000000000..4755ffe85
--- /dev/null
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/ITransformer.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * 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.engine.transformer;
+
+import java.util.Hashtable;
+
+public interface ITransformer
+{
+ public Hashtable normalize(Hashtable properties);
+ public Hashtable deNormalize(Hashtable properties);
+} \ No newline at end of file
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/MassNodeIdTransformer.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/MassNodeIdTransformer.java
new file mode 100644
index 000000000..81ac34fb9
--- /dev/null
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/MassNodeIdTransformer.java
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * 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.engine.transformer;
+
+import java.util.Hashtable;
+import java.util.Vector;
+
+import org.eclipse.wst.ws.internal.explorer.platform.constants.ActionInputs;
+import org.eclipse.wst.ws.internal.explorer.platform.constants.ModelConstants;
+import org.eclipse.wst.ws.internal.explorer.platform.perspective.Controller;
+
+public class MassNodeIdTransformer extends NodeIdTransformer
+{
+ protected String massNodeIdKey;
+
+ public MassNodeIdTransformer(Controller controller, String massNodeIdKey)
+ {
+ super(controller);
+ this.massNodeIdKey = massNodeIdKey;
+ }
+
+ public Hashtable normalize(Hashtable properties)
+ {
+ if (!properties.containsKey(massNodeIdKey))
+ return super.normalize(properties);
+ Object origNodeId = properties.get(ActionInputs.NODEID);
+ String[] massNodeIds = getValueAsStringArray(properties, massNodeIdKey);
+ for (int i = 0; i < massNodeIds.length; i++)
+ {
+ properties.put(ActionInputs.NODEID, massNodeIds[i]);
+ properties = super.normalize(properties);
+ String[] rels = getValueAsStringArray(properties, ModelConstants.REL_ID);
+ if (rels.length > 0)
+ {
+ StringBuffer sb = new StringBuffer(ModelConstants.REL_ID);
+ sb.append(ModelConstants.REL_LOCALNAME_SEPARATOR);
+ sb.append(massNodeIds[i]);
+ properties.put(sb.toString(), rels);
+ }
+ properties.remove(ActionInputs.NODEID);
+ properties.remove(ModelConstants.REL_ID);
+ }
+ if (origNodeId != null)
+ properties.put(ActionInputs.NODEID, origNodeId);
+ return properties;
+ }
+
+ public Hashtable deNormalize(Hashtable properties)
+ {
+ if (!properties.containsKey(massNodeIdKey))
+ return super.deNormalize(properties);
+ Vector massNodeIdVector = new Vector();
+ Object origNodeId = properties.get(ActionInputs.NODEID);
+ properties.remove(ActionInputs.NODEID);
+ String[] massNodeIds = getValueAsStringArray(properties, massNodeIdKey);
+ for (int i = 0; i < massNodeIds.length; i++)
+ {
+ StringBuffer sb = new StringBuffer(ModelConstants.REL_ID);
+ sb.append(ModelConstants.REL_LOCALNAME_SEPARATOR);
+ sb.append(massNodeIds[i]);
+ Object rels = properties.get(sb.toString());
+ if (rels != null)
+ {
+ properties.put(ModelConstants.REL_ID, rels);
+ properties = super.deNormalize(properties);
+ Object nodeId = properties.get(ActionInputs.NODEID);
+ if (nodeId != null)
+ {
+ massNodeIdVector.add(nodeId);
+ properties.remove(ActionInputs.NODEID);
+ }
+ properties.remove(ModelConstants.REL_ID);
+ }
+ }
+ if (origNodeId != null)
+ properties.put(ActionInputs.NODEID, origNodeId);
+ int size = massNodeIdVector.size();
+ if (size == 1)
+ properties.put(massNodeIdKey, massNodeIdVector.get(0));
+ else if (size > 1)
+ properties.put(massNodeIdKey, massNodeIdVector.toArray(new String[0]));
+ else
+ properties.remove(massNodeIdKey);
+ return properties;
+ }
+
+ private String[] getValueAsStringArray(Hashtable properties, String key)
+ {
+ Object values = properties.get(key);
+ if (values == null)
+ return new String[0];
+ else if (values instanceof String[])
+ return (String[])values;
+ else
+ return new String[] {values.toString()};
+ }
+} \ No newline at end of file
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/MultipartFormDataParserTransformer.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/MultipartFormDataParserTransformer.java
new file mode 100644
index 000000000..b4f0a2c68
--- /dev/null
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/MultipartFormDataParserTransformer.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * 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.engine.transformer;
+
+import java.util.Hashtable;
+import java.util.Enumeration;
+
+import org.eclipse.wst.ws.internal.explorer.platform.constants.ActionInputs;
+import org.eclipse.wst.ws.internal.explorer.platform.perspective.Controller;
+import org.eclipse.wst.ws.internal.explorer.platform.util.MultipartFormDataParser;
+
+public class MultipartFormDataParserTransformer implements ITransformer
+{
+ protected Controller controller;
+
+ public MultipartFormDataParserTransformer(Controller controller)
+ {
+ this.controller = controller;
+ }
+
+ public Hashtable normalize(Hashtable properties)
+ {
+ MultipartFormDataParser parser = (MultipartFormDataParser)properties.get(ActionInputs.MULTIPART_FORM_DATA_PARSER);
+ String[] keys;
+ try
+ {
+ keys = parser.getParameterNames();
+ }
+ catch (Throwable t)
+ {
+ keys = new String[0];
+ }
+ for (int i = 0; i < keys.length; i++)
+ {
+ StringBuffer newKey = new StringBuffer(ActionInputs.MULTIPART_FORM_DATA_PARSER);
+ newKey.append(keys[i]);
+ try
+ {
+ properties.put(newKey.toString(), parser.getParameterValues(keys[i]));
+ }
+ catch (Throwable t)
+ {
+ }
+ }
+ return properties;
+ }
+
+ public Hashtable deNormalize(Hashtable properties)
+ {
+ Enumeration e = properties.keys();
+ while (e.hasMoreElements())
+ {
+ Object key = e.nextElement();
+ if (key instanceof String)
+ {
+ if (((String)key).startsWith(ActionInputs.MULTIPART_FORM_DATA_PARSER))
+ {
+ String realKey = ((String)key).substring(ActionInputs.MULTIPART_FORM_DATA_PARSER.length());
+ if (!properties.containsKey(realKey))
+ {
+ Object value = properties.remove(key);
+ properties.put(realKey, value);
+ }
+ }
+ }
+ }
+ return properties;
+ }
+} \ No newline at end of file
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/NodeIdTransformer.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/NodeIdTransformer.java
new file mode 100644
index 000000000..d2af98b5b
--- /dev/null
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/NodeIdTransformer.java
@@ -0,0 +1,134 @@
+/*******************************************************************************
+ * 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.engine.transformer;
+
+import java.util.Hashtable;
+import java.util.Vector;
+import java.util.Enumeration;
+import org.eclipse.wst.ws.internal.datamodel.Element;
+import org.eclipse.wst.ws.internal.datamodel.Rel;
+import org.eclipse.wst.ws.internal.explorer.platform.constants.ActionInputs;
+import org.eclipse.wst.ws.internal.explorer.platform.constants.ModelConstants;
+import org.eclipse.wst.ws.internal.explorer.platform.datamodel.TreeElement;
+import org.eclipse.wst.ws.internal.explorer.platform.perspective.Controller;
+import org.eclipse.wst.ws.internal.explorer.platform.perspective.Node;
+import org.eclipse.wst.ws.internal.explorer.platform.perspective.NodeManager;
+
+public class NodeIdTransformer implements ITransformer
+{
+ protected Controller controller;
+
+ public NodeIdTransformer(Controller controller)
+ {
+ this.controller = controller;
+ }
+
+ public Hashtable normalize(Hashtable properties)
+ {
+ Vector rels = new Vector();
+ try
+ {
+ int nodeId = Integer.parseInt((String)properties.get(ActionInputs.NODEID));
+ NodeManager nodeManager = controller.getCurrentPerspective().getNodeManager();
+ Node rootNode = nodeManager.getRootNode();
+ Node node = nodeManager.getNode(nodeId);
+ int depth = 0;
+ if (node != null)
+ depth = node.getNodeDepth();
+ while (rels.size() < depth && node != null && node != rootNode)
+ {
+ Node parentNode = node.getParent();
+ Element element = node.getTreeElement();
+ Rel rel = getRel(parentNode.getTreeElement(), element);
+ StringBuffer relValue = new StringBuffer(rel.getName());
+ relValue.append(ModelConstants.REL_LOCALNAME_SEPARATOR);
+ relValue.append(element.getName());
+ rels.insertElementAt(relValue.toString(), 0);
+ node = parentNode;
+ }
+ }
+ catch (NumberFormatException nfe)
+ {
+ }
+ int numRelationships = rels.size();
+ if (numRelationships == 1)
+ properties.put(ModelConstants.REL_ID, rels.get(0).toString());
+ else if (numRelationships > 1)
+ properties.put(ModelConstants.REL_ID, (String[])rels.toArray(new String[0]));
+ return properties;
+ }
+
+ private Rel getRel(Element sourceElement, Element targetElement)
+ {
+ Enumeration rels = sourceElement.getRels();
+ while (rels.hasMoreElements())
+ {
+ Rel rel = (Rel)rels.nextElement();
+ Enumeration targetElements = rel.getTargetElements();
+ while (targetElements.hasMoreElements())
+ {
+ if (targetElements.nextElement() == targetElement)
+ return rel;
+ }
+ }
+ return null;
+ }
+
+ public Hashtable deNormalize(Hashtable properties)
+ {
+ NodeManager nodeManager = controller.getCurrentPerspective().getNodeManager();
+ Node node = nodeManager.getRootNode();
+ Object value = properties.get(ModelConstants.REL_ID);
+ String[] relationships = null;
+ if (value instanceof String[])
+ relationships = (String[])value;
+ else if (value != null)
+ relationships = new String[] {value.toString()};
+ if (relationships != null)
+ {
+ for (int i = 0; i < relationships.length; i++)
+ {
+ int index = relationships[i].indexOf(ModelConstants.REL_LOCALNAME_SEPARATOR);
+ if (index == -1)
+ return deNormalizeAsSelectedNode(properties);
+ String rel = (index != -1) ? relationships[i].substring(0, index) : relationships[i];
+ String localname = (index != -1) ? relationships[i].substring(index + 1, relationships[i].length()) : null;
+ if (localname == null)
+ return deNormalizeAsSelectedNode(properties);
+ node = getNode(node, rel, localname);
+ if (node == null)
+ return deNormalizeAsSelectedNode(properties);
+ }
+ properties.put(ActionInputs.NODEID, String.valueOf(node.getNodeId()));
+ return properties;
+ }
+ else
+ return deNormalizeAsSelectedNode(properties);
+ }
+
+ private Hashtable deNormalizeAsSelectedNode(Hashtable properties)
+ {
+ return (new CurrentNodeSelectionTransformer(controller)).deNormalize(properties);
+ }
+
+ private Node getNode(Node parent, String rel, String localname)
+ {
+ Element parentElement = parent.getTreeElement();
+ Enumeration e = parentElement.getElements(rel);
+ while (e.hasMoreElements())
+ {
+ Element element = (Element)e.nextElement();
+ if (localname.equals(element.getName()))
+ return parent.getChildNode((TreeElement)element);
+ }
+ return null;
+ }
+} \ No newline at end of file
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/NodeSelectionTransformer.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/NodeSelectionTransformer.java
new file mode 100644
index 000000000..175dc03d0
--- /dev/null
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/NodeSelectionTransformer.java
@@ -0,0 +1,163 @@
+/*******************************************************************************
+ * 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.engine.transformer;
+
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Vector;
+import org.eclipse.wst.ws.internal.datamodel.Element;
+import org.eclipse.wst.ws.internal.datamodel.Rel;
+import org.eclipse.wst.ws.internal.explorer.platform.constants.ActionInputs;
+import org.eclipse.wst.ws.internal.explorer.platform.constants.ModelConstants;
+import org.eclipse.wst.ws.internal.explorer.platform.datamodel.TreeElement;
+import org.eclipse.wst.ws.internal.explorer.platform.perspective.Controller;
+import org.eclipse.wst.ws.internal.explorer.platform.perspective.Node;
+import org.eclipse.wst.ws.internal.explorer.platform.perspective.NodeManager;
+
+public class NodeSelectionTransformer implements ITransformer
+{
+ protected Controller controller;
+
+ public NodeSelectionTransformer(Controller controller)
+ {
+ this.controller = controller;
+ }
+
+ public Hashtable normalize(Hashtable properties)
+ {
+ try
+ {
+ NodeManager nodeManager = controller.getCurrentPerspective().getNodeManager();
+ Node nextNode = nodeManager.getNode(Integer.parseInt((String) properties.get(ActionInputs.NODEID)));
+ Node currNode = nodeManager.getSelectedNode();
+ if (currNode == null)
+ currNode = nodeManager.getRootNode();
+ Vector nextRels = new Vector();
+ Vector currRels = new Vector();
+ while (nextNode != null && currNode != null && (!isRootElement(nextNode.getTreeElement()) || !isRootElement(currNode.getTreeElement())) && nextNode != currNode)
+ {
+ if (nextNode.getNodeDepth() >= currNode.getNodeDepth())
+ {
+ Node parentNode = nextNode.getParent();
+ Element nextElement = nextNode.getTreeElement();
+ Rel rel = getRel(parentNode.getTreeElement(), nextElement);
+ StringBuffer relValue = new StringBuffer(rel.getName());
+ relValue.append(ModelConstants.REL_LOCALNAME_SEPARATOR);
+ relValue.append(nextElement.getName());
+ nextRels.insertElementAt(relValue.toString(), 0);
+ nextNode = parentNode;
+ }
+ else
+ {
+ Node parentNode = currNode.getParent();
+ Element parentElement = parentNode.getTreeElement();
+ Rel rel = getRel(currNode.getTreeElement(), parentElement);
+ StringBuffer relValue = new StringBuffer(rel.getName());
+ relValue.append(ModelConstants.REL_LOCALNAME_SEPARATOR);
+ relValue.append(parentElement.getName());
+ currRels.add(relValue.toString());
+ currNode = parentNode;
+ }
+ }
+ currRels.addAll(nextRels);
+ int numRelationships = currRels.size();
+ if (numRelationships == 1)
+ properties.put(ModelConstants.REL_ID, currRels.get(0).toString());
+ else if (numRelationships > 1)
+ properties.put(ModelConstants.REL_ID, (String[]) currRels.toArray(new String[0]));
+ }
+ catch (NumberFormatException nfe)
+ {
+ }
+ return properties;
+ }
+
+ private boolean isRootElement(Element e)
+ {
+ return e.getModel().getRootElement() == e;
+ }
+
+ private Rel getRel(Element sourceElement, Element targetElement)
+ {
+ Enumeration rels = sourceElement.getRels();
+ while (rels.hasMoreElements())
+ {
+ Rel rel = (Rel) rels.nextElement();
+ Enumeration targetElements = rel.getTargetElements();
+ while (targetElements.hasMoreElements())
+ {
+ if (targetElements.nextElement() == targetElement)
+ return rel;
+ }
+ }
+ return null;
+ }
+
+ public Hashtable deNormalize(Hashtable properties)
+ {
+ NodeManager nodeManager = controller.getCurrentPerspective().getNodeManager();
+ Node rootNode = nodeManager.getRootNode();
+ Node currNode = nodeManager.getSelectedNode();
+ if (currNode == null)
+ currNode = rootNode;
+ Object value = properties.get(ModelConstants.REL_ID);
+ String[] relationships = null;
+ if (value instanceof String[])
+ relationships = (String[]) value;
+ else if (value != null)
+ relationships = new String[]{value.toString()};
+ if (relationships != null)
+ {
+ Element currElement = currNode.getTreeElement();
+ for (int i = 0; i < relationships.length; i++)
+ {
+ int index = relationships[i].indexOf(ModelConstants.REL_LOCALNAME_SEPARATOR);
+ String rel = (index != -1) ? relationships[i].substring(0, index) : relationships[i];
+ String localname = (index != -1) ? relationships[i].substring(index + 1, relationships[i].length()) : null;
+ Enumeration e = currElement.getElements(rel);
+ Element targetElement = null;
+ if (localname != null)
+ {
+ Element firstElement = null;
+ while (e.hasMoreElements())
+ {
+ Element nextElement = (Element) e.nextElement();
+ if (firstElement == null)
+ firstElement = nextElement;
+ if (localname.equals(nextElement.getName()))
+ {
+ targetElement = nextElement;
+ break;
+ }
+ }
+ if (targetElement == null)
+ targetElement = firstElement;
+ }
+ else
+ {
+ if (e.hasMoreElements())
+ targetElement = (Element) e.nextElement();
+ }
+ if (targetElement != null)
+ {
+ currElement = (Element) targetElement;
+ Node parentNode = currNode.getParent();
+ if (parentNode != null && parentNode.getTreeElement() == currElement)
+ currNode = parentNode;
+ else
+ currNode = currNode.getChildNode((TreeElement) currElement);
+ }
+ }
+ }
+ properties.put(ActionInputs.NODEID, String.valueOf(currNode.getNodeId()));
+ return properties;
+ }
+} \ No newline at end of file
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/ViewSelectionTransformer.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/ViewSelectionTransformer.java
new file mode 100644
index 000000000..d6bd1359a
--- /dev/null
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/engine/transformer/ViewSelectionTransformer.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * 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.engine.transformer;
+
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Vector;
+import org.eclipse.wst.ws.internal.datamodel.Element;
+import org.eclipse.wst.ws.internal.explorer.platform.datamodel.ListElement;
+import org.eclipse.wst.ws.internal.explorer.platform.datamodel.ListManager;
+import org.eclipse.wst.ws.internal.explorer.platform.datamodel.TreeElement;
+import org.eclipse.wst.ws.internal.explorer.platform.perspective.Controller;
+import org.eclipse.wst.ws.internal.explorer.platform.perspective.Node;
+import org.eclipse.wst.ws.internal.explorer.platform.perspective.NodeManager;
+
+public class ViewSelectionTransformer implements ITransformer
+{
+ protected Controller controller;
+ protected String listManagerKey;
+ protected String viewKey;
+
+ public ViewSelectionTransformer(Controller controller, String listManagerKey, String viewKey)
+ {
+ this.controller = controller;
+ this.listManagerKey = listManagerKey;
+ this.viewKey = viewKey;
+ }
+
+ public Hashtable normalize(Hashtable properties)
+ {
+ Vector normalizedViewIds = new Vector();
+ NodeManager nodeManager = controller.getCurrentPerspective().getNodeManager();
+ Node currNode = nodeManager.getSelectedNode();
+ TreeElement currElement = currNode.getTreeElement();
+ Object listManagerObj = currElement.getPropertyAsObject(listManagerKey);
+ if (listManagerObj instanceof ListManager)
+ {
+ ListManager listManager = (ListManager) listManagerObj;
+ String[] viewIds = getViewValues(properties);
+ for (int i = 0; i < viewIds.length; i++)
+ {
+ ListElement listElement = null;
+ try
+ {
+ listElement = listManager.getElementWithViewId(Integer.parseInt(viewIds[i]));
+ }
+ catch (NumberFormatException nfe)
+ {
+ }
+ if (listElement != null)
+ {
+ Object object = listElement.getObject();
+ if (object != null && object instanceof Element)
+ {
+ Element element = (Element) object;
+ normalizedViewIds.add(element.getName());
+ }
+ }
+ }
+ }
+ properties.put(viewKey, normalizedViewIds.toArray(new String[0]));
+ return properties;
+ }
+
+ public Hashtable deNormalize(Hashtable properties)
+ {
+ Vector viewIds = new Vector();
+ Node currNode = controller.getCurrentPerspective().getNodeManager().getSelectedNode();
+ if (currNode != null)
+ {
+ TreeElement currElement = currNode.getTreeElement();
+ Object listManagerObj = currElement.getPropertyAsObject(listManagerKey);
+ if (listManagerObj instanceof ListManager)
+ {
+ ListManager listManager = (ListManager) listManagerObj;
+ String[] normalizedViewIds = getViewValues(properties);
+ for (int i = 0; i < normalizedViewIds.length; i++)
+ {
+ Enumeration e = listManager.getListElements();
+ while (e.hasMoreElements())
+ {
+ ListElement listElement = (ListElement) e.nextElement();
+ Element element = (Element) listElement.getObject();
+ if (element != null && normalizedViewIds[i].equals(element.getName()))
+ {
+ viewIds.add(String.valueOf(listElement.getViewId()));
+ break;
+ }
+ }
+ }
+ }
+ }
+ int size = viewIds.size();
+ if (size == 1)
+ properties.put(viewKey, viewIds.get(0));
+ else if (size > 1)
+ properties.put(viewKey, viewIds.toArray(new String[0]));
+ return properties;
+ }
+
+ private String[] getViewValues(Hashtable properties)
+ {
+ Object viewValueObj = properties.get(viewKey);
+ String[] viewValues;
+ if (viewValueObj == null)
+ viewValues = new String[0];
+ else if (viewValueObj.getClass().isArray())
+ viewValues = (String[]) viewValueObj;
+ else
+ viewValues = new String[]{(String) viewValueObj};
+ return viewValues;
+ }
+} \ No newline at end of file

Back to the top