public Object copyTo(ObjectLocator locator, Object target, CopyStrategy strategy) {
   final Object draftCopy = ((target == null) ? createNewInstance() : target);
   super.copyTo(locator, draftCopy, strategy);
   if (draftCopy instanceof MqttConnectionDetails) {
     final MqttConnectionDetails copy = ((MqttConnectionDetails) draftCopy);
     if ((this.serverURI != null) && (!this.serverURI.isEmpty())) {
       List<String> sourceServerURI;
       sourceServerURI =
           (((this.serverURI != null) && (!this.serverURI.isEmpty()))
               ? this.getServerURI()
               : null);
       @SuppressWarnings("unchecked")
       List<String> copyServerURI =
           ((List<String>)
               strategy.copy(
                   LocatorUtils.property(locator, "serverURI", sourceServerURI), sourceServerURI));
       copy.serverURI = null;
       if (copyServerURI != null) {
         List<String> uniqueServerURIl = copy.getServerURI();
         uniqueServerURIl.addAll(copyServerURI);
       }
     } else {
       copy.serverURI = null;
     }
     if (this.webSocket != null) {
       Boolean sourceWebSocket;
       sourceWebSocket = this.isWebSocket();
       Boolean copyWebSocket =
           ((Boolean)
               strategy.copy(
                   LocatorUtils.property(locator, "webSocket", sourceWebSocket), sourceWebSocket));
       copy.setWebSocket(copyWebSocket);
     } else {
       copy.webSocket = null;
     }
     if (this.clientID != null) {
       String sourceClientID;
       sourceClientID = this.getClientID();
       String copyClientID =
           ((String)
               strategy.copy(
                   LocatorUtils.property(locator, "clientID", sourceClientID), sourceClientID));
       copy.setClientID(copyClientID);
     } else {
       copy.clientID = null;
     }
     if (this.userCredentials != null) {
       UserCredentials sourceUserCredentials;
       sourceUserCredentials = this.getUserCredentials();
       UserCredentials copyUserCredentials =
           ((UserCredentials)
               strategy.copy(
                   LocatorUtils.property(locator, "userCredentials", sourceUserCredentials),
                   sourceUserCredentials));
       copy.setUserCredentials(copyUserCredentials);
     } else {
       copy.userCredentials = null;
     }
     if (this.lastWillAndTestament != null) {
       SimpleMqttMessage sourceLastWillAndTestament;
       sourceLastWillAndTestament = this.getLastWillAndTestament();
       SimpleMqttMessage copyLastWillAndTestament =
           ((SimpleMqttMessage)
               strategy.copy(
                   LocatorUtils.property(
                       locator, "lastWillAndTestament", sourceLastWillAndTestament),
                   sourceLastWillAndTestament));
       copy.setLastWillAndTestament(copyLastWillAndTestament);
     } else {
       copy.lastWillAndTestament = null;
     }
     if (this.cleanSession != null) {
       Boolean sourceCleanSession;
       sourceCleanSession = this.isCleanSession();
       Boolean copyCleanSession =
           ((Boolean)
               strategy.copy(
                   LocatorUtils.property(locator, "cleanSession", sourceCleanSession),
                   sourceCleanSession));
       copy.setCleanSession(copyCleanSession);
     } else {
       copy.cleanSession = null;
     }
     if (this.connectionTimeout != null) {
       Integer sourceConnectionTimeout;
       sourceConnectionTimeout = this.getConnectionTimeout();
       Integer copyConnectionTimeout =
           ((Integer)
               strategy.copy(
                   LocatorUtils.property(locator, "connectionTimeout", sourceConnectionTimeout),
                   sourceConnectionTimeout));
       copy.setConnectionTimeout(copyConnectionTimeout);
     } else {
       copy.connectionTimeout = null;
     }
     if (this.keepAliveInterval != null) {
       Integer sourceKeepAliveInterval;
       sourceKeepAliveInterval = this.getKeepAliveInterval();
       Integer copyKeepAliveInterval =
           ((Integer)
               strategy.copy(
                   LocatorUtils.property(locator, "keepAliveInterval", sourceKeepAliveInterval),
                   sourceKeepAliveInterval));
       copy.setKeepAliveInterval(copyKeepAliveInterval);
     } else {
       copy.keepAliveInterval = null;
     }
     if (this.ssl != null) {
       SecureSocketSettings sourceSSL;
       sourceSSL = this.getSSL();
       SecureSocketSettings copySSL =
           ((SecureSocketSettings)
               strategy.copy(LocatorUtils.property(locator, "ssl", sourceSSL), sourceSSL));
       copy.setSSL(copySSL);
     } else {
       copy.ssl = null;
     }
     if (this.reconnectionSettings != null) {
       ReconnectionSettings sourceReconnectionSettings;
       sourceReconnectionSettings = this.getReconnectionSettings();
       ReconnectionSettings copyReconnectionSettings =
           ((ReconnectionSettings)
               strategy.copy(
                   LocatorUtils.property(
                       locator, "reconnectionSettings", sourceReconnectionSettings),
                   sourceReconnectionSettings));
       copy.setReconnectionSettings(copyReconnectionSettings);
     } else {
       copy.reconnectionSettings = null;
     }
   }
   return draftCopy;
 }