public boolean equals(
     ObjectLocator thisLocator,
     ObjectLocator thatLocator,
     Object object,
     EqualsStrategy strategy) {
   if (!(object instanceof RectangleType)) {
     return false;
   }
   if (this == object) {
     return true;
   }
   if (!super.equals(thisLocator, thatLocator, object, strategy)) {
     return false;
   }
   final RectangleType that = ((RectangleType) object);
   {
     AbstractRingPropertyType lhsExterior;
     lhsExterior = this.getExterior();
     AbstractRingPropertyType rhsExterior;
     rhsExterior = that.getExterior();
     if (!strategy.equals(
         LocatorUtils.property(thisLocator, "exterior", lhsExterior),
         LocatorUtils.property(thatLocator, "exterior", rhsExterior),
         lhsExterior,
         rhsExterior)) {
       return false;
     }
   }
   return true;
 }
 public Object copyTo(ObjectLocator locator, Object target, CopyStrategy strategy) {
   final Object draftCopy = ((target == null) ? createNewInstance() : target);
   super.copyTo(locator, draftCopy, strategy);
   if (draftCopy instanceof RectangleType) {
     final RectangleType copy = ((RectangleType) draftCopy);
     if (this.isSetExterior()) {
       AbstractRingPropertyType sourceExterior;
       sourceExterior = this.getExterior();
       AbstractRingPropertyType copyExterior =
           ((AbstractRingPropertyType)
               strategy.copy(
                   LocatorUtils.property(locator, "exterior", sourceExterior), sourceExterior));
       copy.setExterior(copyExterior);
     } else {
       copy.exterior = null;
     }
   }
   return draftCopy;
 }
 public void mergeFrom(
     ObjectLocator leftLocator,
     ObjectLocator rightLocator,
     Object left,
     Object right,
     MergeStrategy strategy) {
   super.mergeFrom(leftLocator, rightLocator, left, right, strategy);
   if (right instanceof RectangleType) {
     final RectangleType target = this;
     final RectangleType leftObject = ((RectangleType) left);
     final RectangleType rightObject = ((RectangleType) right);
     {
       AbstractRingPropertyType lhsExterior;
       lhsExterior = leftObject.getExterior();
       AbstractRingPropertyType rhsExterior;
       rhsExterior = rightObject.getExterior();
       target.setExterior(
           ((AbstractRingPropertyType)
               strategy.merge(
                   LocatorUtils.property(leftLocator, "exterior", lhsExterior),
                   LocatorUtils.property(rightLocator, "exterior", rhsExterior),
                   lhsExterior,
                   rhsExterior)));
     }
   }
 }