Refactor construction of application objects
- Use a builder and make the constructors private for DefaultApplication
- Make DefaultApplication immutable
- Use a builder and make the constructors private for DefaultApplicationDescription
- Make DefaultApplicationDescription immutable
Change-Id: I9499981bd2c0f48aede40682260d51eeae2cab98
diff --git a/core/api/src/main/java/org/onosproject/app/DefaultApplicationDescription.java b/core/api/src/main/java/org/onosproject/app/DefaultApplicationDescription.java
index 2e0988b..3862718 100644
--- a/core/api/src/main/java/org/onosproject/app/DefaultApplicationDescription.java
+++ b/core/api/src/main/java/org/onosproject/app/DefaultApplicationDescription.java
@@ -15,15 +15,17 @@
*/
package org.onosproject.app;
-import org.onosproject.core.ApplicationRole;
-import org.onosproject.core.Version;
-import org.onosproject.security.Permission;
-
import java.net.URI;
import java.util.List;
import java.util.Optional;
import java.util.Set;
+import org.onosproject.core.ApplicationRole;
+import org.onosproject.core.Version;
+import org.onosproject.security.Permission;
+
+import com.google.common.collect.ImmutableList;
+
import static com.google.common.base.MoreObjects.toStringHelper;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
@@ -31,7 +33,7 @@
/**
* Default implementation of network control/management application descriptor.
*/
-public class DefaultApplicationDescription implements ApplicationDescription {
+public final class DefaultApplicationDescription implements ApplicationDescription {
private final String name;
private final Version version;
@@ -49,6 +51,14 @@
private final List<String> requiredApps;
/**
+ * Default constructor is hidden to prevent calls to new.
+ */
+ private DefaultApplicationDescription() {
+ // Should not happen
+ throw new UnsupportedOperationException();
+ }
+
+ /**
* Creates a new application descriptor using the supplied data.
*
* @param name application name
@@ -66,27 +76,26 @@
* @param features application features
* @param requiredApps list of required application names
*/
- public DefaultApplicationDescription(String name, Version version, String title,
- String description, String origin, String category,
- String url, String readme, byte[] icon,
- ApplicationRole role, Set<Permission> permissions,
- URI featuresRepo, List<String> features,
- List<String> requiredApps) {
- this.name = checkNotNull(name, "Name cannot be null");
- this.version = checkNotNull(version, "Version cannot be null");
- this.title = checkNotNull(title, "Title cannot be null");
- this.description = checkNotNull(description, "Description cannot be null");
- this.origin = checkNotNull(origin, "Origin cannot be null");
- this.category = checkNotNull(category, "Category cannot be null");
+ private DefaultApplicationDescription(String name, Version version, String title,
+ String description, String origin, String category,
+ String url, String readme, byte[] icon,
+ ApplicationRole role, Set<Permission> permissions,
+ URI featuresRepo, List<String> features,
+ List<String> requiredApps) {
+ this.name = name;
+ this.version = version;
+ this.title = title;
+ this.description = description;
+ this.origin = origin;
+ this.category = category;
this.url = url;
- this.readme = checkNotNull(readme, "Readme cannot be null");
+ this.readme = readme;
this.icon = icon;
- this.role = checkNotNull(role, "Role cannot be null");
- this.permissions = checkNotNull(permissions, "Permissions cannot be null");
+ this.role = role;
+ this.permissions = permissions;
this.featuresRepo = Optional.ofNullable(featuresRepo);
- this.features = checkNotNull(features, "Features cannot be null");
- this.requiredApps = checkNotNull(requiredApps, "Required apps cannot be null");
- checkArgument(!features.isEmpty(), "There must be at least one feature");
+ this.features = ImmutableList.copyOf(features);
+ this.requiredApps = ImmutableList.copyOf(requiredApps);
}
@Override
@@ -177,4 +186,220 @@
.add("requiredApps", requiredApps)
.toString();
}
+
+ /**
+ * Returns a default application description builder.
+ *
+ * @return builder
+ */
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ /**
+ * Default application description builder.
+ */
+ public static final class Builder {
+
+ private String name;
+ private Version version;
+ private String title;
+ private String description;
+ private String category;
+ private String url;
+ private String readme;
+ private byte[] icon;
+ private String origin;
+ private ApplicationRole role;
+ private Set<Permission> permissions;
+ private URI featuresRepo;
+ private List<String> features;
+ private List<String> requiredApps;
+
+ /**
+ * Default constructor for the builder.
+ */
+ public Builder() {}
+
+ /**
+ * Adds an application id.
+ *
+ * @param name application name
+ * @return builder
+ */
+ public Builder withName(String name) {
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * Adds a version string.
+ *
+ * @param version version string
+ * @return builder
+ */
+ public Builder withVersion(Version version) {
+ this.version = version;
+ return this;
+ }
+
+ /**
+ * Adds a title string.
+ *
+ * @param title title string
+ * @return builder
+ */
+ public Builder withTitle(String title) {
+ this.title = title;
+ return this;
+ }
+
+ /**
+ * Adds a description string.
+ *
+ * @param description description string
+ * @return builder
+ */
+ public Builder withDescription(String description) {
+ this.description = description;
+ return this;
+ }
+
+ /**
+ * Adds a category string.
+ *
+ * @param category category string
+ * @return builder
+ */
+ public Builder withCategory(String category) {
+ this.category = category;
+ return this;
+ }
+
+ /**
+ * Adds a URL string.
+ *
+ * @param url url string
+ * @return builder
+ */
+ public Builder withUrl(String url) {
+ this.url = url;
+ return this;
+ }
+
+ /**
+ * Adds a readme string.
+ *
+ * @param readme readme string
+ * @return builder
+ */
+ public Builder withReadme(String readme) {
+ this.readme = readme;
+ return this;
+ }
+
+ /**
+ * Adds an icon.
+ *
+ * @param icon icon data
+ * @return builder
+ */
+ public Builder withIcon(byte[] icon) {
+ this.icon = icon;
+ return this;
+ }
+
+ /**
+ * Adds an origin string.
+ *
+ * @param origin origin string
+ * @return builder
+ */
+ public Builder withOrigin(String origin) {
+ this.origin = origin;
+ return this;
+ }
+
+ /**
+ * Adds an application role.
+ *
+ * @param role application role
+ * @return builder
+ */
+ public Builder withRole(ApplicationRole role) {
+ this.role = role;
+ return this;
+ }
+
+ /**
+ * Adds a permissions set.
+ *
+ * @param permissions permissions set
+ * @return builder
+ */
+ public Builder withPermissions(Set<Permission> permissions) {
+ this.permissions = permissions;
+ return this;
+ }
+
+ /**
+ * Adds a URI for a features repository.
+ *
+ * @param featuresRepo Optional URI for a features repository
+ * @return builder
+ */
+ public Builder withFeaturesRepo(URI featuresRepo) {
+ this.featuresRepo = featuresRepo;
+ return this;
+ }
+
+ /**
+ * Adds a features list.
+ *
+ * @param features features list
+ * @return builder
+ */
+ public Builder withFeatures(List<String> features) {
+ this.features = features;
+ return this;
+ }
+
+ /**
+ * Adds a list of required applications.
+ *
+ * @param requiredApps List of name strings of required applications
+ * @return builder
+ */
+ public Builder withRequiredApps(List<String> requiredApps) {
+ this.requiredApps = requiredApps;
+ return this;
+ }
+
+ /**
+ * Builds a default application object from the gathered parameters.
+ *
+ * @return new default application
+ */
+ public DefaultApplicationDescription build() {
+ checkNotNull(name, "Name cannot be null");
+ checkNotNull(version, "Version cannot be null");
+ checkNotNull(title, "Title cannot be null");
+ checkNotNull(description, "Description cannot be null");
+ checkNotNull(origin, "Origin cannot be null");
+ checkNotNull(category, "Category cannot be null");
+ checkNotNull(readme, "Readme cannot be null");
+ checkNotNull(role, "Role cannot be null");
+ checkNotNull(permissions, "Permissions cannot be null");
+ checkNotNull(features, "Features cannot be null");
+ checkNotNull(requiredApps, "Required apps cannot be null");
+ checkArgument(!features.isEmpty(), "There must be at least one feature");
+
+ return new DefaultApplicationDescription(name, version, title,
+ description, origin, category,
+ url, readme, icon,
+ role, permissions,
+ featuresRepo, features,
+ requiredApps);
+ }
+ }
}
diff --git a/core/api/src/main/java/org/onosproject/core/DefaultApplication.java b/core/api/src/main/java/org/onosproject/core/DefaultApplication.java
index f780623..1eb83b4 100644
--- a/core/api/src/main/java/org/onosproject/core/DefaultApplication.java
+++ b/core/api/src/main/java/org/onosproject/core/DefaultApplication.java
@@ -17,6 +17,8 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
+
+import org.onosproject.app.ApplicationDescription;
import org.onosproject.security.Permission;
import java.net.URI;
@@ -32,7 +34,7 @@
/**
* Default implementation of network control/management application descriptor.
*/
-public class DefaultApplication implements Application {
+public final class DefaultApplication implements Application {
private final ApplicationId appId;
private final Version version;
@@ -50,6 +52,14 @@
private final List<String> requiredApps;
/**
+ * Default constructor is hidden to prevent calls to new.
+ */
+ private DefaultApplication() {
+ // should never happen
+ throw new UnsupportedOperationException();
+ }
+
+ /**
* Creates a new application descriptor using the supplied data.
*
* @param appId application identifier
@@ -67,33 +77,26 @@
* @param features application features
* @param requiredApps list of required application names
*/
- public DefaultApplication(ApplicationId appId, Version version, String title,
+ private DefaultApplication(ApplicationId appId, Version version, String title,
String description, String origin, String category,
String url, String readme, byte[] icon,
ApplicationRole role, Set<Permission> permissions,
Optional<URI> featuresRepo, List<String> features,
List<String> requiredApps) {
- this.appId = checkNotNull(appId, "ID cannot be null");
- this.version = checkNotNull(version, "Version cannot be null");
- this.title = checkNotNull(title, "Title cannot be null");
- this.description = checkNotNull(description, "Description cannot be null");
- this.origin = checkNotNull(origin, "Origin cannot be null");
- this.category = checkNotNull(category, "Category cannot be null");
+ this.appId = appId;
+ this.version = version;
+ this.title = title;
+ this.description = description;
+ this.origin = origin;
+ this.category = category;
this.url = url;
- this.readme = checkNotNull(readme, "Readme cannot be null");
+ this.readme = readme;
this.icon = icon == null ? new byte[0] : icon.clone();
- this.role = checkNotNull(role, "Role cannot be null");
- this.permissions = ImmutableSet.copyOf(
- checkNotNull(permissions, "Permissions cannot be null")
- );
- this.featuresRepo = checkNotNull(featuresRepo, "Features repo cannot be null");
- this.features = ImmutableList.copyOf(
- checkNotNull(features, "Features cannot be null")
- );
- this.requiredApps = ImmutableList.copyOf(
- checkNotNull(requiredApps, "Required apps cannot be null")
- );
- checkArgument(!features.isEmpty(), "There must be at least one feature");
+ this.role = role;
+ this.permissions = ImmutableSet.copyOf(permissions);
+ this.featuresRepo = featuresRepo;
+ this.features = ImmutableList.copyOf(features);
+ this.requiredApps = ImmutableList.copyOf(requiredApps);
}
@Override
@@ -217,4 +220,317 @@
.add("requiredApps", requiredApps)
.toString();
}
+
+ /**
+ * Returns a default application builder.
+ *
+ * @return builder
+ */
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ /**
+ * Creates a new builder as a copy of an existing builder.
+ *
+ * @param builder existing builder to copy
+ * @return new builder
+ */
+ public static Builder builder(Builder builder) {
+ return new Builder(builder);
+ }
+
+ /**
+ * Creates a new builder as a copy of an existing application.
+ *
+ * @param application existing application to copy
+ * @return new builder
+ */
+ public static Builder builder(Application application) {
+ return new Builder(application);
+ }
+
+ /**
+ * Creates a new builder as a copy of an existing application description.
+ *
+ * @param appDesc existing application description
+ * @return new builder
+ */
+ public static Builder builder(ApplicationDescription appDesc) {
+ return new Builder(appDesc);
+ }
+
+
+ /**
+ * Default application builder.
+ */
+ public static final class Builder {
+
+ private ApplicationId appId;
+ private Version version;
+ private String title;
+ private String description;
+ private String category;
+ private String url;
+ private String readme;
+ private byte[] icon;
+ private String origin;
+ private ApplicationRole role;
+ private Set<Permission> permissions;
+ private Optional<URI> featuresRepo;
+ private List<String> features;
+ private List<String> requiredApps;
+
+ /**
+ * Default constructor for the builder.
+ */
+ public Builder() {}
+
+ /**
+ * Updates the builder to be a copy of an existing builder.
+ *
+ * @param builder existing builder to copy
+ */
+ public Builder(Builder builder) {
+ this.appId = builder.appId;
+ this.version = builder.version;
+ this.title = builder.title;
+ this.description = builder.description;
+ this.category = builder.category;
+ this.url = builder.url;
+ this.readme = builder.readme;
+ this.icon = builder.icon;
+ this.origin = builder.origin;
+ this.role = builder.role;
+ this.permissions = builder.permissions;
+ this.featuresRepo = builder.featuresRepo;
+ this.features = builder.features;
+ this.requiredApps = builder.requiredApps;
+ }
+
+ /**
+ * Updates the builder to be a copy of an existing application.
+ *
+ * @param application existing application to copy
+ */
+ public Builder(Application application) {
+ this.appId = application.id();
+ this.version = application.version();
+ this.title = application.title();
+ this.description = application.description();
+ this.category = application.category();
+ this.url = application.url();
+ this.readme = application.readme();
+ this.icon = application.icon();
+ this.origin = application.origin();
+ this.role = application.role();
+ this.permissions = application.permissions();
+ this.featuresRepo = application.featuresRepo();
+ this.features = application.features();
+ this.requiredApps = application.requiredApps();
+ }
+
+ /**
+ * Updates the builder to be a copy of an existing application description.
+ *
+ * @param appDesc existing application description
+ */
+ public Builder(ApplicationDescription appDesc) {
+ this.version = appDesc.version();
+ this.title = appDesc.title();
+ this.description = appDesc.description();
+ this.category = appDesc.category();
+ this.url = appDesc.url();
+ this.readme = appDesc.readme();
+ this.icon = appDesc.icon();
+ this.origin = appDesc.origin();
+ this.role = appDesc.role();
+ this.permissions = appDesc.permissions();
+ this.featuresRepo = appDesc.featuresRepo();
+ this.features = appDesc.features();
+ this.requiredApps = appDesc.requiredApps();
+ }
+
+ /**
+ * Adds an application id.
+ *
+ * @param appId application id
+ * @return builder
+ */
+ public Builder withAppId(ApplicationId appId) {
+ this.appId = appId;
+ return this;
+ }
+
+ /**
+ * Adds a version string.
+ *
+ * @param version version string
+ * @return builder
+ */
+ public Builder withVersion(Version version) {
+ this.version = version;
+ return this;
+ }
+
+ /**
+ * Adds a title string.
+ *
+ * @param title title string
+ * @return builder
+ */
+ public Builder withTitle(String title) {
+ this.title = title;
+ return this;
+ }
+
+ /**
+ * Adds a description string.
+ *
+ * @param description description string
+ * @return builder
+ */
+ public Builder withDescription(String description) {
+ this.description = description;
+ return this;
+ }
+
+ /**
+ * Adds a category string.
+ *
+ * @param category category string
+ * @return builder
+ */
+ public Builder withCategory(String category) {
+ this.category = category;
+ return this;
+ }
+
+ /**
+ * Adds a URL string.
+ *
+ * @param url url string
+ * @return builder
+ */
+ public Builder withUrl(String url) {
+ this.url = url;
+ return this;
+ }
+
+ /**
+ * Adds a readme string.
+ *
+ * @param readme readme string
+ * @return builder
+ */
+ public Builder withReadme(String readme) {
+ this.readme = readme;
+ return this;
+ }
+
+ /**
+ * Adds an icon.
+ *
+ * @param icon icon data
+ * @return builder
+ */
+ public Builder withIcon(byte[] icon) {
+ this.icon = icon;
+ return this;
+ }
+
+ /**
+ * Adds an origin string.
+ *
+ * @param origin origin string
+ * @return builder
+ */
+ public Builder withOrigin(String origin) {
+ this.origin = origin;
+ return this;
+ }
+
+ /**
+ * Adds an application role.
+ *
+ * @param role application role
+ * @return builder
+ */
+ public Builder withRole(ApplicationRole role) {
+ this.role = role;
+ return this;
+ }
+
+ /**
+ * Adds a permissions set.
+ *
+ * @param permissions permissions set
+ * @return builder
+ */
+ public Builder withPermissions(Set<Permission> permissions) {
+ this.permissions = permissions;
+ return this;
+ }
+
+ /**
+ * Adds a URI for a features repository.
+ *
+ * @param featuresRepo Optional URI for a features repository
+ * @return builder
+ */
+ public Builder withFeaturesRepo(Optional<URI> featuresRepo) {
+ this.featuresRepo = featuresRepo;
+ return this;
+ }
+
+ /**
+ * Adds a features list.
+ *
+ * @param features features list
+ * @return builder
+ */
+ public Builder withFeatures(List<String> features) {
+ this.features = features;
+ return this;
+ }
+
+ /**
+ * Adds a list of required applications.
+ *
+ * @param requiredApps List of name strings of required applications
+ * @return builder
+ */
+ public Builder withRequiredApps(List<String> requiredApps) {
+ this.requiredApps = requiredApps;
+ return this;
+ }
+
+ /**
+ * Builds a default application object from the gathered parameters.
+ *
+ * @return new default application
+ */
+ public DefaultApplication build() {
+ checkNotNull(appId, "ID cannot be null");
+ checkNotNull(version, "Version cannot be null");
+ checkNotNull(title, "Title cannot be null");
+ checkNotNull(description, "Description cannot be null");
+ checkNotNull(origin, "Origin cannot be null");
+ checkNotNull(category, "Category cannot be null");
+ checkNotNull(readme, "Readme cannot be null");
+ checkNotNull(role, "Role cannot be null");
+ checkNotNull(permissions, "Permissions cannot be null");
+ checkNotNull(featuresRepo, "Features repo cannot be null");
+ checkNotNull(features, "Features cannot be null");
+ checkNotNull(requiredApps, "Required apps cannot be null");
+ checkArgument(!features.isEmpty(), "There must be at least one feature");
+
+ return new DefaultApplication(appId, version, title,
+ description, origin, category,
+ url, readme, icon,
+ role, permissions,
+ featuresRepo, features,
+ requiredApps);
+ }
+ }
}
diff --git a/core/api/src/test/java/org/onosproject/app/ApplicationEventTest.java b/core/api/src/test/java/org/onosproject/app/ApplicationEventTest.java
index 3cdedd2..61538f0 100644
--- a/core/api/src/test/java/org/onosproject/app/ApplicationEventTest.java
+++ b/core/api/src/test/java/org/onosproject/app/ApplicationEventTest.java
@@ -32,9 +32,22 @@
public class ApplicationEventTest extends AbstractEventTest {
private Application createApp() {
- return new DefaultApplication(APP_ID, VER, TITLE, DESC, ORIGIN, CATEGORY,
- URL, README, ICON, ROLE, PERMS,
- Optional.of(FURL), FEATURES, APPS);
+ return DefaultApplication.builder()
+ .withAppId(APP_ID)
+ .withVersion(VER)
+ .withTitle(TITLE)
+ .withDescription(DESC)
+ .withOrigin(ORIGIN)
+ .withCategory(CATEGORY)
+ .withUrl(URL)
+ .withReadme(README)
+ .withIcon(ICON)
+ .withRole(ROLE)
+ .withPermissions(PERMS)
+ .withFeaturesRepo(Optional.of(FURL))
+ .withFeatures(FEATURES)
+ .withRequiredApps(APPS)
+ .build();
}
@Test
@@ -53,4 +66,4 @@
validateEvent(event, APP_ACTIVATED, app, before, after);
}
-}
\ No newline at end of file
+}
diff --git a/core/api/src/test/java/org/onosproject/app/DefaultApplicationDescriptionTest.java b/core/api/src/test/java/org/onosproject/app/DefaultApplicationDescriptionTest.java
index ac8d971..a935c1b 100644
--- a/core/api/src/test/java/org/onosproject/app/DefaultApplicationDescriptionTest.java
+++ b/core/api/src/test/java/org/onosproject/app/DefaultApplicationDescriptionTest.java
@@ -29,6 +29,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
/**
@@ -53,12 +54,34 @@
public static final List<String> FEATURES = ImmutableList.of("foo", "bar");
public static final List<String> APPS = ImmutableList.of("fifi");
+ /**
+ * Checks that the DefaultApplicationDescription class is immutable.
+ */
+ @Test
+ public void testImmutability() {
+ assertThatClassIsImmutable(DefaultApplicationDescription.class);
+ }
+
@Test
public void basics() {
ApplicationDescription app =
- new DefaultApplicationDescription(APP_NAME, VER, TITLE, DESC, ORIGIN,
- CATEGORY, URL, README, ICON,
- ROLE, PERMS, FURL, FEATURES, APPS);
+ DefaultApplicationDescription.builder()
+ .withName(APP_NAME)
+ .withVersion(VER)
+ .withTitle(TITLE)
+ .withDescription(DESC)
+ .withOrigin(ORIGIN)
+ .withCategory(CATEGORY)
+ .withUrl(URL)
+ .withReadme(README)
+ .withIcon(ICON)
+ .withRole(ROLE)
+ .withPermissions(PERMS)
+ .withFeaturesRepo(FURL)
+ .withFeatures(FEATURES)
+ .withRequiredApps(APPS)
+ .build();
+
assertEquals("incorrect id", APP_NAME, app.name());
assertEquals("incorrect version", VER, app.version());
assertEquals("incorrect title", TITLE, app.title());
@@ -74,4 +97,4 @@
assertEquals("incorrect apps", APPS, app.requiredApps());
assertTrue("incorrect toString", app.toString().contains(APP_NAME));
}
-}
\ No newline at end of file
+}
diff --git a/core/api/src/test/java/org/onosproject/core/DefaultApplicationTest.java b/core/api/src/test/java/org/onosproject/core/DefaultApplicationTest.java
index 38113bf..b523126 100644
--- a/core/api/src/test/java/org/onosproject/core/DefaultApplicationTest.java
+++ b/core/api/src/test/java/org/onosproject/core/DefaultApplicationTest.java
@@ -28,6 +28,9 @@
import java.util.Optional;
import java.util.Set;
+import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
+import static org.onosproject.core.DefaultApplication.Builder;
+
import static org.junit.Assert.*;
import static org.onosproject.app.DefaultApplicationDescriptionTest.*;
@@ -36,13 +39,35 @@
*/
public class DefaultApplicationTest {
+ /**
+ * Checks that the DefaultApplication class is immutable.
+ */
+ @Test
+ public void testImmutability() {
+ assertThatClassIsImmutable(DefaultApplication.class);
+ }
+
public static final ApplicationId APP_ID = new DefaultApplicationId(2, APP_NAME);
+ private Builder baseBuilder = DefaultApplication.builder()
+ .withAppId(APP_ID)
+ .withVersion(VER)
+ .withTitle(TITLE)
+ .withDescription(DESC)
+ .withOrigin(ORIGIN)
+ .withCategory(CATEGORY)
+ .withUrl(URL)
+ .withReadme(README)
+ .withIcon(ICON)
+ .withRole(ROLE)
+ .withPermissions(PERMS)
+ .withFeaturesRepo(Optional.of(FURL))
+ .withFeatures(FEATURES)
+ .withRequiredApps(APPS);
@Test
public void basics() {
- Application app = new DefaultApplication(APP_ID, VER, TITLE, DESC, ORIGIN,
- CATEGORY, URL, README, ICON, ROLE,
- PERMS, Optional.of(FURL), FEATURES, APPS);
+ Application app = baseBuilder.build();
+
assertEquals("incorrect id", APP_ID, app.id());
assertEquals("incorrect version", VER, app.version());
assertEquals("incorrect title", TITLE, app.title());
@@ -62,20 +87,20 @@
@Test
public void testEquality() {
- Application a1 = new DefaultApplication(APP_ID, VER, TITLE, DESC, ORIGIN,
- CATEGORY, URL, README, ICON, ROLE,
- PERMS, Optional.of(FURL), FEATURES, APPS);
- Application a2 = new DefaultApplication(APP_ID, VER, TITLE, DESC, ORIGIN,
- CATEGORY, URL, README, ICON, ROLE,
- PERMS, Optional.of(FURL), FEATURES, APPS);
- Application a3 = new DefaultApplication(APP_ID, VER, TITLE, DESC, ORIGIN,
- CATEGORY, URL, README, ICON, ROLE,
- PERMS, Optional.empty(), FEATURES, APPS);
- Application a4 = new DefaultApplication(APP_ID, VER, TITLE, DESC, ORIGIN + "asd",
- CATEGORY, URL, README, ICON, ROLE,
- PERMS, Optional.of(FURL), FEATURES, APPS);
- new EqualsTester().addEqualityGroup(a1, a2)
- .addEqualityGroup(a3).addEqualityGroup(a4).testEquals();
+ Application a1 = baseBuilder.build();
+ Application a2 = DefaultApplication.builder(a1)
+ .build();
+ Application a3 = DefaultApplication.builder(baseBuilder)
+ .withFeaturesRepo(Optional.empty())
+ .build();
+ Application a4 = DefaultApplication.builder(baseBuilder)
+ .withOrigin(ORIGIN + "asd")
+ .build();
+ new EqualsTester()
+ .addEqualityGroup(a1, a2)
+ .addEqualityGroup(a3)
+ .addEqualityGroup(a4)
+ .testEquals();
}
@@ -85,9 +110,8 @@
public void immutableIcon() {
byte[] iconSourceData = ICON_ORIG.clone();
- Application app = new DefaultApplication(APP_ID, VER, TITLE, DESC, ORIGIN,
- CATEGORY, URL, README, iconSourceData, ROLE,
- PERMS, Optional.of(FURL), FEATURES, APPS);
+ Application app = DefaultApplication.builder(baseBuilder)
+ .withIcon(iconSourceData).build();
// can we modify the icon after getting a reference to the app?
byte[] icon = app.icon();
@@ -126,9 +150,7 @@
// Set<Permission> p = PERMS_ORIG;
Set<Permission> p = PERMS_UNSAFE;
- Application app = new DefaultApplication(APP_ID, VER, TITLE, DESC, ORIGIN,
- CATEGORY, URL, README, ICON, ROLE,
- p, Optional.of(FURL), FEATURES, APPS);
+ Application app = baseBuilder.build();
Set<Permission> perms = app.permissions();
try {
@@ -168,9 +190,7 @@
// List<String> f = FEATURES_ORIG;
List<String> f = FEATURES_UNSAFE;
- Application app = new DefaultApplication(APP_ID, VER, TITLE, DESC, ORIGIN,
- CATEGORY, URL, README, ICON, ROLE,
- PERMS, Optional.of(FURL), f, APPS);
+ Application app = DefaultApplication.builder(baseBuilder).withFeatures(f).build();
List<String> features = app.features();
try {
@@ -188,9 +208,7 @@
// List<String> ra = REQ_APPS_ORIG;
List<String> ra = REQ_APPS_UNSAFE;
- Application app = new DefaultApplication(APP_ID, VER, TITLE, DESC, ORIGIN,
- CATEGORY, URL, README, ICON, ROLE,
- PERMS, Optional.of(FURL), FEATURES, ra);
+ Application app = DefaultApplication.builder(baseBuilder).withRequiredApps(ra).build();
List<String> reqApps = app.requiredApps();
try {
@@ -204,11 +222,9 @@
@Test
public void nullIcon() {
- Application app = new DefaultApplication(APP_ID, VER, TITLE, DESC, ORIGIN,
- CATEGORY, URL, README, null, ROLE,
- PERMS, Optional.of(FURL), FEATURES, APPS);
+ Application app = DefaultApplication.builder(baseBuilder).withIcon(null).build();
byte[] icon = app.icon();
assertNotNull("null icon", icon);
assertEquals("unexpected size", 0, icon.length);
}
-}
\ No newline at end of file
+}