package com.constellio.app.ui.entities; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.constellio.app.ui.application.ConstellioUI; @SuppressWarnings("serial") public class MetadataSchemaVO implements Serializable { private static final Logger LOGGER = LoggerFactory.getLogger(MetadataSchemaVO.class); final String code; final String collection; final List<MetadataVO> metadatas = new ArrayList<>(); final Map<Locale, String> labels; final List<String> formMetadataCodes; final List<String> displayMetadataCodes; final List<String> searchMetadataCodes; final List<String> tableMetadataCodes; public MetadataSchemaVO(String code, String collection, Map<Locale, String> labels) { this(code, collection, null, null, null, null, labels); } public MetadataSchemaVO(String code, String collection, List<String> formMetadataCodes, List<String> displayMetadataCodes, List<String> tableMetadataCodes, List<String> searchMetadataCodes, Map<Locale, String> labels) { super(); this.code = code; this.collection = collection; this.formMetadataCodes = formMetadataCodes; this.displayMetadataCodes = displayMetadataCodes; this.searchMetadataCodes = searchMetadataCodes; this.tableMetadataCodes = tableMetadataCodes; this.labels = labels; } public String getCode() { return code; } public String getTypeCode() { return code.split("_")[0]; } public String getCollection() { return collection; } public final List<String> getFormMetadataCodes() { return formMetadataCodes; } public final List<String> getDisplayMetadataCodes() { return displayMetadataCodes; } public final List<String> getTableMetadataCodes() { return tableMetadataCodes; } public final List<String> getSearchMetadataCodes() { return searchMetadataCodes; } public List<MetadataVO> getMetadatas() { return metadatas; } public List<MetadataVO> getFormMetadatas() { List<MetadataVO> formMetadatas; List<String> formMetadataCodes = getFormMetadataCodes(); if (formMetadataCodes == null) { formMetadatas = getMetadatas(); } else { formMetadatas = new ArrayList<>(); for (String formMetadataCode : formMetadataCodes) { MetadataVO metadataVO = getMetadata(formMetadataCode); formMetadatas.add(metadataVO); } } return formMetadatas; } public List<MetadataVO> getDisplayMetadatas() { List<MetadataVO> displayMetadatas; List<String> displayMetadataCodes = getDisplayMetadataCodes(); if (displayMetadataCodes == null) { displayMetadatas = getMetadatas(); } else { displayMetadatas = new ArrayList<>(); for (String displayMetadataCode : displayMetadataCodes) { MetadataVO metadataVO = getMetadata(displayMetadataCode); displayMetadatas.add(metadataVO); } } return displayMetadatas; } public List<MetadataVO> getTableMetadatas() { List<MetadataVO> tableMetadatas; List<String> tableMetadataCodes = getTableMetadataCodes(); if (tableMetadataCodes == null) { tableMetadatas = getMetadatas(); } else { tableMetadatas = new ArrayList<>(); for (String tableMetadataCode : tableMetadataCodes) { MetadataVO metadataVO = getMetadata(tableMetadataCode); if (metadataVO == null) { LOGGER.warn("No such metadata '" + tableMetadataCode + "'"); } else { tableMetadatas.add(metadataVO); } } } return tableMetadatas; } public List<MetadataVO> getSearchMetadatas() { List<MetadataVO> searchMetadatas; List<String> searchMetadataCodes = getSearchMetadataCodes(); if (searchMetadataCodes == null) { searchMetadatas = getMetadatas(); } else { searchMetadatas = new ArrayList<>(); for (String searchMetadataCode : searchMetadataCodes) { MetadataVO metadataVO = getMetadata(searchMetadataCode); if (metadataVO == null) { LOGGER.warn("No such metadata '" + searchMetadataCode + "'"); } else { searchMetadatas.add(metadataVO); } } } return searchMetadatas; } public MetadataVO getMetadata(String metadataCode) { MetadataVO match = null; String metadataCodeWithoutPrefix = MetadataVO.getCodeWithoutPrefix(metadataCode); for (MetadataVO schemaMetadata : metadatas) { String schemaMetadataCode = schemaMetadata.getCode(); String schemaMetadataCodeWithoutPrefix = MetadataVO.getCodeWithoutPrefix(schemaMetadataCode); if (schemaMetadataCodeWithoutPrefix.equals(metadataCodeWithoutPrefix)) { match = schemaMetadata; break; } } return match; } public Map<Locale, String> getLabels() { return labels; } public String getLabel(Locale locale) { return labels.get(locale); } public String getLabel() { return labels.get(ConstellioUI.getCurrentSessionContext().getCurrentLocale()); } public void setLabel(Locale locale, String label) { labels.put(locale, label); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((code == null) ? 0 : code.hashCode()); result = prime * result + ((collection == null) ? 0 : collection.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; MetadataSchemaVO other = (MetadataSchemaVO) obj; if (code == null) { if (other.code != null) return false; } else if (!code.equals(other.code)) return false; if (collection == null) { if (other.collection != null) return false; } else if (!collection.equals(other.collection)) return false; return true; } /** * Used by Vaadin to populate the header of the column in a table (since we use MetadataVO objects as property ids). * * @see java.lang.Object#toString() */ @Override public String toString() { String toString; try { toString = getLabel(ConstellioUI.getCurrentSessionContext().getCurrentLocale()); } catch (RuntimeException e) { toString = code; } return toString; } }