package co.smartreceipts.android.sync.model.impl; import android.support.annotation.NonNull; import com.google.common.base.Preconditions; import com.google.gson.annotations.SerializedName; import java.io.Serializable; import java.util.HashMap; import java.util.Map; import co.smartreceipts.android.sync.provider.SyncProvider; /** * When syncing information about when to "delete" an object, we cannot locally delete it until it has been * removed remotely. As a result, we need to locally "mark" it for deletion and only fully delete it once * we have received confirmation from our remote servers that this is okay. * * A JSON parser (e.g GSON) can be used to convert JSON data into instances of this object */ public class MarkedForDeletionMap implements Serializable { @SerializedName("deletion_map") private final Map<SyncProvider, Boolean> markedForDeletionMap; public MarkedForDeletionMap(@NonNull Map<SyncProvider, Boolean> markedForDeletionMap) { this.markedForDeletionMap = new HashMap<>(Preconditions.checkNotNull(markedForDeletionMap)); } /** * Checks if this item has been marked for deletion * * @param provider the {@link SyncProvider} for to check for * @return {@code true} if this item is marked for remote deletion */ public boolean isMarkedForDeletion(@NonNull SyncProvider provider) { if (this.markedForDeletionMap.containsKey(provider)) { return this.markedForDeletionMap.get(provider); } else { return false; } } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof MarkedForDeletionMap)) return false; MarkedForDeletionMap that = (MarkedForDeletionMap) o; return markedForDeletionMap.equals(that.markedForDeletionMap); } @Override public int hashCode() { return markedForDeletionMap.hashCode(); } }