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

de.gwdg.metadataqa.marc.utils.pica.PicaSchemaManager Maven / Gradle / Ivy

package de.gwdg.metadataqa.marc.utils.pica;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class PicaSchemaManager {
  Map directory = new HashMap<>();
  Map> tagIndex = new HashMap<>();

  public void add(PicaFieldDefinition definition) {
    String id = definition.getId();
    if (directory.containsKey(id)) {
      System.err.println("Tag is already defined! " + definition.getTag() + " " + directory.get(id));
    }
    directory.put(id, definition);
    if (!tagIndex.containsKey(definition.getTag())) {
      tagIndex.put(definition.getTag(), new ArrayList<>());
    }
    tagIndex.get(definition.getTag()).add(id);
  }

  public PicaFieldDefinition lookup(String searchTerm) {
    if (directory.containsKey(searchTerm))
      return directory.get(searchTerm);

    if (searchTerm.contains("/")) {
      String[] parts = searchTerm.split("/");
      String tag = parts[0];
      String occurence = parts[1];
      if (tagIndex.containsKey(tag)) {
        for (String id : tagIndex.get(tag)) {
          var candidate = directory.get(id);
          if (candidate.inRange(occurence))
            return candidate;
        }
      }
    } else {
      if (tagIndex.containsKey(searchTerm) && tagIndex.get(searchTerm).size() == 1) {
        String id = tagIndex.get(searchTerm).get(0);
        return directory.get(id);
      }
    }
    return null;
  }

  public int size() {
    return directory.size();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy