view env/lib/python3.9/site-packages/schema_salad/java/main_utils/IdMapLoader.java @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
line wrap: on
line source

package ${package}.utils;

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

public class IdMapLoader<T> implements Loader<T> {
  private final Loader<T> innerLoader;
  private final String mapSubject;
  private final String mapPredicate;

  public IdMapLoader(
      final Loader<T> innerLoader, final String mapSubject, final String mapPredicate) {
    this.innerLoader = innerLoader;
    this.mapSubject = mapSubject;
    this.mapPredicate = mapPredicate;
  }

  public T load(
      final Object doc_,
      final String baseUri,
      final LoadingOptions loadingOptions,
      final String docRoot) {
    Object doc = doc_;
    if (doc instanceof Map) {
      final Map<String, Object> docMap = (Map<String, Object>) doc;
      final List<Object> asList = new ArrayList();
      final TreeSet<String> sortedKeys = new TreeSet<String>();
      sortedKeys.addAll(docMap.keySet());
      for (final String key : sortedKeys) {
        final Object el = docMap.get(key);
        if (el instanceof Map) {
          final Map<String, Object> v2 = new HashMap<String, Object>((Map<String, Object>) el);
          v2.put(this.mapSubject, key);
          asList.add(v2);
        } else {
          if (this.mapPredicate != null) {
            final Map<String, Object> v3 = new HashMap<String, Object>();
            v3.put(this.mapPredicate, el);
            v3.put(this.mapSubject, key);
            asList.add(v3);
          } else {
            throw new ValidationException("No mapPredicate");
          }
        }
      }
      doc = asList;
    }
    return this.innerLoader.load(doc, baseUri, loadingOptions);
  }
}