diff --git a/pom.xml b/pom.xml index 15abbcf676548f6e887af535fe8928c391d89a01..bc623282a18e2fb8fb19c881278bb40481004a43 100755 --- a/pom.xml +++ b/pom.xml @@ -170,6 +170,12 @@ <version>9.4.1211</version> <scope>provided</scope> </dependency> + <dependency> + <groupId>com.fasterxml.jackson.dataformat</groupId> + <artifactId>jackson-dataformat-csv</artifactId> + <version>2.6.2</version> + <type>jar</type> + </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> diff --git a/src/main/java/no/nibio/vips/logic/controller/session/ForecastBean.java b/src/main/java/no/nibio/vips/logic/controller/session/ForecastBean.java index f06f13638eba40806db40747f377ef80f02bf261..4d36b8a4de17d89ffb7f9f6d2a14aa5aad48e3aa 100755 --- a/src/main/java/no/nibio/vips/logic/controller/session/ForecastBean.java +++ b/src/main/java/no/nibio/vips/logic/controller/session/ForecastBean.java @@ -113,6 +113,10 @@ public class ForecastBean { { // Authentication ForecastConfiguration fc = em.find(ForecastConfiguration.class, forecastConfigurationId); + if(fc == null) + { + return true; + } if(fc.getIsPrivate()) { if(userUUID == null) diff --git a/src/main/java/no/nibio/vips/logic/service/LogicService.java b/src/main/java/no/nibio/vips/logic/service/LogicService.java index c3f4a7d0e3989d6b320450b6f4c2981e7a16c9b1..2124eac211242d6a67130b398c1df59d290dfddc 100755 --- a/src/main/java/no/nibio/vips/logic/service/LogicService.java +++ b/src/main/java/no/nibio/vips/logic/service/LogicService.java @@ -115,6 +115,60 @@ public class LogicService { } } + /** + * Get all results for one pest prediction + * @param forecastConfigurationId + * @param userUUID if the forecast is private, the correct userUUID must be supplied. + * @return + */ + @GET + @Path("forecastresults/{forecastConfigurationId}/csv") + @GZIP + @Produces("text/plain;charset=UTF-8") + public Response getForecastResultsCSV( + @PathParam("forecastConfigurationId") Long forecastConfigurationId, + @QueryParam("userUUID") String userUUID + ) + { + if(SessionControllerGetter.getForecastBean().isUserAuthorizedForForecastConfiguration(forecastConfigurationId, userUUID)) + { + String CSVOutput = ""; + List<ForecastResult> results = SessionControllerGetter.getForecastBean().getForecastResults(forecastConfigurationId); + if(results != null && ! results.isEmpty()) + { + List<String> parameters = new ArrayList<>();//new String[results.get(0).getKeys().size() + 3]; + parameters.add("Valid time start"); + parameters.add("Valid time end"); + parameters.add("Warning status"); + results.get(0).getKeys().stream().forEach(key->{ + parameters.add(key); + }); + + CSVOutput += String.join(",", parameters) + "\n"; + + CSVOutput += results.stream().map(result->{ + String line = result.getValidTimeStart() + "," + result.getValidTimeEnd() + "," + result.getWarningStatus(); + Map<String, String> valueMap = result.getAllValuesAsMap(); + for(int i=3;i<parameters.size();i++) + { + line += "," + valueMap.get(parameters.get(i)); + } + line += "\n"; + return line; + }).collect(Collectors.joining("\n")); + + return Response.ok().entity(CSVOutput).build(); + + } + + return Response.ok().entity("").build(); + } + else + { + return Response.status(Response.Status.UNAUTHORIZED).build(); + } + } + /** * Get the latestDays results for one pest prediction * @param forecastConfigurationId