package com.constellio.model.services.schemas.builders; import java.util.HashSet; import java.util.Set; import com.constellio.model.entities.schemas.AllowedReferences; import com.constellio.model.entities.schemas.MetadataSchema; public class AllowedReferencesBuilder { private final Set<String> schemas = new HashSet<String>(); private String schemaType; public AllowedReferencesBuilder() { super(); } public AllowedReferencesBuilder(AllowedReferences references) { super(); schemaType = references.getAllowedSchemaType(); schemas.addAll(references.getAllowedSchemas()); } public String getSchemaType() { return schemaType; } public Set<String> getSchemas() { return schemas; } public void clearSchemas() { schemas.clear(); } public AllowedReferencesBuilder add(MetadataSchema schema) { addCompleteSchemaCode(schema.getCode()); return this; } public AllowedReferencesBuilder add(MetadataSchemaBuilder schemaBuilder) { addCompleteSchemaCode(schemaBuilder.getCode()); return this; } public AllowedReferencesBuilder set(MetadataSchemaTypeBuilder schemaTypeBuilder) { setCompleteSchemaTypeCode(schemaTypeBuilder.getCode()); return this; } public AllowedReferencesBuilder setCompleteSchemaTypeCode(String code) { if (schemaType != null) { throw new AllowedReferencesBuilderRuntimeException.SchemaTypeAlreadySet(); } else if (!schemas.isEmpty()) { throw new AllowedReferencesBuilderRuntimeException.CannotHaveBothATypeAndSchemas(); } else { schemaType = code; } return this; } public AllowedReferencesBuilder addCompleteSchemaCode(String code) { if (schemaType != null) { throw new AllowedReferencesBuilderRuntimeException.CannotHaveBothATypeAndSchemas(); } else if (!isOfSameType(code)) { throw new AllowedReferencesBuilderRuntimeException.AllSchemasMustBeOfSameType(); } else { schemas.add(code); } return this; } private boolean isOfSameType(String code) { boolean isOfSameType = true; for (String schemaCode : schemas) { if (!(schemaCode.split("_")[0].equals(code.split("_")[0]))) { isOfSameType = false; } } return isOfSameType; } public AllowedReferences build() { return new AllowedReferences(schemaType, schemas); } @Override public String toString() { return "AllowedReferencesBuilder [schemaTypes=" + schemaType + ", schemas=" + schemas + "]"; } public String getMetadataCompleteCode(String simpleCode) { if (schemaType != null) { return schemaType + "_default_" + simpleCode; } else { return schemas.iterator().next() + "_" + simpleCode; } } }