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 <l...@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>