package org.tm.archive.groups; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.tm.archive.recipients.RecipientId; import org.tm.archive.util.Util; import java.util.Collections; import java.util.List; /** * Describes a change in membership that results from a GV1->GV2 migration. */ public final class GroupMigrationMembershipChange { private final List pending; private final List dropped; public GroupMigrationMembershipChange(@NonNull List pending, @NonNull List dropped) { this.pending = pending; this.dropped = dropped; } public static GroupMigrationMembershipChange empty() { return new GroupMigrationMembershipChange(Collections.emptyList(), Collections.emptyList()); } public static @NonNull GroupMigrationMembershipChange deserialize(@Nullable String serialized) { if (Util.isEmpty(serialized)) { return empty(); } else { String[] parts = serialized.split("\\|"); if (parts.length == 1) { return new GroupMigrationMembershipChange(RecipientId.fromSerializedList(parts[0]), Collections.emptyList()); } else if (parts.length == 2) { return new GroupMigrationMembershipChange(RecipientId.fromSerializedList(parts[0]), RecipientId.fromSerializedList(parts[1])); } else { return GroupMigrationMembershipChange.empty(); } } } public @NonNull List getPending() { return pending; } public @NonNull List getDropped() { return dropped; } public @NonNull String serialize() { return RecipientId.toSerializedList(pending) + "|" + RecipientId.toSerializedList(dropped); } public boolean isEmpty() { return pending.isEmpty() && dropped.isEmpty(); } }