/******************************************************************************* | |
* Copyright (c) 2008, 2012 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.bpel.ui; | |
import org.eclipse.emf.ecore.resource.ResourceSet; | |
import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter; | |
import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier; | |
import org.eclipse.wst.xsd.ui.internal.util.ModelReconcileAdapter; | |
import org.w3c.dom.Document; | |
public class BPELModelAdapter implements INodeAdapter | |
{ | |
protected ResourceSet resourceSet; | |
protected Process process; | |
private ModelReconcileAdapter modelReconcileAdapter; | |
public Process getProcess() | |
{ | |
return process; | |
} | |
public void setProcess(Process process) | |
{ | |
this.process = process; | |
} | |
public boolean isAdapterForType(Object type) | |
{ | |
return type == BPELModelAdapter.class; | |
} | |
public void notifyChanged(INodeNotifier notifier, int eventType, Object changedFeature, Object oldValue, Object newValue, int pos) | |
{ | |
} | |
/*public Definition createDefinition(final Document document) | |
{ | |
try | |
{ | |
IDOMNode domNode = (IDOMNode) document; | |
String baseLocation = "blankWSDL.wsdl"; //$NON-NLS-1$ | |
if (domNode != null) | |
{ | |
baseLocation = domNode.getModel().getBaseLocation(); | |
} | |
else if (document instanceof IDOMNode) | |
{ | |
IDOMModel domModel = ((IDOMNode) document).getModel(); | |
baseLocation = domModel.getBaseLocation(); | |
} | |
resourceSet = new ResourceSetImpl(); | |
//FIXME do we need it? | |
//resourceSet.getAdapterFactories().add(new WSDLModelLocatorAdapterFactory()); | |
//resourceSet.getAdapterFactories().add(new XSDSchemaLocationResolverAdapterFactory()); | |
// TODO.. .revist the best approach to obtain a URI from the SSE model | |
// | |
URI uri = null; | |
if (baseLocation.startsWith("/")) //$NON-NLS-1$ | |
{ | |
uri = URI.createPlatformResourceURI(baseLocation); | |
} | |
else | |
{ | |
uri = URI.createFileURI(baseLocation); | |
} | |
definition = WSDLFactory.eINSTANCE.createDefinition(); | |
definition.setDocumentBaseURI(uri.toString()); | |
definition.setDocument(document); | |
WSDLResourceFactoryImpl resourceFactory = new WSDLResourceFactoryImpl(); | |
Resource resource = resourceFactory.createResource(uri); | |
resourceSet.getResources().add(resource); | |
resource.getContents().add(definition); | |
resource.setModified(false); | |
IRunnableWithProgress setElementOperation = new IRunnableWithProgress() | |
{ | |
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException | |
{ | |
// Use the animated flavour as we don't know beforehand how many ticks we need. | |
// The task name will be displayed by the code in WSDLResourceImpl and XSDResourceImpl. | |
monitor.beginTask("", IProgressMonitor.UNKNOWN); //$NON-NLS-1$ | |
Map loadOptions = resourceSet.getLoadOptions(); | |
loadOptions.put(WSDLResourceImpl.WSDL_PROGRESS_MONITOR, monitor); | |
loadOptions.put(XSDResourceImpl.XSD_PROGRESS_MONITOR, monitor); | |
definition.setElement(document.getDocumentElement()); | |
((DefinitionImpl) definition).reconcileReferences(true); | |
loadOptions.remove(WSDLResourceImpl.WSDL_PROGRESS_MONITOR); | |
loadOptions.remove(XSDResourceImpl.XSD_PROGRESS_MONITOR); | |
} | |
}; | |
IProgressService progressService = PlatformUI.getWorkbench().getProgressService(); | |
try | |
{ | |
progressService.busyCursorWhile(setElementOperation); | |
} | |
catch (InvocationTargetException e) | |
{ | |
e.printStackTrace(); | |
} | |
catch (InterruptedException e) | |
{ | |
e.printStackTrace(); | |
} | |
// attach an adapter to keep the WSDL model and DOM in sync | |
// | |
modelReconcileAdapter = new WSDLModelReconcileAdapter(document, definition); | |
domNode.getModel().addModelStateListener(modelReconcileAdapter); | |
// TODO... CS : revisit this line | |
// currently this is used to associate a 'type' system with the definition | |
// I suspect that this could be made a whole lot more simple | |
// | |
WSDLEditorUtil.getInstance().setTypeSystemProvider(definition, new ExtensibleTypeSystemProvider()); | |
} | |
catch (Exception ex) | |
{ | |
ex.printStackTrace(); | |
} | |
return definition; | |
}*/ | |
public ModelReconcileAdapter getModelReconcileAdapter() | |
{ | |
return modelReconcileAdapter; | |
} | |
public static BPELModelAdapter lookupOrCreateModelAdapter(Document document) | |
{ | |
BPELModelAdapter adapter = null; | |
if (document instanceof INodeNotifier) | |
{ | |
INodeNotifier notifier = (INodeNotifier)document; | |
adapter = (BPELModelAdapter)notifier.getAdapterFor(BPELModelAdapter.class); | |
if (adapter == null) | |
{ | |
adapter = new BPELModelAdapter(); | |
notifier.addAdapter(adapter); | |
} | |
} | |
return adapter; | |
} | |
} |