📄 agendaclient.java
字号:
import java.io.*;
import java.rmi.*;
import java.util.*;
/**
* This class implements the AgendaClient
*
* @author
*
*/
public class AgendaClient {
private Agenda agenda;
private String serverName;
private int portNumber;
private String operation;
private String userName;
private String password;
private String attender;
private Calendar startTime;
private Calendar endTime;
private String title;
private int id;
private String[] args;
private static BufferedReader stdIn = new BufferedReader(
new InputStreamReader(System.in));
private static PrintWriter stdOut = new PrintWriter(System.out, true);
/**
* Constructor for menu type of AgdndaClient instance
*
* @param serverNm
* @param portNo
*/
public AgendaClient(String serverNm, int portNo) {
serverName = serverNm;
portNumber = portNo;
}
/**
* Constructor for command line parameters type AgendaClient instance
*
* @param args
*/
public AgendaClient(String[] args) {
this.args = args;
serverName = args[0];
portNumber = Integer.parseInt(args[1]);
operation = args[2];
}
/**
* Register for a new user
*
*/
private void register() {
try {
if (agenda.register(userName, password)) {
stdOut.println("User: " + userName
+ " registered successfully!\n");
} else {
stdOut.println("User: " + userName
+ " registered unsuccessfully! Please try another!\n");
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Registered users may add meetings to their agenda.
*
*/
private void add() {
try {
if (agenda.add(userName, password, attender, startTime, endTime,
title)) {
stdOut.println("New meeting added successfully!\n");
} else {
stdOut
.println("New meeting added unsuccessfully! Please try another!\n");
}
} catch (Exception e) {
stdOut.println(e.getMessage());
}
}
/**
* Registered users may look up all meetings in their agenda in a given
* interval of time.
*
*/
private void query() {
try {
Vector result = agenda
.query(userName, password, startTime, endTime);
if (result.size() > 0) {
for (Iterator it = result.iterator(); it.hasNext();) {
Meeting meeting = (Meeting) it.next();
stdOut.println(meeting);
}
} else {
stdOut.println("No results!\n");
}
} catch (Exception e) {
stdOut.println(e.getMessage());
}
}
/**
* Registered users may delete entries that they have created.
*
*/
private void delete() {
try {
if (agenda.delete(userName, password, id)) {
stdOut.println("Meeting: " + id + " deleted successfully!\n");
} else {
stdOut.println("Could not delete meeting: " + id + "!");
stdOut
.println("Please try a different username or meetingid!\n");
}
} catch (Exception e) {
stdOut.println(e.getMessage());
}
}
/**
* Registered users may clear all meetings they have called.
*
*/
private void clear() {
try {
if (agenda.clear(userName, password)) {
stdOut.println("User: " + userName
+ " has all meetings cleared!\n");
} else {
stdOut.println("Please try a different username!\n");
}
} catch (Exception e) {
stdOut.println(e.getMessage());
}
}
/**
* Judge what kind of operation is input in the command line
*
*/
private void judgeOperation() {
try {
userName = args[3];
password = args[4];
if (operation.equals("register")) {
register();
} else if (operation.equals("add")) {
attender = args[5];
startTime = retrieveTime(args[6]);
endTime = retrieveTime(args[7]);
title = args[8];
add();
} else if (operation.equals("query")) {
startTime = retrieveTime(args[5]);
endTime = retrieveTime(args[6]);
query();
} else if (operation.equals("delete")) {
id = Integer.parseInt(args[5]);
delete();
} else if (operation.equals("clear")) {
clear();
} else {
}
} catch (Exception e) {
stdOut.println("Bad parameters!");
}
}
/**
* Run the Client via command line parameters
*
* @throws IOException
*/
public void runViaParameter() {
try {
agenda = (Agenda) Naming.lookup("rmi://" + serverName + ":"
+ portNumber + "/AgendaService");
} catch (Exception e) {
stdOut.println(e.getMessage());
}
judgeOperation();
}
/**
* Retrieve the factors from the Time
*
* @param time
* @return
* @throws IOException
*/
private Calendar retrieveTime(String time) throws IOException {
int mon = 0;
int day = 0;
int year = 0;
int hour = 0;
int min = 0;
String tempDate, tempTime;
StringTokenizer paramTokenizer, dateTokenizer;
Calendar result = null;
/*
* Tokenize the start_time into date and time based on the '-'
* character.
*/
try {
paramTokenizer = new StringTokenizer(time, "_");
tempDate = paramTokenizer.nextToken();
dateTokenizer = new StringTokenizer(tempDate, "/");
/* Parse out the month, day, and year from the date. */
if (dateTokenizer.countTokens() == 3) {
mon = Integer.parseInt(dateTokenizer.nextToken());
day = Integer.parseInt(dateTokenizer.nextToken());
year = Integer.parseInt(dateTokenizer.nextToken());
} else {
stdOut.println("The time format is wrong;");
stdOut.println("Please input again:");
}
/* Get the time. */
tempTime = paramTokenizer.nextToken();
/* Tokenize the time based on the ':' character. */
dateTokenizer = new StringTokenizer(tempTime, ":");
/* Parse out the hour and minute from the time string. */
if (dateTokenizer.countTokens() == 2) {
hour = Integer.parseInt(dateTokenizer.nextToken());
min = Integer.parseInt(dateTokenizer.nextToken());
} else {
stdOut.println("The time format is wrong;");
stdOut.println("Please input again:");
}
result = new GregorianCalendar(year, mon, day, hour, min);
} catch (Exception e) {
stdOut.println("Bad formate of Date!");
}
return result;
}
/**
* Run the Client via a menu
*
*/
public void runViaMenu() throws IOException {
try {
agenda = (Agenda) Naming.lookup("rmi://" + serverName + ":"
+ portNumber + "/AgendaService");
} catch (Exception e) {
stdOut.println(e.getMessage());
}
while (true) {
System.out.println("================= Menu =================== ");
System.out.println("(1) Register a new user");
System.out.println("(2) Add a meeting");
System.out.println("(3) Query meetings");
System.out.println("(4) Delete a meeting");
System.out.println("(5) Clear meetings");
System.out.println("(6) Quit");
System.out.println("===========================================");
System.out.println("Enter your choice: ");
int choice = 0;
try {
choice = Integer.parseInt(stdIn.readLine());
} catch (Exception e) {
System.out.println("Enter a number between 1 and 6!");
}
switch (choice) {
case 1:
System.out.println("Enter your username:");
userName = stdIn.readLine();
System.out.println("Enter your password:");
password = stdIn.readLine();
register();
break;
case 2:
System.out.println("Enter your username: ");
userName = stdIn.readLine();
System.out.println("Enter your password: ");
password = stdIn.readLine();
System.out.println("Enter your attender's username: ");
attender = stdIn.readLine();
System.out
.println("Enter the start time of the meeting(ie:6/6/2007_10:10)");
startTime = retrieveTime(stdIn.readLine());
System.out
.println("Enter the end time of the meeting(ie:6/6/2007_10:20)");
endTime = retrieveTime(stdIn.readLine());
System.out.println("Enter the meeting title: ");
title = stdIn.readLine();
add();
break;
case 3:
System.out.println("Enter your username: ");
userName = stdIn.readLine();
System.out.println("Enter your password: ");
password = stdIn.readLine();
System.out
.println("Enter the start time of the meeting(ie:6/6/2007_10:10)");
startTime = retrieveTime(stdIn.readLine());
System.out
.println("Enter the end time of the meeting(ie:6/6/2007_10:10)");
endTime = retrieveTime(stdIn.readLine());
query();
break;
case 4:
System.out.println("Enter your username: ");
userName = stdIn.readLine();
System.out.println("Enter your password: ");
password = stdIn.readLine();
System.out.println("Enter the meeting ID: ");
id = Integer.parseInt(stdIn.readLine());
delete();
break;
case 5:
System.out.println("Enter your username: ");
userName = stdIn.readLine();
System.out.println("Enter your password: ");
password = stdIn.readLine();
clear();
break;
default:
return;
}
}
}
/**
* main method
*
* @param args
* @throws IOException
*/
public static void main(String args[]) throws IOException {
if (args.length < 2) {
System.out
.println("Usage: Client <servername> <port> [operation args]");
System.exit(0);
}
if (args.length < 3) {
String serverName = args[0];
int portNum = Integer.parseInt(args[1]);
AgendaClient agendaClient = new AgendaClient(serverName, portNum);
agendaClient.runViaMenu();
} else {
AgendaClient agendaClient = new AgendaClient(args);
agendaClient.runViaParameter();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -