@Override
 public int hashCode() {
   final int prime = 31;
   int result = super.hashCode();
   result = prime * result + ((contentMetadata == null) ? 0 : contentMetadata.hashCode());
   result = prime * result + ((systemMetadata == null) ? 0 : systemMetadata.hashCode());
   result = prime * result + ((userMetadata == null) ? 0 : userMetadata.hashCode());
   return result;
 }
 @Override
 public boolean equals(Object obj) {
   if (this == obj) return true;
   if (!super.equals(obj)) return false;
   if (getClass() != obj.getClass()) return false;
   AtmosObjectImpl other = (AtmosObjectImpl) obj;
   if (contentMetadata == null) {
     if (other.contentMetadata != null) return false;
   } else if (!contentMetadata.equals(other.contentMetadata)) return false;
   if (systemMetadata == null) {
     if (other.systemMetadata != null) return false;
   } else if (!systemMetadata.equals(other.systemMetadata)) return false;
   if (userMetadata == null) {
     if (other.userMetadata != null) return false;
   } else if (!userMetadata.equals(other.userMetadata)) return false;
   return true;
 }