mirror of https://github.com/apache/jclouds.git
get rid of unnecessary son parsers and use handy SelectJson annotation
This commit is contained in:
parent
575dac2583
commit
42ba8e9de4
|
@ -33,12 +33,10 @@ import javax.ws.rs.core.MediaType;
|
||||||
import org.jclouds.cloudloadbalancers.domain.Node;
|
import org.jclouds.cloudloadbalancers.domain.Node;
|
||||||
import org.jclouds.cloudloadbalancers.domain.NodeAttributes;
|
import org.jclouds.cloudloadbalancers.domain.NodeAttributes;
|
||||||
import org.jclouds.cloudloadbalancers.domain.NodeRequest;
|
import org.jclouds.cloudloadbalancers.domain.NodeRequest;
|
||||||
import org.jclouds.cloudloadbalancers.functions.UnwrapNode;
|
|
||||||
import org.jclouds.cloudloadbalancers.functions.UnwrapNodes;
|
|
||||||
import org.jclouds.openstack.filters.AuthenticateRequest;
|
import org.jclouds.openstack.filters.AuthenticateRequest;
|
||||||
import org.jclouds.rest.annotations.ExceptionParser;
|
import org.jclouds.rest.annotations.ExceptionParser;
|
||||||
import org.jclouds.rest.annotations.RequestFilters;
|
import org.jclouds.rest.annotations.RequestFilters;
|
||||||
import org.jclouds.rest.annotations.ResponseParser;
|
import org.jclouds.rest.annotations.SelectJson;
|
||||||
import org.jclouds.rest.annotations.SkipEncoding;
|
import org.jclouds.rest.annotations.SkipEncoding;
|
||||||
import org.jclouds.rest.annotations.WrapWith;
|
import org.jclouds.rest.annotations.WrapWith;
|
||||||
import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404;
|
import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404;
|
||||||
|
@ -65,7 +63,7 @@ public interface NodeAsyncClient {
|
||||||
* @see NodeClient#addNodes
|
* @see NodeClient#addNodes
|
||||||
*/
|
*/
|
||||||
@POST
|
@POST
|
||||||
@ResponseParser(UnwrapNodes.class)
|
@SelectJson("nodes")
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||||
@Path("/loadbalancers/{lbid}/nodes")
|
@Path("/loadbalancers/{lbid}/nodes")
|
||||||
|
@ -86,7 +84,7 @@ public interface NodeAsyncClient {
|
||||||
* @see NodeClient#listNodes
|
* @see NodeClient#listNodes
|
||||||
*/
|
*/
|
||||||
@GET
|
@GET
|
||||||
@ResponseParser(UnwrapNodes.class)
|
@SelectJson("nodes")
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
@Path("/loadbalancers/{lbid}/nodes")
|
@Path("/loadbalancers/{lbid}/nodes")
|
||||||
@ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
|
@ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
|
||||||
|
@ -96,7 +94,7 @@ public interface NodeAsyncClient {
|
||||||
* @see NodeClient#getNode
|
* @see NodeClient#getNode
|
||||||
*/
|
*/
|
||||||
@GET
|
@GET
|
||||||
@ResponseParser(UnwrapNode.class)
|
@SelectJson("node")
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
@Path("/loadbalancers/{lbid}/nodes/{nid}")
|
@Path("/loadbalancers/{lbid}/nodes/{nid}")
|
||||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||||
|
|
|
@ -1,59 +0,0 @@
|
||||||
/**
|
|
||||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. jclouds 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.jclouds.cloudloadbalancers.functions;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
|
|
||||||
import org.jclouds.cloudloadbalancers.domain.Node;
|
|
||||||
import org.jclouds.http.HttpRequest;
|
|
||||||
import org.jclouds.http.HttpResponse;
|
|
||||||
import org.jclouds.http.functions.ParseJson;
|
|
||||||
import org.jclouds.rest.InvocationContext;
|
|
||||||
|
|
||||||
import com.google.common.base.Function;
|
|
||||||
import com.google.common.collect.Iterables;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Dan Lo Bianco
|
|
||||||
*/
|
|
||||||
public class UnwrapNode implements Function<HttpResponse, Node>, InvocationContext<UnwrapNode> {
|
|
||||||
|
|
||||||
private final ParseJson<Map<String, Node>> json;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
UnwrapNode(ParseJson<Map<String, Node>> json) {
|
|
||||||
this.json = json;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Node apply(HttpResponse arg0) {
|
|
||||||
Map<String, Node> map = json.apply(arg0);
|
|
||||||
if (map == null || map.size() == 0)
|
|
||||||
return null;
|
|
||||||
Node n = Iterables.get(map.values(), 0);
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UnwrapNode setContext(HttpRequest request) {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,63 +0,0 @@
|
||||||
/**
|
|
||||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. jclouds 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.jclouds.cloudloadbalancers.functions;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
|
|
||||||
import org.jclouds.cloudloadbalancers.domain.Node;
|
|
||||||
import org.jclouds.http.HttpRequest;
|
|
||||||
import org.jclouds.http.HttpResponse;
|
|
||||||
import org.jclouds.http.functions.ParseJson;
|
|
||||||
import org.jclouds.rest.InvocationContext;
|
|
||||||
|
|
||||||
import com.google.common.base.Function;
|
|
||||||
import com.google.common.collect.ImmutableSet;
|
|
||||||
import com.google.common.collect.Iterables;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Dan Lo Bianco
|
|
||||||
*/
|
|
||||||
public class UnwrapNodes implements Function<HttpResponse, Set<Node>>,
|
|
||||||
InvocationContext<UnwrapNodes> {
|
|
||||||
|
|
||||||
private final ParseJson<Map<String, Set<Node>>> json;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
UnwrapNodes(ParseJson<Map<String, Set<Node>>> json) {
|
|
||||||
this.json = json;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<Node> apply(HttpResponse arg0) {
|
|
||||||
Map<String, Set<Node>> map = json.apply(arg0);
|
|
||||||
if (map.size() == 0)
|
|
||||||
return ImmutableSet.<Node> of();
|
|
||||||
;
|
|
||||||
return ImmutableSet.copyOf(Iterables.get(map.values(), 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UnwrapNodes setContext(HttpRequest request) {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -32,9 +32,8 @@ import org.jclouds.cloudloadbalancers.domain.NodeAttributes;
|
||||||
import org.jclouds.cloudloadbalancers.domain.NodeAttributes.Builder;
|
import org.jclouds.cloudloadbalancers.domain.NodeAttributes.Builder;
|
||||||
import org.jclouds.cloudloadbalancers.domain.NodeRequest;
|
import org.jclouds.cloudloadbalancers.domain.NodeRequest;
|
||||||
import org.jclouds.cloudloadbalancers.domain.internal.BaseNode.Condition;
|
import org.jclouds.cloudloadbalancers.domain.internal.BaseNode.Condition;
|
||||||
import org.jclouds.cloudloadbalancers.functions.UnwrapNode;
|
|
||||||
import org.jclouds.cloudloadbalancers.functions.UnwrapNodes;
|
|
||||||
import org.jclouds.http.HttpRequest;
|
import org.jclouds.http.HttpRequest;
|
||||||
|
import org.jclouds.http.functions.ParseFirstJsonValueNamed;
|
||||||
import org.jclouds.http.functions.ReleasePayloadAndReturn;
|
import org.jclouds.http.functions.ReleasePayloadAndReturn;
|
||||||
import org.jclouds.rest.RestContextFactory;
|
import org.jclouds.rest.RestContextFactory;
|
||||||
import org.jclouds.rest.RestContextSpec;
|
import org.jclouds.rest.RestContextSpec;
|
||||||
|
@ -65,7 +64,7 @@ public class NodeAsyncClientTest extends BaseCloudLoadBalancersAsyncClientTest<N
|
||||||
assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
|
assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
|
||||||
assertPayloadEquals(httpRequest, null, null, false);
|
assertPayloadEquals(httpRequest, null, null, false);
|
||||||
|
|
||||||
assertResponseParserClassEquals(method, httpRequest, UnwrapNodes.class);
|
assertResponseParserClassEquals(method, httpRequest, ParseFirstJsonValueNamed.class);
|
||||||
assertSaxResponseParserClassEquals(method, null);
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
assertExceptionParserClassEquals(method, ReturnEmptySetOnNotFoundOr404.class);
|
assertExceptionParserClassEquals(method, ReturnEmptySetOnNotFoundOr404.class);
|
||||||
|
|
||||||
|
@ -82,7 +81,7 @@ public class NodeAsyncClientTest extends BaseCloudLoadBalancersAsyncClientTest<N
|
||||||
assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
|
assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
|
||||||
assertPayloadEquals(httpRequest, null, null, false);
|
assertPayloadEquals(httpRequest, null, null, false);
|
||||||
|
|
||||||
assertResponseParserClassEquals(method, httpRequest, UnwrapNode.class);
|
assertResponseParserClassEquals(method, httpRequest, ParseFirstJsonValueNamed.class);
|
||||||
assertSaxResponseParserClassEquals(method, null);
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
assertExceptionParserClassEquals(method, ReturnNullOnNotFoundOr404.class);
|
assertExceptionParserClassEquals(method, ReturnNullOnNotFoundOr404.class);
|
||||||
|
|
||||||
|
@ -103,7 +102,7 @@ public class NodeAsyncClientTest extends BaseCloudLoadBalancersAsyncClientTest<N
|
||||||
"{\"node\":{\"address\":\"192.168.1.1\",\"port\":8080,\"condition\":\"ENABLED\"}}",
|
"{\"node\":{\"address\":\"192.168.1.1\",\"port\":8080,\"condition\":\"ENABLED\"}}",
|
||||||
"application/json", false);
|
"application/json", false);
|
||||||
|
|
||||||
assertResponseParserClassEquals(method, httpRequest, UnwrapNode.class);
|
assertResponseParserClassEquals(method, httpRequest, ParseFirstJsonValueNamed.class);
|
||||||
assertSaxResponseParserClassEquals(method, null);
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
assertExceptionParserClassEquals(method, ReturnNullOnNotFoundOr404.class);
|
assertExceptionParserClassEquals(method, ReturnNullOnNotFoundOr404.class);
|
||||||
|
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
/**
|
|
||||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. jclouds 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.jclouds.cloudloadbalancers.functions;
|
|
||||||
|
|
||||||
import org.jclouds.cloudloadbalancers.domain.Node;
|
|
||||||
import org.jclouds.cloudloadbalancers.domain.Node.Status;
|
|
||||||
import org.jclouds.cloudloadbalancers.domain.internal.BaseNode.Condition;
|
|
||||||
import org.jclouds.http.HttpResponse;
|
|
||||||
import org.jclouds.json.BaseItemParserTest;
|
|
||||||
import org.testng.annotations.Test;
|
|
||||||
|
|
||||||
import com.google.common.base.Function;
|
|
||||||
import com.google.inject.Injector;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Dan Lo Bianco
|
|
||||||
*/
|
|
||||||
@Test(groups = "unit")
|
|
||||||
public class UnwrapNodeTest extends BaseItemParserTest<Node> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String resource() {
|
|
||||||
return "/getnode.json";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Node expected() {
|
|
||||||
return Node.builder().id(410).address("10.1.1.1").port(80)
|
|
||||||
.condition(Condition.ENABLED).status(Status.ONLINE).weight(12).build();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Function<HttpResponse, Node> parser(Injector i) {
|
|
||||||
return i.getInstance(UnwrapNode.class);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,61 +0,0 @@
|
||||||
/**
|
|
||||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. jclouds 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.jclouds.cloudloadbalancers.functions;
|
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import org.jclouds.cloudloadbalancers.domain.Node;
|
|
||||||
import org.jclouds.cloudloadbalancers.domain.Node.Status;
|
|
||||||
import org.jclouds.cloudloadbalancers.domain.internal.BaseNode.Condition;
|
|
||||||
import org.jclouds.http.HttpResponse;
|
|
||||||
import org.jclouds.json.BaseSetParserTest;
|
|
||||||
import org.testng.annotations.Test;
|
|
||||||
|
|
||||||
import com.google.common.base.Function;
|
|
||||||
import com.google.common.collect.ImmutableSet;
|
|
||||||
import com.google.inject.Injector;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Dan Lo Bianco
|
|
||||||
*/
|
|
||||||
@Test(groups = "unit")
|
|
||||||
public class UnwrapNodesTest extends BaseSetParserTest<Node> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String resource() {
|
|
||||||
return "/listnodes.json";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<Node> expected() {
|
|
||||||
return ImmutableSet.of(
|
|
||||||
Node.builder().id(410).address("10.1.1.1").port(80).
|
|
||||||
condition(Condition.ENABLED).weight(3).status(Status.ONLINE).build(),
|
|
||||||
Node.builder().id(411).address("10.1.1.2").port(80).
|
|
||||||
condition(Condition.ENABLED).weight(8).status(Status.ONLINE).build(),
|
|
||||||
Node.builder().id(412).address("10.1.1.3").port(80).
|
|
||||||
condition(Condition.DISABLED).weight(12).status(Status.ONLINE).build());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Function<HttpResponse, Set<Node>> parser(Injector i) {
|
|
||||||
return i.getInstance(UnwrapNodes.class);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue