4 import org.w3c.dom.Node; |
4 import org.w3c.dom.Node; |
5 import org.w3c.dom.NodeList; |
5 import org.w3c.dom.NodeList; |
6 |
6 |
7 import javax.xml.parsers.DocumentBuilderFactory; |
7 import javax.xml.parsers.DocumentBuilderFactory; |
8 import java.io.File; |
8 import java.io.File; |
9 import java.util.*; |
9 import java.util.HashMap; |
|
10 import java.util.LinkedList; |
|
11 import java.util.List; |
|
12 import java.util.Optional; |
10 |
13 |
11 public class Project { |
14 public class Project { |
12 private final Properties properties = new Properties(); |
|
13 |
|
14 private final HashMap<String, List<Dependency>> namedDependencies = new HashMap<>(); |
15 private final HashMap<String, List<Dependency>> namedDependencies = new HashMap<>(); |
15 private final List<Dependency> dependencies = new LinkedList<>(); |
16 private final List<Dependency> dependencies = new LinkedList<>(); |
16 private final List<Target> targets = new LinkedList<>(); |
17 private final List<Target> targets = new LinkedList<>(); |
17 private final List<Option> options = new LinkedList<>(); |
18 private final List<Option> options = new LinkedList<>(); |
18 private final List<Feature> features = new LinkedList<>(); |
19 private final List<Feature> features = new LinkedList<>(); |
26 newDocumentBuilder(). |
27 newDocumentBuilder(). |
27 parse(file). |
28 parse(file). |
28 getDocumentElement(); |
29 getDocumentElement(); |
29 NodeList dependency_nodes = root.getElementsByTagName("dependency"); |
30 NodeList dependency_nodes = root.getElementsByTagName("dependency"); |
30 NodeList target_nodes = root.getElementsByTagName("target"); |
31 NodeList target_nodes = root.getElementsByTagName("target"); |
31 NodeList property_nodes = root.getElementsByTagName("property"); |
|
32 NodeList config_nodes = root.getElementsByTagName("config"); |
32 NodeList config_nodes = root.getElementsByTagName("config"); |
33 |
33 |
34 for (int i = 0; i < config_nodes.getLength(); i++) { |
34 for (int i = 0; i < config_nodes.getLength(); i++) { |
35 Element p = (Element) config_nodes.item(i); |
35 NodeList cfgs = config_nodes.item(i).getChildNodes(); |
36 NodeList cfgs = p.getChildNodes(); |
|
37 for (int c = 0; c < cfgs.getLength(); c++) { |
36 for (int c = 0; c < cfgs.getLength(); c++) { |
38 Node node = cfgs.item(c); |
37 Node node = cfgs.item(c); |
39 if (node.getNodeType() == Node.ELEMENT_NODE) { |
38 if (node.getNodeType() == Node.ELEMENT_NODE) { |
40 if (node.getNodeName().equals("var")) { |
39 if (node.getNodeName().equals("var")) { |
41 Optional.ofNullable(ConfigVar.parse((Element) node)).ifPresent(v -> { |
40 Optional.ofNullable(ConfigVar.parse((Element) node)).ifPresent(v -> { |
50 for (int i = 0; i < dependency_nodes.getLength(); i++) { |
49 for (int i = 0; i < dependency_nodes.getLength(); i++) { |
51 addDependency(Dependency.parse((Element) dependency_nodes.item(i))); |
50 addDependency(Dependency.parse((Element) dependency_nodes.item(i))); |
52 } |
51 } |
53 for (int i = 0; i < target_nodes.getLength(); i++) { |
52 for (int i = 0; i < target_nodes.getLength(); i++) { |
54 targets.add(Target.parse(this, (Element) target_nodes.item(i))); |
53 targets.add(Target.parse(this, (Element) target_nodes.item(i))); |
55 } |
|
56 for (int i = 0; i < property_nodes.getLength(); i++) { |
|
57 var p = (Element) property_nodes.item(i); |
|
58 String name = p.getAttribute("name"); |
|
59 String value = p.getAttribute("value"); |
|
60 if (!name.isBlank() && !value.isBlank()) { |
|
61 properties.setProperty(name, value); |
|
62 } else { |
|
63 throw new Exception("Missing property name or value"); |
|
64 } |
|
65 } |
54 } |
66 |
55 |
67 if (targets.isEmpty()) { |
56 if (targets.isEmpty()) { |
68 createDefaultTarget(); |
57 createDefaultTarget(); |
69 } |
58 } |