diff --git a/brooklyn-library/software/nosql/pom.xml b/brooklyn-library/software/nosql/pom.xml index f409e4b2e5..8866243020 100644 --- a/brooklyn-library/software/nosql/pom.xml +++ b/brooklyn-library/software/nosql/pom.xml @@ -116,7 +116,7 @@ com.netflix.astyanax - astyanax + astyanax-thrift ${astyanax.version} test diff --git a/brooklyn-server/camp/camp-server/pom.xml b/brooklyn-server/camp/camp-server/pom.xml index 502c83e526..1ef149d4a8 100644 --- a/brooklyn-server/camp/camp-server/pom.xml +++ b/brooklyn-server/camp/camp-server/pom.xml @@ -142,11 +142,6 @@ org.apache.commons commons-lang3 - - - org.codehaus.jackson - jackson-core-asl - org.slf4j slf4j-api diff --git a/brooklyn-server/core/pom.xml b/brooklyn-server/core/pom.xml index 3be573dc3c..fadc68900d 100644 --- a/brooklyn-server/core/pom.xml +++ b/brooklyn-server/core/pom.xml @@ -65,10 +65,6 @@ com.thoughtworks.xstream xstream - - org.codehaus.jackson - jackson-mapper-asl - com.google.code.gson gson @@ -138,10 +134,6 @@ org.slf4j slf4j-api - - org.codehaus.jackson - jackson-core-asl - com.google.guava guava diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTags.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTags.java index 0ddc79ae5d..7a0171eaa7 100644 --- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTags.java +++ b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTags.java @@ -23,9 +23,9 @@ import java.util.List; import org.apache.brooklyn.util.collections.MutableList; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.annotations.Beta; import com.google.common.base.Function; import com.google.common.base.Objects; @@ -40,7 +40,8 @@ public class BrooklynTags { public static class NamedStringTag implements Serializable { private static final long serialVersionUID = 7932098757009051348L; - @JsonProperty final String kind; + @JsonProperty + final String kind; @JsonProperty final String contents; public NamedStringTag(@JsonProperty("kind") String kind, @JsonProperty("contents") String contents) { this.kind = kind; diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java index 1fba49d5ee..0ce9a2ec09 100644 --- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java +++ b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java @@ -42,10 +42,10 @@ import org.apache.brooklyn.util.stream.Streams; import org.apache.brooklyn.util.text.StringEscapes.BashStringEscapes; import org.apache.brooklyn.util.text.Strings; -import org.codehaus.jackson.annotate.JsonProperty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.annotations.Beta; import com.google.common.base.Functions; import com.google.common.base.Objects; diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/dto/BasicManagementNodeSyncRecord.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/dto/BasicManagementNodeSyncRecord.java index d8f18b1ae8..265540c0f0 100644 --- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/dto/BasicManagementNodeSyncRecord.java +++ b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/dto/BasicManagementNodeSyncRecord.java @@ -25,9 +25,8 @@ import org.apache.brooklyn.api.mgmt.ha.ManagementNodeSyncRecord; import org.apache.brooklyn.core.BrooklynVersion; import org.apache.brooklyn.util.time.Time; -import org.codehaus.jackson.annotate.JsonAutoDetect; -import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility; +import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.google.common.base.Objects; /** @@ -36,7 +35,7 @@ * * @author aled */ -@JsonAutoDetect(fieldVisibility=Visibility.ANY, getterVisibility=Visibility.NONE) +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE) public class BasicManagementNodeSyncRecord implements ManagementNodeSyncRecord, Serializable { private static final long serialVersionUID = 4918161834047884244L; diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/BasicCatalogItemMemento.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/BasicCatalogItemMemento.java index bf252e059a..3651267cb9 100644 --- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/BasicCatalogItemMemento.java +++ b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/BasicCatalogItemMemento.java @@ -29,8 +29,8 @@ import org.apache.brooklyn.api.objs.SpecParameter; import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog; import org.apache.brooklyn.core.catalog.internal.CatalogUtils; -import org.codehaus.jackson.annotate.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.google.common.base.Joiner; import com.google.common.base.Objects; import com.google.common.collect.ImmutableList; diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/BasicEntityMemento.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/BasicEntityMemento.java index 82945626c1..f06ff3618d 100644 --- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/BasicEntityMemento.java +++ b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/BasicEntityMemento.java @@ -30,8 +30,6 @@ import org.apache.brooklyn.api.mgmt.rebind.mementos.TreeNode; import org.apache.brooklyn.api.sensor.AttributeSensor; import org.apache.brooklyn.api.sensor.Sensor; -import org.codehaus.jackson.annotate.JsonAutoDetect; -import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.brooklyn.config.ConfigKey; @@ -41,6 +39,7 @@ import org.apache.brooklyn.core.objs.BrooklynTypes; import org.apache.brooklyn.core.sensor.Sensors; +import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.google.common.base.Objects.ToStringHelper; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -54,7 +53,7 @@ * * @author aled */ -@JsonAutoDetect(fieldVisibility=Visibility.ANY, getterVisibility=Visibility.NONE) +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility= JsonAutoDetect.Visibility.NONE) public class BasicEntityMemento extends AbstractTreeNodeMemento implements EntityMemento, Serializable { private static final Logger log = LoggerFactory.getLogger(BasicEntityMemento.class); diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MutableBrooklynMemento.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MutableBrooklynMemento.java index 293207bd77..fa0fe1939f 100644 --- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MutableBrooklynMemento.java +++ b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MutableBrooklynMemento.java @@ -31,9 +31,8 @@ import org.apache.brooklyn.api.mgmt.rebind.mementos.FeedMemento; import org.apache.brooklyn.api.mgmt.rebind.mementos.LocationMemento; import org.apache.brooklyn.api.mgmt.rebind.mementos.PolicyMemento; -import org.codehaus.jackson.annotate.JsonAutoDetect; -import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility; +import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -44,7 +43,7 @@ /** * @deprecated since 0.7.0; this code will move to src/tests/java */ -@JsonAutoDetect(fieldVisibility=Visibility.ANY, getterVisibility=Visibility.NONE) +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE) public class MutableBrooklynMemento implements BrooklynMemento { // TODO Is this class pulling its weight? Do we really need it? diff --git a/brooklyn-server/karaf/features/src/main/feature/feature.xml b/brooklyn-server/karaf/features/src/main/feature/feature.xml index 49a90e6677..69b79720d9 100644 --- a/brooklyn-server/karaf/features/src/main/feature/feature.xml +++ b/brooklyn-server/karaf/features/src/main/feature/feature.xml @@ -85,6 +85,7 @@ brooklyn-utils-rest-swagger brooklyn-api + brooklyn-core mvn:org.apache.brooklyn/brooklyn-rest-api/${project.version} @@ -98,8 +99,8 @@ mvn:com.sun.jersey/jersey-servlet/${jersey.version} mvn:org.apache.commons/commons-lang3/${commons-lang3.version} - mvn:org.codehaus.jackson/jackson-core-asl/${jackson.version} - mvn:org.codehaus.jackson/jackson-mapper-asl/${jackson.version} + mvn:com.fasterxml.jackson.core/jackson-annotations/${fasterxml.jackson.version} + mvn:com.fasterxml.jackson.core/jackson-databind/${fasterxml.jackson.version} mvn:javax.servlet/javax.servlet-api/${javax-servlet.version} @@ -132,9 +133,6 @@ mvn:org.bouncycastle/bcpkix-jdk15on/${bouncycastle.version} mvn:commons-codec/commons-codec/${commons-codec.version} mvn:org.apache.commons/commons-lang3/${commons-lang3.version} - mvn:org.codehaus.jackson/jackson-core-asl/${jackson.version} - mvn:org.codehaus.jackson/jackson-mapper-asl/${jackson.version} - mvn:org.codehaus.jackson/jackson-jaxrs/${jackson.version} wrap:mvn:com.google.http-client/google-http-client/1.18.0-rc @@ -168,13 +166,10 @@ brooklyn-camp-base brooklyn-utils-rest-swagger jetty - - mvn:org.codehaus.jackson/jackson-core-asl/${jackson.version} mvn:org.apache.brooklyn/brooklyn-rest-server/${project.version} - brooklyn-core brooklyn-rest-api brooklyn-camp-brooklyn brooklyn-camp-base @@ -185,6 +180,9 @@ mvn:com.sun.jersey/jersey-server/${jersey.version} mvn:com.sun.jersey/jersey-core/${jersey.version} mvn:com.sun.jersey/jersey-servlet/${jersey.version} + + mvn:com.fasterxml.jackson.datatype/jackson-datatype-guava/${fasterxml.jackson.version} + mvn:com.fasterxml.jackson.jaxrs/jackson-jaxrs-json-provider/${fasterxml.jackson.version} diff --git a/brooklyn-server/parent/pom.xml b/brooklyn-server/parent/pom.xml index 6c1817e0bd..2b1f4a5577 100644 --- a/brooklyn-server/parent/pom.xml +++ b/brooklyn-server/parent/pom.xml @@ -173,26 +173,6 @@ jetty-schemas ${jetty-schemas.version} - - org.codehaus.jackson - jackson-core-asl - ${jackson.version} - - - org.codehaus.jackson - jackson-mapper-asl - ${jackson.version} - - - org.codehaus.jackson - jackson-jaxrs - ${jackson.version} - - - org.codehaus.jackson - jackson-xc - ${jackson.version} - com.fasterxml.jackson.core jackson-annotations @@ -218,6 +198,11 @@ jackson-module-jaxb-annotations ${fasterxml.jackson.version} + + com.fasterxml.jackson.datatype + jackson-datatype-guava + ${fasterxml.jackson.version} + io.swagger swagger-annotations @@ -402,7 +387,7 @@ org.jboss.resteasy - resteasy-jackson-provider + resteasy-jackson2-provider ${resteasy.version} diff --git a/brooklyn-server/pom.xml b/brooklyn-server/pom.xml index 4e6012ba8c..38cf522655 100644 --- a/brooklyn-server/pom.xml +++ b/brooklyn-server/pom.xml @@ -95,8 +95,7 @@ 1.6.6 17.0 1.4.7 - 1.9.13 - 2.4.5 + 2.7.0 1.19 4.4.1 3.3.2 @@ -125,12 +124,12 @@ 1.1.1 5.0.34 1.2 - 1.56.24 + 3.8.0 0.11.0-1 4.7.0 r8-20060801 1.0-b01-ea - 3.0.8.Final + 3.0.14.Final 4.3 1.0_jdk5 3.1.0 diff --git a/brooklyn-server/rest/rest-api/pom.xml b/brooklyn-server/rest/rest-api/pom.xml index 9a74d527f8..fc61f97716 100644 --- a/brooklyn-server/rest/rest-api/pom.xml +++ b/brooklyn-server/rest/rest-api/pom.xml @@ -35,12 +35,19 @@ - org.codehaus.jackson - jackson-core-asl + org.apache.brooklyn + brooklyn-core + ${project.version} + + + com.fasterxml.jackson.core + jackson-annotations + ${fasterxml.jackson.version} - org.codehaus.jackson - jackson-mapper-asl + com.fasterxml.jackson.core + jackson-databind + ${fasterxml.jackson.version} com.sun.jersey.contribs diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/ActivityApi.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/ActivityApi.java index 24826081f1..de93c6470d 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/ActivityApi.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/ActivityApi.java @@ -43,7 +43,6 @@ public interface ActivityApi { @ApiResponses(value = { @ApiResponse(code = 404, message = "Could not find task") }) -// @Produces("text/json") public TaskSummary get( @ApiParam(value = "Task ID", required = true) @PathParam("task") String taskId ); diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/ApplicationApi.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/ApplicationApi.java index c412644a3c..cd8f22e56c 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/ApplicationApi.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/ApplicationApi.java @@ -35,11 +35,10 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import org.codehaus.jackson.JsonNode; - import org.apache.brooklyn.rest.domain.ApplicationSpec; import org.apache.brooklyn.rest.domain.ApplicationSummary; import org.apache.brooklyn.rest.domain.EntitySummary; +import org.apache.brooklyn.rest.domain.EntityDetail; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; @@ -52,21 +51,12 @@ @Consumes(MediaType.APPLICATION_JSON) public interface ApplicationApi { - @GET - @Path("/tree") - @ApiOperation( - value = "Fetch applications and entities tree hierarchy" - ) - /** @deprecated since 0.6.0 use {@link #fetch(String)} (with slightly different, but better semantics) */ - @Deprecated - public JsonNode applicationTree(); - @GET @Path("/fetch") @ApiOperation( value = "Fetch display details for all applications and optionally selected additional entities" ) - public JsonNode fetch( + public List fetch( @ApiParam(value="Selected additional entity ID's to include, comma-separated", required=false) @DefaultValue("") @QueryParam("items") String items); diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/AccessSummary.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/AccessSummary.java index 8d5aefae8c..13ea344b02 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/AccessSummary.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/AccessSummary.java @@ -21,18 +21,17 @@ import java.io.Serializable; import java.net.URI; import java.util.Map; +import java.util.Objects; -import org.codehaus.jackson.annotate.JsonProperty; - +import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.annotations.Beta; -import com.google.common.base.Objects; import com.google.common.collect.ImmutableMap; @Beta public class AccessSummary implements Serializable { private static final long serialVersionUID = 5097292906225042890L; - + private final boolean locationProvisioningAllowed; private final Map links; @@ -51,23 +50,25 @@ public boolean isLocationProvisioningAllowed() { public Map getLinks() { return links; } - + @Override public boolean equals(Object o) { + if (this == o) return true; if (!(o instanceof AccessSummary)) return false; - AccessSummary other = (AccessSummary) o; - return locationProvisioningAllowed == other.isLocationProvisioningAllowed(); + AccessSummary that = (AccessSummary) o; + return locationProvisioningAllowed == that.locationProvisioningAllowed && + Objects.equals(links, that.links); } @Override public int hashCode() { - return Objects.hashCode(locationProvisioningAllowed); + return Objects.hash(locationProvisioningAllowed, links); } @Override public String toString() { return "AccessSummary{" + - "locationProvisioningAllowed='" + locationProvisioningAllowed + '\'' + + "locationProvisioningAllowed=" + locationProvisioningAllowed + ", links=" + links + '}'; } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/ApiError.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/ApiError.java index f26be7979b..89ee744554 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/ApiError.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/ApiError.java @@ -21,17 +21,16 @@ import static com.google.common.base.Preconditions.checkNotNull; import java.io.Serializable; +import java.util.Objects; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import org.apache.brooklyn.util.text.Strings; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; -import com.google.common.base.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.base.Optional; import com.google.common.base.Throwables; @@ -46,17 +45,17 @@ public static Builder builder() { public static ApiError of(Throwable t) { return builderFromThrowable(t).build(); } - + public static ApiError of(String message) { return builder().message(message).build(); } - + /** @deprecated since 0.7.0; use {@link #builderFromThrowable(Throwable)} */ @Deprecated public static Builder fromThrowable(Throwable t) { return builderFromThrowable(t); } - + /** * @return An {@link ApiError.Builder} whose message is initialised to either the throwable's * message or the throwable's class name if the message is null and whose details are @@ -89,17 +88,17 @@ public Builder details(String details) { public Builder errorCode(Status errorCode) { return errorCode(errorCode.getStatusCode()); } - + public Builder errorCode(Integer errorCode) { this.errorCode = errorCode; return this; } - + /** as {@link #prefixMessage(String, String)} with default separator of `: ` */ public Builder prefixMessage(String prefix) { return prefixMessage(prefix, ": "); } - + /** puts a prefix in front of the message, with the given separator if there is already a message; * if there is no message, it simply sets the prefix as the message */ @@ -108,7 +107,7 @@ public Builder prefixMessage(String prefix, String separatorIfMessageNotBlank) { else message(prefix+separatorIfMessageNotBlank+message); return this; } - + public ApiError build() { return new ApiError(message, details, errorCode); } @@ -118,25 +117,25 @@ public ApiError build() { public Builder fromApiError(ApiError error) { return copy(error); } - + public Builder copy(ApiError error) { return this .message(error.message) .details(error.details) .errorCode(error.error); } - + public String getMessage() { return message; } } private final String message; - - @JsonSerialize(include=Inclusion.NON_EMPTY) + + @JsonSerialize(include= JsonSerialize.Inclusion.NON_EMPTY) private final String details; - @JsonSerialize(include=Inclusion.NON_NULL) + @JsonSerialize(include= JsonSerialize.Inclusion.NON_NULL) private final Integer error; public ApiError(String message) { this(message, null); } @@ -161,30 +160,6 @@ public String getDetails() { public Integer getError() { return error; } - - @Override - public boolean equals(Object other) { - if (this == other) return true; - if (other == null || getClass() != other.getClass()) return false; - ApiError that = ApiError.class.cast(other); - return Objects.equal(this.message, that.message) && - Objects.equal(this.details, that.details) && - Objects.equal(this.error, that.error); - } - - @Override - public int hashCode() { - return Objects.hashCode(message, details, error); - } - - @Override - public String toString() { - return Objects.toStringHelper(this) - .add("message", message) - .add("details", details) - .add("error", error) - .toString(); - } public Response asBadRequestResponseJson() { return asResponse(Status.BAD_REQUEST, MediaType.APPLICATION_JSON_TYPE); @@ -196,12 +171,36 @@ public Response asResponse(Status defaultStatus, MediaType type) { .entity(this) .build(); } - + public Response asResponse(MediaType type) { return asResponse(null, type); } - + public Response asJsonResponse() { return asResponse(MediaType.APPLICATION_JSON_TYPE); } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ApiError)) return false; + ApiError apiError = (ApiError) o; + return Objects.equals(message, apiError.message) && + Objects.equals(details, apiError.details) && + Objects.equals(error, apiError.error); + } + + @Override + public int hashCode() { + return Objects.hash(message, details, error); + } + + @Override + public String toString() { + return "ApiError{" + + "message='" + message + '\'' + + ", details='" + details + '\'' + + ", error=" + error + + '}'; + } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/ApplicationSpec.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/ApplicationSpec.java index 8e82c8e481..52f7efd82e 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/ApplicationSpec.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/ApplicationSpec.java @@ -24,12 +24,11 @@ import java.util.Collection; import java.util.Collections; import java.util.Map; +import java.util.Objects; import java.util.Set; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; - +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -86,12 +85,12 @@ public ApplicationSpec build() { } private final String name; - @JsonSerialize(include = Inclusion.NON_NULL) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final String type; - @JsonSerialize(include = Inclusion.NON_NULL) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final Set entities; private final Set locations; - @JsonSerialize(include = Inclusion.NON_EMPTY) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY) private final Map config; public ApplicationSpec( @@ -110,7 +109,7 @@ public ApplicationSpec( this.locations = ImmutableSet.copyOf(checkNotNull(locations, "locations must be provided for an application spec")); this.config = config == null ? Collections.emptyMap() : ImmutableMap.copyOf(config); if (this.entities!=null && this.type!=null) throw new IllegalStateException("cannot supply both type and entities for an application spec"); - // valid for both to be null, e.g. for an anonymous type + // valid for both to be null, e.g. for an anonymous type // if (this.entities==null && this.type==null) throw new IllegalStateException("must supply either type or entities for an application spec"); } @@ -137,45 +136,29 @@ public Map getConfig() { @Override public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - + if (this == o) return true; + if (!(o instanceof ApplicationSpec)) return false; ApplicationSpec that = (ApplicationSpec) o; - - if (name != null ? !name.equals(that.name) : that.name != null) - return false; - if (type != null ? !type.equals(that.type) : that.type != null) - return false; - if (entities != null ? !entities.equals(that.entities) : that.entities != null) - return false; - if (locations != null ? !locations.equals(that.locations) : that.locations != null) - return false; - if (config != null ? !config.equals(that.config) : that.config != null) - return false; - - return true; + return Objects.equals(name, that.name) && + Objects.equals(type, that.type) && + Objects.equals(entities, that.entities) && + Objects.equals(locations, that.locations) && + Objects.equals(config, that.config); } @Override public int hashCode() { - int result = name != null ? name.hashCode() : 0; - result = 31 * result + (type != null ? type.hashCode() : 0); - result = 31 * result + (entities != null ? entities.hashCode() : 0); - result = 31 * result + (locations != null ? locations.hashCode() : 0); - result = 31 * result + (config != null ? config.hashCode() : 0); - return result; + return Objects.hash(name, type, entities, locations, config); } @Override public String toString() { - return "ApplicationSpec{" - + "name='" + name + '\'' - + ", type=" + type - + ", entitySpecs=" + entities - + ", locations=" + locations - + ", config=" + config - + '}'; - } + return "ApplicationSpec{" + + "name='" + name + '\'' + + ", type='" + type + '\'' + + ", entities=" + entities + + ", locations=" + locations + + ", config=" + config + + '}'; + } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/ApplicationSummary.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/ApplicationSummary.java index 3d8ead905f..9bc9fe6717 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/ApplicationSummary.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/ApplicationSummary.java @@ -23,9 +23,9 @@ import java.io.Serializable; import java.net.URI; import java.util.Map; +import java.util.Objects; -import org.codehaus.jackson.annotate.JsonProperty; - +import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.ImmutableMap; public class ApplicationSummary implements HasId, Serializable { @@ -63,7 +63,7 @@ public ApplicationSummary( public String getId() { return id; } - + public ApplicationSpec getSpec() { return spec; } @@ -87,31 +87,26 @@ public ApplicationSummary transitionTo(Status newStatus) { @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - + if (!(o instanceof ApplicationSummary)) return false; ApplicationSummary that = (ApplicationSummary) o; - - if (spec != null ? !spec.equals(that.spec) : that.spec != null) - return false; - if (status != that.status) return false; - - return true; + return Objects.equals(id, that.id) && + Objects.equals(spec, that.spec) && + status == that.status && + Objects.equals(links, that.links); } @Override public int hashCode() { - int result = spec != null ? spec.hashCode() : 0; - result = 31 * result + (status != null ? status.hashCode() : 0); - return result; + return Objects.hash(id, spec, status, links); } @Override public String toString() { - return "Application{" + - "id=" + id + + return "ApplicationSummary{" + + "id='" + id + '\'' + ", spec=" + spec + ", status=" + status + + ", links=" + links + '}'; } - } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/BrooklynFeatureSummary.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/BrooklynFeatureSummary.java index 3f0c95d13e..97a3f68451 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/BrooklynFeatureSummary.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/BrooklynFeatureSummary.java @@ -23,12 +23,12 @@ import java.io.Serializable; import java.util.Map; +import java.util.Objects; -import org.codehaus.jackson.annotate.JsonAnyGetter; -import org.codehaus.jackson.annotate.JsonAnySetter; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonProperty; - +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.Maps; public class BrooklynFeatureSummary implements Serializable { @@ -88,4 +88,31 @@ private void set(String name, String value) { additionalData.put(name, value); } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof BrooklynFeatureSummary)) return false; + BrooklynFeatureSummary that = (BrooklynFeatureSummary) o; + return Objects.equals(name, that.name) && + Objects.equals(symbolicName, that.symbolicName) && + Objects.equals(version, that.version) && + Objects.equals(lastModified, that.lastModified) && + Objects.equals(additionalData, that.additionalData); + } + + @Override + public int hashCode() { + return Objects.hash(name, symbolicName, version, lastModified, additionalData); + } + + @Override + public String toString() { + return "BrooklynFeatureSummary{" + + "name='" + name + '\'' + + ", symbolicName='" + symbolicName + '\'' + + ", version='" + version + '\'' + + ", lastModified='" + lastModified + '\'' + + ", additionalData=" + additionalData + + '}'; + } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogEntitySummary.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogEntitySummary.java index 48e49cb146..61724bc6ac 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogEntitySummary.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogEntitySummary.java @@ -20,25 +20,27 @@ import java.net.URI; import java.util.Map; +import java.util.Objects; import java.util.Set; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; public class CatalogEntitySummary extends CatalogItemSummary { private static final long serialVersionUID = 1063908984191424539L; - @JsonSerialize(include=Inclusion.NON_EMPTY) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY) private final Set config; - - @JsonSerialize(include=Inclusion.NON_EMPTY) + + @JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY) private final Set sensors; - @JsonSerialize(include=Inclusion.NON_EMPTY) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY) private final Set effectors; + @JsonCreator public CatalogEntitySummary( @JsonProperty("symbolicName") String symbolicName, @JsonProperty("version") String version, @@ -48,8 +50,8 @@ public CatalogEntitySummary( @JsonProperty("description") String description, @JsonProperty("iconUrl") String iconUrl, @JsonProperty("tags") Set tags, - @JsonProperty("config") Set config, - @JsonProperty("sensors") Set sensors, + @JsonProperty("config") Set config, + @JsonProperty("sensors") Set sensors, @JsonProperty("effectors") Set effectors, @JsonProperty("deprecated") boolean deprecated, @JsonProperty("links") Map links @@ -63,21 +65,37 @@ public CatalogEntitySummary( public Set getConfig() { return config; } - + public Set getSensors() { return sensors; } - + public Set getEffectors() { return effectors; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof CatalogEntitySummary)) return false; + if (!super.equals(o)) return false; + CatalogEntitySummary that = (CatalogEntitySummary) o; + return Objects.equals(config, that.config) && + Objects.equals(sensors, that.sensors) && + Objects.equals(effectors, that.effectors); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), config, sensors, effectors); + } + @Override public String toString() { - return super.toString()+"["+ - "config="+getConfig()+"; " + - "sensors="+getSensors()+"; "+ - "effectors="+getEffectors()+"; "+ - "deprecated="+isDeprecated()+"]"; + return "CatalogEntitySummary{" + + "config=" + config + + ", sensors=" + sensors + + ", effectors=" + effectors + + '}'; } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogItemSummary.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogItemSummary.java index e3daf87789..b2555a13ec 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogItemSummary.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogItemSummary.java @@ -23,15 +23,12 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; -import org.apache.commons.lang.builder.EqualsBuilder; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; - -import com.google.common.base.Objects; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -42,7 +39,7 @@ public class CatalogItemSummary implements HasId, HasName, Serializable { private static final long serialVersionUID = -823483595879417681L; - + private final String id; private final String symbolicName; private final String version; @@ -50,19 +47,19 @@ public class CatalogItemSummary implements HasId, HasName, Serializable { //needed for backwards compatibility only (json serializer works on fields, not getters) @Deprecated private final String type; - + private final String javaType; - + private final String name; - @JsonSerialize(include=Inclusion.NON_EMPTY) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY) private final String description; - @JsonSerialize(include=Inclusion.NON_EMPTY) + @JsonSerialize(include= JsonSerialize.Inclusion.NON_EMPTY) private final String iconUrl; private final String planYaml; - @JsonSerialize(include=Inclusion.NON_EMPTY) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY) private final List tags; private final boolean deprecated; - + private final Map links; public CatalogItemSummary( @@ -142,22 +139,44 @@ public boolean isDeprecated() { } @Override - public String toString() { - return Objects.toStringHelper(this) - .add("id", symbolicName) - .add("version", version) - .add("deprecated", deprecated) - .toString(); + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof CatalogItemSummary)) return false; + CatalogItemSummary that = (CatalogItemSummary) o; + return deprecated == that.deprecated && + Objects.equals(id, that.id) && + Objects.equals(symbolicName, that.symbolicName) && + Objects.equals(version, that.version) && + Objects.equals(type, that.type) && + Objects.equals(javaType, that.javaType) && + Objects.equals(name, that.name) && + Objects.equals(description, that.description) && + Objects.equals(iconUrl, that.iconUrl) && + Objects.equals(planYaml, that.planYaml) && + Objects.equals(tags, that.tags) && + Objects.equals(links, that.links); } @Override public int hashCode() { - return Objects.hashCode(symbolicName, version, name, javaType, tags, deprecated); + return Objects.hash(id, symbolicName, version, type, javaType, name, description, iconUrl, planYaml, tags, deprecated, links); } - + @Override - public boolean equals(Object obj) { - return EqualsBuilder.reflectionEquals(this, obj); + public String toString() { + return "CatalogItemSummary{" + + "id='" + id + '\'' + + ", symbolicName='" + symbolicName + '\'' + + ", version='" + version + '\'' + + ", type='" + type + '\'' + + ", javaType='" + javaType + '\'' + + ", name='" + name + '\'' + + ", description='" + description + '\'' + + ", iconUrl='" + iconUrl + '\'' + + ", planYaml='" + planYaml + '\'' + + ", tags=" + tags + + ", deprecated=" + deprecated + + ", links=" + links + + '}'; } - } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogLocationSummary.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogLocationSummary.java index cd94d8e80e..eb061c573c 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogLocationSummary.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogLocationSummary.java @@ -20,16 +20,16 @@ import java.net.URI; import java.util.Map; +import java.util.Objects; import java.util.Set; -import org.codehaus.jackson.annotate.JsonProperty; - +import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.ImmutableSet; public class CatalogLocationSummary extends CatalogItemSummary { private static final long serialVersionUID = 8420991584336514673L; - + private final Set config; public CatalogLocationSummary( @@ -49,14 +49,29 @@ public CatalogLocationSummary( // TODO expose config from policies this.config = (config == null) ? ImmutableSet.of() : config; } - + public Set getConfig() { return config; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof CatalogLocationSummary)) return false; + if (!super.equals(o)) return false; + CatalogLocationSummary that = (CatalogLocationSummary) o; + return Objects.equals(config, that.config); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), config); + } + @Override public String toString() { - return super.toString()+"["+ - "config="+getConfig()+"]"; + return "CatalogLocationSummary{" + + "config=" + config + + '}'; } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogPolicySummary.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogPolicySummary.java index 2b34f55735..79187ebb9d 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogPolicySummary.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogPolicySummary.java @@ -20,19 +20,18 @@ import java.net.URI; import java.util.Map; +import java.util.Objects; import java.util.Set; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; - +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.collect.ImmutableSet; public class CatalogPolicySummary extends CatalogItemSummary { private static final long serialVersionUID = -588856488327394445L; - - @JsonSerialize(include=Inclusion.NON_EMPTY) + + @JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY) private final Set config; public CatalogPolicySummary( @@ -52,14 +51,29 @@ public CatalogPolicySummary( // TODO expose config from policies this.config = (config == null) ? ImmutableSet.of() : config; } - + public Set getConfig() { return config; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof CatalogPolicySummary)) return false; + if (!super.equals(o)) return false; + CatalogPolicySummary that = (CatalogPolicySummary) o; + return Objects.equals(config, that.config); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), config); + } + @Override public String toString() { - return super.toString()+"["+ - "config="+getConfig()+"]"; + return "CatalogPolicySummary{" + + "config=" + config + + '}'; } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/ConfigSummary.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/ConfigSummary.java index 8e3d460110..22e88d6d36 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/ConfigSummary.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/ConfigSummary.java @@ -23,15 +23,15 @@ import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Objects; import javax.annotation.Nullable; import org.apache.brooklyn.config.ConfigKey; import org.apache.brooklyn.util.collections.Jsonya; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.base.Function; import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableMap; @@ -39,20 +39,20 @@ public abstract class ConfigSummary implements HasName, Serializable { private static final long serialVersionUID = -2831796487073496730L; - + private final String name; private final String type; - @JsonSerialize(include = Inclusion.NON_NULL) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final Object defaultValue; - @JsonSerialize(include = Inclusion.NON_NULL) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final String description; @JsonSerialize private final boolean reconfigurable; - @JsonSerialize(include = Inclusion.NON_NULL) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final String label; - @JsonSerialize(include = Inclusion.NON_NULL) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final Double priority; - @JsonSerialize(include = Inclusion.NON_NULL) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final List> possibleValues; protected ConfigSummary( @@ -150,22 +150,34 @@ public List> getPossibleValues() { @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - + if (!(o instanceof ConfigSummary)) return false; ConfigSummary that = (ConfigSummary) o; - - if (name != null ? !name.equals(that.name) : that.name != null) - return false; - - return true; + return reconfigurable == that.reconfigurable && + Objects.equals(name, that.name) && + Objects.equals(type, that.type) && + Objects.equals(defaultValue, that.defaultValue) && + Objects.equals(description, that.description) && + Objects.equals(label, that.label) && + Objects.equals(priority, that.priority) && + Objects.equals(possibleValues, that.possibleValues); } @Override public int hashCode() { - int result = name != null ? name.hashCode() : 0; - return result; + return Objects.hash(name, type, defaultValue, description, reconfigurable, label, priority, possibleValues); } @Override - public abstract String toString(); + public String toString() { + return "ConfigSummary{" + + "name='" + name + '\'' + + ", type='" + type + '\'' + + ", defaultValue=" + defaultValue + + ", description='" + description + '\'' + + ", reconfigurable=" + reconfigurable + + ", label='" + label + '\'' + + ", priority=" + priority + + ", possibleValues=" + possibleValues + + '}'; + } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/EffectorSummary.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/EffectorSummary.java index 9a2d4ae1d5..8ad7812370 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/EffectorSummary.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/EffectorSummary.java @@ -23,10 +23,8 @@ import java.util.Map; import java.util.Set; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; - +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.base.Objects; import com.google.common.collect.ImmutableMap; @@ -36,10 +34,10 @@ public class EffectorSummary implements HasName, Serializable { public static class ParameterSummary implements HasName, Serializable { private static final long serialVersionUID = -6393686096290306153L; - + private final String name; private final String type; - @JsonSerialize(include = Inclusion.NON_NULL) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final String description; private final T defaultValue; @@ -75,9 +73,9 @@ public T getDefaultValue() { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - + ParameterSummary that = (ParameterSummary) o; - + return Objects.equal(this.name, that.name) && Objects.equal(this.type, that.type) && Objects.equal(this.description, that.description) @@ -104,9 +102,9 @@ public String toString() { private final String name; private final String returnType; private final Set> parameters; - @JsonSerialize(include = Inclusion.NON_NULL) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final String description; - @JsonSerialize(include = Inclusion.NON_NULL) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final Map links; public EffectorSummary( @@ -146,42 +144,28 @@ public Map getLinks() { @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - + if (!(o instanceof EffectorSummary)) return false; EffectorSummary that = (EffectorSummary) o; - - if (description != null ? !description.equals(that.description) : that.description != null) - return false; - if (links != null ? !links.equals(that.links) : that.links != null) - return false; - if (name != null ? !name.equals(that.name) : that.name != null) - return false; - if (parameters != null ? !parameters.equals(that.parameters) : that.parameters != null) - return false; - if (returnType != null ? !returnType.equals(that.returnType) : that.returnType != null) - return false; - - return true; + return java.util.Objects.equals(name, that.name) && + java.util.Objects.equals(returnType, that.returnType) && + java.util.Objects.equals(parameters, that.parameters) && + java.util.Objects.equals(description, that.description) && + java.util.Objects.equals(links, that.links); } @Override public int hashCode() { - int result = name != null ? name.hashCode() : 0; - result = 31 * result + (description != null ? description.hashCode() : 0); - result = 31 * result + (returnType != null ? returnType.hashCode() : 0); - result = 31 * result + (parameters != null ? parameters.hashCode() : 0); - result = 31 * result + (links != null ? links.hashCode() : 0); - return result; + return java.util.Objects.hash(name, returnType, parameters, description, links); } @Override public String toString() { - return "EffectorSummary{" - + "name='" + name + '\'' - + ", description='" + description + '\'' - + ", returnType='" + returnType + '\'' - + ", parameters=" + parameters - + ", links=" + links - + '}'; + return "EffectorSummary{" + + "name='" + name + '\'' + + ", returnType='" + returnType + '\'' + + ", parameters=" + parameters + + ", description='" + description + '\'' + + ", links=" + links + + '}'; } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/EntityConfigSummary.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/EntityConfigSummary.java index 62c671779a..1e1de5be16 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/EntityConfigSummary.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/EntityConfigSummary.java @@ -18,22 +18,22 @@ */ package org.apache.brooklyn.rest.domain; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.collect.ImmutableMap; import org.apache.brooklyn.config.ConfigKey; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; import java.net.URI; import java.util.List; import java.util.Map; +import java.util.Objects; public class EntityConfigSummary extends ConfigSummary { private static final long serialVersionUID = -1336134336883426030L; - - @JsonSerialize(include = Inclusion.NON_NULL) + + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final Map links; public EntityConfigSummary( @@ -60,11 +60,24 @@ public Map getLinks() { return links; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof EntityConfigSummary)) return false; + if (!super.equals(o)) return false; + EntityConfigSummary that = (EntityConfigSummary) o; + return Objects.equals(links, that.links); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), links); + } + @Override public String toString() { - return "EntityConfigSummary{" - + "name='" + getName() + '\'' - + ", type='" + getType() + '\'' - + '}'; + return "EntityConfigSummary{" + + "links=" + links + + '}'; } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/EntityDetail.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/EntityDetail.java new file mode 100644 index 0000000000..830c0b1742 --- /dev/null +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/EntityDetail.java @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.brooklyn.rest.domain; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import org.apache.brooklyn.core.entity.lifecycle.Lifecycle; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.collect.ImmutableList; + +public class EntityDetail extends EntitySummary { + + private static final long serialVersionUID = 100490507982229165L; + + private final String parentId; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY) + private final List children; + private final List groupIds; + private final List> members; + + public EntityDetail( + @JsonProperty("id") String id, + @JsonProperty("parentId") String parentId, + @JsonProperty("name") String name, + @JsonProperty("type") String type, + @JsonProperty("serviceUp") Boolean serviceUp, + @JsonProperty("serviceState") Lifecycle serviceState, + @JsonProperty("iconUrl") String iconUrl, + @JsonProperty("catalogItemId") String catalogItemId, + @JsonProperty("children") List children, + @JsonProperty("groupIds") List groupIds, + @JsonProperty("members") List> members) { + super(id, name, type, catalogItemId, null); + this.parentId = parentId; + this.children = (children == null) ? ImmutableList.of() : ImmutableList.copyOf(children); + this.groupIds = (groupIds == null) ? ImmutableList.of() : ImmutableList.copyOf(groupIds); + this.members = (members == null) ? ImmutableList.>of() : ImmutableList.copyOf(members); + } + + public static long getSerialVersionUID() { + return serialVersionUID; + } + + public String getParentId() { + return parentId; + } + + public List getChildren() { + return children; + } + + public List getGroupIds() { + return groupIds; + } + + public List> getMembers() { + return members; + } + +} diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/EntitySpec.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/EntitySpec.java index a7110a2386..b4d9c04110 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/EntitySpec.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/EntitySpec.java @@ -20,18 +20,18 @@ import static com.google.common.base.Preconditions.checkNotNull; +import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.ImmutableMap; -import org.codehaus.jackson.annotate.JsonProperty; - import java.io.Serializable; import java.util.Collections; import java.util.Map; +import java.util.Objects; public class EntitySpec implements HasName, Serializable { private static final long serialVersionUID = -3882575609132757188L; - + private final String name; private final String type; private final Map config; @@ -69,34 +69,24 @@ public Map getConfig() { @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - EntitySpec entitySpec = (EntitySpec) o; - - if (config != null ? !config.equals(entitySpec.config) : entitySpec.config != null) - return false; - if (name != null ? !name.equals(entitySpec.name) : entitySpec.name != null) - return false; - if (type != null ? !type.equals(entitySpec.type) : entitySpec.type != null) - return false; - - return true; + if (!(o instanceof EntitySpec)) return false; + EntitySpec that = (EntitySpec) o; + return Objects.equals(name, that.name) && + Objects.equals(type, that.type) && + Objects.equals(config, that.config); } @Override public int hashCode() { - int result = name != null ? name.hashCode() : 0; - result = 31 * result + (type != null ? type.hashCode() : 0); - result = 31 * result + (config != null ? config.hashCode() : 0); - return result; + return Objects.hash(name, type, config); } @Override public String toString() { - return "EntitySpec{" - + "name='" + name + '\'' - + ", type='" + type + '\'' - + ", config=" + config - + '}'; + return "EntitySpec{" + + "name='" + name + '\'' + + ", type='" + type + '\'' + + ", config=" + config + + '}'; } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/EntitySummary.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/EntitySummary.java index b2bb9b122b..e0a585a116 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/EntitySummary.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/EntitySummary.java @@ -18,24 +18,23 @@ */ package org.apache.brooklyn.rest.domain; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.collect.ImmutableMap; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; - import java.io.Serializable; import java.net.URI; import java.util.Map; +import java.util.Objects; public class EntitySummary implements HasId, HasName, Serializable { private static final long serialVersionUID = 100490507982229165L; - + private final String id; private final String name; private final String type; - @JsonSerialize(include = Inclusion.NON_NULL) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final String catalogItemId; private final Map links; @@ -76,22 +75,29 @@ public Map getLinks() { @Override public boolean equals(Object o) { - return (o instanceof EntitySummary) && id.equals(((EntitySummary) o).getId()); + if (this == o) return true; + if (!(o instanceof EntitySummary)) return false; + EntitySummary that = (EntitySummary) o; + return Objects.equals(id, that.id) && + Objects.equals(name, that.name) && + Objects.equals(type, that.type) && + Objects.equals(catalogItemId, that.catalogItemId) && + Objects.equals(links, that.links); } @Override public int hashCode() { - return id != null ? id.hashCode() : 0; + return Objects.hash(id, name, type, catalogItemId, links); } @Override public String toString() { - return "EntitySummary{" - + "id='" + id + '\'' - + ", name=" + name - + ", type=" + type - + ", catalogItemId=" + catalogItemId - + ", links=" + links - + '}'; - } + return "EntitySummary{" + + "id='" + id + '\'' + + ", name='" + name + '\'' + + ", type='" + type + '\'' + + ", catalogItemId='" + catalogItemId + '\'' + + ", links=" + links + + '}'; + } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/HighAvailabilitySummary.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/HighAvailabilitySummary.java index c63d13fbac..037c08e472 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/HighAvailabilitySummary.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/HighAvailabilitySummary.java @@ -21,10 +21,9 @@ import java.io.Serializable; import java.net.URI; import java.util.Map; +import java.util.Objects; -import org.codehaus.jackson.annotate.JsonProperty; - -import com.google.common.base.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.ImmutableMap; public class HighAvailabilitySummary implements Serializable { @@ -33,13 +32,13 @@ public class HighAvailabilitySummary implements Serializable { public static class HaNodeSummary implements Serializable { private static final long serialVersionUID = 9205960988226816539L; - + private final String nodeId; private final URI nodeUri; private final String status; private final Long localTimestamp; private final Long remoteTimestamp; - + public HaNodeSummary( @JsonProperty("nodeId") String nodeId, @JsonProperty("nodeUri") URI nodeUri, @@ -75,20 +74,30 @@ public Long getRemoteTimestamp() { @Override public boolean equals(Object o) { - return (o instanceof HaNodeSummary) && Objects.equal(nodeId, ((HaNodeSummary) o).getNodeId()); + if (this == o) return true; + if (!(o instanceof HaNodeSummary)) return false; + HaNodeSummary that = (HaNodeSummary) o; + return Objects.equals(nodeId, that.nodeId) && + Objects.equals(nodeUri, that.nodeUri) && + Objects.equals(status, that.status) && + Objects.equals(localTimestamp, that.localTimestamp) && + Objects.equals(remoteTimestamp, that.remoteTimestamp); } @Override public int hashCode() { - return Objects.hashCode(nodeId); + return Objects.hash(nodeId, nodeUri, status, localTimestamp, remoteTimestamp); } @Override public String toString() { - return "HighAvailabilitySummary{" - + "nodeId='" + nodeId + '\'' - + ", status='" + status + '\'' - + '}'; + return "HaNodeSummary{" + + "nodeId='" + nodeId + '\'' + + ", nodeUri=" + nodeUri + + ", status='" + status + '\'' + + ", localTimestamp=" + localTimestamp + + ", remoteTimestamp=" + remoteTimestamp + + '}'; } } @@ -126,19 +135,27 @@ public Map getLinks() { @Override public boolean equals(Object o) { - return (o instanceof HighAvailabilitySummary) && ownId.equals(((HighAvailabilitySummary) o).getOwnId()); + if (this == o) return true; + if (!(o instanceof HighAvailabilitySummary)) return false; + HighAvailabilitySummary that = (HighAvailabilitySummary) o; + return Objects.equals(ownId, that.ownId) && + Objects.equals(masterId, that.masterId) && + Objects.equals(nodes, that.nodes) && + Objects.equals(links, that.links); } @Override public int hashCode() { - return ownId != null ? ownId.hashCode() : 0; + return Objects.hash(ownId, masterId, nodes, links); } @Override public String toString() { - return "HighAvailabilitySummary{" - + "ownId='" + ownId + '\'' - + ", links=" + links - + '}'; + return "HighAvailabilitySummary{" + + "ownId='" + ownId + '\'' + + ", masterId='" + masterId + '\'' + + ", nodes=" + nodes + + ", links=" + links + + '}'; } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/LinkWithMetadata.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/LinkWithMetadata.java index 1d2af55177..a47981ca17 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/LinkWithMetadata.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/LinkWithMetadata.java @@ -20,11 +20,11 @@ import java.io.Serializable; import java.util.Map; +import java.util.Objects; import javax.annotation.Nullable; -import org.codehaus.jackson.annotate.JsonProperty; - +import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableMap; @@ -34,55 +34,44 @@ public class LinkWithMetadata implements Serializable { // TODO remove 'metadata' and promote its contents to be top-level fields; then unmark as Beta private static final long serialVersionUID = 3146368899471495143L; - + private final String link; private final Map metadata; - + public LinkWithMetadata( - @JsonProperty("link") String link, + @JsonProperty("link") String link, @Nullable @JsonProperty("metadata") Map metadata) { this.link = link; this.metadata = (metadata == null) ? ImmutableMap.of() : ImmutableMap.copyOf(metadata); } - + public String getLink() { return link; } - + public Map getMetadata() { return metadata; } @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((link == null) ? 0 : link.hashCode()); - result = prime * result + ((metadata == null) ? 0 : metadata.hashCode()); - return result; + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof LinkWithMetadata)) return false; + LinkWithMetadata that = (LinkWithMetadata) o; + return Objects.equals(link, that.link) && + Objects.equals(metadata, that.metadata); } @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - LinkWithMetadata other = (LinkWithMetadata) obj; - if (link == null) { - if (other.link != null) - return false; - } else if (!link.equals(other.link)) - return false; - if (metadata == null) { - if (other.metadata != null) - return false; - } else if (!metadata.equals(other.metadata)) - return false; - return true; + public int hashCode() { + return Objects.hash(link, metadata); } - + @Override + public String toString() { + return "LinkWithMetadata{" + + "link='" + link + '\'' + + ", metadata=" + metadata + + '}'; + } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/LocationConfigSummary.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/LocationConfigSummary.java index 6b76c1e2ac..21d5861efc 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/LocationConfigSummary.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/LocationConfigSummary.java @@ -21,18 +21,17 @@ import java.net.URI; import java.util.List; import java.util.Map; +import java.util.Objects; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; - +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.collect.ImmutableMap; public class LocationConfigSummary extends ConfigSummary { private static final long serialVersionUID = 2232321501735217002L; - - @JsonSerialize(include = Inclusion.NON_NULL) + + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final Map links; public LocationConfigSummary( @@ -54,11 +53,24 @@ public Map getLinks() { return links; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof LocationConfigSummary)) return false; + if (!super.equals(o)) return false; + LocationConfigSummary that = (LocationConfigSummary) o; + return Objects.equals(links, that.links); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), links); + } + @Override public String toString() { - return "LocationConfigSummary{" - + "name='" + getName() + '\'' - + ", type='" + getType() + '\'' - + '}'; + return "LocationConfigSummary{" + + "links=" + links + + '}'; } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/LocationSpec.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/LocationSpec.java index 8cbb9c5632..47383818c5 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/LocationSpec.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/LocationSpec.java @@ -21,14 +21,12 @@ import java.io.Serializable; import java.util.Collections; import java.util.Map; +import java.util.Objects; import javax.annotation.Nullable; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; - -import com.google.common.base.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.collect.ImmutableMap; // FIXME change name, due to confusion with LocationSpec <- no need, as we can kill the class instead soon! @@ -36,13 +34,13 @@ public class LocationSpec implements HasName, HasConfig, Serializable { private static final long serialVersionUID = -1562824224808185255L; - - @JsonSerialize(include = Inclusion.NON_NULL) + + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final String name; - @JsonSerialize(include = Inclusion.NON_NULL) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final String spec; - @JsonSerialize(include = Inclusion.NON_EMPTY) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY) private final Map config; public static LocationSpec localhost() { @@ -74,23 +72,24 @@ public String getSpec() { @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - + if (!(o instanceof LocationSpec)) return false; LocationSpec that = (LocationSpec) o; - return Objects.equal(name, that.name) && Objects.equal(spec, that.spec) && Objects.equal(config, that.config); + return Objects.equals(name, that.name) && + Objects.equals(spec, that.spec) && + Objects.equals(config, that.config); } @Override public int hashCode() { - return Objects.hashCode(spec, name, config); + return Objects.hash(name, spec, config); } @Override public String toString() { - return "LocationSpec{" - + "name='" + name + '\'' - + "spec='" + spec + '\'' - + ", config=" + config - + '}'; + return "LocationSpec{" + + "name='" + name + '\'' + + ", spec='" + spec + '\'' + + ", config=" + config + + '}'; } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/LocationSummary.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/LocationSummary.java index ec415440fe..4cad32b3dd 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/LocationSummary.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/LocationSummary.java @@ -22,14 +22,12 @@ import java.net.URI; import java.util.Map; +import java.util.Objects; import javax.annotation.Nullable; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; - -import com.google.common.base.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.collect.ImmutableMap; public class LocationSummary extends LocationSpec implements HasName, HasId { @@ -39,7 +37,7 @@ public class LocationSummary extends LocationSpec implements HasName, HasId { private final String id; /** only intended for instantiated Locations, not definitions */ - @JsonSerialize(include = Inclusion.NON_NULL) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final String type; private final Map links; @@ -71,26 +69,26 @@ public Map getLinks() { @Override public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof LocationSummary)) return false; if (!super.equals(o)) return false; LocationSummary that = (LocationSummary) o; - return Objects.equal(id, that.id); + return Objects.equals(id, that.id) && + Objects.equals(type, that.type) && + Objects.equals(links, that.links); } @Override public int hashCode() { - return Objects.hashCode(id, links); + return Objects.hash(super.hashCode(), id, type, links); } @Override public String toString() { - return "LocationSummary{" - + "id='" + getId() + '\'' - + "name='" + getName() + '\'' - + "spec='" + getSpec() + '\'' - + "type='" + getType() + '\'' - + ", config=" + getConfig() - + ", links=" + links - + '}'; - } - + return "LocationSummary{" + + "id='" + id + '\'' + + ", type='" + type + '\'' + + ", links=" + links + + '}'; + } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/PolicyConfigSummary.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/PolicyConfigSummary.java index 91bd2f1e08..dd5950787f 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/PolicyConfigSummary.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/PolicyConfigSummary.java @@ -20,18 +20,17 @@ import java.net.URI; import java.util.Map; +import java.util.Objects; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; - +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.collect.ImmutableMap; public class PolicyConfigSummary extends ConfigSummary { private static final long serialVersionUID = 4339330833863794513L; - - @JsonSerialize(include = Inclusion.NON_NULL) + + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final Map links; public PolicyConfigSummary( @@ -50,11 +49,24 @@ public Map getLinks() { return links; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof PolicyConfigSummary)) return false; + if (!super.equals(o)) return false; + PolicyConfigSummary that = (PolicyConfigSummary) o; + return Objects.equals(links, that.links); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), links); + } + @Override public String toString() { - return "PolicyConfigSummary{" - + "name='" + getName() + '\'' - + ", type='" + getType() + '\'' - + '}'; - } + return "PolicyConfigSummary{" + + "links=" + links + + '}'; + } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/PolicySummary.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/PolicySummary.java index df6c722e95..a52ef5355d 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/PolicySummary.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/PolicySummary.java @@ -21,20 +21,19 @@ import java.io.Serializable; import java.net.URI; import java.util.Map; +import java.util.Objects; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; - +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.collect.ImmutableMap; public class PolicySummary implements HasName, HasId, Serializable { private static final long serialVersionUID = -5086680835225136768L; - + private final String id; private final String name; - @JsonSerialize(include = Inclusion.NON_NULL) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final String catalogItemId; private final Status state; private final Map links; @@ -77,32 +76,28 @@ public Map getLinks() { @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - + if (!(o instanceof PolicySummary)) return false; PolicySummary that = (PolicySummary) o; - - if (id != null ? !id.equals(that.id) : that.id != null) - return false; - if (name != null ? !name.equals(that.name) : that.name != null) - return false; - - return true; + return Objects.equals(id, that.id) && + Objects.equals(name, that.name) && + Objects.equals(catalogItemId, that.catalogItemId) && + state == that.state && + Objects.equals(links, that.links); } @Override public int hashCode() { - int result = name != null ? name.hashCode() : 0; - result = 31 * result + (id != null ? id.hashCode() : 0); - return result; + return Objects.hash(id, name, catalogItemId, state, links); } @Override public String toString() { - return "ConfigSummary{" - + "name='" + name + '\'' - + ", id='" + id + '\'' - + ", catalogItemId='" + catalogItemId + '\'' - + ", links=" + links - + '}'; + return "PolicySummary{" + + "id='" + id + '\'' + + ", name='" + name + '\'' + + ", catalogItemId='" + catalogItemId + '\'' + + ", state=" + state + + ", links=" + links + + '}'; } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/ScriptExecutionSummary.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/ScriptExecutionSummary.java index 9f7d5d53c8..c84573c3d9 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/ScriptExecutionSummary.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/ScriptExecutionSummary.java @@ -19,28 +19,28 @@ package org.apache.brooklyn.rest.domain; import java.io.Serializable; +import java.util.Objects; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; public class ScriptExecutionSummary implements Serializable { private static final long serialVersionUID = -7707936602991185960L; - - @JsonSerialize(include = Inclusion.NON_NULL) + + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final Object result; - @JsonSerialize(include = Inclusion.NON_EMPTY) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY) private final String problem; - @JsonSerialize(include = Inclusion.NON_EMPTY) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY) private final String stdout; - @JsonSerialize(include = Inclusion.NON_EMPTY) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY) private final String stderr; public ScriptExecutionSummary( - @JsonProperty("result") Object result, - @JsonProperty("problem") String problem, - @JsonProperty("stdout") String stdout, + @JsonProperty("result") Object result, + @JsonProperty("problem") String problem, + @JsonProperty("stdout") String stdout, @JsonProperty("stderr") String stderr) { super(); this.result = result; @@ -64,4 +64,30 @@ public String getStderr() { public String getStdout() { return stdout; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ScriptExecutionSummary)) return false; + ScriptExecutionSummary that = (ScriptExecutionSummary) o; + return Objects.equals(result, that.result) && + Objects.equals(problem, that.problem) && + Objects.equals(stdout, that.stdout) && + Objects.equals(stderr, that.stderr); + } + + @Override + public int hashCode() { + return Objects.hash(result, problem, stdout, stderr); + } + + @Override + public String toString() { + return "ScriptExecutionSummary{" + + "result=" + result + + ", problem='" + problem + '\'' + + ", stdout='" + stdout + '\'' + + ", stderr='" + stderr + '\'' + + '}'; + } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/SensorSummary.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/SensorSummary.java index 890030e1d7..11a4d2f519 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/SensorSummary.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/SensorSummary.java @@ -21,22 +21,21 @@ import java.io.Serializable; import java.net.URI; import java.util.Map; +import java.util.Objects; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; - +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.collect.ImmutableMap; public class SensorSummary implements HasName, Serializable { private static final long serialVersionUID = 1154308408351165426L; - + private final String name; private final String type; - @JsonSerialize(include = Inclusion.NON_NULL) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final String description; - @JsonSerialize(include = Inclusion.NON_NULL) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final Map links; public SensorSummary( @@ -70,38 +69,26 @@ public Map getLinks() { @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - + if (!(o instanceof SensorSummary)) return false; SensorSummary that = (SensorSummary) o; - - if (description != null ? !description.equals(that.description) : that.description != null) - return false; - if (links != null ? !links.equals(that.links) : that.links != null) - return false; - if (name != null ? !name.equals(that.name) : that.name != null) - return false; - if (type != null ? !type.equals(that.type) : that.type != null) - return false; - - return true; + return Objects.equals(name, that.name) && + Objects.equals(type, that.type) && + Objects.equals(description, that.description) && + Objects.equals(links, that.links); } @Override public int hashCode() { - int result = name != null ? name.hashCode() : 0; - result = 31 * result + (type != null ? type.hashCode() : 0); - result = 31 * result + (description != null ? description.hashCode() : 0); - result = 31 * result + (links != null ? links.hashCode() : 0); - return result; + return Objects.hash(name, type, description, links); } @Override public String toString() { - return "SensorSummary{" - + "name='" + name + '\'' - + ", type='" + type + '\'' - + ", description='" + description + '\'' - + ", links=" + links - + '}'; + return "SensorSummary{" + + "name='" + name + '\'' + + ", type='" + type + '\'' + + ", description='" + description + '\'' + + ", links=" + links + + '}'; } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/TaskSummary.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/TaskSummary.java index e4ce14540b..6de384e855 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/TaskSummary.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/TaskSummary.java @@ -24,21 +24,21 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import org.apache.brooklyn.util.collections.Jsonya; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; public class TaskSummary implements HasId, Serializable { private static final long serialVersionUID = 4637850742127078158L; - + private final String id; private final String displayName; private final String entityId; @@ -52,38 +52,38 @@ public class TaskSummary implements HasId, Serializable { private final String currentStatus; private final Object result; - private final boolean isError; - private final boolean isCancelled; + private final boolean error; + private final boolean cancelled; private final List children; private final LinkWithMetadata submittedByTask; - @JsonSerialize(include = Inclusion.NON_NULL) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final LinkWithMetadata blockingTask; - @JsonSerialize(include = Inclusion.NON_NULL) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final String blockingDetails; private final String detailedStatus; - @JsonSerialize(include = Inclusion.NON_NULL) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) private final Map streams; private final Map links; public TaskSummary( - @JsonProperty("id") String id, - @JsonProperty("displayName") String displayName, - @JsonProperty("description") String description, - @JsonProperty("entityId") String entityId, - @JsonProperty("entityDisplayName") String entityDisplayName, + @JsonProperty("id") String id, + @JsonProperty("displayName") String displayName, + @JsonProperty("description") String description, + @JsonProperty("entityId") String entityId, + @JsonProperty("entityDisplayName") String entityDisplayName, @JsonProperty("tags") Set tags, - @JsonProperty("submitTimeUtc") Long submitTimeUtc, - @JsonProperty("startTimeUtc") Long startTimeUtc, - @JsonProperty("endTimeUtc") Long endTimeUtc, - @JsonProperty("currentStatus") String currentStatus, - @JsonProperty("result") Object result, - @JsonProperty("isError") boolean isError, - @JsonProperty("isCancelled") boolean isCancelled, + @JsonProperty("submitTimeUtc") Long submitTimeUtc, + @JsonProperty("startTimeUtc") Long startTimeUtc, + @JsonProperty("endTimeUtc") Long endTimeUtc, + @JsonProperty("currentStatus") String currentStatus, + @JsonProperty("result") Object result, + @JsonProperty("error") boolean error, + @JsonProperty("cancelled") boolean cancelled, @JsonProperty("children") List children, @JsonProperty("submittedByTask") LinkWithMetadata submittedByTask, @JsonProperty("blockingTask") LinkWithMetadata blockingTask, @@ -102,8 +102,8 @@ public TaskSummary( this.endTimeUtc = endTimeUtc; this.currentStatus = currentStatus; this.result = result; - this.isError = isError; - this.isCancelled = isCancelled; + this.error = error; + this.cancelled = cancelled; this.children = children; this.blockingDetails = blockingDetails; this.blockingTask = blockingTask; @@ -168,26 +168,26 @@ public Object getResult() { return result; } - /** @deprecated since 0.7.0 use {@link #isError} instead. */ + /** @deprecated since 0.7.0 use {@link #error} instead. */ @Deprecated @JsonIgnore public boolean getIsError() { - return isError; + return error; } - /** @deprecated since 0.7.0 use {@link #isCancelled} instead. */ + /** @deprecated since 0.7.0 use {@link #cancelled} instead. */ @Deprecated @JsonIgnore public boolean getIsCancelled() { - return isCancelled; + return cancelled; } public boolean isError() { - return isError; + return error; } public boolean isCancelled() { - return isCancelled; + return cancelled; } public List getChildren() { @@ -218,14 +218,61 @@ public Map getLinks() { return links; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof TaskSummary)) return false; + TaskSummary that = (TaskSummary) o; + return error == that.error && + cancelled == that.cancelled && + Objects.equals(id, that.id) && + Objects.equals(displayName, that.displayName) && + Objects.equals(entityId, that.entityId) && + Objects.equals(entityDisplayName, that.entityDisplayName) && + Objects.equals(description, that.description) && + Objects.equals(tags, that.tags) && + Objects.equals(submitTimeUtc, that.submitTimeUtc) && + Objects.equals(startTimeUtc, that.startTimeUtc) && + Objects.equals(endTimeUtc, that.endTimeUtc) && + Objects.equals(currentStatus, that.currentStatus) && + Objects.equals(result, that.result) && + Objects.equals(children, that.children) && + Objects.equals(submittedByTask, that.submittedByTask) && + Objects.equals(blockingTask, that.blockingTask) && + Objects.equals(blockingDetails, that.blockingDetails) && + Objects.equals(detailedStatus, that.detailedStatus) && + Objects.equals(streams, that.streams) && + Objects.equals(links, that.links); + } + + @Override + public int hashCode() { + return Objects.hash(id, displayName, entityId, entityDisplayName, description, tags, submitTimeUtc, startTimeUtc, endTimeUtc, currentStatus, result, error, cancelled, children, submittedByTask, blockingTask, blockingDetails, detailedStatus, streams, links); + } + @Override public String toString() { - return "TaskSummary{" - + "id='" + id + '\'' - + ", displayName='" + displayName + '\'' - + ", currentStatus='" + currentStatus + '\'' - + ", startTimeUtc='" + startTimeUtc + '\'' - + ", endTimeUtc='" + endTimeUtc + '\'' - + '}'; - } + return "TaskSummary{" + + "id='" + id + '\'' + + ", displayName='" + displayName + '\'' + + ", entityId='" + entityId + '\'' + + ", entityDisplayName='" + entityDisplayName + '\'' + + ", description='" + description + '\'' + + ", tags=" + tags + + ", submitTimeUtc=" + submitTimeUtc + + ", startTimeUtc=" + startTimeUtc + + ", endTimeUtc=" + endTimeUtc + + ", currentStatus='" + currentStatus + '\'' + + ", result=" + result + + ", error=" + error + + ", cancelled=" + cancelled + + ", children=" + children + + ", submittedByTask=" + submittedByTask + + ", blockingTask=" + blockingTask + + ", blockingDetails='" + blockingDetails + '\'' + + ", detailedStatus='" + detailedStatus + '\'' + + ", streams=" + streams + + ", links=" + links + + '}'; + } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/UsageStatistic.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/UsageStatistic.java index 4e046131ce..d7d4b7fd65 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/UsageStatistic.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/UsageStatistic.java @@ -22,19 +22,15 @@ import java.io.Serializable; import java.util.Map; +import java.util.Objects; -import org.codehaus.jackson.annotate.JsonProperty; - -import com.google.common.base.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.ImmutableMap; -/** - * @author Adam Lowe - */ public class UsageStatistic implements HasId, Serializable { - + private static final long serialVersionUID = 5701414937003064442L; - + private final Status status; private final String id; private final String applicationId; @@ -44,12 +40,12 @@ public class UsageStatistic implements HasId, Serializable { private final Map metadata; public UsageStatistic( - @JsonProperty("status") Status status, - @JsonProperty("id") String id, + @JsonProperty("status") Status status, + @JsonProperty("id") String id, @JsonProperty("applicationId") String applicationId, @JsonProperty("start") String start, @JsonProperty("end") String end, - @JsonProperty("duration") long duration, + @JsonProperty("duration") long duration, @JsonProperty("metadata") Map metadata) { this.status = checkNotNull(status, "status"); this.id = checkNotNull(id, "id"); @@ -92,20 +88,20 @@ public Map getMetadata() { @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - UsageStatistic statistic = (UsageStatistic) o; - - return Objects.equal(status, statistic.status) && - Objects.equal(id, statistic.id) && - Objects.equal(applicationId, statistic.applicationId) && - Objects.equal(start, statistic.start) && - Objects.equal(end, statistic.end) && - Objects.equal(metadata, statistic.metadata); + if (!(o instanceof UsageStatistic)) return false; + UsageStatistic that = (UsageStatistic) o; + return duration == that.duration && + status == that.status && + Objects.equals(id, that.id) && + Objects.equals(applicationId, that.applicationId) && + Objects.equals(start, that.start) && + Objects.equals(end, that.end) && + Objects.equals(metadata, that.metadata); } @Override public int hashCode() { - return Objects.hashCode(status, id, applicationId, start, end, metadata); + return Objects.hash(status, id, applicationId, start, end, duration, metadata); } @Override diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/UsageStatistics.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/UsageStatistics.java index 97b09cd12e..cef3316179 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/UsageStatistics.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/UsageStatistics.java @@ -22,20 +22,16 @@ import java.net.URI; import java.util.List; import java.util.Map; +import java.util.Objects; -import org.codehaus.jackson.annotate.JsonProperty; - -import com.google.common.base.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -/** - * @author Aled Sage - */ public class UsageStatistics implements Serializable { private static final long serialVersionUID = -1842301852728290967L; - + // TODO populate links with /apps endpoint to link to /usage/applications/{id}, to make it more // RESTy @@ -58,19 +54,23 @@ public Map getLinks() { @Override public boolean equals(Object o) { - if (!(o instanceof UsageStatistics)) - return false; - UsageStatistics other = (UsageStatistics) o; - return Objects.equal(statistics, other.statistics); + if (this == o) return true; + if (!(o instanceof UsageStatistics)) return false; + UsageStatistics that = (UsageStatistics) o; + return Objects.equals(statistics, that.statistics) && + Objects.equals(links, that.links); } @Override public int hashCode() { - return Objects.hashCode(statistics); + return Objects.hash(statistics, links); } @Override public String toString() { - return "UsageStatistics{" + "statistics=" + statistics + ", links=" + links + '}'; + return "UsageStatistics{" + + "statistics=" + statistics + + ", links=" + links + + '}'; } } diff --git a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/VersionSummary.java b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/VersionSummary.java index 6ebf5e7b70..3e36cb562a 100644 --- a/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/VersionSummary.java +++ b/brooklyn-server/rest/rest-api/src/main/java/org/apache/brooklyn/rest/domain/VersionSummary.java @@ -23,16 +23,17 @@ import java.io.Serializable; import java.util.Collections; import java.util.List; +import java.util.Objects; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import org.codehaus.jackson.annotate.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty; public class VersionSummary implements Serializable { private static final long serialVersionUID = 7275038546963638540L; - + private final String version; private final String buildSha1; private final String buildBranch; @@ -77,4 +78,29 @@ public List getFeatures() { return features; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof VersionSummary)) return false; + VersionSummary that = (VersionSummary) o; + return Objects.equals(version, that.version) && + Objects.equals(buildSha1, that.buildSha1) && + Objects.equals(buildBranch, that.buildBranch) && + Objects.equals(features, that.features); + } + + @Override + public int hashCode() { + return Objects.hash(version, buildSha1, buildBranch, features); + } + + @Override + public String toString() { + return "VersionSummary{" + + "version='" + version + '\'' + + ", buildSha1='" + buildSha1 + '\'' + + ", buildBranch='" + buildBranch + '\'' + + ", features=" + features + + '}'; + } } diff --git a/brooklyn-server/rest/rest-api/src/main/webapp/WEB-INF/web.xml b/brooklyn-server/rest/rest-api/src/main/webapp/WEB-INF/web.xml index 06331bd0aa..bab259bf0c 100644 --- a/brooklyn-server/rest/rest-api/src/main/webapp/WEB-INF/web.xml +++ b/brooklyn-server/rest/rest-api/src/main/webapp/WEB-INF/web.xml @@ -83,14 +83,14 @@ com.sun.jersey.config.property.packages - io.swagger.jaxrs.listing;org.codehaus.jackson.jaxrs;org.apache.brooklyn.rest.resources;org.apache.brooklyn.rest.util + io.swagger.jaxrs.listing;com.fasterxml.jackson.jaxrs;org.apache.brooklyn.rest.resources;org.apache.brooklyn.rest.util com.sun.jersey.config.property.classnames - org.codehaus.jackson.jaxrs.JacksonJsonProvider + com.fasterxml.jackson.jaxrs.JacksonJsonProvider com.sun.jersey.api.json.POJOMappingFeature diff --git a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/domain/LocationSummaryTest.java b/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/AbstractDomainTest.java similarity index 62% rename from brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/domain/LocationSummaryTest.java rename to brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/AbstractDomainTest.java index 7df3de14b0..dc1131d425 100644 --- a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/domain/LocationSummaryTest.java +++ b/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/AbstractDomainTest.java @@ -18,38 +18,27 @@ */ package org.apache.brooklyn.rest.domain; -import static org.apache.brooklyn.rest.util.RestApiTestUtils.asJson; -import static org.apache.brooklyn.rest.util.RestApiTestUtils.fromJson; -import static org.apache.brooklyn.rest.util.RestApiTestUtils.jsonFixture; -import static org.testng.Assert.assertEquals; - import java.io.IOException; -import java.util.Collections; -import java.util.List; -import org.codehaus.jackson.type.TypeReference; import org.testng.annotations.Test; -import org.apache.brooklyn.rest.transform.LocationTransformer; +import static org.apache.brooklyn.rest.util.RestApiTestUtils.asJson; +import static org.apache.brooklyn.rest.util.RestApiTestUtils.fromJson; +import static org.apache.brooklyn.rest.util.RestApiTestUtils.jsonFixture; +import static org.testng.Assert.assertEquals; -public class LocationSummaryTest { +public abstract class AbstractDomainTest { - @SuppressWarnings("deprecation") - final LocationSummary summary = LocationTransformer.newInstance("123", LocationSpec.localhost()); + protected abstract String getPath(); + protected abstract Object getDomainObject(); @Test public void testSerializeToJSON() throws IOException { - assertEquals(asJson(summary), jsonFixture("fixtures/location-summary.json")); + assertEquals(asJson(getDomainObject()), jsonFixture(getPath())); } @Test public void testDeserializeFromJSON() throws IOException { - assertEquals(fromJson(jsonFixture("fixtures/location-summary.json"), LocationSummary.class), summary); - } - - @Test - public void testDeserializeListFromJSON() throws IOException { - assertEquals(fromJson(jsonFixture("fixtures/location-list.json"), new TypeReference>() {}), - Collections.singletonList(summary)); + assertEquals(fromJson(jsonFixture(getPath()), getDomainObject().getClass()), getDomainObject()); } } diff --git a/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/ApiErrorTest.java b/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/ApiErrorTest.java index 3b370a00a8..f73bd30517 100644 --- a/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/ApiErrorTest.java +++ b/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/ApiErrorTest.java @@ -25,19 +25,27 @@ import static org.testng.Assert.assertFalse; import java.io.IOException; +import java.net.URI; import org.testng.annotations.Test; import org.testng.util.Strings; -public class ApiErrorTest { +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; - @Test - public void testSerializeApiError() throws IOException { - ApiError error = ApiError.builder() +public class ApiErrorTest extends AbstractDomainTest { + + @Override + protected String getPath() { + return "fixtures/api-error-basic.json"; + } + + @Override + protected Object getDomainObject() { + return ApiError.builder() .message("explanatory message") .details("accompanying details") .build(); - assertEquals(asJson(error), jsonFixture("fixtures/api-error-basic.json")); } @Test diff --git a/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/ApplicationSpecTest.java b/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/ApplicationSpecTest.java index a04d074660..b2690d6b4a 100644 --- a/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/ApplicationSpecTest.java +++ b/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/ApplicationSpecTest.java @@ -18,36 +18,23 @@ */ package org.apache.brooklyn.rest.domain; -import static org.apache.brooklyn.rest.util.RestApiTestUtils.asJson; -import static org.apache.brooklyn.rest.util.RestApiTestUtils.fromJson; -import static org.apache.brooklyn.rest.util.RestApiTestUtils.jsonFixture; -import static org.testng.Assert.assertEquals; - -import java.io.IOException; - -import org.testng.annotations.Test; - import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -public class ApplicationSpecTest { +public class ApplicationSpecTest extends AbstractDomainTest { - final EntitySpec entitySpec = new EntitySpec("Vanilla Java App", "org.apache.brooklyn.entity.java.VanillaJavaApp", - ImmutableMap.of( - "initialSize", "1", - "creationScriptUrl", "http://my.brooklyn.io/storage/foo.sql")); - - final ApplicationSpec applicationSpec = ApplicationSpec.builder().name("myapp") - .entities(ImmutableSet.of(entitySpec)).locations(ImmutableSet.of("/v1/locations/1")) - .build(); - - @Test - public void testSerializeToJSON() throws IOException { - assertEquals(asJson(applicationSpec), jsonFixture("fixtures/application-spec.json")); + @Override + protected String getPath() { + return "fixtures/application-spec.json"; } - @Test - public void testDeserializeFromJSON() throws IOException { - assertEquals(fromJson(jsonFixture("fixtures/application-spec.json"), ApplicationSpec.class), applicationSpec); + @Override + protected Object getDomainObject() { + EntitySpec entitySpec = new EntitySpec("Vanilla Java App", "org.apache.brooklyn.entity.java.VanillaJavaApp", + ImmutableMap.of("initialSize", "1", "creationScriptUrl", "http://my.brooklyn.io/storage/foo.sql")); + return ApplicationSpec.builder().name("myapp") + .entities(ImmutableSet.of(entitySpec)).locations(ImmutableSet.of("/v1/locations/1")) + .build(); } + } diff --git a/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/EffectorSummaryTest.java b/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/EffectorSummaryTest.java index affce4e8bd..71cb64d2b6 100644 --- a/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/EffectorSummaryTest.java +++ b/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/EffectorSummaryTest.java @@ -18,36 +18,27 @@ */ package org.apache.brooklyn.rest.domain; -import static org.apache.brooklyn.rest.util.RestApiTestUtils.asJson; -import static org.apache.brooklyn.rest.util.RestApiTestUtils.fromJson; -import static org.apache.brooklyn.rest.util.RestApiTestUtils.jsonFixture; -import static org.testng.Assert.assertEquals; - -import java.io.IOException; import java.net.URI; -import org.testng.annotations.Test; - import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -public class EffectorSummaryTest { +public class EffectorSummaryTest extends AbstractDomainTest { - final EffectorSummary effectorSummary = new EffectorSummary( - "stop", - "void", - ImmutableSet.>of(), - "Effector description", - ImmutableMap.of( - "self", URI.create("/v1/applications/redis-app/entities/redis-ent/effectors/stop"))); - - @Test - public void testSerializeToJSON() throws IOException { - assertEquals(asJson(effectorSummary), jsonFixture("fixtures/effector-summary.json")); + @Override + protected String getPath() { + return "fixtures/effector-summary.json"; } - @Test - public void testDeserializeFromJSON() throws IOException { - assertEquals(fromJson(jsonFixture("fixtures/effector-summary.json"), EffectorSummary.class), effectorSummary); + @Override + protected Object getDomainObject() { + return new EffectorSummary( + "stop", + "void", + ImmutableSet.>of(), + "Effector description", + ImmutableMap.of( + "self", URI.create("/v1/applications/redis-app/entities/redis-ent/effectors/stop"))); } + } diff --git a/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/EntitySpecTest.java b/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/EntitySpecTest.java index a61cfd5c7e..1beb078584 100644 --- a/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/EntitySpecTest.java +++ b/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/EntitySpecTest.java @@ -18,7 +18,6 @@ */ package org.apache.brooklyn.rest.domain; -import static org.apache.brooklyn.rest.util.RestApiTestUtils.asJson; import static org.apache.brooklyn.rest.util.RestApiTestUtils.fromJson; import static org.apache.brooklyn.rest.util.RestApiTestUtils.jsonFixture; import static org.testng.Assert.assertEquals; @@ -27,24 +26,23 @@ import org.testng.annotations.Test; -public class EntitySpecTest { +public class EntitySpecTest extends AbstractDomainTest { - final EntitySpec entitySpec = new EntitySpec("Vanilla Java App", "org.apache.brooklyn.entity.java.VanillaJavaApp"); - - @Test - public void testSerializeToJSON() throws IOException { - assertEquals(asJson(new EntitySpec[] { entitySpec }), jsonFixture("fixtures/entity.json")); + @Override + protected String getPath() { + return "fixtures/entity.json"; } - @Test - public void testDeserializeFromJSON() throws IOException { - assertEquals(fromJson(jsonFixture("fixtures/entity.json"), EntitySpec[].class), new EntitySpec[] { entitySpec }); + @Override + protected Object getDomainObject() { + EntitySpec entitySpec = new EntitySpec("Vanilla Java App", "org.apache.brooklyn.entity.java.VanillaJavaApp"); + return new EntitySpec[] { entitySpec }; } @Test public void testDeserializeFromJSONOnlyWithType() throws IOException { EntitySpec actual = fromJson(jsonFixture("fixtures/entity-only-type.json"), EntitySpec.class); - assertEquals(actual.getName(), actual.getType()); + assertEquals(actual.getType(), "org.apache.brooklyn.entity.java.VanillaJavaApp"); assertEquals(actual.getConfig().size(), 0); } } diff --git a/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/EntitySummaryTest.java b/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/EntitySummaryTest.java index 7f20d7bae2..2d39cc993e 100644 --- a/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/EntitySummaryTest.java +++ b/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/EntitySummaryTest.java @@ -18,24 +18,21 @@ */ package org.apache.brooklyn.rest.domain; -import static org.apache.brooklyn.rest.util.RestApiTestUtils.asJson; -import static org.apache.brooklyn.rest.util.RestApiTestUtils.fromJson; -import static org.apache.brooklyn.rest.util.RestApiTestUtils.jsonFixture; -import static org.testng.Assert.assertEquals; - -import java.io.IOException; import java.net.URI; import java.util.Map; -import org.testng.annotations.Test; - import com.google.common.collect.Maps; -public class EntitySummaryTest { +public class EntitySummaryTest extends AbstractDomainTest { + + @Override + protected String getPath() { + return "fixtures/entity-summary.json"; + } - static final Map links; - static { - links = Maps.newLinkedHashMap(); + @Override + protected Object getDomainObject() { + Map links = Maps.newLinkedHashMap(); links.put("self", URI.create("/v1/applications/tesr/entities/zQsqdXzi")); links.put("catalog", URI.create("/v1/catalog/entities/org.apache.brooklyn.entity.webapp.tomcat.TomcatServer")); links.put("application", URI.create("/v1/applications/tesr")); @@ -43,19 +40,9 @@ public class EntitySummaryTest { links.put("effectors", URI.create("fixtures/effector-summary-list.json")); links.put("sensors", URI.create("fixtures/sensor-summary-list.json")); links.put("activities", URI.create("fixtures/task-summary-list.json")); - } - - static final EntitySummary entitySummary = new EntitySummary("zQsqdXzi", "MyTomcat", - "org.apache.brooklyn.entity.webapp.tomcat.TomcatServer", null, links); - - @Test - public void testSerializeToJSON() throws IOException { - assertEquals(asJson(entitySummary), jsonFixture("fixtures/entity-summary.json")); - } - @Test - public void testDeserializeFromJSON() throws IOException { - assertEquals(fromJson(jsonFixture("fixtures/entity-summary.json"), EntitySummary.class), entitySummary); + return new EntitySummary("zQsqdXzi", "MyTomcat", + "org.apache.brooklyn.entity.webapp.tomcat.TomcatServer", null, links); } } diff --git a/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/LocationSummaryTest.java b/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/LocationSummaryTest.java new file mode 100644 index 0000000000..6279546a1a --- /dev/null +++ b/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/LocationSummaryTest.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.brooklyn.rest.domain; + +import java.net.URI; +import java.util.Map; + +import com.google.common.collect.Maps; + +public class LocationSummaryTest extends AbstractDomainTest { + + @Override + protected String getPath() { + return "fixtures/location-summary.json"; + } + + @Override + protected Object getDomainObject() { + Map links = Maps.newLinkedHashMap(); + links.put("self", URI.create("/v1/locations/123")); + + return new LocationSummary("123", "localhost", "localhost", null, null, links); + } + +} diff --git a/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/VersionSummaryTest.java b/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/VersionSummaryTest.java index bd4c2f0c64..7bed51b2e1 100644 --- a/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/VersionSummaryTest.java +++ b/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/domain/VersionSummaryTest.java @@ -19,44 +19,31 @@ package org.apache.brooklyn.rest.domain; -import static org.apache.brooklyn.rest.util.RestApiTestUtils.asJson; -import static org.apache.brooklyn.rest.util.RestApiTestUtils.fromJson; -import static org.apache.brooklyn.rest.util.RestApiTestUtils.jsonFixture; -import static org.testng.Assert.assertEquals; - -import org.testng.annotations.Test; - import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -public class VersionSummaryTest { - - BrooklynFeatureSummary features = new BrooklynFeatureSummary( - "Sample Brooklyn Project com.acme.sample:brooklyn-sample v0.1.0-SNAPSHOT", - "com.acme.sample.brooklyn-sample", - "0.1.0.SNAPSHOT", - "523305000", - ImmutableMap.of("Brooklyn-Feature-Build-Id", "e0fee1adf795c84eec4735f039503eb18d9c35cc") - ); - VersionSummary summary = new VersionSummary( - "0.7.0-SNAPSHOT", - "cb4f0a3af2f5042222dd176edc102bfa64e7e0b5", - "versions", - ImmutableList.of(features) - ); +public class VersionSummaryTest extends AbstractDomainTest { - @Test - public void testSerialize() { - assertEquals(asJson(summary), jsonFixture("fixtures/server-version.json")); + @Override + protected String getPath() { + return "fixtures/server-version.json"; } - @Test - public void testDeserialize() { - VersionSummary deserialized = fromJson(jsonFixture("fixtures/server-version.json"), VersionSummary.class); - assertEquals(deserialized.getBuildSha1(), summary.getBuildSha1()); - assertEquals(deserialized.getFeatures().size(), 1); - assertEquals(deserialized.getFeatures().get(0).getSymbolicName(), features.getSymbolicName()); - assertEquals(deserialized.getFeatures().get(0).getAdditionalData().get("Brooklyn-Feature-Build-Id"), "e0fee1adf795c84eec4735f039503eb18d9c35cc"); + @Override + protected Object getDomainObject() { + BrooklynFeatureSummary features = new BrooklynFeatureSummary( + "Sample Brooklyn Project com.acme.sample:brooklyn-sample v0.1.0-SNAPSHOT", + "com.acme.sample.brooklyn-sample", + "0.1.0.SNAPSHOT", + "523305000", + ImmutableMap.of("Brooklyn-Feature-Build-Id", "e0fee1adf795c84eec4735f039503eb18d9c35cc") + ); + return new VersionSummary( + "0.7.0-SNAPSHOT", + "cb4f0a3af2f5042222dd176edc102bfa64e7e0b5", + "versions", + ImmutableList.of(features) + ); } } diff --git a/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/util/RestApiTestUtils.java b/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/util/RestApiTestUtils.java index 379cdfcf95..36ad69c307 100644 --- a/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/util/RestApiTestUtils.java +++ b/brooklyn-server/rest/rest-api/src/test/java/org/apache/brooklyn/rest/util/RestApiTestUtils.java @@ -22,8 +22,9 @@ import org.apache.brooklyn.util.exceptions.Exceptions; import org.apache.brooklyn.util.stream.Streams; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.type.TypeReference; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; public class RestApiTestUtils { diff --git a/brooklyn-server/rest/rest-client/pom.xml b/brooklyn-server/rest/rest-client/pom.xml index 5b2714831b..1981975e4f 100644 --- a/brooklyn-server/rest/rest-client/pom.xml +++ b/brooklyn-server/rest/rest-client/pom.xml @@ -56,7 +56,7 @@ org.jboss.resteasy - resteasy-jackson-provider + resteasy-jackson2-provider org.slf4j diff --git a/brooklyn-server/rest/rest-client/src/test/webapp/WEB-INF/web.xml b/brooklyn-server/rest/rest-client/src/test/webapp/WEB-INF/web.xml index 83d76c0632..38b637a59c 100644 --- a/brooklyn-server/rest/rest-client/src/test/webapp/WEB-INF/web.xml +++ b/brooklyn-server/rest/rest-client/src/test/webapp/WEB-INF/web.xml @@ -84,7 +84,7 @@ org.apache.brooklyn.rest.apidoc.ApidocHelpMessageBodyWriter; org.apache.brooklyn.rest.util.FormMapProvider; - org.codehaus.jackson.jaxrs.JacksonJsonProvider; + com.fasterxml.jackson.jaxrs.JacksonJsonProvider; org.apache.brooklyn.rest.resources.ActivityResource; org.apache.brooklyn.rest.resources.ApidocResource; org.apache.brooklyn.rest.resources.ApplicationResource; diff --git a/brooklyn-server/rest/rest-server/pom.xml b/brooklyn-server/rest/rest-server/pom.xml index fdee3a5af4..9b36f69c7e 100644 --- a/brooklyn-server/rest/rest-server/pom.xml +++ b/brooklyn-server/rest/rest-server/pom.xml @@ -7,9 +7,9 @@ to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -39,11 +39,6 @@ brooklyn-rest-api ${project.version} - - org.apache.brooklyn - brooklyn-core - ${project.version} - org.apache.brooklyn brooklyn-camp @@ -100,14 +95,12 @@ slf4j-api - com.sun.jersey - jersey-json - - - com.sun.xml.bind - jaxb-impl - - + com.fasterxml.jackson.datatype + jackson-datatype-guava + + + com.fasterxml.jackson.jaxrs + jackson-jaxrs-json-provider com.sun.jersey @@ -133,23 +126,7 @@ org.eclipse.jetty jetty-servlet - - org.codehaus.jackson - jackson-core-asl - - - org.codehaus.jackson - jackson-mapper-asl - - - org.codehaus.jackson - jackson-jaxrs - - - org.codehaus.jackson - jackson-xc - - + org.apache.brooklyn brooklyn-test-support diff --git a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/resources/AbstractBrooklynRestResource.java b/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/resources/AbstractBrooklynRestResource.java index a8cc909f82..9057a2cf5e 100644 --- a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/resources/AbstractBrooklynRestResource.java +++ b/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/resources/AbstractBrooklynRestResource.java @@ -33,7 +33,8 @@ import org.apache.brooklyn.util.core.task.Tasks; import org.apache.brooklyn.util.guava.Maybe; import org.apache.brooklyn.util.time.Duration; -import org.codehaus.jackson.map.ObjectMapper; + +import com.fasterxml.jackson.databind.ObjectMapper; public abstract class AbstractBrooklynRestResource implements ManagementContextInjectable { diff --git a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/resources/ApplicationResource.java b/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/resources/ApplicationResource.java index 22a4502f14..d9c38b6077 100644 --- a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/resources/ApplicationResource.java +++ b/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/resources/ApplicationResource.java @@ -64,6 +64,7 @@ import org.apache.brooklyn.rest.api.ApplicationApi; import org.apache.brooklyn.rest.domain.ApplicationSpec; import org.apache.brooklyn.rest.domain.ApplicationSummary; +import org.apache.brooklyn.rest.domain.EntityDetail; import org.apache.brooklyn.rest.domain.EntitySummary; import org.apache.brooklyn.rest.domain.TaskSummary; import org.apache.brooklyn.rest.filter.HaHotStateRequired; @@ -79,15 +80,14 @@ import org.apache.brooklyn.util.guava.Maybe; import org.apache.brooklyn.util.javalang.JavaClassNames; import org.apache.brooklyn.util.text.Strings; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.node.ArrayNode; -import org.codehaus.jackson.node.ObjectNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Throwables; import com.google.common.collect.FluentIterable; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; @HaHotStateRequired public class ApplicationResource extends AbstractBrooklynRestResource implements ApplicationApi { @@ -97,127 +97,88 @@ public class ApplicationResource extends AbstractBrooklynRestResource implements @Context private UriInfo uriInfo; - /** @deprecated since 0.6.0 use {@link #fetch(String)} (with slightly different, but better semantics) */ - @Deprecated - @Override - public JsonNode applicationTree() { - ArrayNode apps = mapper().createArrayNode(); - for (Application application : mgmt().getApplications()) - apps.add(recursiveTreeFromEntity(application)); - return apps; - } - - private ObjectNode entityBase(Entity entity) { - ObjectNode aRoot = mapper().createObjectNode(); - aRoot.put("name", entity.getDisplayName()); - aRoot.put("id", entity.getId()); - aRoot.put("type", entity.getEntityType().getName()); - + private EntityDetail fromEntity(Entity entity) { Boolean serviceUp = entity.getAttribute(Attributes.SERVICE_UP); - if (serviceUp!=null) aRoot.put("serviceUp", serviceUp); Lifecycle serviceState = entity.getAttribute(Attributes.SERVICE_STATE_ACTUAL); - if (serviceState!=null) aRoot.put("serviceState", serviceState.toString()); String iconUrl = entity.getIconUrl(); if (iconUrl!=null) { if (brooklyn().isUrlServerSideAndSafe(iconUrl)) // route to server if it is a server-side url iconUrl = EntityTransformer.entityUri(entity)+"/icon"; - aRoot.put("iconUrl", iconUrl); } - return aRoot; - } - - private JsonNode recursiveTreeFromEntity(Entity entity) { - ObjectNode aRoot = entityBase(entity); - - if (!entity.getChildren().isEmpty()) - aRoot.put("children", childEntitiesRecursiveAsArray(entity)); - - return aRoot; - } - - // TODO when applicationTree can be removed, replace this with an extension to EntitySummary (without links) - private JsonNode fromEntity(Entity entity) { - ObjectNode aRoot = entityBase(entity); - - aRoot.put("applicationId", entity.getApplicationId()); - - if (entity.getParent()!=null) { - aRoot.put("parentId", entity.getParent().getId()); + List children = Lists.newArrayList(); + if (!entity.getChildren().isEmpty()) { + for (Entity child : entity.getChildren()) { + children.add(fromEntity(child)); + } } - if (!entity.groups().isEmpty()) - aRoot.put("groupIds", entitiesIdAsArray(entity.groups())); + String parentId = null; + if (entity.getParent()!= null) { + parentId = entity.getParent().getId(); + } - if (!entity.getChildren().isEmpty()) - aRoot.put("children", entitiesIdAndNameAsArray(entity.getChildren())); + List groupIds = Lists.newArrayList(); + if (!entity.groups().isEmpty()) { + groupIds.addAll(entitiesIdAsArray(entity.groups())); + } + List> members = Lists.newArrayList(); if (entity instanceof Group) { // use attribute instead of method in case it is read-only - Collection members = entity.getAttribute(AbstractGroup.GROUP_MEMBERS); - if (members!=null && !members.isEmpty()) - aRoot.put("members", entitiesIdAndNameAsArray(members)); + Collection memberEntities = entity.getAttribute(AbstractGroup.GROUP_MEMBERS); + if (memberEntities != null && !memberEntities.isEmpty()) + members.addAll(entitiesIdAndNameAsList(memberEntities)); } - return aRoot; + return new EntityDetail(entity.getId(), parentId, entity.getDisplayName(), + entity.getEntityType().getName(), serviceUp, serviceState, iconUrl, entity.getCatalogItemId(), + children, groupIds, members); } - private ArrayNode childEntitiesRecursiveAsArray(Entity entity) { - ArrayNode node = mapper().createArrayNode(); - for (Entity e : entity.getChildren()) { - if (Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.SEE_ENTITY, entity)) { - node.add(recursiveTreeFromEntity(e)); - } - } - return node; - } - - private ArrayNode entitiesIdAndNameAsArray(Collection entities) { - ArrayNode node = mapper().createArrayNode(); + private List> entitiesIdAndNameAsList(Collection entities) { + List> members = Lists.newArrayList(); for (Entity entity : entities) { if (Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.SEE_ENTITY, entity)) { - ObjectNode holder = mapper().createObjectNode(); - holder.put("id", entity.getId()); - holder.put("name", entity.getDisplayName()); - node.add(holder); + members.add(ImmutableMap.of("id", entity.getId(), "name", entity.getDisplayName())); } } - return node; + return members; } - private ArrayNode entitiesIdAsArray(Iterable entities) { - ArrayNode node = mapper().createArrayNode(); + private List entitiesIdAsArray(Iterable entities) { + List ids = Lists.newArrayList(); for (Entity entity : entities) { if (Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.SEE_ENTITY, entity)) { - node.add(entity.getId()); + ids.add(entity.getId()); } } - return node; + return ids; } @Override - public JsonNode fetch(String entityIds) { - Map jsonEntitiesById = MutableMap.of(); - for (Application application : mgmt().getApplications()) - jsonEntitiesById.put(application.getId(), fromEntity(application)); + public List fetch(String entityIds) { + + List entitySummaries = Lists.newArrayList(); + for (Entity application : mgmt().getApplications()) { + entitySummaries.add(fromEntity(application)); + } + if (entityIds != null) { for (String entityId: entityIds.split(",")) { Entity entity = mgmt().getEntityManager().getEntity(entityId.trim()); while (entity != null && entity.getParent() != null) { if (Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.SEE_ENTITY, entity)) { - jsonEntitiesById.put(entity.getId(), fromEntity(entity)); + entitySummaries.add(fromEntity(entity)); } entity = entity.getParent(); } } } - - ArrayNode result = mapper().createArrayNode(); - for (JsonNode n: jsonEntitiesById.values()) result.add(n); - return result; + return entitySummaries; } @Override @@ -280,7 +241,7 @@ public Response createFromYaml(String yaml) { log.debug("Creating app from yaml:\n{}", yaml); EntitySpec spec = createEntitySpecForApplication(yaml); - + if (!Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.DEPLOY_APPLICATION, spec)) { throw WebResourceUtils.unauthorized("User '%s' is not authorized to start application %s", Entitlements.getEntitlementContext().user(), yaml); @@ -361,7 +322,7 @@ public Response createFromForm(String contents) { @Override public Response delete(String application) { Application app = brooklyn().getApplication(application); - if (!Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.INVOKE_EFFECTOR, Entitlements.EntityAndItem.of(app, + if (!Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.INVOKE_EFFECTOR, Entitlements.EntityAndItem.of(app, StringAndArgument.of(Entitlements.LifecycleEffectors.DELETE, null)))) { throw WebResourceUtils.unauthorized("User '%s' is not authorized to delete application %s", Entitlements.getEntitlementContext().user(), app); @@ -385,7 +346,7 @@ private EntitySpec createEntitySpecForApplication(String } } } - + private void checkApplicationTypesAreValid(ApplicationSpec applicationSpec) { String appType = applicationSpec.getType(); if (appType != null) { @@ -410,7 +371,7 @@ private void checkSpecTypeIsValid(String type, Class s typeV.get(); return; } - + // not found, try classloading try { brooklyn().getCatalogClassLoader().loadClass(type); @@ -420,7 +381,7 @@ private void checkSpecTypeIsValid(String type, Class s } log.info(JavaClassNames.simpleClassName(subType)+" type '{}' not defined in catalog but is on classpath; continuing", type); } - + private void checkEntityTypeIsValid(String type) { checkSpecTypeIsValid(type, Entity.class); } diff --git a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/WebResourceUtils.java b/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/WebResourceUtils.java index 1a74a339fe..da72c6f74f 100644 --- a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/WebResourceUtils.java +++ b/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/WebResourceUtils.java @@ -27,7 +27,6 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import org.codehaus.jackson.map.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.brooklyn.core.catalog.internal.CatalogUtils; @@ -37,6 +36,7 @@ import org.apache.brooklyn.util.net.Urls; import org.apache.brooklyn.util.text.StringEscapes.JavaStringEscapes; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.ImmutableMap; import com.sun.jersey.spi.container.ContainerResponse; diff --git a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/BidiSerialization.java b/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/BidiSerialization.java index d53e10011c..93cae3fe7a 100644 --- a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/BidiSerialization.java +++ b/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/BidiSerialization.java @@ -25,15 +25,14 @@ import org.apache.brooklyn.api.location.Location; import org.apache.brooklyn.api.mgmt.ManagementContext; import org.apache.brooklyn.api.objs.BrooklynObject; -import org.codehaus.jackson.JsonGenerationException; -import org.codehaus.jackson.JsonGenerator; -import org.codehaus.jackson.JsonParser; -import org.codehaus.jackson.JsonProcessingException; -import org.codehaus.jackson.map.DeserializationContext; -import org.codehaus.jackson.map.JsonDeserializer; -import org.codehaus.jackson.map.JsonSerializer; -import org.codehaus.jackson.map.SerializerProvider; -import org.codehaus.jackson.map.module.SimpleModule; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.module.SimpleModule; public class BidiSerialization { @@ -65,14 +64,14 @@ public abstract static class AbstractWithManagementContextSerialization { protected class Serializer extends JsonSerializer { @Override - public void serialize(T value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { + public void serialize(T value, JsonGenerator jgen, SerializerProvider provider) throws IOException { AbstractWithManagementContextSerialization.this.serialize(value, jgen, provider); } } protected class Deserializer extends JsonDeserializer { @Override - public T deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { + public T deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { return AbstractWithManagementContextSerialization.this.deserialize(jp, ctxt); } } @@ -95,27 +94,27 @@ public JsonDeserializer getDeserializer() { return deserializer; } - public void serialize(T value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { + public void serialize(T value, JsonGenerator jgen, SerializerProvider provider) throws IOException { jgen.writeStartObject(); writeBody(value, jgen, provider); jgen.writeEndObject(); } - protected void writeBody(T value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonGenerationException, JsonProcessingException { + protected void writeBody(T value, JsonGenerator jgen, SerializerProvider provider) throws IOException { jgen.writeStringField("type", value.getClass().getCanonicalName()); customWriteBody(value, jgen, provider); } - public abstract void customWriteBody(T value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException; + public abstract void customWriteBody(T value, JsonGenerator jgen, SerializerProvider provider) throws IOException; - public T deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { + public T deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { @SuppressWarnings("unchecked") Map values = jp.readValueAs(Map.class); String type = (String) values.get("type"); return customReadBody(type, values, jp, ctxt); } - protected abstract T customReadBody(String type, Map values, JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException; + protected abstract T customReadBody(String type, Map values, JsonParser jp, DeserializationContext ctxt) throws IOException; public void install(SimpleModule module) { module.addSerializer(type, serializer); @@ -126,9 +125,9 @@ public void install(SimpleModule module) { public static class ManagementContextSerialization extends AbstractWithManagementContextSerialization { public ManagementContextSerialization(ManagementContext mgmt) { super(ManagementContext.class, mgmt); } @Override - public void customWriteBody(ManagementContext value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {} + public void customWriteBody(ManagementContext value, JsonGenerator jgen, SerializerProvider provider) throws IOException {} @Override - protected ManagementContext customReadBody(String type, Map values, JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { + protected ManagementContext customReadBody(String type, Map values, JsonParser jp, DeserializationContext ctxt) throws IOException { return mgmt; } } @@ -138,16 +137,16 @@ public AbstractBrooklynObjectSerialization(Class type, ManagementContext mgmt super(type, mgmt); } @Override - protected void writeBody(T value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonGenerationException, JsonProcessingException { + protected void writeBody(T value, JsonGenerator jgen, SerializerProvider provider) throws IOException { jgen.writeStringField("type", type.getCanonicalName()); customWriteBody(value, jgen, provider); } @Override - public void customWriteBody(T value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { + public void customWriteBody(T value, JsonGenerator jgen, SerializerProvider provider) throws IOException { jgen.writeStringField("id", value.getId()); } @Override - protected T customReadBody(String type, Map values, JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { + protected T customReadBody(String type, Map values, JsonParser jp, DeserializationContext ctxt) throws IOException { return getInstanceFromId((String) values.get("id")); } protected abstract T getInstanceFromId(String id); diff --git a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonJsonProvider.java b/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonJsonProvider.java index 053e8b4f50..f6d2a08462 100644 --- a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonJsonProvider.java +++ b/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonJsonProvider.java @@ -27,18 +27,17 @@ import org.apache.brooklyn.core.config.ConfigKeys; import org.apache.brooklyn.core.internal.BrooklynProperties; import org.apache.brooklyn.core.mgmt.ManagementContextInjectable; -import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal; import org.apache.brooklyn.core.server.BrooklynServiceAttributes; import org.apache.brooklyn.rest.util.OsgiCompat; -import org.codehaus.jackson.Version; -import org.codehaus.jackson.jaxrs.JacksonJsonProvider; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.map.SerializationConfig; -import org.codehaus.jackson.map.module.SimpleModule; -import org.codehaus.jackson.map.type.TypeFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.core.Version; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.datatype.guava.GuavaModule; +import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; + public class BrooklynJacksonJsonProvider extends JacksonJsonProvider implements ManagementContextInjectable { private static final Logger log = LoggerFactory.getLogger(BrooklynJacksonJsonProvider.class); @@ -107,7 +106,7 @@ public static ObjectMapper findSharedObjectMapper(ServletContext servletContext, mapper = newPrivateObjectMapper(mgmt); log.debug("Storing new ObjectMapper against "+mgmt+" because no ServletContext available: "+mapper); - ((ManagementContextInternal)mgmt).getBrooklynProperties().put(key, mapper); + ((BrooklynProperties)mgmt.getConfig()).put(key, mapper); return mapper; } } @@ -137,25 +136,21 @@ public static ObjectMapper newPrivateObjectMapper(ManagementContext mgmt) { throw new IllegalStateException("No management context available for creating ObjectMapper"); } - SerializationConfig defaultConfig = new ObjectMapper().getSerializationConfig(); - SerializationConfig sc = new SerializationConfig( - defaultConfig.getClassIntrospector() /* ObjectMapper.DEFAULT_INTROSPECTOR */, - defaultConfig.getAnnotationIntrospector() /* ObjectMapper.DEFAULT_ANNOTATION_INTROSPECTOR */, - new PossiblyStrictPreferringFieldsVisibilityChecker(), - null, null, TypeFactory.defaultInstance(), null); - ConfigurableSerializerProvider sp = new ConfigurableSerializerProvider(); sp.setUnknownTypeSerializer(new ErrorAndToStringUnknownTypeSerializer()); - ObjectMapper mapper = new ObjectMapper(null, sp, null, sc, null); + ObjectMapper mapper = new ObjectMapper(); + mapper.setSerializerProvider(sp); + mapper.setVisibility(new PossiblyStrictPreferringFieldsVisibilityChecker()); + SimpleModule mapperModule = new SimpleModule("Brooklyn", new Version(0, 0, 0, "ignored")); new BidiSerialization.ManagementContextSerialization(mgmt).install(mapperModule); new BidiSerialization.EntitySerialization(mgmt).install(mapperModule); new BidiSerialization.LocationSerialization(mgmt).install(mapperModule); - mapperModule.addSerializer(new MultimapSerializer()); - mapper.registerModule(mapperModule); + mapper.registerModule(new GuavaModule()).registerModule(mapperModule); + return mapper; } diff --git a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/ConfigurableSerializerProvider.java b/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/ConfigurableSerializerProvider.java index 3078524819..a84c6955e9 100644 --- a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/ConfigurableSerializerProvider.java +++ b/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/ConfigurableSerializerProvider.java @@ -21,66 +21,62 @@ import java.io.IOException; import org.apache.brooklyn.util.exceptions.Exceptions; -import org.codehaus.jackson.JsonGenerator; -import org.codehaus.jackson.JsonProcessingException; -import org.codehaus.jackson.JsonStreamContext; -import org.codehaus.jackson.map.JsonSerializer; -import org.codehaus.jackson.map.SerializationConfig; -import org.codehaus.jackson.map.SerializerFactory; -import org.codehaus.jackson.map.ser.StdSerializerProvider; -import org.codehaus.jackson.type.JavaType; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonStreamContext; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializationConfig; +import com.fasterxml.jackson.databind.ser.DefaultSerializerProvider; +import com.fasterxml.jackson.databind.ser.SerializerFactory; /** allows the serializer-of-last-resort to be customized, ie used for unknown-types */ -final class ConfigurableSerializerProvider extends StdSerializerProvider { - +final class ConfigurableSerializerProvider extends DefaultSerializerProvider { + + protected JsonSerializer unknownTypeSerializer; + public ConfigurableSerializerProvider() {} - - public ConfigurableSerializerProvider(SerializationConfig config) { - // NB: not usually necessary to pass config, as object mapper gets its own config set explicitly - this(config, new ConfigurableSerializerProvider(), null); + + @Override + public DefaultSerializerProvider createInstance(SerializationConfig config, SerializerFactory jsf) { + return new ConfigurableSerializerProvider(config, this, jsf); } - + public ConfigurableSerializerProvider(SerializationConfig config, ConfigurableSerializerProvider src, SerializerFactory jsf) { - super(config, src, jsf); + super(src, config, jsf); unknownTypeSerializer = src.unknownTypeSerializer; } - - protected StdSerializerProvider createInstance(SerializationConfig config, SerializerFactory jsf) { - return new ConfigurableSerializerProvider(config, this, jsf); - } - protected JsonSerializer unknownTypeSerializer; - public JsonSerializer getUnknownTypeSerializer(Class unknownType) { if (unknownTypeSerializer!=null) return unknownTypeSerializer; return super.getUnknownTypeSerializer(unknownType); } - + public void setUnknownTypeSerializer(JsonSerializer unknownTypeSerializer) { this.unknownTypeSerializer = unknownTypeSerializer; } @Override - protected void _serializeValue(JsonGenerator jgen, Object value) throws IOException, JsonProcessingException { + public void serializeValue(JsonGenerator jgen, Object value) throws IOException { JsonStreamContext ctxt = jgen.getOutputContext(); try { - super._serializeValue(jgen, value); + super.serializeValue(jgen, value); } catch (Exception e) { onSerializationException(ctxt, jgen, value, e); } } @Override - protected void _serializeValue(JsonGenerator jgen, Object value, JavaType rootType) throws IOException, JsonProcessingException { + public void serializeValue(JsonGenerator jgen, Object value, JavaType rootType) throws IOException { JsonStreamContext ctxt = jgen.getOutputContext(); try { - super._serializeValue(jgen, value, rootType); + super.serializeValue(jgen, value, rootType); } catch (Exception e) { onSerializationException(ctxt, jgen, value, e); } } - protected void onSerializationException(JsonStreamContext ctxt, JsonGenerator jgen, Object value, Exception e) throws IOException, JsonProcessingException { + protected void onSerializationException(JsonStreamContext ctxt, JsonGenerator jgen, Object value, Exception e) throws IOException { Exceptions.propagateIfFatal(e); JsonSerializer unknownTypeSerializer = getUnknownTypeSerializer(value.getClass()); diff --git a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/ErrorAndToStringUnknownTypeSerializer.java b/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/ErrorAndToStringUnknownTypeSerializer.java index 8d18c8ab19..e529ec9c03 100644 --- a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/ErrorAndToStringUnknownTypeSerializer.java +++ b/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/ErrorAndToStringUnknownTypeSerializer.java @@ -27,43 +27,42 @@ import org.apache.brooklyn.util.collections.MutableSet; import org.apache.brooklyn.util.javalang.Reflections; -import org.codehaus.jackson.JsonGenerationException; -import org.codehaus.jackson.JsonGenerator; -import org.codehaus.jackson.JsonProcessingException; -import org.codehaus.jackson.JsonStreamContext; -import org.codehaus.jackson.map.JsonMappingException; -import org.codehaus.jackson.map.SerializerProvider; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.codehaus.jackson.map.ser.impl.UnknownSerializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonStreamContext; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.impl.UnknownSerializer; + /** * for non-json-serializable classes (quite a lot of them!) simply provide a sensible error message and a toString. - * TODO maybe we want to attempt to serialize fields instead? (but being careful not to be self-referential!) + * TODO maybe we want to attempt to serialize fields instead? (but being careful not to be self-referential!) */ public class ErrorAndToStringUnknownTypeSerializer extends UnknownSerializer { - + private static final Logger log = LoggerFactory.getLogger(ErrorAndToStringUnknownTypeSerializer.class); private static Set WARNED_CLASSES = Collections.synchronizedSet(MutableSet.of()); - + @Override - public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { + public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException { if (BidiSerialization.isStrictSerialization()) throw new JsonMappingException("Cannot serialize object containing "+value.getClass().getName()+" when strict serialization requested"); serializeFromError(jgen.getOutputContext(), null, value, jgen, provider); } - public void serializeFromError(JsonStreamContext ctxt, @Nullable Exception error, Object value, JsonGenerator jgen, SerializerProvider configurableSerializerProvider) throws JsonGenerationException, IOException { + public void serializeFromError(JsonStreamContext ctxt, @Nullable Exception error, Object value, JsonGenerator jgen, SerializerProvider configurableSerializerProvider) throws IOException { if (log.isDebugEnabled()) log.debug("Recovering from json serialization error, serializing "+value+": "+error); - + if (BidiSerialization.isStrictSerialization()) throw new JsonMappingException("Cannot serialize " + (ctxt!=null && !ctxt.inRoot() ? "object containing " : "") + value.getClass().getName()+" when strict serialization requested"); - + if (WARNED_CLASSES.add(value.getClass().getCanonicalName())) { log.warn("Standard serialization not possible for "+value.getClass()+" ("+value+")", error); } @@ -73,12 +72,12 @@ public void serializeFromError(JsonStreamContext ctxt, @Nullable Exception error // without this, when serializing the large (1.5M) Server json object from BrooklynJacksonSerializerTest creates invalid json, // containing: "foo":false,"{"error":true,... jgen.flush(); - + boolean createObject = !newCtxt.inObject() || newCtxt.getCurrentName()!=null; if (createObject) { jgen.writeStartObject(); } - + if (allowEmpty(value.getClass())) { // write nothing } else { @@ -99,16 +98,16 @@ public void serializeFromError(JsonStreamContext ctxt, @Nullable Exception error jgen.writeFieldName("causedByError"); jgen.writeString(error.toString()); } - + } - + if (createObject) { jgen.writeEndObject(); } - + while (newCtxt!=null && !newCtxt.equals(ctxt)) { if (jgen.getOutputContext().inArray()) { jgen.writeEndArray(); continue; } - if (jgen.getOutputContext().inObject()) { jgen.writeEndObject(); continue; } + if (jgen.getOutputContext().inObject()) { jgen.writeEndObject(); continue; } break; } diff --git a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/MultimapSerializer.java b/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/MultimapSerializer.java deleted file mode 100644 index 1c2f8c180f..0000000000 --- a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/MultimapSerializer.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.brooklyn.rest.util.json; - -import java.io.IOException; -import java.util.Collection; -import java.util.Map; - -import org.codehaus.jackson.JsonGenerator; -import org.codehaus.jackson.map.SerializerProvider; -import org.codehaus.jackson.map.ser.std.SerializerBase; - -import com.google.common.annotations.Beta; -import com.google.common.collect.Lists; -import com.google.common.collect.Multimap; - -/** - * Provides a serializer for {@link Multimap} instances. - *

- * When Brooklyn's Jackson dependency is updated from org.codehaus.jackson:1.9.13 to - * com.fasterxml.jackson:2.3+ then this class should be replaced with a dependency on - * jackson-datatype-guava and a GuavaModule registered with Brooklyn's ObjectMapper. - */ -@Beta -public class MultimapSerializer extends SerializerBase> { - - @SuppressWarnings({ "unchecked", "rawtypes" }) - protected MultimapSerializer() { - super((Class>) (Class) Multimap.class); - } - - @Override - public void serialize(Multimap value, JsonGenerator jgen, SerializerProvider provider) throws IOException { - jgen.writeStartObject(); - writeEntries(value, jgen, provider); - jgen.writeEndObject(); - } - - private void writeEntries(Multimap value, JsonGenerator jgen, SerializerProvider provider) throws IOException { - for (Map.Entry> entry : value.asMap().entrySet()) { - provider.findKeySerializer(provider.constructType(String.class), null) - .serialize(entry.getKey(), jgen, provider); - provider.defaultSerializeValue(Lists.newArrayList(entry.getValue()), jgen); - } - } -} diff --git a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/PossiblyStrictPreferringFieldsVisibilityChecker.java b/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/PossiblyStrictPreferringFieldsVisibilityChecker.java index 502f0638e8..e47446752b 100644 --- a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/PossiblyStrictPreferringFieldsVisibilityChecker.java +++ b/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/PossiblyStrictPreferringFieldsVisibilityChecker.java @@ -22,13 +22,14 @@ import java.lang.reflect.Member; import java.lang.reflect.Method; -import org.codehaus.jackson.annotate.JsonAutoDetect; -import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility; -import org.codehaus.jackson.annotate.JsonMethod; -import org.codehaus.jackson.map.introspect.AnnotatedField; -import org.codehaus.jackson.map.introspect.AnnotatedMember; -import org.codehaus.jackson.map.introspect.AnnotatedMethod; -import org.codehaus.jackson.map.introspect.VisibilityChecker; +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.introspect.AnnotatedField; +import com.fasterxml.jackson.databind.introspect.AnnotatedMember; +import com.fasterxml.jackson.databind.introspect.AnnotatedMethod; +import com.fasterxml.jackson.databind.introspect.VisibilityChecker; + +import static com.fasterxml.jackson.annotation.JsonAutoDetect.*; /** a visibility checker which disables getters, but allows private access, * unless {@link BidiSerialization#isStrictSerialization()} is enabled in which case public fields or annotations must be used. @@ -39,13 +40,13 @@ * causes infinite recursion) **/ public class PossiblyStrictPreferringFieldsVisibilityChecker implements VisibilityChecker { - VisibilityChecker + VisibilityChecker vizDefault = new VisibilityChecker.Std(Visibility.NONE, Visibility.NONE, Visibility.NONE, Visibility.ANY, Visibility.ANY), vizStrict = new VisibilityChecker.Std(Visibility.NONE, Visibility.NONE, Visibility.NONE, Visibility.PUBLIC_ONLY, Visibility.PUBLIC_ONLY); @Override public PossiblyStrictPreferringFieldsVisibilityChecker with(JsonAutoDetect ann) { throw new UnsupportedOperationException(); } @Override public PossiblyStrictPreferringFieldsVisibilityChecker with(Visibility v) { throw new UnsupportedOperationException(); } - @Override public PossiblyStrictPreferringFieldsVisibilityChecker withVisibility(JsonMethod method, Visibility v) { throw new UnsupportedOperationException(); } + @Override public PossiblyStrictPreferringFieldsVisibilityChecker withVisibility(PropertyAccessor method, Visibility v) { throw new UnsupportedOperationException(); } @Override public PossiblyStrictPreferringFieldsVisibilityChecker withGetterVisibility(Visibility v) { throw new UnsupportedOperationException(); } @Override public PossiblyStrictPreferringFieldsVisibilityChecker withIsGetterVisibility(Visibility v) { throw new UnsupportedOperationException(); } @Override public PossiblyStrictPreferringFieldsVisibilityChecker withSetterVisibility(Visibility v) { throw new UnsupportedOperationException(); } diff --git a/brooklyn-server/rest/rest-server/src/main/webapp/WEB-INF/web.xml b/brooklyn-server/rest/rest-server/src/main/webapp/WEB-INF/web.xml index 1c44b025d7..ae98ff61ca 100644 --- a/brooklyn-server/rest/rest-server/src/main/webapp/WEB-INF/web.xml +++ b/brooklyn-server/rest/rest-server/src/main/webapp/WEB-INF/web.xml @@ -91,7 +91,7 @@ io.swagger.jaxrs.listing.SwaggerSerializers; org.apache.brooklyn.rest.util.FormMapProvider; - org.codehaus.jackson.jaxrs.JacksonJsonProvider; + com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; org.apache.brooklyn.rest.resources.ActivityResource; org.apache.brooklyn.rest.resources.ApidocResource; org.apache.brooklyn.rest.resources.ApplicationResource; diff --git a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/domain/ApplicationTest.java b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/domain/ApplicationTest.java index 7e9c910c29..8708fb194b 100644 --- a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/domain/ApplicationTest.java +++ b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/domain/ApplicationTest.java @@ -41,7 +41,7 @@ public class ApplicationTest { final EntitySpec entitySpec = new EntitySpec("Vanilla Java App", "org.apache.brooklyn.entity.java.VanillaJavaApp", - ImmutableMap.of( + ImmutableMap.of( "initialSize", "1", "creationScriptUrl", "http://my.brooklyn.io/storage/foo.sql")); @@ -50,20 +50,15 @@ public class ApplicationTest { .locations(ImmutableSet.of("/v1/locations/1")) .build(); - final ApplicationSummary application = new ApplicationSummary(null, applicationSpec, Status.STARTING, null); + final Map links = ImmutableMap.of( + "self", URI.create("/v1/applications/" + applicationSpec.getName()), + "entities", URI.create("fixtures/entity-summary-list.json")); + final ApplicationSummary application = new ApplicationSummary("myapp_id", applicationSpec, Status.STARTING, links); @SuppressWarnings("serial") @Test public void testSerializeToJSON() throws IOException { - ApplicationSummary application1 = new ApplicationSummary("myapp_id", applicationSpec, Status.STARTING, null) { - @Override - public Map getLinks() { - return ImmutableMap.of( - "self", URI.create("/v1/applications/" + applicationSpec.getName()), - "entities", URI.create("fixtures/entity-summary-list.json")); - } - }; - assertEquals(asJson(application1), jsonFixture("fixtures/application.json")); + assertEquals(asJson(application), jsonFixture("fixtures/application.json")); } @Test diff --git a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/resources/DescendantsTest.java b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/resources/DescendantsTest.java index a8748a74c1..3f42c8d591 100644 --- a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/resources/DescendantsTest.java +++ b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/resources/DescendantsTest.java @@ -37,8 +37,6 @@ import org.apache.brooklyn.rest.testing.mocks.RestMockSimpleEntity; import org.apache.brooklyn.util.collections.MutableList; import org.apache.brooklyn.util.text.StringEscapes; -import org.codehaus.jackson.JsonGenerationException; -import org.codehaus.jackson.map.JsonMappingException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.annotations.Test; @@ -63,7 +61,7 @@ public class DescendantsTest extends BrooklynRestResourceTest { build(); @Test - public void testDescendantsInSimpleDeployedApplication() throws InterruptedException, TimeoutException, JsonGenerationException, JsonMappingException, UniformInterfaceException, ClientHandlerException, IOException { + public void testDescendantsInSimpleDeployedApplication() throws InterruptedException, TimeoutException, UniformInterfaceException, ClientHandlerException, IOException { ClientResponse response = clientDeploy(simpleSpec); assertTrue(response.getStatus()/100 == 2, "response is "+response); Application application = Iterables.getOnlyElement( getManagementContext().getApplications() ); diff --git a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/resources/EntityResourceTest.java b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/resources/EntityResourceTest.java index d6857fb544..1c091da5f5 100644 --- a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/resources/EntityResourceTest.java +++ b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/resources/EntityResourceTest.java @@ -38,14 +38,14 @@ import org.apache.brooklyn.util.collections.MutableList; import org.apache.brooklyn.util.exceptions.Exceptions; import org.apache.brooklyn.util.http.HttpAsserts; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.type.TypeReference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Predicate; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; diff --git a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/testing/BrooklynRestApiTest.java b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/testing/BrooklynRestApiTest.java index e63a2397b5..45aec4ab86 100644 --- a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/testing/BrooklynRestApiTest.java +++ b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/testing/BrooklynRestApiTest.java @@ -26,10 +26,10 @@ import org.apache.brooklyn.core.mgmt.ManagementContextInjectable; import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext; import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests; -import org.codehaus.jackson.map.ObjectMapper; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeMethod; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Preconditions; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.WebResource; diff --git a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/testing/BrooklynRestResourceTest.java b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/testing/BrooklynRestResourceTest.java index c644643168..b94e73c185 100644 --- a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/testing/BrooklynRestResourceTest.java +++ b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/testing/BrooklynRestResourceTest.java @@ -28,7 +28,6 @@ import javax.ws.rs.core.MediaType; -import org.codehaus.jackson.map.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.Assert; @@ -43,6 +42,7 @@ import org.apache.brooklyn.util.repeat.Repeater; import org.apache.brooklyn.util.time.Duration; +import com.fasterxml.jackson.databind.ObjectMapper; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.UniformInterfaceException; import com.sun.jersey.spi.inject.Errors; diff --git a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonSerializerTest.java b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonSerializerTest.java index 7a255a32bf..9542eda085 100644 --- a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonSerializerTest.java +++ b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonSerializerTest.java @@ -28,9 +28,6 @@ import org.apache.http.client.HttpClient; import org.apache.http.client.utils.URIBuilder; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.map.annotate.JsonSerialize; import org.eclipse.jetty.server.Server; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,6 +49,9 @@ import org.apache.brooklyn.util.stream.Streams; import org.apache.brooklyn.util.text.Strings; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Multimap; import com.google.common.collect.MultimapBuilder;