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/23 16:34:02 UTC
svn commit: r747052 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/impl/converter/
components/camel-web/src/main/java/org/apache/camel/web/resources/
components/camel-web/src/main/webapp/org/apache/camel/web/resources/CamelContextResource...
Author: jstrachan
Date: Mon Feb 23 15:33:59 2009
New Revision: 747052
URL: http://svn.apache.org/viewvc?rev=747052&view=rev
Log:
CAMEL-1355 - added support for viewing system properties and the available type converters
Added:
camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/ConvertersFromResource.java (with props)
camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/ConvertersResource.java (with props)
camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/CamelContextResource/systemProperties.jsp (with props)
camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/ConvertersFromResource/
camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/ConvertersFromResource/index.jsp (with props)
camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/ConvertersResource/
camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/ConvertersResource/index.jsp (with props)
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/CamelChildResourceSupport.java
camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/CamelContextResource.java
camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/CamelContextResource/index.jsp
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java?rev=747052&r1=747051&r2=747052&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java Mon Feb 23 15:33:59 2009
@@ -21,6 +21,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.HashSet;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.camel.Exchange;
@@ -163,6 +164,38 @@
this.injector = injector;
}
+ public Set<Class> getFromClassMappings() {
+ // make sure we have loaded the converters
+ checkLoaded();
+
+ Set<Class> answer = new HashSet<Class>();
+ synchronized (typeMappings) {
+ for (TypeMapping mapping : typeMappings.keySet()) {
+ answer.add(mapping.getFromType());
+ }
+ }
+ return answer;
+ }
+
+ public Set<Class> getToClassMappings(Class fromClass) {
+ Set<Class> answer = new HashSet<Class>();
+ synchronized (typeMappings) {
+ for (TypeMapping mapping : typeMappings.keySet()) {
+ if (mapping.isApplicable(fromClass)) {
+ answer.add(mapping.getToType());
+ }
+ }
+ }
+ return answer;
+ }
+
+ public Map<TypeMapping, TypeConverter> getTypeMappings() {
+ // make sure we have loaded the converters
+ checkLoaded();
+
+ return typeMappings;
+ }
+
protected <T> TypeConverter getOrFindTypeConverter(Class toType, Object value) {
Class fromType = null;
if (value != null) {
@@ -324,5 +357,9 @@
public String toString() {
return "[" + fromType + "=>" + toType + "]";
}
+
+ public boolean isApplicable(Class fromClass) {
+ return fromType.isAssignableFrom(fromClass);
+ }
}
}
Modified: camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/CamelChildResourceSupport.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/CamelChildResourceSupport.java?rev=747052&r1=747051&r2=747052&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/CamelChildResourceSupport.java (original)
+++ camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/CamelChildResourceSupport.java Mon Feb 23 15:33:59 2009
@@ -19,6 +19,10 @@
import com.sun.jersey.api.view.ImplicitProduces;
import org.apache.camel.CamelContext;
import org.apache.camel.ProducerTemplate;
+import org.apache.camel.spi.TypeConverterRegistry;
+import org.apache.camel.impl.converter.DefaultTypeConverter;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
/**
* A useful base class for any sub resource of the root {@link org.apache.camel.web.resources.CamelContextResource}
@@ -27,6 +31,8 @@
*/
@ImplicitProduces(Constants.HTML_MIME_TYPES)
public class CamelChildResourceSupport {
+ private static final transient Log LOG = LogFactory.getLog(CamelChildResourceSupport.class);
+
private final CamelContext camelContext;
private final ProducerTemplate template;
private CamelContextResource contextResource;
@@ -48,4 +54,15 @@
public CamelContextResource getContextResource() {
return contextResource;
}
+
+ public DefaultTypeConverter getDefaultTypeConverter() {
+ TypeConverterRegistry converterRegistry = getCamelContext().getTypeConverterRegistry();
+ if (converterRegistry instanceof DefaultTypeConverter) {
+ return (DefaultTypeConverter) converterRegistry;
+ }
+ else {
+ LOG.info("Not a default type converter as it is: " + converterRegistry);
+ }
+ return null;
+ }
}
Modified: camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/CamelContextResource.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/CamelContextResource.java?rev=747052&r1=747051&r2=747052&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/CamelContextResource.java (original)
+++ camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/CamelContextResource.java Mon Feb 23 15:33:59 2009
@@ -31,6 +31,11 @@
import org.apache.camel.impl.ServiceSupport;
import org.apache.camel.web.model.Camel;
+import java.util.TreeMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
/**
* The root Camel resource from which all other resources can be navigated such as for <code>endpoints</code>
* or <code>routes</code>
@@ -70,6 +75,7 @@
}
return null;
}
+
@PreDestroy
public void close() throws Exception {
if (template != null) {
@@ -77,6 +83,13 @@
}
}
+ /**
+ * Returns the system properties
+ */
+ public Map getSystemProperties() {
+ return new TreeMap(System.getProperties());
+ }
+
// representations
//-------------------------------------------------------------------------
@@ -106,6 +119,11 @@
public RoutesResource getRoutesResource() {
return new RoutesResource(this);
}
+
+ @Path("converters")
+ public ConvertersResource getConvertersResource() {
+ return new ConvertersResource(this);
+ }
/*
public List<EndpointLink> getEndpoints() {
Added: camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/ConvertersFromResource.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/ConvertersFromResource.java?rev=747052&view=auto
==============================================================================
--- camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/ConvertersFromResource.java (added)
+++ camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/ConvertersFromResource.java Mon Feb 23 15:33:59 2009
@@ -0,0 +1,55 @@
+/**
+ *
+ * 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 org.apache.camel.impl.converter.DefaultTypeConverter;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+
+/**
+ * @version $Revision: 1.1 $
+ */
+public class ConvertersFromResource extends CamelChildResourceSupport {
+ private Class type;
+
+ public ConvertersFromResource(CamelContextResource contextResource, Class type) {
+ super(contextResource);
+ this.type = type;
+ }
+
+ public Map<String, Class> getConverters() {
+ Map<String, Class> answer = new TreeMap<String, Class>();
+ DefaultTypeConverter converter = getDefaultTypeConverter();
+ if (converter != null) {
+ Set<Class> classes = converter.getToClassMappings(type);
+ for (Class aClass : classes) {
+ String name = ConvertersResource.nameOf(aClass);
+ answer.put(name, aClass);
+ }
+ }
+ return answer;
+ }
+
+ public Class getType() {
+ return type;
+ }
+
+}
Propchange: camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/ConvertersFromResource.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/ConvertersResource.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/ConvertersResource.java?rev=747052&view=auto
==============================================================================
--- camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/ConvertersResource.java (added)
+++ camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/ConvertersResource.java Mon Feb 23 15:33:59 2009
@@ -0,0 +1,83 @@
+/**
+ *
+ * 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 org.apache.camel.impl.converter.DefaultTypeConverter;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+
+/**
+ * @version $Revision: 1.1 $
+ */
+public class ConvertersResource extends CamelChildResourceSupport {
+ private static final transient Log LOG = LogFactory.getLog(ConvertersResource.class);
+
+ public ConvertersResource(CamelContextResource contextResource) {
+ super(contextResource);
+ }
+
+ public Map<String, Class> getFromClassTypes() {
+ Map<String, Class> answer = new TreeMap<String, Class>();
+ DefaultTypeConverter converter = getDefaultTypeConverter();
+ if (converter != null) {
+ Set<Class> classes = converter.getFromClassMappings();
+ for (Class aClass : classes) {
+ String name = nameOf(aClass);
+ answer.put(name, aClass);
+ }
+ }
+ return answer;
+ }
+
+
+ /**
+ * Returns type converters from the given type
+ */
+ @Path("{type}")
+/*
+ TODO this doesn't work in JAX-RS yet
+
+ public ConvertersFromResource getConvertersFrom(@PathParam("type") Class type) {
+*/
+ public ConvertersFromResource getConvertersFrom(@PathParam("type") String typeName) {
+ Class type;
+ try {
+ type = Thread.currentThread().getContextClassLoader().loadClass(typeName);
+ } catch (ClassNotFoundException e) {
+ try {
+ type = getClass().getClassLoader().loadClass(typeName);
+ } catch (ClassNotFoundException e1) {
+ LOG.debug("Could not find class " + typeName + ". Reason: " + e, e);
+ return null;
+ }
+ }
+ return new ConvertersFromResource(getContextResource(), type);
+ }
+
+
+ public static String nameOf(Class aClass) {
+ return aClass.getCanonicalName();
+ }
+}
Propchange: camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/ConvertersResource.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/CamelContextResource/index.jsp
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/CamelContextResource/index.jsp?rev=747052&r1=747051&r2=747052&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/CamelContextResource/index.jsp (original)
+++ camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/CamelContextResource/index.jsp Mon Feb 23 15:33:59 2009
@@ -22,6 +22,18 @@
</li>
</ul>
+<p>The following diagnostic links might be useful too...
+</p>
+
+<ul>
+ <li>
+ <a href="<c:url value='/converters'/>" title="View the available type converters currently registered with Camel">Type Converters</a>
+ </li>
+ <li>
+ <a href="<c:url value='/systemProperties'/>" title="View the System Properties used to create this service">System Properties</a>
+ </li>
+</ul>
+
<p>Lets take it for a ride!</p>
</body>
Added: camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/CamelContextResource/systemProperties.jsp
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/CamelContextResource/systemProperties.jsp?rev=747052&view=auto
==============================================================================
--- camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/CamelContextResource/systemProperties.jsp (added)
+++ camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/CamelContextResource/systemProperties.jsp Mon Feb 23 15:33:59 2009
@@ -0,0 +1,26 @@
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>System Properties</title>
+</head>
+<body>
+
+<h1>System Properties</h1>
+
+
+<table>
+ <tr>
+ <th>Name</th>
+ <th>Value</th>
+ </tr>
+ <c:forEach items="${it.systemProperties}" var="entry">
+ <tr>
+ <td>${entry.key}</td>
+ <td>${entry.value}</td>
+ </tr>
+ </c:forEach>
+</table>
+
+
+</body>
+</html>
Propchange: camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/CamelContextResource/systemProperties.jsp
------------------------------------------------------------------------------
svn:eol-style = native
Added: camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/ConvertersFromResource/index.jsp
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/ConvertersFromResource/index.jsp?rev=747052&view=auto
==============================================================================
--- camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/ConvertersFromResource/index.jsp (added)
+++ camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/ConvertersFromResource/index.jsp Mon Feb 23 15:33:59 2009
@@ -0,0 +1,24 @@
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Type Converters from: ${it.type.name}</title>
+</head>
+<body>
+
+<h1>Type Converters from: ${it.type.name}</h1>
+
+
+<table>
+ <tr>
+ <th>To Type</th>
+ </tr>
+ <c:forEach items="${it.converters}" var="entry">
+ <tr>
+ <td>${entry.key}</td>
+ </tr>
+ </c:forEach>
+</table>
+
+
+</body>
+</html>
Propchange: camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/ConvertersFromResource/index.jsp
------------------------------------------------------------------------------
svn:eol-style = native
Added: camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/ConvertersResource/index.jsp
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/ConvertersResource/index.jsp?rev=747052&view=auto
==============================================================================
--- camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/ConvertersResource/index.jsp (added)
+++ camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/ConvertersResource/index.jsp Mon Feb 23 15:33:59 2009
@@ -0,0 +1,24 @@
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Type Converters</title>
+</head>
+<body>
+
+<h1>Type Converters</h1>
+
+
+<table>
+ <tr>
+ <th>From Type</th>
+ </tr>
+ <c:forEach items="${it.fromClassTypes}" var="entry">
+ <tr>
+ <td><a href="converters/${entry.key}">${entry.key}</a></td>
+ </tr>
+ </c:forEach>
+</table>
+
+
+</body>
+</html>
Propchange: camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/web/resources/ConvertersResource/index.jsp
------------------------------------------------------------------------------
svn:eol-style = native