blob: d2d1939c6660addcad65750359edcd676cb44f3d [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 java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import org.eclipse.emf.ecore.EOperation;
import org.eclipse.gmf.internal.xpand.BuiltinMetaModel;
public class StandardLibraryImports extends AbstractImportsManager {
private static final String GLOBAL_VAR_LIBRARY_NAME = "xpt::GlobalVarOperations";
private static final Map<EOperation, MapEntry> operationsMap;
static {
operationsMap = new HashMap<EOperation, MapEntry>();
operationsMap.put(BuiltinMetaModel.EString_ToFirstUpper, MapEntry.newEntry("firstToUpper"));
operationsMap.put(BuiltinMetaModel.EString_ToFirstLower, MapEntry.newStringLibEntry("xpandToFirstLower"));
operationsMap.put(BuiltinMetaModel.EString_SubString_StartEnd, MapEntry.newEntry("substring"));
operationsMap.put(BuiltinMetaModel.EString_SubString, MapEntry.newStringLibEntry("xpandSubstring"));
operationsMap.put(BuiltinMetaModel.EString_ToUpperCase, MapEntry.newEntry("toUpper"));
operationsMap.put(BuiltinMetaModel.EString_ToLowerCase, MapEntry.newEntry("toLower"));
operationsMap.put(BuiltinMetaModel.EString_ReplaceFirst, MapEntry.newStringLibEntry("xpandReplaceFirst"));
operationsMap.put(BuiltinMetaModel.EString_ToCharList, MapEntry.newStringLibEntry("xpandToCharList"));
operationsMap.put(BuiltinMetaModel.EString_ReplaceAll, MapEntry.newStringLibEntry("xpandReplaceAll"));
operationsMap.put(BuiltinMetaModel.EString_Split, MapEntry.newStringLibEntry("xpandSplit"));
operationsMap.put(BuiltinMetaModel.EString_Matches, MapEntry.newStringLibEntry("xpandMatches"));
operationsMap.put(BuiltinMetaModel.EString_StartsWith, MapEntry.newStringLibEntry("xpandStartsWith"));
operationsMap.put(BuiltinMetaModel.EString_EndsWith, MapEntry.newStringLibEntry("xpandEndsWith"));
operationsMap.put(BuiltinMetaModel.EString_Length, MapEntry.newStringLibEntry("xpandLength"));
operationsMap.put(BuiltinMetaModel.Object_CompareTo, MapEntry.newOclAnyLibEntry("xpandCompareTo"));
operationsMap.put(BuiltinMetaModel.Object_ToString, MapEntry.newEntry("repr"));
operationsMap.put(BuiltinMetaModel.Int_Div_Int, MapEntry.newEntry("div"));
operationsMap.put(BuiltinMetaModel.Int_UpTo, MapEntry.newIntegerLibEntry("xpandUpTo"));
}
private Set<String> usedLibraries = new LinkedHashSet<String>();
public StandardLibraryImports(StringBuilder stringBuilder) {
super(stringBuilder);
}
public StandardLibraryImports(int placeholder) {
super(placeholder);
}
public String[] getLibraries() {
return usedLibraries.toArray(new String[usedLibraries.size()]);
}
String getOperationName(EOperation eOperation) {
if (operationsMap.containsKey(eOperation)) {
MapEntry entry = operationsMap.get(eOperation);
if (entry.isLibraryOperation()) {
usedLibraries.add(entry.getLibraryName());
}
return entry.getQvtOperationName();
}
return null;
}
public String getXpandGetObjectGlobalVarOperationName() {
usedLibraries.add(GLOBAL_VAR_LIBRARY_NAME);
return "xpandGetObjectGlobalVar";
}
public CharSequence getXpandGetStringGlobalVarOperationName() {
usedLibraries.add(GLOBAL_VAR_LIBRARY_NAME);
return "xpandGetStringGlobalVar";
}
void registerNativeLibrary(String libraryName) {
usedLibraries.add(libraryName);
}
private static class MapEntry {
private static final String STRING_LIBRARY_NAME = "xpt::StringOperations";
private static final String OCLANY_LIBRARY_NAME = "xpt::OclAnyOperations";
private static final String INTEGER_LIBRARY_NAME = "xpt::IntegerOperations";
private String qvtOperationName;
private String libraryName;
public static MapEntry newEntry(String qvtOperationName) {
return new MapEntry(qvtOperationName);
}
public static MapEntry newStringLibEntry(String qvtOperationName) {
return new MapEntry(qvtOperationName, STRING_LIBRARY_NAME);
}
public static MapEntry newOclAnyLibEntry(String qvtOperationName) {
return new MapEntry(qvtOperationName, OCLANY_LIBRARY_NAME);
}
public static MapEntry newIntegerLibEntry(String qvtOperationName) {
return new MapEntry(qvtOperationName, INTEGER_LIBRARY_NAME);
}
private MapEntry(String qvtOperationName) {
this.qvtOperationName = qvtOperationName;
}
private MapEntry(String qvtOperationName, String libraryName) {
this(qvtOperationName);
this.libraryName = libraryName;
}
public String getQvtOperationName() {
return qvtOperationName;
}
public boolean isLibraryOperation() {
return libraryName != null;
}
public String getLibraryName() {
return libraryName;
}
}
}