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

Fri, 05 Jan 2024 20:53:42 +0100

author
Mike Becker <universe@uap-core.de>
date
Fri, 05 Jan 2024 20:53:42 +0100
changeset 92
5a32534f2604
parent 78
c3a62e0baa9e
child 113
24f32dbd88cd
permissions
-rw-r--r--

fix empty dependencies element producing broken configure script - fixes #336

package de.unixwork.uwproj;

import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

import static de.unixwork.uwproj.Util.shId;
import static java.util.function.Predicate.not;

public class TargetData {
    private final List<Define> defines = new LinkedList<>();
    private final List<String> dependencies = new LinkedList<>();
    private final StringBuilder make = new StringBuilder();

    public static TargetData parse(Element element) {
        var target = new TargetData();

        NodeList nodes = element.getChildNodes();
        for (int i = 0; i < nodes.getLength(); i++) {
            Node node = nodes.item(i);
            if (node.getNodeType() == Node.ELEMENT_NODE) {
                Element elm = (Element) node;
                String n = elm.getNodeName();
                if (n.equals("define")) {
                    target.addDefine(
                            elm.getAttribute("name"),
                            elm.getAttribute("value")
                    );
                } else if (n.equals("dependencies")) {
                    Arrays.stream(Util.getContent(elm).split(","))
                            .map(String::trim)
                            .filter(not(String::isBlank))
                            .forEach(target::addDependency);
                } else if (n.equals("make")) {
                    target.addMake(Util.getContent(elm));
                }
            }
        }

        return target;
    }

    public List<Define> getDefines() {
        return defines;
    }

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

    public String getMake() {
        return make.toString();
    }

    public void addDefine(String name, String value) {
        if (name.isBlank()) {
            throw new IllegalArgumentException("define element requires name attribute");
        }
        defines.add(new Define(name, value));
    }

    public void addDependency(String d) {
        // we have to add the sanitized identifier to the list of dependencies
        dependencies.add(shId(d));
    }

    public void addMake(String m) {
        make.append(m.trim());
        make.append('\n');
    }
}

mercurial