public void mergeFrom(
     ObjectLocator leftLocator,
     ObjectLocator rightLocator,
     Object left,
     Object right,
     MergeStrategy strategy) {
   super.mergeFrom(leftLocator, rightLocator, left, right, strategy);
   if (right instanceof AbstractCoordinateOperationType) {
     final AbstractCoordinateOperationType target = this;
     final AbstractCoordinateOperationType leftObject = ((AbstractCoordinateOperationType) left);
     final AbstractCoordinateOperationType rightObject = ((AbstractCoordinateOperationType) right);
     {
       DomainOfValidityElement lhsDomainOfValidity;
       lhsDomainOfValidity = leftObject.getDomainOfValidity();
       DomainOfValidityElement rhsDomainOfValidity;
       rhsDomainOfValidity = rightObject.getDomainOfValidity();
       target.setDomainOfValidity(
           ((DomainOfValidityElement)
               strategy.merge(
                   LocatorUtils.property(leftLocator, "domainOfValidity", lhsDomainOfValidity),
                   LocatorUtils.property(rightLocator, "domainOfValidity", rhsDomainOfValidity),
                   lhsDomainOfValidity,
                   rhsDomainOfValidity)));
     }
     {
       List<String> lhsScope;
       lhsScope = leftObject.getScope();
       List<String> rhsScope;
       rhsScope = rightObject.getScope();
       target.unsetScope();
       List<String> uniqueScopel = target.getScope();
       uniqueScopel.addAll(
           ((List<String>)
               strategy.merge(
                   LocatorUtils.property(leftLocator, "scope", lhsScope),
                   LocatorUtils.property(rightLocator, "scope", rhsScope),
                   lhsScope,
                   rhsScope)));
     }
     {
       String lhsOperationVersion;
       lhsOperationVersion = leftObject.getOperationVersion();
       String rhsOperationVersion;
       rhsOperationVersion = rightObject.getOperationVersion();
       target.setOperationVersion(
           ((String)
               strategy.merge(
                   LocatorUtils.property(leftLocator, "operationVersion", lhsOperationVersion),
                   LocatorUtils.property(rightLocator, "operationVersion", rhsOperationVersion),
                   lhsOperationVersion,
                   rhsOperationVersion)));
     }
     {
       List<CoordinateOperationAccuracyElement> lhsCoordinateOperationAccuracy;
       lhsCoordinateOperationAccuracy = leftObject.getCoordinateOperationAccuracy();
       List<CoordinateOperationAccuracyElement> rhsCoordinateOperationAccuracy;
       rhsCoordinateOperationAccuracy = rightObject.getCoordinateOperationAccuracy();
       target.unsetCoordinateOperationAccuracy();
       List<CoordinateOperationAccuracyElement> uniqueCoordinateOperationAccuracyl =
           target.getCoordinateOperationAccuracy();
       uniqueCoordinateOperationAccuracyl.addAll(
           ((List<CoordinateOperationAccuracyElement>)
               strategy.merge(
                   LocatorUtils.property(
                       leftLocator, "coordinateOperationAccuracy", lhsCoordinateOperationAccuracy),
                   LocatorUtils.property(
                       rightLocator,
                       "coordinateOperationAccuracy",
                       rhsCoordinateOperationAccuracy),
                   lhsCoordinateOperationAccuracy,
                   rhsCoordinateOperationAccuracy)));
     }
     {
       CRSPropertyType lhsSourceCRS;
       lhsSourceCRS = leftObject.getSourceCRS();
       CRSPropertyType rhsSourceCRS;
       rhsSourceCRS = rightObject.getSourceCRS();
       target.setSourceCRS(
           ((CRSPropertyType)
               strategy.merge(
                   LocatorUtils.property(leftLocator, "sourceCRS", lhsSourceCRS),
                   LocatorUtils.property(rightLocator, "sourceCRS", rhsSourceCRS),
                   lhsSourceCRS,
                   rhsSourceCRS)));
     }
     {
       CRSPropertyType lhsTargetCRS;
       lhsTargetCRS = leftObject.getTargetCRS();
       CRSPropertyType rhsTargetCRS;
       rhsTargetCRS = rightObject.getTargetCRS();
       target.setTargetCRS(
           ((CRSPropertyType)
               strategy.merge(
                   LocatorUtils.property(leftLocator, "targetCRS", lhsTargetCRS),
                   LocatorUtils.property(rightLocator, "targetCRS", rhsTargetCRS),
                   lhsTargetCRS,
                   rhsTargetCRS)));
     }
   }
 }
 public boolean equals(
     ObjectLocator thisLocator,
     ObjectLocator thatLocator,
     Object object,
     EqualsStrategy strategy) {
   if (!(object instanceof AbstractCoordinateOperationType)) {
     return false;
   }
   if (this == object) {
     return true;
   }
   if (!super.equals(thisLocator, thatLocator, object, strategy)) {
     return false;
   }
   final AbstractCoordinateOperationType that = ((AbstractCoordinateOperationType) object);
   {
     DomainOfValidityElement lhsDomainOfValidity;
     lhsDomainOfValidity = this.getDomainOfValidity();
     DomainOfValidityElement rhsDomainOfValidity;
     rhsDomainOfValidity = that.getDomainOfValidity();
     if (!strategy.equals(
         LocatorUtils.property(thisLocator, "domainOfValidity", lhsDomainOfValidity),
         LocatorUtils.property(thatLocator, "domainOfValidity", rhsDomainOfValidity),
         lhsDomainOfValidity,
         rhsDomainOfValidity)) {
       return false;
     }
   }
   {
     List<String> lhsScope;
     lhsScope = this.getScope();
     List<String> rhsScope;
     rhsScope = that.getScope();
     if (!strategy.equals(
         LocatorUtils.property(thisLocator, "scope", lhsScope),
         LocatorUtils.property(thatLocator, "scope", rhsScope),
         lhsScope,
         rhsScope)) {
       return false;
     }
   }
   {
     String lhsOperationVersion;
     lhsOperationVersion = this.getOperationVersion();
     String rhsOperationVersion;
     rhsOperationVersion = that.getOperationVersion();
     if (!strategy.equals(
         LocatorUtils.property(thisLocator, "operationVersion", lhsOperationVersion),
         LocatorUtils.property(thatLocator, "operationVersion", rhsOperationVersion),
         lhsOperationVersion,
         rhsOperationVersion)) {
       return false;
     }
   }
   {
     List<CoordinateOperationAccuracyElement> lhsCoordinateOperationAccuracy;
     lhsCoordinateOperationAccuracy = this.getCoordinateOperationAccuracy();
     List<CoordinateOperationAccuracyElement> rhsCoordinateOperationAccuracy;
     rhsCoordinateOperationAccuracy = that.getCoordinateOperationAccuracy();
     if (!strategy.equals(
         LocatorUtils.property(
             thisLocator, "coordinateOperationAccuracy", lhsCoordinateOperationAccuracy),
         LocatorUtils.property(
             thatLocator, "coordinateOperationAccuracy", rhsCoordinateOperationAccuracy),
         lhsCoordinateOperationAccuracy,
         rhsCoordinateOperationAccuracy)) {
       return false;
     }
   }
   {
     CRSPropertyType lhsSourceCRS;
     lhsSourceCRS = this.getSourceCRS();
     CRSPropertyType rhsSourceCRS;
     rhsSourceCRS = that.getSourceCRS();
     if (!strategy.equals(
         LocatorUtils.property(thisLocator, "sourceCRS", lhsSourceCRS),
         LocatorUtils.property(thatLocator, "sourceCRS", rhsSourceCRS),
         lhsSourceCRS,
         rhsSourceCRS)) {
       return false;
     }
   }
   {
     CRSPropertyType lhsTargetCRS;
     lhsTargetCRS = this.getTargetCRS();
     CRSPropertyType rhsTargetCRS;
     rhsTargetCRS = that.getTargetCRS();
     if (!strategy.equals(
         LocatorUtils.property(thisLocator, "targetCRS", lhsTargetCRS),
         LocatorUtils.property(thatLocator, "targetCRS", rhsTargetCRS),
         lhsTargetCRS,
         rhsTargetCRS)) {
       return false;
     }
   }
   return true;
 }