diff options
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.java | 116 |
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; + } + +} |