/* 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.test; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeSet; import java.util.Set; import java.util.Vector; import org.freedesktop.DBus; import org.freedesktop.dbus.DBusConnection; import org.freedesktop.dbus.DBusSigHandler; import org.freedesktop.dbus.UInt16; import org.freedesktop.dbus.UInt32; import org.freedesktop.dbus.UInt64; import org.freedesktop.dbus.Variant; import org.freedesktop.dbus.exceptions.DBusException; import org.freedesktop.dbus.exceptions.DBusExecutionException; public class cross_test_server implements DBus.Binding.Tests, DBus.Binding.SingleTests, DBusSigHandler<DBus.Binding.TestClient.Trigger> { private DBusConnection conn; boolean run = true; private Set<String> done = new TreeSet<String>(); private Set<String> notdone = new TreeSet<String>(); { notdone.add("org.freedesktop.DBus.Binding.Tests.Identity"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityByte"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityBool"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityInt16"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityUInt16"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityInt32"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityUInt32"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityInt64"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityUInt64"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityDouble"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityString"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityArray"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityByteArray"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityBoolArray"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityInt16Array"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityUInt16Array"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityInt32Array"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityUInt32Array"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityInt64Array"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityUInt64Array"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityDoubleArray"); notdone.add("org.freedesktop.DBus.Binding.Tests.IdentityStringArray"); notdone.add("org.freedesktop.DBus.Binding.Tests.Sum"); notdone.add("org.freedesktop.DBus.Binding.SingleTests.Sum"); notdone.add("org.freedesktop.DBus.Binding.Tests.InvertMapping"); notdone.add("org.freedesktop.DBus.Binding.Tests.DeStruct"); notdone.add("org.freedesktop.DBus.Binding.Tests.Primitize"); notdone.add("org.freedesktop.DBus.Binding.Tests.Invert"); notdone.add("org.freedesktop.DBus.Binding.Tests.Trigger"); notdone.add("org.freedesktop.DBus.Binding.Tests.Exit"); notdone.add("org.freedesktop.DBus.Binding.TestClient.Trigger"); } public cross_test_server(DBusConnection conn) { this.conn = conn; } public boolean isRemote() { return false; } @SuppressWarnings("unchecked") @DBus.Description("Returns whatever it is passed") public <T> Variant<T> Identity(Variant<T> input) { done.add("org.freedesktop.DBus.Binding.Tests.Identity"); notdone.remove("org.freedesktop.DBus.Binding.Tests.Identity"); return new Variant(input.getValue()); } @DBus.Description("Returns whatever it is passed") public byte IdentityByte(byte input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityByte"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityByte"); return input; } @DBus.Description("Returns whatever it is passed") public boolean IdentityBool(boolean input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityBool"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityBool"); return input; } @DBus.Description("Returns whatever it is passed") public short IdentityInt16(short input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityInt16"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityInt16"); return input; } @DBus.Description("Returns whatever it is passed") public UInt16 IdentityUInt16(UInt16 input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityUInt16"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityUInt16"); return input; } @DBus.Description("Returns whatever it is passed") public int IdentityInt32(int input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityInt32"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityInt32"); return input; } @DBus.Description("Returns whatever it is passed") public UInt32 IdentityUInt32(UInt32 input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityUInt32"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityUInt32"); return input; } @DBus.Description("Returns whatever it is passed") public long IdentityInt64(long input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityInt64"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityInt64"); return input; } @DBus.Description("Returns whatever it is passed") public UInt64 IdentityUInt64(UInt64 input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityUInt64"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityUInt64"); return input; } @DBus.Description("Returns whatever it is passed") public double IdentityDouble(double input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityDouble"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityDouble"); return input; } @DBus.Description("Returns whatever it is passed") public String IdentityString(String input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityString"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityString"); return input; } @DBus.Description("Returns whatever it is passed") public <T> Variant<T>[] IdentityArray(Variant<T>[] input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityArray"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityArray"); return input; } @DBus.Description("Returns whatever it is passed") public byte[] IdentityByteArray(byte[] input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityByteArray"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityByteArray"); return input; } @DBus.Description("Returns whatever it is passed") public boolean[] IdentityBoolArray(boolean[] input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityBoolArray"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityBoolArray"); return input; } @DBus.Description("Returns whatever it is passed") public short[] IdentityInt16Array(short[] input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityInt16Array"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityInt16Array"); return input; } @DBus.Description("Returns whatever it is passed") public UInt16[] IdentityUInt16Array(UInt16[] input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityUInt16Array"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityUInt16Array"); return input; } @DBus.Description("Returns whatever it is passed") public int[] IdentityInt32Array(int[] input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityInt32Array"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityInt32Array"); return input; } @DBus.Description("Returns whatever it is passed") public UInt32[] IdentityUInt32Array(UInt32[] input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityUInt32Array"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityUInt32Array"); return input; } @DBus.Description("Returns whatever it is passed") public long[] IdentityInt64Array(long[] input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityInt64Array"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityInt64Array"); return input; } @DBus.Description("Returns whatever it is passed") public UInt64[] IdentityUInt64Array(UInt64[] input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityUInt64Array"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityUInt64Array"); return input; } @DBus.Description("Returns whatever it is passed") public double[] IdentityDoubleArray(double[] input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityDoubleArray"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityDoubleArray"); return input; } @DBus.Description("Returns whatever it is passed") public String[] IdentityStringArray(String[] input) { done.add("org.freedesktop.DBus.Binding.Tests.IdentityStringArray"); notdone.remove("org.freedesktop.DBus.Binding.Tests.IdentityStringArray"); return input; } @DBus.Description("Returns the sum of the values in the input list") public long Sum(int[] a) { done.add("org.freedesktop.DBus.Binding.Tests.Sum"); notdone.remove("org.freedesktop.DBus.Binding.Tests.Sum"); long sum = 0; for (int b: a) sum += b; return sum; } @DBus.Description("Returns the sum of the values in the input list") public UInt32 Sum(byte[] a) { done.add("org.freedesktop.DBus.Binding.SingleTests.Sum"); notdone.remove("org.freedesktop.DBus.Binding.SingleTests.Sum"); int sum = 0; for (byte b: a) sum += (b < 0 ? b+256 : b); return new UInt32(sum % (UInt32.MAX_VALUE+1)); } @DBus.Description("Given a map of A => B, should return a map of B => a list of all the As which mapped to B") public Map<String, List<String>> InvertMapping(Map<String, String> a) { done.add("org.freedesktop.DBus.Binding.Tests.InvertMapping"); notdone.remove("org.freedesktop.DBus.Binding.Tests.InvertMapping"); HashMap<String, List<String>> m = new HashMap<String, List<String>>(); for (String s: a.keySet()) { String b = a.get(s); List<String> l = m.get(b); if (null == l) { l = new Vector<String>(); m.put(b, l); } l.add(s); } return m; } @DBus.Description("This method returns the contents of a struct as separate values") public DBus.Binding.Triplet<String,UInt32,Short> DeStruct(DBus.Binding.TestStruct a) { done.add("org.freedesktop.DBus.Binding.Tests.DeStruct"); notdone.remove("org.freedesktop.DBus.Binding.Tests.DeStruct"); return new DBus.Binding.Triplet<String,UInt32,Short>(a.a, a.b, a.c); } @DBus.Description("Given any compound type as a variant, return all the primitive types recursively contained within as an array of variants") @SuppressWarnings("unchecked") public List<Variant<Object>> Primitize(Variant<Object> a) { done.add("org.freedesktop.DBus.Binding.Tests.Primitize"); notdone.remove("org.freedesktop.DBus.Binding.Tests.Primitize"); return cross_test_client.PrimitizeRecurse(a.getValue(), a.getType()); } @DBus.Description("inverts it's input") public boolean Invert(boolean a) { done.add("org.freedesktop.DBus.Binding.Tests.Invert"); notdone.remove("org.freedesktop.DBus.Binding.Tests.Invert"); return !a; } @DBus.Description("triggers sending of a signal from the supplied object with the given parameter") public void Trigger(String a, UInt64 b) { done.add("org.freedesktop.DBus.Binding.Tests.Trigger"); notdone.remove("org.freedesktop.DBus.Binding.Tests.Trigger"); try { conn.sendSignal(new DBus.Binding.TestSignals.Triggered(a, b)); } catch (DBusException DBe) { throw new DBusExecutionException(DBe.getMessage()); } } public void Exit() { done.add("org.freedesktop.DBus.Binding.Tests.Exit"); notdone.remove("org.freedesktop.DBus.Binding.Tests.Exit"); run = false; synchronized (this) { notifyAll(); } } public void handle(DBus.Binding.TestClient.Trigger t) { done.add("org.freedesktop.DBus.Binding.TestClient.Trigger"); notdone.remove("org.freedesktop.DBus.Binding.TestClient.Trigger"); try { DBus.Binding.TestClient cb = conn.getRemoteObject(t.getSource(), "/Test", DBus.Binding.TestClient.class); cb.Response(t.a, t.b); } catch (DBusException DBe) { throw new DBusExecutionException(DBe.getMessage()); } } public static void main(String[] args) { try { DBusConnection conn = DBusConnection.getConnection(DBusConnection.SESSION); conn.requestBusName("org.freedesktop.DBus.Binding.TestServer"); cross_test_server cts = new cross_test_server(conn); conn.addSigHandler(DBus.Binding.TestClient.Trigger.class, cts); conn.exportObject("/Test", cts); synchronized (cts) { while (cts.run) { try { cts.wait(); } catch (InterruptedException Ie) {} } } for (String s: cts.done) System.out.println(s+" ok"); for (String s: cts.notdone) System.out.println(s+" untested"); conn.disconnect(); System.exit(0); } catch (DBusException DBe) { DBe.printStackTrace(); System.exit(1); }} }