
de.gwdg.metadataqa.marc.definition.structure.Indicator Maven / Gradle / Ivy
package de.gwdg.metadataqa.marc.definition.structure;
import de.gwdg.metadataqa.marc.EncodedValue;
import de.gwdg.metadataqa.marc.Range;
import de.gwdg.metadataqa.marc.definition.FRBRFunction;
import de.gwdg.metadataqa.marc.definition.MarcVersion;
import java.util.*;
public class Indicator {
private DataFieldDefinition parent;
private String label = null;
private String bibframeTag = null;
private String mqTag = null;
private String indexTag = null;
private List codes;
protected List historicalCodes;
private Map codeIndex = new LinkedHashMap<>();
private Map historicalCodeIndex = new LinkedHashMap<>();
private Map ranges;
private String indicatorFlag;
private Map> versionSpecificCodes;
private List functions;
public Indicator() {}
public Indicator(String label) {
this.label = label;
}
public Indicator(String label, List codes) {
this.label = label;
this.codes = codes;
indexCodes();
}
public String getPath() {
return String.format("%s$%s", parent.getTag(), indicatorFlag);
}
public String getIndexTag() {
if (indexTag == null) {
if (mqTag != null)
indexTag = mqTag;
else if (bibframeTag != null)
indexTag = bibframeTag.replace("/", "");
else
indexTag = indicatorFlag;
}
return indexTag;
}
public Indicator setLabel(String label) {
this.label = label;
return this;
}
public Indicator setCodes(List codes) {
this.codes = codes;
return this;
}
public Indicator setCodes(String... input) {
codes = new ArrayList<>();
for (int i = 0; i();
for (int i = 0; i getCodes() {
return codes;
}
public EncodedValue getCode(String codeString) {
if (codeIndex.containsKey(codeString))
return codeIndex.get(codeString);
for (Range range : getRanges().keySet()) {
if (range.isValid(codeString))
return ranges.get(range);
}
return null;
}
public boolean hasCode(String code) {
if (codeIndex.containsKey(code))
return true;
for (Range range : getRanges().keySet()) {
if (range.isValid(code))
return true;
}
return false;
}
private Map getRanges() {
if (ranges == null) {
ranges = new HashMap<>();
if (codes != null) {
for (EncodedValue code : codes) {
if (code.isRange()) {
ranges.put(code.getRange(), code);
}
}
}
}
return ranges;
}
private void indexCodes() {
codeIndex = new LinkedHashMap<>();
for (EncodedValue code : codes) {
codeIndex.put(code.getCode(), code);
}
}
private void indexHistoricalCodes() {
historicalCodeIndex = new LinkedHashMap<>();
for (EncodedValue code : historicalCodes) {
historicalCodeIndex.put(code.getCode(), code);
}
}
public boolean isHistoricalCode(String code) {
return historicalCodes != null
&& !historicalCodes.isEmpty()
&& historicalCodeIndex.containsKey(code);
}
public void setIndicatorFlag(String indicatorFlag) {
this.indicatorFlag = indicatorFlag;
}
public void setParent(DataFieldDefinition parent) {
this.parent = parent;
}
public Indicator putVersionSpecificCodes(MarcVersion marcVersion, List codeList) {
if (versionSpecificCodes == null)
versionSpecificCodes = new EnumMap<>(MarcVersion.class);
versionSpecificCodes.put(marcVersion, codeList);
return this;
}
public boolean hasVersionSpecificCodes(MarcVersion marcVersion) {
return versionSpecificCodes.containsKey(marcVersion);
}
public List getHistoricalCodes() {
return historicalCodes;
}
public boolean isVersionSpecificCode(MarcVersion marcVersion, String code) {
return versionSpecificCodes != null
&& !versionSpecificCodes.isEmpty()
&& versionSpecificCodes.containsKey(marcVersion)
&& !versionSpecificCodes.get(marcVersion).isEmpty()
&& !versionSpecificCodes.get(marcVersion).contains(code);
}
@Override
public String toString() {
return "Indicator{" +
"label='" + label + '\'' +
", codes=" + codes +
", indicatorFlag='" + indicatorFlag + '\'' +
'}';
}
public Indicator setFrbrFunctions(FRBRFunction... functions) {
this.functions = Arrays.asList(functions);
return this;
}
public List getFrbrFunctions() {
return functions;
}
public String getIndicatorFlag() {
return indicatorFlag;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy