public Object copyTo(ObjectLocator locator, Object target, CopyStrategy strategy) {
   final Object draftCopy = ((target == null) ? createNewInstance() : target);
   if (draftCopy instanceof TopoCurvePropertyType) {
     final TopoCurvePropertyType copy = ((TopoCurvePropertyType) draftCopy);
     if (this.isSetTopoCurve()) {
       TopoCurveType sourceTopoCurve;
       sourceTopoCurve = this.getTopoCurve();
       TopoCurveType copyTopoCurve =
           ((TopoCurveType)
               strategy.copy(
                   LocatorUtils.property(locator, "topoCurve", sourceTopoCurve), sourceTopoCurve));
       copy.setTopoCurve(copyTopoCurve);
     } else {
       copy.topoCurve = null;
     }
     if (this.isSetOwns()) {
       boolean sourceOwns;
       sourceOwns = this.isOwns();
       boolean copyOwns =
           strategy.copy(LocatorUtils.property(locator, "owns", sourceOwns), sourceOwns);
       copy.setOwns(copyOwns);
     } else {
       copy.unsetOwns();
     }
   }
   return draftCopy;
 }
 public boolean equals(
     ObjectLocator thisLocator,
     ObjectLocator thatLocator,
     Object object,
     EqualsStrategy strategy) {
   if (!(object instanceof TopoCurvePropertyType)) {
     return false;
   }
   if (this == object) {
     return true;
   }
   final TopoCurvePropertyType that = ((TopoCurvePropertyType) object);
   {
     TopoCurveType lhsTopoCurve;
     lhsTopoCurve = this.getTopoCurve();
     TopoCurveType rhsTopoCurve;
     rhsTopoCurve = that.getTopoCurve();
     if (!strategy.equals(
         LocatorUtils.property(thisLocator, "topoCurve", lhsTopoCurve),
         LocatorUtils.property(thatLocator, "topoCurve", rhsTopoCurve),
         lhsTopoCurve,
         rhsTopoCurve)) {
       return false;
     }
   }
   {
     boolean lhsOwns;
     lhsOwns = this.isOwns();
     boolean rhsOwns;
     rhsOwns = that.isOwns();
     if (!strategy.equals(
         LocatorUtils.property(thisLocator, "owns", lhsOwns),
         LocatorUtils.property(thatLocator, "owns", rhsOwns),
         lhsOwns,
         rhsOwns)) {
       return false;
     }
   }
   return true;
 }
 public void mergeFrom(
     ObjectLocator leftLocator,
     ObjectLocator rightLocator,
     Object left,
     Object right,
     MergeStrategy strategy) {
   if (right instanceof TopoCurvePropertyType) {
     final TopoCurvePropertyType target = this;
     final TopoCurvePropertyType leftObject = ((TopoCurvePropertyType) left);
     final TopoCurvePropertyType rightObject = ((TopoCurvePropertyType) right);
     {
       TopoCurveType lhsTopoCurve;
       lhsTopoCurve = leftObject.getTopoCurve();
       TopoCurveType rhsTopoCurve;
       rhsTopoCurve = rightObject.getTopoCurve();
       target.setTopoCurve(
           ((TopoCurveType)
               strategy.merge(
                   LocatorUtils.property(leftLocator, "topoCurve", lhsTopoCurve),
                   LocatorUtils.property(rightLocator, "topoCurve", rhsTopoCurve),
                   lhsTopoCurve,
                   rhsTopoCurve)));
     }
     {
       boolean lhsOwns;
       lhsOwns = leftObject.isOwns();
       boolean rhsOwns;
       rhsOwns = rightObject.isOwns();
       target.setOwns(
           ((boolean)
               strategy.merge(
                   LocatorUtils.property(leftLocator, "owns", lhsOwns),
                   LocatorUtils.property(rightLocator, "owns", rhsOwns),
                   lhsOwns,
                   rhsOwns)));
     }
   }
 }