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 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 {
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";
System.out.println("getVenueInfo: ");
String uri = buildURI(apiKey);
System.out.println("URI: " + uri);
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 {
if (isCacheOK(this.lastFetch)) {
logInfo("Cache OK");
logInfo("Current data: " + data);
OpenVenueResponse openVenueResponse = new OpenVenueResponse();
openVenueResponse.setVenueObjects(data);
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());
@ -68,8 +97,6 @@ public class OpenVenueService {
.build()
.send(request, HttpResponse.BodyHandlers.ofString());
lastFetch = LocalDate.now();
return response;
}
@ -133,28 +160,31 @@ 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 {
parser.nextToken(); //next token contains value
return parser.getText(); //getting text field
}
private void skipToken(JsonParser parser, String tokenValue) throws IOException {
if ( null == tokenValue ) {
private void skipToken(JsonParser parser, String tokenValue) throws IOException {
if (null == tokenValue) {
parser.nextToken(); // skip first..
return;
}
String[] asSkipp = {"features:["};
for (String str : asSkipp) {
if ( str.equals(tokenValue) ) {
if (str.equals(tokenValue)) {
parser.nextToken(); // skip..
return;
}
}
}
private boolean isBlockStart(String tv) {
return null != tv && tv.equals("type:Feature");
}
@ -180,8 +210,8 @@ public class OpenVenueService {
// logInfo(":" + tv + ":" + inBlock );
skipToken(parser, tv);
if ( true == isBlockStart(tv) ) {
if ( true == inBlock ) {
if (true == isBlockStart(tv)) {
if (true == inBlock) {
VenueObject d = VenueObject.buildVO(lst);
// logInfo("\t->" + d);
dataVenueObjects.add(d);
@ -210,14 +240,14 @@ public class OpenVenueService {
// Simple props...
for (String str : asTokens) {
if ( str.equals(token) ) {
if (str.equals(token)) {
// logInfo(":->" + tv);
lst.add(tv);
continue;
}
}
// ÅÄÖ 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"))) {
// logInfo(":->" + tv);
lst.add(tv);
@ -226,7 +256,7 @@ public class OpenVenueService {
if ("CHANGE_DATE".equals(token)) {
// Skip 3
for ( int ii = 0; ii < 3; ++ii) {
for (int ii = 0; ii < 3; ++ii) {
parser.nextToken();
}
}
@ -255,7 +285,7 @@ public class OpenVenueService {
private List<VenueObject> createFilteredList(List<VenueObject> dataVenueObjects) {
Set<VenueObject> uniqueSet = new HashSet<>();
logInfo("---Loop.DataVO---" );
logInfo("---Loop.DataVO---");
for (VenueObject object : dataVenueObjects) {
if (object.getCategory().contains("Uteservering") &&
@ -270,10 +300,9 @@ public class OpenVenueService {
// filteredList = fixSwedishCharacters(filteredList);
logInfo("---Loop.DataVO---" + filteredList.size());
data = filteredList;
return filteredList;
}
private List<VenueObject> fixSwedishCharacters(List<VenueObject> filteredList) {
List<VenueObject> newList = new ArrayList<>();