Author: jstrachan Date: Wed Feb 18 15:57:40 2009 New Revision: 745547 URL: http://svn.apache.org/viewvc?rev=745547&view=rev Log: allow endpoints to be created; with errors reported back to the user if they try to create an unknown endpoint. Also introduced EndpointsResource to make the root resource a bit less fat - and also to allow stateful fields to be included; like the error message or current URI - for re-rendering the view if a post fails the validation rules
Added: camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/EndpointsResource.java (with props) camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointsResource/ camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointsResource/index.jsp (contents, props changed) - copied, changed from r745452, camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/CamelContextResource/endpoints.jsp Removed: camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/CamelContextResource/endpoints.jsp camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/CamelContextResource/foo.jsp Modified: camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/model/EndpointLink.java camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/CamelContextResource.java camel/trunk/components/camel-web/src/main/webapp/WEB-INF/decorators/main.jsp camel/trunk/components/camel-web/src/main/webapp/css/type-settings.css Modified: camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/model/EndpointLink.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/model/EndpointLink.java?rev=745547&r1=745546&r2=745547&view=diff ============================================================================== --- camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/model/EndpointLink.java (original) +++ camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/model/EndpointLink.java Wed Feb 18 15:57:40 2009 @@ -70,6 +70,6 @@ protected String createHref(String uri) { // TODO how to encode as a href? - return "/endpoint/" + uri; + return "/endpoints/" + uri; } } Modified: camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/CamelContextResource.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/CamelContextResource.java?rev=745547&r1=745546&r2=745547&view=diff ============================================================================== --- camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/CamelContextResource.java (original) +++ camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/CamelContextResource.java Wed Feb 18 15:57:40 2009 @@ -17,8 +17,8 @@ package org.apache.camel.rest.resources; +import com.sun.jersey.api.representation.Form; import com.sun.jersey.api.view.ImplicitProduces; -import com.sun.jersey.api.spring.Autowire; import com.sun.jersey.spi.inject.Inject; import com.sun.jersey.spi.resource.Singleton; import org.apache.camel.CamelContext; @@ -29,15 +29,20 @@ import org.apache.camel.rest.model.Camel; import org.apache.camel.rest.model.EndpointLink; import org.apache.camel.rest.model.Endpoints; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; +import javax.annotation.PreDestroy; +import javax.ws.rs.Consumes; import javax.ws.rs.GET; +import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import javax.annotation.PreDestroy; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; +import javax.ws.rs.core.Context; +import java.net.URI; +import java.net.URISyntaxException; import java.util.List; @@ -64,6 +69,10 @@ return camelContext; } + public ProducerTemplate getTemplate() { + return template; + } + public String getName() { return camelContext.getName(); } @@ -86,35 +95,13 @@ return new Camel(camelContext); } - - /** - * Returns a list of endpoints available in this context - * - * @return - */ - @GET @Path("endpoints") - @Produces({MediaType.TEXT_XML, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) - public Endpoints getEndpointsDTO() { - return new Endpoints(camelContext); + public EndpointsResource getEndpointsResource() { + return new EndpointsResource(this); } public List<EndpointLink> getEndpoints() { - return getEndpointsDTO().getEndpoints(); - } - - /** - * Looks up an individual endpoint - */ - @Path("endpoint/{id}") - public EndpointResource getEndpoint(@PathParam("id") String id) { - // TODO lets assume the ID is the endpoint - Endpoint endpoint = getCamelContext().getEndpoint(id); - if (endpoint != null) { - return new EndpointResource(camelContext, template, endpoint); - } else { - return null; - } + return getEndpointsResource().getEndpointsDTO().getEndpoints(); } /** @@ -140,5 +127,4 @@ return getRouteDefinitions().getRoutes(); } - } Added: camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/EndpointsResource.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/EndpointsResource.java?rev=745547&view=auto ============================================================================== --- camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/EndpointsResource.java (added) +++ camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/EndpointsResource.java Wed Feb 18 15:57:40 2009 @@ -0,0 +1,140 @@ +/** + * + * 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.camel.rest.resources; + +import com.sun.jersey.api.representation.Form; +import com.sun.jersey.api.view.ImplicitProduces; +import com.sun.jersey.api.view.Viewable; +import org.apache.camel.CamelContext; +import org.apache.camel.Endpoint; +import org.apache.camel.ProducerTemplate; +import org.apache.camel.rest.model.EndpointLink; +import org.apache.camel.rest.model.Endpoints; + +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +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.URISyntaxException; +import java.util.List; + +/** + * @version $Revision: 1.1 $ + */ +...@implicitproduces(Constants.HTML_MIME_TYPES) +public class EndpointsResource { + private final CamelContext camelContext; + private final ProducerTemplate template; + private String error = ""; + private String newUri = "mock:someName"; + + public EndpointsResource(CamelContextResource contextResource) { + this.camelContext = contextResource.getCamelContext(); + this.template = contextResource.getTemplate(); + } + + /** + * Returns a list of endpoints available in this context + * + * @return + */ + @GET + @Produces({MediaType.TEXT_XML, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + public Endpoints getEndpointsDTO() { + return new Endpoints(camelContext); + } + + + /** + * Looks up an individual endpoint + */ + @Path("{id}") + public EndpointResource getEndpoint(@PathParam("id") String id) { + // TODO lets assume the ID is the endpoint + Endpoint endpoint = null; + if (id != null) { + // lets remove any whitespace + id = id.trim(); + if (id.length() > 0) { + endpoint = camelContext.getEndpoint(id); + } + } + if (endpoint != null) { + return new EndpointResource(camelContext, template, endpoint); + } else { + return null; + } + } + + + // Creating endpoints + //------------------------------------------------------------------------- + + @POST + @Consumes(MediaType.TEXT_PLAIN) + public Response postMessage(String uri) throws URISyntaxException { + EndpointResource endpoint = getEndpoint(uri); + if (endpoint != null) { + return Response.ok().build(); + } + return Response.noContent().build(); + } + + @POST + @Consumes("application/x-www-form-urlencoded") + public Response processForm(@Context UriInfo uriInfo, Form formData) throws URISyntaxException { + System.out.println("Received form! " + formData); + newUri = formData.getFirst("uri", String.class); + EndpointResource endpoint = getEndpoint(newUri); + if (endpoint != null) { + String href = endpoint.getHref(); + System.out.println("Created endpoint so redirecting to " + href); + return Response.seeOther(new URI(href)).build(); + } else { + error = "Could not find a component to resolve that URI"; + + System.out.println("Failed to create new endpoint!"); + + // lets re-render the form + return Response.ok(new Viewable("index", this)).build(); + } + } + + + // Properties + //------------------------------------------------------------------------- + + public List<EndpointLink> getEndpoints() { + return getEndpointsDTO().getEndpoints(); + } + + public String getError() { + return error; + } + + public String getNewUri() { + return newUri; + } +} Propchange: camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/EndpointsResource.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: camel/trunk/components/camel-web/src/main/webapp/WEB-INF/decorators/main.jsp URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/webapp/WEB-INF/decorators/main.jsp?rev=745547&r1=745546&r2=745547&view=diff ============================================================================== --- camel/trunk/components/camel-web/src/main/webapp/WEB-INF/decorators/main.jsp (original) +++ camel/trunk/components/camel-web/src/main/webapp/WEB-INF/decorators/main.jsp Wed Feb 18 15:57:40 2009 @@ -89,16 +89,13 @@ <div class="navigation_top"> <div class="navigation_bottom"> -<%-- - <H3>Queue Views</H3> + <H3>Actions</H3> <ul class="alternate" type="square"> + <li><a href="<c:url value='/endpoints'/>" title="View current endpoints or create new ones">Endpoints</a></li> + </ul> - <li><a href="queueGraph.jsp" title="View the queue depths as a graph">Graph</a></li> - <li><a href="xml/queues.jsp" title="View the queues as XML">XML</a></li> - </ul> ---%> <H3>Useful Links</H3> <ul class="alternate" type="square"> Modified: camel/trunk/components/camel-web/src/main/webapp/css/type-settings.css URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/webapp/css/type-settings.css?rev=745547&r1=745546&r2=745547&view=diff ============================================================================== --- camel/trunk/components/camel-web/src/main/webapp/css/type-settings.css (original) +++ camel/trunk/components/camel-web/src/main/webapp/css/type-settings.css Wed Feb 18 15:57:40 2009 @@ -174,4 +174,8 @@ width: 500px; height: 100px; overflow : auto; +} + +.error { + color: crimson; } \ No newline at end of file Copied: camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointsResource/index.jsp (from r745452, camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/CamelContextResource/endpoints.jsp) URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointsResource/index.jsp?p2=camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointsResource/index.jsp&p1=camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/CamelContextResource/endpoints.jsp&r1=745452&r2=745547&rev=745547&view=diff ============================================================================== --- camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/CamelContextResource/endpoints.jsp (original) +++ camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointsResource/index.jsp Wed Feb 18 15:57:40 2009 @@ -13,6 +13,33 @@ </c:forEach> </ul> +<h2>Create New Endpoint</h2> + +<form action="/endpoints" method="post"> + <table> + <c:if test="${not empty it.error}"> + <tr> + <td colspan="2" align="center" class="error"> + ${it.error} + </td> + </tr> + </c:if> + <tr> + <td> + Please enter the new endpoint URI + </td> + <td> + <input type="text" name="uri" value="${it.newUri}" width="80"> + </td> + </tr> + <tr> + <td colspan="2" align="center"> + <input type="submit" value="Create"> <input type="reset"> + </td> + </tr> + </table> +</form> + </body> </html> Propchange: camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointsResource/index.jsp ------------------------------------------------------------------------------ svn:eol-style = native