blob: bf7884ef74a39e5c4048bb92a22dab1e1267aea5 [file] [log] [blame]
/*******************************************************************************
* 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;
}
}