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

de.gwdg.metadataqa.marc.utils.DataElementsStatictics Maven / Gradle / Ivy

package de.gwdg.metadataqa.marc.utils;

import de.gwdg.metadataqa.marc.Utils;
import de.gwdg.metadataqa.marc.definition.structure.ControlFieldDefinition;
import de.gwdg.metadataqa.marc.definition.structure.ControlfieldPositionDefinition;
import de.gwdg.metadataqa.marc.definition.structure.DataFieldDefinition;
import de.gwdg.metadataqa.marc.definition.structure.Indicator;
import de.gwdg.metadataqa.marc.definition.structure.MarcDefinition;
import de.gwdg.metadataqa.marc.definition.structure.SubfieldDefinition;
import de.gwdg.metadataqa.marc.definition.MarcVersion;
import org.apache.commons.lang3.StringUtils;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

public class DataElementsStatictics {

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

  public static Counter count() {
    Counter counter = new Counter<>();

    for (ControlfieldPositionDefinition subfield : MarcDefinition.getLeaderPositions())
      counter.count(DataElementType.controlFieldPositions);

    for (DataFieldDefinition subfield : MarcDefinition.getSimpleControlFields())
      counter.count(DataElementType.controlFields);

    for (ControlFieldDefinition controlField : MarcDefinition.getComplexControlFields()) {
      counter.count(DataElementType.controlFields);

      for (List controlFieldPositions : controlField.getControlfieldPositions().values())
        for (ControlfieldPositionDefinition controlFieldPosition : controlFieldPositions)
          counter.count(DataElementType.controlFieldPositions);
    }

    for (Class tagClass : MarcTagLister.listTags()) {

      MarcVersion version = Utils.getVersion(tagClass);
      Method getInstance;
      DataFieldDefinition fieldTag;
      try {
        getInstance = tagClass.getMethod("getInstance");
        fieldTag = (DataFieldDefinition) getInstance.invoke(tagClass);
        boolean isCore = (version == MarcVersion.MARC21);
        if (isCore)
          counter.count(DataElementType.coreFields);
        else
          counter.count(DataElementType.localFields);

        for (Indicator indicator : fieldTag.getIndicators())
          if (indicator != null && StringUtils.isNotBlank(indicator.getLabel()))
            if (isCore)
              counter.count(DataElementType.coreIndicators);
            else
              counter.count(DataElementType.localIndicators);

        if (fieldTag.getSubfields() != null)
          for (SubfieldDefinition subfield : fieldTag.getSubfields())
            if (isCore)
              counter.count(DataElementType.coreSubfields);
            else
              counter.count(DataElementType.localSubfields);

        if (isCore)
          if (fieldTag.getVersionSpecificSubfields() != null)
            for (MarcVersion localVersion : fieldTag.getVersionSpecificSubfields().keySet())
              for (SubfieldDefinition subfield : fieldTag.getVersionSpecificSubfields().get(localVersion))
                counter.count(DataElementType.localSubfields);


      } catch (NoSuchMethodException
              | IllegalAccessException
              | InvocationTargetException e) {
        logger.log(Level.WARNING, "error in count()", e);
      }
    }

    return counter;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy