Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.emf.ecore.xcore/src/org/eclipse/emf/ecore/xcore/generator/XcoreGenModelGeneratorAdapterFactory.java')
-rw-r--r--org.eclipse.emf.ecore.xcore/src/org/eclipse/emf/ecore/xcore/generator/XcoreGenModelGeneratorAdapterFactory.java116
1 files changed, 116 insertions, 0 deletions
diff --git a/org.eclipse.emf.ecore.xcore/src/org/eclipse/emf/ecore/xcore/generator/XcoreGenModelGeneratorAdapterFactory.java b/org.eclipse.emf.ecore.xcore/src/org/eclipse/emf/ecore/xcore/generator/XcoreGenModelGeneratorAdapterFactory.java
new file mode 100644
index 000000000..8b2f0ab13
--- /dev/null
+++ b/org.eclipse.emf.ecore.xcore/src/org/eclipse/emf/ecore/xcore/generator/XcoreGenModelGeneratorAdapterFactory.java
@@ -0,0 +1,116 @@
+package org.eclipse.emf.ecore.xcore.generator;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.eclipse.emf.codegen.ecore.genmodel.generator.GenClassGeneratorAdapter;
+import org.eclipse.emf.codegen.ecore.genmodel.generator.GenEnumGeneratorAdapter;
+import org.eclipse.emf.codegen.ecore.genmodel.generator.GenModelGeneratorAdapter;
+import org.eclipse.emf.codegen.ecore.genmodel.generator.GenModelGeneratorAdapterFactory;
+import org.eclipse.emf.codegen.ecore.genmodel.generator.GenPackageGeneratorAdapter;
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.xtext.generator.IFileSystemAccess;
+
+public class XcoreGenModelGeneratorAdapterFactory extends GenModelGeneratorAdapterFactory
+{
+
+ private IFileSystemAccess fsa;
+
+ public void setFileSystemAccess(IFileSystemAccess fsa)
+ {
+ this.fsa = fsa;
+ }
+
+ protected OutputStream createOutputStream(URI workspacePath)
+ {
+ String string = workspacePath.toString();
+ final String targetFile = string.substring(string.indexOf(XcoreGeneratorImpl.OUTPUT_DIR_MARKER) + XcoreGeneratorImpl.OUTPUT_DIR_MARKER.length()+1);
+ return new ByteArrayOutputStream() {
+ @Override
+ public void close() throws IOException
+ {
+ fsa.generateFile(targetFile, new String(this.toByteArray()));
+ super.close();
+ }
+ };
+ }
+
+ /**
+ * Returns a singleton {@link GenModelGeneratorAdapter}.
+ */
+ @Override
+ public Adapter createGenModelAdapter()
+ {
+ if (genModelGeneratorAdapter == null)
+ {
+ genModelGeneratorAdapter = new GenModelGeneratorAdapter(this){
+ @Override
+ protected OutputStream createOutputStream(URI workspacePath) throws Exception
+ {
+ return XcoreGenModelGeneratorAdapterFactory.this.createOutputStream(workspacePath);
+ }
+ };
+ }
+ return genModelGeneratorAdapter;
+ }
+
+ /**
+ * Returns a singleton {@link GenPackageGeneratorAdapter}.
+ */
+ @Override
+ public Adapter createGenPackageAdapter()
+ {
+ if (genPackageGeneratorAdapter == null)
+ {
+ genPackageGeneratorAdapter = new GenPackageGeneratorAdapter(this) {
+ @Override
+ protected OutputStream createOutputStream(URI workspacePath) throws Exception
+ {
+ return XcoreGenModelGeneratorAdapterFactory.this.createOutputStream(workspacePath);
+ }
+ };
+ }
+ return genPackageGeneratorAdapter;
+ }
+
+ /**
+ * Returns a singleton {@link GenClassGeneratorAdapter}.
+ */
+ @Override
+ public Adapter createGenClassAdapter()
+ {
+ if (genClassGeneratorAdapter == null)
+ {
+ genClassGeneratorAdapter = new GenClassGeneratorAdapter(this){
+ @Override
+ protected OutputStream createOutputStream(URI workspacePath) throws Exception
+ {
+ return XcoreGenModelGeneratorAdapterFactory.this.createOutputStream(workspacePath);
+ }
+ };
+ }
+ return genClassGeneratorAdapter;
+ }
+
+ /**
+ * Returns a singleton {@link GenEnumGeneratorAdapter}.
+ */
+ @Override
+ public Adapter createGenEnumAdapter()
+ {
+ if (genEnumGeneratorAdapter == null)
+ {
+ genEnumGeneratorAdapter = new GenEnumGeneratorAdapter(this){
+ @Override
+ protected OutputStream createOutputStream(URI workspacePath) throws Exception
+ {
+ return XcoreGenModelGeneratorAdapterFactory.this.createOutputStream(workspacePath);
+ }
+ };
+ }
+ return genEnumGeneratorAdapter;
+ }
+
+}

Back to the top