package org.jbpm.gd.common.notation; import java.util.HashMap; import java.util.Map; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.Platform; import org.eclipse.draw2d.geometry.Dimension; public class NotationMapping { private static Map NOTATION_MAPPINGS; private static HashMap NOTATION_ELEMENT_MAP = new HashMap(); private static HashMap INITIAL_DIMENSION_MAP = new HashMap(); private static HashMap HIDE_NAME_MAP = new HashMap(); private static Map getNotationMappings() { if (NOTATION_MAPPINGS == null) { initializeNotationMappings(); } return NOTATION_MAPPINGS; } private static void initializeNotationMappings() { NOTATION_MAPPINGS = new HashMap(); IConfigurationElement[] configurationElements = Platform.getExtensionRegistry().getConfigurationElementsFor("org.jbpm.gd.jpdl.notationMappings"); for (int i = 0; i < configurationElements.length; i++) { if (configurationElements[i].getName().equals("mapping")) { NOTATION_MAPPINGS.put( configurationElements[i].getAttribute("semanticElement"), configurationElements[i]); } } } public static String getNotationElementId(String semanticElementId) { if (!NOTATION_ELEMENT_MAP.containsKey(semanticElementId)) { IConfigurationElement element = (IConfigurationElement)getNotationMappings().get(semanticElementId); NOTATION_ELEMENT_MAP.put(semanticElementId, element.getAttribute("notationElement")); } return (String)NOTATION_ELEMENT_MAP.get(semanticElementId); } public static Dimension getInitialDimension(String semanticElementId) { if (!INITIAL_DIMENSION_MAP.containsKey(semanticElementId)) { processFigureElement(semanticElementId); } return (Dimension)INITIAL_DIMENSION_MAP.get(semanticElementId); } private static void processFigureElement(String semanticElementId) { IConfigurationElement[] children = ((IConfigurationElement)getNotationMappings().get(semanticElementId)).getChildren("figure"); Dimension dimension = null; Boolean hideName = Boolean.FALSE; if (children.length == 1) { dimension = new Dimension( Integer.parseInt(children[0].getAttribute("width")), Integer.parseInt(children[0].getAttribute("height"))); hideName = new Boolean(children[0].getAttribute("hideName") == null ? "false" : children[0].getAttribute("hideName")); } INITIAL_DIMENSION_MAP.put(semanticElementId, dimension); HIDE_NAME_MAP.put(semanticElementId, hideName); } public static boolean hideName(String semanticElementId) { if (!HIDE_NAME_MAP.containsKey(semanticElementId)) { processFigureElement(semanticElementId); } return ((Boolean)HIDE_NAME_MAP.get(semanticElementId)).booleanValue(); } }