Android Open Source - spring-sync Patch






From Project

Back to project page spring-sync.

License

The source code is released under:

Apache License

If you think the Android project spring-sync listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright 2014 the original author or authors.
 *//from w w  w .  j  av  a 2  s.  com
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.springframework.sync;

import java.util.List;

import org.springframework.sync.util.DeepCloneUtils;

/**
 * <p>Represents a Patch.</p>
 * 
 * <p>
 * This class (and {@link PatchOperation} capture the definition of a patch, but are not coupled
 * to any specific patch representation. 
 * </p>
 * 
 * @author Craig Walls
 */
public class Patch {

  private final List<PatchOperation> operations;

  public Patch(List<PatchOperation> operations) {
    this.operations = operations;
  }
  
  /**
   * @return the number of operations that make up this patch.
   */
  public int size() {
    return operations.size();
  }
  
  public List<PatchOperation> getOperations() {
    return operations;
  }
  
  /**
   * Applies the Patch to a given Object graph. Makes a copy of the given object so that it will remain unchanged after application of the patch
   * and in case any errors occur while performing the patch.
   * 
   * @param in The object graph to apply the patch to. 
   * @param type The object type.
   * @param <T> the object type.
   * @return An object graph modified by the patch.
   * @throws PatchException if there are any errors while applying the patch.
   */
  public <T> T apply(T in, Class<T> type) throws PatchException {
    // Make defensive copy of in before performing operations so that if any op fails, the original is left untouched
    T work = DeepCloneUtils.deepClone(in);
    
    for (PatchOperation operation : operations) {
      operation.perform(work, type);
    }

    return work;
  }

  /**
   * Applies the Patch to a given List of objects. Makes a copy of the given list so that it will remain unchanged after application of the patch
   * and in case any errors occur while performing the patch.
   * 
   * @param in The list to apply the patch to. 
   * @param type The list's generic type.
   * @param <T> the list's generic type.
   * @return An list modified by the patch.
   * @throws PatchException if there are any errors while applying the patch.
   */
  public <T> List<T> apply(List<T> in, Class<T> type) throws PatchException {
    // Make defensive copy of in before performing operations so that if any op fails, the original is left untouched
    List<T> work = DeepCloneUtils.deepClone(in);
    
    for (PatchOperation operation : operations) {
      operation.perform(work, type);
    }

    return work;
  }
  
}




Java Source Code List

org.springframework.sync.AddOperationTest.java
org.springframework.sync.AddOperation.java
org.springframework.sync.CopyOperationTest.java
org.springframework.sync.CopyOperation.java
org.springframework.sync.DiffTest.java
org.springframework.sync.Diff.java
org.springframework.sync.FromOperation.java
org.springframework.sync.InverseTest.java
org.springframework.sync.JsonPatchTest.java
org.springframework.sync.LateObjectEvaluator.java
org.springframework.sync.MoveOperationTest.java
org.springframework.sync.MoveOperation.java
org.springframework.sync.PatchException.java
org.springframework.sync.PatchOperation.java
org.springframework.sync.Patch.java
org.springframework.sync.PathToSpEL.java
org.springframework.sync.PathToSpelTest.java
org.springframework.sync.RemoveOperationTest.java
org.springframework.sync.RemoveOperation.java
org.springframework.sync.ReplaceOperationTest.java
org.springframework.sync.ReplaceOperation.java
org.springframework.sync.TestOperationTest.java
org.springframework.sync.TestOperation.java
org.springframework.sync.Todo.java
org.springframework.sync.diffsync.AbstractShadowStore.java
org.springframework.sync.diffsync.DiffSync.java
org.springframework.sync.diffsync.Equivalency.java
org.springframework.sync.diffsync.IdPropertyEquivalency.java
org.springframework.sync.diffsync.PersistenceCallbackRegistry.java
org.springframework.sync.diffsync.PersistenceCallback.java
org.springframework.sync.diffsync.PersistenceStrategy.java
org.springframework.sync.diffsync.ShadowStore.java
org.springframework.sync.diffsync.Shadow.java
org.springframework.sync.diffsync.VersionedPatch.java
org.springframework.sync.diffsync.config.DiffSyncConfigurerAdapter.java
org.springframework.sync.diffsync.config.DiffSyncConfigurer.java
org.springframework.sync.diffsync.config.DifferentialSynchronizationRegistrar.java
org.springframework.sync.diffsync.config.EnableDifferentialSynchronization.java
org.springframework.sync.diffsync.config.package-info.java
org.springframework.sync.diffsync.shadowstore.GemfireShadowStore.java
org.springframework.sync.diffsync.shadowstore.MapBasedShadowStore.java
org.springframework.sync.diffsync.shadowstore.RedisShadowStore.java
org.springframework.sync.diffsync.shadowstore.package-info.java
org.springframework.sync.diffsync.web.DiffSyncController.java
org.springframework.sync.diffsync.web.JsonPatchHttpMessageConverter.java
org.springframework.sync.diffsync.web.package-info.java
org.springframework.sync.diffsync.package-info.java
org.springframework.sync.json.JsonLateObjectEvaluator.java
org.springframework.sync.json.JsonPatchPatchConverter.java
org.springframework.sync.json.PatchConverter.java
org.springframework.sync.json.package-info.java
org.springframework.sync.util.DeepCloneUtils.java
org.springframework.sync.package-info.java