| /******************************************************************************* |
| * Copyright (c) 2001, 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.uddi.actions; |
| |
| import java.util.Enumeration; |
| 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.datamodel.ListElement; |
| 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.FormTool; |
| import org.eclipse.wst.ws.internal.explorer.platform.perspective.FormToolPropertiesInterface; |
| import org.eclipse.wst.ws.internal.explorer.platform.perspective.Node; |
| import org.eclipse.wst.ws.internal.explorer.platform.perspective.NodeManager; |
| import org.eclipse.wst.ws.internal.explorer.platform.uddi.constants.UDDIActionInputs; |
| import org.eclipse.wst.ws.internal.explorer.platform.uddi.constants.UDDIModelConstants; |
| import org.eclipse.wst.ws.internal.explorer.platform.uddi.datamodel.BusinessElement; |
| import org.eclipse.wst.ws.internal.explorer.platform.uddi.datamodel.ServiceElement; |
| import org.eclipse.wst.ws.internal.explorer.platform.uddi.datamodel.ServiceInterfaceElement; |
| import org.eclipse.wst.ws.internal.explorer.platform.uddi.perspective.MultipleFormToolPropertiesInterface; |
| import org.eclipse.wst.ws.internal.explorer.platform.uddi.perspective.SubQueryTransferTarget; |
| import org.eclipse.wst.ws.internal.explorer.platform.uddi.perspective.UDDIPerspective; |
| import org.eclipse.wst.ws.internal.explorer.platform.util.MultipartFormDataException; |
| import org.eclipse.wst.ws.internal.explorer.platform.util.MultipartFormDataParser; |
| |
| public class TransferSubQueryResultsAction extends UDDIPropertiesFormAction |
| { |
| private Node targetNode_; |
| public TransferSubQueryResultsAction(Controller controller) |
| { |
| super(controller); |
| targetNode_ = null; |
| } |
| |
| protected final boolean processParsedResults(MultipartFormDataParser parser) throws MultipartFormDataException |
| { |
| String[] selectedNodeIds = parser.getParameterValues(ActionInputs.NODEID); |
| // The client Javascript enforces the rule that at least one item was selected before the form can be submitted. |
| propertyTable_.put(UDDIActionInputs.SELECTED_NODEIDS,selectedNodeIds); |
| return true; |
| } |
| |
| public static final String getActionLinkForReturn() |
| { |
| StringBuffer actionLink = new StringBuffer("uddi/actions/TransferSubQueryResultsActionJSP.jsp?"); |
| actionLink.append(UDDIActionInputs.SHOW_RESULTS_TARGET).append("=1"); |
| return actionLink.toString(); |
| } |
| |
| public final void enableShowResultsTarget() |
| { |
| // This should only be called if the user clicks on the target link on the query results page. Insert a zero element |
| // array so that no results are transferred but the jump back to the correct query and its info occurs. |
| propertyTable_.put(UDDIActionInputs.SELECTED_NODEIDS,new String[0]); |
| } |
| |
| public final boolean run() |
| { |
| // Transfer the results in this Query node into the property expected by the originating node. |
| UDDIPerspective uddiPerspective = controller_.getUDDIPerspective(); |
| uddiPerspective.getMessageQueue(); |
| |
| String[] selectedNodeIds = (String[])propertyTable_.get(UDDIActionInputs.SELECTED_NODEIDS); |
| Node currentNode = getSelectedNavigatorNode(); |
| TreeElement currentElement = currentNode.getTreeElement(); |
| SubQueryTransferTarget target = (SubQueryTransferTarget)(currentElement.getPropertyAsObject(UDDIModelConstants.SUBQUERY_TRANSFER_TARGET)); |
| String subQueryKey = target.getSubQueryKey(); |
| String targetQueryKey; |
| |
| int lastSeparatorPos = subQueryKey.lastIndexOf(':'); |
| if (lastSeparatorPos == -1) |
| targetQueryKey = ""; |
| else |
| targetQueryKey = subQueryKey.substring(0,lastSeparatorPos); |
| |
| String targetProperty = subQueryKey.substring(lastSeparatorPos+1,subQueryKey.length()); |
| FormTool targetFormTool = target.getTargetFormTool(); |
| ((MultipleFormToolPropertiesInterface)targetFormTool).getFormToolProperties(subQueryKey); |
| FormToolPropertiesInterface targetQueryFormToolPI = ((MultipleFormToolPropertiesInterface)targetFormTool).getFormToolProperties(targetQueryKey); |
| Vector targetList = (Vector)targetQueryFormToolPI.getProperty(targetProperty); |
| if (targetList == null) |
| targetList = new Vector(); |
| |
| NodeManager nodeManager = currentNode.getNodeManager(); |
| for (int i=0;i<selectedNodeIds.length;i++) |
| { |
| int selectedNodeId = Integer.parseInt(selectedNodeIds[i]); |
| Node selectedNode = nodeManager.getNode(selectedNodeId); |
| TreeElement treeElement = selectedNode.getTreeElement(); |
| Object object; |
| if (treeElement instanceof BusinessElement) |
| object = ((BusinessElement)treeElement).getBusinessEntity(); |
| else if (treeElement instanceof ServiceElement) |
| object = ((ServiceElement)treeElement).getBusinessService(); |
| else |
| { |
| // Service interface |
| object = ((ServiceInterfaceElement)treeElement).getTModel(); |
| } |
| ListElement targetListElement = new ListElement(object); |
| targetListElement.setTargetViewToolInfo(selectedNodeId,selectedNode.getToolManager().getSelectedToolId(),selectedNode.getViewId()); |
| if (targetProperty.equals(UDDIActionInputs.QUERY_INPUT_SIMPLE_SERVICE_BUSINESS) || targetProperty.equals(UDDIActionInputs.QUERY_INPUT_ADVANCED_SERVICE_BUSINESS) || targetProperty.equals(UDDIActionInputs.QUERY_INPUT_ADVANCED_SERVICE_INTERFACE_SERVICE)) |
| { |
| // Clear the manager so a replacement occurs. |
| targetList.removeAllElements(); |
| } |
| targetList.addElement(targetListElement); |
| } |
| targetQueryFormToolPI.setProperty(targetProperty,targetList); |
| Hashtable savedParentQueryProperties = target.getParentQueryData(); |
| Enumeration e = savedParentQueryProperties.keys(); |
| while (e.hasMoreElements()) |
| { |
| String key = (String)e.nextElement(); |
| targetQueryFormToolPI.setProperty(key,savedParentQueryProperties.get(key)); |
| } |
| |
| // Select the node and the datastructure which is the target of the subquery. |
| int targetNodeId = target.getNodeId(); |
| int targetToolId = target.getToolId(); |
| int targetViewId = target.getViewId(); |
| int targetViewToolId = target.getViewToolId(); |
| nodeManager.setSelectedNodeId(targetNodeId); |
| targetNode_ = nodeManager.getSelectedNode(); |
| targetNode_.getToolManager().setSelectedToolId(targetToolId); |
| targetNode_.setViewId(targetViewId); |
| if (targetViewId != ActionInputs.VIEWID_DEFAULT) |
| targetNode_.getViewToolManager().setSelectedToolId(targetViewToolId); |
| targetFormTool.setProperty(UDDIActionInputs.SUBQUERY_KEY,targetQueryKey); |
| addToHistory(ActionInputs.PERSPECTIVE_UDDI,SelectFindToolAction.getActionLink(targetNodeId,targetToolId,targetViewId,targetViewToolId,targetQueryKey,true)); |
| return true; |
| } |
| |
| public final Node getTargetNode() |
| { |
| return targetNode_; |
| } |
| } |