| /******************************************************************************* |
| * Copyright (c) 2005 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.validator; |
| |
| import java.io.File; |
| import java.net.URISyntaxException; |
| import java.net.URL; |
| import java.util.Collections; |
| |
| import org.eclipse.bpel.common.extension.model.ExtensionMap; |
| import org.eclipse.bpel.model.Process; |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.emf.common.util.EList; |
| import org.eclipse.emf.common.util.URI; |
| import org.eclipse.emf.ecore.resource.Resource; |
| import org.eclipse.emf.ecore.resource.ResourceSet; |
| |
| |
| /** |
| * Reads a BPEL file and makes it compatible with the BPEL tooling. |
| */ |
| public class BPELReader { |
| |
| /** TODO: The inclusion of this here removes the dependency on the UI plugin */ |
| static final String MODEL_EXTENSIONS_NAMESPACE = "http://org.eclipse.bpel.ui/"; //$NON-NLS-1$ |
| |
| |
| static final String EXTENSION_MODEL_EXTENSIONS = "bpelex"; //$NON-NLS-1$ |
| |
| protected Resource processResource; |
| protected Resource extensionsResource; |
| protected Process process; |
| protected ExtensionMap extensionMap; |
| |
| |
| /** |
| * @param uri |
| * @param resourceSet |
| */ |
| |
| public void read (URI uri, ResourceSet resourceSet) { |
| |
| processResource = resourceSet.getResource(uri, true); |
| |
| read(processResource, resourceSet); |
| // readExtensions (processResource, resourceSet, modelFile); |
| } |
| |
| /** |
| * Reads the given BPEL file. |
| * @param modelFile |
| * @param resourceSet |
| */ |
| |
| public void read (IFile modelFile, ResourceSet resourceSet ) { |
| // TODO: These two lines are a workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=72565 |
| // EcorePackage instance = EcorePackage.eINSTANCE; |
| // instance.eAdapters(); |
| |
| URI uri = URI.createPlatformResourceURI (modelFile.getFullPath().toString()); |
| |
| processResource = resourceSet.getResource(uri, true); |
| read(processResource, resourceSet); |
| |
| // readExtensions (processResource, resourceSet, modelFile); |
| } |
| |
| /** |
| * @param file |
| * @param resourceSet |
| */ |
| public void read (File file, ResourceSet resourceSet) { |
| URI uri = URI.createFileURI( file.getAbsolutePath() ); |
| processResource = resourceSet.getResource(uri, true); |
| read(processResource , resourceSet ); |
| |
| // readExtensions(processResource,resourceSet, file ); |
| } |
| |
| /** |
| * @param file |
| * @param resourceSet |
| */ |
| public void read (URL file, ResourceSet resourceSet) { |
| URI uri = URI.createURI(file.toString()); |
| processResource = resourceSet.getResource(uri, true); |
| read(processResource , resourceSet ); |
| |
| // readExtensions(processResource,resourceSet, file ); |
| } |
| /** |
| * Another public method for those who want to get the process resource |
| * by their own means (such as the editor). |
| * @param resource |
| * @param resourceSet |
| */ |
| |
| public void read (Resource resource, ResourceSet resourceSet ) { |
| |
| // TODO: These two lines are a workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=72565 |
| // EcorePackage instance = EcorePackage.eINSTANCE; |
| // instance.eAdapters(); |
| |
| this.processResource = resource; |
| this.process = null; |
| |
| try { |
| processResource.load (Collections.EMPTY_MAP); |
| EList contents = processResource.getContents(); |
| if (!contents.isEmpty()) { |
| process = (Process) contents.get(0); |
| } |
| |
| } catch (Exception e) { |
| // TODO: If a file is empty Resource.load(Map) throws a java.lang.NegativeArraySizeException |
| // We should investigate EMF to see if we are supposed to handle this case or if this |
| // is a bug in EMF. |
| Activator.log(e); |
| } |
| |
| } |
| |
| |
| |
| void readExtensions ( Resource resource, ResourceSet resourceSet, File modelFile) { |
| return ; |
| } |
| |
| void readExtensions ( Resource resource, ResourceSet resourceSet, IFile modelFile) { |
| |
| // IPath extensionsPath = modelFile.getFullPath().removeFileExtension().addFileExtension( EXTENSION_MODEL_EXTENSIONS ); |
| // URI extensionsUri = URI.createPlatformResourceURI(extensionsPath.toString()); |
| // IFile extensionsFile = ResourcesPlugin.getWorkspace().getRoot().getFile(extensionsPath); |
| |
| |
| // try { |
| // extensionsResource = resourceSet.getResource(extensionsUri, extensionsFile.exists()); |
| // if (extensionsResource != null) { |
| // extensionMap = ExtensionmodelFactory.eINSTANCE.findExtensionMap( |
| // MODEL_EXTENSIONS_NAMESPACE, extensionsResource.getContents()); |
| // } |
| // } catch (Exception e) { |
| // Activator.log(e); |
| // } |
| // |
| // |
| // if (extensionMap != null) extensionMap.initializeAdapter(); |
| // |
| // if (process == null) { |
| // process = BPELFactory.eINSTANCE.createProcess(); |
| // processResource.getContents().add(process); |
| // } |
| // if (extensionMap == null) { |
| // extensionMap = ExtensionmodelFactory.eINSTANCE.createExtensionMap( MODEL_EXTENSIONS_NAMESPACE ); |
| // if (extensionsResource == null) { |
| // extensionsResource = resourceSet.createResource(extensionsUri); |
| // } |
| // extensionsResource.getContents().clear(); |
| // extensionsResource.getContents().add(extensionMap); |
| // } |
| // |
| // |
| // // Make sure each model object has the necessary extensions! |
| // TreeIterator it = process.eAllContents(); |
| // while (it.hasNext()) { |
| // Object modelObject = it.next(); |
| // if (modelObject instanceof EObject) { |
| // // ModelHelper.createExtensionIfNecessary(extensionMap, (EObject)modelObject); |
| // } |
| // } |
| // |
| // if (extensionMap.get(process) == null) { |
| // // ModelHelper.createExtensionIfNecessary(extensionMap, process); |
| // } |
| |
| } |
| |
| /** |
| * The extension map |
| * @return |
| */ |
| |
| public ExtensionMap getExtensionMap() { |
| return extensionMap; |
| } |
| |
| /** |
| * @return the extension resource |
| */ |
| |
| public Resource getExtensionsResource() { |
| return extensionsResource; |
| } |
| |
| /** |
| * |
| * @return the process read or null |
| */ |
| public Process getProcess() { |
| return process; |
| } |
| |
| /** |
| * The process resource. |
| * @return the process resource |
| */ |
| public Resource getProcessResource() { |
| return processResource; |
| } |
| } |