/* (non-Javadoc)
  * @see java.lang.Object#equals(java.lang.Object)
  */
 @Override
 public boolean equals(Object obj) {
   if (this == obj) {
     return true;
   }
   if (obj == null) {
     return false;
   }
   if (getClass() != obj.getClass()) {
     return false;
   }
   SpellNodeImpl other = (SpellNodeImpl) obj;
   if (!getOuterType().equals(other.getOuterType())) {
     return false;
   }
   if (level == null) {
     if (other.level != null) {
       return false;
     }
   } else if (!level.equals(other.level)) {
     return false;
   }
   if (spell == null) {
     if (other.spell != null) {
       return false;
     }
   } else if (!spell.equals(other.spell)) {
     return false;
   }
   if (cls == null) {
     if (other.cls != null) {
       return false;
     }
   } else if (!cls.equals(other.cls)) {
     return false;
   }
   if (rootNode == null) {
     if (other.rootNode != null) {
       return false;
     }
   } else if (!rootNode.equals(other.rootNode)) {
     return false;
   }
   return true;
 }