blob: 7a787e1c3546e9bf8bebc25abfc54b7c9be73f12 [file] [log] [blame]
/**
* <copyright>
*
* Copyright (c) 2009-2010 Thales Corporate Services S.A.S.
* 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:
* Thales Corporate Services S.A.S - initial API and implementation
*
* </copyright>
*/
package org.eclipse.egf.emf.pattern.base;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path;
import org.eclipse.emf.codegen.ecore.generator.Generator;
import org.eclipse.emf.codegen.ecore.genmodel.GenBase;
import org.eclipse.emf.codegen.ecore.genmodel.GenModel;
import org.eclipse.emf.codegen.ecore.genmodel.generator.GenBaseGeneratorAdapter;
import org.eclipse.emf.common.util.BasicMonitor;
import org.eclipse.emf.common.util.Monitor;
import org.eclipse.emf.common.util.URI;
/**
* @author Matthieu Helleboid
*
*/
public class CodegenGeneratorAdapter extends GenBaseGeneratorAdapter {
protected Generator _generator;
protected GenModel _genModel;
protected URI _mergeRulesURI;
public CodegenGeneratorAdapter(GenBase generatingObject) {
super(null);
this.generatingObject = generatingObject;
_genModel = generatingObject.getGenModel();
}
public void setMergeRulesURI(URI mergeRulesURI) {
_mergeRulesURI = mergeRulesURI;
}
@Override
public Generator getGenerator() {
if (_generator == null) {
_generator = GenModelUtil.createGenerator(_genModel, _mergeRulesURI);
}
return _generator;
}
public boolean canGenerate(Object projectType) {
return super.canGenerate(generatingObject, projectType);
}
@Override
public URI toURI(String pathName) {
return super.toURI(pathName);
}
protected OutputStream createOutputStream(final URI workspacePath) throws Exception {
return new ByteArrayOutputStream(5000) {
@Override
public void close() throws IOException {
final IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(workspacePath.toString()));
try {
// use buf directly to avoid duplication of the array.
if (file.exists())
file.setContents(new ByteArrayInputStream(buf, 0, count), IResource.KEEP_HISTORY | IResource.FORCE, null);
else
file.create(new ByteArrayInputStream(buf, 0, count), true, null);
} catch (CoreException e) {
final IOException ioException = new IOException(e.getMessage());
ioException.initCause(e);
throw ioException;
}
}
};
// return
// getURIConverter().createOutputStream(toPlatformResourceURI(workspacePath),
// null);
}
@Override
public boolean exists(URI workspacePath) {
return ResourcesPlugin.getWorkspace().getRoot().exists(new Path(workspacePath.toString()));
}
@Override
public void ensureProjectExists(String workspacePath, Object object, Object projectType, boolean force, Monitor monitor) {
super.ensureProjectExists(workspacePath, object, projectType, force, monitor);
}
@Override
public void ensureContainerExists(URI workspacePath, Monitor monitor) {
super.ensureContainerExists(workspacePath, monitor);
}
public void generateJava(String targetPath, String packageName, String className, String output) {
generateJava(targetPath, packageName, className, new StringJETEmitter(output), (Object[]) null, new BasicMonitor());
}
public void generateText(String targetPathName, boolean overwrite, String encoding, String output) {
generateText(targetPathName, new StringJETEmitter(output), (Object[]) null, overwrite, encoding, new BasicMonitor());
}
public void generateProperties(String targetPathName, String output) {
generateProperties(targetPathName, new StringJETEmitter(output), (Object[]) null, new BasicMonitor());
}
public void generateGIF(String inputPathName, String targetPathName, String parentKey, String childKey, boolean overwrite) {
generateGIF(targetPathName, createGIFEmitter(inputPathName), parentKey, childKey, overwrite, new BasicMonitor());
}
}