aboutsummaryrefslogtreecommitdiff
path: root/src/com/wilko/jaim/responses/ConfigTocResponse.java
diff options
context:
space:
mode:
authorFrankie B <git@diskfloppy.me>2024-05-10 01:12:35 +0100
committerFrankie B <git@diskfloppy.me>2024-05-10 01:12:35 +0100
commitd73fb78686e827360d90d91483e17c9ebd04e462 (patch)
tree08a85cf2d44c1f24dbcc78a04dda9cb9c5c9a378 /src/com/wilko/jaim/responses/ConfigTocResponse.java
parent2e40faff341fb11f4819c019f046d131529ac4e6 (diff)
Implement remaining client commands, organize into packages
Diffstat (limited to 'src/com/wilko/jaim/responses/ConfigTocResponse.java')
-rw-r--r--src/com/wilko/jaim/responses/ConfigTocResponse.java211
1 files changed, 211 insertions, 0 deletions
diff --git a/src/com/wilko/jaim/responses/ConfigTocResponse.java b/src/com/wilko/jaim/responses/ConfigTocResponse.java
new file mode 100644
index 0000000..dc72488
--- /dev/null
+++ b/src/com/wilko/jaim/responses/ConfigTocResponse.java
@@ -0,0 +1,211 @@
+/*
+ * (C) 2002 Paul Wilkinson wilko@users.sourceforge.net
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+/*
+ * ConfigTocResponse.java
+ * Created on 1, October 2002
+ */
+package com.wilko.jaim.responses;
+
+import com.wilko.jaim.*;
+
+import java.util.*;
+
+/**
+ * A ConfigTocResponse contains the config message received from
+ * the toc server.
+ * This response is handled by the JaimConnection class, but may also be used by client programs.
+ * Once this event has been received, information returned from {@link JaimConnection#getGroups} is valid
+ *
+ * @author Brett Humphreys, Paul Wilkinson
+ */
+public class ConfigTocResponse extends TocResponse implements TocResponseHandler {
+
+ /**
+ * Value for mode that indicates PERMIT ALL mode
+ */
+ public static final int PERMIT_ALL = 1;
+ /**
+ * Value for mode that indicates DENY ALL mode
+ */
+ public static final int DENY_ALL = 2;
+ /**
+ * Value for mode that indicates PERMIT SOME mode
+ */
+ public static final int PERMIT_SOME = 3;
+ /**
+ * Value for mode that indicates DENY SOME mode
+ */
+ public static final int DENY_SOME = 4;
+ public static String RESPONSE_TYPE = "CONFIG";
+ /**
+ * The Vector of Group objects
+ */
+ private final Vector buddyList = new Vector();
+ /**
+ * The HashMap of known buddies
+ */
+ private HashMap buddies;
+ /**
+ * The mode for this configuration
+ */
+ private int mode;
+
+ /**
+ * Returns an Enumeration of groups. Each Entry is a {@link Group}
+ * Each group then has an Enumeration of buddies within that group See {@link Group#enumerateBuddies}.
+ *
+ * @return list of Group elements or an empty list if none are found.
+ */
+ public Enumeration enumerateGroups() {
+ return buddyList.elements();
+ }
+
+ /**
+ * Returns a Collection of groups. Each element is a {@link Group)
+ *
+ * @return the groups
+ */
+ public Collection getGroups() {
+ java.util.Collection result = new Vector(buddyList);
+ return result;
+ }
+
+
+ /**
+ * Get the response type of this response. This method is used by the response dispatcher within JaimConnection
+ *
+ * @return The response type
+ */
+ public String getResponseType() {
+ return RESPONSE_TYPE;
+ }
+
+ /**
+ * Parses the config string.
+ */
+ public TocResponse parseString(String message) {
+ ConfigTocResponse tr = new ConfigTocResponse();
+ tr.doParse(message);
+ return (tr);
+ }
+
+ private void doParse(String message) {
+ cmd = message;
+ int colonIndex = message.indexOf(':');
+ //throw away the first word.
+ message = message.substring(colonIndex + 1);
+ buddies = new HashMap();
+ StringTokenizer tok = new StringTokenizer(message, "\n");
+ String itemType;
+ String itemValue;
+ Group currentGroup = null;
+ Buddy tmpBuddy;
+ while (tok.hasMoreTokens()) {
+ // Can't tokenize on both \n and space since there could be spaces
+ // in the name, so parsing by hand.
+ itemType = tok.nextToken();
+ int firstSpace = itemType.indexOf(' ');
+ itemValue = itemType.substring(firstSpace + 1);
+ itemType = itemType.substring(0, firstSpace);
+
+ char type = itemType.charAt(0);
+ switch (type) {
+ case 'g':
+ currentGroup = new Group(itemValue);
+ buddyList.add(currentGroup);
+ break;
+
+ case 'b':
+
+ tmpBuddy = getBuddy(itemValue);
+ //this shouldn't happen, but:
+ if (currentGroup == null) {
+ currentGroup = new Group("<unknown>");
+ buddyList.add(currentGroup);
+ }
+ currentGroup.addBuddy(tmpBuddy);
+
+
+ break;
+
+ case 'p':
+ tmpBuddy = getBuddy(itemValue);
+ tmpBuddy.setPermit(true);
+ break;
+
+ case 'm':
+ setMode(Integer.valueOf(itemValue).intValue());
+ break;
+
+ case 'd':
+
+ tmpBuddy = getBuddy(itemValue);
+ tmpBuddy.setDeny(true);
+ break;
+ }
+ }
+ }
+
+ /**
+ * Return an existing Buddy with the specified name or return a new buddy if the name is not known
+ * The buddy is added to the buddies hash if it is a new buddy
+ *
+ * @param buddyName The name of the buddy we are looking for
+ * @return The buddy object
+ */
+
+ private Buddy getBuddy(String buddyName) {
+ Buddy retBuddy = (Buddy) buddies.get(buddyName);
+ if (retBuddy == null) {
+ retBuddy = new Buddy(buddyName);
+ buddies.put(buddyName, retBuddy);
+ }
+ return (retBuddy);
+ }
+
+ /**
+ * Gets the mode for this configuration
+ *
+ * @return mode for the configuration
+ */
+ public int getMode() {
+ return mode;
+ }
+
+ /**
+ * Sets the mode for this configuration
+ *
+ * @param modeVal the string value of the mode (1-4)
+ */
+ public void setMode(int modeVal) {
+ mode = modeVal;
+ }
+
+ /**
+ * Returns true if this response handler can handle the specified response.
+ *
+ * @param Response - the response string from TOC. This is the part of the response before the first ':'
+ * @return true if the response can be handled
+ */
+ public boolean canHandle(String Response) {
+ return (Response.equalsIgnoreCase(RESPONSE_TYPE));
+ }
+
+}