Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Develop -> Main #79

Merged
merged 5 commits into from
Mar 24, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
@@ -59,7 +59,7 @@ jobs:
uses: actions/checkout@v3

- name: Set up JDK 17
uses: actions/setup-java@v2
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'adopt'
@@ -68,10 +68,10 @@ jobs:
run: mvn -Dtest=com.napier.sem.AppUnitTest test

- name: Upload results to CodeCov
uses: codecov/codecov-action@v2
uses: codecov/codecov-action@v3
with:
directory: ./target/site/jacoco
flags: Unit Tests
flags: Unit_Tests
verbose: true

integration-test:
@@ -84,7 +84,7 @@ jobs:
uses: actions/checkout@v3

- name: Set up JDK 17
uses: actions/setup-java@v2
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'adopt'
@@ -103,10 +103,10 @@ jobs:
docker image prune -f

- name: Upload results to CodeCov
uses: codecov/codecov-action@v2
uses: codecov/codecov-action@v3
with:
directory: ./target/site/jacoco
flags: Integration Tests
flags: Integration_Tests
verbose: true

build:
@@ -124,7 +124,7 @@ jobs:
uses: actions/checkout@v3

- name: Set up JDK 17
uses: actions/setup-java@v2
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'adopt'
1 change: 1 addition & 0 deletions src/main/java/com/napier/sem/App.java
Original file line number Diff line number Diff line change
@@ -12,6 +12,7 @@
import java.util.List;
import java.util.Scanner;

//TODO: Look into making the Cities and Countries class methods all non static
public class App {
public static void main(String[] args) {
// Initiate database Class
48 changes: 27 additions & 21 deletions src/main/java/com/napier/sem/database/Cities.java
Original file line number Diff line number Diff line change
@@ -17,7 +17,7 @@ public class Cities {
private static final String baseFrom = " FROM city INNER JOIN country ON country.Code=city.CountryCode ";
private static final String baseWhere = "WHERE city.ID=country.Capital ";

private static List<ExtendedCityReport> parseExtendedCityResults(DB db, String query) throws SQLException {
public static List<ExtendedCityReport> parseExtendedCityResults(DB db, String query) {
List<ExtendedCityReport> countries = new ArrayList<>();

try (ResultSet results = db.runQuery(query)) {
@@ -33,11 +33,13 @@ private static List<ExtendedCityReport> parseExtendedCityResults(DB db, String q
);
countries.add(report);
}
} catch (SQLException e) {
System.out.println("Cities#parseExtendedCityResults failed: " + e.getMessage());
}
return countries;
}

private static List<ExtendedCapitalCityReport> parseCapitalCityResults(DB db, String query) throws SQLException {
public static List<ExtendedCapitalCityReport> parseCapitalCityResults(DB db, String query) {
List<ExtendedCapitalCityReport> countries = new ArrayList<>();

try (ResultSet results = db.runQuery(query)) {
@@ -52,11 +54,13 @@ private static List<ExtendedCapitalCityReport> parseCapitalCityResults(DB db, St
);
countries.add(report);
}
} catch (SQLException e) {
System.out.println("Cities#parseCapitalCityResults failed: " + e.getMessage());
}
return countries;
}

private static List<PopulationReport> parsePopulationResults(DB db, String query) throws SQLException {
public static List<PopulationReport> parsePopulationResults(DB db, String query) {
List<PopulationReport> countries = new ArrayList<>();

try (ResultSet results = db.runQuery(query)) {
@@ -72,17 +76,19 @@ private static List<PopulationReport> parsePopulationResults(DB db, String query
);
countries.add(report);
}
} catch (SQLException e) {
System.out.println("Cities#parsePopulationResults failed: " + e.getMessage());
}
return countries;
}

public static List<CityReport> getAllCitiesByPopulation(DB db, int limit) throws SQLException {
public static List<CityReport> getAllCitiesByPopulation(DB db, int limit) {
String query = baseSelect + baseFrom + "ORDER BY city.Population DESC";
if(limit > 0) query += " LIMIT " + limit;
return new ArrayList<>(parseExtendedCityResults(db, query));
}

public static HashMap<String, List<CityReport>> getCitiesInContinentByPopulation(DB db, int limit) throws SQLException {
public static HashMap<String, List<CityReport>> getCitiesInContinentByPopulation(DB db, int limit) {
String query = baseSelect + ", ROW_NUMBER() OVER (PARTITION BY Continent ORDER BY city.Population DESC) AS continent_rank" +
baseFrom + "ORDER BY country.Continent, city.Population DESC";
if(limit > 0) query = "SELECT * FROM (" + query + ") AS T WHERE continent_rank <= " + limit;
@@ -98,7 +104,7 @@ public static HashMap<String, List<CityReport>> getCitiesInContinentByPopulation
return continentMap;
}

public static HashMap<String, List<CityReport>> getCitiesInRegionByPopulation(DB db, int limit) throws SQLException {
public static HashMap<String, List<CityReport>> getCitiesInRegionByPopulation(DB db, int limit) {
String query = baseSelect + ", ROW_NUMBER() OVER (PARTITION BY Region ORDER BY city.Population DESC) AS region_rank" +
baseFrom + "ORDER BY country.Region, city.Population DESC";
if(limit > 0) query = "SELECT * FROM (" + query + ") AS T WHERE region_rank <= " + limit;
@@ -114,8 +120,8 @@ public static HashMap<String, List<CityReport>> getCitiesInRegionByPopulation(DB
return regionMap;
}

public static HashMap<String, List<CityReport>> getCitiesInCountryByPopulation(DB db, int limit) throws SQLException {
String query = baseSelect + ", ROW_NUMBER() OVER (PARTITION BY Country ORDER BY city.Population DESC) AS country_rank" +
public static HashMap<String, List<CityReport>> getCitiesInCountryByPopulation(DB db, int limit) {
String query = baseSelect + ", ROW_NUMBER() OVER (PARTITION BY country.Name ORDER BY city.Population DESC) AS country_rank" +
baseFrom + "ORDER BY Country, city.Population DESC";
if(limit > 0) query = "SELECT * FROM (" + query + ") AS T WHERE country_rank <= " + limit;

@@ -130,7 +136,7 @@ public static HashMap<String, List<CityReport>> getCitiesInCountryByPopulation(D
return countryMap;
}

public static HashMap<String, List<CityReport>> getCitiesInDistrictByPopulation(DB db, int limit) throws SQLException {
public static HashMap<String, List<CityReport>> getCitiesInDistrictByPopulation(DB db, int limit) {
String query = baseSelect + ", ROW_NUMBER() OVER (PARTITION BY District ORDER BY city.Population DESC) AS district_rank" +
baseFrom + "ORDER BY city.District, city.Population DESC";
if(limit > 0) query = "SELECT * FROM (" + query + ") AS T WHERE district_rank <= " + limit;
@@ -146,14 +152,14 @@ public static HashMap<String, List<CityReport>> getCitiesInDistrictByPopulation(
return districtMap;
}

public static List<CapitalCityReport> getCapitalCitiesByPopulation(DB db, int limit) throws SQLException {
public static List<CapitalCityReport> getCapitalCitiesByPopulation(DB db, int limit) {
String query = baseSelect + baseFrom + baseWhere + "ORDER BY city.Population DESC";
if(limit > 0) query += " LIMIT " + limit;

return new ArrayList<>(parseCapitalCityResults(db, query));
}

public static HashMap<String, List<CapitalCityReport>> getCapitalCitiesInContinentByPopulation(DB db, int limit) throws SQLException {
public static HashMap<String, List<CapitalCityReport>> getCapitalCitiesInContinentByPopulation(DB db, int limit) {
String query = baseSelect + ", ROW_NUMBER() OVER (PARTITION BY Continent ORDER BY city.Population DESC) AS continent_rank" +
baseFrom + baseWhere +
"ORDER BY country.Continent, city.Population DESC";
@@ -170,7 +176,7 @@ public static HashMap<String, List<CapitalCityReport>> getCapitalCitiesInContine
return continentMap;
}

public static HashMap<String, List<CapitalCityReport>> getCapitalCitiesInRegionByPopulation(DB db, int limit) throws SQLException {
public static HashMap<String, List<CapitalCityReport>> getCapitalCitiesInRegionByPopulation(DB db, int limit) {
String query = baseSelect + ", ROW_NUMBER() OVER (PARTITION BY country.Region ORDER BY city.Population DESC) AS region_rank " +
baseFrom + baseWhere +
"ORDER BY country.Region, city.Population DESC";
@@ -187,9 +193,9 @@ public static HashMap<String, List<CapitalCityReport>> getCapitalCitiesInRegionB
return regionMap;
}

public static HashMap<String, PopulationReport> getPopulationByContinent(DB db) throws SQLException {
String query = "SELECT country.Continent AS Name, SUM(DISTINCT country.population) AS Population, SUM(city.Population) AS PopulationInCities " +
baseFrom + "GROUP BY country.Continent " + "ORDER BY city.Population DESC";
public static HashMap<String, PopulationReport> getPopulationByContinent(DB db) {
String query = "SELECT country.Continent AS Name, SUM(DISTINCT country.Population) AS Population, SUM(city.Population) AS PopulationInCities " +
baseFrom + "GROUP BY country.Continent " + "ORDER BY Population DESC";

List<PopulationReport> results = parsePopulationResults(db, query);
HashMap<String, PopulationReport> continentMap = new HashMap<>();
@@ -199,9 +205,9 @@ public static HashMap<String, PopulationReport> getPopulationByContinent(DB db)
return continentMap;
}

public static HashMap<String, PopulationReport> getPopulationByRegion(DB db) throws SQLException {
String query = "SELECT country.Region AS Name, SUM(DISTINCT country.population) AS Population, SUM(city.Population) AS PopulationInCities " +
baseFrom + "GROUP BY country.Region " + "ORDER BY city.Population DESC";
public static HashMap<String, PopulationReport> getPopulationByRegion(DB db) {
String query = "SELECT country.Region AS Name, SUM(DISTINCT country.Population) AS Population, SUM(city.Population) AS PopulationInCities " +
baseFrom + "GROUP BY country.Region " + "ORDER BY Population DESC";

List<PopulationReport> results = parsePopulationResults(db, query);
HashMap<String, PopulationReport> regionMap = new HashMap<>();
@@ -211,9 +217,9 @@ public static HashMap<String, PopulationReport> getPopulationByRegion(DB db) thr
return regionMap;
}

public static HashMap<String, PopulationReport> getPopulationByCountry(DB db) throws SQLException {
String query = "SELECT country.Name AS Name, country.Population AS Population, SUM(city.Population) AS PopulationInCities " +
baseFrom + "GROUP BY country.Name " + "ORDER BY city.Population DESC";
public static HashMap<String, PopulationReport> getPopulationByCountry(DB db) {
String query = "SELECT country.Name AS Name, SUM(DISTINCT country.Population) AS Population, SUM(city.Population) AS PopulationInCities " +
baseFrom + "GROUP BY country.Name " + "ORDER BY Population DESC";

List<PopulationReport> results = parsePopulationResults(db, query);
HashMap<String, PopulationReport> countryMap = new HashMap<>();
10 changes: 6 additions & 4 deletions src/main/java/com/napier/sem/database/Countries.java
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@ public class Countries {
private static final String baseSelect = "SELECT country.Name, country.Population, country.Code, country.Continent, country.Region, city.name AS Capital";
private static final String baseFrom = " FROM country INNER JOIN city ON country.Capital=city.ID WHERE country.Capital IS NOT NULL ";

private static List<CountryReport> parseResults(DB db, String query) throws SQLException {
public static List<CountryReport> parseResults(DB db, String query) {
List<CountryReport> countries = new ArrayList<>();

try (ResultSet results = db.runQuery(query)) {
@@ -28,16 +28,18 @@ private static List<CountryReport> parseResults(DB db, String query) throws SQLE
);
countries.add(report);
}
} catch (SQLException e) {
System.out.println("Countries#parseResults failed: " + e.getMessage());
}
return countries;
}
public static List<CountryReport> getAllCountriesByPopulation(DB db, int limit) throws SQLException {
public static List<CountryReport> getAllCountriesByPopulation(DB db, int limit) {
String query = baseSelect + baseFrom + "ORDER BY country.Population DESC";
if(limit > 0) query += " LIMIT " + limit;
return parseResults(db, query);
}

public static HashMap<String, List<CountryReport>> getCountriesInContinentByPopulation(DB db, int limit) throws SQLException {
public static HashMap<String, List<CountryReport>> getCountriesInContinentByPopulation(DB db, int limit) {
String query = baseSelect + ", ROW_NUMBER() over (PARTITION BY Continent order by Population DESC) AS continent_rank" +
baseFrom + "ORDER BY country.Continent, country.Population DESC";
if(limit > 0) query = "SELECT * FROM (" + query + ") AS T WHERE continent_rank <= " + limit;
@@ -53,7 +55,7 @@ public static HashMap<String, List<CountryReport>> getCountriesInContinentByPopu
return continentMap;
}

public static HashMap<String, List<CountryReport>> getCountriesInRegionByPopulation(DB db, int limit) throws SQLException {
public static HashMap<String, List<CountryReport>> getCountriesInRegionByPopulation(DB db, int limit) {
String query = baseSelect + ", ROW_NUMBER() over (PARTITION BY Region ORDER BY Population DESC) AS region_rank" +
baseFrom + "ORDER BY country.Region, country.Population DESC";
if(limit > 0) query = "SELECT * FROM (" + query + ") AS T WHERE region_rank <= " + limit;
11 changes: 5 additions & 6 deletions src/main/java/com/napier/sem/database/DB.java
Original file line number Diff line number Diff line change
@@ -23,17 +23,16 @@ public void connect() {
System.out.println("Connected to database");
} catch (SQLException e) {
System.out.println("Failed to connect to database");
System.out.println(e.getMessage());
}
}

public void disconnect() {
try {
if (connection != null) {
if (connection != null) {
try {
connection.close();
} catch (SQLException ex) {
System.out.println("Database failed to disconnect");
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
}

@@ -46,7 +45,7 @@ public ResultSet runQuery(String query) {
var statement = connection.createStatement();
return statement.executeQuery(query);
} catch (SQLException e) {
System.out.println(e.getMessage());
System.out.println("DB#runQuery failed: " + e.getMessage());
}
return null;
}
Loading