package tefkat.engine.runtime.impl; import java.math.BigDecimal; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.EcorePackage; abstract class Util { private Util() { // no instances! throw new UnsupportedOperationException("Do not instantiate"); } /** * Returns an object compatible with the type of eFeature if possible. * * @param object * @param eFeature * @return */ static Object coerceType(Object object, EStructuralFeature eFeature) { Object result; if ("java.lang.String".equals(eFeature.getEType().getInstanceClassName())) { result = String.valueOf(object); } else if (object instanceof Number) { int typeID = eFeature.getEType().getClassifierID(); if (typeID == EcorePackage.EINTEGER_OBJECT|| typeID == EcorePackage.EINT) { result = new Integer(((Number) object).intValue()); } else if (typeID == EcorePackage.ELONG_OBJECT || typeID == EcorePackage.ELONG) { result = new Long(((Number) object).longValue()); } else if (typeID == EcorePackage.ESHORT_OBJECT || typeID == EcorePackage.ESHORT) { result = new Short(((Number) object).shortValue()); } else if (typeID == EcorePackage.EFLOAT_OBJECT || typeID == EcorePackage.EFLOAT) { result = new Float(((Number) object).floatValue()); } else if (typeID == EcorePackage.EDOUBLE_OBJECT || typeID == EcorePackage.EDOUBLE) { result = new Double(((Number) object).doubleValue()); } else if (typeID == EcorePackage.EBYTE_OBJECT || typeID == EcorePackage.EBYTE) { result = new Byte(((Number) object).byteValue()); } else if (typeID == EcorePackage.EBIG_INTEGER) { result = new BigInteger(String.valueOf(object)); } else if (typeID == EcorePackage.EBIG_DECIMAL) { result = new BigDecimal(String.valueOf(object)); } else { result = object; } } else { result = object; } return result; } static List coerceTypes(List l, EStructuralFeature eFeature) { List cl = new ArrayList(l.size()); for (int i = 0; i < l.size(); i++) { cl.add(i, coerceType(l.get(i), eFeature)); } return cl; } }