/** * Perform merge of ServiceDocuments using the given strategy * * @param copyTo * @param copyFrom * @param fieldMergeStrategy */ public static void mergeServiceDocuments(ServiceDocument copyTo, ServiceDocument copyFrom, BinaryOperator<Object> fieldMergeStrategy) { mergeObjects(copyTo, copyFrom, fieldMergeStrategy); // the expiration time could be updated long exp = copyFrom.documentExpirationTimeMicros; if (exp != 0) { copyTo.documentExpirationTimeMicros = exp < 0 ? 0 : exp; } }
@SuppressWarnings("rawtypes") private <T extends TaskServiceDocument> ServiceDocument buildDataToSend( ServiceTaskCallbackResponse notificationPayload, ServiceTaskCallbackResponse replyPayload, ExtensibilitySubscriptionCallback result) { // Notification payload will give information about the task to subscriber. ServiceTaskCallbackResponse notificationPayloadData = Utils.fromJson( result.taskStateJson, notificationPayload.getClass()); //Copy enhanced payload (if some enhancements to payload have been made) PropertyUtils.mergeObjects(notificationPayload, notificationPayloadData, PropertyUtils.SHALLOW_MERGE_STRATEGY); notificationPayload.customProperties = notificationPayload .customProperties != null ? filterSystemProperties(notificationPayload .customProperties) : null; // Get service reply payload in order to notify subscriber which fields are acceptable for // response. ServiceTaskCallbackResponse replyPayloadData = Utils.fromJson( result.taskStateJson, replyPayload.getClass()); ExtensibilitySubscriptionCallback data = new ExtensibilitySubscriptionCallback(); data.serviceCallback = UriUtils.buildUri(getHost(), result.documentSelfLink); data.notificationPayload = Utils.toJson(notificationPayload); data.replyPayload = replyPayloadData; data.taskStateClassName = result.taskStateClassName; data.tenantLinks = result.tenantLinks; return data; }