public Object copyTo(ObjectLocator locator, Object target, CopyStrategy strategy) {
   if (null == target) {
     throw new IllegalArgumentException(
         "Target argument must not be null for abstract copyable classes.");
   }
   super.copyTo(locator, target, strategy);
   if (target instanceof AbstractTimePrimitiveType) {
     final AbstractTimePrimitiveType copy = ((AbstractTimePrimitiveType) target);
     if (this.isSetRelatedTime()) {
       List<RelatedTimeType> sourceRelatedTime;
       sourceRelatedTime = this.getRelatedTime();
       @SuppressWarnings("unchecked")
       List<RelatedTimeType> copyRelatedTime =
           ((List<RelatedTimeType>)
               strategy.copy(
                   LocatorUtils.property(locator, "relatedTime", sourceRelatedTime),
                   sourceRelatedTime));
       copy.unsetRelatedTime();
       List<RelatedTimeType> uniqueRelatedTimel = copy.getRelatedTime();
       uniqueRelatedTimel.addAll(copyRelatedTime);
     } else {
       copy.unsetRelatedTime();
     }
   }
   return target;
 }
 public boolean equals(
     ObjectLocator thisLocator,
     ObjectLocator thatLocator,
     Object object,
     EqualsStrategy strategy) {
   if (!(object instanceof AbstractTimePrimitiveType)) {
     return false;
   }
   if (this == object) {
     return true;
   }
   if (!super.equals(thisLocator, thatLocator, object, strategy)) {
     return false;
   }
   final AbstractTimePrimitiveType that = ((AbstractTimePrimitiveType) object);
   {
     List<RelatedTimeType> lhsRelatedTime;
     lhsRelatedTime = this.getRelatedTime();
     List<RelatedTimeType> rhsRelatedTime;
     rhsRelatedTime = that.getRelatedTime();
     if (!strategy.equals(
         LocatorUtils.property(thisLocator, "relatedTime", lhsRelatedTime),
         LocatorUtils.property(thatLocator, "relatedTime", rhsRelatedTime),
         lhsRelatedTime,
         rhsRelatedTime)) {
       return false;
     }
   }
   return true;
 }
 public void mergeFrom(
     ObjectLocator leftLocator,
     ObjectLocator rightLocator,
     Object left,
     Object right,
     MergeStrategy strategy) {
   super.mergeFrom(leftLocator, rightLocator, left, right, strategy);
   if (right instanceof AbstractTimePrimitiveType) {
     final AbstractTimePrimitiveType target = this;
     final AbstractTimePrimitiveType leftObject = ((AbstractTimePrimitiveType) left);
     final AbstractTimePrimitiveType rightObject = ((AbstractTimePrimitiveType) right);
     {
       List<RelatedTimeType> lhsRelatedTime;
       lhsRelatedTime = leftObject.getRelatedTime();
       List<RelatedTimeType> rhsRelatedTime;
       rhsRelatedTime = rightObject.getRelatedTime();
       target.unsetRelatedTime();
       List<RelatedTimeType> uniqueRelatedTimel = target.getRelatedTime();
       uniqueRelatedTimel.addAll(
           ((List<RelatedTimeType>)
               strategy.merge(
                   LocatorUtils.property(leftLocator, "relatedTime", lhsRelatedTime),
                   LocatorUtils.property(rightLocator, "relatedTime", rhsRelatedTime),
                   lhsRelatedTime,
                   rhsRelatedTime)));
     }
   }
 }