package com.constellio.app.ui.entities; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import com.constellio.app.ui.entities.RecordVORuntimeException.RecordVORuntimeException_NoSuchMetadata; import com.constellio.data.utils.LangUtils; import com.constellio.model.entities.schemas.Schemas; @SuppressWarnings("serial") public class RecordVO implements Serializable { public enum VIEW_MODE { FORM, DISPLAY, TABLE, SEARCH } String id; private String resourceKey; private String extension; private String niceTitle; final List<MetadataValueVO> metadataValues; VIEW_MODE viewMode; public RecordVO(String id, List<MetadataValueVO> metadataValues, VIEW_MODE viewMode) { this.id = id; LangUtils.ensureNoNullItems(metadataValues); this.metadataValues = metadataValues; this.viewMode = viewMode; } protected boolean getBooleanWithDefaultValue(String param, boolean defaultValue) { Boolean value = get(param); return value == null ? defaultValue : value; } public String getId() { return id; } public String getTitle() { return get(Schemas.TITLE.getLocalCode()); } public void setTitle(String title) { set(Schemas.TITLE.getLocalCode(), title); } public final VIEW_MODE getViewMode() { return viewMode; } public MetadataSchemaVO getSchema() { MetadataSchemaVO schema = null; if (!metadataValues.isEmpty()) { schema = metadataValues.get(0).getMetadata().getSchema(); } return schema; } public List<MetadataValueVO> getMetadataValues() { return metadataValues; } public List<MetadataValueVO> getFormMetadataValues() { List<MetadataValueVO> formMetadataValues = new ArrayList<>(); MetadataSchemaVO schemaVO = getSchema(); List<String> formMetadataCodes = schemaVO.getFormMetadataCodes(); if (formMetadataCodes == null) { formMetadataCodes = getMetadataCodes(); } for (String formMetadataCode : formMetadataCodes) { MetadataVO metadataVO = getMetadata(formMetadataCode); MetadataValueVO metadataValueVO = getMetadataValue(metadataVO); if (metadataValueVO != null) { formMetadataValues.add(metadataValueVO); } } return formMetadataValues; } public List<MetadataValueVO> getDisplayMetadataValues() { List<MetadataValueVO> displayMetadataValues = new ArrayList<>(); MetadataSchemaVO schemaVO = getSchema(); List<String> displayMetadataCodes = schemaVO.getDisplayMetadataCodes(); if (displayMetadataCodes == null) { displayMetadataCodes = getMetadataCodes(); } for (String displayMetadataCode : displayMetadataCodes) { try { MetadataVO metadataVO = getMetadata(displayMetadataCode); MetadataValueVO metadataValueVO = getMetadataValue(metadataVO); if (metadataValueVO != null) { displayMetadataValues.add(metadataValueVO); } } catch (RecordVORuntimeException_NoSuchMetadata e) { } } return displayMetadataValues; } public List<MetadataValueVO> getTableMetadataValues() { List<MetadataValueVO> tableMetadataValues = new ArrayList<>(); MetadataSchemaVO schemaVO = getSchema(); List<String> tableMetadataCodes = schemaVO.getTableMetadataCodes(); if (tableMetadataCodes == null) { tableMetadataCodes = getMetadataCodes(); } for (String tableMetadataCode : tableMetadataCodes) { MetadataVO metadataVO = getMetadata(tableMetadataCode); MetadataValueVO metadataValueVO = getMetadataValue(metadataVO); if (metadataValueVO != null) { tableMetadataValues.add(metadataValueVO); } } return tableMetadataValues; } public List<MetadataValueVO> getSearchMetadataValues() { List<MetadataValueVO> searchMetadataValues = new ArrayList<>(); MetadataSchemaVO schemaVO = getSchema(); List<String> searchMetadataCodes = schemaVO.getSearchMetadataCodes(); if (searchMetadataCodes == null) { searchMetadataCodes = getMetadataCodes(); } for (String tableMetadataCode : searchMetadataCodes) { MetadataVO metadataVO = getMetadata(tableMetadataCode); MetadataValueVO metadataValueVO = getMetadataValue(metadataVO); if (metadataValueVO != null) { searchMetadataValues.add(metadataValueVO); } } return searchMetadataValues; } public MetadataValueVO getMetadataValue(MetadataVO metadata) { MetadataValueVO match = null; for (MetadataValueVO metadataValue : metadataValues) { if (metadata.equals(metadataValue.getMetadata())) { match = metadataValue; break; } } return match; } public List<MetadataVO> getMetadatas() { List<MetadataVO> metadatas = new ArrayList<MetadataVO>(); for (MetadataValueVO metadataValue : metadataValues) { metadatas.add(metadataValue.getMetadata()); } return metadatas; } public List<String> getMetadataCodes() { List<String> metadataCodes = new ArrayList<>(); List<MetadataVO> metadatas = getMetadatas(); for (MetadataVO metadataVO : metadatas) { metadataCodes.add(metadataVO.getCode()); } return metadataCodes; } public List<MetadataVO> getFormMetadatas() { return getSchema().getFormMetadatas(); } public List<MetadataVO> getDisplayMetadatas() { return getSchema().getDisplayMetadatas(); } public List<MetadataVO> getTableMetadatas() { return getSchema().getTableMetadatas(); } public List<MetadataVO> getSearchMetadatas() { return getSchema().getSearchMetadatas(); } public MetadataVO getMetadataOrNull(String code) { String codeWithoutPrefix = MetadataVO.getCodeWithoutPrefix(code); for (MetadataValueVO metadataValue : metadataValues) { MetadataVO metadata = metadataValue.getMetadata(); String metadataCode = metadata.getCode(); String metadataCodeWithoutPrefix = MetadataVO.getCodeWithoutPrefix(metadataCode); if (code.equals(metadataCode) || codeWithoutPrefix.equals(metadataCodeWithoutPrefix)) { return metadataValue.getMetadata(); } } return null; } public MetadataVO getMetadata(String code) { MetadataVO metadataVO = getMetadataOrNull(code); if (metadataVO == null) { throw new RecordVORuntimeException_NoSuchMetadata(code); } else { return metadataVO; } } public <T extends Object> T get(MetadataVO metadata) { T value = null; if (metadata != null) { for (MetadataValueVO metadataValue : metadataValues) { if (metadata.equals(metadataValue.getMetadata())) { value = metadataValue.getValue(); break; } } } return value; } public void set(MetadataVO metadata, Object value) { for (MetadataValueVO metadataValue : metadataValues) { if (metadata.equals(metadataValue.getMetadata())) { metadataValue.setValue(value); break; } } } public <T extends Object> T get(String metadataCode) { MetadataVO metadata = getMetadata(metadataCode); return get(metadata); } public void set(String metadataCode, Object value) { MetadataVO metadata = getMetadata(metadataCode); set(metadata, value); } public <T extends Object> List<T> getList(MetadataVO metadata) { return get(metadata); } public <T extends Object> List<T> getList(String metadataCode) { return get(metadataCode); } public String getResourceKey() { return resourceKey; } public void setResourceKey(String resourceKey) { this.resourceKey = resourceKey; } public String getExtension() { return extension; } public void setExtension(String extension) { this.extension = extension; } public String getNiceTitle() { return niceTitle; } public void setNiceTitle(String niceTitle) { this.niceTitle = niceTitle; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((id == null) ? 0 : id.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } else if (obj == null) { return false; } else if (!(obj instanceof RecordVO)) { return false; } else { RecordVO other = (RecordVO) obj; if (id == null) { if (other.id != null) { return false; } } else if (!id.equals(other.id)) { return false; } } return true; } @Override public String toString() { return id; } }