blob: e828d8c6df6d072d4dd6dfef45b8bdcf13d81b73 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2005 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.wsdl.actions;
import java.util.Vector;
import javax.servlet.http.HttpServletRequest;
import javax.wsdl.Definition;
import javax.wsdl.WSDLException;
import org.eclipse.wst.ws.internal.explorer.platform.actions.LinkAction;
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.MessageQueue;
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.wsdl.datamodel.WSDLElement;
import org.eclipse.wst.ws.internal.explorer.platform.wsdl.perspective.WSDLMainNode;
import org.eclipse.wst.ws.internal.explorer.platform.wsdl.perspective.WSDLNode;
import org.eclipse.wst.ws.internal.explorer.platform.wsdl.perspective.WSDLPerspective;
public class RefreshWSDLAction extends LinkAction {
public RefreshWSDLAction(Controller controller) {
super(controller);
}
public static String getActionLink(int nodeID, int toolID, int viewID, int viewToolID) {
StringBuffer actionLink = new StringBuffer("wsdl/actions/WSDLRefreshActionJSP.jsp?");
actionLink.append(ActionInputs.NODEID);
actionLink.append('=');
actionLink.append(nodeID);
actionLink.append('&');
actionLink.append(ActionInputs.TOOLID);
actionLink.append('=');
actionLink.append(toolID);
actionLink.append('&');
actionLink.append(ActionInputs.VIEWID);
actionLink.append('=');
actionLink.append(viewID);
actionLink.append('&');
actionLink.append(ActionInputs.VIEWTOOLID);
actionLink.append('=');
actionLink.append(viewToolID);
return actionLink.toString();
}
protected boolean processLinkParameters(HttpServletRequest request) {
NodeManager nodeManager = controller_.getWSDLPerspective().getNodeManager();
String nodeIDString = request.getParameter(ActionInputs.NODEID);
int nodeID;
try {
nodeID = Integer.parseInt(nodeIDString);
}
catch (NumberFormatException nfe) {
nodeID = nodeManager.getSelectedNodeId();
}
Node node = nodeManager.getNode(nodeID);
while (node != null && !(node instanceof WSDLMainNode)) {
if (node instanceof WSDLNode) {
propertyTable_.put(ActionInputs.NODEID, String.valueOf(node.getNodeId()));
return true;
}
node = node.getParent();
}
return false;
}
public boolean run() {
int nodeID = Integer.parseInt((String)propertyTable_.get(ActionInputs.NODEID));
WSDLPerspective wsdlPerspective = controller_.getWSDLPerspective();
MessageQueue messageQueue = wsdlPerspective.getMessageQueue();
NodeManager nodeManager = wsdlPerspective.getNodeManager();
Node wsdlNode = nodeManager.getNode(nodeID);
WSDLElement wsdlElement = (WSDLElement)wsdlNode.getTreeElement();
Definition definitionCopy = wsdlElement.getDefinition();
Vector schemaListCopy = wsdlElement.getSchemaList();
wsdlElement.setDefinition(null);
wsdlElement.setSchemaList(new Vector());
int selectedNodeID = nodeManager.getSelectedNode().getNodeId();
try {
// open WSDL
Vector errorMessages = wsdlElement.loadWSDL();
if (errorMessages.size() > 0) {
messageQueue.addMessage(wsdlPerspective.getMessage("MSG_ERROR_XSD_VALIDATION"));
for (int i=0;i<errorMessages.size();i++)
messageQueue.addMessage((String)errorMessages.elementAt(i));
}
}
catch (WSDLException e)
{
messageQueue.addMessage(wsdlPerspective.getMessage("MSG_ERROR_OPEN_WSDL",wsdlElement.getWsdlUrl()));
handleUnexpectedException(wsdlPerspective,messageQueue,"WSDLException",e);
wsdlElement.setDefinition(definitionCopy);
wsdlElement.setSchemaList(schemaListCopy);
return false;
}
// build the datamodel for this WSDLElement
wsdlElement.buildModel();
// Select a new node if the previous selected node no longer exists
// If there is more than 1 service node, select the WSDL node. If there is more than 1 binding node, select the service node.
// If there is just the one service and binding node, select the binding node.
Node node = nodeManager.getNode(selectedNodeID);
if (node == null) {
selectedNodeID = wsdlNode.getNodeId();
Vector serviceNodes = wsdlNode.getChildNodes();
if (serviceNodes.size() == 1)
{
Node serviceNode = (Node)serviceNodes.elementAt(0);
Vector bindingNodes = serviceNode.getChildNodes();
if (bindingNodes.size() == 1)
{
Node bindingNode = (Node)bindingNodes.elementAt(0);
selectedNodeID = bindingNode.getNodeId();
}
else
selectedNodeID = serviceNode.getNodeId();
}
nodeManager.setSelectedNodeId(selectedNodeID);
nodeManager.makeNodeVisible(nodeManager.getNode(selectedNodeID));
}
messageQueue.addMessage(wsdlPerspective.getMessage("MSG_INFO_REFRESH_WSDL_SUCCESSFUL", wsdlElement.getWsdlUrl()));
return true;
}
}