package com.constellio.app.utils; import static com.constellio.app.ui.i18n.i18n.$; import java.util.List; import com.constellio.model.entities.EnumWithSmallCode; import com.constellio.model.entities.records.Content; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.schemas.Metadata; import com.constellio.model.entities.schemas.MetadataValueType; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.services.factories.ModelLayerFactory; public class RecordMetadataValuePrinter { String nullValue; ModelLayerFactory modelLayerFactory; public RecordMetadataValuePrinter(ModelLayerFactory modelLayerFactory) { this.modelLayerFactory = modelLayerFactory; } public String convertForPrinting(Metadata metadata, Object metadataValue) { if (metadata.isMultivalue()) { List<Object> items = (List) metadataValue; StringBuilder stringBuilder = new StringBuilder("["); for (int i = 0; i < items.size(); i++) { if (i != 0) { stringBuilder.append(", "); } stringBuilder.append(convertScalarForPrinting(metadata, items.get(i))); } stringBuilder.append("]"); return stringBuilder.toString(); } else { return convertScalarForPrinting(metadata, metadataValue); } } private String convertScalarForPrinting(Metadata metadata, Object metadataValue) { if (metadataValue == null) { return nullValue; } else if (metadata.getType() == MetadataValueType.REFERENCE) { String referenceId = (String) metadataValue; if (referenceId != null) { Record record = modelLayerFactory.newRecordServices().getDocumentById(referenceId); String code = record.get(Schemas.CODE); String title = record.get(Schemas.TITLE); if (code == null) { return title; } else { return code + "-" + title; } } } else if (metadata.getType() == MetadataValueType.CONTENT) { Content content = (Content) metadataValue; return content.getCurrentVersion().getFilename(); } else if (metadata.getType() == MetadataValueType.ENUM) { EnumWithSmallCode enumWithSmallCode = (EnumWithSmallCode) metadataValue; return $(enumWithSmallCode.getClass().getSimpleName() + "." + enumWithSmallCode); } return metadataValue.toString(); } }