summaryrefslogtreecommitdiffstats
path: root/config-lib/src/main/java/com/yahoo/config/LeafNodeVector.java
diff options
context:
space:
mode:
Diffstat (limited to 'config-lib/src/main/java/com/yahoo/config/LeafNodeVector.java')
-rw-r--r--config-lib/src/main/java/com/yahoo/config/LeafNodeVector.java79
1 files changed, 79 insertions, 0 deletions
diff --git a/config-lib/src/main/java/com/yahoo/config/LeafNodeVector.java b/config-lib/src/main/java/com/yahoo/config/LeafNodeVector.java
new file mode 100644
index 00000000000..59e070f1d56
--- /dev/null
+++ b/config-lib/src/main/java/com/yahoo/config/LeafNodeVector.java
@@ -0,0 +1,79 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.config;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * A vector of leaf nodes.
+ *
+ * @author gjoranv
+ * @since 5.1.4
+ */
+public class LeafNodeVector<REAL, NODE extends LeafNode<REAL>> extends NodeVector<NODE> {
+
+ NODE defaultNode;
+
+ /**
+ * Creates a new vector with the given default node.
+ */
+ // TODO: remove this ctor when the library uses reflection via builders, and resizing won't be necessary
+ public LeafNodeVector(NODE defaultNode) {
+ assert (defaultNode != null) : "The default node cannot be null";
+
+ this.defaultNode = defaultNode;
+ if (createNew() == null) {
+ throw new NullPointerException("Unable to duplicate the default node.");
+ }
+ }
+
+ // TODO: take class instead of default node when the library uses reflection via builders
+ public LeafNodeVector(List<REAL> values, NODE defaultNode) {
+ this(defaultNode);
+ for (REAL value : values) {
+ NODE node = createNew();
+ node.value = value;
+ vector.add(node);
+ }
+ }
+
+ /**
+ * Creates a new Node by cloning the default node.
+ */
+ @SuppressWarnings("unchecked")
+ protected NODE createNew() {
+ return (NODE) (defaultNode).clone();
+ }
+
+ // TODO: create unmodifiable list in ctor when the library uses reflection via builders
+ @SuppressWarnings("unchecked")
+ public List<REAL> asList() {
+ List<REAL> ret = new ArrayList<REAL>();
+ for(NODE node : vector) {
+ ret.add(node.value());
+ }
+ return Collections.unmodifiableList(ret);
+ }
+
+ // TODO: Try to eliminate the need for this method when we have moved FileAcquirer to the config library
+ // It is needed now because the builder has a list of String, while REAL=FileReference.
+ public static LeafNodeVector<FileReference, FileNode> createFileNodeVector(Collection<String> values) {
+ List<FileReference> fileReferences = new ArrayList<FileReference>();
+ for (String s : values)
+ fileReferences.add(new FileReference(ReferenceNode.stripQuotes(s)));
+
+ return new LeafNodeVector<FileReference, FileNode>(fileReferences, new FileNode());
+ }
+
+ public static LeafNodeVector<Path, PathNode> createPathNodeVector(Collection<FileReference> values) {
+ List<Path> paths = new ArrayList<>();
+ for (FileReference fileReference : values)
+ paths.add(Paths.get(fileReference.value()));
+
+ return new LeafNodeVector<Path, PathNode>(paths, new PathNode());
+ }
+}