--- /dev/null
+package mit.moira;
+
+public class MoiraConnect {
+ boolean connected = false;
+ boolean isauth = false;
+ Object LOCK;
+
+ String server = "";
+ MoiraConnect() {
+ }
+
+ public MoiraConnect(String server, Object lock) {
+ this.server = server;
+ this.LOCK = lock;
+ }
+
+ public void connect() throws MoiraException {
+ if (!connected) {
+ MoiraConnectInternal.connect(server);
+ connected = true;
+ }
+ }
+
+ public void auth() throws MoiraException {
+ if (!isauth) {
+ synchronized(LOCK) {
+ MoiraConnectInternal.auth();
+ }
+ isauth = true;
+ }
+ }
+
+ public void proxy(String user) throws MoiraException {
+ MoiraConnectInternal.proxy(user);
+ }
+
+ public void disconnect() {
+ if (connected) {
+ MoiraConnectInternal.disconnect();
+ connected = false;
+ isauth = false;
+ }
+ }
+
+ public ListInfo get_list_info(String list) throws MoiraException {
+ if (!connected) throw new MoiraException("Not Connected");
+ String [] args = new String[1];
+ args[0] = list;
+ Object [] retinternal = MoiraConnectInternal.mr_query("get_list_info", args);
+ if (retinternal == null) return (null);
+ if (retinternal.length == 0) return (null);
+ if (retinternal.length != 1) throw new MoiraException("get_list_info returned more then one list!");
+ String [] entry = (String []) retinternal[0];
+ return (new ListInfo(entry[0], entry[1], entry[2], entry[3], entry[4], entry[5], entry[6], entry[7], entry[8], entry[9], entry[10], entry[11], entry[12]));
+ }
+
+ void update_list_info(String list, ListInfo info) throws MoiraException {
+ if (!connected) throw new MoiraException("Not Connected");
+ String [] args = new String[11];
+ args[0] = list;
+ args[1] = info.name;
+ args[2] = info.active ? "1" : "0";
+ args[3] = info.bpublic ? "1" : "0";
+ args[4] = info.hidden ? "1" : "0";
+ args[5] = info.maillist ? "1" : "0";
+ args[6] = info.grouplist ? "1" : "0";
+ args[7] = info.gid_original;
+ args[8] = info.ace_type;
+ args[9] = info.ace_name;
+ args[10] = info.description;
+ Object [] retinternal = MoiraConnectInternal.mr_query("update_list", args);
+ return;
+ }
+
+ void delete_member_from_list(String list, String type, String member) throws MoiraException {
+ if (!connected) throw new MoiraException("Not Connected");
+ String [] args = new String[3];
+ args[0] = list;
+ args[1] = type;
+ args[2] = member;
+ Object [] retinternal = MoiraConnectInternal.mr_query("delete_member_from_list", args);
+ return;
+ }
+
+ void add_member_to_list(String list, String type, String member) throws MoiraException {
+ if (!connected) throw new MoiraException("Not Connected");
+ String [] args = new String[3];
+ args[0] = list;
+ args[1] = type;
+ args[2] = member;
+ Object [] retinternal = MoiraConnectInternal.mr_query("add_member_to_list", args);
+ return;
+ }
+
+ public Member [] get_members_of_list(String list) throws MoiraException {
+ if (!connected) throw new MoiraException("Not Connected");
+ String [] args = new String[1];
+ args[0] = list;
+ Object [] retinternal = MoiraConnectInternal.mr_query("get_members_of_list", args);
+ if (retinternal == null) return (null);
+ Member [] retval = new Member[retinternal.length];
+ for (int i = 0; i < retinternal.length; i++) {
+ String [] entry = (String []) retinternal[i];
+ retval[i] = new Member(entry[0], entry[1]);
+ }
+ return (retval);
+ }
+}
+
+class MoiraConnectInternal {
+ static native void connect(String server) throws MoiraException;
+ static native void auth() throws MoiraException;
+ static native void proxy(String user) throws MoiraException;
+ static native void disconnect();
+ static native Object [] mr_query(String command, String [] args) throws MoiraException;
+ static {
+ System.loadLibrary("moirajava");
+ }
+}