src/main/java/de/unixwork/uwproj/Project.java

Tue, 30 Jan 2024 21:32:11 +0100

author
Mike Becker <universe@uap-core.de>
date
Tue, 30 Jan 2024 21:32:11 +0100
changeset 114
0fa5a6f08245
parent 113
24f32dbd88cd
permissions
-rw-r--r--

remove unnecessary double-quotes in vars.mk - fixes #370

package de.unixwork.uwproj;

import org.w3c.dom.Element;

import java.util.*;

public class Project {
    private final HashMap<String, List<Dependency>> namedDependencies = new HashMap<>();
    private final List<Dependency> dependencies = new LinkedList<>();
    private final List<Target> targets = new LinkedList<>();
    private final List<Option> options = new LinkedList<>();
    private final List<Feature> features = new LinkedList<>();

    private final List<ConfigVar> configVarsList = new LinkedList<>();
    
    private final Set<String> lang = new HashSet<>();

    public Project(Element root) {
        Util.getChildElements(root).forEach(element -> {
            switch (element.getNodeName()) {
                case "config" -> Util.getChildElements(element).forEach(v -> {
                    if (v.getNodeName().equals("var")) {
                        configVarsList.add(new ConfigVar(v));
                    }
                });
                case "dependency" -> {
                    final var dependency = new Dependency(element);
                    lang.addAll(dependency.getLang());
                    if (dependency.hasName()) {
                        namedDependencies.computeIfAbsent(dependency.getId(), k -> new LinkedList<>()).add(dependency);
                    } else {
                        dependencies.add(dependency);
                    }
                }
                case "target" -> {
                    final var target = new Target(element);
                    targets.add(target);
                    features.addAll(target.getFeatures());
                    options.addAll(target.getOptions());
                }
            }
        });

        // add default target, if no target was specified
        if (targets.isEmpty()) {
            targets.add(Target.defaultTarget());
        }

        // check if some targets want all named dependencies
        targets.stream().filter(Target::wantsAllDependencies)
                .forEach(t -> t.replaceAllDependencies(namedDependencies.keySet()));
    }

    public List<NamedDependency> getNamedDependencies() {
        var ret = new LinkedList<NamedDependency>();
        for (var entry : namedDependencies.entrySet()) {
            ret.add(new NamedDependency(entry.getKey(), entry.getValue()));
        }
        return ret;
    }

    public List<Dependency> getDependencies() {
        return dependencies;
    }

    public List<Target> getTargets() {
        return targets;
    }

    public List<Option> getOptions() {
        return options;
    }

    public List<Feature> getFeatures() {
        return features;
    }

    public List<ConfigVar> getVars() {
        return configVarsList;
    }
    
    public Collection<String> getLang() {
        return lang;
    }
}

mercurial