
io.virtdata.docsys.api.Docs Maven / Gradle / Ivy
package io.virtdata.docsys.api;
import io.virtdata.util.VirtDataResources;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.*;
import java.util.stream.Collectors;
public class Docs implements DocsInfo {
private LinkedList namespaces = new LinkedList<>();
public Docs() {
}
public Docs namespace(String namespace) {
return addNamespace(namespace);
}
public Docs addFirstFoundPath(String... potentials) {
Path pathIn = VirtDataResources.findPathIn(potentials);
if (pathIn==null || !Files.exists(pathIn)) {
throw new RuntimeException("Unable to find a path in one of " + Arrays.stream(potentials).collect(Collectors.joining(",")));
}
return this.addPath(pathIn);
}
public Docs addPath(Path path) {
if (namespaces.peekLast()==null) {
throw new RuntimeException("You must add a namespace first.");
}
namespaces.peekLast().addPath(path);
return this;
}
private Docs addNamespace(String namespace) {
namespaces.add(new DocsPath(namespace));
return this;
}
@Override
public void merge(DocsInfo other) {
for (DocPathInfo docPathInfo : other) {
this.namespace(docPathInfo.getNameSpace());
for (Path path : docPathInfo) {
this.addPath(path);
}
}
}
@Override
public List getPaths() {
List paths = new ArrayList<>();
for (DocsPath ns : this.namespaces) {
paths.addAll(ns.getPaths());
}
return paths;
}
@Override
public Map> getPathMap() {
Map> pm = new HashMap();
for (DocsPath ns : this.namespaces) {
pm.put(ns.getNameSpace(),new HashSet<>(ns.getPaths()));
}
return pm;
}
@Override
public Iterator iterator() {
List pathinfos = new ArrayList<>(this.namespaces);
return pathinfos.iterator();
}
public Map> getPathMaps() {
Map> maps = new HashMap<>();
for (DocsPath namespace : namespaces) {
Set paths = new HashSet<>();
namespace.forEach(paths::add);
maps.put(namespace.getNameSpace(),paths);
}
return maps;
}
public DocsInfo asDocsInfo() {
return (DocsInfo) this;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy