package com.constellio.app.modules.complementary.esRmRobots.ui.components.actionParameters.fields;
import com.constellio.app.modules.complementary.esRmRobots.ui.components.actionParameters.fields.category.ActionParametersCategoryField;
import com.constellio.app.modules.complementary.esRmRobots.ui.components.actionParameters.fields.retentionRule.ActionParametersRetentionRuleField;
import com.constellio.app.modules.rm.RMConfigs;
import com.constellio.app.modules.rm.services.RMSchemasRecordsServices;
import com.constellio.app.modules.rm.wrappers.Category;
import com.constellio.app.modules.rm.wrappers.UniformSubdivision;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.app.services.factories.ConstellioFactories;
import com.constellio.app.ui.framework.components.fields.lookup.LookupRecordField;
import com.constellio.app.ui.pages.base.SessionContext;
import com.vaadin.data.Property;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
public class EsRmRobotActionParametersPresenter {
private EsRmRobotActionParametersFields fields;
public EsRmRobotActionParametersPresenter(EsRmRobotActionParametersFields fields) {
this.fields = fields;
}
void rmFieldsCreated() {
ActionParametersCategoryField categoryField = fields.getCategoryField();
if (categoryField != null) {
categoryField.addValueChangeListener(new ActionParametersCategoryField.CategoryValueChangeListener() {
@Override
public void valueChanged(String newValue) {
updateFields(newValue);
}
});
}
}
void subdivisionFieldCreated() {
LookupRecordField uniformSubdivisionField = fields.getUniformSubdivision();
if(uniformSubdivisionField != null) {
uniformSubdivisionField.addValueChangeListener(new Property.ValueChangeListener() {
@Override
public void valueChange(Property.ValueChangeEvent event) {
String uniformSubdivisionId = (String) event.getProperty().getValue();
updateFieldsWithUniformSubdivision(uniformSubdivisionId);
}
});
}
}
private void updateFields(String categoryId) {
ConstellioFactories constellioFactories = fields.getConstellioFactories();
SessionContext sessionContext = fields.getSessionContext();
String collection = sessionContext.getCurrentCollection();
AppLayerFactory appLayerFactory = constellioFactories.getAppLayerFactory();
LookupRecordField uniformSubdivisionField = fields.getUniformSubdivision();
RMSchemasRecordsServices rm = new RMSchemasRecordsServices(collection, appLayerFactory);
ActionParametersRetentionRuleField retentionRuleField = fields.getRetentionRuleField();
if(uniformSubdivisionField == null || uniformSubdivisionField.getValue() == null || uniformSubdivisionField.getValue().equals("")) {
if (StringUtils.isNotBlank(categoryId)) {
Category defaultCategory = rm.getCategory(categoryId);
List<String> retentionRules = defaultCategory.getRententionRules();
retentionRuleField.setOptions(retentionRules);
if (retentionRules.size() == 1) {
retentionRuleField.setFieldValue(retentionRules.get(0));
}
} else {
retentionRuleField.setOptions(new ArrayList<String>());
}
} else {
UniformSubdivision defaultSubdivision = rm.getUniformSubdivision(uniformSubdivisionField.getValue());
retentionRuleField.setOptions(defaultSubdivision.getRetentionRules());
}
}
private void updateFieldsWithUniformSubdivision(String uniformSubdivisionId) {
ConstellioFactories constellioFactories = fields.getConstellioFactories();
SessionContext sessionContext = fields.getSessionContext();
String collection = sessionContext.getCurrentCollection();
AppLayerFactory appLayerFactory = constellioFactories.getAppLayerFactory();
LookupRecordField uniformSubdivisionField = fields.getUniformSubdivision();
RMSchemasRecordsServices rm = new RMSchemasRecordsServices(collection, appLayerFactory);
ActionParametersRetentionRuleField retentionRuleField = fields.getRetentionRuleField();
if(uniformSubdivisionField == null || uniformSubdivisionField.getValue() == null || uniformSubdivisionField.getValue().equals("")) {
String categoryId = fields.getCategoryField().getFieldValue();
if (StringUtils.isNotBlank(categoryId)) {
Category defaultCategory = rm.getCategory(categoryId);
List<String> retentionRules = defaultCategory.getRententionRules();
retentionRuleField.setOptions(retentionRules);
if (retentionRules.size() == 1) {
retentionRuleField.setFieldValue(retentionRules.get(0));
}
} else {
retentionRuleField.setOptions(new ArrayList<String>());
}
} else {
UniformSubdivision defaultSubdivision = rm.getUniformSubdivision(uniformSubdivisionId);
retentionRuleField.setOptions(defaultSubdivision.getRetentionRules());
}
}
public boolean areUniformSubdivisionsEnabled() {
return new RMConfigs(fields.getConstellioFactories().getModelLayerFactory().getSystemConfigurationsManager()).areUniformSubdivisionEnabled();
}
}