package org.eclipse.emf.mwe2.ecore; import java.io.OutputStream; import org.eclipse.emf.codegen.ecore.generator.GeneratorAdapterFactory; import org.eclipse.emf.codegen.ecore.genmodel.GenModel; 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.emf.mwe2.util.LineFilterOutputStream; /** * @author Sven Efftinge - Initial contribution and API */ public class CvsIdFilteringGeneratorAdapterFactoryDescriptor implements GeneratorAdapterFactory.Descriptor { /** * @author Sebastian Zarnekow - Initial contribution and API */ protected class IdFilteringGenModelGeneratorAdapterFactory extends GenModelGeneratorAdapterFactory { protected class IdFilteringGenPackageAdapter extends GenPackageGeneratorAdapter { protected IdFilteringGenPackageAdapter( GeneratorAdapterFactory generatorAdapterFactory) { super(generatorAdapterFactory); if (explicitLineDelimiter != null) { setLineDelimiter(explicitLineDelimiter); } } @Override protected OutputStream createOutputStream(URI workspacePath) throws Exception { return CvsIdFilteringGeneratorAdapterFactoryDescriptor.this .createOutputStream( super.createOutputStream(workspacePath), getLineDelimiter()); } @Override protected void createImportManager(String packageName, String className) { super.createImportManager(packageName, className); if (explicitLineDelimiter != null) importManager.setLineDelimiter(explicitLineDelimiter); } @Override public String getLineDelimiter(URI workspacePath, String encoding) { if (explicitLineDelimiter != null) return explicitLineDelimiter; return super.getLineDelimiter(workspacePath, encoding); } } protected class IdFilteringGenEnumAdapter extends GenEnumGeneratorAdapter { protected IdFilteringGenEnumAdapter( GeneratorAdapterFactory generatorAdapterFactory) { super(generatorAdapterFactory); if (explicitLineDelimiter != null) { setLineDelimiter(explicitLineDelimiter); } } @Override protected OutputStream createOutputStream(URI workspacePath) throws Exception { return CvsIdFilteringGeneratorAdapterFactoryDescriptor.this .createOutputStream( super.createOutputStream(workspacePath), getLineDelimiter()); } @Override protected void createImportManager(String packageName, String className) { super.createImportManager(packageName, className); if (explicitLineDelimiter != null) importManager.setLineDelimiter(explicitLineDelimiter); } @Override public String getLineDelimiter(URI workspacePath, String encoding) { if (explicitLineDelimiter != null) return explicitLineDelimiter; return super.getLineDelimiter(workspacePath, encoding); } } protected class IdFilteringGenClassAdapter extends GenClassGeneratorAdapter { protected IdFilteringGenClassAdapter( GeneratorAdapterFactory generatorAdapterFactory) { super(generatorAdapterFactory); if (explicitLineDelimiter != null) { setLineDelimiter(explicitLineDelimiter); } } @Override protected OutputStream createOutputStream(URI workspacePath) throws Exception { return CvsIdFilteringGeneratorAdapterFactoryDescriptor.this .createOutputStream( super.createOutputStream(workspacePath), getLineDelimiter()); } @Override protected void createImportManager(String packageName, String className) { super.createImportManager(packageName, className); if (explicitLineDelimiter != null) importManager.setLineDelimiter(explicitLineDelimiter); } @Override public String getLineDelimiter(URI workspacePath, String encoding) { if (explicitLineDelimiter != null) return explicitLineDelimiter; return super.getLineDelimiter(workspacePath, encoding); } } @Override public Adapter createGenClassAdapter() { return new IdFilteringGenClassAdapter(this); } @Override public Adapter createGenEnumAdapter() { return new IdFilteringGenEnumAdapter(this); } @Override public Adapter createGenModelAdapter() { if (genModelGeneratorAdapter == null) { genModelGeneratorAdapter = new GenModelGeneratorAdapter(this) { // we handle these ones on our own @Override protected void generateModelBuildProperties( GenModel genModel, org.eclipse.emf.common.util.Monitor monitor) { } @Override protected void generateModelManifest(GenModel genModel, org.eclipse.emf.common.util.Monitor monitor) { } @Override protected void generateModelPluginClass(GenModel genModel, org.eclipse.emf.common.util.Monitor monitor) { } @Override protected void generateModelPluginProperties( GenModel genModel, org.eclipse.emf.common.util.Monitor monitor) { } }; } return genModelGeneratorAdapter; } @Override public Adapter createGenPackageAdapter() { return new IdFilteringGenPackageAdapter(this); } } /* @Nullable */ private final String explicitLineDelimiter; public CvsIdFilteringGeneratorAdapterFactoryDescriptor() { this(null); } /** * @since 2.7 */ public CvsIdFilteringGeneratorAdapterFactoryDescriptor(String lineDelimiter) { super(); this.explicitLineDelimiter = lineDelimiter; } protected OutputStream createOutputStream(OutputStream stream, String lineDelimiter) throws Exception { if (lineDelimiter != null) return new LineFilterOutputStream(stream, " * $Id" + "$", lineDelimiter); return new LineFilterOutputStream(stream, " * $Id" + "$"); } public GeneratorAdapterFactory createAdapterFactory() { return new IdFilteringGenModelGeneratorAdapterFactory(); } }