User.java
package com.openclassrooms.tourguide.user;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import gpsUtil.location.VisitedLocation;
import tripPricer.Provider;
public class User {
private final UUID userId;
private final String userName;
private String phoneNumber;
private String emailAddress;
private Date latestLocationTimestamp;
private List<VisitedLocation> visitedLocations = new CopyOnWriteArrayList<>();
private final List<UserReward> userRewards = new CopyOnWriteArrayList<>();
private UserPreferences userPreferences = new UserPreferences();
private List<Provider> tripDeals = new CopyOnWriteArrayList<>();
public User(UUID userId, String userName, String phoneNumber, String emailAddress) {
this.userId = userId;
this.userName = userName;
this.phoneNumber = phoneNumber;
this.emailAddress = emailAddress;
}
public UUID getUserId() {
return userId;
}
public String getUserName() {
return userName;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;
}
public String getEmailAddress() {
return emailAddress;
}
public void setLatestLocationTimestamp(Date latestLocationTimestamp) {
this.latestLocationTimestamp = latestLocationTimestamp;
}
public Date getLatestLocationTimestamp() {
return latestLocationTimestamp;
}
public void addToVisitedLocations(VisitedLocation visitedLocation) {
visitedLocations.add(visitedLocation);
}
public List<VisitedLocation> getVisitedLocations() {
return visitedLocations;
}
public VisitedLocation getLastVisitedLocations() {
return visitedLocations.isEmpty() ? null : visitedLocations.get(visitedLocations.size() - 1);
}
public void clearVisitedLocations() {
visitedLocations.clear();
visitedLocations = new CopyOnWriteArrayList<>();
}
private final Set<String> rewardedAttractions = ConcurrentHashMap.newKeySet();
public void addUserReward(UserReward userReward) {
if (rewardedAttractions.add(userReward.attraction.attractionName)) {
userRewards.add(userReward);
}
}
public List<UserReward> getUserRewards() {
return userRewards;
}
public UserPreferences getUserPreferences() {
return userPreferences;
}
public void setUserPreferences(UserPreferences userPreferences) {
this.userPreferences = userPreferences;
}
public VisitedLocation getLastVisitedLocation() {
return visitedLocations.get(visitedLocations.size() - 1);
}
public void setTripDeals(List<Provider> tripDeals) {
this.tripDeals = tripDeals;
}
public List<Provider> getTripDeals() {
return tripDeals;
}
}