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

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