public Object copyTo(ObjectLocator locator, Object target, CopyStrategy strategy) {
   final Object draftCopy = ((target == null) ? createNewInstance() : target);
   super.copyTo(locator, draftCopy, strategy);
   if (draftCopy instanceof EdgeType) {
     final EdgeType copy = ((EdgeType) draftCopy);
     if (this.isSetDirectedNode()) {
       List<DirectedNodePropertyType> sourceDirectedNode;
       sourceDirectedNode = this.getDirectedNode();
       @SuppressWarnings("unchecked")
       List<DirectedNodePropertyType> copyDirectedNode =
           ((List<DirectedNodePropertyType>)
               strategy.copy(
                   LocatorUtils.property(locator, "directedNode", sourceDirectedNode),
                   sourceDirectedNode));
       copy.unsetDirectedNode();
       List<DirectedNodePropertyType> uniqueDirectedNodel = copy.getDirectedNode();
       uniqueDirectedNodel.addAll(copyDirectedNode);
     } else {
       copy.unsetDirectedNode();
     }
     if (this.isSetDirectedFace()) {
       List<DirectedFacePropertyType> sourceDirectedFace;
       sourceDirectedFace = this.getDirectedFace();
       @SuppressWarnings("unchecked")
       List<DirectedFacePropertyType> copyDirectedFace =
           ((List<DirectedFacePropertyType>)
               strategy.copy(
                   LocatorUtils.property(locator, "directedFace", sourceDirectedFace),
                   sourceDirectedFace));
       copy.unsetDirectedFace();
       List<DirectedFacePropertyType> uniqueDirectedFacel = copy.getDirectedFace();
       uniqueDirectedFacel.addAll(copyDirectedFace);
     } else {
       copy.unsetDirectedFace();
     }
     if (this.isSetCurveProperty()) {
       CurvePropertyType sourceCurveProperty;
       sourceCurveProperty = this.getCurveProperty();
       CurvePropertyType copyCurveProperty =
           ((CurvePropertyType)
               strategy.copy(
                   LocatorUtils.property(locator, "curveProperty", sourceCurveProperty),
                   sourceCurveProperty));
       copy.setCurveProperty(copyCurveProperty);
     } else {
       copy.curveProperty = null;
     }
     if (this.isSetAggregationType()) {
       AggregationType sourceAggregationType;
       sourceAggregationType = this.getAggregationType();
       AggregationType copyAggregationType =
           ((AggregationType)
               strategy.copy(
                   LocatorUtils.property(locator, "aggregationType", sourceAggregationType),
                   sourceAggregationType));
       copy.setAggregationType(copyAggregationType);
     } else {
       copy.aggregationType = null;
     }
   }
   return draftCopy;
 }