You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by ld...@apache.org on 2011/12/14 23:36:55 UTC

svn commit: r1214513 - in /karaf/webconsole/trunk/osgi/src/main: java/org/apache/karaf/webconsole/osgi/internal/event/ java/org/apache/karaf/webconsole/osgi/internal/event/model/ resources/org/apache/karaf/webconsole/osgi/internal/event/

Author: ldywicki
Date: Wed Dec 14 22:36:54 2011
New Revision: 1214513

URL: http://svn.apache.org/viewvc?rev=1214513&view=rev
Log:
Added basic page which shows list of topics which have at least one consumer attached

Signed-off-by: Lukasz Dywicki <lu...@code-house.org>

Added:
    karaf/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/event/model/
    karaf/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/event/model/EventTopicInfo.java
    karaf/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/event/model/EventTopicsProvider.java
Modified:
    karaf/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/event/EventsPage.java
    karaf/webconsole/trunk/osgi/src/main/resources/org/apache/karaf/webconsole/osgi/internal/event/EventsPage.html

Modified: karaf/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/event/EventsPage.java
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/event/EventsPage.java?rev=1214513&r1=1214512&r2=1214513&view=diff
==============================================================================
--- karaf/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/event/EventsPage.java (original)
+++ karaf/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/event/EventsPage.java Wed Dec 14 22:36:54 2011
@@ -16,10 +16,28 @@
  */
 package org.apache.karaf.webconsole.osgi.internal.event;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.karaf.webconsole.core.table.OrdinalColumn;
+import org.apache.karaf.webconsole.core.table.PropertyColumnExt;
 import org.apache.karaf.webconsole.osgi.internal.OsgiPage;
+import org.apache.karaf.webconsole.osgi.internal.event.model.EventTopicInfo;
+import org.apache.karaf.webconsole.osgi.internal.event.model.EventTopicsProvider;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.DefaultDataTable;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
 import org.ops4j.pax.wicket.api.PaxWicketMountPoint;
 
 @PaxWicketMountPoint(mountPoint = "/osgi/event")
 public class EventsPage extends OsgiPage {
 
+    public EventsPage() {
+        List<IColumn<EventTopicInfo>> columns = new ArrayList<IColumn<EventTopicInfo>>();
+        columns.add(new OrdinalColumn<EventTopicInfo>());
+        columns.add(new PropertyColumnExt<EventTopicInfo>("Topic", "topic"));
+        columns.add(new PropertyColumnExt<EventTopicInfo>("Number of consumers", "consumers"));
+
+        add(new DefaultDataTable<EventTopicInfo>("topics", columns, new EventTopicsProvider(context), 100));
+    }
+
 }

Added: karaf/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/event/model/EventTopicInfo.java
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/event/model/EventTopicInfo.java?rev=1214513&view=auto
==============================================================================
--- karaf/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/event/model/EventTopicInfo.java (added)
+++ karaf/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/event/model/EventTopicInfo.java Wed Dec 14 22:36:54 2011
@@ -0,0 +1,26 @@
+package org.apache.karaf.webconsole.osgi.internal.event.model;
+
+import java.io.Serializable;
+
+public class EventTopicInfo implements Serializable {
+
+    private String topic;
+    private int consumers;
+
+    public EventTopicInfo(String topic, int consumers) {
+        this.topic = topic;
+        this.consumers = consumers;
+    }
+
+    public String getTopic() {
+        return topic;
+    }
+
+    public int getConsumers() {
+        return consumers;
+    }
+
+    public void addConsumer() {
+        consumers++;
+    }
+}

Added: karaf/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/event/model/EventTopicsProvider.java
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/event/model/EventTopicsProvider.java?rev=1214513&view=auto
==============================================================================
--- karaf/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/event/model/EventTopicsProvider.java (added)
+++ karaf/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/event/model/EventTopicsProvider.java Wed Dec 14 22:36:54 2011
@@ -0,0 +1,63 @@
+package org.apache.karaf.webconsole.osgi.internal.event.model;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.event.EventConstants;
+import org.osgi.service.event.EventHandler;
+
+public class EventTopicsProvider  extends SortableDataProvider<EventTopicInfo> {
+
+    private Map<String, EventTopicInfo> topics = new HashMap<String, EventTopicInfo>();
+
+    public EventTopicsProvider(BundleContext context) {
+        try {
+            ServiceReference[] references = context.getAllServiceReferences(EventHandler.class.getName(), null);
+            if (references == null) {
+                return;
+            }
+            for (ServiceReference reference : references) {
+                Object topics = reference.getProperty(EventConstants.EVENT_TOPIC);
+                if ("*".equals(topics)) {
+                    // do not track all listeners
+                    continue;
+                } else if (topics instanceof String[]) {
+                    for (String topic : (String[]) topics) {
+                        handleTopic(topic);
+                    }
+                } else if (topics instanceof String) { // then String
+                    handleTopic((String) topics);
+                }
+            }
+        } catch (InvalidSyntaxException e) {
+            e.printStackTrace();
+        }
+    }
+
+    private void handleTopic(String topic) {
+        if (!topics.containsKey(topic)) {
+            topics.put(topic, new EventTopicInfo(topic, 0)); // it will be increased in next line
+        }
+        topics.get(topic).addConsumer();
+    }
+
+    public Iterator<? extends EventTopicInfo> iterator(int first, int count) {
+        return topics.values().iterator();
+    }
+
+    public int size() {
+        return topics.size();
+    }
+
+    public IModel<EventTopicInfo> model(EventTopicInfo object) {
+        return Model.of(object);
+    }
+
+}

Modified: karaf/webconsole/trunk/osgi/src/main/resources/org/apache/karaf/webconsole/osgi/internal/event/EventsPage.html
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/src/main/resources/org/apache/karaf/webconsole/osgi/internal/event/EventsPage.html?rev=1214513&r1=1214512&r2=1214513&view=diff
==============================================================================
--- karaf/webconsole/trunk/osgi/src/main/resources/org/apache/karaf/webconsole/osgi/internal/event/EventsPage.html (original)
+++ karaf/webconsole/trunk/osgi/src/main/resources/org/apache/karaf/webconsole/osgi/internal/event/EventsPage.html Wed Dec 14 22:36:54 2011
@@ -25,10 +25,7 @@
         <wicket:extend>
             <h1>Events</h1>
 
-            <p>
-                Not supported yet.
-            </p>
-
+            <table wicket:id="topics" />
         </wicket:extend>
     </body>
 </html>