public Rule getRuleByQualifiedName(final String rname) {
   if (this.getName().equals(rname)) return this;
   else if (this.kernelRule.getName().equals(rname)
       || rname.equals(this.itsName + "." + this.kernelRule.getName())) return this.kernelRule;
   else {
     for (int i = 0; i < this.multiRules.size(); i++) {
       final MultiRule multiRule = (MultiRule) this.multiRules.get(i);
       if (multiRule.getName().equals(rname)
           || rname.equals(this.itsName + "." + multiRule.getName())) return multiRule;
     }
   }
   return null;
 }
 /**
  * Checks the left, right and rule morphism embedding of the kernel rule.
  *
  * @return true if embedding holds, otherwise false
  */
 public boolean isAmalgamable() {
   this.errorMsg = null;
   for (int i = 0; i < this.multiRules.size(); i++) {
     final MultiRule multiRule = (MultiRule) this.multiRules.get(i);
     if (!multiRule.isLeftEmbeddingValid()
         || !multiRule.isRightEmbeddingValid()
         || !multiRule.isMorphismEmbeddingValid()) {
       this.errorMsg = multiRule.getName();
       return false;
     }
   }
   return true;
 }