Added support to fetch venues #3

Merged
adsu7578 merged 4 commits from test into develop 2022-05-23 10:26:31 +02:00
Showing only changes of commit 1830d386cc - Show all commits

View File

@ -25,28 +25,57 @@ public class OpenVenueService {
private List<VenueObject> data; private List<VenueObject> data;
private LocalDate lastFetch; private LocalDate lastFetch;
public OpenVenueService() {
// Pre load data...
try {
this.getVenueInfo();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private boolean isCacheOK(LocalDate ld) {
if (this.data == null) {
return false;
} else if (lastFetch != null && ld.plusDays(NO_DAYS_BETWEEN_FETCH).isBefore(LocalDate.now())) {
// Clear cache
this.data = null;
this.lastFetch = null;
return false;
} else {
return true;
}
}
public OpenVenueResponse getVenueInfo() throws IOException, InterruptedException { public OpenVenueResponse getVenueInfo() throws IOException, InterruptedException {
logInfo("Start getVenueInfo");
// String tempURI = "https://openstreetgs.stockholm.se/geoservice/api/b8e20fd7-5654-465e-8976-35b4de902b41/wfs?service=wfs&version=2.0.0&request=GetFeature&typeName=Markupplatelse&CQL_FILTER=Kategorityp=%271.411I,%20Uteservering%20B-läge%27%20&outputFormat=application/json"; // String tempURI = "https://openstreetgs.stockholm.se/geoservice/api/b8e20fd7-5654-465e-8976-35b4de902b41/wfs?service=wfs&version=2.0.0&request=GetFeature&typeName=Markupplatelse&CQL_FILTER=Kategorityp=%271.411I,%20Uteservering%20B-läge%27%20&outputFormat=application/json";
System.out.println("getVenueInfo: "); if (isCacheOK(this.lastFetch)) {
String uri = buildURI(apiKey); logInfo("Cache OK");
System.out.println("URI: " + uri); logInfo("Current data: " + data);
if (data == null || lastFetch != null &&
(lastFetch.plusDays(NO_DAYS_BETWEEN_FETCH)).isAfter(LocalDate.now())) {
HttpRequest request = createNewRequest(uri);
HttpResponse<String> response = handleResponse(request);
return buildResult(response.body());
} else {
OpenVenueResponse openVenueResponse = new OpenVenueResponse(); OpenVenueResponse openVenueResponse = new OpenVenueResponse();
openVenueResponse.setVenueObjects(data); openVenueResponse.setVenueObjects(data);
return openVenueResponse; return openVenueResponse;
} }
System.out.println("getVenueInfo: ");
String uri = buildURI(apiKey);
System.out.println("URI: " + uri);
HttpRequest request = createNewRequest(uri);
HttpResponse<String> response = handleResponse(request);
OpenVenueResponse ovr = buildResult(response.body());
// Save in cache...
this.data = ovr.getVenueObjects();
this.lastFetch = LocalDate.now();
return ovr;
// System.out.println("Responce body: " + response.body()); // System.out.println("Responce body: " + response.body());
@ -68,8 +97,6 @@ public class OpenVenueService {
.build() .build()
.send(request, HttpResponse.BodyHandlers.ofString()); .send(request, HttpResponse.BodyHandlers.ofString());
lastFetch = LocalDate.now();
return response; return response;
} }
@ -133,7 +160,9 @@ public class OpenVenueService {
}*/ }*/
private void logInfo(String msg) {System.out.println(":>" + msg);} private void logInfo(String msg) {
System.out.println(":>" + msg);
}
private String getTokenText(JsonParser parser) throws IOException { private String getTokenText(JsonParser parser) throws IOException {
parser.nextToken(); //next token contains value parser.nextToken(); //next token contains value
@ -141,20 +170,21 @@ public class OpenVenueService {
} }
private void skipToken(JsonParser parser, String tokenValue) throws IOException { private void skipToken(JsonParser parser, String tokenValue) throws IOException {
if ( null == tokenValue ) { if (null == tokenValue) {
parser.nextToken(); // skip first.. parser.nextToken(); // skip first..
return; return;
} }
String[] asSkipp = {"features:["}; String[] asSkipp = {"features:["};
for (String str : asSkipp) { for (String str : asSkipp) {
if ( str.equals(tokenValue) ) { if (str.equals(tokenValue)) {
parser.nextToken(); // skip.. parser.nextToken(); // skip..
return; return;
} }
} }
} }
private boolean isBlockStart(String tv) { private boolean isBlockStart(String tv) {
return null != tv && tv.equals("type:Feature"); return null != tv && tv.equals("type:Feature");
} }
@ -180,8 +210,8 @@ public class OpenVenueService {
// logInfo(":" + tv + ":" + inBlock ); // logInfo(":" + tv + ":" + inBlock );
skipToken(parser, tv); skipToken(parser, tv);
if ( true == isBlockStart(tv) ) { if (true == isBlockStart(tv)) {
if ( true == inBlock ) { if (true == inBlock) {
VenueObject d = VenueObject.buildVO(lst); VenueObject d = VenueObject.buildVO(lst);
// logInfo("\t->" + d); // logInfo("\t->" + d);
dataVenueObjects.add(d); dataVenueObjects.add(d);
@ -210,14 +240,14 @@ public class OpenVenueService {
// Simple props... // Simple props...
for (String str : asTokens) { for (String str : asTokens) {
if ( str.equals(token) ) { if (str.equals(token)) {
// logInfo(":->" + tv); // logInfo(":->" + tv);
lst.add(tv); lst.add(tv);
continue; continue;
} }
} }
// ÅÄÖ problem: "Populärnamn", "Tillstånd_tom" // ÅÄÖ problem: "Populärnamn", "Tillstånd_tom"
if ( (token.startsWith("Popul") && token.endsWith("rnamn")) || if ((token.startsWith("Popul") && token.endsWith("rnamn")) ||
(token.startsWith("Tillst") && token.endsWith("nd_tom"))) { (token.startsWith("Tillst") && token.endsWith("nd_tom"))) {
// logInfo(":->" + tv); // logInfo(":->" + tv);
lst.add(tv); lst.add(tv);
@ -226,7 +256,7 @@ public class OpenVenueService {
if ("CHANGE_DATE".equals(token)) { if ("CHANGE_DATE".equals(token)) {
// Skip 3 // Skip 3
for ( int ii = 0; ii < 3; ++ii) { for (int ii = 0; ii < 3; ++ii) {
parser.nextToken(); parser.nextToken();
} }
} }
@ -255,7 +285,7 @@ public class OpenVenueService {
private List<VenueObject> createFilteredList(List<VenueObject> dataVenueObjects) { private List<VenueObject> createFilteredList(List<VenueObject> dataVenueObjects) {
Set<VenueObject> uniqueSet = new HashSet<>(); Set<VenueObject> uniqueSet = new HashSet<>();
logInfo("---Loop.DataVO---" ); logInfo("---Loop.DataVO---");
for (VenueObject object : dataVenueObjects) { for (VenueObject object : dataVenueObjects) {
if (object.getCategory().contains("Uteservering") && if (object.getCategory().contains("Uteservering") &&
@ -270,10 +300,9 @@ public class OpenVenueService {
// filteredList = fixSwedishCharacters(filteredList); // filteredList = fixSwedishCharacters(filteredList);
logInfo("---Loop.DataVO---" + filteredList.size()); logInfo("---Loop.DataVO---" + filteredList.size());
data = filteredList;
return filteredList; return filteredList;
} }
private List<VenueObject> fixSwedishCharacters(List<VenueObject> filteredList) { private List<VenueObject> fixSwedishCharacters(List<VenueObject> filteredList) {
List<VenueObject> newList = new ArrayList<>(); List<VenueObject> newList = new ArrayList<>();