package com.constellio.app.services.schemas.bulkImport;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import com.constellio.app.entities.schemasDisplay.enums.MetadataInputType;
import com.constellio.model.entities.schemas.MetadataValueType;
public class ImportedMetadataVOBuilder {
public ImportedMetadata build(Map<String, String> metadataElements)
throws FormMetadataVOBuilderException {
String localCode = getStringValue("localCode", metadataElements, null);
if (StringUtils.isBlank(localCode)) {
throw new FormMetadataVOBuilderException();
}
String schemaTypeCode = getStringValue("schemaTypeCode", metadataElements, null);
if (StringUtils.isBlank(schemaTypeCode)) {
throw new FormMetadataVOBuilderException();
}
String schemaCode = getStringValue("schemaCode", metadataElements, null);
if (StringUtils.isBlank(schemaCode)) {
throw new FormMetadataVOBuilderException();
}
String typeString = getStringValue("type", metadataElements, "string");
MetadataValueType type = MetadataValueType.valueOf(typeString.toUpperCase());
String reference = getStringValue("reference", metadataElements, "");
;
String label = getStringValue("label", metadataElements, localCode);
boolean required = getBooleanValue("required", metadataElements, false);
boolean multivalue = getBooleanValue("multivalue", metadataElements, false);
boolean searchable = getBooleanValue("searchable", metadataElements, false);
boolean sortable = getBooleanValue("sortable", metadataElements, false);
boolean advancedSearch = getBooleanValue("advancedSearch", metadataElements, false);
boolean facet = getBooleanValue("facet", metadataElements, false);
boolean highlight = getBooleanValue("highlight", metadataElements, false);
boolean autocomplete = getBooleanValue("autocomplete", metadataElements, false);
boolean enabled = getBooleanValue("enabled", metadataElements, true);
String metadataGroup = getStringValue("metadataGroup", metadataElements, "default");
String copyMetadata = getStringValue("copyMetadata", metadataElements, null);
String usingReference = getStringValue("copiedUsingReference", metadataElements, null);
String calculator = getStringValue("calculator", metadataElements, null);
boolean displayInAllSchemas = getBooleanValue("displayInAllSchemas", metadataElements, false);
if (metadataGroup == null) {
throw new FormMetadataVOBuilderException();
}
MetadataInputType input = getMetadataInputType(metadataElements);
if (input == null) {
List<MetadataInputType> list = MetadataInputType.getAvailableMetadataInputTypesFor(type, multivalue);
if (list.isEmpty()) {
input = MetadataInputType.FIELD;
} else {
input = list.get(0);
}
}
return new ImportedMetadata(schemaTypeCode, schemaCode, localCode, type, required, reference,
label, searchable, multivalue, sortable, advancedSearch, facet,
input, highlight, autocomplete, enabled, metadataGroup, copyMetadata, usingReference, calculator, displayInAllSchemas);
}
private MetadataInputType getMetadataInputType(Map<String, String> metadataElements) {
String inputString = getStringValue("input", metadataElements, null);
if (inputString != null) {
return MetadataInputType.valueOf(inputString.toUpperCase());
} else {
return null;
}
}
private String getStringValue(String key, Map<String, String> metadataElements, String defaultValue) {
String value = metadataElements.get(key);
if (StringUtils.isBlank(value)) {
return defaultValue;
}
return value.trim();
}
private boolean getBooleanValue(String key, Map<String, String> metadataElements, boolean defaultValue) {
String value = metadataElements.get(key);
if (StringUtils.isBlank(value)) {
return defaultValue;
}
value = value.trim();
if (value.equalsIgnoreCase("true")) {
return true;
} else if (value.equalsIgnoreCase("false")) {
return false;
}
return defaultValue;
}
}