SLIDER-151 moving rest paths slightly, making more constants, and adding a shared base class AbstractSliderResource for all resources that need at the slider web api
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/5960dd07 Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/5960dd07 Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/5960dd07 Branch: refs/heads/feature/SLIDER-151_Implement_full_slider_API_in_REST_and_switch_client_to_it Commit: 5960dd07a2931d397b22f712c2a7ce3c2851a58c Parents: 6d96ba9 Author: Steve Loughran <ste...@apache.org> Authored: Thu Jun 19 14:54:44 2014 -0700 Committer: Steve Loughran <ste...@apache.org> Committed: Wed Jul 2 17:00:06 2014 +0100 ---------------------------------------------------------------------- .../web/rest/AMWadlGeneratorConfig.java | 4 +- .../web/rest/AbstractSliderResource.java | 34 ++++++++++++ .../server/appmaster/web/rest/RestPaths.java | 3 +- .../web/rest/SliderJacksonJaxbJsonProvider.java | 1 - .../appmaster/web/rest/agent/AgentResource.java | 6 +-- .../web/rest/management/ManagementResource.java | 15 +++--- .../management/resources/ActionsResource.java | 22 ++++++++ .../resources/AggregateConfResource.java | 4 +- .../management/resources/ConfTreeResource.java | 3 +- .../web/rest/publisher/PublisherResource.java | 55 +++++++++++--------- 10 files changed, 103 insertions(+), 44 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5960dd07/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/AMWadlGeneratorConfig.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/AMWadlGeneratorConfig.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/AMWadlGeneratorConfig.java index 4ae7490..ea9f22b 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/AMWadlGeneratorConfig.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/AMWadlGeneratorConfig.java @@ -22,9 +22,9 @@ import com.sun.jersey.api.wadl.config.WadlGeneratorDescription; import java.util.List; /** - * + * App master's WADL generation support */ -public class AMWadlGeneratorConfig extends WadlGeneratorConfig{ +public class AMWadlGeneratorConfig extends WadlGeneratorConfig { public static final String CLASSNAME = "org.apache.slider.server.appmaster.web.rest.AMWadlGeneratorConfig"; @Override http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5960dd07/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/AbstractSliderResource.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/AbstractSliderResource.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/AbstractSliderResource.java new file mode 100644 index 0000000..4f41815 --- /dev/null +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/AbstractSliderResource.java @@ -0,0 +1,34 @@ +/* + * 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.slider.server.appmaster.web.rest; + +import org.apache.slider.server.appmaster.web.WebAppApi; + +/** + * Abstract resource base class for REST resources + * that use the slider WebAppApi + */ +public abstract class AbstractSliderResource { + + protected final WebAppApi slider; + + public AbstractSliderResource(WebAppApi slider) { + this.slider = slider; + } +} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5960dd07/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/RestPaths.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/RestPaths.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/RestPaths.java index d55635f..35d0f15 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/RestPaths.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/RestPaths.java @@ -26,7 +26,8 @@ public class RestPaths { public static final String WS_CONTEXT = "ws"; public static final String WS_CONTEXT_ROOT = "/" + WS_CONTEXT; public static final String SLIDER_CONTEXT_ROOT = WS_CONTEXT_ROOT +"/v1/slider"; - public static final String SLIDER_SUBPATH_MANAGEMENT = "/mgmt"; + public static final String MANAGEMENT = "mgmt"; + public static final String SLIDER_SUBPATH_MANAGEMENT = "/" + MANAGEMENT; public static final String SLIDER_SUBPATH_AGENTS = "/agents"; public static final String SLIDER_SUBPATH_PUBLISHER = "/publisher"; http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5960dd07/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/SliderJacksonJaxbJsonProvider.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/SliderJacksonJaxbJsonProvider.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/SliderJacksonJaxbJsonProvider.java index 95b0aa1..86d68a8 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/SliderJacksonJaxbJsonProvider.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/SliderJacksonJaxbJsonProvider.java @@ -42,7 +42,6 @@ import javax.ws.rs.ext.Provider; public class SliderJacksonJaxbJsonProvider extends JacksonJaxbJsonProvider { public SliderJacksonJaxbJsonProvider() { - super(); } @Override http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5960dd07/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/AgentResource.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/AgentResource.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/AgentResource.java index 96b7b47..d9dcdd5 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/AgentResource.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/agent/AgentResource.java @@ -17,6 +17,7 @@ package org.apache.slider.server.appmaster.web.rest.agent; import org.apache.slider.server.appmaster.web.WebAppApi; +import org.apache.slider.server.appmaster.web.rest.AbstractSliderResource; import org.codehaus.jackson.annotate.JsonIgnoreProperties; import org.codehaus.jackson.map.annotate.JsonSerialize; @@ -36,13 +37,12 @@ import javax.ws.rs.core.Response; */ @JsonIgnoreProperties(ignoreUnknown = true) @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) -public class AgentResource { +public class AgentResource extends AbstractSliderResource { - private final WebAppApi slider; private String agent_name; public AgentResource(WebAppApi slider) { - this.slider = slider; + super(slider); } private void init(HttpServletResponse res) { http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5960dd07/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/management/ManagementResource.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/management/ManagementResource.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/management/ManagementResource.java index 94db409..02199cf 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/management/ManagementResource.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/management/ManagementResource.java @@ -18,6 +18,7 @@ package org.apache.slider.server.appmaster.web.rest.management; import org.apache.slider.core.conf.AggregateConf; import org.apache.slider.server.appmaster.web.WebAppApi; +import org.apache.slider.server.appmaster.web.rest.AbstractSliderResource; import org.apache.slider.server.appmaster.web.rest.RestPaths; import org.apache.slider.server.appmaster.web.rest.management.resources.AggregateConfResource; import org.apache.slider.server.appmaster.web.rest.management.resources.ConfTreeResource; @@ -36,18 +37,18 @@ import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; +import java.net.URI; import java.net.URL; /** * */ -public class ManagementResource { +public class ManagementResource extends AbstractSliderResource { protected static final Logger log = LoggerFactory.getLogger(ManagementResource.class); - private final WebAppApi slider; public ManagementResource(WebAppApi slider) { - this.slider = slider; + super(slider); } private void init(HttpServletResponse res) { @@ -57,7 +58,7 @@ public class ManagementResource { @GET public Response getWadl (@Context HttpServletRequest request) { try { - java.net.URI location = new URL(request.getScheme(), + URI location = new URL(request.getScheme(), request.getServerName(), request.getServerPort(), "/application.wadl").toURI(); @@ -87,9 +88,9 @@ public class ManagementResource { init(res); AggregateConfResource aggregateConf = ResourceFactory.createAggregateConfResource(getAggregateConf(), - uriInfo.getBaseUriBuilder() - .path(RestPaths.SLIDER_CONTEXT_ROOT).path( - "mgmt/app")); + uriInfo.getBaseUriBuilder() + .path(RestPaths.SLIDER_CONTEXT_ROOT) + .path(RestPaths.MANAGEMENT + "/app")); return aggregateConf.getConfTree(config); } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5960dd07/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/management/resources/ActionsResource.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/management/resources/ActionsResource.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/management/resources/ActionsResource.java new file mode 100644 index 0000000..9b340fa --- /dev/null +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/management/resources/ActionsResource.java @@ -0,0 +1,22 @@ +/* + * 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.slider.server.appmaster.web.rest.management.resources; + +public class ActionsResource { +} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5960dd07/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/management/resources/AggregateConfResource.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/management/resources/AggregateConfResource.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/management/resources/AggregateConfResource.java index 9df692a..dc26699 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/management/resources/AggregateConfResource.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/management/resources/AggregateConfResource.java @@ -38,7 +38,7 @@ public class AggregateConfResource { public AggregateConfResource(AggregateConf conf, UriBuilder uriBuilder) { if (uriBuilder != null) { this.href = - uriBuilder.build(null).toASCIIString(); + uriBuilder.build().toASCIIString(); resources = ResourceFactory.createConfTreeResource(conf.getAppConf(), uriBuilder.clone().path( @@ -63,7 +63,7 @@ public class AggregateConfResource { } private void initConfMap() { - confMap = new HashMap<String, ConfTreeResource>(); + confMap = new HashMap<>(); confMap.put("internal", internal); confMap.put("resources", resources); confMap.put("appConf", appConf); http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5960dd07/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/management/resources/ConfTreeResource.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/management/resources/ConfTreeResource.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/management/resources/ConfTreeResource.java index 79f5399..407bab6 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/management/resources/ConfTreeResource.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/management/resources/ConfTreeResource.java @@ -42,8 +42,7 @@ public class ConfTreeResource { metadata = confTree.metadata; global = confTree.global; components = confTree.components; - uriBuilder = uriBuilder.clone(); - this.href = uriBuilder.build(null).toASCIIString(); + this.href = uriBuilder.build().toASCIIString(); } else { this.href = null; this.metadata = null; http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5960dd07/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java index a439d9b..89a7d83 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java @@ -26,6 +26,7 @@ import org.apache.slider.core.registry.docstore.PublishedConfigurationOutputter; import org.apache.slider.core.registry.docstore.UriMap; import org.apache.slider.server.appmaster.state.StateAccessForProviders; import org.apache.slider.server.appmaster.web.WebAppApi; +import org.apache.slider.server.appmaster.web.rest.AbstractSliderResource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -42,7 +43,6 @@ import java.net.URL; import java.net.URLClassLoader; import java.util.Arrays; import java.util.HashMap; -import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; @@ -52,18 +52,21 @@ import static org.apache.slider.server.appmaster.web.rest.RestPaths.*; /** * This publishes configuration sets */ -public class PublisherResource { +public class PublisherResource extends AbstractSliderResource { protected static final Logger log = LoggerFactory.getLogger(PublisherResource.class); - private final WebAppApi slider; - public static final String SET_NAME = - "{setname: " + PUBLISHED_CONFIGURATION_SET_REGEXP + "}"; - private static final String CONFIG = - SET_NAME + "/{config: " + PUBLISHED_CONFIGURATION_REGEXP + "}"; + public static final String SETNAME = "setname"; + public static final String CLASSPATH = "/classpath"; + public static final String CONFIG = "config"; + + public static final String SETNAME_PATTERN = + "{"+ SETNAME+": " + PUBLISHED_CONFIGURATION_SET_REGEXP + "}"; + private static final String CONFIG_PATTERN = + SETNAME_PATTERN + "/{"+ CONFIG +": " + PUBLISHED_CONFIGURATION_REGEXP + "}"; private final StateAccessForProviders appState; public PublisherResource(WebAppApi slider) { - this.slider = slider; + super(slider); appState = slider.getAppState(); } @@ -106,7 +109,7 @@ public class PublisherResource { } @GET - @Path("/classpath") + @Path(CLASSPATH) @Produces({MediaType.APPLICATION_JSON}) public Set<URL> getAMClassPath() { URL[] urls = ((URLClassLoader) getClass().getClassLoader()).getURLs(); @@ -114,10 +117,10 @@ public class PublisherResource { } @GET - @Path("/"+ SET_NAME) + @Path("/"+ SETNAME_PATTERN) @Produces({MediaType.APPLICATION_JSON}) public PublishedConfigSet getPublishedConfiguration( - @PathParam("setname") String setname, + @PathParam(SETNAME) String setname, @Context UriInfo uriInfo, @Context HttpServletResponse res) { init(res, uriInfo); @@ -133,11 +136,11 @@ public class PublisherResource { } @GET - @Path("/" + CONFIG) + @Path("/" + CONFIG_PATTERN) @Produces({MediaType.APPLICATION_JSON}) public PublishedConfiguration getConfigurationInstance( - @PathParam("setname") String setname, - @PathParam("config") String config, + @PathParam(SETNAME) String setname, + @PathParam(CONFIG) String config, @Context UriInfo uriInfo, @Context HttpServletResponse res) { init(res, uriInfo); @@ -164,12 +167,12 @@ public class PublisherResource { } @GET - @Path("/" + CONFIG + ".json") + @Path("/" + CONFIG_PATTERN + ".json") @Produces({MediaType.APPLICATION_JSON}) public String getConfigurationContentJson( - @PathParam("setname") String setname, + @PathParam(SETNAME) String setname, - @PathParam("config") String config, + @PathParam(CONFIG) String config, @Context UriInfo uriInfo, @Context HttpServletResponse res) throws IOException { return getStringRepresentation(setname, config, uriInfo, res, @@ -177,11 +180,11 @@ public class PublisherResource { } @GET - @Path("/" + CONFIG + ".xml") + @Path("/" + CONFIG_PATTERN + ".xml") @Produces({MediaType.APPLICATION_XML}) public String getConfigurationContentXML( - @PathParam("setname") String setname, - @PathParam("config") String config, + @PathParam(SETNAME) String setname, + @PathParam(CONFIG) String config, @Context UriInfo uriInfo, @Context HttpServletResponse res) throws IOException { return getStringRepresentation(setname, config, uriInfo, res, @@ -189,12 +192,12 @@ public class PublisherResource { } @GET - @Path("/" + CONFIG + ".properties") + @Path("/" + CONFIG_PATTERN + ".properties") @Produces({MediaType.APPLICATION_XML}) public String getConfigurationContentProperties( - @PathParam("setname") String setname, + @PathParam(SETNAME) String setname, - @PathParam("config") String config, + @PathParam(CONFIG) String config, @Context UriInfo uriInfo, @Context HttpServletResponse res) throws IOException { @@ -215,11 +218,11 @@ public class PublisherResource { } @GET - @Path("/" + CONFIG +"/{propertyName}") + @Path("/" + CONFIG_PATTERN +"/{propertyName}") @Produces({MediaType.APPLICATION_JSON}) public Map<String,String> getConfigurationProperty( - @PathParam("setname") String setname, - @PathParam("config") String config, + @PathParam(SETNAME) String setname, + @PathParam(CONFIG) String config, @PathParam("propertyName") String propertyName, @Context UriInfo uriInfo, @Context HttpServletResponse res) {