-
Notifications
You must be signed in to change notification settings - Fork 0
/
Unit.java
167 lines (148 loc) · 4.23 KB
/
Unit.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
package PropertyFinder;
import java.util.ArrayList;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
/**
* @author Team Dolphin (Liam Diaz and Sincere Dixon)
* Contains data and methods relating to an individual unit listing
*/
public class Unit {
private String addressModifier;
private int capacity;
public ArrayList<String> renters;
private ArrayList<Review> reviews;
/**
* Parameterized constructor for Unit
*
* @param addressModifier The addressModifier for Unit (e.g. apartment number)
* @param capacity The maximum capacity of the Unit
*/
public Unit(String addressModifier, int capacity) {
this.addressModifier = addressModifier;
this.capacity = capacity;
renters = new ArrayList<String>();
reviews = new ArrayList<Review>();
}
/**
*
* @param renter The username of the renter
*/
public void addUnitRenter(String renter) {
if (isAvailable()) {
renters.add(renter);
} else {
System.out.println("ERROR: Property already at maximum capacity!");
}
}
/**
*
* @param renter The username of the renter
*/
public void removeUnitRenter(String renter) {
renters.remove(renter);
}
/**
* Creates and adds a Review object to reviews
*
* @param rating The rating of the Review (out of 10)
* @param title The title of the Review
* @param description The description for the Review
* @param author The username of the Account that made the Review
*/
public void addReview(int rating, String title, String description, String author) {
reviews.add(new Review(rating, title, description, author));
}
/**
* Returns the average rating of all Review objects in reviews
*
* @return The average rating
*/
public int getAverageRating() {
int averageRating = 0;
for (Review review : reviews) {
averageRating += review.getRating();
}
if (reviews.size() > 0) {
averageRating /= reviews.size();
}
return averageRating;
}
/**
* Returns whether or not this Unit is available to rent
*
* @return Whether or not this Unit is available to rent
*/
public boolean isAvailable() {
return renters.size() < capacity;
}
/**
* Returns the addressModifier for this Unit
*
* @return addressModifier
*/
public String getAddressModifier() {
return addressModifier;
}
/**
* Updates addressModifier
*
* @param addressModifier The new addressModifier
*/
public void updateAddressModifier(String addressModifier) {
this.addressModifier = addressModifier;
}
/**
* Updates the new maximum capacity for this Unit
*
* @param capacity The new maximum capacity
*/
public void updateCapacity(int capacity) {
this.capacity = capacity;
if(!isAvailable()){
System.out.println("Error: There too many renters for this capacity, adjusting " +
"capacity to fit.");
this.capacity = renters.size();
}
}
/**
* Returns a description of this Unit as a String
*
* @return The description of this Unit
*/
public String toString(String address) {
String output = "";
output = output.concat("\n\t" + address + " " + addressModifier);
output = output.concat("\n\tMaximum capacity: " + capacity);
output = output.concat("\n\tRenters:");
for (String renter : renters) {
output = output.concat("\n\t - " + renter);
}
output = output.concat("\n\tAverage rating: " + getAverageRating());
output = output.concat("\n\tReviews:");
for (Review review : reviews) {
output = output.concat(review.toString().replaceAll("\n", "\n\t"));
}
return output;
}
/**
* Returns the contents of this Unit in the JSON format
*
* @return The contents of this Unit
*/
public JSONObject toJSON() {
JSONObject unit = new JSONObject();
unit.put("address modifier", addressModifier);
unit.put("capacity", capacity);
JSONArray renterArray = new JSONArray();
for (String renter : renters) {
renterArray.add(renter);
}
JSONArray reviewArray = new JSONArray();
for (Review review : reviews) {
reviewArray.add(review.toJSON());
}
unit.put("renters", renterArray);
unit.put("reviews", reviewArray);
return unit;
}
}