Added support to fetch venues #3
@ -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<>();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user