Skip to content

Commit 8fcc151

Browse files
authored
Merge pull request #81 from LatinScribe/Andre_Copy
Search Use Case Implementation (BETA)
2 parents d2527a8 + 46b82e4 commit 8fcc151

17 files changed

Lines changed: 419 additions & 267 deletions

src/main/java/api/JsonCollegeScorecardDB.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
import okhttp3.Request;
77
import okhttp3.Response;
88
import org.jetbrains.annotations.NotNull;
9+
import org.json.JSONArray;
910
import org.json.JSONException;
1011
import org.json.JSONObject;
1112

1213
import java.io.IOException;
14+
import java.util.ArrayList;
1315

1416
// This file contains the methods for accessing data through the College Scorecard API
1517
// All methods return a JSON object
Lines changed: 47 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,47 @@
1-
//// Author: André
2-
//
3-
//package app;
4-
//
5-
//import interface_adapter.ViewManagerModel;
6-
//import interface_adapter.search.SearchController;
7-
//import interface_adapter.search.SearchViewModel;
8-
//import use_case.search.SearchInputBoundary;
9-
//import use_case.search.SearchInteractor;
10-
//import use_case.search.SearchOutputBoundary;
11-
//import use_case.search.SearchUserDataAccessInterface;
12-
//import view.SearchView;
13-
//
14-
//import javax.swing.*;
15-
//import javax.swing.text.View;
16-
//import java.io.IOException;
17-
//
18-
//public class SearchUseCaseFactory {
19-
// /** Prevent instantiation. */
20-
// private SearchUseCaseFactory() {}
21-
//
22-
// public static SearchView create(
23-
// ViewManagerModel viewManagerModel, SearchViewModel searchViewModel, SearchUserDataAccessInterface searchUserDataAccessObject) {
24-
//
25-
// try {
26-
// SearchController searchController = createSearchUseCase(viewManagerModel, searchViewModel, searchUserDataAccessObject);
27-
// return new SearchView(searchController, searchViewModel);
28-
// } catch (IOException e) {
29-
// JOptionPane.showMessageDialog(null, "Could not open user data file.");
30-
// }
31-
//
32-
// return null;
33-
// }
34-
//
35-
// private static SearchController createSearchUseCase(ViewManagerModel viewManagerModel, SearchViewModel signupViewModel, SearchUserDataAccessInterface userDataAccessObject) throws IOException {
36-
//
37-
// // Notice how we pass this method's parameters to the Presenter.
38-
// SearchOutputBoundary searchOutputBoundary = new SearchPresenter(viewManagerModel, signupViewModel);
39-
//
40-
// SearchInputBoundary searchSignupInteractor = new SearchInteractor(
41-
// userDataAccessObject, searchOutputBoundary);
42-
//
43-
// return new SearchController(searchSignupInteractor);
44-
// }
45-
//
46-
//}
1+
// Author: André
2+
3+
package app;
4+
5+
import entity.UniversityFactory;
6+
import interface_adapter.ViewManagerModel;
7+
import interface_adapter.search.SearchController;
8+
import interface_adapter.search.SearchPresenter;
9+
import interface_adapter.search.SearchViewModel;
10+
import use_case.search.SearchInputBoundary;
11+
import use_case.search.SearchInteractor;
12+
import use_case.search.SearchOutputBoundary;
13+
import use_case.search.SearchUserDataAccessInterface;
14+
import view.SearchView;
15+
16+
import javax.swing.*;
17+
import java.io.IOException;
18+
19+
public class SearchUseCaseFactory {
20+
/** Prevent instantiation. */
21+
private SearchUseCaseFactory() {}
22+
23+
public static SearchView create(
24+
ViewManagerModel viewManagerModel, SearchViewModel searchViewModel, SearchUserDataAccessInterface searchUserDataAccessObject, UniversityFactory shortUniversityFactory) {
25+
26+
try {
27+
SearchController searchController = createSearchUseCase(viewManagerModel, searchViewModel, searchUserDataAccessObject, shortUniversityFactory);
28+
return new SearchView(searchController, searchViewModel);
29+
} catch (IOException e) {
30+
JOptionPane.showMessageDialog(null, "Could not open user data file.");
31+
}
32+
33+
return null;
34+
}
35+
36+
private static SearchController createSearchUseCase(ViewManagerModel viewManagerModel, SearchViewModel signupViewModel, SearchUserDataAccessInterface userDataAccessObject, UniversityFactory shortUniversityFactory) throws IOException {
37+
38+
// Notice how we pass this method's parameters to the Presenter.
39+
SearchOutputBoundary searchOutputBoundary = new SearchPresenter(viewManagerModel, signupViewModel);
40+
41+
SearchInputBoundary searchSignupInteractor = new SearchInteractor(
42+
userDataAccessObject, searchOutputBoundary, shortUniversityFactory);
43+
44+
return new SearchController(searchSignupInteractor);
45+
}
46+
47+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Author: André
2+
3+
package data_access;
4+
5+
import api.JsonCollegeScorecardDB;
6+
import entity.UniversityFactory;
7+
import entity.University;
8+
import org.json.JSONArray;
9+
import org.json.JSONObject;
10+
import use_case.search.SearchUserDataAccessInterface;
11+
12+
import java.util.ArrayList;
13+
import java.util.List;
14+
15+
public class APIDataAccessObject implements SearchUserDataAccessInterface {
16+
17+
private final JsonCollegeScorecardDB database = new JsonCollegeScorecardDB();
18+
19+
@Override
20+
public JSONObject searchQuery(String searchparameters) {
21+
return database.basicQuery(searchparameters, "fields=id,school.name,school.state,school.city,admissions.admission_rate.overall,cost.tuition.in_state,cost.tuition.out_of_state,admissions.sat_scores.average.overall,admissions.act_scores.midpoint.cumulative,school.school_url");
22+
}
23+
}

src/main/java/entity/CommonUniversity.java

Lines changed: 57 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,42 +2,87 @@
22

33
public class CommonUniversity implements University {
44

5+
private final Integer schoolID;
56
private final String schoolName;
67
private final String state;
78
private final String city;
8-
private final double graduationRate;
9-
private final double averageTuition;
9+
private final Double admissionRate;
10+
private final Integer averageInStateTuition;
11+
private final Integer averageOutOfStateTuition;
12+
private final Double averageSATScore;
13+
private final Double averageACTScore;
14+
private final String url;
1015

11-
public CommonUniversity(String schoolName, String state, String city, double graduationRate, double averageTuition) {
16+
public CommonUniversity(Integer schoolID, String schoolName, String state, String city, Double admissionRate, Integer averageInStateTuition, int averageOutOfStateTuition, Double averageSATScore, Double averageACTScore, String url) {
17+
this.schoolID = schoolID;
1218
this.schoolName = schoolName;
1319
this.state = state;
1420
this.city = city;
15-
this.graduationRate = graduationRate;
16-
this.averageTuition = averageTuition;
21+
this.admissionRate = admissionRate;
22+
this.averageInStateTuition = averageInStateTuition;
23+
this.averageOutOfStateTuition = averageOutOfStateTuition;
24+
this.averageSATScore = averageSATScore;
25+
this.averageACTScore = averageACTScore;
26+
this.url = url;
1727
}
1828

29+
@Override
30+
public Integer getSchoolID() {return schoolID;}
31+
1932
@Override
2033
public String getSchoolName() {
21-
return null;
34+
return schoolName;
2235
}
2336

2437
@Override
2538
public String getState() {
26-
return null;
39+
return state;
2740
}
2841

2942
@Override
3043
public String getCity() {
31-
return null;
44+
return city;
45+
}
46+
47+
@Override
48+
public Double getAdmissionRate() {
49+
return admissionRate;
50+
}
51+
52+
@Override
53+
public Integer getAverageInStateTuition() {
54+
return averageInStateTuition;
55+
}
56+
57+
@Override
58+
public Integer getAverageOutOfStateTuition() {
59+
return averageOutOfStateTuition;
60+
}
61+
62+
@Override
63+
public Double getAverageSATScore() {
64+
return averageSATScore;
65+
}
66+
67+
@Override
68+
public Double getAverageACTScore() {
69+
return averageACTScore;
3270
}
3371

3472
@Override
35-
public double getGraduationRate() {
36-
return graduationRate;
73+
public String getUrl() {
74+
return url;
3775
}
3876

3977
@Override
40-
public double getAverageTuition() {
41-
return averageTuition;
78+
public String toString() {
79+
return "University Name: " + schoolName + "\"" +
80+
"Location: " + city + ", " + state + "\"" +
81+
"Admission Rate: " + admissionRate.toString() + "\"" +
82+
"Average Tuition (In State): " + averageInStateTuition.toString() + "\"" +
83+
"Average Tuition (Out of State) " + averageOutOfStateTuition.toString() + "\"" +
84+
"Average SAT Score: " + averageSATScore.toString() + "\"" +
85+
"Average ACT Score: " + averageACTScore.toString() + "\"" +
86+
"URL: " + url;
4287
}
4388
}
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package entity;
22

3-
public class CommonUniversityFactory implements UniversityFactory{
3+
4+
public class CommonUniversityFactory implements UniversityFactory {
45

56
@Override
6-
public CommonUniversity create(String schoolName, String state, String city, double graduationRate, double averageTuition) {
7-
return new CommonUniversity(schoolName, state, city, graduationRate, averageTuition);
7+
public CommonUniversity create(Integer schoolID, String schoolName, String state, String city, Double admissionRate, Integer averageInStateTuition, Integer averageOutOfStateTuition, Double averageSATScore, Double averageACTScore, String url) {
8+
return new CommonUniversity(schoolID, schoolName, state, city, admissionRate, averageInStateTuition, averageOutOfStateTuition, averageSATScore, averageACTScore, url);
89
}
910
}

src/main/java/entity/ExistingCommonUser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,4 @@ public LocalDateTime getCreationTime() {
5454
return creationTime;
5555
}
5656
}
57+

src/main/java/entity/University.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,16 @@
22

33
public interface University {
44

5+
Integer getSchoolID();
56
String getSchoolName();
67
String getState();
78
String getCity();
8-
double getGraduationRate();
9-
double getAverageTuition();
9+
Double getAdmissionRate();
10+
Integer getAverageInStateTuition();
11+
Integer getAverageOutOfStateTuition();
12+
Double getAverageSATScore();
13+
Double getAverageACTScore();
14+
String getUrl();
15+
1016

1117
}
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package entity;
22

3-
import java.time.LocalDateTime;
4-
53
public interface UniversityFactory {
6-
CommonUniversity create(String schoolName, String state, String city, double graduationRate, double averageTuition);
4+
CommonUniversity create(Integer schoolID, String schoolName, String state, String city, Double admissionRate, Integer averageInStateTuition, Integer averageOutOfStateTuition, Double averageSATScore, Double averageACTScore, String url);
5+
76
}

src/main/java/interface_adapter/search/SearchPresenter.java

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4,35 +4,35 @@
44

55
import interface_adapter.ViewManagerModel;
66
import use_case.search.SearchOutputBoundary;
7+
import use_case.search.SearchOutputData;
78

8-
//public class SearchPresenter implements SearchOutputBoundary {
9-
//
10-
// private final SearchViewModel searchViewModel;
11-
// private ViewManagerModel viewManagerModel;
12-
//
13-
// public SignupPresenter(ViewManagerModel viewManagerModel,
14-
// SearchViewModel searchViewModel) {
15-
// this.viewManagerModel = viewManagerModel;
16-
// this.searchViewModel = searchViewModel;
17-
// }
18-
//
19-
// @Override
20-
// // Presenter
21-
// public void prepareSuccessView(SearchOutputData response) {
22-
// // On success, switch to the login view.
23-
//
24-
// LoginState loginState = loginViewModel.getState();
25-
// loginState.setUsername(response.getUsername());
26-
// this.loginViewModel.setState(loginState);
27-
// loginViewModel.firePropertyChanged();
28-
//
29-
// viewManagerModel.setActiveView(loginViewModel.getViewName());
30-
// viewManagerModel.firePropertyChanged();
31-
// }
32-
//
33-
// @Override
34-
// public void prepareFailView(String error) {
35-
// signupState = signupViewModel.getState();
36-
// signupState.setUsernameError(error);
37-
// signupViewModel.firePropertyChanged();
38-
// }
9+
public class SearchPresenter implements SearchOutputBoundary {
10+
11+
private SearchViewModel searchViewModel;
12+
private ViewManagerModel viewManagerModel;
13+
// private ResultsViewModel resultsViewModel;
14+
15+
public SearchPresenter(ViewManagerModel viewManagerModel, SearchViewModel searchViewModel) {
16+
this.searchViewModel = searchViewModel;
17+
this.viewManagerModel = viewManagerModel;
18+
// this.resultsViewModel = resultsViewModel;
19+
}
20+
21+
@Override
22+
public void prepareSuccessView(SearchOutputData response) {
23+
SearchState searchState = searchViewModel.getState();
24+
searchState.setUniversities(response.getUniversities());
25+
this.searchViewModel.setState(searchState);
26+
this.searchViewModel.firePropertyChanged();
27+
28+
viewManagerModel.setActiveView(searchViewModel.getViewName());
29+
viewManagerModel.firePropertyChanged();
30+
}
31+
32+
@Override
33+
public void prepareResultsNotFoundView(String error) {
34+
SearchState searchState = searchViewModel.getState();
35+
searchState.setSearchError(error);
36+
searchViewModel.fireFailChange();
37+
}
38+
}

src/main/java/interface_adapter/search/SearchState.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,18 @@
22

33
package interface_adapter.search;
44

5+
import entity.University;
6+
import java.util.List;
7+
58
public class SearchState {
6-
private String searchCriteria = "";
9+
private String searchCriteria;
710
private String searchError = null;
11+
private List<University> universities = null;
812

913
public SearchState(SearchState copy) {
1014
searchCriteria = copy.searchCriteria;
1115
searchError = copy.searchError;
16+
universities = copy.universities;
1217
}
1318

1419
// Because of the previous copy constructor, the default constructor must be explicit.
@@ -23,6 +28,11 @@ public String getSearchError() {
2328
return searchError;
2429
}
2530

31+
// Currently used as a test to see if the parameters went through.
32+
public String getUniversities() {
33+
return universities.toString();
34+
}
35+
2636
public void setSearchCriteria(String searchCriteria) {
2737
this.searchCriteria = searchCriteria;
2838
}
@@ -31,10 +41,15 @@ public void setSearchError(String searchError) {
3141
this.searchError = searchError;
3242
}
3343

44+
public void setUniversities(List<University> universities) {
45+
this.universities = universities;
46+
}
47+
3448
@Override
3549
public String toString() {
36-
return "SearchState{" +
50+
return "SignupState{" +
3751
"username='" + searchCriteria + '\'' +
52+
", universities='" + universities + '\'' +
3853
'}';
54+
}
3955
}
40-
}

0 commit comments

Comments
 (0)