All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.amazonaws.mobileconnectors.cognito.SyncConflict Maven / Gradle / Ivy

Go to download

The AWS Android SDK for Amazon Cognito Sync module holds the client classes that are used for communicating with Amazon Cognito Sync Service

There is a newer version: 2.6.9
Show newest version
/**
 * Copyright 2013-2016 Amazon.com, 
 * Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Amazon Software License (the "License"). 
 * You may not use this file except in compliance with the 
 * License. A copy of the License is located at
 * 
 *     http://aws.amazon.com/asl/
 * 
 * or in the "license" file accompanying this file. This file is 
 * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 
 * CONDITIONS OF ANY KIND, express or implied. See the License 
 * for the specific language governing permissions and 
 * limitations under the License.
 */

package com.amazonaws.mobileconnectors.cognito;

import java.util.Date;

/**
 * This consists of the conflicting record from the remote storage and the local
 * storage.
 */
public class SyncConflict {
    private final String key;
    private final Record remoteRecord;
    private final Record localRecord;

    /**
     * Constructs a SyncConflict object.
     * 
     * @param remoteRecord record from remote storage
     * @param localRecord record from local storage
     */
    public SyncConflict(Record remoteRecord, Record localRecord) {
        if (remoteRecord == null || localRecord == null) {
            throw new IllegalArgumentException("record can't be null");
        }
        if (!remoteRecord.getKey().equals(localRecord.getKey())) {
            throw new IllegalArgumentException(
                    "the keys of remote record and local record don't match");
        }
        this.key = remoteRecord.getKey();
        this.remoteRecord = remoteRecord;
        this.localRecord = localRecord;
    }

    /**
     * Gets the key of the record that is in conflict.
     * 
     * @return key of the record
     */
    public String getKey() {
        return key;
    }

    /**
     * Gets the remote record that is in conflict.
     * 
     * @return record from remote storage
     */
    public Record getRemoteRecord() {
        return remoteRecord;
    }

    /**
     * Gets the local record that is in conflict.
     * 
     * @return record from local storage
     */
    public Record getLocalRecord() {
        return localRecord;
    }

    /**
     * Resolves conflict with remote record
     * 
     * @return resolved record
     */
    public Record resolveWithRemoteRecord() {
        return new Record.Builder(key)
                .value(remoteRecord.getValue())
                .syncCount(remoteRecord.getSyncCount())
                .lastModifiedDate(remoteRecord.getLastModifiedDate())
                .lastModifiedBy(remoteRecord.getLastModifiedBy())
                .deviceLastModifiedDate(remoteRecord.getDeviceLastModifiedDate())
                .modified(false)
                .build();
    }

    /**
     * Resolves conflict with local record
     * 
     * @return resolved record
     */
    public Record resolveWithLocalRecord() {
        return new Record.Builder(key)
                .value(localRecord.getValue())
                .syncCount(remoteRecord.getSyncCount())
                .lastModifiedDate(localRecord.getLastModifiedDate())
                .lastModifiedBy(localRecord.getLastModifiedBy())
                .deviceLastModifiedDate(localRecord.getDeviceLastModifiedDate())
                .modified(true)
                .build();
    }

    /**
     * Resolves conflict with a new value.
     * 
     * @param newValue new value of the record
     * @return resolved record
     */
    public Record resolveWithValue(String newValue) {
    	Date now = new Date();
        return new Record.Builder(key)
                .value(newValue)
                .syncCount(remoteRecord.getSyncCount())
                .lastModifiedDate(now)
                .lastModifiedBy(localRecord.getLastModifiedBy())
                .deviceLastModifiedDate(now)
                .modified(true)
                .build();
    }

    /**
     * Resolves conflict with last writer wins. The record with a later last
     * modified date wins the conflict.
     * 
     * @return the record that has a later last modified date.
     */
    public Record resolveWithLastWriterWins() {
        return remoteRecord.getLastModifiedDate().after(localRecord.getLastModifiedDate()) ?
                resolveWithRemoteRecord() : resolveWithLocalRecord();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy