package com.constellio.app.services.schemasDisplay; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import com.constellio.app.entities.schemasDisplay.MetadataDisplayConfig; import com.constellio.app.entities.schemasDisplay.SchemaDisplayConfig; import com.constellio.app.entities.schemasDisplay.SchemaTypeDisplayConfig; import com.constellio.app.entities.schemasDisplay.SchemaTypesDisplayConfig; public class SchemaDisplayManagerTransaction { String collection; SchemaTypesDisplayConfig modifiedCollectionTypes; List<SchemaTypeDisplayConfig> modifiedTypes = new ArrayList<>(); List<SchemaDisplayConfig> modifiedSchemas = new ArrayList<>(); List<MetadataDisplayConfig> modifiedMetadatas = new ArrayList<>(); Set<String> addedCodes = new HashSet<>(); public SchemaTypesDisplayConfig getModifiedCollectionTypes() { return modifiedCollectionTypes; } public List<SchemaTypeDisplayConfig> getModifiedTypes() { return modifiedTypes; } public List<SchemaDisplayConfig> getModifiedSchemas() { return modifiedSchemas; } public List<MetadataDisplayConfig> getModifiedMetadatas() { return modifiedMetadatas; } public void add(SchemaTypeDisplayConfig typeDisplayConfig) { modifying(typeDisplayConfig.getSchemaType()); modifiedTypes.add(typeDisplayConfig); } public void addReplacing(SchemaDisplayConfig schemaDisplayConfig) { addedCodes.add(schemaDisplayConfig.getSchemaCode()); for (Iterator<SchemaDisplayConfig> iterator = modifiedSchemas.iterator(); iterator.hasNext(); ) { SchemaDisplayConfig modifiedSchema = iterator.next(); if (modifiedSchema.getSchemaCode().equals(schemaDisplayConfig.getSchemaCode())) { iterator.remove(); } } modifiedSchemas.add(schemaDisplayConfig); } public void add(SchemaDisplayConfig schemaDisplayConfig) { modifying(schemaDisplayConfig.getSchemaCode()); modifiedSchemas.add(schemaDisplayConfig); } public void addReplacing(MetadataDisplayConfig metadataDisplayConfig) { addedCodes.add(metadataDisplayConfig.getMetadataCode()); for (Iterator<MetadataDisplayConfig> iterator = modifiedMetadatas.iterator(); iterator.hasNext(); ) { MetadataDisplayConfig modifiedMetadata = iterator.next(); if (modifiedMetadata.getMetadataCode().equals(metadataDisplayConfig.getMetadataCode())) { iterator.remove(); } } modifiedMetadatas.add(metadataDisplayConfig); } public SchemaDisplayManagerTransaction add(MetadataDisplayConfig metadataDisplayConfig) { modifying(metadataDisplayConfig.getMetadataCode()); modifiedMetadatas.add(metadataDisplayConfig); return this; } public void setModifiedCollectionTypes(SchemaTypesDisplayConfig modifiedCollectionTypes) { this.modifiedCollectionTypes = modifiedCollectionTypes; } public String getCollection() { if (modifiedCollectionTypes != null) { collection = modifiedCollectionTypes.getCollection(); } for (SchemaTypeDisplayConfig config : modifiedTypes) { ensureSameCollection(config.getCollection()); } for (SchemaDisplayConfig config : modifiedSchemas) { ensureSameCollection(config.getCollection()); } for (MetadataDisplayConfig config : modifiedMetadatas) { ensureSameCollection(config.getCollection()); } return collection; } private void ensureSameCollection(String collection) { if (this.collection == null) { this.collection = collection; } else if (!this.collection.equals(collection)) { throw new RuntimeException("Configs must be in same collection"); } } private void modifying(String code) { // if (addedCodes.contains(code)) { // throw new RuntimeException( // "Config '" + code + "' is already in transaction, adding it would override the previously added config"); // } addedCodes.add(code); } public SchemaDisplayConfig getModifiedSchema(String schemaCode) { for (SchemaDisplayConfig schemaDisplayConfig : modifiedSchemas) { if (schemaDisplayConfig.getSchemaCode().equals(schemaCode)) { return schemaDisplayConfig; } } return null; } public MetadataDisplayConfig getMetadataDisplayConfig(String code) { for (MetadataDisplayConfig metadataDisplayConfig : modifiedMetadatas) { if (metadataDisplayConfig.getMetadataCode().equals(code)) { return metadataDisplayConfig; } } return null; } }