The makeGuest is working fine, probably because the data is fine. If the
constructor of Guest throws a DataException, though, I wouldn't want
makeGuest to return a new Guest! I'm not quite sure what it should do,
if not that, though...
Should I try makeGuest first? Would it make sense to have a tryMakeGuest
() method?
thufir@arrakis:~/bcit-comp2611-project1$
thufir@arrakis:~/bcit-comp2611-project1$
thufir@arrakis:~/bcit-comp2611-project1$ cat src/a00720398/util/
FileUtil.java
/**
* FileUtil.java
*/
package a00720398.util;
import java.util.*;
import java.io.*;
import a00720398.data.*;
public abstract class FileUtil {
public static Guest makeGuest(List<String> guestData)throws
DataException{
try{
String[] data = guestData.toArray(new String
[guestData.size()]);
Guest guest = new Guest(data);
return guest;
} catch (DataException e) {
e.printStackTrace();
}
return new Guest();
}
public static List<Guest> loadGuests(){
List<Guest> guests = new ArrayList<Guest>();
File file = new File("Guests.txt");
try {
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
List<String> guestData = new
ArrayList<String>();
String line = scanner.nextLine();
Scanner lineScanner = new Scanner(line);
lineScanner.useDelimiter("\t");
while (lineScanner.hasNext()) {
String part = lineScanner.next();
guestData.add(part);
if (!lineScanner.hasNext()) {
try{
Guest guest =
makeGuest(guestData);
guests.add(guest);
} catch (DataException e){
e.printStackTrace
();
}
}
}
}
}catch (FileNotFoundException e) {
e.printStackTrace();
}
return guests;
}
}
thufir@arrakis:~/bcit-comp2611-project1$
Knute Johnson - 09 May 2008 06:04 GMT
> The makeGuest is working fine, probably because the data is fine. If the
> constructor of Guest throws a DataException, though, I wouldn't want
[quoted text clipped - 69 lines]
> }
> thufir@arrakis:~/bcit-comp2611-project1$
Just re-throw the exception.

Signature
Knute Johnson
email s/nospam/linux/
thufir - 09 May 2008 10:31 GMT
[...]
> Just re-throw the exception.
Let's say Guest throws a DataException to FileUtils.newGuest(), which
then throws that DataException to FileUtils.loadGuest(), which means that
loadGuest() needs to try newGuest() ?
If I'm misunderstanding how it's should work, or the standard approach,
please let me know.
thufir@arrakis:~/bcit-comp2611-project1$
thufir@arrakis:~/bcit-comp2611-project1$ cat src/a00720398/util/
FileUtil.java
/**
* FileUtil.java
*/
package a00720398.util;
import java.util.*;
import java.io.*;
import a00720398.data.*;
public abstract class FileUtil {
public static List<String> parseGuestString (String string){
System.out.println("\n\n\n********\n");
List<String> guestData = new ArrayList<String>();
Scanner lineScanner = new Scanner(string);
while (lineScanner.hasNext()){
String token = lineScanner.next();
guestData.add(token);
System.out.println("\n\ntoken\t\t" + token);
}
return guestData;
}
public static Guest newGuest(String string) {
List<String> guestData = parseGuestString(string);
// try {
Guest guest = new Guest(guestData);
return guest;
// catch (Exception e) {
// e.printStackTrace();
// }
// return new Guest();
}
public static List<Guest> loadGuests(File file){
List<Guest> guests = new ArrayList<Guest>();
try {
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
Scanner lineScanner = new Scanner(line);
lineScanner.useDelimiter("\n");
while (lineScanner.hasNextLine()) {
String oneLine = lineScanner.next
();
Guest guest = newGuest(oneLine);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return guests;
}
}
thufir@arrakis:~/bcit-comp2611-project1$
thufir@arrakis:~/bcit-comp2611-project1$ cat src/a00720398/data/Guest.java
package a00720398.data;
import java.util.*;
import a00720398.data.*;
import a00720398.util.*;
public class Guest {
private int id = 0;
private String
lastName = "foo",
firstName = "foo",
phoneNumber = "foo",
emailAddress = "foo@bar.com";
private Address address;
public Guest() {}
public Guest(List<String> data)/* throws DataException */ {
// if (data.size() != 5){throw new DataException("expected 5
elements, got:\t\t" + data.size());}
// try {
id = Integer.parseInt(data.get(0).trim());
// } catch (Exception e) { //what kind of Exception is this?
// e.printStackTrace();
// throw new DataException(e.getMessage());
// }
lastName = data.get(1);
}
public int getID
()
{return id;}
//private setID(int
id) {this.id =
id;} //never change an ID
public String getLastName
() {return
lastName;}
public void setLastName(String
lastName) {this.lastName = lastName;}
public String getFirstName
() {return
firstName;}
public void setFirstName(String firstName)
{this.firstName = firstName;}
public Address getAddress
() {return
address;}
public void setAddress(Address address)
{this.address = address;}
public String getPhoneNumber
() {return phoneNumber;}
public void setPhoneNumber(String phoneNumber)
{this.phoneNumber = phoneNumber;}
public String getEmailAddress
() {return emailAddress;}
public void setEmailAddress(String emailAddress)
{this.emailAddress = emailAddress;}
public String toString (){
return
"\n\n\nGUEST RECORD\n" + "-----------\n" +
"\nid:\t\t" + getID() +
"\nfirst name:\t" + getFirstName() +
"\nlast name:\t" + getLastName() +
"\nemail address:\t" + getEmailAddress() +
address.toString();
}
}
thufir@arrakis:~/bcit-comp2611-project1$
thufir@arrakis:~/bcit-comp2611-project1$
thanks,
Thufir
Knute Johnson - 09 May 2008 17:15 GMT
> [...]
>> Just re-throw the exception.
[quoted text clipped - 156 lines]
>
> Thufir
If you have say three nested method calls, one(), two() and three() and
all of them throw an exception. You can as Daniel said, only catch it
in the top level call or if you need to do some processing at the lower
level but still want to propagate the exception you can throw it again
or throw a new exception.
public void one() throws Exception {
two();
}
public void two() throws Exception {
try {
one();
} catch (Exception e) {
// error processing here
throw new Exception();
}
}
public void three() throws Exception {
throw new Exception();
}
try {
one();
} catch (Exception e) {
}

Signature
Knute Johnson
email s/nospam/linux/
------->>>>>>http://www.NewsDem
Daniel Pitts - 09 May 2008 15:55 GMT
> The makeGuest is working fine, probably because the data is fine. If the
> constructor of Guest throws a DataException, though, I wouldn't want
[quoted text clipped - 3 lines]
> Should I try makeGuest first? Would it make sense to have a tryMakeGuest
> () method?
Just don't catch the exception in makeGuest. Let it propagate up to
whoever calls makeGuest.
> thufir@arrakis:~/bcit-comp2611-project1$
> thufir@arrakis:~/bcit-comp2611-project1$
[quoted text clipped - 61 lines]
> }
> thufir@arrakis:~/bcit-comp2611-project1$

Signature
Daniel Pitts' Tech Blog: <http://virtualinfinity.net/wordpress/>
thufir - 10 May 2008 08:13 GMT
>> The makeGuest is working fine, probably because the data is fine. If
>> the constructor of Guest throws a DataException, though, I wouldn't
[quoted text clipped - 5 lines]
> Just don't catch the exception in makeGuest. Let it propagate up to
> whoever calls makeGuest.
I'll take another look at it, but I think that I was getting a compile
error, uncaught exception, when I tried that.
-Thufir
Lew - 10 May 2008 13:24 GMT
>>> The makeGuest is working fine, probably because the data is fine. If
>>> the constructor of Guest throws a DataException, though, I wouldn't
[quoted text clipped - 8 lines]
> I'll take another look at it, but I think that I was getting a compile
> error, uncaught exception, when I tried that.
Sounds like the exception was not caught by the invoker of the method, then.
The method itself has to declare any checked exceptions it throws, or the
rethrow will fail.

Signature
Lew
Roedy Green - 10 May 2008 14:03 GMT
>The makeGuest is working fine, probably because the data is fine. If the
>constructor of Guest throws a DataException, though, I wouldn't want
>makeGuest to return a new Guest! I'm not quite sure what it should do,
>if not that, though...
If you do something like
Thing thing = new Thing();
And the constructor throws an exception, thing will be unmodified
since the assigment is the last step.

Signature
Roedy Green Canadian Mind Products
The Java Glossary
http://mindprod.com
Lew - 10 May 2008 14:52 GMT
>> The makeGuest is working fine, probably because the data is fine. If the
>> constructor of Guest throws a DataException, though, I wouldn't want
[quoted text clipped - 7 lines]
> And the constructor throws an exception, thing will be unmodified
> since the assigment is the last step.
In this particular case, 'thing' will fall out of scope; there won't be a
'thing' to be unmodified.
This scope vs. exception tension occurs often in making connections or
grabbing other resources, for example.
import some.version.of.Resource;
Resource res = null;
try
{
res = getResource();
}
catch ( SomeException exc )
{
handle( exc );
// for some reason we want to continue
}
...
// time to close
if ( res != null )
{
res.close();
res = null;
}

Signature
Lew