package com.constellio.app.modules.rm.ui.components.document; import static com.constellio.app.modules.rm.wrappers.Document.CONTENT; import static com.constellio.app.modules.rm.wrappers.Document.FOLDER; import static com.constellio.app.modules.rm.wrappers.Document.MAIN_COPY_RULE_ID_ENTERED; import static com.constellio.app.modules.rm.wrappers.Document.TYPE; import java.util.Arrays; import java.util.List; import com.constellio.app.modules.rm.model.CopyRetentionRuleInRule; import com.constellio.app.modules.rm.ui.components.RMRecordFieldFactory; import com.constellio.app.modules.rm.ui.components.document.fields.CustomDocumentField; import com.constellio.app.modules.rm.ui.components.document.fields.DocumentContentFieldImpl; import com.constellio.app.modules.rm.ui.components.document.fields.DocumentCopyRuleFieldImpl; import com.constellio.app.modules.rm.ui.components.document.fields.DocumentFolderFieldImpl; import com.constellio.app.modules.rm.ui.components.document.fields.DocumentTypeFieldLookupImpl; import com.constellio.app.modules.rm.wrappers.Email; import com.constellio.app.ui.entities.MetadataVO; import com.constellio.app.ui.entities.RecordVO; import com.vaadin.ui.Field; public class DocumentFieldFactory extends RMRecordFieldFactory { private String folderId; private String currentType; private List<CopyRetentionRuleInRule> copyRules; public DocumentFieldFactory(String folderId, String currentType, List<CopyRetentionRuleInRule> copyRules) { this.folderId = folderId; this.currentType = currentType; this.copyRules = copyRules; } @Override public Field<?> build(RecordVO recordVO, MetadataVO metadataVO) { Field<?> field; switch (metadataVO.getLocalCode()) { case TYPE: field = new DocumentTypeFieldLookupImpl(folderId, currentType); break; case CONTENT: field = new DocumentContentFieldImpl(); break; case FOLDER: field = new DocumentFolderFieldImpl(); break; case MAIN_COPY_RULE_ID_ENTERED: field = new DocumentCopyRuleFieldImpl(copyRules); break; default: field = super.build(recordVO, metadataVO); } if (field instanceof CustomDocumentField) { postBuild(field, recordVO, metadataVO); } return field; } @Override protected void postBuild(Field<?> field, RecordVO recordVO, MetadataVO metadataVO) { super.postBuild(field, recordVO, metadataVO); String schemaCode = metadataVO.getSchema().getCode(); if (Email.SCHEMA.equals(schemaCode)) { List<String> readOnlyMetadataCodes = Arrays.asList(Email.EMAIL_ATTACHMENTS_LIST, Email.EMAIL_BCC_TO, Email.EMAIL_CC_TO, Email.EMAIL_CONTENT, Email.EMAIL_FROM, Email.EMAIL_IN_NAME_OF, Email.EMAIL_OBJECT, Email.EMAIL_RECEIVED_ON, Email.EMAIL_RECEIVED_ON, Email.EMAIL_SENT_ON, Email.EMAIL_TO); String metadataCode = metadataVO.getCode(); String metadataCodeWithoutPrefix = MetadataVO.getCodeWithoutPrefix(metadataCode); if (readOnlyMetadataCodes.contains(metadataCodeWithoutPrefix)) { field.setEnabled(false); } } } }