// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.mdm.repository.utils; import java.lang.reflect.Field; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import org.eclipse.emf.ecore.EClass; import org.talend.mdm.repository.model.mdmserverobject.MdmserverobjectPackage; /** * DOC hbhong class global comment. Detailled comment */ public class EMFClassUtil { static Logger log = Logger.getLogger(EMFClassUtil.class); private List<EClass> definedClass = new LinkedList<EClass>(); private EMFClassUtil() { initFixedMap(); } Map<String, String> fixedNamedMap = new HashMap<String, String>(); private void initFixedMap() { fixedNamedMap.put("WSMenuEntryDescriptions", "WSMenuMenuEntriesDescriptionsE"); } private static EMFClassUtil instance = new EMFClassUtil(); /** * Getter for instance. * * @return the instance */ public static EMFClassUtil getInstance() { return instance; } public EClass guessEClassByClassName(Class cls) { String simpleName = cls.getSimpleName(); String eClassName = null; Class enclosingClass = cls.getEnclosingClass(); while (enclosingClass != null) { String enclosingName = enclosingClass.getSimpleName(); simpleName = enclosingName + simpleName; enclosingClass = enclosingClass.getEnclosingClass(); } eClassName = fixedNamedMap.get(simpleName); if (eClassName == null) { eClassName = simpleName + "E"; //$NON-NLS-1$ } for (EClass eCls : getAllEClass()) { if (eCls.getName().equals(eClassName)) { // System.out.println(">>For class:" + cls.getName() + " (Found:)=> " + eCls.getName()); //$NON-NLS-1$ //$NON-NLS-2$ return eCls; } } log.debug(">>For class:" + simpleName + " Not Found corresponding EClass "); //$NON-NLS-1$//$NON-NLS-2$ return null; } private List<EClass> getAllEClass() { if (definedClass.isEmpty()) { Class cls = MdmserverobjectPackage.Literals.class; for (Field field : cls.getDeclaredFields()) { if (field.getType() == EClass.class) { try { Object object = field.get(cls); definedClass.add((EClass) object); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } } return definedClass; } }