public static String getResourceString(String key) { ResourceBundle bundle = CanvasPlugin.getDefault().getResourceBundle(); try { return bundle.getString(key); } catch (MissingResourceException e) { return key; } }
private void initializeCanvases() { Ooaofgraphics graphicsModelRoot = Ooaofgraphics.getDefaultInstance(); IExtensionRegistry reg = Platform.getExtensionRegistry(); IExtensionPoint extPt = reg.getExtensionPoint("org.xtuml.bp.core.editors"); // $NON-NLS-1$ IExtension[] exts = extPt.getExtensions(); IPreferenceStore prefStore = CanvasPlugin.getDefault().getPreferenceStore(); for (int i = 0; i < exts.length; i++) { IConfigurationElement[] elems = exts[i].getConfigurationElements(); for (int j = 0; j < elems.length; j++) { if (elems[j].getName().equals("editor")) { // $NON-NLS-1$ IConfigurationElement[] defs = elems[j].getChildren(); for (int k = 0; k < defs.length; k++) { int value = 0; if (defs[k].getName().equals("symbol")) { String className = defs[k].getAttribute("class"); if (!className.equals("")) { String symTypDef = defs[k].getAttribute("elemType"); if (symTypDef != null) { int elemType = getValueFor(symTypDef); String elemName = defs[k].getAttribute("name"); ElementSpecification_c es = new ElementSpecification_c(graphicsModelRoot); es.setName(elemName); es.setOoa_type(elemType); IConfigurationElement[] col = defs[k].getChildren("color"); if (col != null && col.length > 0) { int r = Integer.parseInt(col[0].getAttribute("r")); int g = Integer.parseInt(col[0].getAttribute("g")); int b = Integer.parseInt(col[0].getAttribute("b")); String clrStr = Integer.toString(r) + "," + Integer.toString(g) + "," + Integer.toString(b); String prefStr = "CanvasPreferencePage." + elemName + ".intColor"; prefStore.setDefault(prefStr, clrStr); clrStr = prefStore.getString(prefStr); if (clrStr == null || clrStr.equals("")) { // The preference is not set, set it to the default prefStore.setToDefault(prefStr); clrStr = prefStore.getString(prefStr); } es.setInternal(parseColor(clrStr)); } else { es.setHasnointeriorcolor(true); es.setInternal(parseColor("255,255,255")); } try { es.setRepresents(Class.forName(className)); } catch (ClassNotFoundException e) { logError("Specified metamodel class not found: ", e); } es.setCreator(defs[k].getAttribute("createMethod")); es.setIconname(defs[k].getAttribute("icon")); String defHStr = defs[k].getAttribute("defaultHeight"); String defWStr = defs[k].getAttribute("defaultWidth"); if (defHStr != null) { int defH = Integer.parseInt(defHStr); es.setDefaultheight(defH); } if (defWStr != null) { int defW = Integer.parseInt(defWStr); es.setDefaultwidth(defW); } String isFixedAspectStr = defs[k].getAttribute("fixedAspect"); if (isFixedAspectStr != null && isFixedAspectStr.equals("true")) { es.setIsfixedaspectratio(true); } String isFixedSizeStr = defs[k].getAttribute("fixedSize"); if (isFixedSizeStr != null && isFixedSizeStr.equals("true")) { es.setIsfixedsize(true); } String isAnchorHost = defs[k].getAttribute("isAnchorHost"); if (isAnchorHost != null && isAnchorHost.equals("true")) { es.setIsanchorhost(true); } String hasFloatingStr = defs[k].getAttribute("floatingText"); if (hasFloatingStr != null && hasFloatingStr.equals("true")) { es.setHasfloatingtext(true); } String layer = defs[k].getAttribute("layer"); if (layer != null) { try { es.setLayer(Integer.parseInt(layer)); } catch (NumberFormatException e) { logError("Could not parse symbol '" + elemName + "' layer: ", e); } } String antiAliased = defs[k].getAttribute("antiAliased"); if (antiAliased != null) { if (antiAliased.equalsIgnoreCase("true")) { es.setAntialiased(true); } else { es.setAntialiased(false); } } else { // default to false until drawing performance is enhanced es.setAntialiased(false); } String isTransparent = defs[k].getAttribute("isTransparent"); if (isTransparent != null && isTransparent.equalsIgnoreCase("true")) { es.setIstransparent(true); } else { es.setIstransparent(false); } String creationRule = defs[k].getAttribute("creationRule"); if (creationRule != null) { es.setCreationrule(creationRule); } else { es.setCreationrule("manual"); } String hasNameCompartment = defs[k].getAttribute("hasNameCompartment"); if (hasNameCompartment != null) { if (hasNameCompartment.equalsIgnoreCase("true")) { es.setHasnamecompartment(true); } else es.setHasnamecompartment(false); } // setup element spec subtypes String symbolType = defs[k].getAttribute("symbolType"); es.setSymboltype(symbolType); if (symbolType.equalsIgnoreCase("connector")) { ConnectorSpecification_c cs = new ConnectorSpecification_c(graphicsModelRoot); cs.relateAcrossR200To(es); } // setup dependencies addClientClassDependency(es, className); IConfigurationElement[] depends = defs[k].getChildren("dependsOn"); for (int d = 0; d < depends.length; ++d) { addClientClassDependency(es, depends[d].getAttribute("class")); } // setup auto resize String causeAutoResize = defs[k].getAttribute("causeAutoResize"); if (causeAutoResize != null) { if (causeAutoResize.equalsIgnoreCase("false")) { es.setCauseautoresize(false); } } else { es.setCauseautoresize(true); } } } } // end if element name is Symbol } for (int k = 0; k < defs.length; k++) { int value = 0; if (defs[k].getName().equals("defaultFor")) { String className = defs[k].getAttribute("class"); if (!className.equals("")) { String mdlTypDef = defs[k].getAttribute("modelType"); String ooaTypDef = defs[k].getAttribute("ooaType"); if (mdlTypDef != null && !mdlTypDef.equals("")) { int modelType = getValueFor(mdlTypDef); int ooaType = getValueFor(ooaTypDef); IConfigurationElement[] col = defs[k].getChildren("color"); int r = Integer.parseInt(col[0].getAttribute("r")); int g = Integer.parseInt(col[0].getAttribute("g")); int b = Integer.parseInt(col[0].getAttribute("b")); String diagName = defs[k].getAttribute("name"); ModelSpecification_c ms = new ModelSpecification_c(graphicsModelRoot); ms.setName(diagName); ms.setModel_type(modelType); ms.setOoa_type(ooaType); String clrStr = Integer.toString(r) + "," + Integer.toString(g) + "," + Integer.toString(b); String prefStr = "CanvasPreferencePage." + diagName + ".bkgColor"; prefStore.setDefault(prefStr, clrStr); clrStr = prefStore.getString(prefStr); if (clrStr == null || clrStr.equals("")) { // The preference is not set, set it to the default prefStore.setToDefault(prefStr); clrStr = prefStore.getString(prefStr); } ms.setBackground(parseColor(clrStr)); try { ms.setRepresents(Class.forName(className)); } catch (ClassNotFoundException e) { logError("Specified metamodel class not found: ", e); } IConfigurationElement[] symbols = defs[k].getChildren("validSymbol"); for (int m = 0; m < symbols.length; m++) { final String name = symbols[m].getAttribute("name"); final String symbolClassName = symbols[m].getAttribute("class"); String symbolOoaTypeDef = symbols[m].getAttribute("elemType"); int symbolElemType = -1; if (symbolOoaTypeDef != null) { symbolElemType = getValueFor(symbolOoaTypeDef); } final int finalElemType = symbolElemType; ElementSpecification_c elem = ElementSpecification_c.ElementSpecificationInstance( graphicsModelRoot, new ClassQueryInterface_c() { public boolean evaluate(Object candidate) { boolean result = false; ElementSpecification_c elemSpec = (ElementSpecification_c) candidate; if (elemSpec.getName().equals(name)) { result = true; } if (finalElemType != -1) { if (elemSpec.getOoa_type() == finalElemType) result = true; else result = false; } if (symbolClassName != null) { try { if (elemSpec.getRepresents() == Class.forName(symbolClassName) && elemSpec.getName().equals(name)) { result = true; } else { result = false; } } catch (ClassNotFoundException e) { logError("Specified metamodel class not found: ", e); } } return result; } }); if (elem != null) { // get the tool category from specification String toolCategory = symbols[m].getAttribute("tool_category"); if (toolCategory != null) { elem.setToolcategory(toolCategory); } ElementInModelSpecification_c eims = new ElementInModelSpecification_c(graphicsModelRoot); ms.relateAcrossR11To(eims); elem.relateAcrossR11To(eims); } } } } } } for (int k = 0; k < defs.length; k++) { if (defs[k].getName().equals("symbol")) { final String finalName = defs[k].getAttribute("name"); String symTypDef = defs[k].getAttribute("elemType"); if (symTypDef != null) { final int elemType = getValueFor(symTypDef); ElementSpecification_c es = ElementSpecification_c.ElementSpecificationInstance( graphicsModelRoot, new ClassQueryInterface_c() { public boolean evaluate(Object candidate) { ElementSpecification_c es = (ElementSpecification_c) candidate; return es.getName().equals(finalName) && es.getOoa_type() == elemType; } }); // setup element spec subtypes String symbolType = defs[k].getAttribute("symbolType"); if (symbolType.equalsIgnoreCase("connector")) { ConnectorSpecification_c cs = ConnectorSpecification_c.getOneTS_CSPOnR200(es); IConfigurationElement[] terms = defs[k].getChildren("terminator"); for (int l = 0; l < terms.length; l++) { TerminalSpecification_c tms = new TerminalSpecification_c(graphicsModelRoot); tms.setName(terms[l].getAttribute("name")); boolean isStart = terms[l].getAttribute("end").equals("start"); if (isStart) { cs.relateAcrossR202To(tms); } else { cs.relateAcrossR203To(tms); } final String symbol = terms[l].getAttribute("symbol"); final String symbolClassName = terms[l].getAttribute("symbolClass"); ElementSpecification_c els = ElementSpecification_c.ElementSpecificationInstance( graphicsModelRoot, new ClassQueryInterface_c() { public boolean evaluate(Object candidate) { boolean result = false; ElementSpecification_c elemSpec = (ElementSpecification_c) candidate; if (elemSpec.getName().equals(symbol)) { result = true; } if (symbolClassName != null) { try { if (elemSpec.getRepresents() == Class.forName(symbolClassName) && (elemSpec.getName().equals(symbol))) { result = true; } else { result = false; } } catch (ClassNotFoundException e) { logError("Specified metamodel class not found: ", e); } } return result; } }); String type = terms[l].getAttribute("type"); if (els != null) { if (type.equals("shape")) { ShapeTerminal_c sst = new ShapeTerminal_c(graphicsModelRoot); sst.relateAcrossR201To(tms); ShapeSpecification_c ss = ShapeSpecification_c.getOneTS_SSPOnR200(els); if (ss != null) { sst.relateAcrossR204To(ss); } } else if (type.equals("connector")) { ConnectorTerminal_c cnt = new ConnectorTerminal_c(graphicsModelRoot); cnt.relateAcrossR201To(tms); ConnectorSpecification_c cns = ConnectorSpecification_c.getOneTS_CSPOnR200(els); if (cns != null) { cnt.relateAcrossR205To(cns); String terminatesAt = terms[l].getAttribute("terminatesAt"); if (terminatesAt.equals("start")) { cnt.setTerminatesat(End_c.Start); } else if (terminatesAt.equals("middle")) { cnt.setTerminatesat(End_c.Middle); } else if (terminatesAt.equals("end")) { cnt.setTerminatesat(End_c.End); } } } } else if (type.equals("whitespace")) { WhitespaceTerminal_c wst = new WhitespaceTerminal_c(graphicsModelRoot); wst.relateAcrossR201To(tms); } IConfigurationElement[] automaticCreations = terms[l].getChildren("automaticCreation"); for (IConfigurationElement automaticCreation : automaticCreations) { final String creationSymbol = automaticCreation.getAttribute("symbol"); final String creationSymbolClassName = automaticCreation.getAttribute("symbolClass"); els = ElementSpecification_c.ElementSpecificationInstance( graphicsModelRoot, new ClassQueryInterface_c() { public boolean evaluate(Object candidate) { boolean result = false; ElementSpecification_c elemSpec = (ElementSpecification_c) candidate; if (elemSpec.getName().equals(creationSymbol)) { result = true; } if (creationSymbolClassName != null) { try { if (elemSpec.getRepresents() == Class.forName(creationSymbolClassName) && (elemSpec.getName().equals(creationSymbol))) { result = true; } else { result = false; } } catch (ClassNotFoundException e) { logError("Specified metamodel class not found: ", e); } } return result; } }); if (els != null) { tms.relateAcrossR209To(els); } } } } else if (symbolType.equalsIgnoreCase("shape")) { ShapeSpecification_c ss = new ShapeSpecification_c(graphicsModelRoot); ss.relateAcrossR200To(es); NoncontainingShapeSpecification_c ncss = new NoncontainingShapeSpecification_c(graphicsModelRoot); ncss.relateAcrossR208To(ss); } else if (symbolType.equalsIgnoreCase("container")) { ShapeSpecification_c ss = new ShapeSpecification_c(graphicsModelRoot); ss.relateAcrossR200To(es); ContainingShapeSpecification_c css = new ContainingShapeSpecification_c(graphicsModelRoot); css.relateAcrossR208To(ss); } } } } } } } // end for all extensions // Auto reconcile instance left until last to ensure that all // symbol specifications that might be referenced are created // Here to set the association between ARS and the ES // for (int i = 0; i < exts.length; i++) { IConfigurationElement[] elems = exts[i].getConfigurationElements(); for (int j = 0; j < elems.length; j++) { if (elems[j].getName().equals("editor")) { // $NON-NLS-1$ IConfigurationElement[] defs = elems[j].getChildren(); for (int k = 0; k < defs.length; k++) { if (defs[k].getName().equals("symbol")) { // setup autoReconcile IConfigurationElement[] autoReconcile = defs[k].getChildren("autoReconcile"); for (int e = 0; e < autoReconcile.length; ++e) { AutoReconciliationSpecification_c ars = new AutoReconciliationSpecification_c(graphicsModelRoot); ars.setName(autoReconcile[e].getAttribute("name")); ars.setCountmethod(autoReconcile[e].getAttribute("countMethod")); ars.setElementmethod(autoReconcile[e].getAttribute("elementMethod")); ars.setElementexistsmethod(autoReconcile[e].getAttribute("elementExistsMethod")); ars.setTemplateelementmethod( autoReconcile[e].getAttribute("templateElementMethod")); if (ars.getTemplateelementmethod() == null) { ars.setTemplateelementmethod(""); } ElementSpecification_c scanTarget = locateEsByNameAndClassType( graphicsModelRoot, defs[k].getAttribute("name"), defs[k].getAttribute("class")); ars.relateAcrossR29To(scanTarget); ElementSpecification_c targetSymbol = locateEsByNameAndClassType( graphicsModelRoot, autoReconcile[e].getAttribute("targetSymbol"), null); ars.relateAcrossR31To(targetSymbol); String ssSpec = autoReconcile[e].getAttribute("sourceSymbol"); if (ssSpec != null) { ars.relateAcrossR30To( locateEsByNameAndClassType(graphicsModelRoot, ssSpec, null)); } else { ars.relateAcrossR30To(targetSymbol); } } } else if (defs[k].getName().equals("defaultFor")) { // setup autoReconcile IConfigurationElement[] autoReconcile = defs[k].getChildren("autoReconcile"); for (int e = 0; e < autoReconcile.length; ++e) { AutoReconciliationSpecification_c ars = new AutoReconciliationSpecification_c(graphicsModelRoot); ars.setName(autoReconcile[e].getAttribute("name")); ars.setCountmethod(autoReconcile[e].getAttribute("countMethod")); ars.setElementmethod(autoReconcile[e].getAttribute("elementMethod")); ars.setElementexistsmethod(autoReconcile[e].getAttribute("elementExistsMethod")); ars.setTemplateelementmethod( autoReconcile[e].getAttribute("templateElementMethod")); if (ars.getTemplateelementmethod() == null) { ars.setTemplateelementmethod(""); } // ElementSpecification_c scanTarget = locateEsByNameAndClassType( // graphicsModelRoot, defs[k].getAttribute("name"), defs[k].getAttribute("class")); ModelSpecification_c modelSpec = locateMesByNameAndClassType( graphicsModelRoot, defs[k].getAttribute("name"), defs[k].getAttribute("class")); ars.relateAcrossR33To(modelSpec); ElementSpecification_c targetSymbol = locateEsByNameAndClassType( graphicsModelRoot, autoReconcile[e].getAttribute("targetSymbol"), autoReconcile[e].getAttribute("class")); ars.relateAcrossR31To(targetSymbol); String ssSpec = autoReconcile[e].getAttribute("sourceSymbol"); if (ssSpec != null) { ars.relateAcrossR30To( locateEsByNameAndClassType(graphicsModelRoot, ssSpec, null)); } else { ars.relateAcrossR30To(targetSymbol); } } } } } } } }