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 2a0a276ba349b9c1a9aa4c14875f8b1897368948..e04a3067743f962da1ac5edbe41e9498423f1664 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 @@ -479,6 +479,18 @@ public class ForecastBean { return retVal; } + public ModelInformation getModelInformation(String modelId) + { + try + { + return em.createNamedQuery("ModelInformation.findByModelId", ModelInformation.class).setParameter("modelId", modelId).getSingleResult(); + } + catch(NoResultException ex) + { + return null; + } + } + /** * Stores a forecast configuration, including model specific form fields * @param forecastConfiguration diff --git a/src/main/java/no/nibio/vips/logic/controller/session/SchedulingBean.java b/src/main/java/no/nibio/vips/logic/controller/session/SchedulingBean.java index 311c368eb07d7f21fb0b276ca5230f9e3a5b80d7..abbfafa0e1ad5087188c56356089b116a9941e40 100755 --- a/src/main/java/no/nibio/vips/logic/controller/session/SchedulingBean.java +++ b/src/main/java/no/nibio/vips/logic/controller/session/SchedulingBean.java @@ -215,7 +215,7 @@ public class SchedulingBean { // Run grid models VIPSLogicTaskCollector runGridModelsCollector = new VIPSLogicTaskCollector(-1); - runGridModelsCollector.getTasks().add(everyNightPattern, VipsLogicTaskFactory.createVipsLogicTask(VipsLogicTaskFactory.RUN_GRID_MODELS_TASK)); + runGridModelsCollector.getTasks().add(morningAndAfternoonPattern, VipsLogicTaskFactory.createVipsLogicTask(VipsLogicTaskFactory.RUN_GRID_MODELS_TASK)); List<TaskCollector> definedTasks = new ArrayList<>(); definedTasks.add(modelRunCollector); 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 43dadd4e78c198c72363d26e79fa08dd9ed5085d..8b96c8ffc805db5525b8f6279f8e3d73cc420929 100755 --- a/src/main/java/no/nibio/vips/logic/service/LogicService.java +++ b/src/main/java/no/nibio/vips/logic/service/LogicService.java @@ -56,6 +56,7 @@ import no.nibio.vips.logic.entity.ForecastConfiguration; import no.nibio.vips.logic.entity.ForecastModelConfiguration; import no.nibio.vips.logic.entity.Message; import no.nibio.vips.logic.entity.MessageTag; +import no.nibio.vips.logic.entity.ModelInformation; import no.nibio.vips.logic.entity.Organism; import no.nibio.vips.logic.entity.Organization; import no.nibio.vips.logic.entity.PointOfInterest; @@ -1026,6 +1027,16 @@ public class LogicService { return Response.ok().entity(SessionControllerGetter.getUserBean().getOrganizations()).build(); } + @GET + @Path("model/{modelId}") + @Produces("application/json;charset=UTF-8") + public Response getModelInformation(@PathParam("modelId") String modelId) + { + ModelInformation retVal = SessionControllerGetter.getForecastBean().getModelInformation(modelId); + return retVal != null ? Response.ok().entity(retVal).build() + : Response.status(Response.Status.NOT_FOUND).entity("ERROR: Could not find model with id=" + modelId).build(); + } + /** * Get the client to use for calling VIPSCoreManager REST services programmatically * @return diff --git a/src/main/webapp/public/nordic_septoria_whs/nordic_septoria_whs.css b/src/main/webapp/public/nordic_septoria_whs/nordic_septoria_whs.css index b8388203c565a73416d4981015f4554dad8afb24..9f0e77d4d84838c2eadf64093e7d7cb47ea96924 100644 --- a/src/main/webapp/public/nordic_septoria_whs/nordic_septoria_whs.css +++ b/src/main/webapp/public/nordic_septoria_whs/nordic_septoria_whs.css @@ -95,4 +95,20 @@ along with VIPSLogic. If not, see <http://www.nibio.no/licenses/>. position: relative; bottom: -5px; width: 50px; +} + +#popup { + position: absolute !important; + right: 0; + left: 0; + margin-left: auto; + margin-right: auto; + width: 80%; + padding: 20px !important; + z-index: 1000; + display: none; + background-color: white; + border: 2px solid black; + font-family: Arial, Helvetica, sans-serif; + font-size: small; } \ No newline at end of file diff --git a/src/main/webapp/public/nordic_septoria_whs/nordic_septoria_whs.js b/src/main/webapp/public/nordic_septoria_whs/nordic_septoria_whs.js index 1f334de1b4f7b59c1445dbb079ff2d16a9729169..309c69962eed9bd31785bb66d65da20a174e9786 100644 --- a/src/main/webapp/public/nordic_septoria_whs/nordic_septoria_whs.js +++ b/src/main/webapp/public/nordic_septoria_whs/nordic_septoria_whs.js @@ -42,9 +42,10 @@ var initMap = function () + " <div id='legend'>" + " <table>" + " <tr><td>0</td><td style='color: #777777; font-weight: bold;'>" + geti18nText("risk_no") + "</td></tr>" - + " <tr><td>0-20</td><td style='color: yellow; font-weight: bold;'>" + geti18nText("risk_low") + "</td></tr>" - + " <tr><td>20-40</td><td style='color: orange; font-weight: bold;'>" + geti18nText("risk_medium") + "</td></tr>" + + " <tr><td>0-20</td><td style='color: yellow; background-color: #777777; font-weight: bold;'>" + geti18nText("risk_low") + "</td></tr>" + + " <tr><td>20-40</td><td style='color: orange; font-weight: bold; '>" + geti18nText("risk_medium") + "</td></tr>" + " <tr><td>" + geti18nText("over") + " 40</td><td style='color: red; font-weight: bold;'>" + geti18nText("risk_high") + "</td></tr>" + + " <tr><td><span style='cursor:pointer; color: green;' onclick='showModelInfo();'><i class='fas fa-info-circle'></i></span></td><td></td></tr>" + " </table>" + " </div>" + " </div>" @@ -53,7 +54,10 @@ var initMap = function () + "<div id='subMap1'><div id='subMap1DateField' class='dateField'></div></div>" + "<div id='subMap2'><div id='subMap2DateField' class='dateField'></div></div>" + "<div id='subMap3'><div id='subMap3DateField' class='dateField'></div></div>" - + "<div id='subMap4'><div id='subMap4DateField' class='dateField'></div></div>"; + + "<div id='subMap4'><div id='subMap4DateField' class='dateField'></div></div>" + + "<div id='popup'></div>"; + + "</div>" + for(var mapName in featureOverlays) { @@ -161,6 +165,21 @@ var ajax = function(url, callback) xhr.send(); }; +var showModelInfo = function() +{ + ajax(hostName + "/rest/model/GRIDZYMOSE", function(e){ + var modelInfo = JSON.parse(e.target.responseText); + document.getElementById('popup').innerHTML= "<p><button type='button' onclick='hideModelInfo();'>" + geti18nText("close") + "</button></p>" + + modelInfo.defaultDescription.replace("\n","<br/><br/>"); + document.getElementById('popup').style.display="block"; + + }); +} + +var hideModelInfo = function() +{ + document.getElementById('popup').style.display="none"; +} function getTodayAtMidnight() { @@ -223,7 +242,14 @@ document.addEventListener("DOMContentLoaded", function() { { src: hostName + "/public/nordic_septoria_whs/moment-timezone-with-data.js" }, - initMap + function() { + loadHeadElement("script", + { + src: "https://kit.fontawesome.com/567c8b1eb5.js" + }, + initMap + ); + } ); } ); @@ -289,7 +315,8 @@ var dict = { "risk_high" : { "no": "Høy risiko", "dk": "Høj risiko", "en": "High risk"}, "over" : { "no": "Over", "dk": "Over", "en": "Over"}, - "poweredBy" : { "no": "Drevet av", "dk": "Drevet af", "en": "Powered by"} + "poweredBy" : { "no": "Drevet av", "dk": "Drevet af", "en": "Powered by"}, + "close" : { "no": "Lukk", "dk": "Lukk", "en": "Close"} }; var geti18nText = function(keyword)