package com.constellio.app.modules.complementary.esRmRobots.ui.components.actionParameters.fields;
import com.constellio.app.modules.complementary.esRmRobots.model.ClassifyConnectorFolderDirectlyInThePlanActionParameters;
import com.constellio.app.modules.complementary.esRmRobots.model.ClassifyConnectorFolderInTaxonomyActionParameters;
import com.constellio.app.modules.complementary.esRmRobots.ui.components.actionParameters.fields.category.ActionParametersCategoryField;
import com.constellio.app.modules.complementary.esRmRobots.ui.components.actionParameters.fields.category.ActionParametersCategoryFieldImpl;
import com.constellio.app.modules.complementary.esRmRobots.ui.components.actionParameters.fields.retentionRule.ActionParametersRetentionRuleField;
import com.constellio.app.modules.complementary.esRmRobots.ui.components.actionParameters.fields.retentionRule.ActionParametersRetentionRuleFieldImpl;
import com.constellio.app.modules.rm.model.enums.CopyType;
import com.constellio.app.services.factories.ConstellioFactories;
import com.constellio.app.ui.application.ConstellioUI;
import com.constellio.app.ui.entities.MetadataVO;
import com.constellio.app.ui.entities.RecordVO;
import com.constellio.app.ui.framework.components.RecordFieldFactory;
import com.constellio.app.ui.framework.components.fields.lookup.LookupRecordField;
import com.constellio.app.ui.pages.base.SessionContext;
import com.constellio.model.entities.schemas.Metadata;
import com.vaadin.ui.Field;
import java.util.Arrays;
import static com.constellio.app.modules.complementary.esRmRobots.model.ClassifyConnectorFolderDirectlyInThePlanActionParameters.DEFAULT_UNIFORM_SUBDIVISION;
public class EsRmRobotActionParametersFieldFactory extends RecordFieldFactory implements EsRmRobotActionParametersFields {
private static final String DEFAULT_RETENTION_RULE = "defaultRetentionRule";
private static final String DEFAULT_CATEGORY = "defaultCategory";
private static final String DEFAULT_PARENT_FOLDER = "defaultParentFolder";
private static final String IN_TAXONOMY = "inTaxonomy";
private static final String DEFAULT_COPY_STATUS = "defaultCopyStatus";
private static final String PATH_PREFIX = "pathPrefix";
private ActionParametersCategoryFieldImpl categoryField;
private ActionParametersRetentionRuleFieldImpl retentionRuleField;
private LookupRecordField uniformSubdivisionField;
private EsRmRobotActionParametersPresenter presenter;
private static final String[] CUSTOM_FIELDS = {
ClassifyConnectorFolderDirectlyInThePlanActionParameters.DEFAULT_CATEGORY,
ClassifyConnectorFolderInTaxonomyActionParameters.DEFAULT_CATEGORY,
ClassifyConnectorFolderDirectlyInThePlanActionParameters.DEFAULT_RETENTION_RULE,
ClassifyConnectorFolderInTaxonomyActionParameters.DEFAULT_RETENTION_RULE,
};
public EsRmRobotActionParametersFieldFactory() {
this.presenter = new EsRmRobotActionParametersPresenter(this);
}
@Override
public Field<?> build(RecordVO recordVO, MetadataVO metadataVO) {
Field<?> field;
if(DEFAULT_UNIFORM_SUBDIVISION.equals(metadataVO.getLocalCode()) && !presenter.areUniformSubdivisionsEnabled()) {
return null;
}
if(DEFAULT_COPY_STATUS.equals(metadataVO.getLocalCode())) {
return null;
}
if(IN_TAXONOMY.equals(metadataVO.getLocalCode())) {
return null;
}
if(DEFAULT_CATEGORY.equals(metadataVO.getLocalCode()) && !metadataVO.isRequired()) {
return null;
}
if(DEFAULT_RETENTION_RULE.equals(metadataVO.getLocalCode()) && !metadataVO.isRequired()) {
return null;
}
if(PATH_PREFIX.equals(metadataVO.getLocalCode())) {
return null;
}
String code = MetadataVO.getCodeWithoutPrefix(metadataVO.getCode());
if (Arrays.asList(CUSTOM_FIELDS).contains(code)) {
if (categoryField == null) {
categoryField = new ActionParametersCategoryFieldImpl();
retentionRuleField = new ActionParametersRetentionRuleFieldImpl();
presenter.rmFieldsCreated();
}
if (ClassifyConnectorFolderDirectlyInThePlanActionParameters.DEFAULT_CATEGORY.equals(code) ||
ClassifyConnectorFolderInTaxonomyActionParameters.DEFAULT_CATEGORY.equals(code)) {
field = categoryField;
} else {
field = retentionRuleField;
}
super.postBuild(field, recordVO, metadataVO);
} else {
if(code.equals(DEFAULT_UNIFORM_SUBDIVISION)) {
uniformSubdivisionField = (LookupRecordField) super.build(recordVO, metadataVO);
presenter.subdivisionFieldCreated();
return uniformSubdivisionField;
}
field = super.build(recordVO, metadataVO);
}
return field;
}
@Override
public SessionContext getSessionContext() {
return ConstellioUI.getCurrentSessionContext();
}
@Override
public ConstellioFactories getConstellioFactories() {
return ConstellioUI.getCurrent().getConstellioFactories();
}
@Override
public ActionParametersCategoryField getCategoryField() {
return categoryField;
}
@Override
public ActionParametersRetentionRuleField getRetentionRuleField() {
return retentionRuleField;
}
@Override
public LookupRecordField getUniformSubdivision() {
return uniformSubdivisionField;
}
}