Source code for Admin.java
package PhoneApp;
import PhoneApp.Data.*;
import PhoneApp.XML.*;
class Admin {
public Admin() {
book = new Phonebook();
}
public void run() {
boolean continueRunning = true;
while(continueRunning) {
int option = getOption();
switch (option) {
case 0: continueRunning = false; break;
case 1: runAddEntry(); break;
case 2: runAddBatch(); break;
case 3: reportAllEntries(); break;
case 4: runDelete(); break;
case 5: runQuery(); break;
case 6: runUpdate(); break;
default: System.out.println("Unrecognized option. Try again.");
}
}
book.close();
}
public void runAddEntry() {
ConsoleReader console = new ConsoleReader();
console.sendPrompt("Enter new phone entry...");
String firstName = console.getInput("First Name");
String lastName = console.getInput("Last Name");
String phoneNumber = console.getInput("Phone Number");
int streetNumber = -1;
try {
streetNumber = Integer.parseInt(console.getInput("Street Number"));
} catch (Exception e) {
}
String street = console.getInput("Street");
String apartmentNumber = console.getInput("Apartment");
String postalCode = console.getInput("Postal Code");
book.addEntry(firstName, lastName, phoneNumber,
street, streetNumber, apartmentNumber, postalCode);
}
public void runAddBatch() {
String defaultFile = "batchEntries.xml";
ConsoleReader console = new ConsoleReader();
console.sendPrompt("Enter new batch phone list...");
String fileName = console.getInput("XML File Name [" + defaultFile + "]");
if ( fileName.length() <= 0 ) {
fileName = defaultFile;
}
XMLPhoneEntries entryList = new XMLPhoneEntries(fileName);
while (!entryList.empty() ) {
String entryFields[] = (String[])entryList.pop();
book.addEntry(entryFields[0], entryFields[1], entryFields[2],
entryFields[3], Integer.parseInt(entryFields[4]), entryFields[5], entryFields[6]);
}
}
private void runDelete() {
String selectedEntry = queryAndSelect("Entry to delete: ");
if ( selectedEntry != null ) {
boolean success = book.deleteEntry(selectedEntry);
if ( success ) {
System.out.println("Entry deleted.");
}
}
}
private void runQuery() {
ConsoleReader console = new ConsoleReader();
String fieldName = getFieldName("Select field to query");
if ( fieldName.length() > 0 ) {
String fieldValue = console.getInput("Search for");
String[] results = book.queryEntries(fieldName, fieldValue);
System.out.println("");
for (int i=0; i< results.length; i++) {
System.out.println((i+1) + ") " + results[i]);
}
}
}
private void runUpdate() {
ConsoleReader console = new ConsoleReader();
String[] results = book.getEntryReport(Phonebook.DETAILED_REPORT);
System.out.println("Available records:");
String key = queryAndSelect("Record to Update [1-" + results.length + "]");
if ( key.length() > 0 ) {
String fieldName = getFieldName("Select field to update");
String fieldValue = console.getInput("New Value");
book.updateEntry(key,fieldName, fieldValue);
}
}
private String queryAndSelect(String prompt) {
String[] resultKeys = book.getEntryReport(Phonebook.KEY_REPORT);
String[] results = book.getEntryReport(Phonebook.DETAILED_REPORT);
ConsoleReader console = new ConsoleReader();
if ( prompt.length() > 0 ) {
System.out.println(prompt);
}
for (int i=0; i< results.length; i++) {
console.sendPrompt((i+1) + ") " + results[i]);
}
int option = console.getUserNumber("","Entry");
if (option > 0 && option <= results.length) {
return resultKeys[option-1];
} else {
console.sendPrompt("Problem selecting entry " + option);
return null;
}
}
private void reportAllEntries() {
String[] results = book.getEntryReport(Phonebook.DETAILED_REPORT);
for (int i=0; i< results.length; i++) {
System.out.println((i+1) + ") " + results[i]);
}
}
private String getFieldName(String prompt) {
ConsoleReader console = new ConsoleReader();
console.sendPrompt(prompt);
String[] queryFields = book.getQueryableFields();
for (int i=0; i< queryFields.length; i++) {
if ( i != 0 ) { System.out.print(", "); }
console.sendText((i+1) + ") " + queryFields[i]);
}
System.out.println("");
int option = console.getUserNumber("","Choice");
if (option > 0 && option <= queryFields.length) {
return queryFields[option-1];
} else {
console.sendPrompt("Problem selecting entry " + option);
return null;
}
}
private int getOption() {
ConsoleReader console = new ConsoleReader();
String prompt = "\n0: Quit, 1: Add, 2: Upload, 3: Report, 4: Delete, 5: Query, 6: Update";
int optionNumber = console.getUserNumber(prompt, "Choice");
return optionNumber;
}
public static void main (String[] args) {
Admin app = new Admin();
app.run();
}
Phonebook book = null;
}