diff env/lib/python3.7/site-packages/schema_salad/java/main_utils/Loader.java @ 0:26e78fe6e8c4 draft

"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author shellac
date Sat, 02 May 2020 07:14:21 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/env/lib/python3.7/site-packages/schema_salad/java/main_utils/Loader.java	Sat May 02 07:14:21 2020 -0400
@@ -0,0 +1,111 @@
+package ${package}.utils;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public interface Loader<T> {
+
+  abstract T load(
+      final Object doc,
+      final String baseUri,
+      final LoadingOptions loadingOptions,
+      final String docRoot);
+
+  default T load(final Object doc, final String baseUri, final LoadingOptions loadingOptions) {
+    return load(doc, baseUri, loadingOptions, null);
+  }
+
+  default T documentLoad(
+      final String doc, final String baseUri, final LoadingOptions loadingOptions) {
+    return load(doc, baseUri, loadingOptions);
+  }
+
+  default T documentLoad(
+      final Map<String, Object> doc_, final String baseUri_, final LoadingOptions loadingOptions_) {
+    Map<String, Object> doc = doc_;
+    LoadingOptions loadingOptions = loadingOptions_;
+    if (doc.containsKey("$namespaces")) {
+      final Map<String, String> namespaces = (Map<String, String>) doc.get("$namespaces");
+      loadingOptions =
+          new LoadingOptionsBuilder().copiedFrom(loadingOptions).setNamespaces(namespaces).build();
+      doc = copyWithoutKey(doc, "$namespaces");
+    }
+    String baseUri = baseUri_;
+    if (doc.containsKey("$base")) {
+      baseUri = (String) doc.get("$base");
+    }
+    if (doc.containsKey("$graph")) {
+      return load(doc.get("$graph"), baseUri, loadingOptions);
+    } else {
+      return load(doc, baseUri, loadingOptions, baseUri);
+    }
+  }
+
+  default T documentLoad(
+      final List<Object> doc, final String baseUri, final LoadingOptions loadingOptions) {
+    return load(doc, baseUri, loadingOptions);
+  }
+
+  default T documentLoadByUrl(final String url, final LoadingOptions loadingOptions) {
+    if (loadingOptions.idx.containsKey(url)) {
+      return documentLoad(loadingOptions.idx.get(url), url, loadingOptions);
+    }
+
+    final String text = loadingOptions.fetcher.fetchText(url);
+    final Map<String, Object> result = YamlUtils.mapFromString(text);
+    loadingOptions.idx.put(url, result);
+    final LoadingOptionsBuilder urlLoadingOptions =
+        new LoadingOptionsBuilder().copiedFrom(loadingOptions).setFileUri(url);
+    return documentLoad(result, url, urlLoadingOptions.build());
+  }
+
+  default T loadField(
+      final Object val_, final String baseUri, final LoadingOptions loadingOptions) {
+    Object val = val_;
+    if (val instanceof Map) {
+      Map<String, Object> valMap = (Map<String, Object>) val;
+      if (valMap.containsKey("$import")) {
+        if (loadingOptions.fileUri == null) {
+          throw new ValidationException("Cannot load $import without fileuri");
+        }
+        return documentLoadByUrl(
+            loadingOptions.fetcher.urlJoin(loadingOptions.fileUri, (String) valMap.get("$import")),
+            loadingOptions);
+      } else if (valMap.containsKey("$include")) {
+        if (loadingOptions.fileUri == null) {
+          throw new ValidationException("Cannot load $import without fileuri");
+        }
+        val =
+            loadingOptions.fetcher.fetchText(
+                loadingOptions.fetcher.urlJoin(
+                    loadingOptions.fileUri, (String) valMap.get("$include")));
+      }
+    }
+    return load(val, baseUri, loadingOptions);
+  }
+
+  private Map<String, Object> copyWithoutKey(final Map<String, Object> doc, final String key) {
+    final Map<String, Object> result = new HashMap();
+    for (final Map.Entry<String, Object> entry : doc.entrySet()) {
+      if (!entry.getKey().equals(key)) {
+        result.put(entry.getKey(), entry.getValue());
+      }
+    }
+    return result;
+  }
+
+  public static <T> T validateOfJavaType(final Class<T> clazz, final Object doc) {
+    if (!clazz.isInstance(doc)) {
+      String className = "null";
+      if (doc != null) {
+        className = doc.getClass().getName();
+      }
+      final String message =
+          String.format(
+              "Expected object with Java type of %s but got %s", clazz.getName(), className);
+      throw new ValidationException(message);
+    }
+    return (T) doc;
+  }
+}