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

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

package de.gwdg.metadataqa.marc.utils;

import de.gwdg.metadataqa.api.model.XmlFieldInstance;
import de.gwdg.metadataqa.api.model.pathcache.PathCache;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MarcCacheWrapper {

  private PathCache cache;
  private static final List controlfields = Arrays.asList("001", "003", "005", "006", "007", "008");

  public MarcCacheWrapper(PathCache cache) {
    this.cache = cache;
  }

  public String extractCompact(String tag) {
    String[] parts = tag.split("\\$");

    if (parts.length == 1)
      return extract(tag);

    return extract(parts[0], parts[1]);
  }

  public String extract(String tag) {
    return extract(tag, 0, null);
  }

  public String extract(String tag, String code) {
    return extract(tag, 0, code);
  }

  public String extract(String tag, int counter, String code) {
    String value = null;
    String path = createPath(tag, counter, code);
    if (path != null) {
      List list = cache.getCache().get(path);
      if (list != null && !list.isEmpty() && list.get(0) != null) {
        value = extractValues(path);
      }
    }
    return value;
  }

  private String createPath(String tag, int counter, String code) {
    String path = null;

    if (tag.equals("leader")) {
      path = "$.leader";
    } else if (isControlField(tag)) {
      path = String.format("$.controlfield[?(@.tag == '%s')].content", tag);
    } else {
      path = String.format("$.datafield[?(@.tag == '%s')]/%d/$.%s", tag, counter, getSuffix(code));
    }

    return path;
  }

  private String getSuffix(String code) {
    String suffix = "";
    if (code.equals("ind1") || code.equals("ind2"))
      suffix = code;
    else
      suffix = String.format("subfield[?(@.code == '%s')].content", code);
    return suffix;
  }

  private String extractValues(String path) {
    String value;List values = new ArrayList<>();
    for (XmlFieldInstance field : cache.getCache().get(path)) {
      if (field.getValue() != null)
        values.add(field.getValue());
    }
    value = StringUtils.join(values, "|");
    return value;
  }

  private boolean isControlField(String tag) {
    return controlfields.contains(tag);
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy