diff --git a/build.gradle b/build.gradle index 7ca6e70b23247e55fec137c7a4cd8433812d93d4..45fcb47b7dee31bbaa3bdf84773eb6d13e86c62a 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,6 @@ repositories { } dependencies { - implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-jdbc' @@ -47,7 +46,6 @@ dependencies { //Thanks for using https://jar-download.com // https://mvnrepository.com/artifact/com.h2database/h2 // if breaks - testImplementation group: 'com.h2database', name: 'h2', version: '1.4.192' } @@ -59,6 +57,3 @@ tasks.named('bootBuildImage') { tasks.named('test') { useJUnitPlatform() } - - - diff --git a/src/main/java/Team5.Smarttowns/Data/Towns.db b/src/main/java/Team5.Smarttowns/Data/Towns.db deleted file mode 100644 index 2532550d9acf4d8abc21a6e6ed89629908b72a3e..0000000000000000000000000000000000000000 Binary files a/src/main/java/Team5.Smarttowns/Data/Towns.db and /dev/null differ diff --git a/src/main/java/Team5/SmartTowns/Data/Calculator.java b/src/main/java/Team5/SmartTowns/Data/Calculator.java deleted file mode 100644 index 651aec422f60c9b2550a008255b23b46e2aa55a7..0000000000000000000000000000000000000000 --- a/src/main/java/Team5/SmartTowns/Data/Calculator.java +++ /dev/null @@ -1,21 +0,0 @@ -package Team5.SmartTowns.Data; - -public class Calculator { - - - public int divide(int i, int i1) { - return i / i1; - } - - public int add(int i, int i1){ - return i+i1; - } - public int subtract(int i, int i1){ - return i-i1; - } - - public int multiply(int i, int i1){ - return i*i1; - } - -} diff --git a/src/main/java/Team5/SmartTowns/Data/DatabaseController.java b/src/main/java/Team5/SmartTowns/Data/DatabaseController.java deleted file mode 100644 index b60e209ca273c738be829489f4d52d334428ca43..0000000000000000000000000000000000000000 --- a/src/main/java/Team5/SmartTowns/Data/DatabaseController.java +++ /dev/null @@ -1,35 +0,0 @@ -//package Team5.SmartTowns.Data; -// -//import Team5.SmartTowns.users.User; -//import Team5.SmartTowns.users.UserRepository; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.stereotype.Controller; -//import org.springframework.web.bind.annotation.GetMapping; -//import org.springframework.web.servlet.ModelAndView; -// -//import java.util.*; -//@Controller -//public class DatabaseController { -// -// -// @Autowired -// private LocationRepository LocationRepository; -// @Autowired -// private trailsRepository trailsRepository; -// -// -// @GetMapping("/trailList") -// public ModelAndView trailList() { -// ModelAndView mav1 = new ModelAndView("towns/trailsData"); -// List<trail> trail = trailsRepository.getAllTrails(); -// mav1.addObject("trails", trail); -// return mav1; -// } -// @GetMapping("locationList") -// public ModelAndView locationList(){ -// ModelAndView mav2 = new ModelAndView("towns/locationData"); -// List<Location> Locations = LocationRepository.getAllLocation(); -// mav2.addObject("location", Locations); -// return mav2; -// } -//} diff --git a/src/main/java/Team5/SmartTowns/Data/LocationRepository.java b/src/main/java/Team5/SmartTowns/Data/LocationRepository.java deleted file mode 100644 index 4a3e8588ff33ac58f246a2c7be46fbd9d1a78f89..0000000000000000000000000000000000000000 --- a/src/main/java/Team5/SmartTowns/Data/LocationRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -//Holds locations data repository (landmarks) -package Team5.SmartTowns.Data; - -import java.util.List; - - -public interface LocationRepository { - List<Location> getAllLocation(); - void addLocation(Location loc); - - -} diff --git a/src/main/java/Team5/SmartTowns/Data/LocationRepositoryJDBC.java b/src/main/java/Team5/SmartTowns/Data/LocationRepositoryJDBC.java deleted file mode 100644 index cfbc7344115da107cfddcb090b2668cd8f3598b6..0000000000000000000000000000000000000000 --- a/src/main/java/Team5/SmartTowns/Data/LocationRepositoryJDBC.java +++ /dev/null @@ -1,61 +0,0 @@ -//Implements the locations repository using JDBC -package Team5.SmartTowns.Data; - -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.core.RowMapper; -import org.springframework.stereotype.Repository; - -import javax.sql.DataSource; -import java.util.List; - -@Repository -public class LocationRepositoryJDBC implements LocationRepository { - private JdbcTemplate jdbc; - private RowMapper<Location> locationMapper; - - public LocationRepositoryJDBC(JdbcTemplate aJdbc) { - this.jdbc = aJdbc; - setlocationMapper(); - } - private void setlocationMapper(){ - locationMapper = (rs, i) -> new Location( - - rs.getString("locationName"), - rs.getString("locationEmail"), - rs.getString("locationDescription"), - rs.getString("locationPlace"), - rs.getInt("locationTrailID") - ); - } - public String getCountOfEmployees() { - return jdbc.queryForObject("SELECT COUNT(*) FROM locations",String.class); - } - - public List<Location> getAllLocation2(JdbcTemplate aJdbc){ - String sql= "SELECT * FROM locations"; - return aJdbc.query(sql, locationMapper); - } - public List<Location> getAllLocation(){ - String sql= "SELECT * FROM locations"; - return jdbc.query(sql, locationMapper); - } - - @Override // intended implementation at current: user data from templates/Landmarks/LandmarkFormTh.html is added to the Location table - public void addLocation(Location loc) { - String sql = "insert into locations( locationName , locationEmail,locationDescription,locationPlace, locationTrailID) values (?,?,?,?,?)"; - - jdbc.update(sql,loc.getLocationName(),loc.getLocationEmail(),loc.getLocationDescription(),loc.getLocationPlace(),loc.getLocationTrailID()); - } - - - public void setDataSource(DataSource dataSource) { - jdbc = new JdbcTemplate(dataSource); - } - - public LocationRepositoryJDBC() { - } - - public void setJdbc(JdbcTemplate jdbc) { - this.jdbc = jdbc; - } -} diff --git a/src/main/java/Team5/SmartTowns/Data/Main.java b/src/main/java/Team5/SmartTowns/Data/Main.java deleted file mode 100644 index 24bd503ecdd2af87ed42372600ddd6b742c74b4a..0000000000000000000000000000000000000000 --- a/src/main/java/Team5/SmartTowns/Data/Main.java +++ /dev/null @@ -1,16 +0,0 @@ -//package Team5.SmartTowns.Data; -// -//import org.springframework.beans.factory.annotation.Autowired; -// -//import java.util.List; -// -//public class Main { -// @Autowired -// private LocationRepository LocationRepository; -// List<Location> approvedNumber= LocationRepository.approvedLocations(); -// public static void main(String[] args) { -// for (Location loc: approvedNumber){} -// -// -// } -//} diff --git a/src/main/java/Team5/SmartTowns/Data/MockUser.java b/src/main/java/Team5/SmartTowns/Data/MockUser.java deleted file mode 100644 index 0e9a4e253490247c45b9bdf80d4121f30572b4ac..0000000000000000000000000000000000000000 --- a/src/main/java/Team5/SmartTowns/Data/MockUser.java +++ /dev/null @@ -1,17 +0,0 @@ -package Team5.SmartTowns.Data; - -import Team5.SmartTowns.trails.Trail; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.core.RowMapper; - -import java.util.List; - -public class MockUser { - - private JdbcTemplate jdbc; - private RowMapper<Trail> trailMapper; - public List<Trail> getAllTrails(){ - String sql= "SELECT * FROM trails"; - return jdbc.query(sql, trailMapper); - } -} diff --git a/src/main/java/Team5/SmartTowns/Data/QRCodes.java b/src/main/java/Team5/SmartTowns/Data/QRCodes.java deleted file mode 100644 index ef350eb418b959e1069ee51d061471448c3b7457..0000000000000000000000000000000000000000 --- a/src/main/java/Team5/SmartTowns/Data/QRCodes.java +++ /dev/null @@ -1,4 +0,0 @@ -package Team5.SmartTowns.Data; - -public class QRCodes { -} diff --git a/src/main/java/Team5/SmartTowns/Data/trailsRepository.java b/src/main/java/Team5/SmartTowns/Data/trailsRepository.java deleted file mode 100644 index eee8c92924a6e96b5d6e324b7501f7133f7d0f82..0000000000000000000000000000000000000000 --- a/src/main/java/Team5/SmartTowns/Data/trailsRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -//Holds trails data repository -package Team5.SmartTowns.Data; - -import java.util.List; - -public interface trailsRepository { - List<trail> getAllTrails(); -} \ No newline at end of file diff --git a/src/main/java/Team5/SmartTowns/Towns/TownStorage.java b/src/main/java/Team5/SmartTowns/Towns/TownStorage.java deleted file mode 100644 index d2d99ea992086630324fa131ad5bb410acd3c425..0000000000000000000000000000000000000000 --- a/src/main/java/Team5/SmartTowns/Towns/TownStorage.java +++ /dev/null @@ -1,44 +0,0 @@ -package Team5.SmartTowns.Towns; - -import java.util.ArrayList; -import java.util.List; - -public class TownStorage { - private List<Towns> townList; - private static TownStorage singleton; - - TownStorage() { - townList = new ArrayList<>(); - townList.addAll( - List.of( - new Towns("Caerphilly",01,3,70,"/images/CaerphillyCastle.jpg"), - new Towns("Risca",02,2,34,"/images/RiscaBanner.jpg"), - new Towns("Penarth",03,5,0,"/images/PenarthBanner.jpg"), - new Towns("Penarth",03,5,50,"/images/PenarthBanner.jpg"), - new Towns("Caerphilly",01,3,70,"/images/CaerphillyCastle.jpg"), - new Towns("Risca",02,2,90,"/images/RiscaBanner.jpg"), - new Towns("Penarth",03,5,100,"/images/PenarthBanner.jpg") - - - - ) - - ); - - } - public static TownStorage getInstance() { - if (singleton == null) { - singleton = new TownStorage(); - - } - return singleton; - } - - public List<Towns> getTownList() { - return townList; - } - - - - -} diff --git a/src/main/java/Team5/SmartTowns/data/DatabaseController.java b/src/main/java/Team5/SmartTowns/data/DatabaseController.java new file mode 100644 index 0000000000000000000000000000000000000000..c93f4b28096b507eccf0d4b44aecdb856486ac04 --- /dev/null +++ b/src/main/java/Team5/SmartTowns/data/DatabaseController.java @@ -0,0 +1,86 @@ +<<<<<<< HEAD:src/main/java/Team5/SmartTowns/Data/DatabaseController.java +//package Team5.SmartTowns.Data; +// +//import Team5.SmartTowns.users.User; +//import Team5.SmartTowns.users.UserRepository; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.stereotype.Controller; +//import org.springframework.web.bind.annotation.GetMapping; +//import org.springframework.web.servlet.ModelAndView; +// +//import java.util.*; +//@Controller +//public class DatabaseController { +// +// +// @Autowired +// private LocationRepository LocationRepository; +// @Autowired +// private trailsRepository trailsRepository; +// +// +// @GetMapping("/trailList") +// public ModelAndView trailList() { +// ModelAndView mav1 = new ModelAndView("towns/trailsData"); +// List<trail> trail = trailsRepository.getAllTrails(); +// mav1.addObject("trails", trail); +// return mav1; +// } +// @GetMapping("locationList") +// public ModelAndView locationList(){ +// ModelAndView mav2 = new ModelAndView("towns/locationData"); +// List<Location> Locations = LocationRepository.getAllLocation(); +// mav2.addObject("location", Locations); +// return mav2; +// } +//} +======= +package Team5.SmartTowns.data; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.servlet.ModelAndView; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.*; + +@Controller +public class DatabaseController { + + @Autowired + private LocationRepository locationRepository; + @Autowired + private TrailsRepository trailsRepository; + + @GetMapping("/trailList") + public ModelAndView trailList() { + ModelAndView mav1 = new ModelAndView("towns/trailsData"); + List<Trail> trail = trailsRepository.getAllTrails(); + mav1.addObject("trails", trail); + return mav1; + } + @GetMapping("locationList") + public ModelAndView locationList(){ + ModelAndView mav2 = new ModelAndView("towns/locationData"); + List<Location> Locations = locationRepository.getAllLocation(); + mav2.addObject("location", Locations); + return mav2; + } + +// +// public List<Location> approvedLocations(){ +// List<Location> locations = locationRepository.getAllLocation(); +// List<Location> locationApprovalList; +//// for (int i=0;i<locations.size();i++){ +//// location +// for (Location loc :locations){ +// if (loc.isLocationApproved()) { +// locationApprovalList.add(loc); +// } +// } return locationApprovalList; +// } +} +>>>>>>> main:src/main/java/Team5/SmartTowns/data/DatabaseController.java diff --git a/src/main/java/Team5/SmartTowns/Data/Location.java b/src/main/java/Team5/SmartTowns/data/Location.java similarity index 71% rename from src/main/java/Team5/SmartTowns/Data/Location.java rename to src/main/java/Team5/SmartTowns/data/Location.java index 7ec4ede38d187bb5b6a667662b7cf7241661defe..7fd2de0c1d0295a2c0af26372e233abfee2291a8 100644 --- a/src/main/java/Team5/SmartTowns/Data/Location.java +++ b/src/main/java/Team5/SmartTowns/data/Location.java @@ -1,5 +1,5 @@ //Holds variable data for the locations table (landmarks) -package Team5.SmartTowns.Data; +package Team5.SmartTowns.data; import lombok.AllArgsConstructor; import lombok.Data; @@ -16,7 +16,15 @@ public class Location { private String locationPlace; private int locationTrailID; +<<<<<<< HEAD:src/main/java/Team5/SmartTowns/Data/Location.java +======= + private boolean locationApproved; + + public Location() { + + } +>>>>>>> main:src/main/java/Team5/SmartTowns/data/Location.java @Override public String toString() { @@ -26,6 +34,7 @@ public class Location { locationDescription + '\'' + locationPlace + '\'' + locationTrailID + + locationApproved+ '}'; } @@ -49,10 +58,15 @@ public class Location { return locationTrailID; } +<<<<<<< HEAD:src/main/java/Team5/SmartTowns/Data/Location.java public int testMe(){ int a=4; return 4; +======= + public boolean isLocationApproved() { + return locationApproved; +>>>>>>> main:src/main/java/Team5/SmartTowns/data/Location.java } } diff --git a/src/main/java/Team5/SmartTowns/data/LocationRepository.java b/src/main/java/Team5/SmartTowns/data/LocationRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..7d77f923525ba9509db32677925c94536e690765 --- /dev/null +++ b/src/main/java/Team5/SmartTowns/data/LocationRepository.java @@ -0,0 +1,29 @@ +//Holds locations data repository (landmarks) +<<<<<<< HEAD:src/main/java/Team5/SmartTowns/Data/LocationRepository.java +package Team5.SmartTowns.Data; +======= +package Team5.SmartTowns.data; +>>>>>>> main:src/main/java/Team5/SmartTowns/data/LocationRepository.java + +import java.util.List; + + +public interface LocationRepository { + List<Location> getAllLocation(); + void addLocation(Location loc); + + +<<<<<<< HEAD:src/main/java/Team5/SmartTowns/Data/LocationRepository.java +======= + List<Location> getApprovedLocations(); + +// List<Location> getApprovedLocations2(List<Location> list); + + List<Location> getUnapprovedLocations(); + + +// List<Location> approvedLocations(); + + +>>>>>>> main:src/main/java/Team5/SmartTowns/data/LocationRepository.java +} diff --git a/src/main/java/Team5/SmartTowns/data/LocationRepositoryJDBC.java b/src/main/java/Team5/SmartTowns/data/LocationRepositoryJDBC.java new file mode 100644 index 0000000000000000000000000000000000000000..4a1a0108d5713ff95bd69877a9da500fa4ddec49 --- /dev/null +++ b/src/main/java/Team5/SmartTowns/data/LocationRepositoryJDBC.java @@ -0,0 +1,154 @@ +//Implements the locations repository using JDBC +<<<<<<< HEAD:src/main/java/Team5/SmartTowns/Data/LocationRepositoryJDBC.java +package Team5.SmartTowns.Data; +======= +package Team5.SmartTowns.data; +>>>>>>> main:src/main/java/Team5/SmartTowns/data/LocationRepositoryJDBC.java + +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.stereotype.Repository; + +<<<<<<< HEAD:src/main/java/Team5/SmartTowns/Data/LocationRepositoryJDBC.java +import javax.sql.DataSource; +======= +import java.util.ArrayList; +>>>>>>> main:src/main/java/Team5/SmartTowns/data/LocationRepositoryJDBC.java +import java.util.List; + +@Repository +public class LocationRepositoryJDBC implements LocationRepository { +<<<<<<< HEAD:src/main/java/Team5/SmartTowns/Data/LocationRepositoryJDBC.java + private JdbcTemplate jdbc; +======= + private JdbcTemplate jdbc; +>>>>>>> main:src/main/java/Team5/SmartTowns/data/LocationRepositoryJDBC.java + private RowMapper<Location> locationMapper; + + public LocationRepositoryJDBC(JdbcTemplate aJdbc) { + this.jdbc = aJdbc; + setlocationMapper(); + } +<<<<<<< HEAD:src/main/java/Team5/SmartTowns/Data/LocationRepositoryJDBC.java +======= + +// public LocationRepositoryJDBC() { +// JdbcTemplate ajdbc = new JdbcTemplate(); +// this.jdbc =ajdbc; +// setlocationMapper(); +// +// } + + +>>>>>>> main:src/main/java/Team5/SmartTowns/data/LocationRepositoryJDBC.java + private void setlocationMapper(){ + locationMapper = (rs, i) -> new Location( + + rs.getString("locationName"), + rs.getString("locationEmail"), + rs.getString("locationDescription"), + rs.getString("locationPlace"), +<<<<<<< HEAD:src/main/java/Team5/SmartTowns/Data/LocationRepositoryJDBC.java + rs.getInt("locationTrailID") + ); + } + public String getCountOfEmployees() { + return jdbc.queryForObject("SELECT COUNT(*) FROM locations",String.class); + } + + public List<Location> getAllLocation2(JdbcTemplate aJdbc){ + String sql= "SELECT * FROM locations"; + return aJdbc.query(sql, locationMapper); + } +======= + rs.getInt("locationTrailID"), + rs.getBoolean("locationApproved") + ); + } +>>>>>>> main:src/main/java/Team5/SmartTowns/data/LocationRepositoryJDBC.java + public List<Location> getAllLocation(){ + String sql= "SELECT * FROM locations"; + return jdbc.query(sql, locationMapper); + } +<<<<<<< HEAD:src/main/java/Team5/SmartTowns/Data/LocationRepositoryJDBC.java + + @Override // intended implementation at current: user data from templates/Landmarks/LandmarkFormTh.html is added to the Location table + public void addLocation(Location loc) { + String sql = "insert into locations( locationName , locationEmail,locationDescription,locationPlace, locationTrailID) values (?,?,?,?,?)"; +======= +// public LocationRepositoryJDBC() { +// JdbcTemplate ajdbc = new JdbcTemplate(); +// this.jdbc =ajdbc; +// setlocationMapper(); +// +// } +// public LocationRepositoryJDBC(JdbcTemplate jdbc, RowMapper<Location> locationMapper) { +// this.jdbc = jdbc; +// this.locationMapper = locationMapper; +// } + + @Override // intended implementation at current: user data from templates/Landmarks/LandmarkFormTh.html is added to the Location table + public void addLocation(Location loc) { + String sql = "insert into locations( locationName , locationEmail,locationDescription,locationPlace, locationTrailID, locationApproved) values (?,?,?,?,?,?)"; +>>>>>>> main:src/main/java/Team5/SmartTowns/data/LocationRepositoryJDBC.java + + jdbc.update(sql,loc.getLocationName(),loc.getLocationEmail(),loc.getLocationDescription(),loc.getLocationPlace(),loc.getLocationTrailID()); + } + +<<<<<<< HEAD:src/main/java/Team5/SmartTowns/Data/LocationRepositoryJDBC.java + + public void setDataSource(DataSource dataSource) { + jdbc = new JdbcTemplate(dataSource); + } + + public LocationRepositoryJDBC() { + } + + public void setJdbc(JdbcTemplate jdbc) { + this.jdbc = jdbc; + } +======= + @Override + public List<Location> getApprovedLocations(){ + JdbcTemplate jdbc = new JdbcTemplate(); + List<Location> locations = new LocationRepositoryJDBC(jdbc).getAllLocation(); + List<Location> locationApprovalList= new ArrayList<Location>(); + for (Location loc :locations){ + if (loc.isLocationApproved()) { + locationApprovalList.add(loc); + } + } return locationApprovalList; + } +// +// @Override +// public List<Location> getApprovedLocations2(List<Location> list){ +// +// List<Location> locationApprovalList= new ArrayList<Location>(); +// for (Location loc :list){ +// if (loc.isLocationApproved()) { +// locationApprovalList.add(loc); +// } +// } return locationApprovalList; +// } +// + + + @Override + public List<Location> getUnapprovedLocations(){ + List<Location> locations = getAllLocation(); + List<Location> locationUnapprovedList= new ArrayList<Location>(); + for (Location loc :locations){ + if (!loc.isLocationApproved()) { + locationUnapprovedList.add(loc); + } + } return locationUnapprovedList; + } + + +// public JdbcTemplate getJdbc() { +// return jdbc; +// } + + +>>>>>>> main:src/main/java/Team5/SmartTowns/data/LocationRepositoryJDBC.java +} diff --git a/src/main/java/Team5/SmartTowns/Data/Town.java b/src/main/java/Team5/SmartTowns/data/Town.java similarity index 100% rename from src/main/java/Team5/SmartTowns/Data/Town.java rename to src/main/java/Team5/SmartTowns/data/Town.java diff --git a/src/main/java/Team5/SmartTowns/Data/TownRepository.java b/src/main/java/Team5/SmartTowns/data/TownRepository.java similarity index 100% rename from src/main/java/Team5/SmartTowns/Data/TownRepository.java rename to src/main/java/Team5/SmartTowns/data/TownRepository.java diff --git a/src/main/java/Team5/SmartTowns/Data/TownRepositoryJDBC.java b/src/main/java/Team5/SmartTowns/data/TownRepositoryJDBC.java similarity index 100% rename from src/main/java/Team5/SmartTowns/Data/TownRepositoryJDBC.java rename to src/main/java/Team5/SmartTowns/data/TownRepositoryJDBC.java diff --git a/src/main/java/Team5/SmartTowns/Data/trail.java b/src/main/java/Team5/SmartTowns/data/Trail.java similarity index 69% rename from src/main/java/Team5/SmartTowns/Data/trail.java rename to src/main/java/Team5/SmartTowns/data/Trail.java index 86e78b96712ecf7a5756edbf20a4bae35839ca70..61ab540fce97c94b709c888e3c261db35c318849 100644 --- a/src/main/java/Team5/SmartTowns/Data/trail.java +++ b/src/main/java/Team5/SmartTowns/data/Trail.java @@ -1,12 +1,13 @@ //Holds variable data for the trails table -package Team5.SmartTowns.Data; +package Team5.SmartTowns.data; import lombok.AllArgsConstructor; import lombok.Data; @Data @AllArgsConstructor -public class trail { +public class Trail { private int trailsId; private String name; + private Boolean tru; } diff --git a/src/main/java/Team5/SmartTowns/Data/trailsRepositoryJDBC.java b/src/main/java/Team5/SmartTowns/data/TrailsRepositoryJDBC.java similarity index 59% rename from src/main/java/Team5/SmartTowns/Data/trailsRepositoryJDBC.java rename to src/main/java/Team5/SmartTowns/data/TrailsRepositoryJDBC.java index 58aa84a95b00b8f8b5d7f97d240e04f405d2ac3b..0bb20867153d77c2fd47f3e031bf63c7c1fdac7e 100644 --- a/src/main/java/Team5/SmartTowns/Data/trailsRepositoryJDBC.java +++ b/src/main/java/Team5/SmartTowns/data/TrailsRepositoryJDBC.java @@ -1,5 +1,5 @@ //Implements the trails repository using JDBC -package Team5.SmartTowns.Data; +package Team5.SmartTowns.data; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; @@ -8,20 +8,21 @@ import org.springframework.stereotype.Repository; import java.util.List; @Repository -public class trailsRepositoryJDBC implements trailsRepository{ +public class TrailsRepositoryJDBC implements TrailsRepository { private JdbcTemplate jdbc; - private RowMapper<trail> trailMapper; - public trailsRepositoryJDBC(JdbcTemplate aJdbc){ + private RowMapper<Trail> trailMapper; + public TrailsRepositoryJDBC(JdbcTemplate aJdbc){ this.jdbc = aJdbc; settrailsMapper(); } private void settrailsMapper(){ - trailMapper = (rs, i) -> new trail( + trailMapper = (rs, i) -> new Trail( rs.getInt("trailID"), - rs.getString("name") + rs.getString("name"), + rs.getBoolean("tru") ); } - public List<trail> getAllTrails(){ + public List<Trail> getAllTrails(){ String sql= "SELECT * FROM trails"; return jdbc.query(sql, trailMapper); } diff --git a/src/main/java/Team5/SmartTowns/Landmarks/Landmarks.java b/src/main/java/Team5/SmartTowns/landmarks/Landmarks.java similarity index 89% rename from src/main/java/Team5/SmartTowns/Landmarks/Landmarks.java rename to src/main/java/Team5/SmartTowns/landmarks/Landmarks.java index f9ceacf15728a5f7cdf9b36c2577dbb1aa0c7624..6974c1e997c5b2dd6d7396f44ea0cbe4565331c7 100644 --- a/src/main/java/Team5/SmartTowns/Landmarks/Landmarks.java +++ b/src/main/java/Team5/SmartTowns/landmarks/Landmarks.java @@ -1,8 +1,6 @@ -package Team5.SmartTowns.Landmarks; +package Team5.SmartTowns.landmarks; -import Team5.SmartTowns.trails.Trail; import jakarta.validation.constraints.Email; -import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotEmpty; import lombok.AllArgsConstructor; import lombok.Data; @@ -18,7 +16,7 @@ public class Landmarks { // Initialized object to getID from trail. //Predefined Landmark for Dragons Tale. - private static List<Landmarks> landmarksDragonstrail = List.of( + public static List<Landmarks> landmarksDragonstrail = List.of( new Landmarks( 1, "A scent of...Dragon", "The Dragon has been spotted near by, find the QR code to continue" , "Start your discovery, at the sweet shop."), new Landmarks( 2, "They've been found!", "Don't let them escape, find the next QR code to continue!", "Location test") ); @@ -43,6 +41,4 @@ public class Landmarks { this.landmarkName = landmarkName; this.landmarkDescription = landmarkDescription; this.landmarkLocation = landmarkLocation; } - - } diff --git a/src/main/java/Team5/SmartTowns/Landmarks/LandmarksController.java b/src/main/java/Team5/SmartTowns/landmarks/LandmarksController.java similarity index 90% rename from src/main/java/Team5/SmartTowns/Landmarks/LandmarksController.java rename to src/main/java/Team5/SmartTowns/landmarks/LandmarksController.java index dc963c2b57a150b83dcbd37cfc15470cbf414205..d5d326cdb733339ff3c3ab298090776af9036fc3 100644 --- a/src/main/java/Team5/SmartTowns/Landmarks/LandmarksController.java +++ b/src/main/java/Team5/SmartTowns/landmarks/LandmarksController.java @@ -1,7 +1,7 @@ -package Team5.SmartTowns.Landmarks; +package Team5.SmartTowns.landmarks; -import Team5.SmartTowns.Data.Location; -import Team5.SmartTowns.Data.LocationRepository; +import Team5.SmartTowns.data.Location; +import Team5.SmartTowns.data.LocationRepository; import jakarta.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -37,7 +37,7 @@ public class LandmarksController { } else{ // converts valid response using Location constructor into a submittable format to the sql table - Location loc= new Location(landmarks.getLandmarkName(), landmarks.getLandmarkEmail(), landmarks.getLandmarkDescription(), landmarks.getLandmarkLocation(), landmarks.getTrailID()); + Location loc= new Location(landmarks.getLandmarkName(), landmarks.getLandmarkEmail(), landmarks.getLandmarkDescription(), landmarks.getLandmarkLocation(), landmarks.getTrailID(), false); System.out.println(loc); locationRepository.addLocation(loc); // adds valid landmark to locations table ModelAndView modelAndView = new ModelAndView("redirect:/home"); diff --git a/src/main/java/Team5/SmartTowns/placeswithcoordinates/LocationsCoordinates.java b/src/main/java/Team5/SmartTowns/placeswithcoordinates/LocationsCoordinates.java index 4bcd7ad952f844add8bd89cbd1d181d07efc714f..349adc85e3752bd0f523750e2b5bc8dff25f6e76 100644 --- a/src/main/java/Team5/SmartTowns/placeswithcoordinates/LocationsCoordinates.java +++ b/src/main/java/Team5/SmartTowns/placeswithcoordinates/LocationsCoordinates.java @@ -2,12 +2,14 @@ package Team5.SmartTowns.placeswithcoordinates; -import Team5.SmartTowns.Data.Location; -import Team5.SmartTowns.Data.LocationRepositoryJDBC; +import Team5.SmartTowns.data.Location; +import Team5.SmartTowns.data.LocationRepositoryJDBC; import lombok.AllArgsConstructor; +import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.jdbc.core.JdbcTemplate; +import java.text.DecimalFormat; import java.util.List; //@Data @@ -91,10 +93,10 @@ public class LocationsCoordinates { // return new LocationRepositoryJDBC(jdbcSuper).getApprovedLocations(); // } -// public List<Location> getFullUnapprovedLocations(JdbcTemplate aJdbc){ -//// LocationsCoordinates jdbcSuper= new LocationsCoordinates(aJdbc); -// return new LocationRepositoryJDBC(aJdbc).getUnapprovedLocations(); -// } + public List<Location> getFullUnapprovedLocations(JdbcTemplate aJdbc){ +// LocationsCoordinates jdbcSuper= new LocationsCoordinates(aJdbc); + return new LocationRepositoryJDBC(aJdbc).getUnapprovedLocations(); + } diff --git a/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesController.java b/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesController.java index 8a497dd4b003a2df4a949680fc2ddc31035a93f9..8d142f83569aa8816ea8d9d1b32c6b795ab96c00 100644 --- a/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesController.java +++ b/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesController.java @@ -1,7 +1,7 @@ package Team5.SmartTowns.placeswithcoordinates; -import Team5.SmartTowns.Data.Location; -import Team5.SmartTowns.Data.LocationRepository; +import Team5.SmartTowns.data.Location; +import Team5.SmartTowns.data.LocationRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; diff --git a/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesCoordinatesRepository.java b/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesCoordinatesRepository.java index 0e091de02fec89d86e185129318a2e073fec0c9e..a5e03d93ab75a20f3c380ca5c1b3d11c6f0b5807 100644 --- a/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesCoordinatesRepository.java +++ b/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesCoordinatesRepository.java @@ -1,6 +1,6 @@ package Team5.SmartTowns.placeswithcoordinates; -import Team5.SmartTowns.Data.Location; +import Team5.SmartTowns.data.Location; import org.springframework.jdbc.core.JdbcTemplate; import java.util.List; diff --git a/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesCoordinatesRepositoryJDBC.java b/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesCoordinatesRepositoryJDBC.java index 4cd83b25736d6fa5c135b44e2810758a47c7a2bd..dfca28ecd791d6ec0dc2a3040bc62274c07ff8c3 100644 --- a/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesCoordinatesRepositoryJDBC.java +++ b/src/main/java/Team5/SmartTowns/placeswithcoordinates/PlacesCoordinatesRepositoryJDBC.java @@ -1,7 +1,8 @@ package Team5.SmartTowns.placeswithcoordinates; -import Team5.SmartTowns.Data.Location; -import Team5.SmartTowns.Data.LocationRepositoryJDBC; +import Team5.SmartTowns.data.Location; +import Team5.SmartTowns.data.LocationRepositoryJDBC; +import org.springframework.boot.autoconfigure.integration.IntegrationProperties; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; @@ -73,16 +74,16 @@ public class PlacesCoordinatesRepositoryJDBC implements PlacesCoordinatesReposit } -// public List<Location> getFullApprovedLocations(JdbcTemplate aJdbc) { -//// LocationsCoordinates jdbcSuper= new LocationsCoordinates(aJdbc); -// return new LocationRepositoryJDBC(aJdbc).getApprovedLocations(); -// } - - @Override //TODO CHECK public List<Location> getFullApprovedLocations(JdbcTemplate aJdbc) { - return null; +// LocationsCoordinates jdbcSuper= new LocationsCoordinates(aJdbc); + return new LocationRepositoryJDBC(aJdbc).getApprovedLocations(); } +// @Override //TODO CHECK +// public List<Location> getFullApprovedLocations(JdbcTemplate aJdbc) { +// return null; +// } + public boolean checkInputtedCoordsMatchTown(String inpLatCoords, String inpLongCoords, String townName){ PlacesCoordinatesRepositoryJDBC jbdcsecond = new PlacesCoordinatesRepositoryJDBC(jdbc); diff --git a/src/main/java/Team5/SmartTowns/rewards/Badge.java b/src/main/java/Team5/SmartTowns/rewards/Badge.java index 25c231e14e3f0afdd4ecfc2d6e9f352925224097..976238804f5686bfd77e2bd028f7cc79ecf18698 100644 --- a/src/main/java/Team5/SmartTowns/rewards/Badge.java +++ b/src/main/java/Team5/SmartTowns/rewards/Badge.java @@ -1,51 +1,26 @@ /*AUTHOR: Gabriel Copat*/ package Team5.SmartTowns.rewards; -import lombok.Data; +import lombok.Getter; -import java.io.File; -import java.util.Objects; -@Data -public class Badge { +@Getter +public class Badge extends Reward { /* Badges can be earned by completing certain goals. * They are displayed in the user profile page * * For example, one might earn a badge after visiting 20 locations */ + static final String DEFAULT_IMAGE = "0.png"; - int id; - String name; - String description; - String imgPath; int difficulty; //1-5 public Badge(int id, String name, String description, int difficulty) { - this.id = id; - this.name = name; - this.description = description; + super(id, name, description); this.difficulty = difficulty; - imgPath = findImagePath(); - } - - private String findImagePath(){ - /* Finds the image in the Path folder, if image is not found assigns default image */ - String imgPath = "images/rewards/badges/" + id + ".jpg"; - String notFoundPath = "/images/rewards/badges/0.png"; - - File imgFile = new File("src/main/resources/static/" + imgPath); - return imgFile.exists() ? imgPath : notFoundPath; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Badge badge = (Badge) o; - return id == badge.id && Objects.equals(name, badge.name); } @Override - public int hashCode() { - return Objects.hash(id, name); + public String getImgFolder() { + return "badges"; } } diff --git a/src/main/java/Team5/SmartTowns/rewards/BadgesRepository.java b/src/main/java/Team5/SmartTowns/rewards/BadgesRepository.java deleted file mode 100644 index 56b1019cbe016a7c687b5ac83973679e8f498eef..0000000000000000000000000000000000000000 --- a/src/main/java/Team5/SmartTowns/rewards/BadgesRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -//Holds locations data repository -package Team5.SmartTowns.rewards; - -import java.util.List; - -public interface BadgesRepository { - List<Badge> getAllBadges(); -} - diff --git a/src/main/java/Team5/SmartTowns/rewards/BadgesRepositoryJDBC.java b/src/main/java/Team5/SmartTowns/rewards/BadgesRepositoryJDBC.java deleted file mode 100644 index 7c22061e894a633bf9c047f69f575daf9366b493..0000000000000000000000000000000000000000 --- a/src/main/java/Team5/SmartTowns/rewards/BadgesRepositoryJDBC.java +++ /dev/null @@ -1,33 +0,0 @@ -//Implements the locations repository using JDBC -package Team5.SmartTowns.rewards; - -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.core.RowMapper; -import org.springframework.stereotype.Repository; - -import java.util.List; - -@Repository -public class BadgesRepositoryJDBC implements BadgesRepository { - private JdbcTemplate jdbc; - private RowMapper<Badge> badgeMapper; - - public BadgesRepositoryJDBC(JdbcTemplate aJdbc) { - this.jdbc = aJdbc; - setBadgeMapper(); - } - private void setBadgeMapper(){ - badgeMapper = (rs, i) -> new Badge( - rs.getInt("badgeID"), - rs.getString("name"), - rs.getString("description"), - rs.getInt("difficulty") - ); - } - - @Override - public List<Badge> getAllBadges(){ - String sql= "SELECT * FROM badges"; - return jdbc.query(sql, badgeMapper); - } -} diff --git a/src/main/java/Team5/SmartTowns/rewards/RewardsController.java b/src/main/java/Team5/SmartTowns/rewards/RewardsController.java deleted file mode 100644 index af9d33cba34dd12ac6aa5ca1e54320b8124af9d4..0000000000000000000000000000000000000000 --- a/src/main/java/Team5/SmartTowns/rewards/RewardsController.java +++ /dev/null @@ -1,7 +0,0 @@ -package Team5.SmartTowns.rewards; - -import org.springframework.stereotype.Controller; - -@Controller -public class RewardsController { -} diff --git a/src/main/java/Team5/SmartTowns/rewards/Sticker.java b/src/main/java/Team5/SmartTowns/rewards/Sticker.java index 738409e1483a15be6451af7b68e677329ba19eae..7e5315c651bea73aa31572856710b21bbc25457b 100644 --- a/src/main/java/Team5/SmartTowns/rewards/Sticker.java +++ b/src/main/java/Team5/SmartTowns/rewards/Sticker.java @@ -1,37 +1,29 @@ /*AUTHOR: Gabriel Copat*/ package Team5.SmartTowns.rewards; -import lombok.Data; +import lombok.Getter; -import java.io.File; -import java.util.Objects; -@Data -public class Sticker { - /* Stickers are trade-able rewards, they vary in rarity and are earned at random */ +@Getter +public class Sticker extends Reward{ + /* Stickers are randomly earned rewards from a specific pack */ + + final int rarity; //1-5 + final int packID; - int id; - String name; - String description; - String imgPath; - int rarity; //1-5 boolean hasSticker; - public Sticker(int id, int stickerID, String name, String description, int rarity) { - this.id = id; - this.name = name; - this.description = description; + + public Sticker(int packID, int id, String name, String description, int rarity) { + super(id, name, description); this.rarity = rarity; - imgPath = findImagePath(); + this.packID = packID; + displayImg = super.findImagePath(); } - private String findImagePath(){ - /* Finds the image in the Path folder, if image is not found assigns default image */ - String imgPath = "images/rewards/stickers/" + id + ".jpg"; - String notFoundPath = "images/rewards/stickers/0.png"; - - File imgFile = new File("src/main/resources/static/" + imgPath); - return imgFile.exists() ? imgPath : notFoundPath; + @Override + public String getImgFolder() { + return "stickers/" + getPackID(); } public boolean hasSticker(){ @@ -41,21 +33,7 @@ public class Sticker { this.hasSticker = hasSticker; } public String getVisibility(){ - return hasSticker? "" : "grayedOut"; - } - - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Sticker sticker = (Sticker) o; - return id == sticker.id && Objects.equals(name, sticker.name); - } - - @Override - public int hashCode() { - return Objects.hash(id, name); + return hasSticker ? "gotSticker" : "grayedSticker"; } } diff --git a/src/main/java/Team5/SmartTowns/rewards/StickersRepository.java b/src/main/java/Team5/SmartTowns/rewards/StickersRepository.java deleted file mode 100644 index 869c2d07353a7aa090fb7fee79b2d44feacd9b12..0000000000000000000000000000000000000000 --- a/src/main/java/Team5/SmartTowns/rewards/StickersRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -//Holds locations data repository -package Team5.SmartTowns.rewards; - -import java.util.List; - -public interface StickersRepository { - List<Sticker> getAllStickers(); -} - diff --git a/src/main/java/Team5/SmartTowns/rewards/StickersRepositoryJDBC.java b/src/main/java/Team5/SmartTowns/rewards/StickersRepositoryJDBC.java deleted file mode 100644 index 185bd5e4eb30c9d8db0b65f3ff37241ded9b92b2..0000000000000000000000000000000000000000 --- a/src/main/java/Team5/SmartTowns/rewards/StickersRepositoryJDBC.java +++ /dev/null @@ -1,33 +0,0 @@ -//Implements the locations repository using JDBC -package Team5.SmartTowns.rewards; - -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.core.RowMapper; -import org.springframework.stereotype.Repository; - -import java.util.List; - -@Repository -public class StickersRepositoryJDBC implements StickersRepository { - private JdbcTemplate jdbc; - private RowMapper<Sticker> stickerMapper; - - public StickersRepositoryJDBC(JdbcTemplate aJdbc) { - this.jdbc = aJdbc; - setStickerMapper(); - } - private void setStickerMapper(){ - stickerMapper = (rs, i) -> new Sticker( - rs.getInt("stickerID"), - rs.getInt("stickerID"), rs.getString("name"), - rs.getString("description"), - rs.getInt("rarity") - ); - } - - @Override - public List<Sticker> getAllStickers(){ - String sql= "SELECT * FROM stickers"; - return jdbc.query(sql, stickerMapper); - } -} diff --git a/src/main/java/Team5/SmartTowns/Towns/TownController.java b/src/main/java/Team5/SmartTowns/towns/TownController.java similarity index 98% rename from src/main/java/Team5/SmartTowns/Towns/TownController.java rename to src/main/java/Team5/SmartTowns/towns/TownController.java index 35c479759cee8ddd3523e9616136ad419eff39f7..37758cb09f9d4e5e120d46853888f1a4178dfd38 100644 --- a/src/main/java/Team5/SmartTowns/Towns/TownController.java +++ b/src/main/java/Team5/SmartTowns/towns/TownController.java @@ -1,4 +1,4 @@ -package Team5.SmartTowns.Towns; +package Team5.SmartTowns.towns; import Team5.SmartTowns.Data.Location; import Team5.SmartTowns.Data.Town; diff --git a/src/main/java/Team5/SmartTowns/towns/TownStorage.java b/src/main/java/Team5/SmartTowns/towns/TownStorage.java new file mode 100644 index 0000000000000000000000000000000000000000..988a20223b33d27fbccab94007a1efb6e3088bbb --- /dev/null +++ b/src/main/java/Team5/SmartTowns/towns/TownStorage.java @@ -0,0 +1,44 @@ +package Team5.SmartTowns.towns; + +import java.util.ArrayList; +import java.util.List; + +public class TownStorage { + private List<Towns> townList; + private static TownStorage singleton; + + TownStorage() { + townList = new ArrayList<>(); + townList.addAll( + List.of( + new Towns("Caerphilly",01,3,70,"/images/banners/CaerphillyCastle.jpg"), + new Towns("Risca",02,2,34,"/images/banners/RiscaBanner.jpg"), + new Towns("Penarth",03,5,0,"/images/banners/PenarthBanner.jpg"), + new Towns("Penarth",03,5,50,"/images/banners/PenarthBanner.jpg"), + new Towns("Caerphilly",01,3,70,"/images/banners/CaerphillyCastle.jpg"), + new Towns("Risca",02,2,90,"/images/banners/RiscaBanner.jpg"), + new Towns("Penarth",03,5,100,"/images/banners/PenarthBanner.jpg") + + + + ) + + ); + + } + public static TownStorage getInstance() { + if (singleton == null) { + singleton = new TownStorage(); + + } + return singleton; + } + + public List<Towns> getTownList() { + return townList; + } + + + + +} diff --git a/src/main/java/Team5/SmartTowns/Towns/Towns.java b/src/main/java/Team5/SmartTowns/towns/Towns.java similarity index 97% rename from src/main/java/Team5/SmartTowns/Towns/Towns.java rename to src/main/java/Team5/SmartTowns/towns/Towns.java index a1b103f7abf6aa4379d877c645185f2c522a25ba..ebe6fd4797c205ace803727026e64837a2af93e6 100644 --- a/src/main/java/Team5/SmartTowns/Towns/Towns.java +++ b/src/main/java/Team5/SmartTowns/towns/Towns.java @@ -1,4 +1,4 @@ -package Team5.SmartTowns.Towns; +package Team5.SmartTowns.towns; import lombok.Data; diff --git a/src/main/java/Team5/SmartTowns/trails/TrailsController.java b/src/main/java/Team5/SmartTowns/trails/TrailsController.java index c91c7abb4f64270f948d4313070adf47b08c07c8..c6472019b4e17f3ff6aa4c60188ad524bfc10010 100644 --- a/src/main/java/Team5/SmartTowns/trails/TrailsController.java +++ b/src/main/java/Team5/SmartTowns/trails/TrailsController.java @@ -1,19 +1,19 @@ package Team5.SmartTowns.trails; -import Team5.SmartTowns.Landmarks.Landmarks; +import Team5.SmartTowns.landmarks.Landmarks; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import java.util.ArrayList; import java.util.List; +import java.util.Optional; -import static Team5.SmartTowns.Landmarks.Landmarks.getLandmarksDragonstrail; +import static Team5.SmartTowns.landmarks.Landmarks.landmarksDragonstrail; + +//import static Team5.SmartTowns.Landmarks.Landmarks.landmarksDragonstrail; @Controller public class TrailsController { @@ -40,21 +40,22 @@ public class TrailsController { @GetMapping("/dragonstale") public ModelAndView getDragonsTale(){ - List<Landmarks> landmarksList = getLandmarksDragonstrail(); - Landmarks landmarks = new Landmarks(); - int listSize = landmarksList.size(); + List<Landmarks> landmarksList = landmarksDragonstrail; ModelAndView modelAndView = new ModelAndView("towns/trails/dragonstale/index"); modelAndView.addObject("landmarksList", landmarksList); - modelAndView.addObject("getListSize", listSize); return modelAndView; } -// @GetMapping("/dragonstale/{landmarks}") -// public ModelAndView getDragonstaleLandmarks(){ -// ModelAndView modelAndView = new ModelAndView(); -// modelAndView.addObject() -// } + // +// @GetMapping("dragonstale/{qrCode}/{id}") +// public String qrCodeCheck(@PathVariable Optional<String> qrCode, @PathVariable Optional<Integer> id){ +// if (qrCode.isPresent()){ +// +// //Check if ID is present, if do this, if not dfo that. +// +// } +// } } diff --git a/src/main/java/Team5/SmartTowns/users/User.java b/src/main/java/Team5/SmartTowns/users/User.java index 84887664fbee090abb68281f28b5f2b0832af9ae..4ef65c3b288f9433e37d60e8e984b869f3a8d53e 100644 --- a/src/main/java/Team5/SmartTowns/users/User.java +++ b/src/main/java/Team5/SmartTowns/users/User.java @@ -5,20 +5,20 @@ import Team5.SmartTowns.rewards.Sticker; import lombok.Data; import java.io.File; +import java.sql.Connection; +import java.sql.DriverManager; import java.util.HashMap; import java.util.Map; @Data public class User { - int id; String email; //Validation would be done by email, since they will have that String name; String imgPath; int dragonProgress; - - Map<Badge, Integer> badgeProgress = new HashMap<>(); // Demonstrates the progress towards a specific badge (0-100) Map<Sticker, Boolean> hasStickers = new HashMap<>(); // True if User has sticker (key) + Map<Integer, Boolean> dragonstaleLandmarkIDs = new HashMap<>(); // Storing the IDs of the landmarks associated with Dragonstale, as well as if the user has visited it before (boolean) public User(int id, String email, String name, int dragonProgress) { this.id = id; @@ -27,7 +27,12 @@ public class User { this.dragonProgress = dragonProgress; imgPath = findImagePath(); } - + public User(int id, String email, String name) { + this.id = id; + this.email = email; + this.name = name; + imgPath = findImagePath(); + } private String findImagePath(){ /* Finds the image in the Path folder, if image is not found assigns default image */ diff --git a/src/main/java/Team5/SmartTowns/users/UserController.java b/src/main/java/Team5/SmartTowns/users/UserController.java index d635c8a401d85ef6d930142882d69b5528f38fd7..989d13b7161f783dc75bdcb9dbf379808b1584e4 100644 --- a/src/main/java/Team5/SmartTowns/users/UserController.java +++ b/src/main/java/Team5/SmartTowns/users/UserController.java @@ -1,10 +1,9 @@ package Team5.SmartTowns.users; -import Team5.SmartTowns.rewards.Badge; -import Team5.SmartTowns.rewards.BadgesRepository; +import Team5.SmartTowns.rewards.Pack; +import Team5.SmartTowns.rewards.RewardsRepository; import Team5.SmartTowns.rewards.Sticker; -import Team5.SmartTowns.rewards.StickersRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @@ -12,7 +11,6 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.servlet.ModelAndView; import java.util.List; -import java.util.Map; @Controller public class UserController { @@ -20,13 +18,11 @@ public class UserController { @Autowired private UserRepository userRepository; @Autowired - private BadgesRepository badgesRepository; - @Autowired - private StickersRepository stickersRepository; + private RewardsRepository rewardsRepository; @GetMapping("/login") public ModelAndView getLoginPage() { - ModelAndView mav = new ModelAndView("rewards/login"); + ModelAndView mav = new ModelAndView("users/login"); // List<User> users = userRepository.getAllUsers(); // mav.addObject("users", users); return mav; @@ -42,21 +38,52 @@ public class UserController { @GetMapping("/user/{id}") public ModelAndView getUserPage(@PathVariable int id) { - ModelAndView mav = new ModelAndView("rewards/userProfile"); - List<Badge> badges = badgesRepository.getAllBadges(); /*DEPRECATED FOR THE MOMENT*/ - mav.addObject("badges", badges); - List<Sticker> allStickers = stickersRepository.getAllStickers(); - List<User> users = userRepository.getAllUsers(); - Map<Long, Boolean> userStickers = userRepository.getStickers(id); + ModelAndView mav = new ModelAndView("users/userProfile"); + List<Pack> allPacks = rewardsRepository.getAllPacks(); + mav.addObject("user", userRepository.getUserById(id)); + mav.addObject("packs", allPacks); - for (Long stickerID : userStickers.keySet()) { //Finds and updates visibility of stickers based on what the user has - allStickers.stream() - .filter(sticker -> sticker.getId()==stickerID) - .findFirst().ifPresent(sticker -> sticker.setVisibility(userStickers.get(stickerID))); - } + mav.addAllObjects(getPackInfo(id, 1).getModelMap()); - mav.addObject("user", userRepository.getUser(id)); - mav.addObject("stickers", allStickers); return mav; } + + @GetMapping("/packInfo/{userID}/{packID}") + public ModelAndView getPackInfo(@PathVariable int userID, @PathVariable int packID) { + /* Displays on page the stickers present in the pack and colour the ones the + * user has acquired */ + + ModelAndView mav = new ModelAndView("users/userFrags :: stickersBox"); + List<Sticker> allStickers = rewardsRepository.getAllStickersFromPack(packID); + List<Long> userStickers = userRepository.getUserStickersFromPack(userID, packID); + + + + mav.addObject("stickers", setStickerVisibility(allStickers, userStickers)); + mav.addObject("progress", getPackProgress(allStickers)); + mav.addObject("selectedPack", rewardsRepository.findPackByID(packID)); + return mav; + } + + public int getPackProgress(List<Sticker> userStickers){ + /* Returns the % of completion of given userStickers */ + double progress = 0; + if (!userStickers.isEmpty()) { + progress = userStickers.stream().filter(Sticker::hasSticker).count(); + progress = progress / userStickers.size(); + progress = Math.round(progress * 100); + } + return (int) progress; + } + + public List<Sticker> setStickerVisibility(List<Sticker> displayedStickers, List<Long> userStickers){ + /* Makes displayedStickers which are present in userStickers visible */ + for (Long stickerID : userStickers) { + displayedStickers.stream() + .filter(sticker -> sticker.getId()==stickerID) //Tries to find matching id from the two lists + .findFirst().ifPresent(sticker -> sticker.setVisibility(true)); + } + return displayedStickers; + } + } diff --git a/src/main/java/Team5/SmartTowns/users/UserRepository.java b/src/main/java/Team5/SmartTowns/users/UserRepository.java index 9f4e828f17c231179df1a9fcd6a87cc5c8cf75b6..f0f01269786128dd9afaa8d3becd5b3ada4944fa 100644 --- a/src/main/java/Team5/SmartTowns/users/UserRepository.java +++ b/src/main/java/Team5/SmartTowns/users/UserRepository.java @@ -2,11 +2,10 @@ package Team5.SmartTowns.users; import java.util.List; -import java.util.Map; public interface UserRepository { List<User> getAllUsers(); -// Map<Long, Integer> getBadgeProgress(int id); - Map<Long, Boolean> getStickers(int id); - User getUser(int id); + List<Long> getUserStickersFromPack(int userID, int packID); + User getUserById(int userID); + boolean unlockSticker(int userID, int packID, int stickerID); } diff --git a/src/main/java/Team5/SmartTowns/users/UserRepositoryJDBC.java b/src/main/java/Team5/SmartTowns/users/UserRepositoryJDBC.java index 9b24461d06d300172d904272edf0cc20c51b99f0..8b46fc3a568455e91c180b66fc91b65f20d20c81 100644 --- a/src/main/java/Team5/SmartTowns/users/UserRepositoryJDBC.java +++ b/src/main/java/Team5/SmartTowns/users/UserRepositoryJDBC.java @@ -5,14 +5,11 @@ import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.Map; @Repository public class UserRepositoryJDBC implements UserRepository{ - private JdbcTemplate jdbc; private RowMapper<User> userMapper; @@ -21,13 +18,11 @@ public class UserRepositoryJDBC implements UserRepository{ setUserMapper(); } - private void setUserMapper(){ userMapper = (rs, i) -> new User( - rs.getInt("userID"), + rs.getInt("id"), rs.getString("email"), - rs.getString("name"), - rs.getInt("dragonProgress") + rs.getString("name") ); } @@ -37,33 +32,25 @@ public class UserRepositoryJDBC implements UserRepository{ return jdbc.query(sql, userMapper); } + @Override - public User getUser(int id){ - String sql= "SELECT * FROM users WHERE userID="+id; + public User getUserById(int userID){ + String sql= "SELECT * FROM users WHERE id="+userID; List<User> result = jdbc.query(sql, userMapper); - return result.get(0); + return result.isEmpty() ? null : result.get(0); } @Override - public Map<Long, Boolean> getStickers(int id){ - String sql = "SELECT stickerID, hasSticker FROM stickerprogress WHERE userID=" + id; - List<Map<String, Object>> query = jdbc.queryForList(sql); - Map<Long, Boolean> progress = new HashMap<>(); - for (Map<String, Object> result : query) { - progress.put((Long)result.get("stickerID"), (boolean)result.get("hasSticker")); - } - return progress; + public List<Long> getUserStickersFromPack(int userID, int packID) { + String sql = "SELECT stickerID FROM stickerprogress WHERE (userID, packID)= (" + userID + "," + packID + ")"; + return jdbc.queryForList(sql, Long.class); } - -// @Override -// public Map<Long, Integer> getBadgeProgress(int id){ -// String sql = "SELECT badgeID, progress FROM badgeprogress WHERE userID=" + id; -// List<Map<String, Object>> query = jdbc.queryForList(sql); -// Map<Long, Integer> progress = new HashMap<>(); -// for (Map<String, Object> result : query) { -// progress.put((Long)result.get("badgeID"), (int)result.get("progress")); -// } -// return progress; -// } + @Override + public boolean unlockSticker(int userID, int packID, int stickerID){ + String sql = "INSERT INTO stickerprogress (userID, packID, stickerID) VALUES (" + + userID + ", " + packID + "," + stickerID + ")"; + jdbc.update(sql); + return true; + } } diff --git a/src/main/java/Team5/SmartTowns/Webpages/WebpageController.java b/src/main/java/Team5/SmartTowns/webpages/WebpageController.java similarity index 81% rename from src/main/java/Team5/SmartTowns/Webpages/WebpageController.java rename to src/main/java/Team5/SmartTowns/webpages/WebpageController.java index 37a30366e5335d1870c202d1a49b4a5d2bca474d..dcc9a14af56d65780dafcb02e92a90e3fce483a2 100644 --- a/src/main/java/Team5/SmartTowns/Webpages/WebpageController.java +++ b/src/main/java/Team5/SmartTowns/webpages/WebpageController.java @@ -1,4 +1,4 @@ -package Team5.SmartTowns.Webpages; +package Team5.SmartTowns.webpages; import org.springframework.ui.Model; @@ -27,6 +27,13 @@ public class WebpageController { return modelAndView; } + + @GetMapping("/maps") + public ModelAndView getMapTestAPI(){ + ModelAndView modelAndView = new ModelAndView("Towns/mapsTest/index"); + return modelAndView; + } + // @GetMapping("/home") // public ModelAndView getHome(){ // ModelAndView modelAndView = new ModelAndView("Towns/home/homePage"); @@ -34,12 +41,10 @@ public class WebpageController { // } - @RequestMapping(value="/test_ajax_frag", method=RequestMethod.POST) - public String sendHtmlFragment(Model map) { - //map.addAttribute("foo", "bar"); - return "fragments/temp_frags.html :: trailInfo2"; + } -} + + diff --git a/src/main/resources/QRCodeScanner.html b/src/main/resources/QRCodeScanner.html deleted file mode 100644 index 11da0658b1421e28159c97fc5abae82030ff3630..0000000000000000000000000000000000000000 --- a/src/main/resources/QRCodeScanner.html +++ /dev/null @@ -1,10 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> -<head> - <meta charset="UTF-8"> - <title>QR Camera</title> -</head> -<body> - -</body> -</html> \ No newline at end of file diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index 93f05d0c2e1c8175a69776f0f2406743ed3bb1d8..592b70f73184ea557fe68d2e5c410724e6a3e6c0 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -1,6 +1,6 @@ delete from users; -insert into users (email, name, dragonProgress,dragonsLandmarkIDs) value ('hannah@gmail.com', 'Hannah','90','A'); -insert into users (email, name, dragonProgress,dragonsLandmarkIDs) value ('nigel@gmail.com', 'Nigel','40','B'); +insert into users (email, name) value ('hannah@gmail.com', 'Hannah'); +insert into users (email, name) value ('nigel@gmail.com', 'Nigel'); delete from trails; insert into trails ( Name,tru) value ( 'Caerphilly Coffee Trail',false); diff --git a/src/main/resources/index.html b/src/main/resources/index.html deleted file mode 100644 index 489349d1b63d75904028b48ddd4eb36d29f63650..0000000000000000000000000000000000000000 --- a/src/main/resources/index.html +++ /dev/null @@ -1,11 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> -<head> - <meta charset="UTF-8"> - <title>Home Page</title> -</head> -<body> -<h1>Welcome to the home page</h1> - -</body> -</html> \ No newline at end of file diff --git a/src/main/resources/static/css/userProfile.css b/src/main/resources/static/css/userProfile.css index 8ceb77b4e82d8c44f9aefdcf9c1f54493771e668..878ab054fc53828cb76726775109ca7d3f4bcc80 100644 --- a/src/main/resources/static/css/userProfile.css +++ b/src/main/resources/static/css/userProfile.css @@ -37,13 +37,21 @@ & p { line-height: 1.1; color: white;} } } - +html{ + height: 100%; + @media only screen and (min-device-width: 1500px) { + height: auto; + } +} body { background: linear-gradient(135deg, #f7e8fd, #9914d1); - height: 100svh; + height: 100%; display: flex; flex-direction: column; justify-content: space-evenly; + @media only screen and (min-device-width: 1500px) { + height: auto; + } } main { background: linear-gradient(to bottom, #1e1e1e 10%, darkgoldenrod 50%, #1e1e1e 90%); @@ -55,8 +63,16 @@ main { margin-top: 6em; padding-inline: 1vw; box-shadow: rgba(0, 0, 0, 0.7) 0 0.5svh max(1vw, 1em); - - + transition: all linear 2s; + overflow-y: scroll; + height: 90%; + @media only screen and (min-device-width: 1500px) { + padding-inline: 20%; + overflow: visible; + } +} +.rewards { + position: relative; } .userInfo { display: flex; @@ -81,15 +97,16 @@ main { box-shadow: rgba(0, 0, 0, 0.7) 0 0.5svh 1vw -1vw; } } -#badgesBar::-webkit-scrollbar { +#packsBar::-webkit-scrollbar { display: none; -ms-scrollbar-darkshadow-color: transparent; } -#badgesBar { +#packsBar { + position: static; display: grid; grid-template-areas: "header" - "badges"; + "packs"; overflow-x: scroll; overflow-y: hidden; color: white; @@ -110,31 +127,54 @@ main { height: 1.2em; } - & #allBadgesContainer { + & #allPacksContainer { margin-top: 3svh; - grid-area: badges; - height: 10svh; - align-content: center; + grid-area: packs; + height: 12svh; + width: 100%; display: flex; + justify-content: space-between; @media only screen and (min-device-width: 501px) { height: 20vw; margin-top: 6vw; } } - & .badgeImg { + & .packContainer{ + position: relative; + height: 12svh; + width: 20vw; + display: flex; + flex-direction: column; + text-align: center; + justify-content: center; + overflow: visible; + } + + & .packImg { + position: relative; margin-inline: 3vw; height: 8svh; + /*width: 25%;*/ z-index: 50; @media only screen and (min-device-width: 501px) { height: 15vw; } transition: 0.3s ease-out 100ms; } - & .badgeImg:hover { + & .packImg:hover { /*box-shadow: 0 0 20px 10px #bbbb00;*/ transform: scale(1.5,1.5); } + & .packName { + height: 4svh; + display: flex; + justify-content: center; + font-size: 2em; + overflow: hidden; + align-items: flex-end; + + } } #stickersBox { @@ -145,6 +185,7 @@ main { /* border-bottom-right-radius: 2vw; */ /*background: linear-gradient(to bottom, darkgoldenrod, transparent 90%);*/ margin-top: -1%; + height: 500px; & h2 { font-size: 4em; text-align: center; @@ -360,4 +401,8 @@ header .footerButton:hover { font-size: 0.6em; opacity: 0; transition: 0.5s ease-in-out 1ms; +} + +.rewards { + transition: 1s ease-in-out 1ms; } \ No newline at end of file diff --git a/src/main/resources/static/images/LinkedIn.jpg b/src/main/resources/static/images/LinkedIn.jpg deleted file mode 100644 index 6bf094d20c89883756ec5a105ec2cea1f9eeaf76..0000000000000000000000000000000000000000 Binary files a/src/main/resources/static/images/LinkedIn.jpg and /dev/null differ diff --git "a/src/main/resources/static/images/Twitter-Log\320\276.png" "b/src/main/resources/static/images/Twitter-Log\320\276.png" deleted file mode 100644 index c475939bfacb4be3559aab3d58a9a5eadf036afb..0000000000000000000000000000000000000000 Binary files "a/src/main/resources/static/images/Twitter-Log\320\276.png" and /dev/null differ diff --git a/src/main/resources/static/images/badges.png b/src/main/resources/static/images/badges.png deleted file mode 100644 index 57e379c719f5fe28ba827d7007be9637cfd9ff73..0000000000000000000000000000000000000000 Binary files a/src/main/resources/static/images/badges.png and /dev/null differ diff --git a/src/main/resources/static/images/CaerphillyCastle.jpg b/src/main/resources/static/images/banners/CaerphillyCastle.jpg similarity index 100% rename from src/main/resources/static/images/CaerphillyCastle.jpg rename to src/main/resources/static/images/banners/CaerphillyCastle.jpg diff --git a/src/main/resources/static/images/PenarthBanner.jpg b/src/main/resources/static/images/banners/PenarthBanner.jpg similarity index 100% rename from src/main/resources/static/images/PenarthBanner.jpg rename to src/main/resources/static/images/banners/PenarthBanner.jpg diff --git a/src/main/resources/static/images/RiscaBanner.jpg b/src/main/resources/static/images/banners/RiscaBanner.jpg similarity index 100% rename from src/main/resources/static/images/RiscaBanner.jpg rename to src/main/resources/static/images/banners/RiscaBanner.jpg diff --git a/src/main/resources/static/images/Facebook.png b/src/main/resources/static/images/icons/Facebook.png similarity index 100% rename from src/main/resources/static/images/Facebook.png rename to src/main/resources/static/images/icons/Facebook.png diff --git a/src/main/resources/static/images/Instagram.jpg b/src/main/resources/static/images/icons/Instagram.jpg similarity index 100% rename from src/main/resources/static/images/Instagram.jpg rename to src/main/resources/static/images/icons/Instagram.jpg diff --git a/src/main/resources/static/images/Linkedin.png b/src/main/resources/static/images/icons/Linkedin.png similarity index 100% rename from src/main/resources/static/images/Linkedin.png rename to src/main/resources/static/images/icons/Linkedin.png diff --git a/src/main/resources/static/images/Twitter.jpg b/src/main/resources/static/images/icons/Twitter.jpg similarity index 100% rename from src/main/resources/static/images/Twitter.jpg rename to src/main/resources/static/images/icons/Twitter.jpg diff --git a/src/main/resources/static/images/VZTA.png b/src/main/resources/static/images/icons/VZTA.png similarity index 100% rename from src/main/resources/static/images/VZTA.png rename to src/main/resources/static/images/icons/VZTA.png diff --git a/src/main/resources/static/images/rewards/dragonFilled.png b/src/main/resources/static/images/rewards/packs/3.png similarity index 100% rename from src/main/resources/static/images/rewards/dragonFilled.png rename to src/main/resources/static/images/rewards/packs/3.png diff --git a/src/main/resources/static/images/stats.png b/src/main/resources/static/images/stats.png deleted file mode 100644 index 39904f1cfc911df01306fb85ab78b015e7d0386c..0000000000000000000000000000000000000000 Binary files a/src/main/resources/static/images/stats.png and /dev/null differ diff --git a/src/main/resources/static/images/trails.jpg b/src/main/resources/static/images/trails.jpg deleted file mode 100644 index 20481a4f8a914ae8b272f490e2006dd0afaa5a2b..0000000000000000000000000000000000000000 Binary files a/src/main/resources/static/images/trails.jpg and /dev/null differ diff --git a/src/main/resources/static/scripts/login.js b/src/main/resources/static/scripts/login.js index 929b8b61e7a6f0f71a97937b2bdf2fcd83a5ce4f..38ef327134aa8ae03ddc44ddf796b2df139fc3bb 100644 --- a/src/main/resources/static/scripts/login.js +++ b/src/main/resources/static/scripts/login.js @@ -46,4 +46,6 @@ function validateForm(){ return false; } //TODO SERVER SIDE VALIDATION AND CHECK AGAINST USERS DB TABLE -} \ No newline at end of file +} + + diff --git a/src/main/resources/static/test.html b/src/main/resources/static/test.html deleted file mode 100644 index 98a5d8ce3c443e9b3c9e183848b038b11f2df7de..0000000000000000000000000000000000000000 --- a/src/main/resources/static/test.html +++ /dev/null @@ -1,11 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> -<head> - <meta charset="UTF-8"> - <title>asdasd</title> -</head> -<body> -sadasdasdasd - -</body> -</html> \ No newline at end of file diff --git a/src/main/resources/static/users.html b/src/main/resources/static/users.html deleted file mode 100644 index 566549bdf8fae810809c1a81066000687cb338f6..0000000000000000000000000000000000000000 --- a/src/main/resources/static/users.html +++ /dev/null @@ -1,10 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> -<head> - <meta charset="UTF-8"> - <title>Title</title> -</head> -<body> - -</body> -</html> \ No newline at end of file diff --git a/src/main/resources/templates/allTrails/allTrails.html b/src/main/resources/templates/allTrails/allTrails.html index 746762b68f64b62190bf71e102edf0ff309772d9..d29d1ad91cf459383b4681678742ed0a2cacbcd6 100644 --- a/src/main/resources/templates/allTrails/allTrails.html +++ b/src/main/resources/templates/allTrails/allTrails.html @@ -10,7 +10,7 @@ </head> <body> -<header th:replace="~{/towns/Templating.html :: header}"></header> +<header th:replace="~{/fragments/Templating.html :: header}"></header> <main> <section id="allTrailsBar" class="centerFlex"> @@ -31,7 +31,7 @@ </section> </main> -<footer th:insert="~{/towns/Templating.html :: footer}"></footer> +<footer th:insert="~{/fragments/Templating.html :: footer}"></footer> <script type="text/javascript" th:src="@{scripts/allTrails.js}"></script> diff --git a/src/main/resources/templates/towns/Templating.html b/src/main/resources/templates/fragments/Templating.html similarity index 74% rename from src/main/resources/templates/towns/Templating.html rename to src/main/resources/templates/fragments/Templating.html index 1313b325bb3027665a9242b8fcd6d9db707af4e7..871e541bd8767e721d139cedfa8dd193b5212987 100644 --- a/src/main/resources/templates/towns/Templating.html +++ b/src/main/resources/templates/fragments/Templating.html @@ -2,7 +2,7 @@ <link rel="stylesheet" href="../../static/css/templatingstyle.css"> <header class="headerBar" th:fragment="header"> <div class="Logo"> - <img src="/images/VZTA.png" height="97" width="400" alt="VZTA Logo"/> + <img src="/images/icons/VZTA.png" height="97" width="400" alt="VZTA Logo"/> </div> <nav class="navBar"> <ul> @@ -41,10 +41,10 @@ <div class="centerFooter"> <span class="footerText"> <h3>Follow Us</h3> - <a href="https://www.facebook.com/VZTAsmarttowns/" class="icon"><img src="/images/Facebook.png" height="25" width="25" alt="Facebook Logo" class="icon"/></a> - <a href="https://www.twitter.com/VZTAsmarttowns/" class="icon"><img src="/images/Twitter.jpg" height="25" width="25" alt="X (formally Twitter) Logo" class="icon"/></a> - <a href="https://www.instagram.com/vztasmarttowns/" class="icon"><img src="/images/Instagram.jpg" height="25" width="25" alt="Instagram Logo" class="icon"/></a> - <a href="https://www.linkin.com/company/vztasmarttowns/" class="icon"><img src="/images/Linkedin.png" height="25" width="25" alt="Linkedin Logo" class="icon"/></a><br> + <a href="https://www.facebook.com/VZTAsmarttowns/" class="icon"><img src="/images/icons/Facebook.png" height="25" width="25" alt="Facebook Logo" class="icon"/></a> + <a href="https://www.twitter.com/VZTAsmarttowns/" class="icon"><img src="/images/icons/Twitter.jpg" height="25" width="25" alt="X (formally Twitter) Logo" class="icon"/></a> + <a href="https://www.instagram.com/vztasmarttowns/" class="icon"><img src="/images/icons/Instagram.jpg" height="25" width="25" alt="Instagram Logo" class="icon"/></a> + <a href="https://www.linkin.com/company/vztasmarttowns/" class="icon"><img src="/images/icons/Linkedin.png" height="25" width="25" alt="Linkedin Logo" class="icon"/></a><br> </span> </div> <div class="copyright" style="text-align: left"> diff --git a/src/main/resources/templates/fragments/temp_frags.html b/src/main/resources/templates/fragments/temp_frags.html deleted file mode 100644 index 03efad3ee73e973e0faf7401b7d3b0de2e1578e4..0000000000000000000000000000000000000000 --- a/src/main/resources/templates/fragments/temp_frags.html +++ /dev/null @@ -1,23 +0,0 @@ -<header th:fragment="header" class="headerBlock"> - <h1 class="headerTitle">SMART-TOWNS</h1> - <div class="headerBanner"> - <img src="images/trails.jpg" alt="Trails" class="bannerBack"> -<!-- <div class="bannerText">--> - <h1 class="bigTitle">Smart Town Trails</h1> - <h2 class="smallTitle">Information about trails for your town</h2> -<!-- </div>--> - </div> -</header> -<footer th:fragment="footer"> - <ul class="footerBar"> - <li class="footerButton">Home</li> - <li class="footerButton">About</li> - <li class="footerButton">Map</li> - <li class="footerButton">Facilities</li> - <li class="footerButton">Search</li> - </ul> -</footer> - -<article class="trailInfo" th:fragment="trailInfo2"> - <h1 class="titleH1" th:text="${trail.name}">Trail Info</h1> -</article> \ No newline at end of file diff --git a/src/main/resources/templates/home.html b/src/main/resources/templates/home.html deleted file mode 100644 index 47b1dc1353c7c96bcb3409f54558ff18c4da6cf4..0000000000000000000000000000000000000000 --- a/src/main/resources/templates/home.html +++ /dev/null @@ -1,51 +0,0 @@ -<!DOCTYPE html> -<html> - -<head> - <title>Website Web</title> - <link rel="stylesheet" th:href="@{css/style.css}"> - <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> -</head> - -<body> - <header th:replace="fragments/temp_frags.html :: header"></header> - <main> - <div class="trailList"> - <ul class="ulHeader"> - <li onclick="selectTrail('trail1', this)" class="liHeader" id="trail1" >Trail 1</li> - <li onclick="selectTrail('trail2', this)" class="liHeader selected" id="trail2" >Trail 2</li> - <li onclick="selectTrail('trail3', this)" class="liHeader" id="trail3" >Trail 3</li> - <li onclick="updateOutput()" class="liHeader" id="trail4" >Trail 4</li> - </ul> - </div> - - <section class="mainBlock"> - <article class="trailStats"> - <h1 class="titleH1">Trail Stats</h1> - <img src="../static/images/stats.png" alt="Stats" class="stats"> - <div class="textStats"> - <p><b>Explored:</b> 60%</p> - <p><b>Landmarks Visited:</b> 3/5</p> - <p><b>Shops Visited:</b> 6/10</p> - </div> - </article> - <article id="trailInfoBox" class="trailInfo"></article> - <article class="badgesBlock"> - <h1 class="titleH1">Badges</h1> - <div class="badgesList"> - <img src="../static/images/badges.png" alt="Badge" class="badgeImg"> - <img src="../static/images/badges.png" alt="Badge" class="badgeImg"> - <img src="../static/images/badges.png" alt="Badge" class="badgeImg"> - <img src="../static/images/badges.png" alt="Badge" class="badgeImg"> - <img src="../static/images/badges.png" alt="Badge" class="badgeImg"> - </div> - - </article> - </section> - </main> - - <footer th:replace="fragments/temp_frags.html :: footer"></footer> - <script src="https://code.jquery.com/jquery-1.9.1.js"></script> - <script type="text/javascript" th:src="@{scripts/gabScripts.js}"></script> -</body> -</html> \ No newline at end of file diff --git a/src/main/resources/templates/Landmarks/LandmarkFormTh.html b/src/main/resources/templates/landmarks/LandmarkFormTh.html similarity index 94% rename from src/main/resources/templates/Landmarks/LandmarkFormTh.html rename to src/main/resources/templates/landmarks/LandmarkFormTh.html index b77bb90ece04cc582bc5fa5ea369bd8ba45e864b..0f7879d8277ad1012ffefaae75fc49d70b6932ca 100644 --- a/src/main/resources/templates/Landmarks/LandmarkFormTh.html +++ b/src/main/resources/templates/landmarks/LandmarkFormTh.html @@ -10,7 +10,7 @@ </head> <body> -<header th:insert="~{/towns/Templating.html :: header}"></header> +<header th:insert="~{/fragments/Templating.html :: header}"></header> <hr style="height:20px; visibility:hidden;" /> <H2 id="landmarkFormTitle"> Interested in joining our trails? Sign up Here! </H2> <main> @@ -60,6 +60,6 @@ </main> -<footer th:insert="~{/towns/Templating.html :: footer}"></footer> +<footer th:insert="~{/fragments/Templating.html :: footer}"></footer> </body> </html> \ No newline at end of file diff --git a/src/main/resources/templates/landmarks/locationPage.html b/src/main/resources/templates/landmarks/locationPage.html new file mode 100644 index 0000000000000000000000000000000000000000..7cf62c6f4cb81dd98416bf95f89c973b7714c40f --- /dev/null +++ b/src/main/resources/templates/landmarks/locationPage.html @@ -0,0 +1,47 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>Checkpoint</title> +<!-- todo make this a list per trail or per town that when clicked brings to unique location page--> + <link rel="stylesheet" th:href="@{/css/templatingstyle.css}"> +</head> +<body> + +<main> + <header th:insert="~{/fragments/Templating.html::header}"></header> + <div th:each="coord, indexValue:${locationCoords}"> + <p th:text="*{coord.getLocationID()}"></p> +<!-- <p th:text="${locations[indexValue.index]}"></p>--> + <H1 th:text="${location[indexValue.index].getLocationName()}"> </H1> + <H4 th:text="${location[indexValue.index].getLocationPlace()}"> </H4> + <p th:text="${location[indexValue.index].getLocationDescription()}"></p> + + + <iframe + width="600" + height="400" + frameborder="0" + scrolling="yes" + marginheight="0" + marginwidth="0" + th:src="'https://maps.google.com/maps?q='+ ${coord.getLocationCoordsLat()} +','+ ${coord.getLocationCoordsLong()} +'&hl=en&z=20&output=embed'"> + </iframe> + <br /> +<!-- <small>--> +<!--<!– <a–> //https://maps.google.com/maps?q=51.57623,-3.21910&hl=es&z=14&output=embed">--> +<!-- th:href="https://maps.google.com/maps?q='+{coord.getLocationCoordsLat()}+','+*{coord.getLocationCoordsLong()}+'&hl=es;z=14&output=embed"--> +<!-- style="color:#0000FF;text-align:left"--> +<!-- target="_blank"--> +<!-- >--> +<!-- See map bigger--> +<!-- </a>--> +<!-- </small>--> + + </div> + + +</main> +<footer th:insert="~{/fragments/Templating.html::footer}"></footer> +</body> +</html> \ No newline at end of file diff --git a/src/main/resources/templates/rewards/userProfile.html b/src/main/resources/templates/rewards/userProfile.html deleted file mode 100644 index a193bf7614603637614dd0cfdc0974fdd8c44767..0000000000000000000000000000000000000000 --- a/src/main/resources/templates/rewards/userProfile.html +++ /dev/null @@ -1,73 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> -<head> - <meta charset="UTF-8"> - <title th:text="'VZLA Profile Page of ' + ${user.getName()}"></title> - <link rel="stylesheet" th:href="@{/css/userProfile.css}"> -<!-- <link rel="stylesheet" th:href="@{/css/templatingstyle.css}">--> -</head> -<body> - -<header> - <ul class="footerBar"> - <li class="footerButton"><b>Home</b></li> - <li class="footerButton"><b>About</b></li> - <li class="footerButton"><b>Map</b></li> - <li class="footerButton"><b>Facilities</b></li> - <li class="footerButton"><b>Log In</b></li> - </ul> -</header> - -<main> - <!--PICTURE - DATA - BADGES --> - <div class="userInfo"> - <img th:src="@{${user.getImgPath()}}" - th:alt="${user.getName()}" - id="userPicture" - > - <h1 th:text="${user.getName()}"></h1> - <!--TODO add some progression info here?--> - </div> - <section class="rewards"> <!--Reward lists, badges on top, stickers (larger) on the bottom--> - <article id="badgesBar"> - <h2>Your Badges: </h2> <!--Shows first earned badges, followed by greyed out badges--> - <div id="allBadgesContainer" class="centerFlex"> - <img class="badgeImg" th:each="badge : ${badges}" th:src="@{'..' + ${badge.getImgPath()}}" - th:id="'img' + ${badge.getId()}" th:alt="${badge.getName()}" > - </div> - </article> - <article class="dragonProgression"> - <h1>The Dragon's Tale</h1> - <div class="dragonContainer"> - <div class="dragonFill" th:style="'width:'+ ${user.getDragonProgress()} + '%;'"> - <img th:src="@{/images/rewards/dragonFilled.png}" - alt="Filled Dragon" id="FilledDragon" class="dragonImg"> - </div> - <div class="dragonOut"> - <img th:src="@{/images/rewards/dragonOutline.png}" - alt="Outline Dragon" id="OutlineDragon" class="dragonImg"> - </div> - </div> - <h2 th:text="${user.getDragonProgress()} + '%'"></h2> - </article> - <article id="stickersBox"> <!--Need a controller to show earned stickers --> - <h2> STICKERS! </h2> - <div class="stickersContainer"> - <img th:class="'stickerImg ' + ${sticker.getVisibility()}" th:each="sticker : ${stickers}" th:src="@{'../' + ${sticker.getImgPath()}}" - th:id="'img' + ${sticker.getId()}" th:alt="${sticker.getName()}" > - </div> - </article> - </section> - - -</main> - -<footer> - -</footer> - - -<script> -</script> -</body> -</html> \ No newline at end of file diff --git a/src/main/resources/templates/towns/caerphilly.html b/src/main/resources/templates/towns/caerphilly.html index 912da813737475d83dfc3af4c0ff4010189ec7f5..11d4aabb9ef479d9e67bc5c19419ec0f9c47d3eb 100644 --- a/src/main/resources/templates/towns/caerphilly.html +++ b/src/main/resources/templates/towns/caerphilly.html @@ -171,7 +171,7 @@ <link rel="stylesheet" th:href="@{/css/templatingstyle.css}"> </head> <body> -<header th:insert="~{/towns/Templating.html::header}"></header> +<header th:insert="~{/fragments/Templating.html::header}"></header> <main> <div class="container"> <h1 class="townName"> Welcome to the town of Caerphilly.</h1> @@ -215,7 +215,7 @@ </div> </main> -<footer th:insert="~{/towns/Templating.html::footer}"></footer> +<footer th:insert="~{/fragments/Templating.html::footer}"></footer> </body> </html> \ No newline at end of file diff --git a/src/main/resources/templates/towns/home/homePage.html b/src/main/resources/templates/towns/home/homePage.html index 2cdc1e854fba95f89dd2da702bbeb6d5011ed5d8..ec489ae7d334997390462ef1ffbe0d3ceaf5c828 100644 --- a/src/main/resources/templates/towns/home/homePage.html +++ b/src/main/resources/templates/towns/home/homePage.html @@ -8,7 +8,7 @@ </head> <body> -<header th:insert="~{/towns/Templating.html::header}"></header> +<header th:insert="~{/fragments/Templating.html::header}"></header> <main> <div class="gridContainer1"> <H1 id="homeTitle"> VZTA Smart Towns - Trails</H1> @@ -56,7 +56,7 @@ rough % outline; </div> </main> -<footer th:insert="~{/towns/Templating.html::footer}"></footer> +<footer th:insert="~{/fragments/Templating.html::footer}"></footer> </body> </html> diff --git a/src/main/resources/templates/towns/home/homePageOld.html b/src/main/resources/templates/towns/home/homePageOld.html index bf35e662607a4b2a101aeef83f3a05a65fd50ad2..ce51066c3313d03de40e19be1b1bf951bcc9b6b7 100644 --- a/src/main/resources/templates/towns/home/homePageOld.html +++ b/src/main/resources/templates/towns/home/homePageOld.html @@ -9,7 +9,7 @@ </head> <body> -<header th:insert="~{/towns/Templating.html::header}"></header> +<header th:insert="~{/fragments/Templating.html::header}"></header> <main> <div class="gridContainer1"> <H1 id="homeTitle"> VZTA Smart Towns - Trails</H1> @@ -60,7 +60,7 @@ </main> -<footer th:insert="~{/towns/Templating.html::footer}"></footer> +<footer th:insert="~{/fragments/Templating.html::footer}"></footer> </body> </html> diff --git a/src/main/resources/templates/towns/templates.server/Templating.html b/src/main/resources/templates/towns/templates.server/Templating.html deleted file mode 100644 index 14343a76ea3cc2974dbdd50cc7bd3ade124adc17..0000000000000000000000000000000000000000 --- a/src/main/resources/templates/towns/templates.server/Templating.html +++ /dev/null @@ -1,149 +0,0 @@ -<header class="headerBar th:fragment="header"> - - <div class="Logo"> - <img th:src="@{images/VZTA.png}" alt="VZTA Logo"> - </div> - <nav class="navBar"> - <ul> - <li>Home</li> - <li>FAQs</li> - <li>Contact us</li> - </ul> - <label class="work">Who we Work with:</label> - <select> - <ul> - <option value="localauthorities">Local Authorities</option> - <option value="towns">Towns</option> - <option value="businesses">Businesses</option> - <option value="consumers">Consumers</option> - </ul> - </select> - </nav> - </header> - - <div class="footerBar" th:fragment="footer"> - <div class="containerFooter"> - <div class="leftFooter"> - <h3>VZTA</h3> - Near Me Now LTD - <br>Britania House - <br>Caerphilly Business Park - <br>Caerphilly - <br>CF83 3GG - </div> - <div class="rightFooter"> - <h3>Connect with us</h3> - <p>Be the first to know about updates by joining out Community page</p> - (C) VZTA 2022<br> - Policy Terms and Conditions - </div> - <div class="centerFooter"> - <span class="footerText"> - <h3>Follow Us</h3> - <a th:href=="https://www.facebook.com/VZTAsmarttowns/" class="icon"></a><img th:src="@{images/Facebook.png}" alt="Facebook Logo" class="picture"> - <a th:href=="https://www.twitter.com/VZTAsmarttowns/" class="icon"></a><img th:src="@{images/Twitter-Logo.png}" alt="X (formally Twitter) Logo" class="picture"> - <a th:href=="https://www.instagram.com/vztasmarttowns/" class="icon"></a><img th:src="@{images/Instagram.jpg}" alt="Instagram Logo" class="picture"> - <a th:href=="https://'www.linkin.com/company/vztasmarttowns/" class="icon"></a><img th:src="@{images/LinkedIn.jpg}" alt="Linkedin Logo" class="picture"> <br> - </span> - </div> - <div class="copyright" style="text-align: left"> - - </div> - </div> - </div> -</div> -<style> - /* Header */ - .headerBar { - border-bottom: 2px rgb(230, 230, 230) solid; - margin-bottom: 20px; - display: flex; - background: blueviolet; - } - /* Navbar Links */ - .navBar { - margin-top: 50px; - margin-left: auto; - margin-right:20px; - text-align: right; - } - .work{ - color: rgb(255, 255, 255); - } - .navBar ul { - list-style: none; - display: flex; - margin-left: 100px; - } - .navBar a { - border-left: 2px rgb(185, 185, 185) solid; - padding: 10px 40px; - text-decoration: none; - color:rgb(87, 86, 86); - white-space: nowrap; - overflow: hidden; - float: right; - } - .navBar a:hover { - background-color: rgb(209, 209, 209); - } - .navBar li{ - margin-left: 10px; - margin-right: 10px; - color: rgb(255, 255, 255); - } - .navListLast { - border-right: 2px rgb(185, 185, 185) solid; - margin-right:40px; - } - - /* Navbar Logo */ - .Logo { - margin-left:10px; - padding: 20px; - width: fit-content; - } - .Logo img { - width: 120px; - margin-left:15px; - } - - /* Footer */ - footer { - margin-top:20px; - display: flex; - justify-content: center; - } - .footerBar{ - border-top: 2px rgb(230, 230, 230) solid; - text-align: left; - display: flex; - background: blueviolet; - color: rgb(255, 255, 255); - padding-left: 30px; - } - .footerBar ul { - list-style: none; - display: flex; - } - .copyright{ - text-align: left; - display: flex; - } - .containerFooter{ - display: flex; - flex-direction: row; - } - .leftFooter{ - flex:1; - color: rgb(255, 255,255); - } - .centerFooter{ - flex: 1; - color: rgb(255, 255,255); - } - .rightFooter{ - flex:1; - color: rgb(255, 255, 255); - } -</style> \ No newline at end of file diff --git a/src/main/resources/templates/towns/trails/dragonstale/index.html b/src/main/resources/templates/towns/trails/dragonstale/index.html index 80aa32934673ddca22af19a7f7772a378ce9c774..7cf5948e993116ac247cf9c8aaac3d1ece2e8762 100644 --- a/src/main/resources/templates/towns/trails/dragonstale/index.html +++ b/src/main/resources/templates/towns/trails/dragonstale/index.html @@ -8,7 +8,7 @@ <script src="./node_modules/html5-qrcode/html5-qrcode.min.js"></script> </head> <body> - <header th:insert="towns/Templating.html :: header"></header> + <header th:insert="fragments/Templating.html :: header"></header> <!-- As this predefined trail will be accessible from multiple different towns, this thymeleaf element will display the town the user is currently trying to access and display it accordingly. <span th:text="${townName}"> --> <div class="centre"> @@ -49,7 +49,7 @@ <button type="button" id="begin">Click here!</button> </div> - <div th:insert="towns/Templating.html :: footer"></div> + <div th:insert="fragments/Templating.html :: footer"></div> <script> diff --git a/src/main/resources/templates/rewards/login.html b/src/main/resources/templates/users/login.html similarity index 100% rename from src/main/resources/templates/rewards/login.html rename to src/main/resources/templates/users/login.html diff --git a/src/test/java/Team5/SmartTowns/SmartTownsApplicationTests.java b/src/test/java/Team5/SmartTowns/SmartTownsApplicationTests.java index 16f057a402137766b7a1dc906e829d6335d03afb..022d9fea6aadd68bc7bf7118141460e504919f8b 100644 --- a/src/test/java/Team5/SmartTowns/SmartTownsApplicationTests.java +++ b/src/test/java/Team5/SmartTowns/SmartTownsApplicationTests.java @@ -1,34 +1,17 @@ -//package Team5.SmartTowns; -// -//import Team5.SmartTowns.Data.LocationRepository; -//import Team5.SmartTowns.Data.LocationRepositoryJDBC; -//import org.junit.jupiter.api.Test; -//import org.mockito.Mock; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.boot.test.autoconfigure.data.jdbc.DataJdbcTest; -//import org.springframework.boot.test.autoconfigure.jdbc.JdbcTest; -//import org.springframework.boot.test.context.SpringBootTest; -//import org.springframework.jdbc.core.JdbcTemplate; -//import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; -//import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; -//import org.springframework.test.context.jdbc.Sql; -////import org.testng.Assert; -// -//import javax.sql.DataSource; -// -//import static org.junit.jupiter.api.Assertions.assertEquals; -//import static org.junit.jupiter.api.Assertions.assertSame; -//import static org.mockito.Mockito.mock; -// -//@SpringBootTest -//@JdbcTest -// -//@Sql({"schema.sql", "data.sql"}) -//class SmartTownsApplicationTests { -// -// private JdbcTemplate ajdbc; -// -// @Test +package Team5.SmartTowns; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class SmartTownsApplicationTests { + + @Test + void contextLoads() { + } + +} +@Test //// test2 // public void whenInjectInMemoryDataSource_thenReturnCorrectEmployeeCount1() { // DataSource dataSource = new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2) @@ -58,58 +41,23 @@ //// assertEquals(4, employeeDAO.getCountOfEmployees()); //// } // -// -// -// -//// -////// private static TownController townController; -//// -//// -////// private static Team5.SmartTowns.Data.Location location; -////// @Mock -////// private static JdbcTemplate jdbc; -////// -////// @Autowired -////// private Team5.SmartTowns.Data.LocationRepository locationRepo; -////// JdbcTemplate jdbc = Mockito.mock(JdbcTemplate.class); -//////// @Autowired -//////// private static Team5.SmartTowns.Data.TownRepository townRepository; -//////// -//////// -//////// private static Team5.SmartTowns.Data.Location town; -//////// private static RowMapper<Location> locationMapper; -////// -////// -////// @BeforeAll -////// public void before() { -//////// MockitoAnnotations.initMocks(this); -//////// location = new Location(); -////// locationRepo = mock(new LocationRepositoryJDBC(jdbc)); -//////// townController = new TownController(); -////// } -//////// @BeforeAll -//////// public static void before(){} -//////// location = new Location(); -////////} -////// -////// @Test -////// void contextLoads() { -////// } -////// -////// @Test -////// public void whenFilteringTownsByLocationsReturnOneTown() { -////// List<Location> allLocations = ( locationRepo.getAllLocation()); -////// List<Town> allTowns = townRepository.getAllTowns(); -////// int allLocationNumber=allLocations.size(); -////// int allLocationNumberAfterFilter=0; -////// for (Town town : allTowns){ -////// allLocationNumberAfterFilter+=townController.filterByLocationForTrails(allLocations, town.getTownName() ).size(); -//// } -////// assertSame(allLocationNumber,allLocationNumberAfterFilter); -////// /// list of all locations, -////// filter by all three towns -////// add together size should be same -//// } -//// -//// + +// @Test +// public void whenAddingLocationsNonApprovedLocationsDontShowInTrails(){ +// /// Discover number of approved/unapproved locations before adding tests +// List<Location> approvedNumber = locationRepo.approvedLocations(); +// } +//// Location loc1= new Location("TestFail", "Test@PleaseFail.test", "Fail Description here", +//// "Caerphilly", 103, false); +//// Location loc2= new Location("TestFail", "Test@PleaseFail2.test", "Fail Description here", +//// "Caerphilly", 103, false); +//// Location loc3= new Location("TestPass", "Test@PleasePass.test", "Pass Description here", +//// "Caerphilly", 103, true); +//// locationRepository.addLocation(loc1); +//// locationRepository.addLocation(loc2); +//// locationRepository.addLocation(loc3); +//// List<Location> ApprovedNumberAfter=locationRepository.approvedLocations(); //// +//// assertEquals(1,( ApprovedNumber.size()-ApprovedNumberAfter.size())); +// } + }