@Override
  public boolean equals(Object obj) {
    if (this == obj) return true;
    if (!super.equals(obj)) return false;
    if (getClass() != obj.getClass()) return false;
    RPBookmark other = (RPBookmark) obj;
    if (_bookmarkTime == null) {
      if (other._bookmarkTime != null) return false;
    } else if (!(_bookmarkTime.getTimeInMicroSeconds()
        == other._bookmarkTime.getTimeInMicroSeconds())) return false;
    if (_bookmarkName == null) {
      if (other._bookmarkName != null) return false;
    } else if (!_bookmarkName.equals(other._bookmarkName)) return false;

    boolean cgGroupCopyEqual = false;
    if ((_cgGroupCopyUID.getGlobalCopyUID().getCopyUID()
            == other._cgGroupCopyUID.getGlobalCopyUID().getCopyUID())
        && (_cgGroupCopyUID.getGroupUID().getId() == other._cgGroupCopyUID.getGroupUID().getId())
        && (_cgGroupCopyUID.getGlobalCopyUID().getClusterUID().getId()
            == other._cgGroupCopyUID.getGlobalCopyUID().getClusterUID().getId())) {
      cgGroupCopyEqual = true;
    }
    if (!cgGroupCopyEqual) return false;

    return true;
  }
 @Override
 public int hashCode() {
   final int prime = 31;
   int result = super.hashCode();
   result = prime * result + ((_bookmarkTime == null) ? 0 : _bookmarkTime.hashCode());
   result = prime * result + ((_cgGroupCopyUID == null) ? 0 : _cgGroupCopyUID.hashCode());
   result = prime * result + ((_bookmarkName == null) ? 0 : _bookmarkName.hashCode());
   result = prime * result + ((_productionCopyUID == null) ? 0 : _productionCopyUID.hashCode());
   return result;
 }
 @Override
 public String toString() {
   return _bookmarkName
       + ":"
       + _cgGroupCopyUID.getGlobalCopyUID().getCopyUID()
       + ":"
       + _bookmarkTime.getTimeInMicroSeconds();
 }