You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by js...@apache.org on 2009/02/26 12:27:40 UTC
svn commit: r748093 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/
camel-core/src/main/java/org/apache/camel/model/
components/camel-web/src/main/java/org/apache/camel/web/resources/
components/camel-web/src/main/webapp/org/apache/camel/...
Author: jstrachan
Date: Thu Feb 26 11:27:40 2009
New Revision: 748093
URL: http://svn.apache.org/viewvc?rev=748093&view=rev
Log:
CAMEL-1355 - added the ability to start/stop routes from camel-web as well as display an individual route's status or post it restfully
Added:
camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteStatusResource.java (with props)
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/ServiceStatus.java
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteType.java
camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/EndpointsResource.java
camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteResource.java
camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RoutesResource.java
camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/RoutesResource/index.jsp
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/ServiceStatus.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/ServiceStatus.java?rev=748093&r1=748092&r2=748093&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/ServiceStatus.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/ServiceStatus.java Thu Feb 26 11:27:40 2009
@@ -24,4 +24,12 @@
*/
public enum ServiceStatus {
Created, Starting, Started, Stopping, Stopped;
+
+ public boolean isStartable() {
+ return this != Starting && this != Started;
+ }
+
+ public boolean isStoppable() {
+ return this != Stopping && this != Stopped;
+ }
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteType.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteType.java?rev=748093&r1=748092&r2=748093&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteType.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteType.java Thu Feb 26 11:27:40 2009
@@ -81,11 +81,35 @@
*/
public ServiceStatus getStatus() {
if (camelContext != null) {
- return camelContext.getRouteStatus(this);
+ ServiceStatus answer = camelContext.getRouteStatus(this);
+ if (answer == null) {
+ answer = ServiceStatus.Stopped;
+ }
+ return answer;
}
return null;
}
+ public boolean isStartable() {
+ ServiceStatus status = getStatus();
+ if (status == null) {
+ return true;
+ }
+ else {
+ return status.isStartable();
+ }
+ }
+
+ public boolean isStoppable() {
+ ServiceStatus status = getStatus();
+ if (status == null) {
+ return false;
+ }
+ else {
+ return status.isStoppable();
+ }
+ }
+
public List<RouteContext> addRoutes(CamelContext context, Collection<Route> routes) throws Exception {
List<RouteContext> answer = new ArrayList<RouteContext>();
setCamelContext(context);
Modified: camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/EndpointsResource.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/EndpointsResource.java?rev=748093&r1=748092&r2=748093&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/EndpointsResource.java (original)
+++ camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/EndpointsResource.java Thu Feb 26 11:27:40 2009
@@ -113,6 +113,7 @@
@POST
@Consumes("application/x-www-form-urlencoded")
public Response postUriForm(@Context UriInfo uriInfo, Form formData) throws URISyntaxException {
+ // TODO replace the Form class with an injected bean?
System.out.println("Received form! " + formData);
newUri = formData.getFirst("uri", String.class);
EndpointResource endpoint = getEndpoint(newUri);
Modified: camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteResource.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteResource.java?rev=748093&r1=748092&r2=748093&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteResource.java (original)
+++ camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteResource.java Thu Feb 26 11:27:40 2009
@@ -18,8 +18,11 @@
import java.io.IOException;
import java.io.StringWriter;
+import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
import javax.ws.rs.core.MediaType;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
@@ -78,4 +81,14 @@
return generator.getRoutesText(getCamelContext());
}
+
+ /**
+ * Looks up an individual route
+ */
+ @Path("status")
+ public RouteStatusResource getRouteStatus() {
+ return new RouteStatusResource(this);
+ }
+
+
}
Added: camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteStatusResource.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteStatusResource.java?rev=748093&view=auto
==============================================================================
--- camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteStatusResource.java (added)
+++ camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteStatusResource.java Thu Feb 26 11:27:40 2009
@@ -0,0 +1,100 @@
+/**
+ *
+ * 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.web.resources;
+
+import com.sun.jersey.api.representation.Form;
+import org.apache.camel.CamelContext;
+import org.apache.camel.ServiceStatus;
+import org.apache.camel.model.RouteType;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.net.URI;
+
+/**
+ * Represents the status of a single single Camel Route which is used to implement one or more
+ * <a href="http://camel.apache.org/enterprise-integration-patterns.html">Enterprise Integration Paterns</a>
+ *
+ * @version $Revision: 1.1 $
+ */
+public class RouteStatusResource {
+ private RouteResource routeResource;
+
+ public RouteStatusResource(RouteResource routeResource) {
+ this.routeResource = routeResource;
+ }
+
+ public RouteType getRoute() {
+ return routeResource.getRoute();
+ }
+
+ public CamelContext getCamelContext() {
+ return routeResource.getCamelContext();
+ }
+
+ @GET
+ @Produces(MediaType.TEXT_PLAIN)
+ public String getStatusText() {
+ ServiceStatus status = getStatus();
+ if (status != null) {
+ return status.toString();
+ }
+ return null;
+ }
+
+ public ServiceStatus getStatus() {
+ return getRoute().getStatus();
+ }
+
+ @POST
+ @Consumes(MediaType.TEXT_PLAIN)
+ public Response setStatus(String status) throws Exception {
+ if (status != null) {
+ if (status.equalsIgnoreCase("start")) {
+ getCamelContext().startRoute(getRoute());
+ return Response.ok().build();
+ } else if (status.equalsIgnoreCase("stop")) {
+ getCamelContext().stopRoute(getRoute());
+ return Response.ok().build();
+ }
+ }
+ return Response.noContent().build();
+ }
+
+
+ /**
+ * Sets the status of this route to either "start" or "stop"
+ *
+ * @param formData is the form data POSTed typically from a HTML form with the <code>status</code> field
+ * set to either "start" or "stop"
+ */
+ @POST
+ @Consumes("application/x-www-form-urlencoded")
+ public Response setStatus(Form formData) throws Exception {
+ // TODO replace the Form class with an injected bean?
+ System.out.println("Received form! " + formData);
+ String status = formData.getFirst("status", String.class);
+ setStatus(status);
+ return Response.seeOther(new URI("/routes")).build();
+ }
+
+}
Propchange: camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteStatusResource.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RoutesResource.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RoutesResource.java?rev=748093&r1=748092&r2=748093&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RoutesResource.java (original)
+++ camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RoutesResource.java Thu Feb 26 11:27:40 2009
@@ -71,7 +71,7 @@
* Looks up an individual route
*/
@Path("{id}")
- public RouteResource getEndpoint(@PathParam("id") String id) {
+ public RouteResource getRoute(@PathParam("id") String id) {
List<RouteType> list = getRoutes();
for (RouteType routeType : list) {
if (routeType.getId().equals(id)) {
Modified: camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/RoutesResource/index.jsp
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/RoutesResource/index.jsp?rev=748093&r1=748092&r2=748093&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/RoutesResource/index.jsp (original)
+++ camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/RoutesResource/index.jsp Thu Feb 26 11:27:40 2009
@@ -10,7 +10,7 @@
<table>
<tr>
<th>Route</th>
- <th>Status</th>
+ <th colspan="2">Status</th>
</tr>
<ul>
<c:forEach var="i" items="${it.routes}">
@@ -21,6 +21,18 @@
<td class="${i.status}">
${i.status}
</td>
+ <td>
+ <form action='<c:url value="/routes/${i.id}/status"/>' method="POST" name="setStatus">
+ <c:if test="${i.startable}">
+ <input type="hidden" name="status" value="start">
+ <input type="submit" value="Start">
+ </c:if>
+ <c:if test="${i.stoppable}">
+ <input type="hidden" name="status" value="stop">
+ <input type="submit" value="Stop">
+ </c:if>
+ </form>
+ </td>
</c:forEach>
</ul>
</table>