package com.constellio.model.entities.calculators;
import java.util.List;
import java.util.Map;
import com.constellio.model.entities.schemas.Metadata;
import com.constellio.model.services.records.RecordServicesRuntimeException.RecordServicesRuntimeException_CalculatorIsUsingAnForbiddenMetadata;
import com.constellio.model.services.schemas.MetadataList;
import com.constellio.model.services.schemas.SchemaUtils;
public class DynamicDependencyValues {
Map<String, Object> values;
private MetadataValueCalculator calculator;
private MetadataList availableMetadatas;
private List<String> availableMetadatasLocalCodes;
private MetadataList availableMetadatasWithValue;
public DynamicDependencyValues(MetadataValueCalculator calculator, Map<String, Object> values,
MetadataList availableMetadatas,
MetadataList availableMetadatasWithValue) {
this.calculator = calculator;
this.values = values;
this.availableMetadatas = availableMetadatas;
this.availableMetadatasLocalCodes = availableMetadatas.toLocalCodesList();
this.availableMetadatasWithValue = availableMetadatasWithValue;
}
public <T> T getValue(Metadata metadata) {
return getValue(metadata.getLocalCode());
}
public <T> T getValue(String localCode) {
if (localCode.contains("_")) {
String[] parts = localCode.split("_");
localCode = parts[parts.length - 1];
}
if (!availableMetadatasLocalCodes.contains(localCode)) {
throw new RecordServicesRuntimeException_CalculatorIsUsingAnForbiddenMetadata(
calculator.getClass().getName(), localCode);
}
return (T) values.get(localCode);
}
public MetadataList getAvailableMetadatas() {
return availableMetadatas;
}
public MetadataList getAvailableMetadatasWithAValue() {
return availableMetadatasWithValue;
}
public boolean isAvailable(String metadata) {
String localCode = new SchemaUtils().getLocalCodeFromMetadataCode(metadata);
return getAvailableMetadatas().containsMetadataWithLocalCode(localCode);
}
}