/*******************************************************************************
* Copyright (c) 2008, 2012 Obeo.
* 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:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.emf.eef.codegen.ecore.services.wrappers;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.Path;
import org.eclipse.emf.codegen.ecore.genmodel.GenClass;
import org.eclipse.emf.codegen.ecore.genmodel.GenClass.ChildCreationData;
import org.eclipse.emf.codegen.ecore.genmodel.GenClassifier;
import org.eclipse.emf.codegen.ecore.genmodel.GenFeature;
import org.eclipse.emf.codegen.ecore.genmodel.GenJDKLevel;
import org.eclipse.emf.codegen.ecore.genmodel.GenModel;
import org.eclipse.emf.codegen.ecore.genmodel.GenOperation;
import org.eclipse.emf.codegen.ecore.genmodel.GenPackage;
import org.eclipse.emf.codegen.ecore.genmodel.generator.GenClassGeneratorAdapter;
import org.eclipse.emf.codegen.util.CodeGenUtil;
import org.eclipse.emf.codegen.util.GIFEmitter;
import org.eclipse.emf.codegen.util.ImportManager;
import org.eclipse.emf.common.util.Monitor;
import org.eclipse.emf.eef.codegen.ecore.EMFCodegenPlugin;
/**
* @author <a href="mailto:stephane.bouchet@obeo.fr">Stephane Bouchet</a>
*/
public class GenClassWrapper {
public String getInternalQualifiedInterfaceName(GenClass genClass, Boolean includeTemplateArguments) {
if (genClass.isDynamic()) {
GenClass baseGenClass = genClass.getBaseGenClass();
return baseGenClass == null ? "org.eclipse.emf.ecore.EObject"
: getInternalQualifiedInterfaceName((GenClass)baseGenClass);
}
return genClass.getEcoreClass().getInstanceClassName() != null ? includeTemplateArguments ? genClass
.getEcoreClass().getInstanceTypeName() : genClass.getEcoreClass().getInstanceClassName()
: genClass.getGenPackage().getInterfacePackageName() + "." + genClass.getInterfaceName();
}
public String getInternalQualifiedInterfaceName(GenClass genClass) {
return getInternalQualifiedInterfaceName(genClass,
getEffectiveComplianceLevel(genClass).getValue() >= GenJDKLevel.JDK50);
}
protected GenJDKLevel getEffectiveComplianceLevel(GenClass genClass) {
return genClass.getGenModel().getComplianceLevel();
}
public List<?> getChildCreationData(GenClass genClass) {
return genClass.getChildCreationData();
}
public GenFeature getCreateFeature(Object childCreationData) {
return ((ChildCreationData)childCreationData).createFeature;
}
public GenFeature getDelegatedFeature(Object childCreationData) {
return ((ChildCreationData)childCreationData).delegatedFeature;
}
public GenClassifier getCreateClassifier(Object childCreationData) {
return ((ChildCreationData)childCreationData).createClassifier;
}
public String getDefaultOffsetCorrectionField(GenClass genClass) {
return genClass.getOffsetCorrectionField(null);
}
public List<String> getEVirtualIndexBitFields(GenClass genClass) {
return genClass.getEVirtualIndexBitFields(new ArrayList<String>());
}
public List<String> getAllEVirtualIndexBitFields(GenClass genClass) {
return genClass.getAllEVirtualIndexBitFields(new ArrayList<String>());
}
public boolean implementsAnyEInverseAddGenFeatures(GenClass genClass) {
return genClass.implementsAny(genClass.getEInverseAddGenFeatures());
}
public boolean implementsAnyEInverseRemoveGenFeatures(GenClass genClass) {
return genClass.implementsAny(genClass.getEInverseRemoveGenFeatures());
}
public boolean implementsAnyEBasicRemoveFromContainerGenFeatures(GenClass genClass) {
return genClass.implementsAny(genClass.getEBasicRemoveFromContainerGenFeatures());
}
public boolean implementsAnyEGetGenFeatures(GenClass genClass) {
return genClass.implementsAny(genClass.getEGetGenFeatures());
}
public boolean implementsAnyESetGenFeatures(GenClass genClass) {
return genClass.implementsAny(genClass.getESetGenFeatures());
}
public boolean implementsAnyEUnsetGenFeatures(GenClass genClass) {
return genClass.implementsAny(genClass.getEUnsetGenFeatures());
}
public boolean implementsAnyEIsSetGenFeatures(GenClass genClass) {
return genClass.implementsAny(genClass.getEIsSetGenFeatures());
}
/**
* @param genClass
* @param extendedGenClass
* @return
*/
public boolean overridesExtendedGenOperations(GenClass genClass, GenClass extendedGenClass) {
return !genClass.getOverrideGenOperations(extendedGenClass.getImplementedGenOperations(),
genClass.getImplementedGenOperations()).isEmpty();
}
/**
* @param genClass
* @param extendedGenClass
* @return
*/
public boolean overridesGenOperations(GenClass genClass) {
return !genClass.getOverrideGenOperations(genClass.getExtendedGenOperations(),
genClass.getImplementedGenOperations()).isEmpty();
}
/**
* Remplace l'invocation de
* <code>CodeGenUtil.upperName(genClass.getUniqueName(genOperation), genModel.getLocale())</code> .
*
* @param genClass
* @param genOperation
* @return
*/
public String getUniqueNameUppercase(GenClass genClass, GenOperation genOperation) {
return CodeGenUtil
.upperName(genClass.getUniqueName(genOperation), genClass.getGenModel().getLocale());
}
/**
* used to wrap icon creation.
*
* @see GenClassGeneratorAdapter#generateItemIcon(GenClass, Monitor)
* @param genClass
*/
public void generateItemIcon(GenClass genClass) {
if (genClass.isImage()) {
String inputFile = getClass().getResource("/templates/edit/Item.gif").toString();
GIFEmitter gifEmitter = new GIFEmitter(inputFile);
byte[] contents = gifEmitter.generateGIF(genClass.getName(), null);
Path targetPath = new Path(genClass.getItemIconFileName());
EMFCodegenPlugin.getDefault().createGIF(contents, targetPath);
}
}
/**
* used to wrap icon creation.
*
* @see GenClassGeneratorAdapter#generateCreateChildIcons(GenClass, Monitor)
* @param genClass
*/
public void generateCreateChildIcons(GenClass genClass) {
GenModel genModel = genClass.getGenModel();
if (genModel.isCreationCommands() && genModel.isCreationIcons()) {
for (GenFeature feature : genClass.getCreateChildFeaturesIncludingDelegation()) {
for (GenClass childClass : genClass.getChildrenClasses(feature)) {
String inputFile = getClass().getResource("/templates/edit/CreateChild.gif").toString();
GIFEmitter gifEmitter = new GIFEmitter(inputFile);
byte[] contents = gifEmitter.generateGIF(genClass.getName(), childClass.getName());
Path targetPath = new Path(genClass.getCreateChildIconFileName(feature, childClass));
EMFCodegenPlugin.getDefault().createGIF(contents, targetPath);
}
}
}
}
/**
* Wraps method addClassPseudoImports from EMF.
*
* @param genClass
* @return the pseudo import
*/
public String addClassPseudoImports(GenClass genClass) {
genClass.addClassPsuedoImports();
return "";
}
/**
* Initialize the importManager used by EMF.
*
* @param genClass
* @param extendedGenClass
* @return
*/
public String initializeImportManager(GenClass genClass, boolean isInterface, boolean isImplementation) {
GenModel genModel = genClass.getGenModel();
GenPackage genPackage = genClass.getGenPackage();
String packageName = isInterface ? genPackage.getInterfacePackageName() : genPackage
.getClassPackageName();
String className = isImplementation ? genClass.getClassName() : genClass.getInterfaceName();
ImportManager importManager = new ImportManager(packageName, className);
genModel.setImportManager(importManager);
return "";
}
}