package com.constellio.app.modules.rm.wrappers; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.records.wrappers.RecordWrapper; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.entities.schemas.MetadataSchemaTypes; public class Cart extends RecordWrapper { public static final String SCHEMA_TYPE = "cart"; public static final String DEFAULT_SCHEMA = SCHEMA_TYPE + "_default"; public static final String FOLDERS = "folders"; public static final String DOCUMENTS = "documents"; public static final String CONTAINERS = "containers"; public static final String OWNER = "owner"; public static final String SHARED_WITH_USERS = "sharedWithUsers"; public Cart(Record record, MetadataSchemaTypes types) { super(record, types, SCHEMA_TYPE); } public String getOwner() { return get(OWNER); } public Cart setOwner(String owner) { set(OWNER, owner); return this; } public Cart setOwner(User owner) { set(OWNER, owner); return this; } public List<String> getFolders() { return getList(FOLDERS); } public Cart setFolders(List<String> folders) { set(FOLDERS, folders); return this; } public Cart addFolders(List<String> folders) { return addWithoutDuplicates(FOLDERS, folders); } public Cart removeFolder(String id) { return removeFrom(FOLDERS, id); } public List<String> getSharedWithUsers() { return getList(SHARED_WITH_USERS); } public Cart setSharedWithUsers(List<String> users) { set(SHARED_WITH_USERS, users); return this; } public Cart addSharedWithUsers(List<String> users) { return addWithoutDuplicates(SHARED_WITH_USERS, users); } public Cart removeSharedWithUsers(String id) { return removeFrom(SHARED_WITH_USERS, id); } public List<String> getDocuments() { return getList(DOCUMENTS); } public Cart setDocuments(List<String> documents) { set(DOCUMENTS, documents); return this; } public Cart addDocuments(List<String> documents) { return addWithoutDuplicates(DOCUMENTS, documents); } public Cart removeDocument(String id) { return removeFrom(DOCUMENTS, id); } public List<String> getContainers() { return getList(CONTAINERS); } public Cart setContainers(List<String> containers) { set(CONTAINERS, containers); return this; } public Cart addContainers(List<String> containers) { return addWithoutDuplicates(CONTAINERS, containers); } public Cart removeContainer(String id) { return removeFrom(CONTAINERS, id); } public List<String> getAllItems() { List<String> result = new ArrayList<>(); result.addAll(getFolders()); result.addAll(getDocuments()); result.addAll(getContainers()); return result; } public boolean isEmpty() { return getFolders().isEmpty() && getDocuments().isEmpty() && getContainers().isEmpty(); } public Cart empty() { setFolders(new ArrayList<String>()); setDocuments(new ArrayList<String>()); setContainers(new ArrayList<String>()); return this; } private Cart addWithoutDuplicates(String metadata, List<String> items) { Set<String> result = new HashSet<>(this.<String>getList(metadata)); result.addAll(items); set(metadata, new ArrayList<>(result)); return this; } private Cart removeFrom(String metadata, String id) { List<String> result = new ArrayList<>(this.<String>getList(metadata)); result.remove(id); set(metadata, result); return this; } }