-
Notifications
You must be signed in to change notification settings - Fork 0
/
User.java
285 lines (278 loc) · 9.41 KB
/
User.java
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
import java.io.*;
import com.opencsv.CSVReader;
import javafx.collections.*;
import java.net.*;
import java.util.*;
import java.util.Random;
/**
* Represents a logged in user in the system
* Has favourite properties which can be
* added/deleted/updated in the file
* Can add properties to the file
*/
public class User
{
// instance variables - replace the example below with your own
private String username, password;
private ArrayList<AirbnbListing> favourites;
private int maxSize;
/**
* Constructor for objects of class User
* @param username The name of the user
* @param password The password of the user
*/
public User(String username, String password)
{
this.username = username;
this.password = password;
favourites = new ArrayList();
maxSize = 10;
}
/**
* Adds a listing to the list of favourites
*
* @param listing The listing to add
*/
public void addFavourite(AirbnbListing listing)
{
if (!(favourites.contains(listing))) //f it isnt already in
{
if (favourites.size() <= maxSize)
{
favourites.add(listing);
System.out.println(favourites.size());
}
}
}
/**
* Remove a listing from the favourites
*
* @param THe listing to remove
*/
public void removeFavourite(String listingName)
{
AirbnbListing remove = null; //The listing to remove
//Checks the favourite for the listing
for (AirbnbListing listing:favourites)
{
if (listing.getName().equals(listingName))
{
remove = listing;
}
}
//If the listing is found, it is removed
if (remove != null)
{
favourites.remove(remove);
}
}
/**
* Saves the favourites ot the user file
*/
public void saveFavourites()
{
try{
URL url = getClass().getResource("users.csv");
CSVReader reader = new CSVReader(new FileReader(new File(url.toURI()).getAbsolutePath()));
String [] line;
ArrayList<String[]> lines = new ArrayList();
int numID = 0;
//Copies all the users into an Array List
while ((line = reader.readNext()) != null) {
if (line != null)
{
lines.add(line);
}
}
//Writes all the users back into the file
try (FileWriter writer = new FileWriter("users.csv",false))
{
for (String[] currLine : lines)
{
StringBuilder sb = new StringBuilder();
if (currLine != null)
{
//If the current line is the users entry
//Update the file with the listings
//Otherwise copy the original line from file
if (!currLine[0].equals(username))
{
for (String elem: currLine)
{
sb.append(elem + ',');
}
}
else
{
sb.append(currLine[0] + ',' + currLine[1] + ',');
for (AirbnbListing list : favourites)
{
sb.append(list.getId() + ',');
}
}
sb.append('\n');
writer.write(sb.toString());
}
}
}
catch (FileNotFoundException e)
{
System.out.println(e.getMessage());
}
}
catch(IOException | URISyntaxException e){
System.out.println("Something went wrong");
e.printStackTrace();
}
}
/**
* Adds a listing the user would like to add, to the file
* The parameters are the fields stored about the listing
* @return String shows if the function was successful or not
*/
public String addListing(
String propName, String name, String neighbourhood,String latitude,
String longitude,String type,String price,String minNights,
String availability)
{
String returnString = "";
try{
URL url = getClass().getResource("airbnb-london.csv");
CSVReader reader = new CSVReader(new FileReader(new File(url.toURI()).getAbsolutePath()));
String [] line;
ArrayList<String> listingIDs = new ArrayList<String>();
//Adds all the IDs to a list
while ((line = reader.readNext()) != null) {
listingIDs.add(line[0]);
}
Random rand = new Random();
Boolean taken = true;
String newID = "";
//Generates a random ID, checking if it is already taken
while (taken)
{
newID = "u" + (100+rand.nextInt(9999999));
taken = false;
for (String entry: listingIDs)
{
if (newID == entry)
{
taken = true;
}
}
}
//Writes all the information to the file.
try (FileWriter writer = new FileWriter("airbnb-london.csv",true))
{
StringBuilder sb = new StringBuilder();
sb.append(newID + ',');
sb.append(propName + ',');
sb.append(username + ',');
sb.append(name + ',');
sb.append(neighbourhood + ',');
sb.append(latitude + ',');
sb.append(longitude + ',');
sb.append(type + ',');
sb.append(price + ',');
sb.append(minNights + ',');
sb.append("" + ',' +"" + ',' +"" + ',' +"" + ',');
sb.append(availability + ',');
sb.append('\n');
writer.write(sb.toString());
updateListings(username);
returnString = "Listing added : ";
//Updates the return text
if (propName.length() > 12)
{
returnString += propName.substring(0,12) + "...";
}
else
{
returnString += propName;
}
}
catch (FileNotFoundException e)
{
System.out.println(e.getMessage());
}
}
catch(IOException | URISyntaxException e){
System.out.println("Something went wrong");
e.printStackTrace();
}
return returnString;
}
/**
* Goes through the listings and updates the field which stores
* how many listings each user has added
*
* @param id The id/username of the user
*/
private void updateListings(String id)
{
try{
URL url = getClass().getResource("airbnb-london.csv");
CSVReader reader = new CSVReader(new FileReader(new File(url.toURI()).getAbsolutePath()));
String [] line;
ArrayList<String[]> lines = new ArrayList();
int numID = 0;
//Checks all the lines in the files and every time
//a Listing created by the user occurs, increase
//a counter. Copy the lines into an arraylist
while ((line = reader.readNext()) != null) {
lines.add(line);
if (line[2].equals(id))
{
numID ++;
}
}
//for each listing, change the field where the id matches
for (String[] currLine : lines)
{
if (currLine[2].equals(id))
{
currLine[13] = numID+"";
}
}
//Write the array list back into the file
try (FileWriter writer = new FileWriter("airbnb-london.csv",false))
{
StringBuilder sb;
for (String[] currLine : lines)
{
sb = new StringBuilder();
for (int i=0;i<currLine.length;i++)
{
//Gets rid of any forbidden characters
currLine[i] = currLine[i].replaceAll(","," ");
currLine[i] = currLine[i].replaceAll(";"," ");
currLine[i] = currLine[i].replaceAll("\""," ");
sb.append(currLine[i] + ',');
}
sb.append('\n');
writer.write(sb.toString());
}
}
}
catch(IOException | URISyntaxException e){
System.out.println("Something went wrong");
e.printStackTrace();
}
}
/**
* Accessor method which returns the array list of favourites
* @return favourites An ArrayList of favourites
*/
public ArrayList<AirbnbListing> getFavourites()
{
return favourites;
}
/**
* Accessor which returns the user's name
* @return username The name of the user
*/
public String getName()
{
return username;
}
}