package com.constellio.model.services.schemas.impacts;
import java.util.ArrayList;
import java.util.List;
import com.constellio.model.entities.batchprocess.BatchProcessAction;
import com.constellio.model.entities.schemas.Metadata;
import com.constellio.model.services.schemas.builders.MetadataBuilder;
import com.constellio.model.services.schemas.builders.MetadataSchemaTypeBuilder;
import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder;
public class SchemaTypesAlterationImpactsCalculator {
public List<SchemaTypesAlterationImpact> calculatePotentialImpacts(MetadataSchemaTypesBuilder types) {
List<SchemaTypesAlterationImpact> impacts = new ArrayList<>();
//TODO Disabled, because there is a problem with impacts handling causing a change of status to destroy all search indexes.
// for (MetadataSchemaTypeBuilder type : types.getTypes()) {
// SchemaTypesAlterationImpact impact = calculatePotentialImpacts(type);
// if (impact != null) {
// impacts.add(impact);
// }
// }
return impacts;
}
private SchemaTypesAlterationImpact calculatePotentialImpacts(MetadataSchemaTypeBuilder type) {
List<String> reindexedMetadataForSearch = new ArrayList<>();
List<String> convertedToSingleValue = new ArrayList<>();
List<String> convertedToMultiValue = new ArrayList<>();
boolean reindexAutocomplete = false;
for (MetadataBuilder modifiedMetadata : type.getAllMetadatas()) {
Metadata originalMetadata = modifiedMetadata.getOriginalMetadata();
if (originalMetadata != null) {
if (originalMetadata.isMultivalue() && !modifiedMetadata.isMultivalue()) {
convertedToSingleValue.add(modifiedMetadata.getLocalCode());
}
if (!originalMetadata.isMultivalue() && modifiedMetadata.isMultivalue()) {
convertedToMultiValue.add(modifiedMetadata.getLocalCode());
}
if (originalMetadata.isSearchable() != modifiedMetadata.isSearchable()) {
reindexedMetadataForSearch.add(modifiedMetadata.getLocalCode());
}
if (originalMetadata.isSchemaAutocomplete() != modifiedMetadata.isSchemaAutocomplete()) {
reindexAutocomplete = true;
}
}
}
SchemaTypesAlterationImpact impact = null;
if (reindexAutocomplete || !reindexedMetadataForSearch.isEmpty() || !convertedToMultiValue.isEmpty()
|| !convertedToSingleValue.isEmpty()) {
BatchProcessAction batchProcessAction = new SchemaTypeAlterationBatchProcessAction(reindexedMetadataForSearch,
convertedToSingleValue, convertedToMultiValue);
impact = new SchemaTypesAlterationImpact(batchProcessAction, type.getCode());
}
return impact;
}
}