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