You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ni...@apache.org on 2008/03/17 16:02:15 UTC

svn commit: r637926 - in /commons/sandbox/monitoring/trunk/src: main/java/org/apache/commons/monitoring/reporting/ main/java/org/apache/commons/monitoring/reporting/web/ main/java/org/apache/commons/monitoring/servlet/ main/java/org/apache/commons/moni...

Author: nicolas
Date: Mon Mar 17 08:02:10 2008
New Revision: 637926

URL: http://svn.apache.org/viewvc?rev=637926&view=rev
Log:
fix unexpected columns when monitors hold heterogenous statvalues

Added:
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Context.java   (with props)
Modified:
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/AbstractRenderer.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/HtmlRenderer.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/JsonRenderer.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/OptionsSupport.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Renderer.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/TxtRenderer.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/XmlRenderer.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/MonitoringServlet.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/NiceHtmlRenderer.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/servlet/MonitoringListener.java
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/util/_Collections.java
    commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java
    commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/SelectorTest.java

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/AbstractRenderer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/AbstractRenderer.java?rev=637926&r1=637925&r2=637926&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/AbstractRenderer.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/AbstractRenderer.java Mon Mar 17 08:02:10 2008
@@ -17,13 +17,15 @@
 
 package org.apache.commons.monitoring.reporting;
 
-import java.io.PrintWriter;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Set;
 
 import org.apache.commons.monitoring.Counter;
 import org.apache.commons.monitoring.Monitor;
@@ -39,54 +41,88 @@
 public abstract class AbstractRenderer
     implements Renderer
 {
-    public final void render( PrintWriter writer, Collection<Monitor> monitors )
+    public final void render( Context ctx, Collection<Monitor> monitors )
     {
-        render( writer, monitors, new OptionsSupport() );
+        render( ctx, monitors, new OptionsSupport() );
     }
 
-    public void render( PrintWriter writer, Collection<Monitor> monitors, Options options )
+    public void render( Context ctx, Collection<Monitor> monitors, Options options )
     {
         int count = 0;
+        prepareRendering( ctx, monitors, options );
         for ( Monitor monitor : monitors )
         {
             if ( options.render( monitor ) )
             {
                 if ( count > 0 )
                 {
-                    hasNext( writer, Monitor.class );
+                    hasNext( ctx, Monitor.class );
                 }
-                render( writer, monitor, options );
+                render( ctx, monitor, options );
                 count++;
             }
         }
     }
 
-    protected void hasNext( PrintWriter writer, Class<?> type )
+    protected void prepareRendering( Context ctx, Collection<Monitor> monitors, Options options )
+    {
+        List<String> roles = getRoles( monitors, options );
+        ctx.put( "roles", roles );
+        ctx.put( "monitors", monitors );
+    }
+
+    protected void hasNext( Context ctx, Class<?> type )
     {
         // Nop
     }
 
-    protected void render( PrintWriter writer, Monitor monitor, Options options )
+    protected void render( Context ctx, Monitor monitor, Options options, List<String> roles )
+    {
+        render( ctx, monitor, options );
+    }
+
+    protected void render( Context ctx, Monitor monitor, Options options )
     {
-        render( writer, monitor.getKey() );
-        renderStatValues( writer, monitor, options );
+        render( ctx, monitor.getKey() );
+        renderStatValues( ctx, monitor, options );
     }
 
-    protected int renderStatValues( PrintWriter writer, Monitor monitor, Options options )
+    protected void renderStatValues( Context ctx, Monitor monitor, Options options, List<String> roles )
     {
+        renderStatValues( ctx, monitor, options );
+    }
 
-        // Sort values by role to ensure predictable result
-        List<StatValue> values = getOrderedStatValues( monitor, options );
-        for ( Iterator<StatValue> iterator = values.iterator(); iterator.hasNext(); )
+    @SuppressWarnings("unchecked")
+    protected void renderStatValues( Context ctx, Monitor monitor, Options options )
+    {
+        List<String> roles = (List<String>) ctx.get( "roles" );
+        for ( Iterator<String> iterator = roles.iterator(); iterator.hasNext(); )
         {
-            StatValue value = (StatValue) iterator.next();
-            render( writer, value, options );
+            String role = iterator.next();
+            StatValue value = monitor.getValue( role );
+            if (value != null)
+            {
+                render( ctx, value, options );
+            }
+            else
+            {
+                renderMissingValue( ctx, role );
+            }
             if ( iterator.hasNext() )
             {
-                hasNext( writer, StatValue.class );
+                hasNext( ctx, StatValue.class );
             }
         }
-        return values.size();
+    }
+
+    /**
+     * Render an expected value not supported by the current monitor
+     * @param ctx
+     * @param role
+     */
+    protected void renderMissingValue( Context ctx, String role )
+    {
+        // Nop
     }
 
     protected List<StatValue> getOrderedStatValues( Monitor monitor, Options options )
@@ -95,7 +131,7 @@
         for ( Iterator<StatValue> iterator = values.iterator(); iterator.hasNext(); )
         {
             StatValue value = (StatValue) iterator.next();
-            if ( !options.render( value ) )
+            if ( !options.renderRole( value.getRole() ) )
             {
                 iterator.remove();
             }
@@ -110,73 +146,73 @@
         return values;
     }
 
-    protected void render( PrintWriter writer, StatValue value, Options options )
+    protected void render( Context ctx, StatValue value, Options options )
     {
         if ( value instanceof Counter )
         {
             Counter counter = (Counter) value;
             if ( options.render( value, "hits" ) )
             {
-                render( writer, value, "hits", counter.getHits(), options, 0 );
+                render( ctx, value, "hits", counter.getHits(), options, 0 );
             }
             if ( options.render( value, "sum" ) )
             {
-                render( writer, value, "sum", counter.getSum(), options );
+                render( ctx, value, "sum", counter.getSum(), options );
             }
         }
         if ( options.render( value, "min" ) )
         {
-            render( writer, value, "min", value.getMin(), options );
+            render( ctx, value, "min", value.getMin(), options );
         }
         if ( options.render( value, "max" ) )
         {
-            render( writer, value, "max", value.getMax(), options );
+            render( ctx, value, "max", value.getMax(), options );
         }
         if ( options.render( value, "mean" ) )
         {
-            render( writer, value, "mean", value.getMean(), options );
+            render( ctx, value, "mean", value.getMean(), options );
         }
         if ( options.render( value, "deviation" ) )
         {
-            render( writer, value, "deviation", value.getStandardDeviation(), options, 1 );
+            render( ctx, value, "deviation", value.getStandardDeviation(), options, 1 );
         }
         if ( options.render( value, "value" ) )
         {
-            render( writer, value, "value", value.get(), options, 1 );
+            render( ctx, value, "value", value.get(), options, 1 );
         }
     }
 
-    protected abstract void render( PrintWriter writer, Key key );
+    protected abstract void render( Context ctx, Key key );
 
-    protected void render( PrintWriter writer, StatValue value, String attribute, Number number, Options options )
+    protected void render( Context ctx, StatValue value, String attribute, Number number, Options options )
     {
-        render( writer, value, attribute, number, options, 1 );
+        render( ctx, value, attribute, number, options, 1 );
     }
 
     /**
      * Render a StatValue attribute
      *
-     * @param writer output
+     * @param ctx output
      * @param value the StatValue that hold data to be rendered
      * @param attribute the StatValue attribute name to be rendered
      * @param number the the StatValue attribute value to be rendered
      * @param ratio the ratio between attribute unit and statValue unit (in power of 10)
      * @param options the rendering options
      */
-    protected void render( PrintWriter writer, StatValue value, String attribute, Number number, Options options,
+    protected void render( Context ctx, StatValue value, String attribute, Number number, Options options,
                            int ratio )
     {
         if ( number instanceof Double )
         {
-            renderInternal( writer, value, attribute, number.doubleValue(), options, ratio );
+            renderInternal( ctx, value, attribute, number.doubleValue(), options, ratio );
         }
         else
         {
-            renderInternal( writer, value, attribute, number.longValue(), options, ratio );
+            renderInternal( ctx, value, attribute, number.longValue(), options, ratio );
         }
     }
 
-    private void renderInternal( PrintWriter writer, StatValue value, String attribute, long l, Options options,
+    private void renderInternal( Context ctx, StatValue value, String attribute, long l, Options options,
                                  int ratio )
     {
         Unit unit = options.unitFor( value );
@@ -188,15 +224,15 @@
             }
         }
 
-        writer.append( options.getNumberFormat().format( l ) );
+        ctx.print( options.getNumberFormat().format( l ) );
     }
 
-    private void renderInternal( PrintWriter writer, StatValue value, String attribute, double d, Options options,
+    private void renderInternal( Context ctx, StatValue value, String attribute, double d, Options options,
                                  int ratio )
     {
         if ( Double.isNaN( d ) )
         {
-            writer.append( "-" );
+            ctx.print( "-" );
             return;
         }
         Unit unit = options.unitFor( value );
@@ -208,6 +244,31 @@
             }
         }
 
-        writer.append( options.getDecimalFormat().format( d ) );
+        ctx.print( options.getDecimalFormat().format( d ) );
+    }
+
+    /**
+     * @param monitors
+     * @return
+     */
+    protected List<String> getRoles( Collection<Monitor> monitors, Options options )
+    {
+        Set<String> roles = new HashSet<String>();
+        for ( Monitor monitor : monitors )
+        {
+            if (options.render( monitor ))
+            {
+                for ( String role : monitor.getRoles() )
+                {
+                    if (options.renderRole( role ))
+                    {
+                        roles.add( role );
+                    }
+                }
+            }
+        }
+        List<String> sorted = new ArrayList<String>( roles );
+        Collections.sort( sorted );
+        return sorted;
     }
 }

Added: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Context.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Context.java?rev=637926&view=auto
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Context.java (added)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Context.java Mon Mar 17 08:02:10 2008
@@ -0,0 +1,51 @@
+/*
+ * 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.commons.monitoring.reporting;
+
+import java.io.PrintWriter;
+import java.util.HashMap;
+
+/**
+ * A context for rendering process. Allow appending data to output using
+ * <code>print</code> methods and to store/retrieve contextual data.
+ *
+ * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
+ */
+@SuppressWarnings( "serial" )
+public class Context
+    extends HashMap<String, Object>
+{
+    private PrintWriter writer;
+
+    public Context( PrintWriter writer )
+    {
+        super();
+        this.writer = writer;
+    }
+
+    public void print( String s )
+    {
+        writer.print( s );
+    }
+
+    public void println( String s )
+    {
+        writer.println( s );
+    }
+
+}

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Context.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Context.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Context.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/HtmlRenderer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/HtmlRenderer.java?rev=637926&r1=637925&r2=637926&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/HtmlRenderer.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/HtmlRenderer.java Mon Mar 17 08:02:10 2008
@@ -17,10 +17,9 @@
 
 package org.apache.commons.monitoring.reporting;
 
-import java.io.PrintWriter;
 import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.apache.commons.monitoring.Counter;
 import org.apache.commons.monitoring.Monitor;
@@ -38,170 +37,206 @@
     /**
      * {@inheritDoc}
      *
-     * @see org.apache.commons.monitoring.reporting.AbstractRenderer#render(java.io.PrintWriter,
+     * @see org.apache.commons.monitoring.reporting.AbstractRenderer#render(java.io.Context,
      * java.util.Collection,
      * org.apache.commons.monitoring.reporting.Renderer.Options)
      */
     @Override
-    public void render( PrintWriter writer, Collection<Monitor> monitors, Options options )
+    public void render( Context ctx, Collection<Monitor> monitors, Options options )
     {
-        documentHead( writer );
-        tableStartTag( writer );
-        tableHead( writer, monitors, options );
-        tabelBody( writer, monitors, options );
-        tableEndTag( writer );
-        documentFoot( writer );
+        prepareRendering( ctx, monitors, options );
+        documentHead( ctx );
+        tableStartTag( ctx );
+        tableHead( ctx, monitors, options );
+        tabelBody( ctx, monitors, options );
+        tableEndTag( ctx );
+        documentFoot( ctx );
     }
 
-    protected void tabelBody( PrintWriter writer, Collection<Monitor> monitors, Options options )
+    protected void tabelBody( Context ctx, Collection<Monitor> monitors, Options options )
     {
-        writer.println( "<tbody><tr>" );
-        super.render( writer, monitors, options );
-        writer.println( "</tr></tbody>" );
+        ctx.println( "<tbody><tr>" );
+        super.render( ctx, monitors, options );
+        ctx.println( "</tr></tbody>" );
     }
 
     /**
-     * @param writer
+     * @param ctx
      */
-    protected void tableStartTag( PrintWriter writer )
+    protected void tableStartTag( Context ctx )
     {
-        writer.print( "<table border='1'>" );
+        ctx.print( "<table border='1'>" );
     }
 
     /**
-     * @param writer
+     * @param ctx
      */
-    protected void tableEndTag( PrintWriter writer )
+    protected void tableEndTag( Context ctx )
     {
-        writer.println( "</table>" );
+        ctx.println( "</table>" );
     }
 
     /**
-     * @param writer
+     * @param ctx
      */
-    protected void documentHead( PrintWriter writer )
+    protected void documentHead( Context ctx )
     {
-        writer.println( "<html><body>" );
+        ctx.println( "<html><body>" );
     }
 
-    protected void tableHead( PrintWriter writer, Collection<Monitor> monitors, Options options )
+    @SuppressWarnings( "unchecked" )
+    protected void tableHead( Context ctx, Collection<Monitor> monitors, Options options )
     {
-        Iterator<Monitor> it = monitors.iterator();
-        if ( it.hasNext() )
+        Collection<String> roles = (Collection<String>) ctx.get( "roles" );
+        Map<String, Integer> columns = new HashMap<String, Integer>();
+
+        ctx.println( "<thead><tr><th rowspan='2'>name</th>" );
+        ctx.println( "<th rowspan='2'>category</th>" );
+        ctx.println( "<th rowspan='2'>subsystem</th>" );
+        for ( String role : roles )
         {
-            Monitor monitor = it.next();
-            writer
-                .println( "<thead><tr><th rowspan='2'>name</th><th rowspan='2'>category</th><th rowspan='2'>subsystem</th>" );
-            List<StatValue> values = getOrderedStatValues( monitor, options );
-            for ( StatValue value : values )
+            // Search the first monitor that has a StatValue for the role...
+            for ( Monitor monitor : monitors )
             {
-                int span = 0;
-                if ( value instanceof Counter )
-                {
-                    span += options.render( value, "hits" ) ? 1 : 0;
-                    span += options.render( value, "sum" ) ? 1 : 0;
-                }
-                span += options.render( value, "min" ) ? 1 : 0;
-                span += options.render( value, "max" ) ? 1 : 0;
-                span += options.render( value, "mean" ) ? 1 : 0;
-                span += options.render( value, "deviation" ) ? 1 : 0;
-                span += options.render( value, "value" ) ? 1 : 0;
-
-                writer.print( "<td colspan='" );
-                writer.print( String.valueOf( span ) );
-                writer.print( "'>" );
-                writer.print( value.getRole() );
-                Unit unit = options.unitFor( value );
-                if ( unit != null && unit.getName().length() > 0 )
+                StatValue value = monitor.getValue( role );
+                if ( value != null )
                 {
-                    renderUnit( writer, unit );
+                    int span = 0;
+                    if ( value instanceof Counter )
+                    {
+                        span += options.render( value, "hits" ) ? 1 : 0;
+                        span += options.render( value, "sum" ) ? 1 : 0;
+                    }
+                    span += options.render( value, "min" ) ? 1 : 0;
+                    span += options.render( value, "max" ) ? 1 : 0;
+                    span += options.render( value, "mean" ) ? 1 : 0;
+                    span += options.render( value, "deviation" ) ? 1 : 0;
+                    span += options.render( value, "value" ) ? 1 : 0;
+
+                    ctx.print( "<td colspan='" );
+                    ctx.print( String.valueOf( span ) );
+                    ctx.print( "'>" );
+                    ctx.print( value.getRole() );
+                    Unit unit = options.unitFor( value );
+                    if ( unit != null && unit.getName().length() > 0 )
+                    {
+                        renderUnit( ctx, unit );
+                    }
+                    ctx.print( "</td>" );
+                    columns.put( role, span );
+                    break;
                 }
-                writer.print( "</td>" );
             }
-            writer.print( "</tr>" );
-            writer.print( "<tr>" );
-            for ( StatValue value : values )
+        }
+        ctx.print( "</tr>" );
+        ctx.print( "<tr>" );
+
+        for ( String role : roles )
+        {
+            for ( Monitor monitor : monitors )
             {
-                if ( value instanceof Counter )
+                StatValue value = monitor.getValue( role );
+                if ( value != null )
                 {
-                    writeColumnHead( writer, options, value, "hits" );
-                    writeColumnHead( writer, options, value, "sum" );
+                    if ( value instanceof Counter )
+                    {
+                        writeColumnHead( ctx, options, value, "hits" );
+                        writeColumnHead( ctx, options, value, "sum" );
+                    }
+                    writeColumnHead( ctx, options, value, "min" );
+                    writeColumnHead( ctx, options, value, "max" );
+                    writeColumnHead( ctx, options, value, "mean" );
+                    writeColumnHead( ctx, options, value, "deviation" );
+                    writeColumnHead( ctx, options, value, "value" );
+                    break;
                 }
-                writeColumnHead( writer, options, value, "min" );
-                writeColumnHead( writer, options, value, "max" );
-                writeColumnHead( writer, options, value, "mean" );
-                writeColumnHead( writer, options, value, "deviation" );
-                writeColumnHead( writer, options, value, "value" );
             }
-            writer.println( "</tr></thead>" );
         }
+        ctx.println( "</tr></thead>" );
+        ctx.put( "columns", columns );
     }
 
-    protected void writeColumnHead( PrintWriter writer, Options options, StatValue value, String attribute )
+    protected void writeColumnHead( Context ctx, Options options, StatValue value, String attribute )
     {
         if ( options.render( value, attribute ) )
         {
-            writer.print( "<th>" );
-            writer.print( attribute );
-            writer.print( "</th>" );
+            ctx.print( "<th>" );
+            ctx.print( attribute );
+            ctx.print( "</th>" );
         }
     }
 
-    protected void renderUnit( PrintWriter writer, Unit unit )
+    protected void renderUnit( Context ctx, Unit unit )
     {
-        writer.print( " (" );
-        writer.print( unit.getName() );
-        writer.print( ")" );
+        ctx.print( " (" );
+        ctx.print( unit.getName() );
+        ctx.print( ")" );
     }
 
     @Override
-    protected void render( PrintWriter writer, StatValue value, String attribute, Number number, Options options, int ratio )
+    protected void render( Context ctx, StatValue value, String attribute, Number number, Options options, int ratio )
     {
-        writer.print( "<td>" );
-        super.render( writer, value, attribute, number, options, ratio );
-        writer.print( "</td>" );
+        ctx.print( "<td>" );
+        super.render( ctx, value, attribute, number, options, ratio );
+        ctx.print( "</td>" );
     }
 
     @Override
-    protected void render( PrintWriter writer, Key key )
+    protected void render( Context ctx, Key key )
     {
-        writer.print( "<td>" );
-        writer.print( key.getName() );
-        writer.print( "</td><td>" );
+        ctx.print( "<td>" );
+        ctx.print( key.getName() );
+        ctx.print( "</td><td>" );
         if ( key.getCategory() != null )
         {
-            writer.print( key.getCategory() );
+            ctx.print( key.getCategory() );
         }
-        writer.print( "</td><td>" );
+        ctx.print( "</td><td>" );
         if ( key.getSubsystem() != null )
         {
-            writer.print( key.getSubsystem() );
+            ctx.print( key.getSubsystem() );
         }
-        writer.print( "</td>" );
+        ctx.print( "</td>" );
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @see org.apache.commons.monitoring.reporting.AbstractRenderer#renderMissingValue(org.apache.commons.monitoring.reporting.Context,
+     * java.lang.String)
+     */
+    @SuppressWarnings("unchecked")
+    @Override
+    protected void renderMissingValue( Context ctx, String role )
+    {
+        Map<String, Integer> columns = (Map<String, Integer>) ctx.get( "columns" );
+        ctx.print( "<td colspan='" );
+        ctx.print( String.valueOf( columns.get( role ) ) );
+        ctx.print( "'>-</td>" );
     }
 
     /**
      * {@inheritDoc}
      *
-     * @see org.apache.commons.monitoring.reporting.AbstractRenderer#hasNext(java.io.PrintWriter,
+     * @see org.apache.commons.monitoring.reporting.AbstractRenderer#hasNext(java.io.Context,
      * java.lang.Class)
      */
     @Override
-    protected void hasNext( PrintWriter writer, Class<?> type )
+    protected void hasNext( Context ctx, Class<?> type )
     {
         if ( type == Monitor.class )
         {
-            writer.println( "</tr>" );
-            writer.println( "<tr>" );
+            ctx.println( "</tr>" );
+            ctx.println( "<tr>" );
         }
     }
 
     /**
-     * @param writer
+     * @param ctx
      */
-    protected void documentFoot( PrintWriter writer )
+    protected void documentFoot( Context ctx )
     {
-        writer.print( "</body></html>" );
+        ctx.print( "</body></html>" );
     }
 
 }

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/JsonRenderer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/JsonRenderer.java?rev=637926&r1=637925&r2=637926&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/JsonRenderer.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/JsonRenderer.java Mon Mar 17 08:02:10 2008
@@ -17,8 +17,8 @@
 
 package org.apache.commons.monitoring.reporting;
 
-import java.io.PrintWriter;
 import java.util.Collection;
+import java.util.List;
 
 import org.apache.commons.monitoring.Monitor;
 import org.apache.commons.monitoring.StatValue;
@@ -28,80 +28,86 @@
     extends AbstractRenderer
 {
     @Override
-    public void render( PrintWriter writer, Collection<Monitor> monitors, Options options )
+    public void render( Context ctx, Collection<Monitor> monitors, Options options )
     {
-        writer.print( "[" );
-        super.render( writer, monitors, options );
-        writer.print( "]" );
+        ctx.print( "[" );
+        super.render( ctx, monitors, options );
+        ctx.print( "]" );
     }
 
     @Override
     @SuppressWarnings("unchecked")
-    protected void hasNext( PrintWriter writer, Class type )
+    protected void hasNext( Context ctx, Class type )
     {
-        writer.print( ',' );
+        ctx.print( "," );
     }
 
     @Override
-    public void render( PrintWriter writer, Monitor monitor, Options options )
+    public void render( Context ctx, Monitor monitor, Options options, List<String> roles )
     {
-        writer.print( "{" );
-        if ( renderStatValues( writer, monitor, options ) > 0 )
+        render( ctx, monitor, options );
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public void render( Context ctx, Monitor monitor, Options options )
+    {
+        ctx.print( "{" );
+        renderStatValues( ctx, monitor, options );
+        Collection<String> roles = (Collection<String>) ctx.get( "roles" );
+        if ( roles.size() > 0 )
         {
-            writer.print( "," );
+            ctx.print( "," );
         }
-        render( writer, monitor.getKey() );
-        writer.print( "}" );
+        render( ctx, monitor.getKey() );
+        ctx.print( "}" );
     }
 
     @Override
-    public void render( PrintWriter writer, Key key )
+    public void render( Context ctx, Key key )
     {
-        writer.print( "key:{name:\"" );
-        writer.print( key.getName() );
+        ctx.print( "key:{name:\"" );
+        ctx.print( key.getName() );
         if ( key.getCategory() != null )
         {
-            writer.print( "\",category:\"" );
-            writer.print( key.getCategory() );
+            ctx.print( "\",category:\"" );
+            ctx.print( key.getCategory() );
         }
         if ( key.getSubsystem() != null )
         {
-            writer.print( "\",subsystem:\"" );
-            writer.print( key.getSubsystem() );
+            ctx.print( "\",subsystem:\"" );
+            ctx.print( key.getSubsystem() );
         }
-        writer.print( "\"}" );
+        ctx.print( "\"}" );
     }
 
     @Override
-    public void render( PrintWriter writer, StatValue value, Options options )
+    public void render( Context ctx, StatValue value, Options options )
     {
-        writer.print( value.getRole() );
-        writer.print( ":{" );
-        super.render( writer, value, options );
-        writer.print( "}" );
+        ctx.print( value.getRole() );
+        ctx.print( ":{" );
+        super.render( ctx, value, options );
+        ctx.print( "}" );
     }
 
-    /** Current rendering state */
-    private StatValue currentValue;
-    private boolean firstAttribute;
-
     @Override
-    protected void render( PrintWriter writer, StatValue value, String attribute, Number number, Options options, int ratio )
+    protected void render( Context ctx, StatValue value, String attribute, Number number, Options options, int ratio )
     {
+        StatValue currentValue = (StatValue) ctx.get( "currentValue" );
         if (currentValue != value)
         {
-            currentValue = value;
-            firstAttribute = true;
+            ctx.put( "currentValue", value );
+            ctx.put( "firstAttribute", Boolean.TRUE );
         }
-
-        if (!firstAttribute)
+        Boolean firstAttribute = (Boolean) ctx.get( "firstAttribute" );
+        if (!firstAttribute.booleanValue())
         {
-            writer.print( ',' );
+            ctx.print( "," );
         }
-        writer.print( attribute );
-        writer.print( ":\"" );
-        super.render( writer, value, attribute, number, options, ratio );
-        writer.print( '\"' );
-        firstAttribute = false;
+        ctx.print( attribute );
+        ctx.print( ":\"" );
+        super.render( ctx, value, attribute, number, options, ratio );
+        ctx.print( "\"" );
+        ctx.put( "firstAttribute", Boolean.FALSE );
     }
 }

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/OptionsSupport.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/OptionsSupport.java?rev=637926&r1=637925&r2=637926&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/OptionsSupport.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/OptionsSupport.java Mon Mar 17 08:02:10 2008
@@ -21,6 +21,7 @@
 import java.text.DecimalFormatSymbols;
 import java.text.NumberFormat;
 
+import org.apache.commons.monitoring.Monitor;
 import org.apache.commons.monitoring.StatValue;
 import org.apache.commons.monitoring.Unit;
 
@@ -32,12 +33,17 @@
 public class OptionsSupport
     implements Renderer.Options
 {
-    public boolean render( Object object )
+    public boolean render( Monitor monitor )
     {
         return true;
     }
 
     public boolean render( StatValue value, String attribute )
+    {
+        return true;
+    }
+
+    public boolean renderRole( String role )
     {
         return true;
     }

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Renderer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Renderer.java?rev=637926&r1=637925&r2=637926&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Renderer.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Renderer.java Mon Mar 17 08:02:10 2008
@@ -17,7 +17,6 @@
 
 package org.apache.commons.monitoring.reporting;
 
-import java.io.PrintWriter;
 import java.text.NumberFormat;
 import java.util.Arrays;
 import java.util.Collection;
@@ -35,15 +34,17 @@
 {
     Collection<String> DEFAULT_ROLES = Arrays.asList( new String[] { Monitor.CONCURRENCY, Monitor.PERFORMANCES } );
 
-    void render( PrintWriter writer, Collection<Monitor> monitors );
+    void render( Context ctx, Collection<Monitor> monitors );
 
-    void render( PrintWriter writer, Collection<Monitor> monitors, Options options );
+    void render( Context ctx, Collection<Monitor> monitors, Options options );
 
     interface Options
     {
-        boolean render( Object object );
+        boolean render( Monitor object );
 
         boolean render( StatValue value, String attribute );
+
+        boolean renderRole( String role );
 
         Unit unitFor( StatValue value );
 

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/TxtRenderer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/TxtRenderer.java?rev=637926&r1=637925&r2=637926&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/TxtRenderer.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/TxtRenderer.java Mon Mar 17 08:02:10 2008
@@ -17,8 +17,6 @@
 
 package org.apache.commons.monitoring.reporting;
 
-import java.io.PrintWriter;
-
 import org.apache.commons.monitoring.StatValue;
 import org.apache.commons.monitoring.Monitor.Key;
 
@@ -34,24 +32,24 @@
 
     /**
      * {@inheritDoc}
-     * @see org.apache.commons.monitoring.reporting.AbstractRenderer#render(org.apache.commons.monitoring.StatValue, java.lang.String)
+     * @see org.apache.commons.monitoring.reporting.AbstractRenderer#render(Context, java.lang.String)
      */
     @Override
-    public void render( PrintWriter writer, StatValue value, Options options )
+    public void render( Context ctx, StatValue value, Options options )
     {
-        writer.println( value.getRole() );
-        super.render( writer, value, options );
-        writer.println();
+        ctx.println( value.getRole() );
+        super.render( ctx, value, options );
+        ctx.println( "" );
     }
 
     @Override
-    protected void render( PrintWriter writer, StatValue value, String attribute, Number number, Options options, int ratio )
+    protected void render( Context ctx, StatValue value, String attribute, Number number, Options options, int ratio )
     {
-        writer.print( "    " );
-        writer.print( attribute );
-        writer.print( " : " );
-        super.render( writer, value, attribute, number, options, ratio );
-        writer.println();
+        ctx.print( "    " );
+        ctx.print( attribute );
+        ctx.print( " : " );
+        super.render( ctx, value, attribute, number, options, ratio );
+        ctx.println( "" );
     }
 
     /**
@@ -59,11 +57,11 @@
      * @see org.apache.commons.monitoring.reporting.AbstractRenderer#render(org.apache.commons.monitoring.Monitor.Key)
      */
     @Override
-    public void render( PrintWriter writer, Key key )
+    public void render( Context ctx, Key key )
     {
-        writer.println( HR );
-        writer.println( key.toString() );
-        writer.println( HR );
+        ctx.println( HR );
+        ctx.println( key.toString() );
+        ctx.println( HR );
     }
 
 }

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/XmlRenderer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/XmlRenderer.java?rev=637926&r1=637925&r2=637926&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/XmlRenderer.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/XmlRenderer.java Mon Mar 17 08:02:10 2008
@@ -17,8 +17,8 @@
 
 package org.apache.commons.monitoring.reporting;
 
-import java.io.PrintWriter;
 import java.util.Collection;
+import java.util.List;
 
 import org.apache.commons.monitoring.Monitor;
 import org.apache.commons.monitoring.StatValue;
@@ -30,60 +30,66 @@
 
     /**
      * {@inheritDoc}
-     * @see org.apache.commons.monitoring.reporting.AbstractRenderer#render(java.io.PrintWriter, java.util.Collection, org.apache.commons.monitoring.reporting.Renderer.Options)
+     * @see org.apache.commons.monitoring.reporting.AbstractRenderer#render(java.io.Context, java.util.Collection, org.apache.commons.monitoring.reporting.Renderer.Options)
      */
     @Override
-    public void render( PrintWriter writer, Collection<Monitor> monitors, Options options )
+    public void render( Context ctx, Collection<Monitor> monitors, Options options )
     {
-        writer.print( "<monitors>" );
-        super.render( writer, monitors, options );
-        writer.print( "</monitors>" );
+        ctx.print( "<monitors>" );
+        super.render( ctx, monitors, options );
+        ctx.print( "</monitors>" );
     }
 
     @Override
-    public void render( PrintWriter writer, Monitor monitor, Options options )
+    public void render( Context ctx, Monitor monitor, Options options, List<String> roles )
     {
-        writer.print( "<monitor " );
-        super.render( writer, monitor, options );
-        writer.print( "</monitor>" );
+        render( ctx, monitor, options );
     }
 
     @Override
-    public void render( PrintWriter writer, Key key )
+    public void render( Context ctx, Monitor monitor, Options options )
     {
-        writer.print( "name=\"" );
-        writer.print( key.getName() );
+        ctx.print( "<monitor " );
+        super.render( ctx, monitor, options );
+        ctx.print( "</monitor>" );
+    }
+
+    @Override
+    public void render( Context ctx, Key key )
+    {
+        ctx.print( "name=\"" );
+        ctx.print( key.getName() );
         if ( key.getCategory() != null )
         {
-            writer.print( "\" category=\"" );
-            writer.print( key.getCategory() );
+            ctx.print( "\" category=\"" );
+            ctx.print( key.getCategory() );
         }
         if ( key.getSubsystem() != null )
         {
-            writer.print( "\" subsystem=\"" );
-            writer.print( key.getSubsystem() );
+            ctx.print( "\" subsystem=\"" );
+            ctx.print( key.getSubsystem() );
         }
-        writer.print( "\">" );
+        ctx.print( "\">" );
     }
 
 
     @Override
-    public void render( PrintWriter writer, StatValue value, Options options )
+    public void render( Context ctx, StatValue value, Options options )
     {
-        writer.print( "<" );
-        writer.print( value.getRole() );
-        super.render( writer, value, options );
-        writer.print( "/>" );
+        ctx.print( "<" );
+        ctx.print( value.getRole() );
+        super.render( ctx, value, options );
+        ctx.print( "/>" );
     }
 
     @Override
-    protected void render( PrintWriter writer, StatValue value, String attribute, Number number, Options options, int ratio )
+    protected void render( Context ctx, StatValue value, String attribute, Number number, Options options, int ratio )
     {
-        writer.print( ' ' );
-        writer.print( attribute );
-        writer.print( "=\"" );
-        super.render( writer, value, attribute, number, options, ratio );
-        writer.print( '\"' );
+        ctx.print( " " );
+        ctx.print( attribute );
+        ctx.print( "=\"" );
+        super.render( ctx, value, attribute, number, options, ratio );
+        ctx.print( "\"" );
     }
 
 }

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/MonitoringServlet.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/MonitoringServlet.java?rev=637926&r1=637925&r2=637926&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/MonitoringServlet.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/MonitoringServlet.java Mon Mar 17 08:02:10 2008
@@ -37,6 +37,7 @@
 import org.apache.commons.monitoring.StatValue;
 import org.apache.commons.monitoring.Unit;
 import org.apache.commons.monitoring.Monitor.Key;
+import org.apache.commons.monitoring.reporting.Context;
 import org.apache.commons.monitoring.reporting.HtmlRenderer;
 import org.apache.commons.monitoring.reporting.JsonRenderer;
 import org.apache.commons.monitoring.reporting.OptionsSupport;
@@ -107,7 +108,7 @@
             String path = request.getPathInfo();
             Collection<Monitor> monitors = (Collection<Monitor>) new Selector( path ).select( repository );
             Renderer.Options options = getOptions( request );
-            renderer.render( response.getWriter(), monitors, options );
+            renderer.render( new Context( response.getWriter() ), monitors, options );
             return;
         }
     }
@@ -192,19 +193,11 @@
             subsystems = values != null ? Arrays.asList( values ) : Collections.<String> emptyList();
         }
 
-        public boolean render( Object object )
+        public boolean render( Monitor monitor )
         {
-            if ( object instanceof StatValue )
-            {
-                return roles.isEmpty() || roles.contains( ( (StatValue) object ).getRole() );
-            }
-            if ( object instanceof Monitor )
-            {
-                Key key = ( (Monitor) object ).getKey();
-                return ( categories.isEmpty() || categories.contains( key.getCategory() ) )
-                    && ( subsystems.isEmpty() || subsystems.contains( key.getSubsystem() ) );
-            }
-            return true;
+            Key key = monitor.getKey();
+            return ( categories.isEmpty() || categories.contains( key.getCategory() ) )
+                && ( subsystems.isEmpty() || subsystems.contains( key.getSubsystem() ) );
         }
 
         public boolean render( StatValue value, String attribute )

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/NiceHtmlRenderer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/NiceHtmlRenderer.java?rev=637926&r1=637925&r2=637926&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/NiceHtmlRenderer.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/web/NiceHtmlRenderer.java Mon Mar 17 08:02:10 2008
@@ -17,9 +17,8 @@
 
 package org.apache.commons.monitoring.reporting.web;
 
-import java.io.PrintWriter;
-
 import org.apache.commons.monitoring.Unit;
+import org.apache.commons.monitoring.reporting.Context;
 import org.apache.commons.monitoring.reporting.HtmlRenderer;
 
 /**
@@ -53,10 +52,10 @@
     /**
      * {@inheritDoc}
      *
-     * @see org.apache.commons.monitoring.reporting.HtmlRenderer#documentHead(java.io.PrintWriter)
+     * @see org.apache.commons.monitoring.reporting.HtmlRenderer#documentHead(java.io.Context)
      */
     @Override
-    protected void documentHead( PrintWriter writer )
+    protected void documentHead( Context writer )
     {
         writer.println( "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" " );
         writer.println( "  \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">" );
@@ -92,7 +91,7 @@
     }
 
     @Override
-    protected void renderUnit( PrintWriter writer, Unit unit )
+    protected void renderUnit( Context writer, Unit unit )
     {
         writer.print( " <span class='unit'>(" );
         writer.print( unit.getName() );
@@ -102,10 +101,10 @@
     /**
      * {@inheritDoc}
      *
-     * @see org.apache.commons.monitoring.reporting.HtmlRenderer#tableStartTag(java.io.PrintWriter)
+     * @see org.apache.commons.monitoring.reporting.HtmlRenderer#tableStartTag(java.io.Context)
      */
     @Override
-    protected void tableStartTag( PrintWriter writer )
+    protected void tableStartTag( Context writer )
     {
         writer.println( "<table border='1' id='monitoring' cellspacing='1'>" );
     }

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/servlet/MonitoringListener.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/servlet/MonitoringListener.java?rev=637926&r1=637925&r2=637926&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/servlet/MonitoringListener.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/servlet/MonitoringListener.java Mon Mar 17 08:02:10 2008
@@ -46,6 +46,7 @@
         {
             try
             {
+                @SuppressWarnings("unchecked")
                 Class repositoryClass = Class.forName( name );
                 if ( !Repository.class.isAssignableFrom( repositoryClass ) )
                 {

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/util/_Collections.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/util/_Collections.java?rev=637926&r1=637925&r2=637926&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/util/_Collections.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/util/_Collections.java Mon Mar 17 08:02:10 2008
@@ -26,6 +26,7 @@
  */
 public class _Collections
 {
+    @SuppressWarnings("unchecked")
     public static List emptyList()
     {
         return Collections.EMPTY_LIST;

Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java?rev=637926&r1=637925&r2=637926&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java (original)
+++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java Mon Mar 17 08:02:10 2008
@@ -95,7 +95,8 @@
         counter.add( 1, Unit.MILLIS );
         counter.add( 1, Unit.MICROS );
         StringWriter writer = new StringWriter();
-        renderer.render( new PrintWriter( writer ), counter, "mean", counter.getMean(), options );
+        Context ctx = new Context( new PrintWriter( writer ) );
+        renderer.render( ctx, counter, "mean", counter.getMean(), options );
         assertEquals( " mean=\"500.50\"", writer.toString() );
     }
 
@@ -103,7 +104,8 @@
         throws Exception
     {
         StringWriter out = new StringWriter();
-        renderer.render( new PrintWriter( out ), monitors );
+        Context ctx = new Context( new PrintWriter( out ) );
+        renderer.render( ctx, monitors );
         String actual = out.toString();
         actual = StringUtils.remove( StringUtils.remove( actual, "\n" ), "\r" );
 

Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/SelectorTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/SelectorTest.java?rev=637926&r1=637925&r2=637926&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/SelectorTest.java (original)
+++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/SelectorTest.java Mon Mar 17 08:02:10 2008
@@ -47,6 +47,7 @@
         assertEquals( 1234L, counter.get() );
     }
 
+    @SuppressWarnings("unchecked")
     public void testCollectionPath()
         throws Exception
     {
@@ -74,6 +75,7 @@
         assertEquals( "1234", value.toString() );
     }
 
+    @SuppressWarnings("unchecked")
     public void testMultiplePath()
     {
         Repository repository = new DefaultRepository();