summaryrefslogtreecommitdiffstats
path: root/vespajlib
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2018-01-22 22:36:25 +0100
committerJon Bratseth <bratseth@yahoo-inc.com>2018-01-22 22:36:25 +0100
commit3bf6d36ad2ef1997026737c7904df623925e6d45 (patch)
treedeb46596f02e8d6b4dbf0f4ad4fa9500e8873d48 /vespajlib
parent077a484b444b5a175d1f5d03d50a521eb8f64d46 (diff)
Correct path just once
Diffstat (limited to 'vespajlib')
-rw-r--r--vespajlib/src/main/java/com/yahoo/path/Path.java50
1 files changed, 23 insertions, 27 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/path/Path.java b/vespajlib/src/main/java/com/yahoo/path/Path.java
index da55c6767d1..c466fe50d6f 100644
--- a/vespajlib/src/main/java/com/yahoo/path/Path.java
+++ b/vespajlib/src/main/java/com/yahoo/path/Path.java
@@ -2,11 +2,14 @@
package com.yahoo.path;
import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableList;
import java.io.File;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
+import java.util.stream.Collectors;
/**
* Represents a path represented by a list of elements. Immutable
@@ -17,7 +20,7 @@ import java.util.List;
public final class Path {
private final String delimiter;
- private final List<String> elements = new ArrayList<>();
+ private final ImmutableList<String> elements;
/**
* Create an empty path.
@@ -39,7 +42,7 @@ public final class Path {
* @param elements a list of path elements
*/
private Path(List<String> elements, String delimiter) {
- this.elements.addAll(elements);
+ this.elements = ImmutableList.copyOf(elements);
this.delimiter = delimiter;
}
@@ -51,26 +54,20 @@ public final class Path {
/**
* Add path elements by splitting based on delimiter and appending to elements.
*/
- private void addElementsFromString(String path) {
- String[] pathElements = path.split(delimiter);
- if (pathElements != null) {
- for (String elem : pathElements) {
- if (!"".equals(elem)) {
- elements.add(elem);
- }
- }
- }
+ private static List<String> elementsOf(String path, String delimiter) {
+ return Arrays.stream(path.split(delimiter)).filter(e -> !"".equals(e)).collect(Collectors.toList());
}
/**
- * Append an element to the path. Returns a new path with this element appended.
- * @param name name of element to append.
- * @return this, for chaining
+ * Append an element to the path. Returns a new path with the given path appended.
+ *
+ * @param path the path to append to this
+ * @return the new path
*/
- public Path append(String name) {
- Path path = new Path(this);
- path.addElementsFromString(name);
- return path;
+ public Path append(String path) {
+ List<String> newElements = new ArrayList<>(this.elements);
+ newElements.addAll(elementsOf(path, delimiter));
+ return new Path(newElements, delimiter);
}
/**
@@ -80,9 +77,9 @@ public final class Path {
* @return a new path with argument appended to it.
*/
public Path append(Path path) {
- Path newPath = new Path(this);
- newPath.elements.addAll(path.elements);
- return newPath;
+ List<String> newElements = new ArrayList<>(this.elements);
+ newElements.addAll(path.elements());
+ return new Path(newElements, delimiter);
}
/**
@@ -90,9 +87,7 @@ public final class Path {
* @return the name
*/
public String getName() {
- if (elements.isEmpty()) {
- return "";
- }
+ if (elements.isEmpty()) return "";
return elements.get(elements.size() - 1);
}
@@ -141,6 +136,9 @@ public final class Path {
public Iterator<String> iterator() { return elements.iterator(); }
+ /** Returns an immutable list of the elements of this path in order */
+ public List<String> elements() { return elements; }
+
/**
* Convert to string.
*
@@ -171,9 +169,7 @@ public final class Path {
* @return a path object that may be used with the application package.
*/
public static Path fromString(String path, String delimiter) {
- Path pathObj = new Path(delimiter);
- pathObj.addElementsFromString(path);
- return pathObj;
+ return new Path(elementsOf(path, delimiter), delimiter);
}
/**