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);