blob: 5282ba140fae06e52fbd8165fa35e6ad4c4b0818 [file] [log] [blame]
/**
* Copyright (c) 2008 Borland Software Corp.
*
* 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:
* Alexander Shatalin (Borland) - initial API and implementation
*/
package org.eclipse.gmf.internal.xpand.migration;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EDataType;
import org.eclipse.emf.ecore.EEnumLiteral;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.gmf.internal.xpand.BuiltinMetaModel;
import org.eclipse.gmf.internal.xpand.BuiltinMetaModelExt;
import org.eclipse.ocl.ecore.internal.OCLStandardLibraryImpl;
import org.eclipse.ocl.types.AnyType;
import org.eclipse.ocl.types.CollectionType;
import org.eclipse.ocl.types.OrderedSetType;
import org.eclipse.ocl.types.PrimitiveType;
import org.eclipse.ocl.types.SequenceType;
import org.eclipse.ocl.types.SetType;
import org.eclipse.ocl.types.VoidType;
public class TypeManager {
private final ModeltypeImports modeltypeImportsManger;
private boolean useFQNameForPrimitiveTypes = false;
private OclKeywordManager oclKeywordManager;
public TypeManager(OclKeywordManager keywordManager) {
this(null, keywordManager);
}
public TypeManager(ModeltypeImports modelImports, OclKeywordManager keywordManager) {
modeltypeImportsManger = modelImports;
oclKeywordManager = keywordManager;
}
public void setUseFQNameForPrimitiveTypes(boolean value) {
useFQNameForPrimitiveTypes = value;
}
public String getQvtFQName(EEnumLiteral literal) {
return getPackageName(literal.getEEnum().getEPackage()) + OclCs.PATH_SEPARATOR + oclKeywordManager.getValidIdentifierValue(literal.getEEnum().getName()) + OclCs.PATH_SEPARATOR
+ oclKeywordManager.getValidIdentifierValue(literal.getName());
}
public String getQvtFQName(EClassifier classifier) throws MigrationException {
if (classifier == BuiltinMetaModel.VOID) {
return VoidType.SINGLETON_NAME;
}
if (classifier instanceof EDataType) {
/**
* Handling QVT primitive types here.
*/
if (EcorePackage.eINSTANCE.getEString() == classifier) {
return getPrimitiveTypeName(PrimitiveType.STRING_NAME, useFQNameForPrimitiveTypes);
} else if (EcorePackage.eINSTANCE.getEBoolean() == classifier) {
return getPrimitiveTypeName(PrimitiveType.BOOLEAN_NAME, useFQNameForPrimitiveTypes);
} else if (EcorePackage.eINSTANCE.getEInt() == classifier) {
return getPrimitiveTypeName(PrimitiveType.INTEGER_NAME, useFQNameForPrimitiveTypes);
} else if (EcorePackage.eINSTANCE.getEDouble() == classifier) {
return getPrimitiveTypeName(PrimitiveType.REAL_NAME, useFQNameForPrimitiveTypes);
} else if (EcorePackage.eINSTANCE.getEJavaObject() == classifier) {
return getPrimitiveTypeName(AnyType.SINGLETON_NAME, useFQNameForPrimitiveTypes);
}
}
if (BuiltinMetaModel.isCollectionType(classifier)) {
StringBuilder sb = new StringBuilder();
if (BuiltinMetaModelExt.isSetType(classifier)) {
sb.append(SetType.SINGLETON_NAME);
} else if (BuiltinMetaModelExt.isListType(classifier)) {
sb.append(SequenceType.SINGLETON_NAME);
} else if (BuiltinMetaModelExt.isOrderedSetType(classifier)) {
sb.append(OrderedSetType.SINGLETON_NAME);
} else {
sb.append(CollectionType.SINGLETON_NAME);
}
sb.append(OclCs.OPEN_PAREN);
sb.append(getQvtFQName(BuiltinMetaModel.getInnerType(classifier)));
return sb.append(OclCs.CLOSE_PAREN).toString();
}
EPackage ePackage = classifier.getEPackage();
assert ePackage != null;
return getPackageName(ePackage) + OclCs.PATH_SEPARATOR + oclKeywordManager.getValidIdentifierValue(classifier.getName());
}
private String getPrimitiveTypeName(String primitiveTypeName, boolean useFQNameForPrimitiveTypes) {
return useFQNameForPrimitiveTypes ? OCLStandardLibraryImpl.stdlibPackage.getName() + OclCs.PATH_SEPARATOR + primitiveTypeName : primitiveTypeName;
}
private String getPackageName(EPackage ePackage) {
return modeltypeImportsManger != null ? modeltypeImportsManger.getModeltypeAlias(ePackage) : oclKeywordManager.getValidIdentifierValue(ePackage.getName());
}
}