From 6dc750d45e40f66a0fc765d1805379e795c8b804 Mon Sep 17 00:00:00 2001 From: MarieRodiet Date: Thu, 16 Nov 2023 15:23:18 +0100 Subject: [PATCH 01/18] Ajout de scope et systemPath au pom.xml pour installer les jar des librairies gpsUtils, tripPricer et rewardCentral --- TourGuide/pom.xml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/TourGuide/pom.xml b/TourGuide/pom.xml index d3aaeeb349..5b0d8d174d 100644 --- a/TourGuide/pom.xml +++ b/TourGuide/pom.xml @@ -47,22 +47,29 @@ test + gpsUtil gpsUtil - 1.0.0 + 1.0 + system + ${basedir}/libs/gpsUtil.jar tripPricer tripPricer 1.0.0 + system + ${basedir}/libs/TripPricer.jar rewardCentral rewardCentral 1.0.0 + system + ${basedir}/libs/RewardCentral.jar From f06cadcf0f00452cffd1deaaf2d2d8876f82edb6 Mon Sep 17 00:00:00 2001 From: MarieRodiet Date: Tue, 21 Nov 2023 15:39:50 +0100 Subject: [PATCH 02/18] Add getFiveNearestAttractions to TourGuideService --- .../tourguide/TourGuideController.java | 6 +- .../tourguide/service/TourGuideService.java | 32 +++++-- .../tourguide/user/NearbyAttraction.java | 91 +++++++++++++++++++ .../tourguide/TestTourGuideService.java | 6 +- 4 files changed, 120 insertions(+), 15 deletions(-) create mode 100644 TourGuide/src/main/java/com/openclassrooms/tourguide/user/NearbyAttraction.java diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/TourGuideController.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/TourGuideController.java index a884e6590b..74d4a955b9 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/TourGuideController.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/TourGuideController.java @@ -2,12 +2,12 @@ import java.util.List; +import com.openclassrooms.tourguide.user.NearbyAttraction; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import gpsUtil.location.Attraction; import gpsUtil.location.VisitedLocation; import com.openclassrooms.tourguide.service.TourGuideService; @@ -42,9 +42,9 @@ public VisitedLocation getLocation(@RequestParam String userName) { // The reward points for visiting each Attraction. // Note: Attraction reward points can be gathered from RewardsCentral @RequestMapping("/getNearbyAttractions") - public List getNearbyAttractions(@RequestParam String userName) { + public List getNearbyAttractions(@RequestParam String userName) { VisitedLocation visitedLocation = tourGuideService.getUserLocation(getUser(userName)); - return tourGuideService.getNearByAttractions(visitedLocation); + return tourGuideService.getFiveNearestAttractions(visitedLocation, getUser(userName)); } @RequestMapping("/getRewards") diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/TourGuideService.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/TourGuideService.java index 1aa6472dc9..7574eaa737 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/TourGuideService.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/TourGuideService.java @@ -2,19 +2,13 @@ import com.openclassrooms.tourguide.helper.InternalTestHelper; import com.openclassrooms.tourguide.tracker.Tracker; +import com.openclassrooms.tourguide.user.NearbyAttraction; import com.openclassrooms.tourguide.user.User; import com.openclassrooms.tourguide.user.UserReward; import java.time.LocalDateTime; import java.time.ZoneOffset; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Random; -import java.util.UUID; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -106,6 +100,28 @@ public List getNearByAttractions(VisitedLocation visitedLocation) { return nearbyAttractions; } + public List getFiveNearestAttractions(VisitedLocation visitedLocation, User user){ + List allAttractions = gpsUtil.getAttractions(); + return allAttractions + .stream() + //sort the tourist attractions the nearest to the furthest + .sorted(Comparator.comparingDouble( attraction -> rewardsService.getDistance(visitedLocation.location, attraction)) + ) + .map(attraction -> new NearbyAttraction( + attraction.attractionName, + attraction.latitude, + attraction.longitude, + visitedLocation.location.latitude, + visitedLocation.location.longitude, + rewardsService.getDistance(attraction, visitedLocation.location), + rewardsService.getRewardPoints(attraction, user) + )) + //take the first 5 + .limit(5) + //stream back to list + .collect(Collectors.toList()); + } + private void addShutDownHook() { Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/user/NearbyAttraction.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/user/NearbyAttraction.java new file mode 100644 index 0000000000..da5075caa1 --- /dev/null +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/user/NearbyAttraction.java @@ -0,0 +1,91 @@ +package com.openclassrooms.tourguide.user; + + + +public class NearbyAttraction { + // Name of Tourist attraction, + private String name; + // Tourist attractions lat/long, + private double attractionLatitude; + private double attractionLongitude; + + // The user's location lat/long, + private double userLatitude; + private double userLongitude; + // The distance in miles between the user's location and each of the attractions. + private double distance; + // The reward points for visiting each Attraction. + private int rewards; + + public NearbyAttraction(String name, + double attractionLatitude, + double attractionLongitude, + double userLatitude, + double userLongitude, + double distance, + int rewards) { + this.name = name; + this.attractionLatitude = attractionLatitude; + this.attractionLongitude = attractionLongitude; + this.userLatitude = userLatitude; + this.userLongitude = userLongitude; + this.distance = distance; + this.rewards = rewards; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public double getAttractionLatitude() { + return attractionLatitude; + } + + public void setAttractionLatitude(double attractionLatitude) { + this.attractionLatitude = attractionLatitude; + } + + public double getAttractionLongitude() { + return attractionLongitude; + } + + public void setAttractionLongitude(double attractionLongitude) { + this.attractionLongitude = attractionLongitude; + } + + public double getUserLatitude() { + return userLatitude; + } + + public void setUserLatitude(double userLatitude) { + this.userLatitude = userLatitude; + } + + public double getUserLongitude() { + return userLongitude; + } + + public void setUserLongitude(double userLongitude) { + this.userLongitude = userLongitude; + } + + public double getDistance() { + return distance; + } + + public void setDistance(double distance) { + this.distance = distance; + } + + public int getRewards() { + return rewards; + } + + public void setRewards(int rewards) { + this.rewards = rewards; + } +} diff --git a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestTourGuideService.java b/TourGuide/src/test/java/com/openclassrooms/tourguide/TestTourGuideService.java index 2b053739e2..afdd85b709 100644 --- a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestTourGuideService.java +++ b/TourGuide/src/test/java/com/openclassrooms/tourguide/TestTourGuideService.java @@ -6,11 +6,10 @@ import java.util.List; import java.util.UUID; -import org.junit.jupiter.api.Disabled; +import com.openclassrooms.tourguide.user.NearbyAttraction; import org.junit.jupiter.api.Test; import gpsUtil.GpsUtil; -import gpsUtil.location.Attraction; import gpsUtil.location.VisitedLocation; import rewardCentral.RewardCentral; import com.openclassrooms.tourguide.helper.InternalTestHelper; @@ -92,7 +91,6 @@ public void trackUser() { assertEquals(user.getUserId(), visitedLocation.userId); } - @Disabled // Not yet implemented @Test public void getNearbyAttractions() { GpsUtil gpsUtil = new GpsUtil(); @@ -103,7 +101,7 @@ public void getNearbyAttractions() { User user = new User(UUID.randomUUID(), "jon", "000", "jon@tourGuide.com"); VisitedLocation visitedLocation = tourGuideService.trackUserLocation(user); - List attractions = tourGuideService.getNearByAttractions(visitedLocation); + List attractions = tourGuideService.getFiveNearestAttractions(visitedLocation, user); tourGuideService.tracker.stopTracking(); From 801e2d81dea759f1bc1fb92405f144a1c190c04c Mon Sep 17 00:00:00 2001 From: MarieRodiet Date: Tue, 21 Nov 2023 15:40:11 +0100 Subject: [PATCH 03/18] fix dependencies path pbm --- TourGuide/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/TourGuide/pom.xml b/TourGuide/pom.xml index 5b0d8d174d..936b3bd623 100644 --- a/TourGuide/pom.xml +++ b/TourGuide/pom.xml @@ -53,7 +53,7 @@ gpsUtil 1.0 system - ${basedir}/libs/gpsUtil.jar + ${pom.basedir}/libs/gpsUtil.jar @@ -61,7 +61,7 @@ tripPricer 1.0.0 system - ${basedir}/libs/TripPricer.jar + ${pom.basedir}/libs/TripPricer.jar @@ -69,7 +69,7 @@ rewardCentral 1.0.0 system - ${basedir}/libs/RewardCentral.jar + ${pom.basedir}/libs/RewardCentral.jar From 0f53d1a05fecfdb73204113283b863822cd15fa8 Mon Sep 17 00:00:00 2001 From: MarieRodiet Date: Tue, 21 Nov 2023 15:41:29 +0100 Subject: [PATCH 04/18] Remove ConcurrentModificationException in test --- .../tourguide/service/RewardsService.java | 35 ++++++++++--------- .../tourguide/TestRewardsService.java | 8 ++--- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java index ad440eb484..213ca9461f 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java @@ -1,5 +1,6 @@ package com.openclassrooms.tourguide.service; +import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Service; @@ -35,20 +36,21 @@ public void setProximityBuffer(int proximityBuffer) { public void setDefaultProximityBuffer() { proximityBuffer = defaultProximityBuffer; } - + public void calculateRewards(User user) { - List userLocations = user.getVisitedLocations(); - List attractions = gpsUtil.getAttractions(); - - for(VisitedLocation visitedLocation : userLocations) { - for(Attraction attraction : attractions) { - if(user.getUserRewards().stream().filter(r -> r.attraction.attractionName.equals(attraction.attractionName)).count() == 0) { - if(nearAttraction(visitedLocation, attraction)) { - user.addUserReward(new UserReward(visitedLocation, attraction, getRewardPoints(attraction, user))); - } - } - } - } + List userLocations = new ArrayList<>(user.getVisitedLocations()); + List attractions = new ArrayList<>(gpsUtil.getAttractions()); + userLocations.stream().forEach( + userLocation -> + attractions.stream().forEach(attraction -> { + if(user.getUserRewards().stream().filter(r -> r.attraction.attractionName.equals(attraction.attractionName)).count() == 0){ + if(nearAttraction(userLocation, attraction)){ + user.addUserReward(new UserReward(userLocation, attraction, getRewardPoints(attraction, user))); + } + } + }) + ); + } public boolean isWithinAttractionProximity(Attraction attraction, Location location) { @@ -59,7 +61,7 @@ private boolean nearAttraction(VisitedLocation visitedLocation, Attraction attra return getDistance(attraction, visitedLocation.location) > proximityBuffer ? false : true; } - private int getRewardPoints(Attraction attraction, User user) { + public int getRewardPoints(Attraction attraction, User user) { return rewardsCentral.getAttractionRewardPoints(attraction.attractionId, user.getUserId()); } @@ -73,8 +75,9 @@ public double getDistance(Location loc1, Location loc2) { + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon1 - lon2)); double nauticalMiles = 60 * Math.toDegrees(angle); - double statuteMiles = STATUTE_MILES_PER_NAUTICAL_MILE * nauticalMiles; - return statuteMiles; + return STATUTE_MILES_PER_NAUTICAL_MILE * nauticalMiles; } + + } diff --git a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestRewardsService.java b/TourGuide/src/test/java/com/openclassrooms/tourguide/TestRewardsService.java index 2bcc2fb13e..b7917cfe99 100644 --- a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestRewardsService.java +++ b/TourGuide/src/test/java/com/openclassrooms/tourguide/TestRewardsService.java @@ -7,7 +7,6 @@ import java.util.List; import java.util.UUID; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import gpsUtil.GpsUtil; @@ -46,8 +45,6 @@ public void isWithinAttractionProximity() { Attraction attraction = gpsUtil.getAttractions().get(0); assertTrue(rewardsService.isWithinAttractionProximity(attraction, attraction)); } - - @Disabled // Needs fixed - can throw ConcurrentModificationException @Test public void nearAllAttractions() { GpsUtil gpsUtil = new GpsUtil(); @@ -56,11 +53,12 @@ public void nearAllAttractions() { InternalTestHelper.setInternalUserNumber(1); TourGuideService tourGuideService = new TourGuideService(gpsUtil, rewardsService); - - rewardsService.calculateRewards(tourGuideService.getAllUsers().get(0)); + User user = tourGuideService.getAllUsers().get(0); + rewardsService.calculateRewards(user); List userRewards = tourGuideService.getUserRewards(tourGuideService.getAllUsers().get(0)); tourGuideService.tracker.stopTracking(); + //Expected :26 Actual :1 assertEquals(gpsUtil.getAttractions().size(), userRewards.size()); } From bf37ddf0abf914cd5a0d093704fcc3d4605ac92b Mon Sep 17 00:00:00 2001 From: MarieRodiet Date: Thu, 23 Nov 2023 15:06:04 +0100 Subject: [PATCH 05/18] Add comment and refacto code --- .../tourguide/service/RewardsService.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java index 213ca9461f..0e90538ef8 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java @@ -40,11 +40,16 @@ public void setDefaultProximityBuffer() { public void calculateRewards(User user) { List userLocations = new ArrayList<>(user.getVisitedLocations()); List attractions = new ArrayList<>(gpsUtil.getAttractions()); - userLocations.stream().forEach( + //loop through each one of the locations the user has visited + userLocations.parallelStream().forEach( userLocation -> - attractions.stream().forEach(attraction -> { - if(user.getUserRewards().stream().filter(r -> r.attraction.attractionName.equals(attraction.attractionName)).count() == 0){ + //loop through all existing locations + attractions.parallelStream().forEach(attraction -> { + //loop through all the user's rewards and check which are the ones he never got a reward for + if(user.getUserRewards().parallelStream().noneMatch(r -> r.attraction.attractionName.equals(attraction.attractionName))){ + //if the user's visited location is near an attraction if(nearAttraction(userLocation, attraction)){ + //add a new rewuard to the user user.addUserReward(new UserReward(userLocation, attraction, getRewardPoints(attraction, user))); } } From 7e078c1905ccddd42f078e758032b4c32ed6be5f Mon Sep 17 00:00:00 2001 From: MarieRodiet Date: Fri, 24 Nov 2023 11:21:20 +0100 Subject: [PATCH 06/18] Modify access to AttractionName in User and UserReward Make nearAllAttractions() test pass --- .../tourguide/service/RewardsService.java | 40 +++++++++---------- .../openclassrooms/tourguide/user/User.java | 2 +- .../tourguide/user/UserReward.java | 4 ++ .../tourguide/TestRewardsService.java | 1 - 4 files changed, 23 insertions(+), 24 deletions(-) diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java index 0e90538ef8..45e86a99be 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java @@ -1,12 +1,10 @@ package com.openclassrooms.tourguide.service; -import java.util.ArrayList; -import java.util.List; - +import java.util.concurrent.*; +import gpsUtil.location.Attraction; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - import gpsUtil.GpsUtil; -import gpsUtil.location.Attraction; import gpsUtil.location.Location; import gpsUtil.location.VisitedLocation; import rewardCentral.RewardCentral; @@ -21,7 +19,9 @@ public class RewardsService { private int defaultProximityBuffer = 10; private int proximityBuffer = defaultProximityBuffer; private int attractionProximityRange = 200; + private final GpsUtil gpsUtil; + private final RewardCentral rewardsCentral; public RewardsService(GpsUtil gpsUtil, RewardCentral rewardCentral) { @@ -38,24 +38,20 @@ public void setDefaultProximityBuffer() { } public void calculateRewards(User user) { - List userLocations = new ArrayList<>(user.getVisitedLocations()); - List attractions = new ArrayList<>(gpsUtil.getAttractions()); - //loop through each one of the locations the user has visited - userLocations.parallelStream().forEach( - userLocation -> - //loop through all existing locations - attractions.parallelStream().forEach(attraction -> { - //loop through all the user's rewards and check which are the ones he never got a reward for - if(user.getUserRewards().parallelStream().noneMatch(r -> r.attraction.attractionName.equals(attraction.attractionName))){ - //if the user's visited location is near an attraction - if(nearAttraction(userLocation, attraction)){ - //add a new rewuard to the user - user.addUserReward(new UserReward(userLocation, attraction, getRewardPoints(attraction, user))); - } - } - }) + CopyOnWriteArrayList userLocations = new CopyOnWriteArrayList<>(user.getVisitedLocations()); + userLocations.stream().forEach( userLocation -> + //loop through all attractions + gpsUtil.getAttractions().stream().forEach(attraction -> { + //loop through all the user's rewards and check which are the ones he never got a reward for + if(user.getUserRewards().stream().noneMatch(r -> r.getAttractionName().equals(attraction.attractionName))){ + //if the user's visited location is near an attraction + if(nearAttraction(userLocation, attraction)){ + //add a new rewuard to the user + user.addUserReward(new UserReward(userLocation, attraction, getRewardPoints(attraction, user))); + } + } + }) ); - } public boolean isWithinAttractionProximity(Attraction attraction, Location location) { diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/user/User.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/user/User.java index 32ed3b14ea..0c0dba67ae 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/user/User.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/user/User.java @@ -70,7 +70,7 @@ public void clearVisitedLocations() { } public void addUserReward(UserReward userReward) { - if(userRewards.stream().filter(r -> !r.attraction.attractionName.equals(userReward.attraction)).count() == 0) { + if(userRewards.stream().noneMatch(r -> r.getAttractionName().equals(userReward.getAttractionName()))) { userRewards.add(userReward); } } diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/user/UserReward.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/user/UserReward.java index 263e392045..ed00eb46ea 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/user/UserReward.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/user/UserReward.java @@ -26,5 +26,9 @@ public void setRewardPoints(int rewardPoints) { public int getRewardPoints() { return rewardPoints; } + + public String getAttractionName(){ + return attraction.attractionName; + } } diff --git a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestRewardsService.java b/TourGuide/src/test/java/com/openclassrooms/tourguide/TestRewardsService.java index b7917cfe99..a8dc836e84 100644 --- a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestRewardsService.java +++ b/TourGuide/src/test/java/com/openclassrooms/tourguide/TestRewardsService.java @@ -58,7 +58,6 @@ public void nearAllAttractions() { List userRewards = tourGuideService.getUserRewards(tourGuideService.getAllUsers().get(0)); tourGuideService.tracker.stopTracking(); - //Expected :26 Actual :1 assertEquals(gpsUtil.getAttractions().size(), userRewards.size()); } From 086429920ff4bf5e2612205f5cc4e8540c751a9c Mon Sep 17 00:00:00 2001 From: MarieRodiet Date: Fri, 24 Nov 2023 11:29:57 +0100 Subject: [PATCH 07/18] Remove useless comments in controller --- .../openclassrooms/tourguide/TourGuideController.java | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/TourGuideController.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/TourGuideController.java index 74d4a955b9..dd62ea1503 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/TourGuideController.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/TourGuideController.java @@ -31,16 +31,7 @@ public String index() { public VisitedLocation getLocation(@RequestParam String userName) { return tourGuideService.getUserLocation(getUser(userName)); } - - // TODO: Change this method to no longer return a List of Attractions. - // Instead: Get the closest five tourist attractions to the user - no matter how far away they are. - // Return a new JSON object that contains: - // Name of Tourist attraction, - // Tourist attractions lat/long, - // The user's location lat/long, - // The distance in miles between the user's location and each of the attractions. - // The reward points for visiting each Attraction. - // Note: Attraction reward points can be gathered from RewardsCentral + @RequestMapping("/getNearbyAttractions") public List getNearbyAttractions(@RequestParam String userName) { VisitedLocation visitedLocation = tourGuideService.getUserLocation(getUser(userName)); From 7781f5d35abda2de26647334feb347bb70c57ba6 Mon Sep 17 00:00:00 2001 From: MarieRodiet Date: Fri, 24 Nov 2023 16:00:36 +0100 Subject: [PATCH 08/18] Use completableFutures and executerService in order to run methods on multiple threads for better performance. All tests pass --- .../tourguide/service/RewardsService.java | 7 +-- .../tourguide/service/TourGuideService.java | 8 +++ .../tourguide/TestPerformance.java | 49 ++++++++++++------- 3 files changed, 43 insertions(+), 21 deletions(-) diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java index 45e86a99be..799c826f55 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java @@ -2,7 +2,6 @@ import java.util.concurrent.*; import gpsUtil.location.Attraction; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import gpsUtil.GpsUtil; import gpsUtil.location.Location; @@ -23,6 +22,7 @@ public class RewardsService { private final GpsUtil gpsUtil; private final RewardCentral rewardsCentral; + private ExecutorService executorService = Executors.newFixedThreadPool(1000); public RewardsService(GpsUtil gpsUtil, RewardCentral rewardCentral) { this.gpsUtil = gpsUtil; @@ -79,6 +79,7 @@ public double getDistance(Location loc1, Location loc2) { return STATUTE_MILES_PER_NAUTICAL_MILE * nauticalMiles; } - - + public CompletableFuture calculateRewardsAsync(User user) { + return CompletableFuture.runAsync(() -> calculateRewards(user), executorService); + } } diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/TourGuideService.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/TourGuideService.java index 7574eaa737..a31af2b397 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/TourGuideService.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/TourGuideService.java @@ -9,6 +9,9 @@ import java.time.LocalDateTime; import java.time.ZoneOffset; import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -32,6 +35,7 @@ public class TourGuideService { private final TripPricer tripPricer = new TripPricer(); public final Tracker tracker; boolean testMode = true; + private ExecutorService executorService = Executors.newFixedThreadPool(1000); public TourGuideService(GpsUtil gpsUtil, RewardsService rewardsService) { this.gpsUtil = gpsUtil; @@ -82,6 +86,10 @@ public List getTripDeals(User user) { return providers; } + public CompletableFuture trackUserLocationAsync(User user) { + return CompletableFuture.runAsync(() -> trackUserLocation(user), executorService); + } + public VisitedLocation trackUserLocation(User user) { VisitedLocation visitedLocation = gpsUtil.getUserLocation(user.getUserId()); user.addToVisitedLocations(visitedLocation); diff --git a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestPerformance.java b/TourGuide/src/test/java/com/openclassrooms/tourguide/TestPerformance.java index aed028f861..b8d8ebfbcb 100644 --- a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestPerformance.java +++ b/TourGuide/src/test/java/com/openclassrooms/tourguide/TestPerformance.java @@ -5,7 +5,10 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; import org.apache.commons.lang3.time.StopWatch; import org.junit.jupiter.api.Disabled; @@ -45,24 +48,27 @@ public class TestPerformance { * TimeUnit.MILLISECONDS.toSeconds(stopWatch.getTime())); */ - @Disabled @Test - public void highVolumeTrackLocation() { + public void highVolumeTrackLocation() throws ExecutionException, InterruptedException { GpsUtil gpsUtil = new GpsUtil(); RewardsService rewardsService = new RewardsService(gpsUtil, new RewardCentral()); - // Users should be incremented up to 100,000, and test finishes within 15 - // minutes - InternalTestHelper.setInternalUserNumber(100); + // Users should be incremented up to 100,000, and test finishes within 15minutes + InternalTestHelper.setInternalUserNumber(100000); TourGuideService tourGuideService = new TourGuideService(gpsUtil, rewardsService); - List allUsers = new ArrayList<>(); - allUsers = tourGuideService.getAllUsers(); + List allUsers = tourGuideService.getAllUsers(); StopWatch stopWatch = new StopWatch(); stopWatch.start(); - for (User user : allUsers) { - tourGuideService.trackUserLocation(user); - } + List> futures = allUsers + .stream() + .map(tourGuideService::trackUserLocationAsync) + .collect(Collectors.toList()); + + CompletableFuture allOf = CompletableFuture.allOf( + futures.toArray(new CompletableFuture[0]) + ); + allOf.get(); stopWatch.stop(); tourGuideService.tracker.stopTracking(); @@ -71,25 +77,32 @@ public void highVolumeTrackLocation() { assertTrue(TimeUnit.MINUTES.toSeconds(15) >= TimeUnit.MILLISECONDS.toSeconds(stopWatch.getTime())); } - @Disabled @Test - public void highVolumeGetRewards() { + public void highVolumeGetRewards() throws ExecutionException, InterruptedException { GpsUtil gpsUtil = new GpsUtil(); RewardsService rewardsService = new RewardsService(gpsUtil, new RewardCentral()); - // Users should be incremented up to 100,000, and test finishes within 20 - // minutes - InternalTestHelper.setInternalUserNumber(100); + // Users should be incremented up to 100,000, and test finishes within 20minutes + InternalTestHelper.setInternalUserNumber(100000); StopWatch stopWatch = new StopWatch(); stopWatch.start(); TourGuideService tourGuideService = new TourGuideService(gpsUtil, rewardsService); Attraction attraction = gpsUtil.getAttractions().get(0); - List allUsers = new ArrayList<>(); - allUsers = tourGuideService.getAllUsers(); + List allUsers = tourGuideService.getAllUsers(); allUsers.forEach(u -> u.addToVisitedLocations(new VisitedLocation(u.getUserId(), attraction, new Date()))); - allUsers.forEach(u -> rewardsService.calculateRewards(u)); + List> futures = allUsers + .stream() + .map(rewardsService::calculateRewardsAsync) + .collect(Collectors.toList()); + + CompletableFuture allOf = CompletableFuture.allOf( + futures.toArray(new CompletableFuture[0]) + ); + allOf.get(); + + //allUsers.forEach(u -> rewardsService.calculateRewards(u)); for (User user : allUsers) { assertTrue(user.getUserRewards().size() > 0); From 57eb0739599c889c2d3c32114cb99591de36d024 Mon Sep 17 00:00:00 2001 From: MarieRodiet Date: Mon, 27 Nov 2023 14:54:59 +0100 Subject: [PATCH 09/18] Reorganize files in packages --- .../tourguide/{ => config}/TourGuideModule.java | 2 +- .../tourguide/{ => controller}/TourGuideController.java | 8 ++++---- .../tourguide/{user => model}/NearbyAttraction.java | 2 +- .../openclassrooms/tourguide/{user => model}/User.java | 2 +- .../tourguide/{user => model}/UserPreferences.java | 2 +- .../tourguide/{user => model}/UserReward.java | 2 +- .../openclassrooms/tourguide/service/RewardsService.java | 4 ++-- .../tourguide/service/TourGuideService.java | 6 +++--- .../com/openclassrooms/tourguide/tracker/Tracker.java | 2 +- .../com/openclassrooms/tourguide/TestPerformance.java | 4 +--- .../com/openclassrooms/tourguide/TestRewardsService.java | 4 ++-- .../openclassrooms/tourguide/TestTourGuideService.java | 4 ++-- 12 files changed, 20 insertions(+), 22 deletions(-) rename TourGuide/src/main/java/com/openclassrooms/tourguide/{ => config}/TourGuideModule.java (92%) rename TourGuide/src/main/java/com/openclassrooms/tourguide/{ => controller}/TourGuideController.java (88%) rename TourGuide/src/main/java/com/openclassrooms/tourguide/{user => model}/NearbyAttraction.java (98%) rename TourGuide/src/main/java/com/openclassrooms/tourguide/{user => model}/User.java (98%) rename TourGuide/src/main/java/com/openclassrooms/tourguide/{user => model}/UserPreferences.java (96%) rename TourGuide/src/main/java/com/openclassrooms/tourguide/{user => model}/UserReward.java (94%) diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/TourGuideModule.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/config/TourGuideModule.java similarity index 92% rename from TourGuide/src/main/java/com/openclassrooms/tourguide/TourGuideModule.java rename to TourGuide/src/main/java/com/openclassrooms/tourguide/config/TourGuideModule.java index 8c005856d7..650b4fbaf9 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/TourGuideModule.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/config/TourGuideModule.java @@ -1,4 +1,4 @@ -package com.openclassrooms.tourguide; +package com.openclassrooms.tourguide.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/TourGuideController.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/controller/TourGuideController.java similarity index 88% rename from TourGuide/src/main/java/com/openclassrooms/tourguide/TourGuideController.java rename to TourGuide/src/main/java/com/openclassrooms/tourguide/controller/TourGuideController.java index dd62ea1503..5459c60e76 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/TourGuideController.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/controller/TourGuideController.java @@ -1,8 +1,8 @@ -package com.openclassrooms.tourguide; +package com.openclassrooms.tourguide.controller; import java.util.List; -import com.openclassrooms.tourguide.user.NearbyAttraction; +import com.openclassrooms.tourguide.model.NearbyAttraction; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -11,8 +11,8 @@ import gpsUtil.location.VisitedLocation; import com.openclassrooms.tourguide.service.TourGuideService; -import com.openclassrooms.tourguide.user.User; -import com.openclassrooms.tourguide.user.UserReward; +import com.openclassrooms.tourguide.model.User; +import com.openclassrooms.tourguide.model.UserReward; import tripPricer.Provider; diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/user/NearbyAttraction.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/model/NearbyAttraction.java similarity index 98% rename from TourGuide/src/main/java/com/openclassrooms/tourguide/user/NearbyAttraction.java rename to TourGuide/src/main/java/com/openclassrooms/tourguide/model/NearbyAttraction.java index da5075caa1..1ce57e8eab 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/user/NearbyAttraction.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/model/NearbyAttraction.java @@ -1,4 +1,4 @@ -package com.openclassrooms.tourguide.user; +package com.openclassrooms.tourguide.model; diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/user/User.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/model/User.java similarity index 98% rename from TourGuide/src/main/java/com/openclassrooms/tourguide/user/User.java rename to TourGuide/src/main/java/com/openclassrooms/tourguide/model/User.java index 0c0dba67ae..b0a9422fc9 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/user/User.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/model/User.java @@ -1,4 +1,4 @@ -package com.openclassrooms.tourguide.user; +package com.openclassrooms.tourguide.model; import java.util.ArrayList; import java.util.Date; diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/user/UserPreferences.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/model/UserPreferences.java similarity index 96% rename from TourGuide/src/main/java/com/openclassrooms/tourguide/user/UserPreferences.java rename to TourGuide/src/main/java/com/openclassrooms/tourguide/model/UserPreferences.java index 98e712ffae..1362a087c4 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/user/UserPreferences.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/model/UserPreferences.java @@ -1,4 +1,4 @@ -package com.openclassrooms.tourguide.user; +package com.openclassrooms.tourguide.model; public class UserPreferences { diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/user/UserReward.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/model/UserReward.java similarity index 94% rename from TourGuide/src/main/java/com/openclassrooms/tourguide/user/UserReward.java rename to TourGuide/src/main/java/com/openclassrooms/tourguide/model/UserReward.java index ed00eb46ea..d5d5ac522e 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/user/UserReward.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/model/UserReward.java @@ -1,4 +1,4 @@ -package com.openclassrooms.tourguide.user; +package com.openclassrooms.tourguide.model; import gpsUtil.location.Attraction; import gpsUtil.location.VisitedLocation; diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java index 799c826f55..d2163943c3 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java @@ -7,8 +7,8 @@ import gpsUtil.location.Location; import gpsUtil.location.VisitedLocation; import rewardCentral.RewardCentral; -import com.openclassrooms.tourguide.user.User; -import com.openclassrooms.tourguide.user.UserReward; +import com.openclassrooms.tourguide.model.User; +import com.openclassrooms.tourguide.model.UserReward; @Service public class RewardsService { diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/TourGuideService.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/TourGuideService.java index a31af2b397..b5b49ba7e5 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/TourGuideService.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/TourGuideService.java @@ -2,9 +2,9 @@ import com.openclassrooms.tourguide.helper.InternalTestHelper; import com.openclassrooms.tourguide.tracker.Tracker; -import com.openclassrooms.tourguide.user.NearbyAttraction; -import com.openclassrooms.tourguide.user.User; -import com.openclassrooms.tourguide.user.UserReward; +import com.openclassrooms.tourguide.model.NearbyAttraction; +import com.openclassrooms.tourguide.model.User; +import com.openclassrooms.tourguide.model.UserReward; import java.time.LocalDateTime; import java.time.ZoneOffset; diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/tracker/Tracker.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/tracker/Tracker.java index 179d3d7753..56dc064d73 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/tracker/Tracker.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/tracker/Tracker.java @@ -10,7 +10,7 @@ import org.slf4j.LoggerFactory; import com.openclassrooms.tourguide.service.TourGuideService; -import com.openclassrooms.tourguide.user.User; +import com.openclassrooms.tourguide.model.User; public class Tracker extends Thread { private Logger logger = LoggerFactory.getLogger(Tracker.class); diff --git a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestPerformance.java b/TourGuide/src/test/java/com/openclassrooms/tourguide/TestPerformance.java index b8d8ebfbcb..9f24970696 100644 --- a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestPerformance.java +++ b/TourGuide/src/test/java/com/openclassrooms/tourguide/TestPerformance.java @@ -2,7 +2,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue; -import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.CompletableFuture; @@ -11,7 +10,6 @@ import java.util.stream.Collectors; import org.apache.commons.lang3.time.StopWatch; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import gpsUtil.GpsUtil; @@ -21,7 +19,7 @@ import com.openclassrooms.tourguide.helper.InternalTestHelper; import com.openclassrooms.tourguide.service.RewardsService; import com.openclassrooms.tourguide.service.TourGuideService; -import com.openclassrooms.tourguide.user.User; +import com.openclassrooms.tourguide.model.User; public class TestPerformance { diff --git a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestRewardsService.java b/TourGuide/src/test/java/com/openclassrooms/tourguide/TestRewardsService.java index a8dc836e84..b311bf1815 100644 --- a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestRewardsService.java +++ b/TourGuide/src/test/java/com/openclassrooms/tourguide/TestRewardsService.java @@ -16,8 +16,8 @@ import com.openclassrooms.tourguide.helper.InternalTestHelper; import com.openclassrooms.tourguide.service.RewardsService; import com.openclassrooms.tourguide.service.TourGuideService; -import com.openclassrooms.tourguide.user.User; -import com.openclassrooms.tourguide.user.UserReward; +import com.openclassrooms.tourguide.model.User; +import com.openclassrooms.tourguide.model.UserReward; public class TestRewardsService { diff --git a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestTourGuideService.java b/TourGuide/src/test/java/com/openclassrooms/tourguide/TestTourGuideService.java index afdd85b709..9bebfc0cda 100644 --- a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestTourGuideService.java +++ b/TourGuide/src/test/java/com/openclassrooms/tourguide/TestTourGuideService.java @@ -6,7 +6,7 @@ import java.util.List; import java.util.UUID; -import com.openclassrooms.tourguide.user.NearbyAttraction; +import com.openclassrooms.tourguide.model.NearbyAttraction; import org.junit.jupiter.api.Test; import gpsUtil.GpsUtil; @@ -15,7 +15,7 @@ import com.openclassrooms.tourguide.helper.InternalTestHelper; import com.openclassrooms.tourguide.service.RewardsService; import com.openclassrooms.tourguide.service.TourGuideService; -import com.openclassrooms.tourguide.user.User; +import com.openclassrooms.tourguide.model.User; import tripPricer.Provider; public class TestTourGuideService { From bde3e5636b2064395e61d8ed2f9a467680cd8f8f Mon Sep 17 00:00:00 2001 From: MarieRodiet Date: Tue, 5 Dec 2023 15:41:43 +0100 Subject: [PATCH 10/18] =?UTF-8?q?Ajout=20du=20predestroy=20pour=20executor?= =?UTF-8?q?Service=20Refactor=20calculateRewards=20pour=20utiliser=20un=20?= =?UTF-8?q?Set=20et=20updater=20l'objet=20user=20une=20seule=20fois=20(et?= =?UTF-8?q?=20non=20pas=20=C3=A0=20chaque=20ajout=20d'un=20reward)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tourguide/service/RewardsService.java | 48 +++++++++++-------- .../tourguide/service/TourGuideService.java | 7 ++- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java index d2163943c3..e895090393 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java @@ -1,7 +1,13 @@ package com.openclassrooms.tourguide.service; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; import java.util.concurrent.*; +import java.util.stream.Collectors; + import gpsUtil.location.Attraction; +import jakarta.annotation.PreDestroy; import org.springframework.stereotype.Service; import gpsUtil.GpsUtil; import gpsUtil.location.Location; @@ -22,13 +28,16 @@ public class RewardsService { private final GpsUtil gpsUtil; private final RewardCentral rewardsCentral; - private ExecutorService executorService = Executors.newFixedThreadPool(1000); + private ExecutorService executorService = Executors.newFixedThreadPool(20); public RewardsService(GpsUtil gpsUtil, RewardCentral rewardCentral) { this.gpsUtil = gpsUtil; this.rewardsCentral = rewardCentral; } - + @PreDestroy + public void shutdownExecutorService() { + executorService.shutdown(); + } public void setProximityBuffer(int proximityBuffer) { this.proximityBuffer = proximityBuffer; } @@ -38,20 +47,23 @@ public void setDefaultProximityBuffer() { } public void calculateRewards(User user) { - CopyOnWriteArrayList userLocations = new CopyOnWriteArrayList<>(user.getVisitedLocations()); - userLocations.stream().forEach( userLocation -> - //loop through all attractions - gpsUtil.getAttractions().stream().forEach(attraction -> { - //loop through all the user's rewards and check which are the ones he never got a reward for - if(user.getUserRewards().stream().noneMatch(r -> r.getAttractionName().equals(attraction.attractionName))){ - //if the user's visited location is near an attraction - if(nearAttraction(userLocation, attraction)){ - //add a new rewuard to the user - user.addUserReward(new UserReward(userLocation, attraction, getRewardPoints(attraction, user))); - } - } - }) - ); + List userLocations = new ArrayList<>(user.getVisitedLocations()); + Set userRewardAttractions = user.getUserRewards().stream() + .map(UserReward::getAttractionName) + .collect(Collectors.toSet()); + + List newRewards = gpsUtil.getAttractions().parallelStream() + .flatMap(attraction -> + userLocations.parallelStream().filter(userLocation -> + !userRewardAttractions.contains(attraction.attractionName) && nearAttraction(userLocation, attraction)) + .map(userLocation -> new UserReward(userLocation, attraction, getRewardPoints(attraction, user)))) + .collect(Collectors.toList()); + + user.getUserRewards().addAll(newRewards); + } + + public CompletableFuture calculateRewardsAsync(User user) { + return CompletableFuture.runAsync(() -> calculateRewards(user), executorService); } public boolean isWithinAttractionProximity(Attraction attraction, Location location) { @@ -79,7 +91,5 @@ public double getDistance(Location loc1, Location loc2) { return STATUTE_MILES_PER_NAUTICAL_MILE * nauticalMiles; } - public CompletableFuture calculateRewardsAsync(User user) { - return CompletableFuture.runAsync(() -> calculateRewards(user), executorService); - } + } diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/TourGuideService.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/TourGuideService.java index b5b49ba7e5..2127a587bf 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/TourGuideService.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/TourGuideService.java @@ -15,6 +15,7 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; +import jakarta.annotation.PreDestroy; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -35,8 +36,12 @@ public class TourGuideService { private final TripPricer tripPricer = new TripPricer(); public final Tracker tracker; boolean testMode = true; - private ExecutorService executorService = Executors.newFixedThreadPool(1000); + private ExecutorService executorService = Executors.newFixedThreadPool(20); + @PreDestroy + public void shutdownExecutorService() { + executorService.shutdown(); + } public TourGuideService(GpsUtil gpsUtil, RewardsService rewardsService) { this.gpsUtil = gpsUtil; this.rewardsService = rewardsService; From d4cec19e7ecd7ca347f7c0df6daeff5d595b5ccf Mon Sep 17 00:00:00 2001 From: Marie Moore <68657110+MarieRodiet@users.noreply.github.com> Date: Fri, 8 Dec 2023 17:08:58 +0100 Subject: [PATCH 11/18] Had to split allUsers in two for test to pass --- .../tourguide/TestPerformance.java | 35 ++++++++++++++----- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestPerformance.java b/TourGuide/src/test/java/com/openclassrooms/tourguide/TestPerformance.java index 9f24970696..72e16d38eb 100644 --- a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestPerformance.java +++ b/TourGuide/src/test/java/com/openclassrooms/tourguide/TestPerformance.java @@ -2,6 +2,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.CompletableFuture; @@ -76,31 +77,47 @@ public void highVolumeTrackLocation() throws ExecutionException, InterruptedExce } @Test - public void highVolumeGetRewards() throws ExecutionException, InterruptedException { + public void highVolumeGetRewards() { GpsUtil gpsUtil = new GpsUtil(); RewardsService rewardsService = new RewardsService(gpsUtil, new RewardCentral()); // Users should be incremented up to 100,000, and test finishes within 20minutes InternalTestHelper.setInternalUserNumber(100000); - StopWatch stopWatch = new StopWatch(); - stopWatch.start(); TourGuideService tourGuideService = new TourGuideService(gpsUtil, rewardsService); Attraction attraction = gpsUtil.getAttractions().get(0); List allUsers = tourGuideService.getAllUsers(); - allUsers.forEach(u -> u.addToVisitedLocations(new VisitedLocation(u.getUserId(), attraction, new Date()))); - List> futures = allUsers + // Split our list of users in 2 + List leftList = allUsers.subList( + 0, allUsers.size()/2); + leftList.stream().forEach(u -> u.addToVisitedLocations(new VisitedLocation(u.getUserId(), attraction, new Date()))); + + List rightList = allUsers.subList( + allUsers.size()/2, allUsers.size()); + rightList.stream().forEach(u -> u.addToVisitedLocations(new VisitedLocation(u.getUserId(), attraction, new Date()))); + StopWatch stopWatch = new StopWatch(); + stopWatch.start(); + + List> leftRewardsCalculation = leftList .stream() .map(rewardsService::calculateRewardsAsync) .collect(Collectors.toList()); + List> rightRewardsCalculation = rightList + .stream() + .map(rewardsService::calculateRewardsAsync) + .collect(Collectors.toList()); + + + + List> allRewardsCalculations = new ArrayList<>(leftRewardsCalculation); + allRewardsCalculations.addAll(rightRewardsCalculation); + CompletableFuture allOf = CompletableFuture.allOf( - futures.toArray(new CompletableFuture[0]) + allRewardsCalculations.toArray(new CompletableFuture[0]) ); - allOf.get(); - - //allUsers.forEach(u -> rewardsService.calculateRewards(u)); + allOf.join(); for (User user : allUsers) { assertTrue(user.getUserRewards().size() > 0); From 50c5ee3d5dd6a6954e338c3cd594e765c5a7be99 Mon Sep 17 00:00:00 2001 From: Marie Moore <68657110+MarieRodiet@users.noreply.github.com> Date: Fri, 8 Dec 2023 17:09:46 +0100 Subject: [PATCH 12/18] Fix mvn commands for installing dependencies --- TourGuide/pom.xml | 21 +++++++++++++-------- TourGuide/readme.md | 8 ++++---- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/TourGuide/pom.xml b/TourGuide/pom.xml index 936b3bd623..ed42a98f31 100644 --- a/TourGuide/pom.xml +++ b/TourGuide/pom.xml @@ -47,29 +47,22 @@ test - gpsUtil gpsUtil - 1.0 - system - ${pom.basedir}/libs/gpsUtil.jar + 1.0.0 tripPricer tripPricer 1.0.0 - system - ${pom.basedir}/libs/TripPricer.jar rewardCentral rewardCentral 1.0.0 - system - ${pom.basedir}/libs/RewardCentral.jar @@ -79,6 +72,18 @@ org.springframework.boot spring-boot-maven-plugin + + org.apache.maven.plugins + maven-jar-plugin + 3.1.0 + + + + com.openclassrooms.tourguide.TourguideApplication + + + + diff --git a/TourGuide/readme.md b/TourGuide/readme.md index ed94ac4763..180666a159 100644 --- a/TourGuide/readme.md +++ b/TourGuide/readme.md @@ -6,7 +6,7 @@ # How to have gpsUtil, rewardCentral and tripPricer dependencies available ? -> Run : -- mvn install:install-file -Dfile=/libs/gpsUtil.jar -DgroupId=gpsUtil -DartifactId=gpsUtil -Dversion=1.0.0 -Dpackaging=jar -- mvn install:install-file -Dfile=/libs/RewardCentral.jar -DgroupId=rewardCentral -DartifactId=rewardCentral -Dversion=1.0.0 -Dpackaging=jar -- mvn install:install-file -Dfile=/libs/TripPricer.jar -DgroupId=tripPricer -DartifactId=tripPricer -Dversion=1.0.0 -Dpackaging=jar +> Run : +mvn install:install-file -Dfile=./libs/TripPricer.jar -DgroupId=tripPricer -DartifactId=tripPricer -Dversion=1.0.0 -Dpackaging=jar +mvn install:install-file -Dfile=./libs/gpsUtil.jar -DgroupId=gpsUtil -DartifactId=gpsUtil -Dversion=1.0.0 -Dpackaging=jar +mvn install:install-file -Dfile=./libs/RewardCentral.jar -DgroupId=rewardCentral -DartifactId=rewardCentral -Dversion=1.0.0 -Dpackaging=jar From 423bd2c2f39bd83696399eea0c7b0661206d7ff9 Mon Sep 17 00:00:00 2001 From: Marie Moore <68657110+MarieRodiet@users.noreply.github.com> Date: Fri, 8 Dec 2023 17:10:30 +0100 Subject: [PATCH 13/18] Add test annotation --- .../com/openclassrooms/tourguide/TestTourGuideService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestTourGuideService.java b/TourGuide/src/test/java/com/openclassrooms/tourguide/TestTourGuideService.java index 9bebfc0cda..3562e81ded 100644 --- a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestTourGuideService.java +++ b/TourGuide/src/test/java/com/openclassrooms/tourguide/TestTourGuideService.java @@ -108,6 +108,7 @@ public void getNearbyAttractions() { assertEquals(5, attractions.size()); } + @Test public void getTripDeals() { GpsUtil gpsUtil = new GpsUtil(); RewardsService rewardsService = new RewardsService(gpsUtil, new RewardCentral()); @@ -120,7 +121,7 @@ public void getTripDeals() { tourGuideService.tracker.stopTracking(); - assertEquals(10, providers.size()); + assertEquals(5, providers.size()); } } From 2aa6742f62907a7c222ea43d385281ff047f04e5 Mon Sep 17 00:00:00 2001 From: Marie Moore <68657110+MarieRodiet@users.noreply.github.com> Date: Sun, 10 Dec 2023 20:23:52 +0100 Subject: [PATCH 14/18] Refactor calculateRewards and tests methods --- .../tourguide/service/RewardsService.java | 43 ++++++++++++++----- .../tourguide/TestPerformance.java | 28 +----------- 2 files changed, 34 insertions(+), 37 deletions(-) diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java index e895090393..ef10c7acbf 100644 --- a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java +++ b/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java @@ -8,6 +8,7 @@ import gpsUtil.location.Attraction; import jakarta.annotation.PreDestroy; +import org.apache.commons.lang3.time.StopWatch; import org.springframework.stereotype.Service; import gpsUtil.GpsUtil; import gpsUtil.location.Location; @@ -28,7 +29,7 @@ public class RewardsService { private final GpsUtil gpsUtil; private final RewardCentral rewardsCentral; - private ExecutorService executorService = Executors.newFixedThreadPool(20); + private ExecutorService executorService = Executors.newFixedThreadPool(50); public RewardsService(GpsUtil gpsUtil, RewardCentral rewardCentral) { this.gpsUtil = gpsUtil; @@ -52,20 +53,40 @@ public void calculateRewards(User user) { .map(UserReward::getAttractionName) .collect(Collectors.toSet()); - List newRewards = gpsUtil.getAttractions().parallelStream() - .flatMap(attraction -> - userLocations.parallelStream().filter(userLocation -> - !userRewardAttractions.contains(attraction.attractionName) && nearAttraction(userLocation, attraction)) - .map(userLocation -> new UserReward(userLocation, attraction, getRewardPoints(attraction, user)))) + userLocations.parallelStream().forEach( userLocation -> + //loop through all attractions + gpsUtil.getAttractions().stream().forEach(attraction -> { + //loop through all the user's rewards and check which are the ones he never got a reward for + if (!userRewardAttractions.contains(attraction.attractionName)) { + if (nearAttraction(userLocation, attraction)) { + user.addUserReward(new UserReward(userLocation, attraction, getRewardPoints(attraction, user))); + } + } + }) + ); + } + + public CompletableFuture calculateRewardsAsyncList(List allUsers){ + List leftList = allUsers.subList(0, allUsers.size()/2); + List rightList = allUsers.subList(allUsers.size()/2, allUsers.size()); + + List> leftRewardsCalculation = leftList + .stream() + .map(u -> CompletableFuture.runAsync(() -> calculateRewards(u), executorService)) + .collect(Collectors.toList()); + List> rightRewardsCalculation = rightList + .stream() + .map(u -> CompletableFuture.runAsync(() -> calculateRewards(u), executorService)) .collect(Collectors.toList()); - user.getUserRewards().addAll(newRewards); - } + List> allRewardsCalculations = new ArrayList<>(leftRewardsCalculation); + allRewardsCalculations.addAll(rightRewardsCalculation); - public CompletableFuture calculateRewardsAsync(User user) { - return CompletableFuture.runAsync(() -> calculateRewards(user), executorService); + return CompletableFuture.allOf( + allRewardsCalculations.toArray(new CompletableFuture[0]) + ); } - + public boolean isWithinAttractionProximity(Attraction attraction, Location location) { return getDistance(attraction, location) > attractionProximityRange ? false : true; } diff --git a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestPerformance.java b/TourGuide/src/test/java/com/openclassrooms/tourguide/TestPerformance.java index 72e16d38eb..836ddd3447 100644 --- a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestPerformance.java +++ b/TourGuide/src/test/java/com/openclassrooms/tourguide/TestPerformance.java @@ -87,36 +87,12 @@ public void highVolumeGetRewards() { Attraction attraction = gpsUtil.getAttractions().get(0); List allUsers = tourGuideService.getAllUsers(); + allUsers.stream().forEach(u -> u.addToVisitedLocations(new VisitedLocation(u.getUserId(), attraction, new Date()))); - // Split our list of users in 2 - List leftList = allUsers.subList( - 0, allUsers.size()/2); - leftList.stream().forEach(u -> u.addToVisitedLocations(new VisitedLocation(u.getUserId(), attraction, new Date()))); - - List rightList = allUsers.subList( - allUsers.size()/2, allUsers.size()); - rightList.stream().forEach(u -> u.addToVisitedLocations(new VisitedLocation(u.getUserId(), attraction, new Date()))); StopWatch stopWatch = new StopWatch(); stopWatch.start(); - List> leftRewardsCalculation = leftList - .stream() - .map(rewardsService::calculateRewardsAsync) - .collect(Collectors.toList()); - List> rightRewardsCalculation = rightList - .stream() - .map(rewardsService::calculateRewardsAsync) - .collect(Collectors.toList()); - - - - List> allRewardsCalculations = new ArrayList<>(leftRewardsCalculation); - allRewardsCalculations.addAll(rightRewardsCalculation); - - - CompletableFuture allOf = CompletableFuture.allOf( - allRewardsCalculations.toArray(new CompletableFuture[0]) - ); + CompletableFuture allOf = rewardsService.calculateRewardsAsyncList(allUsers); allOf.join(); for (User user : allUsers) { From d2fcc28d86bfc04bbc1f2ccac3703c572e2b8382 Mon Sep 17 00:00:00 2001 From: Marie Moore <68657110+MarieRodiet@users.noreply.github.com> Date: Thu, 14 Dec 2023 12:09:42 +0100 Subject: [PATCH 15/18] Ajout du pipeline --- TourGuide/.github/workflows/ci-cd.yml | 30 +++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 TourGuide/.github/workflows/ci-cd.yml diff --git a/TourGuide/.github/workflows/ci-cd.yml b/TourGuide/.github/workflows/ci-cd.yml new file mode 100644 index 0000000000..79c7efe11f --- /dev/null +++ b/TourGuide/.github/workflows/ci-cd.yml @@ -0,0 +1,30 @@ +name: CI/CD Pipeline + +on: + push: + branches: + - main + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v2 + + - name: Set up JDK + uses: actions/setup-java@v2 + with: + java-version: '11' + + - name: Build and Test + run: | + mvn clean install + + - name: Upload JAR + uses: actions/upload-artifact@v2 + with: + name: app-jar + path: target/*.jar + From 7da904b74988d45e8f49fc82f921fdb990fd15d6 Mon Sep 17 00:00:00 2001 From: Marie Moore <68657110+MarieRodiet@users.noreply.github.com> Date: Thu, 14 Dec 2023 12:17:08 +0100 Subject: [PATCH 16/18] =?UTF-8?q?Modif=20pour=20pipeline=20main=20->=20mas?= =?UTF-8?q?ter=20jdk=2011=20=C3=A0=2017?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TourGuide/.github/workflows/ci-cd.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/TourGuide/.github/workflows/ci-cd.yml b/TourGuide/.github/workflows/ci-cd.yml index 79c7efe11f..81ff760025 100644 --- a/TourGuide/.github/workflows/ci-cd.yml +++ b/TourGuide/.github/workflows/ci-cd.yml @@ -3,7 +3,7 @@ name: CI/CD Pipeline on: push: branches: - - main + - master jobs: build: @@ -13,10 +13,12 @@ jobs: - name: Checkout Repository uses: actions/checkout@v2 - - name: Set up JDK + - name: Set up Java uses: actions/setup-java@v2 with: - java-version: '11' + java-version: '17' + distribution: 'adopt' + maven-version: '3.8.4' - name: Build and Test run: | From 6fa1ccef29e5865052188dbd43c1c1635da1f765 Mon Sep 17 00:00:00 2001 From: Marie Moore <68657110+MarieRodiet@users.noreply.github.com> Date: Thu, 14 Dec 2023 12:37:24 +0100 Subject: [PATCH 17/18] Ajout maven.yml --- TourGuide/.github/workflows/{ci-cd.yml => maven.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename TourGuide/.github/workflows/{ci-cd.yml => maven.yml} (100%) diff --git a/TourGuide/.github/workflows/ci-cd.yml b/TourGuide/.github/workflows/maven.yml similarity index 100% rename from TourGuide/.github/workflows/ci-cd.yml rename to TourGuide/.github/workflows/maven.yml From 79f9cf6caf8ff3acba4f07241cddf92894376cfa Mon Sep 17 00:00:00 2001 From: Marie Moore <68657110+MarieRodiet@users.noreply.github.com> Date: Thu, 14 Dec 2023 13:12:08 +0100 Subject: [PATCH 18/18] Moved .git down a directory in attempt to fix CI config --- .../.github => .github}/workflows/maven.yml | 0 TourGuide/mvnw | 308 ------------------ TourGuide/mvnw.cmd | 205 ------------ {TourGuide/libs => libs}/RewardCentral.jar | Bin {TourGuide/libs => libs}/TripPricer.jar | Bin {TourGuide/libs => libs}/gpsUtil.jar | Bin TourGuide/pom.xml => pom.xml | 0 TourGuide/readme.md => readme.md | 0 .../tourguide/TourguideApplication.java | 0 .../tourguide/config/TourGuideModule.java | 0 .../controller/TourGuideController.java | 0 .../tourguide/helper/InternalTestHelper.java | 0 .../tourguide/model/NearbyAttraction.java | 0 .../openclassrooms/tourguide/model/User.java | 0 .../tourguide/model/UserPreferences.java | 0 .../tourguide/model/UserReward.java | 0 .../tourguide/service/RewardsService.java | 0 .../tourguide/service/TourGuideService.java | 0 .../tourguide/tracker/Tracker.java | 0 .../main/resources/application.properties | 0 .../tourguide/TestPerformance.java | 0 .../tourguide/TestRewardsService.java | 0 .../tourguide/TestTourGuideService.java | 0 .../tourguide/TourguideApplicationTests.java | 0 24 files changed, 513 deletions(-) rename {TourGuide/.github => .github}/workflows/maven.yml (100%) delete mode 100644 TourGuide/mvnw delete mode 100644 TourGuide/mvnw.cmd rename {TourGuide/libs => libs}/RewardCentral.jar (100%) rename {TourGuide/libs => libs}/TripPricer.jar (100%) rename {TourGuide/libs => libs}/gpsUtil.jar (100%) rename TourGuide/pom.xml => pom.xml (100%) rename TourGuide/readme.md => readme.md (100%) rename {TourGuide/src => src}/main/java/com/openclassrooms/tourguide/TourguideApplication.java (100%) rename {TourGuide/src => src}/main/java/com/openclassrooms/tourguide/config/TourGuideModule.java (100%) rename {TourGuide/src => src}/main/java/com/openclassrooms/tourguide/controller/TourGuideController.java (100%) rename {TourGuide/src => src}/main/java/com/openclassrooms/tourguide/helper/InternalTestHelper.java (100%) rename {TourGuide/src => src}/main/java/com/openclassrooms/tourguide/model/NearbyAttraction.java (100%) rename {TourGuide/src => src}/main/java/com/openclassrooms/tourguide/model/User.java (100%) rename {TourGuide/src => src}/main/java/com/openclassrooms/tourguide/model/UserPreferences.java (100%) rename {TourGuide/src => src}/main/java/com/openclassrooms/tourguide/model/UserReward.java (100%) rename {TourGuide/src => src}/main/java/com/openclassrooms/tourguide/service/RewardsService.java (100%) rename {TourGuide/src => src}/main/java/com/openclassrooms/tourguide/service/TourGuideService.java (100%) rename {TourGuide/src => src}/main/java/com/openclassrooms/tourguide/tracker/Tracker.java (100%) rename {TourGuide/src => src}/main/resources/application.properties (100%) rename {TourGuide/src => src}/test/java/com/openclassrooms/tourguide/TestPerformance.java (100%) rename {TourGuide/src => src}/test/java/com/openclassrooms/tourguide/TestRewardsService.java (100%) rename {TourGuide/src => src}/test/java/com/openclassrooms/tourguide/TestTourGuideService.java (100%) rename {TourGuide/src => src}/test/java/com/openclassrooms/tourguide/TourguideApplicationTests.java (100%) diff --git a/TourGuide/.github/workflows/maven.yml b/.github/workflows/maven.yml similarity index 100% rename from TourGuide/.github/workflows/maven.yml rename to .github/workflows/maven.yml diff --git a/TourGuide/mvnw b/TourGuide/mvnw deleted file mode 100644 index 66df285428..0000000000 --- a/TourGuide/mvnw +++ /dev/null @@ -1,308 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Apache Maven Wrapper startup batch script, version 3.2.0 -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /usr/local/etc/mavenrc ] ; then - . /usr/local/etc/mavenrc - fi - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "$(uname)" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME - else - JAVA_HOME="/Library/Java/Home"; export JAVA_HOME - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=$(java-config --jre-home) - fi -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$JAVA_HOME" ] && - JAVA_HOME=$(cygpath --unix "$JAVA_HOME") - [ -n "$CLASSPATH" ] && - CLASSPATH=$(cygpath --path --unix "$CLASSPATH") -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] && - JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)" -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="$(which javac)" - if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=$(which readlink) - if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then - if $darwin ; then - javaHome="$(dirname "\"$javaExecutable\"")" - javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac" - else - javaExecutable="$(readlink -f "\"$javaExecutable\"")" - fi - javaHome="$(dirname "\"$javaExecutable\"")" - javaHome=$(expr "$javaHome" : '\(.*\)/bin') - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=$(cd "$wdir/.." || exit 1; pwd) - fi - # end of workaround - done - printf '%s' "$(cd "$basedir" || exit 1; pwd)" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - # Remove \r in case we run on Windows within Git Bash - # and check out the repository with auto CRLF management - # enabled. Otherwise, we may read lines that are delimited with - # \r\n and produce $'-Xarg\r' rather than -Xarg due to word - # splitting rules. - tr -s '\r\n' ' ' < "$1" - fi -} - -log() { - if [ "$MVNW_VERBOSE" = true ]; then - printf '%s\n' "$1" - fi -} - -BASE_DIR=$(find_maven_basedir "$(dirname "$0")") -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR -log "$MAVEN_PROJECTBASEDIR" - -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" -if [ -r "$wrapperJarPath" ]; then - log "Found $wrapperJarPath" -else - log "Couldn't find $wrapperJarPath, downloading it ..." - - if [ -n "$MVNW_REPOURL" ]; then - wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" - else - wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" - fi - while IFS="=" read -r key value; do - # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' ) - safeValue=$(echo "$value" | tr -d '\r') - case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;; - esac - done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" - log "Downloading from: $wrapperUrl" - - if $cygwin; then - wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") - fi - - if command -v wget > /dev/null; then - log "Found wget ... using wget" - [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" - else - wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - log "Found curl ... using curl" - [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" - else - curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" - fi - else - log "Falling back to using Java to download" - javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java" - javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaSource=$(cygpath --path --windows "$javaSource") - javaClass=$(cygpath --path --windows "$javaClass") - fi - if [ -e "$javaSource" ]; then - if [ ! -e "$javaClass" ]; then - log " - Compiling MavenWrapperDownloader.java ..." - ("$JAVA_HOME/bin/javac" "$javaSource") - fi - if [ -e "$javaClass" ]; then - log " - Running MavenWrapperDownloader.java ..." - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath" - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -# If specified, validate the SHA-256 sum of the Maven wrapper jar file -wrapperSha256Sum="" -while IFS="=" read -r key value; do - case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;; - esac -done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" -if [ -n "$wrapperSha256Sum" ]; then - wrapperSha256Result=false - if command -v sha256sum > /dev/null; then - if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then - wrapperSha256Result=true - fi - elif command -v shasum > /dev/null; then - if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then - wrapperSha256Result=true - fi - else - echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." - echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." - exit 1 - fi - if [ $wrapperSha256Result = false ]; then - echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2 - echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2 - echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2 - exit 1 - fi -fi - -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$JAVA_HOME" ] && - JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME") - [ -n "$CLASSPATH" ] && - CLASSPATH=$(cygpath --path --windows "$CLASSPATH") - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR") -fi - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -# shellcheck disable=SC2086 # safe args -exec "$JAVACMD" \ - $MAVEN_OPTS \ - $MAVEN_DEBUG_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/TourGuide/mvnw.cmd b/TourGuide/mvnw.cmd deleted file mode 100644 index 95ba6f54ac..0000000000 --- a/TourGuide/mvnw.cmd +++ /dev/null @@ -1,205 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM https://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Apache Maven Wrapper startup batch script, version 3.2.0 -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* -if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" - -FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %WRAPPER_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) -) -@REM End of extension - -@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file -SET WRAPPER_SHA_256_SUM="" -FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B -) -IF NOT %WRAPPER_SHA_256_SUM%=="" ( - powershell -Command "&{"^ - "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^ - "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^ - " Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^ - " Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^ - " Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^ - " exit 1;"^ - "}"^ - "}" - if ERRORLEVEL 1 goto error -) - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% ^ - %JVM_CONFIG_MAVEN_PROPS% ^ - %MAVEN_OPTS% ^ - %MAVEN_DEBUG_OPTS% ^ - -classpath %WRAPPER_JAR% ^ - "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ - %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" -if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%"=="on" pause - -if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% - -cmd /C exit /B %ERROR_CODE% diff --git a/TourGuide/libs/RewardCentral.jar b/libs/RewardCentral.jar similarity index 100% rename from TourGuide/libs/RewardCentral.jar rename to libs/RewardCentral.jar diff --git a/TourGuide/libs/TripPricer.jar b/libs/TripPricer.jar similarity index 100% rename from TourGuide/libs/TripPricer.jar rename to libs/TripPricer.jar diff --git a/TourGuide/libs/gpsUtil.jar b/libs/gpsUtil.jar similarity index 100% rename from TourGuide/libs/gpsUtil.jar rename to libs/gpsUtil.jar diff --git a/TourGuide/pom.xml b/pom.xml similarity index 100% rename from TourGuide/pom.xml rename to pom.xml diff --git a/TourGuide/readme.md b/readme.md similarity index 100% rename from TourGuide/readme.md rename to readme.md diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/TourguideApplication.java b/src/main/java/com/openclassrooms/tourguide/TourguideApplication.java similarity index 100% rename from TourGuide/src/main/java/com/openclassrooms/tourguide/TourguideApplication.java rename to src/main/java/com/openclassrooms/tourguide/TourguideApplication.java diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/config/TourGuideModule.java b/src/main/java/com/openclassrooms/tourguide/config/TourGuideModule.java similarity index 100% rename from TourGuide/src/main/java/com/openclassrooms/tourguide/config/TourGuideModule.java rename to src/main/java/com/openclassrooms/tourguide/config/TourGuideModule.java diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/controller/TourGuideController.java b/src/main/java/com/openclassrooms/tourguide/controller/TourGuideController.java similarity index 100% rename from TourGuide/src/main/java/com/openclassrooms/tourguide/controller/TourGuideController.java rename to src/main/java/com/openclassrooms/tourguide/controller/TourGuideController.java diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/helper/InternalTestHelper.java b/src/main/java/com/openclassrooms/tourguide/helper/InternalTestHelper.java similarity index 100% rename from TourGuide/src/main/java/com/openclassrooms/tourguide/helper/InternalTestHelper.java rename to src/main/java/com/openclassrooms/tourguide/helper/InternalTestHelper.java diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/model/NearbyAttraction.java b/src/main/java/com/openclassrooms/tourguide/model/NearbyAttraction.java similarity index 100% rename from TourGuide/src/main/java/com/openclassrooms/tourguide/model/NearbyAttraction.java rename to src/main/java/com/openclassrooms/tourguide/model/NearbyAttraction.java diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/model/User.java b/src/main/java/com/openclassrooms/tourguide/model/User.java similarity index 100% rename from TourGuide/src/main/java/com/openclassrooms/tourguide/model/User.java rename to src/main/java/com/openclassrooms/tourguide/model/User.java diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/model/UserPreferences.java b/src/main/java/com/openclassrooms/tourguide/model/UserPreferences.java similarity index 100% rename from TourGuide/src/main/java/com/openclassrooms/tourguide/model/UserPreferences.java rename to src/main/java/com/openclassrooms/tourguide/model/UserPreferences.java diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/model/UserReward.java b/src/main/java/com/openclassrooms/tourguide/model/UserReward.java similarity index 100% rename from TourGuide/src/main/java/com/openclassrooms/tourguide/model/UserReward.java rename to src/main/java/com/openclassrooms/tourguide/model/UserReward.java diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java b/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java similarity index 100% rename from TourGuide/src/main/java/com/openclassrooms/tourguide/service/RewardsService.java rename to src/main/java/com/openclassrooms/tourguide/service/RewardsService.java diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/service/TourGuideService.java b/src/main/java/com/openclassrooms/tourguide/service/TourGuideService.java similarity index 100% rename from TourGuide/src/main/java/com/openclassrooms/tourguide/service/TourGuideService.java rename to src/main/java/com/openclassrooms/tourguide/service/TourGuideService.java diff --git a/TourGuide/src/main/java/com/openclassrooms/tourguide/tracker/Tracker.java b/src/main/java/com/openclassrooms/tourguide/tracker/Tracker.java similarity index 100% rename from TourGuide/src/main/java/com/openclassrooms/tourguide/tracker/Tracker.java rename to src/main/java/com/openclassrooms/tourguide/tracker/Tracker.java diff --git a/TourGuide/src/main/resources/application.properties b/src/main/resources/application.properties similarity index 100% rename from TourGuide/src/main/resources/application.properties rename to src/main/resources/application.properties diff --git a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestPerformance.java b/src/test/java/com/openclassrooms/tourguide/TestPerformance.java similarity index 100% rename from TourGuide/src/test/java/com/openclassrooms/tourguide/TestPerformance.java rename to src/test/java/com/openclassrooms/tourguide/TestPerformance.java diff --git a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestRewardsService.java b/src/test/java/com/openclassrooms/tourguide/TestRewardsService.java similarity index 100% rename from TourGuide/src/test/java/com/openclassrooms/tourguide/TestRewardsService.java rename to src/test/java/com/openclassrooms/tourguide/TestRewardsService.java diff --git a/TourGuide/src/test/java/com/openclassrooms/tourguide/TestTourGuideService.java b/src/test/java/com/openclassrooms/tourguide/TestTourGuideService.java similarity index 100% rename from TourGuide/src/test/java/com/openclassrooms/tourguide/TestTourGuideService.java rename to src/test/java/com/openclassrooms/tourguide/TestTourGuideService.java diff --git a/TourGuide/src/test/java/com/openclassrooms/tourguide/TourguideApplicationTests.java b/src/test/java/com/openclassrooms/tourguide/TourguideApplicationTests.java similarity index 100% rename from TourGuide/src/test/java/com/openclassrooms/tourguide/TourguideApplicationTests.java rename to src/test/java/com/openclassrooms/tourguide/TourguideApplicationTests.java