blob: 2f35aca27f2e37fe6653409ee3ac7e777aab8278 [file] [log] [blame]
package org.eclipse.bpel.ui.wsdl.extensions.properties;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.bpel.ui.Messages;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.DialogCellEditor;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.views.properties.PropertyDescriptor;
import org.eclipse.wst.wsdl.Definition;
import org.eclipse.wst.wsdl.ui.internal.WSDLEditor;
import org.eclipse.wst.wsdl.ui.internal.dialogs.types.WSDLComponentSelectionDialog;
import org.eclipse.wst.wsdl.ui.internal.dialogs.types.WSDLComponentSelectionProvider;
import org.eclipse.wst.wsdl.ui.internal.util.WSDLEditorUtil;
import org.eclipse.wst.wsdl.util.WSDLConstants;
import org.w3c.dom.Element;
public class WSDLComponentSelectionDialogPropertyDescriptor extends PropertyDescriptor {
private int kind;
private WSDLEditor editor;
private Element element;
public WSDLComponentSelectionDialogPropertyDescriptor(Object id, String displayName, WSDLEditor editor, int kind, Element element) {
super(id, displayName);
this.kind = kind;
this.editor = editor;
this.element = element;
}
public static CellEditor createCellEditor (Composite parent, final WSDLEditor editor, final int kind, final Element element) {
CellEditor celleditor = new DialogCellEditor(parent){
protected Object openDialogBox(Control cellEditorWindow) {
WSDLComponentSelectionProvider provider = new WSDLComponentSelectionProvider(((IFileEditorInput) editor.getEditorPart().getEditorInput()).getFile(), editor.getDefinition(), kind);
WSDLComponentSelectionDialog dialog = new WSDLComponentSelectionDialog(cellEditorWindow.getShell(), Messages.BPELWSDLComponentSelectionDialog, provider){
protected TreeViewer createTreeViewer(Composite comp, String title) {
final TreeViewer viewer = super.createTreeViewer(comp, title);
viewer.addDoubleClickListener(new IDoubleClickListener(){
public void doubleClick(DoubleClickEvent event) {
// TODO Auto-generated method stub
if (viewer.getSelection() instanceof IStructuredSelection && !((IStructuredSelection)viewer.getSelection()).isEmpty())
okPressed();
}
});
return viewer;
}
};
provider.setDialog(dialog);
dialog.setBlockOnOpen(true);
dialog.create();
if (dialog.open() == Window.OK){
Display.getCurrent().asyncExec(new Runnable(){
public void run() {
if (element == null)
return;
if (kind == WSDLConstants.MESSAGE){
element.removeAttribute("element");
element.removeAttribute("type");
} else if (kind == WSDLEditorUtil.ELEMENT) {
element.removeAttribute("messageType");
element.removeAttribute("part");
element.removeAttribute("type");
} else if (kind == WSDLEditorUtil.TYPE) {
element.removeAttribute("messageType");
element.removeAttribute("part");
element.removeAttribute("element");
}
}
});
String name = (String) dialog.getSelection().getAttributeInfo("name");
List prefixes = getPrefixes(editor.getDefinition(), dialog.getSelection().getTargetNamespace());
if (prefixes.size() > 0) {
name = prefixes.get(0) + ":" + name;
}
return name;
}
return doGetValue();
}
};
return celleditor;
}
public CellEditor createPropertyEditor(Composite parent) {
CellEditor celleditor = createCellEditor(parent,editor,kind, element);
if (getValidator() != null)
celleditor.setValidator(getValidator());
return celleditor;
}
private static List getPrefixes(Definition definition, String namespace) {
List list = new ArrayList();
Map map = definition.getNamespaces();
for (Iterator i = map.keySet().iterator(); i.hasNext();) {
String prefix = (String) i.next();
String theNamespace = (String) map.get(prefix);
if (theNamespace != null && theNamespace.equals(namespace)) {
list.add(prefix);
}
}
return list;
}
}