package com.constellio.app.modules.rm.ui.components;
import java.util.ArrayList;
import java.util.List;
import com.constellio.app.modules.rm.ui.components.retentionRule.AdministrativeUnitReferenceDisplay;
import com.constellio.app.modules.rm.ui.components.retentionRule.RetentionRuleReferenceDisplay;
import com.constellio.app.modules.rm.wrappers.AdministrativeUnit;
import com.constellio.app.modules.rm.wrappers.Document;
import com.constellio.app.modules.rm.wrappers.Folder;
import com.constellio.app.modules.rm.wrappers.RetentionRule;
import com.constellio.app.ui.entities.MetadataVO;
import com.constellio.app.ui.entities.MetadataValueVO;
import com.constellio.app.ui.entities.RecordVO;
import com.constellio.app.ui.framework.components.MetadataDisplayFactory;
import com.constellio.model.entities.schemas.MetadataValueType;
import com.vaadin.ui.Component;
import com.vaadin.ui.Label;
public class RMMetadataDisplayFactory extends MetadataDisplayFactory {
@Override
public Component build(RecordVO recordVO, MetadataValueVO metadataValue) {
Component displayComponent;
MetadataVO metadataVO = metadataValue.getMetadata();
if (metadataVO.codeMatches(Folder.KEYWORDS) || metadataVO.codeMatches(Document.KEYWORDS)) {
StringBuilder sb = new StringBuilder();
List<String> keywords = new ArrayList<>();
if(metadataValue.getValue() != null && metadataValue.getValue() instanceof String) {
keywords.add(metadataValue.getValue().toString());
}
else {
keywords = metadataValue.getValue();
}
if (keywords != null) {
for (String keyword : keywords) {
if (sb.length() > 0) {
sb.append(", ");
}
sb.append(keyword);
}
}
if (sb.length() > 0) {
displayComponent = new Label(sb.toString());
} else {
displayComponent = null;
}
} else {
displayComponent = super.build(recordVO, metadataValue);
}
return displayComponent;
}
@Override
public Component buildSingleValue(RecordVO recordVO, MetadataVO metadata, Object displayValue) {
Component displayComponent;
String schemaTypeCode = metadata.getSchemaTypeCode();
MetadataValueType metadataValueType = metadata.getType();
if (MetadataValueType.REFERENCE.equals(metadataValueType) && RetentionRule.SCHEMA_TYPE.equals(schemaTypeCode)) {
displayComponent = new RetentionRuleReferenceDisplay(displayValue.toString());
} else if (MetadataValueType.REFERENCE.equals(metadataValueType) && AdministrativeUnit.SCHEMA_TYPE
.equals(schemaTypeCode)) {
displayComponent = new AdministrativeUnitReferenceDisplay(displayValue.toString());
} else {
displayComponent = super.buildSingleValue(recordVO, metadata, displayValue);
}
return displayComponent;
}
// @Override
// protected Component newContentVersionDisplayComponent(RecordVO recordVO, ContentVersionVO contentVersionVO) {
// Component displayComponent;
// String agentURL = ConstellioAgentUtils.getAgentURL(recordVO, contentVersionVO);
// if (agentURL != null) {
// displayComponent = new ConstellioAgentLink(agentURL, contentVersionVO);
// } else {
// displayComponent = new DownloadContentVersionLink(contentVersionVO);
// }
// return displayComponent;
// }
}