/** Create new multi rule with embedding of the kernel rule. */ public MultiRule createMultiRule(final String ruleName) { OrdinaryMorphism embL = this.kernelRule.getLeft().plainCopy(); if (embL == null) { embL = new OrdinaryMorphism( this.kernelRule.getLeft(), BaseFactory.theFactory().createGraph(this.kernelRule.getLeft().getTypeSet(), false), agg.attribute.impl.AttrTupleManager.getDefaultManager() .newContext(AttrMapping.PLAIN_MAP)); } OrdinaryMorphism embR = this.kernelRule.getRight().plainCopy(); if (embR == null) { embR = new OrdinaryMorphism( this.kernelRule.getRight(), BaseFactory.theFactory().createGraph(this.kernelRule.getRight().getTypeSet(), false), agg.attribute.impl.AttrTupleManager.getDefaultManager() .newContext(AttrMapping.PLAIN_MAP)); } MultiRule multiRule = new MultiRule(this.kernelRule, embL, embR); // add only variables of LHS and RHS if (this.kernelRule.hasNACs() || this.kernelRule.hasPACs()) { final Vector<String> list = this.kernelRule.getLeft().getVariableNamesOfAttributes(); list.addAll(this.kernelRule.getRight().getVariableNamesOfAttributes()); multiRule.addToAttrContextAccordingList( (VarTuple) this.kernelRule.getAttrContext().getVariables(), list); } else { multiRule.addToAttrContext((VarTuple) this.kernelRule.getAttrContext().getVariables()); } multiRule.setRuleScheme(this); multiRule.setName(ruleName); multiRule.getLeft().setKind(GraphKind.LHS); multiRule.getRight().setKind(GraphKind.RHS); this.multiRules.add(multiRule); this.kernelRule.getLeft().addObserver(multiRule); this.kernelRule.getRight().addObserver(multiRule); this.kernelRule.addObserver(multiRule); this.kernelRule.setChanged(false); return multiRule; }
/* Create an empty multi rule. */ protected MultiRule createEmptyMultiRule() { MultiRule multiRule = new MultiRule(this.kernelRule.getTypeSet()); multiRule.setEmbeddingLeft( new OrdinaryMorphism( this.kernelRule.getLeft(), multiRule.getLeft(), agg.attribute.impl.AttrTupleManager.getDefaultManager() .newContext(AttrMapping.PLAIN_MAP))); multiRule.setEmbeddingRight( new OrdinaryMorphism( this.kernelRule.getRight(), multiRule.getRight(), agg.attribute.impl.AttrTupleManager.getDefaultManager() .newContext(AttrMapping.PLAIN_MAP))); multiRule.setRuleScheme(this); this.multiRules.add(multiRule); return multiRule; }
/** * Load the rule scheme. * * @param h AGG XML helper */ public void XreadObject(XMLHelper h) { if (h.isTag("RuleScheme", this)) { Object attr_str = ""; // setSchemeName(h.readAttr("name")); attr_str = h.readAttr("atLeastOneMultiMatch"); if (!"".equals(attr_str)) { this.atLeastOneMultiMatch = Boolean.valueOf((String) attr_str).booleanValue(); } attr_str = h.readAttr("checkConflict"); if (!"".equals(attr_str)) { this.checkDeleteUseConflict = Boolean.valueOf((String) attr_str).booleanValue(); } attr_str = h.readAttr("disjointMultis"); if (!"".equals(attr_str)) { this.disjointMultis = Boolean.valueOf((String) attr_str).booleanValue(); } attr_str = h.readAttr("enabled"); if (!"".equals(attr_str)) { this.enabled = Boolean.valueOf((String) attr_str).booleanValue(); } attr_str = h.readAttr("index"); if (!"".equals(attr_str)) { this.itsIndex = Integer.valueOf((String) attr_str).intValue(); } attr_str = h.readAttr("name"); if (!"".equals(attr_str)) { setSchemeName((String) attr_str); } attr_str = h.readAttr("parallelKernel"); if (!"".equals(attr_str)) { this.parallelKernel = Boolean.valueOf((String) attr_str).booleanValue(); } if (h.readSubTag("Kernel")) { h.getObject("", this.kernelRule, true); h.close(); this.kernelRule.getLeft().setKind(GraphKind.LHS); this.kernelRule.getRight().setKind(GraphKind.RHS); this.kernelRule.setRuleScheme(this); } while (h.readSubTag("Multi")) { MultiRule mr = createEmptyMultiRule(); h.getObject("", mr, true); if (h.readSubTag("EmbeddingLeft")) { mr.getEmbeddingLeft().readMorphism(h); h.close(); } if (h.readSubTag("EmbeddingRight")) { mr.getEmbeddingRight().readMorphism(h); h.close(); } h.close(); mr.getLeft().setKind(GraphKind.LHS); mr.getRight().setKind(GraphKind.RHS); mr.setRuleScheme(this); mr.applyEmbeddedRuleMapping(this.kernelRule); mapKernel2MultiObject(mr); this.kernelRule.getLeft().addObserver(mr); this.kernelRule.getRight().addObserver(mr); } this.kernelRule.setChanged(false); // if (h.readSubTag("Amalgamated")) { // this.amalgamRule = new AmalgamatedRule(this.getTypeSet()); // h.getObject("", amalgamRule, true); // h.close(); // this.amalgamRule.setRuleScheme(this); // // if (h.readSubTag("MatchOf")) { // Object obj = h.getObject("Rule", null, false); // if (obj instanceof Rule) { // Rule r = (Rule) obj; // Match m = createMatch(r); // h.getObject("Match", m, true); // if (m.getSize() > 0) // m.setPartialMorphismCompletion(true); // } // h.close(); // } // } // read layer if (h.readSubTag("TaggedValue")) { int v = 0; String t = h.readAttr("Tag"); // read new attribute int v2 = h.readIAttr("TagValue"); if (v2 > 0) v = v2; if (t.equals("layer")) this.layer = v; h.close(); } // read priority if (h.readSubTag("TaggedValue")) { int v = 0; String t = h.readAttr("Tag"); // read new attribute int v2 = h.readIAttr("TagValue"); if (v2 > 0) v = v2; if (t.equals("priority")) this.priority = v; h.close(); } h.close(); } }