User.java
package com.openclassrooms.tourguide.user;
import java.util.*;
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 ArrayList<>();
private UserPreferences userPreferences = new UserPreferences();
private List<Provider> tripDeals = new ArrayList<>();
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 void clearVisitedLocations() {
visitedLocations.clear();
}
public synchronized void addUserReward(UserReward reward) {
if (userRewards.stream().noneMatch(r ->
r.attraction.attractionName.equals(reward.attraction.attractionName))) {
userRewards.add(reward);
}
}
public List<UserReward> getUserRewards() {
synchronized(userRewards) {
return new ArrayList<>(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;
}
}