| /******************************************************************************* |
| * 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.monitor; |
| |
| import java.net.MalformedURLException; |
| import java.net.URL; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Vector; |
| |
| import javax.wsdl.Definition; |
| import javax.wsdl.Port; |
| import javax.wsdl.Service; |
| import javax.wsdl.extensions.ExtensibilityElement; |
| import javax.wsdl.extensions.http.HTTPAddress; |
| import javax.wsdl.extensions.soap.SOAPAddress; |
| |
| import org.eclipse.core.runtime.IAdaptable; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.osgi.util.NLS; |
| import org.eclipse.wst.command.internal.env.core.common.StatusUtils; |
| import org.eclipse.wst.common.environment.IEnvironment; |
| import org.eclipse.wst.common.environment.StatusException; |
| import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation; |
| import org.eclipse.wst.internet.monitor.core.internal.provisional.IMonitor; |
| import org.eclipse.wst.internet.monitor.core.internal.provisional.IMonitorWorkingCopy; |
| import org.eclipse.wst.internet.monitor.core.internal.provisional.MonitorCore; |
| import org.eclipse.wst.server.core.util.SocketUtil; |
| import org.eclipse.wst.ws.internal.WstWSPluginMessages; |
| import org.eclipse.wst.ws.internal.parser.wsil.WebServicesParser; |
| |
| public class GetMonitorCommand extends AbstractDataModelOperation |
| { |
| private boolean monitorService; |
| |
| private boolean create; |
| |
| private WebServicesParser webServicesParser; |
| |
| private String wsdlURI; |
| |
| private List endpoints; |
| |
| public GetMonitorCommand() { |
| monitorService = true; |
| create = true; |
| } |
| |
| public IStatus execute( IProgressMonitor monitor, IAdaptable adaptable ) |
| { |
| IEnvironment env = getEnvironment(); |
| |
| endpoints = new Vector(); |
| if (monitorService && webServicesParser != null && wsdlURI != null |
| && wsdlURI.length() > 0) { |
| Definition definition = webServicesParser |
| .getWSDLDefinition(wsdlURI); |
| if (definition != null) { |
| Map services = definition.getServices(); |
| for (Iterator servicesIt = services.values().iterator(); servicesIt |
| .hasNext();) { |
| Service service = (Service) servicesIt.next(); |
| Map ports = service.getPorts(); |
| for (Iterator portsIt = ports.values().iterator(); portsIt |
| .hasNext();) { |
| Port wsdlPort = (Port) portsIt.next(); |
| List extElements = wsdlPort.getExtensibilityElements(); |
| for (Iterator extElementsIt = extElements.iterator(); extElementsIt |
| .hasNext();) { |
| ExtensibilityElement extElement = (ExtensibilityElement) extElementsIt |
| .next(); |
| String endpoint = null; |
| URL endpointURL = null; |
| if (extElement instanceof SOAPAddress) |
| endpoint = ((SOAPAddress) extElement) |
| .getLocationURI(); |
| else if (extElement instanceof HTTPAddress) |
| endpoint = ((HTTPAddress) extElement) |
| .getLocationURI(); |
| if (endpoint != null) { |
| try { |
| endpointURL = new URL(endpoint); |
| } catch (MalformedURLException murle) { |
| } |
| } |
| if (endpointURL != null) { |
| String protocol = endpointURL.getProtocol(); |
| String host = endpointURL.getHost(); |
| int port = endpointURL.getPort(); |
| if (port == -1) { |
| if ("http".equalsIgnoreCase(protocol)) |
| port = 80; |
| else if ("https".equalsIgnoreCase(protocol)) |
| port = 443; |
| } |
| if (protocol != null |
| && protocol.startsWith("http") |
| && host != null && host.length() > 0 |
| && port != -1) { |
| IMonitor m = null; |
| IMonitor[] monitors = MonitorCore |
| .getMonitors(); |
| for (int i = 0; i < monitors.length; i++) { |
| if (host.equalsIgnoreCase(monitors[i] |
| .getRemoteHost()) |
| && port == monitors[i] |
| .getRemotePort()) { |
| m = monitors[i]; |
| break; |
| } |
| } |
| if (m == null && create) { |
| int monitoredPort = SocketUtil |
| .findUnusedPort(5000, 15000); |
| IMonitorWorkingCopy monitorWorkingCopy = MonitorCore |
| .createMonitor(); |
| monitorWorkingCopy |
| .setLocalPort(monitoredPort); |
| monitorWorkingCopy.setRemoteHost(host); |
| monitorWorkingCopy.setRemotePort(port); |
| monitorWorkingCopy.setProtocol("HTTP"); |
| try |
| { |
| m = monitorWorkingCopy.save(); |
| } |
| catch (Throwable t) |
| { |
| IStatus warning = StatusUtils.warningStatus( |
| NLS.bind(WstWSPluginMessages.MSG_ERROR_UNABLE_TO_START_MONITOR, |
| new Object[] {String.valueOf(port), endpoint }), t ); |
| try { |
| if (env != null) |
| env.getStatusHandler() |
| .report(warning); |
| } catch (StatusException se) { |
| } |
| } |
| } |
| if (m != null) { |
| try { |
| if (!m.isRunning()) |
| m.start(); |
| StringBuffer sb = new StringBuffer( |
| endpointURL.getProtocol()); |
| sb.append("://localhost:"); |
| sb.append(String.valueOf(m |
| .getLocalPort())); |
| sb.append(endpointURL.getFile()); |
| endpoints.add(sb.toString()); |
| } |
| catch (Throwable t) |
| { |
| IStatus warning = StatusUtils.warningStatus( |
| NLS.bind(WstWSPluginMessages.MSG_ERROR_UNABLE_TO_START_MONITOR, |
| new Object[] {String.valueOf(port), endpoint }), t ); |
| try { |
| if (env != null) |
| env.getStatusHandler() |
| .report(warning); |
| } catch (StatusException se) { |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| return Status.OK_STATUS; |
| } |
| |
| public void setMonitorService(boolean monitorService) { |
| this.monitorService = monitorService; |
| } |
| |
| public void setDefinition(Definition definition) { |
| } |
| |
| public void setWebServicesParser(WebServicesParser webServicesParser) { |
| this.webServicesParser = webServicesParser; |
| } |
| |
| public void setWsdlURI(String wsdlURI) { |
| this.wsdlURI = wsdlURI; |
| } |
| |
| public void setCreate(boolean create) { |
| this.create = create; |
| } |
| |
| public List getEndpoints() { |
| return endpoints; |
| } |
| } |