summaryrefslogtreecommitdiff
path: root/src/traffic-incidents-service/org.genivi.trafficinfo.dbus-java/src/main/java/org/freedesktop/dbus/DBusMatchRule.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/traffic-incidents-service/org.genivi.trafficinfo.dbus-java/src/main/java/org/freedesktop/dbus/DBusMatchRule.java')
-rwxr-xr-xsrc/traffic-incidents-service/org.genivi.trafficinfo.dbus-java/src/main/java/org/freedesktop/dbus/DBusMatchRule.java143
1 files changed, 143 insertions, 0 deletions
diff --git a/src/traffic-incidents-service/org.genivi.trafficinfo.dbus-java/src/main/java/org/freedesktop/dbus/DBusMatchRule.java b/src/traffic-incidents-service/org.genivi.trafficinfo.dbus-java/src/main/java/org/freedesktop/dbus/DBusMatchRule.java
new file mode 100755
index 0000000..fa1e0ca
--- /dev/null
+++ b/src/traffic-incidents-service/org.genivi.trafficinfo.dbus-java/src/main/java/org/freedesktop/dbus/DBusMatchRule.java
@@ -0,0 +1,143 @@
+/*
+ D-Bus Java Implementation
+ Copyright (c) 2005-2006 Matthew Johnson
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of either the GNU Lesser General Public License Version 2 or the
+ Academic Free Licence Version 2.1.
+
+ Full licence texts are included in the COPYING file with this program.
+*/
+package org.freedesktop.dbus;
+
+import static org.freedesktop.dbus.Gettext._;
+
+import org.freedesktop.dbus.exceptions.DBusException;
+import org.freedesktop.dbus.exceptions.DBusExecutionException;
+
+import java.util.HashMap;
+
+public class DBusMatchRule
+{
+ /* signal, error, method_call, method_reply */
+ private String type;
+ private String iface;
+ private String member;
+ private String object;
+ private String source;
+ private static HashMap<String, Class<? extends DBusSignal>> signalTypeMap =
+ new HashMap<String, Class<? extends DBusSignal>>();
+ static Class<? extends DBusSignal> getCachedSignalType(String type)
+ {
+ return signalTypeMap.get(type);
+ }
+ public DBusMatchRule(String type, String iface, String member)
+ {
+ this.type = type;
+ this.iface = iface;
+ this.member = member;
+ }
+ public DBusMatchRule(DBusExecutionException e) throws DBusException
+ {
+ this(e.getClass());
+ member = null;
+ type = "error";
+ }
+ public DBusMatchRule(Message m)
+ {
+ iface = m.getInterface();
+ member = m.getName();
+ if (m instanceof DBusSignal)
+ type = "signal";
+ else if (m instanceof Error) {
+ type = "error";
+ member = null;
+ }
+ else if (m instanceof MethodCall)
+ type = "method_call";
+ else if (m instanceof MethodReturn)
+ type = "method_reply";
+ }
+ public DBusMatchRule(Class<? extends DBusInterface> c, String method) throws DBusException
+ {
+ this(c);
+ member = method;
+ type = "method_call";
+ }
+ public DBusMatchRule(Class<? extends Object> c, String source, String object) throws DBusException
+ {
+ this(c);
+ this.source = source;
+ this.object = object;
+ }
+ @SuppressWarnings("unchecked")
+ public DBusMatchRule(Class<? extends Object> c) throws DBusException
+ {
+ if (DBusInterface.class.isAssignableFrom(c)) {
+ if (null != c.getAnnotation(DBusInterfaceName.class))
+ iface = c.getAnnotation(DBusInterfaceName.class).value();
+ else
+ iface = AbstractConnection.dollar_pattern.matcher(c.getName()).replaceAll(".");
+ if (!iface.matches(".*\\..*"))
+ throw new DBusException(_("DBusInterfaces must be defined in a package."));
+ member = null;
+ type = null;
+ }
+ else if (DBusSignal.class.isAssignableFrom(c)) {
+ if (null == c.getEnclosingClass())
+ throw new DBusException(_("Signals must be declared as a member of a class implementing DBusInterface which is the member of a package."));
+ else
+ if (null != c.getEnclosingClass().getAnnotation(DBusInterfaceName.class))
+ iface = c.getEnclosingClass().getAnnotation(DBusInterfaceName.class).value();
+ else
+ iface = AbstractConnection.dollar_pattern.matcher(c.getEnclosingClass().getName()).replaceAll(".");
+ // Don't export things which are invalid D-Bus interfaces
+ if (!iface.matches(".*\\..*"))
+ throw new DBusException(_("DBusInterfaces must be defined in a package."));
+ if (c.isAnnotationPresent(DBusMemberName.class))
+ member = c.getAnnotation(DBusMemberName.class).value();
+ else
+ member = c.getSimpleName();
+ signalTypeMap.put(iface+'$'+member, (Class<? extends DBusSignal>) c);
+ type = "signal";
+ }
+ else if (Error.class.isAssignableFrom(c)) {
+ if (null != c.getAnnotation(DBusInterfaceName.class))
+ iface = c.getAnnotation(DBusInterfaceName.class).value();
+ else
+ iface = AbstractConnection.dollar_pattern.matcher(c.getName()).replaceAll(".");
+ if (!iface.matches(".*\\..*"))
+ throw new DBusException(_("DBusInterfaces must be defined in a package."));
+ member = null;
+ type = "error";
+ }
+ else if (DBusExecutionException.class.isAssignableFrom(c)) {
+ if (null != c.getClass().getAnnotation(DBusInterfaceName.class))
+ iface = c.getClass().getAnnotation(DBusInterfaceName.class).value();
+ else
+ iface = AbstractConnection.dollar_pattern.matcher(c.getClass().getName()).replaceAll(".");
+ if (!iface.matches(".*\\..*"))
+ throw new DBusException(_("DBusInterfaces must be defined in a package."));
+ member = null;
+ type = "error";
+ }
+ else
+ throw new DBusException(_("Invalid type for match rule: ")+c);
+ }
+ public String toString()
+ {
+ String s = null;
+ if (null != type) s = null == s ? "type='"+type+"'" : s + ",type='"+type+"'";
+ if (null != member) s = null == s ? "member='"+member+"'" : s + ",member='"+member+"'";
+ if (null != iface) s = null == s ? "interface='"+iface+"'" : s + ",interface='"+iface+"'";
+ if (null != source) s = null == s ? "sender='"+source+"'" : s + ",sender='"+source+"'";
+ if (null != object) s = null == s ? "path='"+object+"'" : s + ",path='"+object+"'";
+ return s;
+ }
+ public String getType() { return type; }
+ public String getInterface() { return iface; }
+ public String getMember() { return member; }
+ public String getSource() { return source; }
+ public String getObject() { return object; }
+
+}