All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.gwdg.metadataqa.marc.definition.general.indexer.subject.SubjectIndexer Maven / Gradle / Ivy

package de.gwdg.metadataqa.marc.definition.general.indexer.subject;

import de.gwdg.metadataqa.marc.dao.DataField;
import de.gwdg.metadataqa.marc.MarcSubfield;
import de.gwdg.metadataqa.marc.Utils;
import de.gwdg.metadataqa.marc.cli.ClassificationAnalysis;
import de.gwdg.metadataqa.marc.utils.keygenerator.DataFieldKeyGenerator;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

abstract class SubjectIndexer {

  private static final Logger logger = Logger.getLogger(ClassificationAnalysis.class.getCanonicalName());

  protected void addUniqueValues(List values, MarcSubfield subfield) {
    String value = subfield.resolve();
    if (!values.contains(value)) {
      values.add(value);
    }
  }

  protected class KeyValuesExtractor {
    private DataField dataField;
    private DataFieldKeyGenerator keyGenerator;
    private String schemaAbbreviation;
    private String key;
    private List values;
    private boolean success = false;

    public KeyValuesExtractor(DataField dataField,
                              DataFieldKeyGenerator keyGenerator,
                              String schemaAbbreviation) {
      this.dataField = dataField;
      this.keyGenerator = keyGenerator;
      this.schemaAbbreviation = schemaAbbreviation;
    }

    public String getKey() {
      return key;
    }

    public List getValues() {
      return values;
    }

    public KeyValuesExtractor invoke() {
      List subfields = dataField.getSubfield("a");
      if (subfields == null || subfields.isEmpty()) {
        success = false;
        if (!dataField.getDefinition().getTag().equals("852"))
          logger.warning("No subfield $a in the field: " + dataField.toString());
      } else {
        key = keyGenerator.forSubfield(subfields.get(0)) + "_" + Utils.solarize(schemaAbbreviation);

        values = new ArrayList<>();
        for (MarcSubfield subfield : subfields) {
          addUniqueValues(values, subfield);
        }
        success = true;
      }

      return this;
    }

    public boolean hadSuccess() {
      return success;
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy