public void mergeFrom(
     ObjectLocator leftLocator,
     ObjectLocator rightLocator,
     Object left,
     Object right,
     MergeStrategy strategy) {
   if (right instanceof TimeCalendarEraPropertyType) {
     final TimeCalendarEraPropertyType target = this;
     final TimeCalendarEraPropertyType leftObject = ((TimeCalendarEraPropertyType) left);
     final TimeCalendarEraPropertyType rightObject = ((TimeCalendarEraPropertyType) right);
     {
       TimeCalendarEraType lhsTimeCalendarEra;
       lhsTimeCalendarEra = leftObject.getTimeCalendarEra();
       TimeCalendarEraType rhsTimeCalendarEra;
       rhsTimeCalendarEra = rightObject.getTimeCalendarEra();
       target.setTimeCalendarEra(
           ((TimeCalendarEraType)
               strategy.merge(
                   LocatorUtils.property(leftLocator, "timeCalendarEra", lhsTimeCalendarEra),
                   LocatorUtils.property(rightLocator, "timeCalendarEra", rhsTimeCalendarEra),
                   lhsTimeCalendarEra,
                   rhsTimeCalendarEra)));
     }
     {
       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)));
     }
     {
       List<String> lhsNilReason;
       lhsNilReason = leftObject.getNilReason();
       List<String> rhsNilReason;
       rhsNilReason = rightObject.getNilReason();
       target.unsetNilReason();
       List<String> uniqueNilReasonl = target.getNilReason();
       uniqueNilReasonl.addAll(
           ((List<String>)
               strategy.merge(
                   LocatorUtils.property(leftLocator, "nilReason", lhsNilReason),
                   LocatorUtils.property(rightLocator, "nilReason", rhsNilReason),
                   lhsNilReason,
                   rhsNilReason)));
     }
     {
       String lhsRemoteSchema;
       lhsRemoteSchema = leftObject.getRemoteSchema();
       String rhsRemoteSchema;
       rhsRemoteSchema = rightObject.getRemoteSchema();
       target.setRemoteSchema(
           ((String)
               strategy.merge(
                   LocatorUtils.property(leftLocator, "remoteSchema", lhsRemoteSchema),
                   LocatorUtils.property(rightLocator, "remoteSchema", rhsRemoteSchema),
                   lhsRemoteSchema,
                   rhsRemoteSchema)));
     }
     {
       String lhsHref;
       lhsHref = leftObject.getHref();
       String rhsHref;
       rhsHref = rightObject.getHref();
       target.setHref(
           ((String)
               strategy.merge(
                   LocatorUtils.property(leftLocator, "href", lhsHref),
                   LocatorUtils.property(rightLocator, "href", rhsHref),
                   lhsHref,
                   rhsHref)));
     }
     {
       String lhsRole;
       lhsRole = leftObject.getRole();
       String rhsRole;
       rhsRole = rightObject.getRole();
       target.setRole(
           ((String)
               strategy.merge(
                   LocatorUtils.property(leftLocator, "role", lhsRole),
                   LocatorUtils.property(rightLocator, "role", rhsRole),
                   lhsRole,
                   rhsRole)));
     }
     {
       String lhsArcrole;
       lhsArcrole = leftObject.getArcrole();
       String rhsArcrole;
       rhsArcrole = rightObject.getArcrole();
       target.setArcrole(
           ((String)
               strategy.merge(
                   LocatorUtils.property(leftLocator, "arcrole", lhsArcrole),
                   LocatorUtils.property(rightLocator, "arcrole", rhsArcrole),
                   lhsArcrole,
                   rhsArcrole)));
     }
     {
       String lhsTitle;
       lhsTitle = leftObject.getTitle();
       String rhsTitle;
       rhsTitle = rightObject.getTitle();
       target.setTitle(
           ((String)
               strategy.merge(
                   LocatorUtils.property(leftLocator, "title", lhsTitle),
                   LocatorUtils.property(rightLocator, "title", rhsTitle),
                   lhsTitle,
                   rhsTitle)));
     }
     {
       String lhsShow;
       lhsShow = leftObject.getShow();
       String rhsShow;
       rhsShow = rightObject.getShow();
       target.setShow(
           ((String)
               strategy.merge(
                   LocatorUtils.property(leftLocator, "show", lhsShow),
                   LocatorUtils.property(rightLocator, "show", rhsShow),
                   lhsShow,
                   rhsShow)));
     }
     {
       String lhsActuate;
       lhsActuate = leftObject.getActuate();
       String rhsActuate;
       rhsActuate = rightObject.getActuate();
       target.setActuate(
           ((String)
               strategy.merge(
                   LocatorUtils.property(leftLocator, "actuate", lhsActuate),
                   LocatorUtils.property(rightLocator, "actuate", rhsActuate),
                   lhsActuate,
                   rhsActuate)));
     }
   }
 }
 public TimeCalendarEraPropertyType withRole(String value) {
   setRole(value);
   return this;
 }
 public Object copyTo(ObjectLocator locator, Object target, CopyStrategy strategy) {
   final Object draftCopy = ((target == null) ? createNewInstance() : target);
   if (draftCopy instanceof TimeCalendarEraPropertyType) {
     final TimeCalendarEraPropertyType copy = ((TimeCalendarEraPropertyType) draftCopy);
     if (this.isSetTimeCalendarEra()) {
       TimeCalendarEraType sourceTimeCalendarEra;
       sourceTimeCalendarEra = this.getTimeCalendarEra();
       TimeCalendarEraType copyTimeCalendarEra =
           ((TimeCalendarEraType)
               strategy.copy(
                   LocatorUtils.property(locator, "timeCalendarEra", sourceTimeCalendarEra),
                   sourceTimeCalendarEra));
       copy.setTimeCalendarEra(copyTimeCalendarEra);
     } else {
       copy.timeCalendarEra = 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();
     }
     if (this.isSetNilReason()) {
       List<String> sourceNilReason;
       sourceNilReason = this.getNilReason();
       @SuppressWarnings("unchecked")
       List<String> copyNilReason =
           ((List<String>)
               strategy.copy(
                   LocatorUtils.property(locator, "nilReason", sourceNilReason), sourceNilReason));
       copy.unsetNilReason();
       List<String> uniqueNilReasonl = copy.getNilReason();
       uniqueNilReasonl.addAll(copyNilReason);
     } else {
       copy.unsetNilReason();
     }
     if (this.isSetRemoteSchema()) {
       String sourceRemoteSchema;
       sourceRemoteSchema = this.getRemoteSchema();
       String copyRemoteSchema =
           ((String)
               strategy.copy(
                   LocatorUtils.property(locator, "remoteSchema", sourceRemoteSchema),
                   sourceRemoteSchema));
       copy.setRemoteSchema(copyRemoteSchema);
     } else {
       copy.remoteSchema = null;
     }
     if (this.isSetHref()) {
       String sourceHref;
       sourceHref = this.getHref();
       String copyHref =
           ((String)
               strategy.copy(LocatorUtils.property(locator, "href", sourceHref), sourceHref));
       copy.setHref(copyHref);
     } else {
       copy.href = null;
     }
     if (this.isSetRole()) {
       String sourceRole;
       sourceRole = this.getRole();
       String copyRole =
           ((String)
               strategy.copy(LocatorUtils.property(locator, "role", sourceRole), sourceRole));
       copy.setRole(copyRole);
     } else {
       copy.role = null;
     }
     if (this.isSetArcrole()) {
       String sourceArcrole;
       sourceArcrole = this.getArcrole();
       String copyArcrole =
           ((String)
               strategy.copy(
                   LocatorUtils.property(locator, "arcrole", sourceArcrole), sourceArcrole));
       copy.setArcrole(copyArcrole);
     } else {
       copy.arcrole = null;
     }
     if (this.isSetTitle()) {
       String sourceTitle;
       sourceTitle = this.getTitle();
       String copyTitle =
           ((String)
               strategy.copy(LocatorUtils.property(locator, "title", sourceTitle), sourceTitle));
       copy.setTitle(copyTitle);
     } else {
       copy.title = null;
     }
     if (this.isSetShow()) {
       String sourceShow;
       sourceShow = this.getShow();
       String copyShow =
           ((String)
               strategy.copy(LocatorUtils.property(locator, "show", sourceShow), sourceShow));
       copy.setShow(copyShow);
     } else {
       copy.show = null;
     }
     if (this.isSetActuate()) {
       String sourceActuate;
       sourceActuate = this.getActuate();
       String copyActuate =
           ((String)
               strategy.copy(
                   LocatorUtils.property(locator, "actuate", sourceActuate), sourceActuate));
       copy.setActuate(copyActuate);
     } else {
       copy.actuate = null;
     }
   }
   return draftCopy;
 }