Skip to content
Snippets Groups Projects
Commit 341ffb2f authored by Carsten Stocklöw's avatar Carsten Stocklöw
Browse files

started with panel for bus members

parent 92c270e2
No related branches found
No related tags found
No related merge requests found
Showing
with 1014 additions and 17 deletions
...@@ -16,14 +16,14 @@ ...@@ -16,14 +16,14 @@
<url /> <url />
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.osgi</groupId> <groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId> <artifactId>org.osgi.core</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.osgi</groupId> <groupId>org.osgi</groupId>
<artifactId>org.osgi.compendium</artifactId> <artifactId>org.osgi.compendium</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.universAAL.middleware</groupId> <groupId>org.universAAL.middleware</groupId>
<artifactId>mw.data.representation.osgi</artifactId> <artifactId>mw.data.representation.osgi</artifactId>
...@@ -32,13 +32,23 @@ ...@@ -32,13 +32,23 @@
<groupId>org.universAAL.middleware</groupId> <groupId>org.universAAL.middleware</groupId>
<artifactId>mw.bus.service.osgi</artifactId> <artifactId>mw.bus.service.osgi</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.universAAL.middleware</groupId>
<artifactId>mw.bus.model.osgi</artifactId>
</dependency>
<dependency>
<groupId>org.universAAL.middleware</groupId> <groupId>org.universAAL.middleware</groupId>
<artifactId>mw.container.xfaces.osgi</artifactId> <artifactId>mw.container.xfaces.osgi</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>junit</groupId> <groupId>org.universAAL.middleware</groupId>
<artifactId>junit</artifactId> <artifactId>mw.bus.junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.universAAL.ontology</groupId>
<artifactId>ont.lighting</artifactId>
<version>3.2.1-SNAPSHOT</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
</dependencies> </dependencies>
......
...@@ -30,6 +30,7 @@ public class Activator implements BundleActivator { ...@@ -30,6 +30,7 @@ public class Activator implements BundleActivator {
public static ModuleContext mc; public static ModuleContext mc;
public static BundleContext bc; public static BundleContext bc;
public static MessageContentSerializer contentSerializer = null; public static MessageContentSerializer contentSerializer = null;
public LogMonitor lm;
/** /**
* Start this bundle. This is not done in a separate thread so that we can * Start this bundle. This is not done in a separate thread so that we can
...@@ -40,10 +41,15 @@ public class Activator implements BundleActivator { ...@@ -40,10 +41,15 @@ public class Activator implements BundleActivator {
mc = uAALBundleContainer.THE_CONTAINER mc = uAALBundleContainer.THE_CONTAINER
.registerModule(new Object[] { context }); .registerModule(new Object[] { context });
LogMonitor lm = new LogMonitor(); start();
// context.registerService(new String[] { LogListener.class.getName() },
context.registerService(new String[] { LogListener.class.getName() }, // lm, null);
lm, null); }
public void start() {
lm = new LogMonitor();
mc.getContainer().shareObject(mc, lm,
new Object[] { LogListener.class.getName() });
} }
public void stop(BundleContext arg0) throws Exception { public void stop(BundleContext arg0) throws Exception {
......
...@@ -16,13 +16,14 @@ import org.universAAL.middleware.container.LogListener; ...@@ -16,13 +16,14 @@ import org.universAAL.middleware.container.LogListener;
*/ */
public class LogMonitor implements LogListener { public class LogMonitor implements LogListener {
LogListenerEx listeners[] = new LogListenerEx[3]; LogListenerEx listeners[] = new LogListenerEx[4];
MainGui gui = new MainGui(); MainGui gui = new MainGui();
LogMonitor() { LogMonitor() {
listeners[0] = new org.universAAL.tools.logmonitor.all_log.LogMonitor(); listeners[0] = new org.universAAL.tools.logmonitor.all_log.LogMonitor();
listeners[1] = new org.universAAL.tools.logmonitor.rdfvis.LogMonitor(); listeners[1] = new org.universAAL.tools.logmonitor.rdfvis.LogMonitor();
listeners[2] = new org.universAAL.tools.logmonitor.service_bus_matching.LogMonitor(); listeners[2] = new org.universAAL.tools.logmonitor.service_bus_matching.LogMonitor();
listeners[3] = new org.universAAL.tools.logmonitor.bus_member.LogMonitor();
for (int i = 0; i < listeners.length; i++) for (int i = 0; i < listeners.length; i++)
gui.addPanel(listeners[i].getTitle(), listeners[i].getPanel()); gui.addPanel(listeners[i].getTitle(), listeners[i].getPanel());
......
/*
Copyright 2007-2014 Fraunhofer IGD, http://www.igd.fraunhofer.de
Fraunhofer-Gesellschaft - Institut f�r Graphische Datenverarbeitung
*/
package org.universAAL.tools.logmonitor.bus_member;
import javax.swing.JPanel;
import org.universAAL.middleware.bus.model.AbstractBus;
import org.universAAL.middleware.container.LogListener;
import org.universAAL.tools.logmonitor.LogListenerEx;
import org.universAAL.tools.logmonitor.bus_member.gui.BusMemberGui;
public class LogMonitor implements LogListenerEx {
private BusMemberGui gui = new BusMemberGui();
/*-
* @see org.universAAL.middleware.container.LogListener#log(int,
* java.lang.String, java.lang.String, java.lang.String, java.lang.String,
* java.lang.Object[], java.lang.Throwable)
*/
public void log(int logLevel, String module, String pkg, String cls,
String method, Object[] msgPart, Throwable t) {
if (logLevel == LogListener.LOG_LEVEL_DEBUG) {
System.out.println(module);
// if (!"mw.bus.service.osgi".equals(module))
// return;
String pkg2 = AbstractBus.class.getPackage().getName();
String cls2 = AbstractBus.class.getName().substring(
pkg.length() + 1);
if (!cls2.equals(cls))
return;
if (!pkg2.equals(pkg))
return;
if (msgPart != null && msgPart.length == 2
&& msgPart[1] instanceof String) {
String id = (String) msgPart[1];
if ("register".equals(method))
handleRegister(id);
if ("unregister".equals(method))
handleUnregister(id);
}
}
}
private void handleRegister(String id) {
new MemberData(id).print();
}
private void handleUnregister(String id) {
}
public JPanel getPanel() {
return gui;
}
public String getTitle() {
return "Bus Member";
}
}
package org.universAAL.tools.logmonitor.bus_member;
import org.universAAL.middleware.bus.member.BusMemberType;
import org.universAAL.middleware.bus.model.AbstractBus;
public class MemberData {
public String id;
public String space;
public String peer;
public String module;
public String type;
public MemberData(String id) {
this.id = id;
String s = id;
int idx = id.lastIndexOf('#');
s = id.substring(0, idx);
if (s.startsWith(AbstractBus.uAAL_OPTIONAL_URI_PREFIX))
s = s.substring(AbstractBus.uAAL_OPTIONAL_URI_PREFIX.length());
int idx2 = s.lastIndexOf('/');
space = s.substring(0, idx2);
peer = s.substring(idx2 + 1);
s = id.substring(idx);
idx2 = s.indexOf('.');
module = s.substring(idx2 + 1);
s = s.substring(1, idx2);
System.out.println("--s: " + s);
for (BusMemberType t : BusMemberType.values()) {
if (s.endsWith(t.name()))
type = t.name();
}
}
public void print() {
System.out.println("---- MemberData");
System.out.println(" ID: " + id);
System.out.println(" space: " + space);
System.out.println(" peer: " + peer);
System.out.println(" module: " + module);
System.out.println(" type: " + type);
}
}
\ No newline at end of file
/*
Copyright 2007-2014 Fraunhofer IGD, http://www.igd.fraunhofer.de
Fraunhofer-Gesellschaft - Institut f�r Graphische Datenverarbeitung
*/
package org.universAAL.tools.logmonitor.bus_member.gui;
import java.awt.BorderLayout;
import java.util.Iterator;
import java.util.LinkedList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import org.universAAL.tools.logmonitor.service_bus_matching.LogMonitor;
import org.universAAL.tools.logmonitor.service_bus_matching.Matchmaking;
import org.universAAL.tools.logmonitor.service_bus_matching.URI;
import org.universAAL.tools.logmonitor.service_bus_matching.Matchmaking.SingleMatching;
/**
* The main frame.
*
* @author cstockloew
*
*/
public class BusMemberGui extends JPanel implements ListSelectionListener {
private static final long serialVersionUID = 1L;
/**
* The graphics panel where the content is drawn.
*/
BusMemberPane pane = new BusMemberPane();
/**
* The table containing a list of all messages.
*/
JTable table;
/**
* Create the main frame.
*/
public BusMemberGui() {
this.setLayout(new BorderLayout());
// Message overview
DefaultTableModel model = new DefaultTableModel();
model.addColumn("Time");
model.addColumn("Request");
model.addColumn("Matches");
model.addColumn("Result");
table = new JTable(model);
table.getSelectionModel().addListSelectionListener(this);
// overall view
JScrollPane scrollPaneLeft = new JScrollPane(table);
JScrollPane scrollPaneRight = new JScrollPane(pane);
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
scrollPaneLeft, scrollPaneRight);
splitPane.setDividerLocation(0.4);
add(splitPane, BorderLayout.CENTER);
}
/**
* Called whenever the value of the selection in the table showing the list
* of all messages changes.
*
* @param e
* The event that characterizes the change.
*/
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
int viewRow = table.getSelectedRow();
if (viewRow >= 0) {
Matchmaking m = LogMonitor.instance.getMatchmaking(viewRow);
// Matchmaking m = new Matchmaking();
// m.serviceURI = "serviceURI";
// m.numMatches = 0;
// m.date = new Date();
pane.show(m);
pane.setSelectionStart(0);
pane.setSelectionEnd(0);
}
}
}
/**
* Add a new entry.
*
* @param m
* The matchmaking.
*/
public void notify(Matchmaking m) {
// add entry to table
DefaultTableModel model = (DefaultTableModel) table.getModel();
String result = "<unknown>";
if (m.success != null) {
if (m.success.booleanValue()) {
if (m.numMatches == 1) {
// if we have only one match, print the URI of that match
result = "1 match";
LinkedList<SingleMatching> l = m.matchings;
for (Iterator<SingleMatching> it = l.iterator(); it
.hasNext();) {
SingleMatching s = (SingleMatching) it.next();
if (s.success.booleanValue()) {
result = URI.get(s.profileURI, true);
break;
}
}
} else
result = m.numMatches + " matches";
} else
result = "- no_match -";
}
model.addRow(new Object[] { m.getDateString(),
URI.get(m.serviceURI, true), "" + m.numMatches, result });
// if this is the first entry: show in panel
// if (model.getRowCount() == 1) {
// model.setsel
// panel.show(m);
// }
}
}
/*
Copyright 2007-2014 Fraunhofer IGD, http://www.igd.fraunhofer.de
Fraunhofer-Gesellschaft - Institut f�r Graphische Datenverarbeitung
*/
package org.universAAL.tools.logmonitor.bus_member.gui;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import javax.swing.JTextPane;
import javax.swing.KeyStroke;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.text.DefaultCaret;
import org.universAAL.middleware.owl.OntClassInfo;
import org.universAAL.middleware.owl.OntologyManagement;
import org.universAAL.middleware.rdf.PropertyPath;
import org.universAAL.middleware.rdf.Resource;
import org.universAAL.middleware.service.ServiceRequest;
import org.universAAL.middleware.service.owl.Service;
import org.universAAL.middleware.service.owls.process.OutputBinding;
import org.universAAL.middleware.service.owls.process.ProcessEffect;
import org.universAAL.middleware.service.owls.process.ProcessInput;
import org.universAAL.middleware.service.owls.profile.ServiceProfile;
import org.universAAL.tools.logmonitor.Activator;
import org.universAAL.tools.logmonitor.service_bus_matching.LogMonitor;
import org.universAAL.tools.logmonitor.service_bus_matching.Matchmaking;
import org.universAAL.tools.logmonitor.service_bus_matching.URI;
import org.universAAL.tools.logmonitor.service_bus_matching.LogMonitor.ProfileInfo;
import org.universAAL.tools.logmonitor.service_bus_matching.Matchmaking.SingleMatching;
import org.universAAL.tools.logmonitor.util.ClipboardHandling;
public class BusMemberPane extends JTextPane {
private static final long serialVersionUID = 1L;
private boolean all = false;
/**
* Defines how the overview will look like: 0 means that the results are
* grouped according to the service provider, 1 means no grouping
*/
public int overviewMethod = 0;
private HashMap<String, String> urlReplacement = new HashMap<String, String>();
// Storage visible objects; objects that are not visible, are not
// contained in this table. The value is ignored, only the key is used.
private Hashtable<String, String> visible = new Hashtable<String, String>();
private Matchmaking currentMatch = null;
// private Sparul sparul = new Sparul();
private class HTMLListener implements HyperlinkListener {
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
String link = e.getDescription();
togglevisibility(link);
// test: print content of system clipboard
// Clipboard systemClipboard;
// systemClipboard = Toolkit.getDefaultToolkit()
// .getSystemClipboard();
// printClipboardContent(systemClipboard);
setText(createHTML(currentMatch));
}
}
}
public BusMemberPane() {
setEditable(false);
setContentType("text/html");
addHyperlinkListener(new HTMLListener());
setCaret(new DefaultCaret());
((DefaultCaret) getCaret()).setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
// overwrite ctrl-c
final BusMemberPane pane = this;
getInputMap()
.put(KeyStroke.getKeyStroke(KeyEvent.VK_C,
InputEvent.CTRL_DOWN_MASK), "uaal_copy");
getActionMap().put(
"uaal_copy",
new ClipboardHandling(urlReplacement, getTransferHandler(),
pane));
}
public void show(Matchmaking m) {
currentMatch = m;
all = false;
visible.clear();
setText(createHTML(m));
}
private boolean isVisible(String uri) {
if (all)
return true;
Object o = visible.get(uri);
if (o == null)
return false;
else
return true;
}
private void makeVisible(String uri) {
visible.put(uri, uri);
}
private void makeInvisible(String uri) {
visible.remove(uri);
}
private void togglevisibility(String uri) {
if ("all".equals(uri)) {
if (all)
visible.clear();
all = !all;
} else if (visible.get(uri) != null)
makeInvisible(uri);
else
makeVisible(uri);
}
private URL getURL(String filename) {
return Activator.getResource(filename);
}
private String getImageHTML(String name) {
String filename = "/img/" + name;
URL url = getURL(filename);
urlReplacement.put(url.toString(),
"http://depot.universaal.org/images/LogMonitor/" + name);
return "<img src=\"" + url.toString() + "\">";
}
private String getURIHTML(String uri) {
int idx = uri.lastIndexOf('#');
if (idx == -1)
return uri;
String start = uri.substring(0, idx + 1);
String end = uri.substring(idx + 1);
return start + "<b>" + end + "</b>";
}
private String getOutputHTML(Resource output) {
StringBuilder s = new StringBuilder("");
Object form = output
.getProperty(OutputBinding.PROP_OWLS_BINDING_VALUE_FORM);
s.append("output:");
s.append(getTableStartHTML());
s.append(getTableRowHTML("parameter binding:",
getURIHTML(((Resource) output
.getProperty(OutputBinding.PROP_OWLS_BINDING_TO_PARAM))
.getURI())));
if (form == null)
s.append(getTableRowHTML("--",
"- unknown value, perhaps a unit conversion? -"));
else
s.append(getTableRowHTML("at the property path:",
getPropPathHTML((PropertyPath) form, false)));
s.append(getTableEndHTML());
return s.toString();
}
private String getEffectHTML(Resource effect) {
StringBuilder s = new StringBuilder("");
String type = effect.getType();
if (ProcessEffect.TYPE_PROCESS_ADD_EFFECT.equals(type)) {
s.append("Add effect:");
s.append(getTableStartHTML());
s.append(getTableRowHTML(
"add the value:",
effect.getProperty(
ProcessEffect.PROP_PROCESS_PROPERTY_VALUE)
.toString()));
s.append(getTableRowHTML(
"to the property path:",
getPropPathHTML(
(PropertyPath) effect
.getProperty(ProcessEffect.PROP_PROCESS_AFFECTED_PROPERTY),
false)));
s.append(getTableEndHTML());
} else if (ProcessEffect.TYPE_PROCESS_CHANGE_EFFECT.equals(type)) {
s.append("Change effect:");
s.append(getTableStartHTML());
s.append(getTableRowHTML("change the value to:", effect
.getProperty(ProcessEffect.PROP_PROCESS_PROPERTY_VALUE)
.toString()));
s.append(getTableRowHTML(
"at property path:",
getPropPathHTML(
(PropertyPath) effect
.getProperty(ProcessEffect.PROP_PROCESS_AFFECTED_PROPERTY),
false)));
s.append(getTableEndHTML());
} else if (ProcessEffect.TYPE_PROCESS_REMOVE_EFFECT.equals(type)) {
s.append("Remove effect:");
s.append(getTableStartHTML());
s.append(getTableRowHTML(
"at property path:",
getPropPathHTML(
(PropertyPath) effect
.getProperty(ProcessEffect.PROP_PROCESS_AFFECTED_PROPERTY),
false)));
s.append(getTableEndHTML());
}
return s.toString();
}
private String getTableStartHTML() {
return getTableStartHTML(0);
}
private String getTableStartHTML(int border) {
return "<table border=\"0\"><tr><td width=\"20\"></td><td>"
+ "<table valign=\"top\" border=\"" + border + "\">\n";
}
private String getTableRowHTML(String val1) {
return "<tr><td>" + val1 + "</td></tr>\n";
}
private String getTableRowHTML(String val1, int colspan) {
return "<tr><td colspan=\"" + colspan + "\" bgcolor=\"#EEEEEE\">"
+ val1 + "</td></tr>\n";
}
private String getTableRowHTML(String val1, String val2) {
return "<tr><td>" + val1 + "</td><td>" + val2 + "</td></tr>\n";
}
private String getTableRowHTML(String val1, String val2, String val3) {
return "<tr>\n <td>" + val1 + "</td>\n <td>" + val2 + "</td>\n <td>"
+ val3 + "</td>\n</tr>\n";
}
private String getTableRowTitleHTML(String val1, String val2, String val3) {
return "<tr>\n <td bgcolor=\"#DDDDDD\">" + val1
+ "</td>\n <td bgcolor=\"#DDDDDD\">" + val2
+ "</td>\n <td bgcolor=\"#DDDDDD\">" + val3 + "</td>\n</tr>\n";
}
private String getTableEndHTML() {
return "</table></td></tr></table>\n";
}
private String getPropPathHTML(PropertyPath path, boolean shortForm) {
String s = "";
if (path == null)
return s;
String[] p = path.getThePath();
for (int i = 0; i < p.length; i++) {
s += getURIHTML(URI.get(p[i], shortForm));
if (i < p.length - 1)
s += "<br>";
}
return s;
}
private String getLinkHTML(String link, String text) {
return "<a href=\"" + link + "\">" + text + "</a>\n";
}
private String turtle2HTML(String serialized) {
return serialized.replaceAll("<", "&lt;").replaceAll(">", "&gt;");
}
private void getRestrictionsHTML(StringBuilder s, List<?> res) {
s.append("<br>\n- TODO ;-) but there are restrictions..<br>\n");
}
private HashSet<String> getNamedSuperClasses(Resource r) {
HashSet<String> classes = new HashSet<String>();
String types[] = r.getTypes();
for (int i = 0; i < types.length; i++) {
String type = types[i];
classes.add(type);
OntClassInfo info = OntologyManagement.getInstance()
.getOntClassInfo(type);
if (info != null) {
String superTypes[] = info.getNamedSuperClasses(true, false);
for (int j = 0; j < superTypes.length; j++)
classes.add(superTypes[j]);
}
}
return classes;
}
private void getProfileRequestCommonHTML(StringBuilder s,
Resource[] effects, Resource[] outputs) {
// get common parts of service profile and service request as HTML
int i;
s.append("<b>Effects:</b>");
if (effects.length == 0) {
s.append(" <i>no effects defined</i><br>\n");
} else {
s.append("<br>\n");
for (i = 0; i < effects.length; i++)
s.append(getEffectHTML(effects[i]));
s.append("<br>\n");
}
s.append("<b>Outputs:</b>");
if (outputs.length == 0) {
s.append(" <i>no outputs defined</i><br>\n");
} else {
s.append("<br>\n");
for (i = 0; i < outputs.length; i++)
s.append(getOutputHTML(outputs[i]));
s.append("<br>\n");
}
}
private void getServiceProfileHTML(StringBuilder s, ServiceProfile prof) {
// get service profile in an abstract view
s.append("<b>Service profile:</b> ");
s.append(getURIHTML(prof.getTheService().getURI()));
s.append("<br><b>Service ontology class hierarchy:</b> ");
s.append(getTableStartHTML());
HashSet<String> types = getNamedSuperClasses(prof.getTheService());
for (Iterator<String> i = types.iterator(); i.hasNext();)
s.append(getTableRowHTML(i.next()));
s.append(getTableEndHTML());
s.append("<br>\n");
s.append("<b>Inputs:</b>");
Iterator<?> it = prof.getInputs();
if (!it.hasNext()) {
s.append(" <i>no inputs defined</i><br>\n");
} else {
s.append("<br>\n");
while (it.hasNext()) {
ProcessInput in = (ProcessInput) it.next();
s.append("input:");
s.append(getTableStartHTML());
s.append(getTableRowHTML("URI:", in.getURI()));
String type = in.getParameterType();
s.append(getTableRowHTML("type:", type));
int minCard = in.getMinCardinality();
int maxCard = in.getMaxCardinality();
if (minCard == maxCard)
s.append(getTableRowHTML("exact cardinality:", "" + maxCard));
else {
s.append(getTableRowHTML("min cardinality:", "" + minCard));
s.append(getTableRowHTML("max cardinality:", "" + maxCard));
}
s.append(getTableEndHTML());
}
s.append("<br>\n");
}
Resource[] effects = prof.getEffects();
Resource[] outputs = prof.getOutputBindings();
getProfileRequestCommonHTML(s, effects, outputs);
}
private void getServiceRequestHTML(StringBuilder s, Matchmaking m) {
// get service request in an abstract view
ServiceRequest req = m.request;
s.append("<b>Requested service:</b> ");
s.append(getURIHTML(m.serviceURI));
s.append("<br><b>Filtering input:</b>");
Object o = req.getRequestedService().getProperty(
Service.PROP_INSTANCE_LEVEL_RESTRICTIONS);
if (o instanceof List<?>) {
getRestrictionsHTML(s, (List<?>) o);
} else
s.append(" <i>no filtering input defined</i><br>\n");
Resource effects[] = req.getRequiredEffects();
Resource outputs[] = req.getRequiredOutputs();
getProfileRequestCommonHTML(s, effects, outputs);
}
private void getOverviewHTML(StringBuilder s, List<SingleMatching> group) {
for (Iterator<SingleMatching> it = group.iterator(); it.hasNext();) {
SingleMatching single = it.next();
String val2 = "-";
switch (single.reason) {
case SingleMatching.REASON_INPUT:
val2 = "<i>input</i>";
break;
case SingleMatching.REASON_OUTPUT:
val2 = "<i>output</i>";
break;
case SingleMatching.REASON_EFFECT:
val2 = "<i>effect</i>";
break;
}
String val3 = getURIHTML(single.profileURI);
if (single.success.booleanValue())
s.append(getTableRowHTML(getImageHTML("OK_16.png"), val2, val3));
else
s.append(getTableRowHTML(getImageHTML("ERROR_16.png"), val2,
val3));
}
}
private String createHTML(Matchmaking m) {
ProfileInfo info;
LinkedList<SingleMatching> l = new LinkedList<SingleMatching>();
StringBuilder s = new StringBuilder(
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"><html><body>\n");
s.append("<h1>Results of Matchmaking process</h1>\n");
if (m.success.booleanValue())
s.append(getImageHTML("OK_32.png"));
else
s.append(getImageHTML("ERROR_32.png"));
s.append("Service request: <b>" + m.serviceURI + "</b><br>");
// ///////////////////////////////////////
// overview of matchings
s.append("<br><br>Matching with registered service profiles:<br>");
if (m.registeredServicesAvailable) {
s.append(getTableStartHTML(1));
s.append(getTableRowTitleHTML("Result", "Reason", "Service URI"));
if (overviewMethod == 0) {
l = m.matchings;
HashMap<String, ArrayList<SingleMatching>> groups = new HashMap<String, ArrayList<SingleMatching>>();
// create the grouping
for (SingleMatching single : l) {
info = LogMonitor.instance.getProfile(single.profileURI);
String providerURI = "<unknown>";
if (!(info == null) && !(info.profileProviderURI == null))
providerURI = info.profileProviderURI;
ArrayList<SingleMatching> group = groups.get(providerURI);
if (group == null) {
group = new ArrayList<SingleMatching>();
groups.put(providerURI, group);
}
group.add(single);
}
// get a sorted set of provider URIs
ArrayList<String> sortedProviderURIs = new ArrayList<String>(
groups.keySet());
Collections.sort(sortedProviderURIs);
// we clear the list and add all elements again in a sorted
// order
l.clear();
// get the html output
for (String providerURI : sortedProviderURIs) {
ArrayList<SingleMatching> group = groups.get(providerURI);
Collections.sort(group, new Comparator<SingleMatching>() {
public int compare(SingleMatching o1, SingleMatching o2) {
return o1.profileURI.compareTo(o2.profileURI);
}
});
s.append(getTableRowHTML("Provider: "
+ getURIHTML(providerURI), 3));
getOverviewHTML(s, group);
l.addAll(group);
}
} else {
l = m.matchings;
getOverviewHTML(s, l);
}
s.append(getTableEndHTML());
} else {
s.append(" - no services are registered for the requested URI -<br>");
}
// details
s.append("<br>");
s.append(getLinkHTML("all", isVisible("all") ? "hide all" : "show all"));
s.append("<br><br>");
// ///////////////////////////////////////
// details for request
s.append("Request: ");
// details for request: serialized
if (isVisible("requestSerialized")) {
s.append(getLinkHTML("requestSerialized", "hide serialized"));
s.append("<pre>\n" + turtle2HTML(m.serializedRequest)
+ "\n</pre>\n");
} else {
s.append(getLinkHTML("requestSerialized", "show serialized"));
}
// details for request: abstract
if (isVisible("requestAbstract")) {
s.append(getLinkHTML("requestAbstract", "hide abstract<br><br>\n"));
getServiceRequestHTML(s, m);
} else {
s.append(getLinkHTML("requestAbstract", "show abstract"));
}
// details for request: query
// if (isVisible("requestQuery")) {
// s.append(getLink("requestQuery", "hide query"));
// s.append("<pre>\n" + sparul.getSparul(m.request) + "\n</pre>\n");
// } else {
// s.append(getLink("requestQuery", "show query (experimentel)"));
// }
if (m.registeredServicesAvailable) {
// ///////////////////////////////////////
// details for each matchmaking
for (Iterator<SingleMatching> it = l.iterator(); it.hasNext();) {
SingleMatching single = it.next();
s.append("<hr><h2>Details for "
+ URI.get(single.profileURI, true) + "</h2>\n\n");
if (single.success.booleanValue()) {
s.append(getImageHTML("OK_16.png") + "&#160;&#160;");
s.append("successful");
} else {
s.append(getImageHTML("ERROR_16.png") + "&#160;&#160;");
switch (single.reason) {
case SingleMatching.REASON_INPUT:
if (!single.isOffer) {
String prop = single.restrictedProperty;
if (prop == null)
s.append(" input: number of input parameters do not match");
else
s.append(" input: input parameters do not match for property "
+ getURIHTML(prop));
s.append("<br>\n");
}
s.append(" input: ");
s.append(single.code);
s.append(" - ");
s.append(single.shortReason);
s.append("<br>\n<i>Details:</i> ");
s.append(single.detailedReason);
s.append("<br>\n");
break;
case SingleMatching.REASON_OUTPUT:
s.append(" output: ");
s.append(single.code);
s.append(" - ");
s.append(single.shortReason);
s.append("<br>\n<i>Details:</i> ");
s.append(single.detailedReason);
s.append("<br>\n");
if (single.output != null)
s.append(getOutputHTML(single.output));
else
System.out.println("ERROR: no output found");
break;
case SingleMatching.REASON_EFFECT:
s.append(" effect: ");
s.append(single.code);
s.append(" - ");
s.append(single.shortReason);
s.append("<br>\n<i>Details:</i> ");
s.append(single.detailedReason);
s.append("<br>\n");
s.append("<br>\n");
if (single.effect != null)
s.append(getEffectHTML(single.effect));
break;
default:
s.append("reason unknown");
}
}
s.append("<br>\n");
s.append("ServiceProfile: ");
info = LogMonitor.instance.getProfile(single.profileURI);
if (info == null || info.profile == null)
s.append("- unknown -<br>\n");
else {
ServiceProfile profile = info.profile;
String link = "ServiceProfile_" + single.profileURI;
String link_abstract = link + "_abstract";
String link_serialized = link + "_serialized";
// ServiceProfile serialized
if (isVisible(link_serialized)) {
s.append(getLinkHTML(link_serialized, "hide serialized"));
if (info.serialized == null) // create on first use
info.serialized = Activator.serialize(profile);
s.append("<pre>\n" + turtle2HTML(info.serialized)
+ "\n</pre>\n");
} else {
s.append(getLinkHTML(link_serialized, "show serialized"));
}
// ServiceProfile abstract
if (isVisible(link_abstract)) {
s.append(getLinkHTML(link_abstract,
"hide abstract<br><br>\n"));
getServiceProfileHTML(s, profile);
} else {
s.append(getLinkHTML(link_abstract, "show abstract"));
}
}
}
// ///////////////////////////////////////
// filtering : Provider
s.append("<hr><h2>Provider filtering</h2><p>The list of services is filtered,"
+ " so that only <i>one</i> service for a service provider is taken."
+ " If more than one service matches for a provider then the"
+ " most specialized service is taken.</p>\n<p>The number of matching"
+ " services is:</p>\n");
s.append(getTableStartHTML(0));
s.append(getTableRowHTML("before provider filtering:", ""
+ m.numMatchingProfiles));
s.append(getTableRowHTML("after provider filtering:", ""
+ m.numMatchingAfterProviderFilter));
s.append(getTableEndHTML());
s.append("<br>The matched profiles and their provider filtering results are:<br>\n");
s.append(getTableStartHTML(0));
for (SingleMatching single : l) {
if (single.success.booleanValue()) {
String profileURI = single.profileURI;
String res = m.matchingsProvFilt.contains(profileURI) ? "OK_16.png"
: "ERROR_16.png";
s.append(getTableRowHTML(getImageHTML(res),
getURIHTML(profileURI)));
}
}
s.append(getTableEndHTML());
/*
* s.append(getTableStartHTML(0)); for (SingleMatching single : l) {
* if (single.success.booleanValue()) {
* s.append(getTableRowHTML(single.profileURI)); } }
* s.append(getTableEndHTML());
*
* s.append("\n<p>The following " + m.numMatchingAfterProviderFilter
* + " services have are available after filtering:</p>\n");
*
* s.append(getTableStartHTML(0)); for (String srvURI :
* m.matchingsProvFilt) { s.append(getTableRowHTML(srvURI)); }
* s.append(getTableEndHTML());
*/
}
s.append("\n</body></html>");
// System.out.println(s);
return s.toString();
}
}
...@@ -39,6 +39,7 @@ import org.universAAL.tools.logmonitor.service_bus_matching.Matchmaking; ...@@ -39,6 +39,7 @@ import org.universAAL.tools.logmonitor.service_bus_matching.Matchmaking;
import org.universAAL.tools.logmonitor.service_bus_matching.URI; import org.universAAL.tools.logmonitor.service_bus_matching.URI;
import org.universAAL.tools.logmonitor.service_bus_matching.LogMonitor.ProfileInfo; import org.universAAL.tools.logmonitor.service_bus_matching.LogMonitor.ProfileInfo;
import org.universAAL.tools.logmonitor.service_bus_matching.Matchmaking.SingleMatching; import org.universAAL.tools.logmonitor.service_bus_matching.Matchmaking.SingleMatching;
import org.universAAL.tools.logmonitor.util.ClipboardHandling;
public class MatchmakingPane extends JTextPane { public class MatchmakingPane extends JTextPane {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
Copyright 2007-2014 Fraunhofer IGD, http://www.igd.fraunhofer.de Copyright 2007-2014 Fraunhofer IGD, http://www.igd.fraunhofer.de
Fraunhofer-Gesellschaft - Institut f�r Graphische Datenverarbeitung Fraunhofer-Gesellschaft - Institut f�r Graphische Datenverarbeitung
*/ */
package org.universAAL.tools.logmonitor.service_bus_matching.gui; package org.universAAL.tools.logmonitor.util;
import java.awt.Toolkit; import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.Clipboard;
......
package org.universAAL.tools.logmonitor.test;
import org.universAAL.middleware.bus.junit.BusTestCase;
import org.universAAL.middleware.bus.permission.AccessControl;
import org.universAAL.middleware.container.utils.LogUtils;
import org.universAAL.middleware.owl.OntologyManagement;
import org.universAAL.middleware.service.DefaultServiceCaller;
import org.universAAL.ontology.lighting.LightingOntology;
import org.universAAL.ontology.location.LocationOntology;
import org.universAAL.ontology.phThing.PhThingOntology;
import org.universAAL.ontology.shape.ShapeOntology;
import org.universAAL.tools.logmonitor.Activator;
import org.universAAL.container.JUnit.JUnitContainer;
import org.universAAL.container.JUnit.JUnitModuleContext;
import org.universAAL.container.JUnit.JUnitModuleContext.LogLevel;
public class Test extends BusTestCase {
static boolean isSetUp = false;
static DefaultServiceCaller caller;
public void tearDown() {
// don't do anything here so we don't have to set up again
// while (true) {
// try {
// Thread.sleep(100);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
}
public void setUp() throws Exception {
if (isSetUp)
return;
super.setUp();
isSetUp = true;
OntologyManagement.getInstance().register(mc, new LocationOntology());
OntologyManagement.getInstance().register(mc, new ShapeOntology());
OntologyManagement.getInstance().register(mc, new PhThingOntology());
OntologyManagement.getInstance().register(mc, new LightingOntology());
mc.setAttribute(AccessControl.PROP_MODE, "none");
mc.setAttribute(AccessControl.PROP_MODE_UPDATE, "always");
Activator.mc = mc;
((JUnitModuleContext) mc).setLogLevel(LogLevel.DEBUG);
Activator a = new Activator();
a.start();
((JUnitContainer)mc.getContainer()).registerLogListeners(a.lm);
}
public void testAddScript() {
LogUtils.logDebug(mc, this.getClass(), "method", "msg");
caller = new DefaultServiceCaller(mc);
caller.close();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment