@Override
 public boolean equals(Object obj) {
   if (this == obj) {
     return true;
   }
   if (!super.equals(obj)) {
     return false;
   }
   if (!(obj instanceof TextFlowTarget)) {
     return false;
   }
   TextFlowTarget other = (TextFlowTarget) obj;
   if (description == null) {
     if (other.description != null) {
       return false;
     }
   } else if (!description.equals(other.description)) {
     return false;
   }
   if (extensions == null) {
     if (other.extensions != null) {
       return false;
     }
   } else if (!extensions.equals(other.extensions)) {
     return false;
   }
   if (resId == null) {
     if (other.resId != null) {
       return false;
     }
   } else if (!resId.equals(other.resId)) {
     return false;
   }
   if (state != other.state) {
     return false;
   }
   if (translator == null) {
     if (other.translator != null) {
       return false;
     }
   } else if (!translator.equals(other.translator)) {
     return false;
   }
   if (revision == null) {
     if (other.revision != null) {
       return false;
     }
   } else if (!revision.equals(other.revision)) {
     return false;
   }
   if (textFlowRevision == null) {
     if (other.textFlowRevision != null) {
       return false;
     }
   } else if (!textFlowRevision.equals(other.textFlowRevision)) {
     return false;
   }
   return true;
 }
 @Override
 public int hashCode() {
   final int prime = 31;
   int result = super.hashCode();
   result = prime * result + ((description == null) ? 0 : description.hashCode());
   result = prime * result + ((extensions == null) ? 0 : extensions.hashCode());
   result = prime * result + ((resId == null) ? 0 : resId.hashCode());
   result = prime * result + ((state == null) ? 0 : state.hashCode());
   result = prime * result + ((translator == null) ? 0 : translator.hashCode());
   result = prime * result + ((revision == null) ? 0 : revision.hashCode());
   result = prime * result + ((textFlowRevision == null) ? 0 : textFlowRevision.hashCode());
   return result;
 }