Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.xtend.typesystem.emf/src/org/eclipse/xtend/typesystem/emf/XmiReader.java')
-rw-r--r--plugins/org.eclipse.xtend.typesystem.emf/src/org/eclipse/xtend/typesystem/emf/XmiReader.java115
1 files changed, 115 insertions, 0 deletions
diff --git a/plugins/org.eclipse.xtend.typesystem.emf/src/org/eclipse/xtend/typesystem/emf/XmiReader.java b/plugins/org.eclipse.xtend.typesystem.emf/src/org/eclipse/xtend/typesystem/emf/XmiReader.java
new file mode 100644
index 00000000..4889a5e4
--- /dev/null
+++ b/plugins/org.eclipse.xtend.typesystem.emf/src/org/eclipse/xtend/typesystem/emf/XmiReader.java
@@ -0,0 +1,115 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2005-2006 Sven Efftinge (http://www.efftinge.de) 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:
+ * Sven Efftinge (http://www.efftinge.de) - Initial API and implementation
+ *
+ * </copyright>
+ */
+package org.eclipse.xtend.typesystem.emf;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.emf.mwe.core.ConfigurationException;
+import org.eclipse.emf.mwe.core.WorkflowContext;
+import org.eclipse.emf.mwe.core.issues.Issues;
+import org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent;
+import org.eclipse.emf.mwe.core.monitor.ProgressMonitor;
+import org.eclipse.emf.mwe.core.resources.ResourceLoaderFactory;
+
+/**
+ * @author Sven Efftinge (http://www.efftinge.de)
+ */
+public class XmiReader extends AbstractWorkflowComponent {
+
+ protected String modelFile;
+
+ protected String outputSlot = WorkflowContext.DEFAULT_SLOT;
+
+ protected boolean firstElementOnly = true;
+
+ public String getLogMessage() {
+ return "file '"+modelFile+"' => slot '"+outputSlot+"'";
+ }
+
+ public void setMetaModelFile(final String metaModelFile) {
+ new Setup().addEPackageFile(metaModelFile);
+ }
+
+ public void setMetaModelPackage(final String metaModelPackage) {
+ new Setup().addEPackageClass(metaModelPackage);
+ }
+
+ public void setMetaModelDescriptor(final String metaModelDescriptor) {
+ new Setup().addEPackageDescriptor(metaModelDescriptor);
+ }
+
+ public void setModelFile(final String modelFile) {
+ this.modelFile = modelFile;
+ }
+
+ public void setOutputSlot(final String outputSlot) {
+ this.outputSlot = outputSlot;
+ }
+
+ public void setFirstElementOnly(final boolean firstElementOnly) {
+ this.firstElementOnly = firstElementOnly;
+ }
+
+ public void checkConfiguration(final Issues issues) {
+ loadFile(issues);
+ }
+
+ @Override
+ protected void invokeInternal(final WorkflowContext model, final ProgressMonitor monitor, final Issues issues) {
+ final File f = loadFile(issues);
+ final URI fileURI = URI.createFileURI(f.getAbsolutePath());
+
+ final Resource r = new ResourceSetImpl().createResource(fileURI);
+ try {
+ r.load(null);
+ } catch (final IOException e) {
+ throw new ConfigurationException(e);
+ }
+
+ if (firstElementOnly) {
+ model.set(outputSlot, r.getContents().get(0));
+ } else {
+ model.set(outputSlot, r.getContents());
+ }
+ }
+
+ protected File loadFile(final Issues issues) {
+ Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("*", new XMIResourceFactoryImpl());
+ if (modelFile == null) {
+ issues.addError("No modelFile specified!");
+ return null;
+ }
+ final URL url = ResourceLoaderFactory.createResourceLoader().getResource(modelFile);
+ if ((url == null) || (url.getFile() == null)) {
+ issues.addError(this, "cannot find file: " + modelFile);
+ return null;
+ }
+ final File f = new File(URI.decode(url.getFile()));
+ if (!f.exists()) {
+ issues.addError(this, "cannot find file: " + modelFile);
+ return null;
+ }
+ return f;
+ }
+
+
+
+}

Back to the top