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 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)));
     }
   }
 }
 public TopoCurvePropertyType withTopoCurve(TopoCurveType value) {
   setTopoCurve(value);
   return this;
 }