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 b6553a330107a34e6044e20f79c61881e5aa0b4d..2a0a276ba349b9c1a9aa4c14875f8b1897368948 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 @@ -344,6 +344,29 @@ public class ForecastBean { } } + public List<ForecastConfiguration> getForecastConfigurations(List<Integer> organizationIds, Date from, Date to) + { + List<VipsLogicUser> organizationUsers = em + .createNamedQuery("VipsLogicUser.findByOrganizationIds") + .setParameter("organizationIds", organizationIds) + .getResultList(); + + + if(!organizationUsers.isEmpty()) + { + return em + .createNamedQuery("ForecastConfiguration.findByVipsLogicUserIdsAndDate") + .setParameter("vipsLogicUserIds", organizationUsers) + .setParameter("from", from) + .setParameter("to", to) + .getResultList(); + } + else + { + return new ArrayList<>(); + } + } + public List<ForecastConfiguration> getForecastConfigurationsByWeatherStation(PointOfInterestWeatherStation weatherStation) { return em @@ -938,11 +961,18 @@ public class ForecastBean { summaryForForecast.add(s); mappedSummaries.put(s.getForecastSummaryPK().getForecastConfigurationId(), summaryForForecast); }); - List<ForecastConfiguration> configurations = em.createNamedQuery("ForecastConfiguration.findByForecastConfigurationIds").setParameter("forecastConfigurationIds", mappedSummaries.keySet()).getResultList(); - configurations.forEach((conf) -> { - conf.setForecastSummaries(mappedSummaries.get(conf.getForecastConfigurationId())); - }); - return configurations; + if(mappedSummaries.size() > 0) + { + List<ForecastConfiguration> configurations = em.createNamedQuery("ForecastConfiguration.findByForecastConfigurationIds").setParameter("forecastConfigurationIds", mappedSummaries.keySet()).getResultList(); + configurations.forEach((conf) -> { + conf.setForecastSummaries(mappedSummaries.get(conf.getForecastConfigurationId())); + }); + return configurations; + } + else + { + return new ArrayList<>(); + } } /** diff --git a/src/main/java/no/nibio/vips/logic/entity/ForecastConfiguration.java b/src/main/java/no/nibio/vips/logic/entity/ForecastConfiguration.java index de0e904122e95c3a264c86ab3a6ee1595fd14270..730f6a7cd6fb7462ed2f1ad4f564589c06fbab15 100755 --- a/src/main/java/no/nibio/vips/logic/entity/ForecastConfiguration.java +++ b/src/main/java/no/nibio/vips/logic/entity/ForecastConfiguration.java @@ -81,7 +81,9 @@ import org.hibernate.annotations.TypeDefs; @NamedQuery(name = "ForecastConfiguration.findPrivateByVipsLogicUserIdAndCropOrganismIdsAndDate", query = "SELECT f FROM ForecastConfiguration f WHERE f.vipsLogicUserId = :vipsLogicUserId AND f.cropOrganismId.organismId IN (:cropOrganismIds) AND f.dateStart <= :to AND f.dateEnd >= :from AND f.isPrivate = TRUE"), @NamedQuery(name = "ForecastConfiguration.findByVipsLogicUserIds", query = "SELECT f FROM ForecastConfiguration f WHERE f.vipsLogicUserId IN (:vipsLogicUserIds) AND f.isPrivate = FALSE"), @NamedQuery(name = "ForecastConfiguration.findByVipsLogicUserIdsAndModelIds", query = "SELECT f FROM ForecastConfiguration f WHERE f.vipsLogicUserId IN (:vipsLogicUserIds) AND f.modelId IN (:modelIds) AND f.isPrivate = FALSE"), - @NamedQuery(name = "ForecastConfiguration.findByVipsLogicUserIdsAndModelIdsAndDate", query = "SELECT f FROM ForecastConfiguration f WHERE f.vipsLogicUserId IN (:vipsLogicUserIds) AND f.modelId IN (:modelIds) AND f.dateStart <= :to AND f.dateEnd >= :from AND f.isPrivate = FALSE")}) + @NamedQuery(name = "ForecastConfiguration.findByVipsLogicUserIdsAndModelIdsAndDate", query = "SELECT f FROM ForecastConfiguration f WHERE f.vipsLogicUserId IN (:vipsLogicUserIds) AND f.modelId IN (:modelIds) AND f.dateStart <= :to AND f.dateEnd >= :from AND f.isPrivate = FALSE"), + @NamedQuery(name = "ForecastConfiguration.findByVipsLogicUserIdsAndDate", query = "SELECT f FROM ForecastConfiguration f WHERE f.vipsLogicUserId IN (:vipsLogicUserIds) AND f.dateStart <= :to AND f.dateEnd >= :from AND f.isPrivate = FALSE") +}) public class ForecastConfiguration implements Serializable, Comparable { @OneToMany(cascade = CascadeType.ALL, mappedBy = "forecastConfiguration", fetch = FetchType.EAGER) private Set<ForecastModelConfiguration> forecastModelConfigurationSet; 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 83acad10e4c102b622ebf29bad989bd769d03888..43dadd4e78c198c72363d26e79fa08dd9ed5085d 100755 --- a/src/main/java/no/nibio/vips/logic/service/LogicService.java +++ b/src/main/java/no/nibio/vips/logic/service/LogicService.java @@ -232,10 +232,28 @@ public class LogicService { @Facet("restricted") public Response getForecastSummaries( @PathParam("organizationId") Integer organizationId, - @QueryParam("cropOrganismId") List<Integer> cropOrganismIds + @QueryParam("cropOrganismId") List<Integer> cropOrganismIds, + @QueryParam("includeOrganizationIds") String includeOrganizationIds ) { List<ForecastConfiguration> summaries = SessionControllerGetter.getForecastBean().getForecastConfigurationSummaries(organizationId); + if(includeOrganizationIds != null) + { + String[] includeOrgIdStrs = includeOrganizationIds.split(","); + for(String orgId:includeOrgIdStrs) + { + try + { + Integer includeOrgId = Integer.valueOf(orgId); + if(includeOrgId.equals(organizationId)) + { + continue; + } + summaries.addAll(SessionControllerGetter.getForecastBean().getForecastConfigurationSummaries(includeOrgId)); + } + catch(NumberFormatException ex){} + } + } return Response.ok().entity(summaries).build(); } @@ -321,6 +339,46 @@ public class LogicService { } + @GET + @Path("forecastconfigurationsincludeorgs/{organizationId}") + @GZIP + @Produces("application/json;charset=UTF-8") + public Response getActiveForecastConfigurationsWithIncludeOrganizations( + @PathParam("organizationId") Integer organizationId, + @QueryParam("includeOrganizationIds") String includeOrganizationIds + ) + { + Calendar cal = Calendar.getInstance(); + cal.setTime(SystemTime.getSystemTime()); + cal.set(cal.get(Calendar.YEAR), Calendar.JANUARY, 1, 0, 0, 0); + Date from = cal.getTime(); + cal.set(cal.get(Calendar.YEAR), Calendar.DECEMBER, 31, 23, 0, 0); + Date to = cal.getTime(); + + + List<Integer> orgIds = new ArrayList<>(); + orgIds.add(organizationId); + if(includeOrganizationIds != null) + { + String[] includeOrgIdStrs = includeOrganizationIds.split(","); + for(String orgIdStr:includeOrgIdStrs) + { + try + { + Integer includeOrgId = Integer.valueOf(orgIdStr.trim()); + if(includeOrgId.equals(organizationId)) + { + continue; + } + orgIds.add(includeOrgId); + } + catch(NumberFormatException ex){} + } + } + List<ForecastConfiguration> forecastConfigs = SessionControllerGetter.getForecastBean().getForecastConfigurations(orgIds, from, to); + return Response.ok().entity(forecastConfigs).build(); + } + /** * Returns a list of forecasts for given organization * @param organizationId