package com.keuin.kbackupfabric.backup.incremental; import java.io.Serializable; import java.util.*; /** * This class must be in package `com.keuin.kbackupfabric.util.backup.incremental.ObjectCollection`, * or it will not be compatible with old backups. */ public class ObjectCollection2 implements Serializable { private final String name; private final Map elements; private final Map subCollections; ObjectCollection2(String name, Set elements, Map subCollections) { this.name = Objects.requireNonNull(name); this.elements = new HashMap<>(); for (ObjectElement e : elements) { Objects.requireNonNull(e); if (this.elements.put(e.getName(), e) != null) { throw new IllegalStateException("elements conflict with the same name"); } } this.subCollections = new HashMap<>(Objects.requireNonNull(subCollections)); } public String getName() { return name; } public Set getElementSet() { return new HashSet<>(elements.values()); } public Map getElementMap() { return Collections.unmodifiableMap(elements); } public ObjectElement getElement(String name) { return elements.get(name); } public Set getSubCollectionSet() { return new HashSet<>(subCollections.values()); } public Map getSubCollectionMap() { return Collections.unmodifiableMap(subCollections); } public ObjectCollection2 getSubCollection(String name) { return subCollections.get(name); } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; ObjectCollection2 that = (ObjectCollection2) o; return name.equals(that.name) && elements.equals(that.elements) && subCollections.equals(that.subCollections); } @Override public int hashCode() { return Objects.hash(name, elements, subCollections); } }