diff --git a/src/main/java/no/nibio/vips/logic/controller/session/ObservationBean.java b/src/main/java/no/nibio/vips/logic/controller/session/ObservationBean.java index b7cec04e22028cf0cd6bfa1ba3dd15ee23e3a116..68311535e771bf22bfa05ee261e40a6a729c8ecd 100755 --- a/src/main/java/no/nibio/vips/logic/controller/session/ObservationBean.java +++ b/src/main/java/no/nibio/vips/logic/controller/session/ObservationBean.java @@ -237,7 +237,7 @@ public class ObservationBean { em.remove(observation); } - public Object getBroadcastObservations(Integer organizationId) { + public List<Observation> getBroadcastObservations(Integer organizationId) { Organization organization= em.find(Organization.class, organizationId); /*List<VipsLogicUser> users = em.createNamedQuery("VipsLogicUser.findByOrganizationId", VipsLogicUser.class) .setParameter("organizationId", organization) diff --git a/src/main/java/no/nibio/vips/logic/controller/session/OrganismBean.java b/src/main/java/no/nibio/vips/logic/controller/session/OrganismBean.java index 066d47f865d8a1e280a0a4f7832bc5aa67b9bfc1..7728d10d225c986ab3efadf734890c4ad7534785 100755 --- a/src/main/java/no/nibio/vips/logic/controller/session/OrganismBean.java +++ b/src/main/java/no/nibio/vips/logic/controller/session/OrganismBean.java @@ -326,13 +326,11 @@ public class OrganismBean { .setParameter("cropCategoryIds", cropCategoryIds) .getResultList(); List<Integer> retVal = new ArrayList<>(); - for(CropCategory cc:cropCategories) - { - if(cc.getCropOrganismIds() != null) - { - retVal.addAll(Arrays.asList(cc.getCropOrganismIds())); - } - } + cropCategories.stream() + .filter((cc) -> (cc.getCropOrganismIds() != null)) + .forEachOrdered((cc) -> { + retVal.addAll(Arrays.asList(cc.getCropOrganismIds())); + }); return retVal; } diff --git a/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileCrop.java b/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileCrop.java new file mode 100644 index 0000000000000000000000000000000000000000..3f6351266e4836dc855f0b95c55e39b4a457bf4c --- /dev/null +++ b/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileCrop.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2017 NIBIO <http://www.nibio.no/>. + * + * This file is part of VIPSLogic. + * VIPSLogic is free software: you can redistribute it and/or modify + * it under the terms of the NIBIO Open Source License as published by + * NIBIO, either version 1 of the License, or (at your option) any + * later version. + * + * VIPSLogic is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * NIBIO Open Source License for more details. + * + * You should have received a copy of the NIBIO Open Source License + * along with VIPSLogic. If not, see <http://www.nibio.no/licenses/>. + * + */ + +package no.nibio.vips.logic.entity.vipsmobile; + +import no.nibio.vips.logic.entity.Organism; + +/** + * @copyright 2017 <a href="http://www.nibio.no/">NIBIO</a> + * @author Tor-Einar Skog <tor-einar.skog@nibio.no> + */ +public class VIPSMobileCrop { + + private Integer kulturId; + private String kulturNavn; + public VIPSMobileCrop(Organism organism, String locale){ + this.kulturId = organism.getOrganismId(); + this.kulturNavn = organism.getLocalName(locale); + } + + /** + * @return the kulturId + */ + public Integer getKulturId() { + return kulturId; + } + + /** + * @param kulturId the kulturId to set + */ + public void setKulturId(Integer kulturId) { + this.kulturId = kulturId; + } + + /** + * @return the kulturNavn + */ + public String getKulturNavn() { + return kulturNavn; + } + + /** + * @param kulturNavn the kulturNavn to set + */ + public void setKulturNavn(String kulturNavn) { + this.kulturNavn = kulturNavn; + } +} diff --git a/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileCropCategory.java b/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileCropCategory.java new file mode 100644 index 0000000000000000000000000000000000000000..7d367199553fadae1f7bcc8ec93323969f36200a --- /dev/null +++ b/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileCropCategory.java @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2017 NIBIO <http://www.nibio.no/>. + * + * This file is part of VIPSLogic. + * VIPSLogic is free software: you can redistribute it and/or modify + * it under the terms of the NIBIO Open Source License as published by + * NIBIO, either version 1 of the License, or (at your option) any + * later version. + * + * VIPSLogic is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * NIBIO Open Source License for more details. + * + * You should have received a copy of the NIBIO Open Source License + * along with VIPSLogic. If not, see <http://www.nibio.no/licenses/>. + * + */ + +package no.nibio.vips.logic.entity.vipsmobile; + +import java.util.ArrayList; +import java.util.List; +import no.nibio.vips.logic.entity.CropCategory; +import no.nibio.vips.logic.entity.Organism; + +/** + * @copyright 2017 <a href="http://www.nibio.no/">NIBIO</a> + * @author Tor-Einar Skog <tor-einar.skog@nibio.no> + */ +public class VIPSMobileCropCategory { + private List<VIPSMobileCrop> kulturer; + private List<Organism> crops; + private Integer varselKulturKategoriId; + private String varselKulturKategoriNavn; + private Integer ordering; + + public VIPSMobileCropCategory(CropCategory cc, List<Organism> organisms, String locale){ + this.varselKulturKategoriId = cc.getCropCategoryId(); + this.varselKulturKategoriNavn = cc.getLocalName(locale); + this.ordering = cc.getCropCategoryId(); + this.kulturer = new ArrayList<>(); + organisms.stream().forEach(organism -> { + this.kulturer.add(new VIPSMobileCrop(organism, locale)); + }); + } + + /** + * @return the kulturer + */ + public List<VIPSMobileCrop> getKulturer() { + return kulturer; + } + + /** + * @param kulturer the kulturer to set + */ + public void setKulturer(List<VIPSMobileCrop> kulturer) { + this.kulturer = kulturer; + } + + /** + * @return the varselKulturKategoriId + */ + public Integer getVarselKulturKategoriId() { + return varselKulturKategoriId; + } + + /** + * @param varselKulturKategoriId the varselKulturKategoriId to set + */ + public void setVarselKulturKategoriId(Integer varselKulturKategoriId) { + this.varselKulturKategoriId = varselKulturKategoriId; + } + + /** + * @return the varselKulturKategoriNavn + */ + public String getVarselKulturKategoriNavn() { + return varselKulturKategoriNavn; + } + + /** + * @param varselKulturKategoriNavn the varselKulturKategoriNavn to set + */ + public void setVarselKulturKategoriNavn(String varselKulturKategoriNavn) { + this.varselKulturKategoriNavn = varselKulturKategoriNavn; + } + + /** + * @return the ordering + */ + public Integer getOrdering() { + return ordering; + } + + /** + * @param ordering the ordering to set + */ + public void setOrdering(Integer ordering) { + this.ordering = ordering; + } +} diff --git a/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileMessage.java b/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileMessage.java index 5c317dc33db4774a9a7422a4f05b74d36dc2bc21..26056734003db1d0d0594533b8da55d61554dc8f 100755 --- a/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileMessage.java +++ b/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileMessage.java @@ -19,13 +19,14 @@ package no.nibio.vips.logic.entity.vipsmobile; +import com.fasterxml.jackson.annotation.JsonFormat; import java.util.Date; /** * @copyright 2015 <a href="http://www.nibio.no/">NIBIO</a> * @author Tor-Einar Skog <tor-einar.skog@nibio.no> */ -public class VIPSMobileMessage { +public class VIPSMobileMessage implements Comparable{ private int meldingId; private String tittel; @@ -119,6 +120,7 @@ public class VIPSMobileMessage { /** * @return the registrertDato */ + @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd") public Date getRegistrertDato() { return registrertDato; } @@ -133,6 +135,7 @@ public class VIPSMobileMessage { /** * @return the gyldigTilDato */ + @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd") public Date getGyldigTilDato() { return gyldigTilDato; } @@ -191,4 +194,9 @@ public class VIPSMobileMessage { return true; } + @Override + public int compareTo(Object t) { + return this.getRegistrertDato().compareTo(((VIPSMobileMessage)t).getRegistrertDato()); + } + } diff --git a/src/main/java/no/nibio/vips/logic/service/ObservationService.java b/src/main/java/no/nibio/vips/logic/service/ObservationService.java index 0a6fd37c8dac19777b7319c8d279b6f6fb070e63..65dc4caa549642aa6e70ecfe817e9104e4a2abe5 100755 --- a/src/main/java/no/nibio/vips/logic/service/ObservationService.java +++ b/src/main/java/no/nibio/vips/logic/service/ObservationService.java @@ -19,10 +19,7 @@ package no.nibio.vips.logic.service; -import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; import java.net.URI; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -33,21 +30,18 @@ import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.POST; -import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; -import no.nibio.vips.logic.entity.Gis; import no.nibio.vips.logic.entity.Observation; import no.nibio.vips.logic.entity.VipsLogicUser; import no.nibio.vips.logic.util.GISUtil; import no.nibio.vips.logic.util.Globals; import no.nibio.vips.logic.util.SessionControllerGetter; import org.jboss.resteasy.annotations.GZIP; -import org.jboss.resteasy.spi.HttpRequest; /** * @copyright 2016 <a href="http://www.nibio.no/">NIBIO</a> diff --git a/src/main/java/no/nibio/vips/logic/service/VIPSMobileService.java b/src/main/java/no/nibio/vips/logic/service/VIPSMobileService.java index a0d87a46d806d96e366a7138de74abdec9db2a54..afa72b28851ab91762e304a5dd7810be88e8b50d 100755 --- a/src/main/java/no/nibio/vips/logic/service/VIPSMobileService.java +++ b/src/main/java/no/nibio/vips/logic/service/VIPSMobileService.java @@ -19,8 +19,11 @@ package no.nibio.vips.logic.service; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -28,6 +31,7 @@ import java.util.Map; import java.util.NoSuchElementException; import java.util.Set; import java.util.TimeZone; +import javax.json.JsonObject; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.GET; import javax.ws.rs.Path; @@ -37,14 +41,18 @@ import javax.ws.rs.QueryParam; import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import no.nibio.vips.entity.Result; +import no.nibio.vips.logic.entity.CropCategory; import no.nibio.vips.logic.entity.ForecastConfiguration; import no.nibio.vips.logic.entity.ForecastSummary; import no.nibio.vips.logic.entity.Message; import no.nibio.vips.logic.entity.MessageIllustration; import no.nibio.vips.logic.entity.MessageLocale; import no.nibio.vips.logic.entity.ModelInformation; +import no.nibio.vips.logic.entity.Observation; +import no.nibio.vips.logic.entity.Organism; import no.nibio.vips.logic.entity.PointOfInterestWeatherStation; import no.nibio.vips.logic.entity.VipsLogicUser; +import no.nibio.vips.logic.entity.vipsmobile.VIPSMobileCropCategory; import no.nibio.vips.logic.entity.vipsmobile.VIPSMobileForecast; import no.nibio.vips.logic.entity.vipsmobile.VIPSMobileMessage; import no.nibio.vips.logic.entity.vipsmobile.VIPSMobilePresentation; @@ -59,7 +67,7 @@ import org.jboss.resteasy.spi.HttpRequest; * were implemented in the old VIPS. It's assumed that it's easier to adapt the * service layer than the client layer in Sencha Touch... * - * @copyright 2015 <a href="http://www.nibio.no/">NIBIO</a> + * @copyright 2017 <a href="http://www.nibio.no/">NIBIO</a> * @author Tor-Einar Skog <tor-einar.skog@nibio.no> */ @Path("rest/vipsmobile") @@ -70,6 +78,7 @@ public class VIPSMobileService { @Context private HttpServletRequest httpServletRequest; + // TODO: Add observation messages @GET @Path("melding") @Produces("application/json;charset=UTF-8") @@ -114,10 +123,12 @@ public class VIPSMobileService { String imageURL = ""; String imageCaption = ""; + Integer messageTagId = 2; // Default: Advisory system message try { MessageIllustration illustration = message.getMessageIllustrationSet().iterator().next(); imageURL = String.format("/static/images/messages/%s/%s", pragmaticBestLocale.getCreatedBy().getOrganizationId().getOrganizationId(), illustration.getMessageIllustrationPK().getFileName()); + messageTagId = message.getMessageTagSet().iterator().next().getMessageTagId(); }catch(NoSuchElementException | NullPointerException ex){} VIPSMobileMessage vmMessage = new VIPSMobileMessage( @@ -127,7 +138,7 @@ public class VIPSMobileService { pragmaticBestLocale.getBody(), message.getDatePub(), message.getDateValidTo(), - message.getMessageTagSet().iterator().next().getMessageTagId(), + messageTagId, imageURL, "Test" ); @@ -135,9 +146,65 @@ public class VIPSMobileService { retVal.add(vmMessage); } + // TODO Add observation messages + // Using code specific to current VIPSMobile app + Integer observationMessageTagId = 1; + List<Observation> broadcastObservations = SessionControllerGetter.getObservationBean().getBroadcastObservations(organizationId); + // Making an observation message valid for 3 months by default + Calendar cal = Calendar.getInstance(); + broadcastObservations.stream().forEach( + obs -> { + cal.setTime(obs.getTimeOfObservation()); + cal.add(Calendar.MONTH, 3); + Date msgValidTo = cal.getTime(); + VIPSMobileMessage vmMessage = new VIPSMobileMessage( + obs.getObservationId() * 1000000, + obs.getObservationHeading(), + "", + obs.getObservationText(), + obs.getTimeOfObservation(), + msgValidTo, + observationMessageTagId, + "", + "Test" + ); + retVal.add(vmMessage); + } + ); + Collections.sort(retVal, Collections.reverseOrder()); return Response.ok().entity(retVal).build(); } + @GET + @Path("varselkulturkategorier") + @Produces("application/json;charset=UTF-8") + public Response getCropCategories( + @QueryParam("organizationId") Integer organizationId, + @QueryParam("locale") String locale + ) + { + List<Organism> cropList = SessionControllerGetter.getOrganismBean().getAllCrops(); + Map<Integer, Organism> allCrops = new HashMap<>(); + cropList.forEach((crop) -> { + allCrops.put(crop.getOrganismId(), crop); + }); + List<CropCategory> cropCategories = SessionControllerGetter.getOrganismBean().getCropCategories(organizationId); + List<VIPSMobileCropCategory> retVal = new ArrayList<>(); + cropCategories.stream().forEach( + cc -> { + List<Organism> ccCropList = new ArrayList<>(); + Arrays.asList(cc.getCropOrganismIds()).stream().forEach( + cropId -> { + ccCropList.add(allCrops.get(cropId)); + } + ); + retVal.add(new VIPSMobileCropCategory(cc, ccCropList, "nb")); + } + ); + + return Response.ok().entity(retVal).build(); + } + @GET @Path("presentasjoner") @Produces("application/json;charset=UTF-8") @@ -272,7 +339,7 @@ public class VIPSMobileService { Date to = SystemTime.getSystemTime(); Calendar cal = Calendar.getInstance(); cal.setTime(to); - cal.add(Calendar.MONTH, -2); + cal.set(Calendar.MONTH, Calendar.JANUARY); Date from = cal.getTime(); PointOfInterestWeatherStation station = (PointOfInterestWeatherStation) SessionControllerGetter.getPointOfInterestBean().getPointOfInterest(klimastasjonId);