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