/**
* Copyright (c) 2006 IBM Corporation 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:
* IBM - Initial API and implementation
*/
package org.eclipse.emf.codegen.ecore.genmodel.generator;
import org.eclipse.emf.codegen.ecore.CodeGenEcorePlugin;
import org.eclipse.emf.codegen.ecore.generator.GeneratorAdapter;
import org.eclipse.emf.codegen.ecore.generator.GeneratorAdapterFactory;
import org.eclipse.emf.codegen.ecore.genmodel.GenEnum;
import org.eclipse.emf.codegen.ecore.genmodel.GenModel;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.common.util.Monitor;
/**
* A {@link GeneratorAdapter} for instances of {@link GenEnum}. This contributes the artifacts for every enum to EMF's
* default code generation.
*
* <p>This implementation should not be extended merely to augment the default code generation for enums. The
* recommended approach is to implement a new adapter and register the {@link GeneratorAdapterFactory adapter factory}
* that creates it, so that it is contributed to code generation. Such registration is usually done through the
* <code>org.eclipse.emf.codegen.ecore.generatorAdapters</code> extension point.
*
* <p>This implementation may be extended, however, in order to remove from or change the default code generation.
*
* @since 2.2.0
*/
public class GenEnumGeneratorAdapter extends GenBaseGeneratorAdapter
{
protected static final int ENUM_CLASS_ID = 0;
private static final JETEmitterDescriptor[] JET_EMITTER_DESCRIPTORS =
{
new JETEmitterDescriptor("model/EnumClass.javajet", "org.eclipse.emf.codegen.ecore.templates.model.EnumClass")
};
/**
* Returns the set of <code>JETEmitterDescriptor</code>s used by the adapter. The contents of the returned array
* should never be changed. Rather, subclasses may override this method to return a different array altogether.
*/
protected JETEmitterDescriptor[] getJETEmitterDescriptors()
{
return JET_EMITTER_DESCRIPTORS;
}
public GenEnumGeneratorAdapter(GeneratorAdapterFactory generatorAdapterFactory)
{
super(generatorAdapterFactory);
}
/**
* Returns the {@link org.eclipse.emf.codegen.ecore.genmodel.GenPackage} that contains the given {@link GenEnum}.
*/
@Override
public Object getGenerateParent(Object object, Object projectType)
{
return getParent(object);
}
@Override
protected Diagnostic generateModel(Object object, Monitor monitor)
{
monitor.beginTask("", 2);
GenEnum genEnum = (GenEnum)object;
message = CodeGenEcorePlugin.INSTANCE.getString("_UI_Generating_message", new Object[] { genEnum.getFormattedName() });
monitor.subTask(message);
GenModel genModel = genEnum.getGenModel();
ensureProjectExists(genModel.getModelDirectory(), genEnum, MODEL_PROJECT_TYPE, genModel.isUpdateClasspath(), createMonitor(monitor, 1));
message = CodeGenEcorePlugin.INSTANCE.getString
("_UI_GeneratingJavaClass_message", new Object[] { genEnum.getGenPackage().getInterfacePackageName() + "." + genEnum.getName() });
generateEnumClass(genEnum, monitor);
return Diagnostic.OK_INSTANCE;
}
protected void generateEnumClass(GenEnum genEnum, Monitor monitor)
{
monitor.subTask(message);
generateJava
(genEnum.getGenModel().getModelDirectory(),
genEnum.getGenPackage().getInterfacePackageName(),
genEnum.getName(),
getJETEmitter(getJETEmitterDescriptors(), ENUM_CLASS_ID),
null,
createMonitor(monitor, 1));
}
}