public static void main(String[] args) throws IOException {
		if (args.length != 4) {
			System.out.println("Usage: <host> <port> <service name> <file>");
			return;
		}
		String host = args[0];
		int port = Integer.parseInt(args[1]);
		String serviceName = args[2];
		BufferedReader in = new BufferedReader(new FileReader(args[3]));

		// get (create) the stub out of ror.
		RMINaming naming = new RMINaming(host, port);
		ZipCodeRList rl;
		try {
			rl = (ZipCodeRList) naming.lookup(serviceName);
		} catch (RemoteException e) {
			System.out.println(e.getMessage());
			in.close();
			return;
		}

		// reads the data and make a "local" zip code list.
		// later this is sent to the server.
		// again no error check!
		ZipCodeList l = null;
		ZipCodeRList rtemp = null;
		boolean flag = true;
		while (flag) {
			String city = in.readLine();
			String code = in.readLine();
			if (city == null)
				flag = false;
			else {
				l = new ZipCodeList(city.trim(), code.trim(), l);
			}
		}
		in.close();
		// the final value of l should be the initial head of
		// the list.

		// we print out the local zipcodelist.
		System.out.println("This is the original list.");
		ZipCodeList temp = l;
		while (temp != null) {
			System.out.println("city: " + temp.city + ", " + "code: "
					+ temp.ZipCode);
			temp = temp.next;
		}

		// test "add".
		System.out.println("testing add.");

		temp = l;
		ZipCodeList l2 = null;
		while (temp != null) {
			String city = temp.city;
			String code = temp.ZipCode;
			l2 = new ZipCodeList(city, code, l2);
			temp = temp.next;
		}

		try {
			temp = l2;
			while (temp != null) {
				rl = rl.add(temp.city, temp.ZipCode);
				temp = temp.next;
			}
		} catch (UndeclaredThrowableException e) {
			System.out.println(e.getCause().getMessage());
			return;
		}
		System.out.println("add tested.");
		// rl should contain the initial head of the list.
		// test "find" and "next" by printing all.
		// This is also the test that "add" performed all right.
		System.out
				.println("\n This is the remote list, printed using find/next.");
		try {
			temp = l;
			rtemp = rl;
			while (temp != null) {
				// here is a test.
				String res = rtemp.find(temp.city);
				System.out
						.println("city: " + temp.city + ", " + "code: " + res);
				temp = temp.next;
				rtemp = rtemp.next();
			}
		} catch (UndeclaredThrowableException e) {
			System.out.println(e.getCause().getMessage());
			return;
		}
	}