summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2022-03-31 14:28:48 +0200
committerJon Marius Venstad <venstad@gmail.com>2022-03-31 14:28:48 +0200
commit9765bf389468f02f328f5cd80f6b8b9b61d47027 (patch)
tree20e31473333e7d57f52a1a0983a5414788e38da6
parent89e0f91aa4743809d955000b6d00fdef5a63085d (diff)
Use PatternedStringWrapper for TenantName, ApplicationName and InstanceName, with a lax pattern
-rw-r--r--application-model/pom.xml6
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/test/MockApplicationPackage.java2
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationId.java37
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationName.java39
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/InstanceName.java39
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/TenantName.java39
6 files changed, 48 insertions, 114 deletions
diff --git a/application-model/pom.xml b/application-model/pom.xml
index 3abf9851d5c..7eac247e249 100644
--- a/application-model/pom.xml
+++ b/application-model/pom.xml
@@ -23,6 +23,12 @@
</dependency>
<dependency>
<groupId>com.yahoo.vespa</groupId>
+ <artifactId>vespajlib</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
<artifactId>config-provisioning</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
diff --git a/config-model/src/main/java/com/yahoo/config/model/test/MockApplicationPackage.java b/config-model/src/main/java/com/yahoo/config/model/test/MockApplicationPackage.java
index 824bf248b5c..1838f1e36b7 100644
--- a/config-model/src/main/java/com/yahoo/config/model/test/MockApplicationPackage.java
+++ b/config-model/src/main/java/com/yahoo/config/model/test/MockApplicationPackage.java
@@ -99,7 +99,7 @@ public class MockApplicationPackage implements ApplicationPackage {
@SuppressWarnings("deprecation") // not redundant
@Override
public String getApplicationName() {
- return "mock application";
+ return "mock-application";
}
@Override
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationId.java b/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationId.java
index 12f4ba3f987..796fe586fb9 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationId.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationId.java
@@ -3,7 +3,9 @@ package com.yahoo.config.provision;
import com.yahoo.cloud.config.ApplicationIdConfig;
+import java.util.Comparator;
import java.util.Objects;
+import java.util.regex.Pattern;
/**
* A complete, immutable identification of an application instance.
@@ -14,6 +16,20 @@ import java.util.Objects;
*/
public class ApplicationId implements Comparable<ApplicationId> {
+ // TODO: remove '.' and '*' from this pattern.
+ static final Pattern namePattern = Pattern.compile("(?!\\.\\.)[a-zA-Z0-9_.*-]{1,64}");
+
+ private static final ApplicationId global = new ApplicationId(TenantName.from("*"),
+ ApplicationName.from("*"),
+ InstanceName.from("*")) {
+ @Override public boolean equals(Object other) { return this == other; }
+ };
+
+ private static final Comparator<ApplicationId> comparator = Comparator.comparing(ApplicationId::tenant)
+ .thenComparing(ApplicationId::application)
+ .thenComparing(ApplicationId::instance)
+ .thenComparing(global::equals, Boolean::compare);
+
private final TenantName tenant;
private final ApplicationName application;
private final InstanceName instance;
@@ -97,18 +113,7 @@ public class ApplicationId implements Comparable<ApplicationId> {
@Override
public int compareTo(ApplicationId other) {
- int diff;
-
- diff = tenant.compareTo(other.tenant);
- if (diff != 0) { return diff; }
-
- diff = application.compareTo(other.application);
- if (diff != 0) { return diff; }
-
- diff = instance.compareTo(other.instance);
- if (diff != 0) { return diff; }
-
- return 0;
+ return comparator.compare(this, other);
}
/** Returns an application id where all fields are "default" */
@@ -116,12 +121,10 @@ public class ApplicationId implements Comparable<ApplicationId> {
return new ApplicationId(TenantName.defaultName(), ApplicationName.defaultName(), InstanceName.defaultName());
}
- /** Returns an application id where all fields are "*" */
+ // TODO: kill this
+ /** Returns a very special application id, which is not equal to any other id. */
public static ApplicationId global() {
- return new Builder().tenant("*")
- .applicationName("*")
- .instanceName("*")
- .build();
+ return global;
}
public static class Builder {
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationName.java b/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationName.java
index f16c126dec2..f2585913015 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationName.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationName.java
@@ -1,7 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.provision;
-import java.util.Objects;
+import ai.vespa.validation.PatternedStringWrapper;
/**
* Represents an applications name, which may be any kind of string or default. This type is defined
@@ -10,28 +10,12 @@ import java.util.Objects;
* @author Ulf Lilleengen
* @since 5.25
*/
-public class ApplicationName implements Comparable<ApplicationName> {
+public class ApplicationName extends PatternedStringWrapper<ApplicationName> {
- private final String applicationName;
+ private static final ApplicationName defaultName = new ApplicationName("default");
- private ApplicationName(String applicationName) {
- this.applicationName = applicationName;
- }
-
- @Override
- public int hashCode() {
- return applicationName.hashCode();
- }
-
- @Override
- public boolean equals(Object obj) {
- if (!(obj instanceof ApplicationName)) return false;
- return Objects.equals(((ApplicationName) obj).applicationName, applicationName);
- }
-
- @Override
- public String toString() {
- return applicationName;
+ private ApplicationName(String name) {
+ super(name, ApplicationId.namePattern, "application name");
}
public static ApplicationName from(String name) {
@@ -39,20 +23,11 @@ public class ApplicationName implements Comparable<ApplicationName> {
}
public static ApplicationName defaultName() {
- return new ApplicationName("default");
+ return defaultName;
}
public boolean isDefault() {
- return equals(ApplicationName.defaultName());
- }
-
- public String value() {
- return applicationName;
- }
-
- @Override
- public int compareTo(ApplicationName name) {
- return this.applicationName.compareTo(name.applicationName);
+ return equals(defaultName);
}
}
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/InstanceName.java b/config-provisioning/src/main/java/com/yahoo/config/provision/InstanceName.java
index 8101b70b943..fc40d351465 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/InstanceName.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/InstanceName.java
@@ -1,7 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.provision;
-import java.util.Objects;
+import ai.vespa.validation.PatternedStringWrapper;
/**
* Represents an applications instance name, which may be any kind of string or default. This type is defined
@@ -9,30 +9,12 @@ import java.util.Objects;
*
* @author Ulf Lilleengen
*/
-public class InstanceName implements Comparable<InstanceName> {
+public class InstanceName extends PatternedStringWrapper<InstanceName> {
- private static final InstanceName defaultInstance = new InstanceName("default");
+ private static final InstanceName defaultName = new InstanceName("default");
- private final String instanceName;
-
- private InstanceName(String instanceName) {
- this.instanceName = instanceName;
- }
-
- @Override
- public int hashCode() {
- return instanceName.hashCode();
- }
-
- @Override
- public boolean equals(Object obj) {
- if (!(obj instanceof InstanceName)) return false;
- return Objects.equals(((InstanceName) obj).instanceName, instanceName);
- }
-
- @Override
- public String toString() {
- return instanceName;
+ private InstanceName(String name) {
+ super(name, ApplicationId.namePattern, "instance name");
}
public static InstanceName from(String name) {
@@ -40,22 +22,15 @@ public class InstanceName implements Comparable<InstanceName> {
}
public static InstanceName defaultName() {
- return defaultInstance;
+ return defaultName;
}
public boolean isDefault() {
- return equals(InstanceName.defaultName());
+ return equals(defaultName);
}
public boolean isTester() {
return value().endsWith("-t");
}
- public String value() { return instanceName; }
-
- @Override
- public int compareTo(InstanceName instance) {
- return instanceName.compareTo(instance.instanceName);
- }
-
}
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/TenantName.java b/config-provisioning/src/main/java/com/yahoo/config/provision/TenantName.java
index 92fe5345b4e..9909ab360a0 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/TenantName.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/TenantName.java
@@ -1,56 +1,31 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.provision;
-import java.util.Objects;
+import ai.vespa.validation.PatternedStringWrapper;
/**
* Represents a tenant in the provision API.
*
* @author Ulf Lilleengen
*/
-public class TenantName implements Comparable<TenantName> {
+public class TenantName extends PatternedStringWrapper<TenantName> {
- private final String name;
+ private static final TenantName defaultName = new TenantName("default");
private TenantName(String name) {
- this.name = name;
+ super(name, ApplicationId.namePattern, "tenant name");
}
- public String value() { return name; }
-
- /**
- * Create a {@link TenantName} with a given name.
- *
- * @param name Name of tenant.
- * @return instance of {@link TenantName}.
- */
public static TenantName from(String name) {
return new TenantName(name);
}
- @Override
- public int hashCode() {
- return name.hashCode();
- }
-
- @Override
- public boolean equals(Object obj) {
- if (!(obj instanceof TenantName)) return false;
- return Objects.equals(((TenantName)obj).value(), value());
- }
-
- @Override
- public String toString() {
- return name;
- }
-
public static TenantName defaultName() {
- return from("default");
+ return defaultName;
}
- @Override
- public int compareTo(TenantName that) {
- return this.name.compareTo(that.name);
+ public boolean isDefault() {
+ return equals(defaultName);
}
}