Author: ryan
Date: Mon Feb  9 05:09:43 2009
New Revision: 742265

URL: http://svn.apache.org/viewvc?rev=742265&view=rev
Log:
DROIDS-40 -- simple wicket UI to see what is running

Added:
    
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/CollectionDataProvider.java
    
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/WorkBeanDataProvider.java
Modified:
    incubator/droids/trunk/droids-wicket/pom.xml
    
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.html
    
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.java
    
incubator/droids/trunk/droids-wicket/src/main/resources/applicationContext.xml

Modified: incubator/droids/trunk/droids-wicket/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-wicket/pom.xml?rev=742265&r1=742264&r2=742265&view=diff
==============================================================================
--- incubator/droids/trunk/droids-wicket/pom.xml (original)
+++ incubator/droids/trunk/droids-wicket/pom.xml Mon Feb  9 05:09:43 2009
@@ -78,6 +78,19 @@
                        <version>${wicket.version}</version>
                        </dependency>
                -->
+               
+               
+    <!-- UTIL --> 
+    <dependency>
+           <groupId>commons-beanutils</groupId>
+           <artifactId>commons-beanutils</artifactId>
+           <version>1.8.0</version>
+         </dependency> 
+         <dependency>
+           <groupId>commons-lang</groupId>
+           <artifactId>commons-lang</artifactId>
+           <version>2.4</version>
+         </dependency> 
 
                <!-- LOGGING DEPENDENCIES - LOG4J -->
 

Added: 
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/CollectionDataProvider.java
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/CollectionDataProvider.java?rev=742265&view=auto
==============================================================================
--- 
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/CollectionDataProvider.java
 (added)
+++ 
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/CollectionDataProvider.java
 Mon Feb  9 05:09:43 2009
@@ -0,0 +1,101 @@
+package org.apache.droids.wicket.component;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.commons.beanutils.BeanComparator;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortState;
+import 
org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
+import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+public class CollectionDataProvider<T> implements ISortableDataProvider<T> {
+
+  private Collection<T> _values = null;
+  private ISortState _sort = null;
+
+  //---------------------------------------------
+  //---------------------------------------------
+
+  public CollectionDataProvider( Collection<T> values ) {
+    _values = values;
+  }
+  
+  /**
+   * @return a thread safe copy of the values as a List
+   */
+  protected List<T> getValues()
+  {
+    return new ArrayList<T>( _values );
+  }
+
+  @SuppressWarnings("unchecked")
+  public IModel<T> model(final T object) {
+    if( object instanceof Serializable ) {
+      return new Model( (Serializable)object );
+    }
+    return new AbstractReadOnlyModel<T>() {
+      @Override
+      public T getObject() {
+        return object;
+      }
+    };
+  }
+  
+  protected String getDefaultSortProperty() {
+    return null;
+  }
+  
+  //---------------------------------------------
+  //---------------------------------------------
+
+  public void detach() {
+    // nothing....
+  }
+
+  @Override
+  public Iterator<? extends T> iterator(int first, int count) {
+    String sortProperty = getDefaultSortProperty();
+    boolean sortAsc = true;
+    
+    // is there any sorting
+    if (_sort != null) {
+      // ????
+    }
+
+    List<T> values = this.getValues();
+    
+    // perhaps apply a sort...
+    if( sortProperty != null ) {
+      Comparator<T> comparator = new BeanComparator( sortProperty );
+      if( !sortAsc ) {
+        comparator = Collections.reverseOrder( comparator );
+      }
+      Collections.sort( values, comparator );
+    }
+    
+    List<T> sub = values.subList(first, first+count );
+    return sub.iterator();
+  }
+
+  @Override
+  public int size() {
+    return getValues().size();
+  }
+
+  @Override
+  public ISortState getSortState() {
+    return _sort;
+  }
+
+  @Override
+  public void setSortState(ISortState state) {
+    _sort = state;
+  }
+}

Modified: 
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.html
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.html?rev=742265&r1=742264&r2=742265&view=diff
==============================================================================
--- 
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.html
 (original)
+++ 
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.html
 Mon Feb  9 05:09:43 2009
@@ -20,7 +20,6 @@
 
 <div wicket:id="taskMaster">
  <h3>Workers:</h3>
- <!--
  <ul wicket:id="workers">
    <li wicket:id="task">
      [<span wicket:id="time">00,00,10.xx</span>] 
@@ -28,7 +27,6 @@
      <a href="#">[watch]</a>
    </li>
  </ul>
- -->
  <p wicket:id="threads">
      Concurrent threads: <span wicket:id="count">count</span>
  </p>

Modified: 
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.java
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.java?rev=742265&r1=742264&r2=742265&view=diff
==============================================================================
--- 
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.java
 (original)
+++ 
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.java
 Mon Feb  9 05:09:43 2009
@@ -26,9 +26,10 @@
 
 import org.apache.droids.api.Droid;
 import org.apache.droids.api.Task;
-import org.apache.droids.api.TaskMaster;
 import org.apache.droids.api.TaskQueue;
 import org.apache.droids.impl.MultiThreadedTaskMaster;
+import org.apache.droids.monitor.SimpleWorkMonitor;
+import org.apache.droids.monitor.WorkBean;
 import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.extensions.ajax.markup.html.AjaxEditableChoiceLabel;
@@ -37,6 +38,7 @@
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.markup.repeater.RefreshingView;
+import org.apache.wicket.markup.repeater.data.DataView;
 import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.PropertyModel;
@@ -56,7 +58,11 @@
   
   @SpringBean( name="taskMaster" )
   MultiThreadedTaskMaster taskMaster;
+  
+  @SpringBean( name="runningMonitor" )
+  SimpleWorkMonitor monitor;
 
+  
   public DroidPanel(String id) {
     super(id);
 
@@ -128,6 +134,25 @@
     
     // TASK MASTER
     WebMarkupContainer tmDIV = new WebMarkupContainer( "taskMaster" );
+    final WebMarkupContainer workers = new WebMarkupContainer( "workers" );
+    workers.setOutputMarkupId( true );
+    workers.add(new DataView<WorkBean>("task", new WorkBeanDataProvider( 
+        new AbstractReadOnlyModel<SimpleWorkMonitor>() {
+          public SimpleWorkMonitor getObject() {
+            return monitor;
+          }
+    } ) )
+    {
+      @Override
+      protected void populateItem(final Item<WorkBean> item)
+      {
+        WorkBean bean = item.getModelObject();
+        long elapsed = System.currentTimeMillis() - 
bean.getStartTime().getTime();
+        item.add( new Label("time", elapsed+"" )); 
//DurationFormatUtil.formatDurationHMS(elapsed) ) );
+        item.add( new Label("text", bean.getTask().toString() ) );
+      }
+    });
+    tmDIV.add( workers );
     WebMarkupContainer threads = new WebMarkupContainer( "threads" );
     threads.add( new AjaxEditableChoiceLabel<Integer>("count", 
         new PropertyModel<Integer>( taskMaster, "maxThreads" )
@@ -188,6 +213,7 @@
       {
         target.addComponent( info );
         target.addComponent( queueDIV );
+        target.addComponent( workers );
       }
     });
   }

Added: 
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/WorkBeanDataProvider.java
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/WorkBeanDataProvider.java?rev=742265&view=auto
==============================================================================
--- 
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/WorkBeanDataProvider.java
 (added)
+++ 
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/WorkBeanDataProvider.java
 Mon Feb  9 05:09:43 2009
@@ -0,0 +1,64 @@
+package org.apache.droids.wicket.component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.droids.api.Task;
+import org.apache.droids.monitor.SimpleWorkMonitor;
+import org.apache.droids.monitor.WorkBean;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortState;
+import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
+
+public class WorkBeanDataProvider<T extends Task> extends 
CollectionDataProvider<WorkBean<T>> {
+
+  private IModel<SimpleWorkMonitor> monitor;
+  private ISortState _sort = null;
+
+  Map<Task, WorkBean<T>> map = null;
+  List<WorkBean<T>> list = null;
+  
+  //---------------------------------------------
+  //---------------------------------------------
+
+  public WorkBeanDataProvider( IModel<SimpleWorkMonitor> monitor ) {
+    super( null );
+    this.monitor = monitor;
+  }
+  
+  
+  @SuppressWarnings("unchecked")
+  public IModel<WorkBean<T>> model( WorkBean<T> object) {
+    final Task t = object.getTask();
+    return new AbstractReadOnlyModel<WorkBean<T>>() {
+      @Override
+      public WorkBean<T> getObject() {
+        return map.get( t );
+      }
+    };
+  }
+  
+  @Override
+  protected List<WorkBean<T>> getValues()
+  {
+    // Keep a cache of it so we are not missing the ones that get terminated 
+    // between the beginning of the request and the end of the request
+    list = new ArrayList<WorkBean<T>>( monitor.getObject().getRunningTasks() );
+    map = new HashMap<Task, WorkBean<T>>();
+    for( WorkBean<T> bean : list ) {
+      map.put( bean.getTask(), bean );
+    }
+    return list;
+  }
+  
+  //---------------------------------------------
+  //---------------------------------------------
+
+  @Override
+  public void detach() {
+    list = null;
+    map = null;
+  }
+}

Modified: 
incubator/droids/trunk/droids-wicket/src/main/resources/applicationContext.xml
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-wicket/src/main/resources/applicationContext.xml?rev=742265&r1=742264&r2=742265&view=diff
==============================================================================
--- 
incubator/droids/trunk/droids-wicket/src/main/resources/applicationContext.xml 
(original)
+++ 
incubator/droids/trunk/droids-wicket/src/main/resources/applicationContext.xml 
Mon Feb  9 05:09:43 2009
@@ -11,6 +11,9 @@
 
   <!-- setup wicket application -->
   <bean id="wicketApplication" 
class="org.apache.droids.wicket.app.DroidsApplication" />
+
+  
+  <bean id="runningMonitor" 
class="org.apache.droids.monitor.SimpleWorkMonitor" />
 
   <!-- DROIDS -->
   <bean name="taskMaster"
@@ -18,7 +21,8 @@
     <!-- 
     <property name="delayTimer" 
ref="org.apache.droids.delay.SimpleDelayTimer"/>
      -->
-    <property name="maxThreads" value="4"/>
+    <property name="maxThreads" value="1"/>
+    <property name="monitor" ref="runningMonitor"/>
   </bean>
   
   <bean name="taskQueue"


Reply via email to