package org.eclipse.bpel.apache.ode.deploy.ui.pages; | |
/******************************************************************************* | |
* Copyright (c) 2008, 2012 IBM Corporation, University of Stuttgart (IAAS) 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, University of Stuttgart (IAAS) - initial API and implementation | |
*******************************************************************************/ | |
import java.util.ArrayList; | |
import java.util.Collection; | |
import java.util.Iterator; | |
import java.util.List; | |
import java.util.Map; | |
import org.eclipse.bpel.apache.ode.deploy.model.dd.TService; | |
import org.eclipse.bpel.apache.ode.deploy.ui.util.DeployUtils; | |
import org.eclipse.core.resources.IProject; | |
import org.eclipse.emf.ecore.resource.ResourceSet; | |
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; | |
import org.eclipse.jface.viewers.ComboBoxCellEditor; | |
import org.eclipse.swt.SWT; | |
import org.eclipse.swt.custom.CCombo; | |
import org.eclipse.swt.widgets.Table; | |
import org.eclipse.wst.wsdl.Definition; | |
import org.eclipse.wst.wsdl.Port; | |
import org.eclipse.wst.wsdl.Service; | |
/** | |
* In-place editor for WSDL services in tables. | |
* | |
* @author Simon Moser (IBM) | |
*/ | |
public class ServiceCellEditor extends ComboBoxCellEditor { | |
IProject bpelProject = null; | |
ResourceSet resourceSet = null; | |
List<Port> portList = null; | |
public ServiceCellEditor(Table parent, IProject bpelProject, ResourceSet resourceSet) | |
{ | |
super(parent, new String[]{}, SWT.READ_ONLY); | |
this.bpelProject = bpelProject; | |
if (resourceSet != null) { | |
this.resourceSet = resourceSet; | |
} | |
else { | |
this.resourceSet = new ResourceSetImpl(); | |
} | |
} | |
@Override | |
protected Object doGetValue() { | |
Integer integer = (Integer) super.doGetValue(); | |
CCombo combo = (CCombo) getControl(); | |
String string = combo.getItem(integer.intValue()); | |
Port port = findPortByName(string); | |
return port; | |
} | |
private Port findPortByName(String string) { | |
for (Iterator<Port> iterator = portList.iterator(); iterator.hasNext();) { | |
Port currentPort = iterator.next(); | |
if (currentPort.getName().equals(string)){ | |
return currentPort; | |
} | |
} | |
return null; | |
} | |
@SuppressWarnings("unchecked") //$NON-NLS-1$ | |
@Override | |
protected void doSetValue(Object value) { | |
List<Service> serviceList = new ArrayList<Service>(); | |
portList = new ArrayList<Port>(); | |
//load WSDL's | |
List<Definition> wsdlDefs = DeployUtils.loadAllWSDLFromProject(this.bpelProject, this.resourceSet); | |
//Assemble All Services from WSDL's | |
for (Iterator<Definition> iterator = wsdlDefs.iterator(); iterator.hasNext();) { | |
Definition current = (Definition) iterator.next(); | |
@SuppressWarnings("rawtypes") | |
Map services = current.getServices(); | |
if (!services.isEmpty()){ | |
@SuppressWarnings("rawtypes") | |
Collection values = services.values(); | |
for (Iterator<Service> iterator2 = values.iterator(); iterator2.hasNext();) { | |
Service name = iterator2.next(); | |
serviceList.add(name); | |
} | |
} | |
} | |
//now we have all services in a List .. get All Ports from these services | |
for (Iterator<Service> iterator = serviceList.iterator(); iterator.hasNext();) { | |
Service currentService = iterator.next(); | |
@SuppressWarnings("rawtypes") | |
Map portMap = currentService.getPorts(); | |
Collection<Port> ports = portMap.values(); | |
portList.addAll(ports); | |
} | |
String[] items = new String[portList.size() + 1]; | |
items[0] = DeployUtils.NONE_STRING; | |
for (int i=1; i<portList.size()+1; i++){ | |
Port currentPort = (Port) portList.get(i-1); | |
items[i] = currentPort.getName(); | |
} | |
setItems(items); | |
if (value != null){ | |
TService service = (TService) value; | |
for (int i = 0; i < portList.size(); i++) { | |
Port p = portList.get(i); | |
if (p.getName().equals(service.getPort()) && | |
((Service)p.getContainer()).getQName().equals(service.getName())) { | |
super.doSetValue(i+1); | |
return; | |
} | |
} | |
} | |
super.doSetValue(0); | |
} | |
} |