package com.constellio.model.services.records.populators;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.schemas.Metadata;
import com.constellio.model.entities.schemas.MetadataSchema;
import com.constellio.model.entities.schemas.MetadataSchemaTypes;
import com.constellio.model.services.records.FieldsPopulator;
import com.constellio.model.services.records.RecordImplRuntimeException.RecordImplException_PopulatorReturnedNullValue;
public abstract class SeparatedFieldsPopulator implements FieldsPopulator {
boolean fullRewrite;
MetadataSchemaTypes types;
protected SeparatedFieldsPopulator(
MetadataSchemaTypes types, boolean fullRewrite) {
this.types = types;
this.fullRewrite = fullRewrite;
}
@Override
public Map<String, Object> populateCopyfields(MetadataSchema schema, Record record) {
Map<String, Object> fields = new HashMap<>();
List<Metadata> metadatas = record.getModifiedMetadatas(types);
if (fullRewrite) {
metadatas = schema.getMetadatas();
}
for (Metadata modifiedMetadata : metadatas) {
Object value = record.get(modifiedMetadata);
populateCopyFields(fields, modifiedMetadata, value);
}
return fields;
}
private void populateCopyFields(Map<String, Object> fields, Metadata modifiedMetadata, Object value) {
Map<String, Object> values = populateCopyfields(modifiedMetadata, value);
for (Map.Entry<String, Object> entry : values.entrySet()) {
if (entry.getValue() == null) {
throw new RecordImplException_PopulatorReturnedNullValue(this, entry.getKey());
}
fields.put(entry.getKey(), entry.getValue());
}
}
abstract Map<String, Object> populateCopyfields(Metadata metadata, Object value);
}