-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAddressBookDaoFileImpl.java
More file actions
126 lines (107 loc) · 4.01 KB
/
AddressBookDaoFileImpl.java
File metadata and controls
126 lines (107 loc) · 4.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package AddressBook.dao;
import AddressBook.dto.Address;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
/**
*
* @author Kelsey
*/
public class AddressBookDaoFileImpl implements AddressBookDao {
public static final String AddressBook = "address.txt";
public static final String Delimeter = "::";
private void loadAddress() throws AddressBookDaoFileException {
Scanner scan;
try {
scan = new Scanner(new BufferedReader(new FileReader(AddressBook)));
} catch (FileNotFoundException e) {
throw new AddressBookDaoFileException(e.getMessage());
}
String currentLine;
String[] currentToken;
while (scan.hasNext()) {
currentLine = scan.nextLine();
currentToken = currentLine.split(Delimeter);
Address address = new Address(currentToken[0]);
address.setFirstName(currentToken[1]);
address.setLastName(currentToken[2]);
address.setStreet(currentToken[3]);
address.setCity(currentToken[4]);
address.setState(currentToken[5]);
address.setZipCode(currentToken[6]);
addresses.put(address.getAddressId(), address);
}
scan.close();
}
private void writeAddress() throws AddressBookDaoFileException {
PrintWriter out;
try {
out = new PrintWriter(new FileWriter(AddressBook));
} catch (IOException e) {
throw new AddressBookDaoFileException("could not save date to file ", e);
}
List<Address> addressList = this.getAllAddress();
for (Address address : addressList) {
out.println(address.getAddressId() + Delimeter
+ address.getFirstName() + Delimeter
+ address.getLastName() + Delimeter
+ address.getStreet() + Delimeter
+ address.getCity() + Delimeter
+ address.getState() + Delimeter
+ address.getZipCode());
out.flush();
}
out.close();
}
private Map<String, Address> addresses = new HashMap<>();
@Override
public Address addAddress(String addressId, Address address) throws AddressBookDaoFileException{
Address newAddress = addresses.put(addressId, address);
writeAddress();
return newAddress;
}
@Override
public List<Address> getAllAddress() throws AddressBookDaoFileException{
loadAddress();
return new ArrayList<>(addresses.values());
}
@Override
public Address getAddress(String addressId) throws AddressBookDaoFileException{
loadAddress();
return addresses.get(addressId);
}
@Override
public Address editAddress(String addressId, Address newAddress) throws AddressBookDaoFileException{
Address editAddress = addresses.put(addressId, newAddress);
writeAddress();
return editAddress;
}
@Override
public Address searchAddressByLastName(String lastName) throws AddressBookDaoFileException{
// return addresses.get(lastName);
if (addresses.containsValue(lastName)) {
loadAddress();
return addresses.get(lastName);
}
return null;
}
@Override
public Address removedAddress(String addressId) throws AddressBookDaoFileException{
Address removedAddress = addresses.remove(addressId);
writeAddress();
return removedAddress;
}
}