diff --git a/src/main/java/no/nibio/vips/logic/VIPSLogicApplication.java b/src/main/java/no/nibio/vips/logic/VIPSLogicApplication.java index fa37ebc065285a3d3b1775248f07ad14312fff43..a4f38659c67d49e5f11b04ee958b3ccfe5485e11 100644 --- a/src/main/java/no/nibio/vips/logic/VIPSLogicApplication.java +++ b/src/main/java/no/nibio/vips/logic/VIPSLogicApplication.java @@ -25,7 +25,7 @@ import javax.ws.rs.core.Application; /** * Responsible for adding REST resources - * @copyright 2013 {@link http://www.nibio.no NIBIO} + * @copyright 2015 {@link http://www.nibio.no NIBIO} * @author Tor-Einar Skog <tor-einar.skog@nibio.no> */ @ApplicationPath("/rest/") @@ -46,6 +46,7 @@ public class VIPSLogicApplication extends Application */ private void addRestResourceClassesManually(Set<Class<?>> resources) { resources.add(no.nibio.vips.logic.service.LogicService.class); + resources.add(no.nibio.vips.logic.service.VIPSMobileService.class); resources.add(no.nibio.vips.logic.modules.barleynetblotch.BarleyNetBlotchModelService.class); //resources.add(no.nibio.vips.logic.service.JacksonConfig.class); //resources.add(no.nibio.vips.coremanager.service.ManagerResourceImpl.class); @@ -61,6 +62,7 @@ public class VIPSLogicApplication extends Application resources.add(no.nibio.vips.logic.modules.barleynetblotch.BarleyNetBlotchModelService.class); resources.add(no.nibio.vips.logic.service.JacksonConfig.class); resources.add(no.nibio.vips.logic.service.LogicService.class); + resources.add(no.nibio.vips.logic.service.VIPSMobileService.class); } } \ No newline at end of file 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 f59daf11e81c38b8682c6267cbf1e155a893a1e5..d4f7a713afaaa0525fae2252bf460f5c9646916d 100644 --- a/src/main/java/no/nibio/vips/logic/controller/session/ForecastBean.java +++ b/src/main/java/no/nibio/vips/logic/controller/session/ForecastBean.java @@ -35,6 +35,7 @@ import de.micromata.opengis.kml.v_2_2_0.Vec2; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.HashMap; @@ -79,7 +80,7 @@ import org.apache.commons.lang.StringUtils; import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; /** - * @copyright 2013-2014 <a href="http://www.nibio.no/">NIBIO</a> + * @copyright 2013-2015 <a href="http://www.nibio.no/">NIBIO</a> * @author Tor-Einar Skog <tor-einar.skog@nibio.no> */ @Stateless @@ -308,6 +309,16 @@ public class ForecastBean { .getResultList(); } + public List<ForecastConfiguration> getForecastConfigurations(PointOfInterestWeatherStation weatherStation,Date from, Date to) + { + return em + .createNamedQuery("ForecastConfiguration.findByWeatherStationPointOfInterestIdAndDate", ForecastConfiguration.class) + .setParameter("weatherStationPointOfInterestId", weatherStation) + .setParameter("from", from) + .setParameter("to", to) + .getResultList(); + } + /** * Deletes all forecasts and results from the given weather station * @param weatherStation @@ -797,6 +808,22 @@ public class ForecastBean { .executeUpdate(); } + public List<ForecastConfiguration> getForecastConfigurationWithSummaries(List<Long> forecastConfigurationIds) + { + List<ForecastConfiguration> retVal = em.createNamedQuery("ForecastConfiguration.findByForecastConfigurationIds") + .setParameter("forecastConfigurationIds", forecastConfigurationIds) + .getResultList(); + for(ForecastConfiguration config: retVal) + { + Query q = em.createNamedQuery("ForecastSummary.findByForecastConfigurationId"); + config.setForecastSummaries( + q.setParameter("forecastConfigurationId", config.getForecastConfigurationId()) + .getResultList() + ); + } + return retVal; + } + public List<ForecastConfiguration> getForecastConfigurationSummaries(Integer organizationId) { List<ForecastConfiguration> forecastConfigurations = this.getForecastConfigurations(em.find(Organization.class, organizationId)); 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 871e66e84dcdee4af22db1d31d52b2cb20283127..679b66da5309808a7df8cdc060d7d1950332ac07 100644 --- a/src/main/java/no/nibio/vips/logic/entity/ForecastConfiguration.java +++ b/src/main/java/no/nibio/vips/logic/entity/ForecastConfiguration.java @@ -56,6 +56,7 @@ import no.nibio.vips.util.WeatherUtil; @NamedQueries({ @NamedQuery(name = "ForecastConfiguration.findAll", query = "SELECT f FROM ForecastConfiguration f"), @NamedQuery(name = "ForecastConfiguration.findByForecastConfigurationId", query = "SELECT f FROM ForecastConfiguration f WHERE f.forecastConfigurationId = :forecastConfigurationId"), + @NamedQuery(name = "ForecastConfiguration.findByForecastConfigurationIds", query = "SELECT f FROM ForecastConfiguration f WHERE f.forecastConfigurationId IN(:forecastConfigurationIds)"), @NamedQuery(name = "ForecastConfiguration.findByModelId", query = "SELECT f FROM ForecastConfiguration f WHERE f.modelId = :modelId"), @NamedQuery(name = "ForecastConfiguration.findByModelIds", query = "SELECT f FROM ForecastConfiguration f WHERE f.modelId IN (:modelIds)"), @NamedQuery(name = "ForecastConfiguration.findByDateStart", query = "SELECT f FROM ForecastConfiguration f WHERE f.dateStart = :dateStart"), @@ -63,6 +64,7 @@ import no.nibio.vips.util.WeatherUtil; @NamedQuery(name = "ForecastConfiguration.findActiveAtDate", query = "SELECT f FROM ForecastConfiguration f WHERE f.dateStart <= :currentDate AND f.dateEnd >= :currentDate"), @NamedQuery(name = "ForecastConfiguration.findByLocationPointOfInterestId", query = "SELECT f FROM ForecastConfiguration f WHERE f.locationPointOfInterestId = :locationPointOfInterestId"), @NamedQuery(name = "ForecastConfiguration.findByWeatherStationPointOfInterestId", query = "SELECT f FROM ForecastConfiguration f WHERE f.weatherStationPointOfInterestId = :weatherStationPointOfInterestId"), + @NamedQuery(name = "ForecastConfiguration.findByWeatherStationPointOfInterestIdAndDate", query = "SELECT f FROM ForecastConfiguration f WHERE f.weatherStationPointOfInterestId = :weatherStationPointOfInterestId AND f.dateStart <= :to AND f.dateEnd >= :from"), @NamedQuery(name = "ForecastConfiguration.findByVipsLogicUserId", query = "SELECT f FROM ForecastConfiguration f WHERE f.vipsLogicUserId = :vipsLogicUserId"), @NamedQuery(name = "ForecastConfiguration.findByVipsLogicUserIdAndDate", query = "SELECT f FROM ForecastConfiguration f WHERE f.vipsLogicUserId = :vipsLogicUserId AND f.dateStart <= :to AND f.dateEnd >= :from" ), @NamedQuery(name = "ForecastConfiguration.findByVipsLogicUserIdAndCropOrganismId", query = "SELECT f FROM ForecastConfiguration f WHERE f.vipsLogicUserId = :vipsLogicUserId AND f.cropOrganismId.organismId IN (:cropOrganismIds)"), diff --git a/src/main/java/no/nibio/vips/logic/entity/ForecastSummary.java b/src/main/java/no/nibio/vips/logic/entity/ForecastSummary.java index 63fef4f93840ed4525b6f49cb0fb2d6b81b60ee0..a5dc3990f816b886b725b636e79f22e82aced59c 100644 --- a/src/main/java/no/nibio/vips/logic/entity/ForecastSummary.java +++ b/src/main/java/no/nibio/vips/logic/entity/ForecastSummary.java @@ -41,6 +41,7 @@ import javax.xml.bind.annotation.XmlRootElement; @NamedQueries({ @NamedQuery(name = "ForecastSummary.findAll", query = "SELECT f FROM ForecastSummary f"), @NamedQuery(name = "ForecastSummary.findByForecastConfigurationId", query = "SELECT f FROM ForecastSummary f WHERE f.forecastSummaryPK.forecastConfigurationId = :forecastConfigurationId"), + @NamedQuery(name = "ForecastSummary.findByForecastConfigurationIds", query = "SELECT f FROM ForecastSummary f WHERE f.forecastSummaryPK.forecastConfigurationId IN(:forecastConfigurationIds)"), @NamedQuery(name = "ForecastSummary.findBySummaryForDate", query = "SELECT f FROM ForecastSummary f WHERE f.forecastSummaryPK.summaryForDate = :summaryForDate"), @NamedQuery(name = "ForecastSummary.findBySummaryCreatedTime", query = "SELECT f FROM ForecastSummary f WHERE f.summaryCreatedTime = :summaryCreatedTime"), @NamedQuery(name = "ForecastSummary.findByWarningStatus", query = "SELECT f FROM ForecastSummary f WHERE f.warningStatus = :warningStatus")}) diff --git a/src/main/java/no/nibio/vips/logic/entity/MessageLocale.java b/src/main/java/no/nibio/vips/logic/entity/MessageLocale.java index c865a145c953a8364ff6b3b2f6200b4c4ba5d603..e0d568a470bec825341658b6f3b21c347b36788f 100644 --- a/src/main/java/no/nibio/vips/logic/entity/MessageLocale.java +++ b/src/main/java/no/nibio/vips/logic/entity/MessageLocale.java @@ -32,6 +32,7 @@ import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import javax.persistence.Transient; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import javax.xml.bind.annotation.XmlRootElement; @@ -95,6 +96,12 @@ public class MessageLocale implements Serializable { public MessageLocale(int messageId, String locale) { this.messageLocalePK = new MessageLocalePK(messageId, locale); } + + @Transient + public String getMessageLocaleSyntheticPK() + { + return this.messageLocalePK.getMessageId() + "_" + this.messageLocalePK.getLocale(); + } public MessageLocalePK getMessageLocalePK() { return messageLocalePK; diff --git a/src/main/java/no/nibio/vips/logic/entity/MessageTagLocale.java b/src/main/java/no/nibio/vips/logic/entity/MessageTagLocale.java index faf163c271bd9d48c721025e9b52ee8d3cbc80e8..781f2bcd611733c330459931b536e5b9e97d5909 100644 --- a/src/main/java/no/nibio/vips/logic/entity/MessageTagLocale.java +++ b/src/main/java/no/nibio/vips/logic/entity/MessageTagLocale.java @@ -28,6 +28,7 @@ import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; +import javax.persistence.Transient; import javax.validation.constraints.Size; import javax.xml.bind.annotation.XmlRootElement; @@ -67,6 +68,16 @@ public class MessageTagLocale implements Serializable { public MessageTagLocalePK getMessageTagLocalePK() { return messageTagLocalePK; } + + /** + * Decorator for inferior JSON deserializers like Sencha Touch + * @return + */ + @Transient + public String getMessageTagLocaleSyntheticPK() + { + return this.messageTagLocalePK.getMessageTagId() + "_" + this.messageTagLocalePK.getLocale(); + } public void setMessageTagLocalePK(MessageTagLocalePK messageTagLocalePK) { this.messageTagLocalePK = messageTagLocalePK; diff --git a/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileForecast.java b/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileForecast.java new file mode 100644 index 0000000000000000000000000000000000000000..5490b79ff442f43c90e2a1429bbe01835ad6892b --- /dev/null +++ b/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileForecast.java @@ -0,0 +1,582 @@ +/* + * Copyright (c) 2015 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.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * Rip-off from old VIPS VarselBO + * @author Tor-Einar Skog <tor-einar.skog@nibio.no> + */ +public final class VIPSMobileForecast implements Comparable +{ + private Integer DnmiSiteId; + private Map<String, Object> props; + + /** + * Lager et nytt varsel Business Object + * @param varselId Unik identifikator for varsel + * @param lovligVarselId Id for lovligVarsel + * @param startDato Startdato for varselet + * @param sluttDato Sluttdato for varselet + * @param klimastasjonId Id for klimastasjon + * @param feltId Id for felt + * @param personlig Skiller offentlige og personlige varsel + * @param inaktiv Angir om varselet er aktivt eller ikke + * @param sistEndretAv Id til bruker som sist endret varselet + * @param sistEndretDato Tid for siste endring + * @param logiskSlettet Angir om varselet er logisk slettet + */ + public VIPSMobileForecast + ( + long varselId, + long lovligVarselId, + Date startDato, + Date sluttDato, + long klimastasjonId, + String klimastasjonNavn, + long feltId, + String feltNavn, + boolean personlig, + boolean inaktiv, + long sistEndretAv, + Date sistEndretDato, + boolean logiskSlettet, + long organismeId, + String organismeNavn, + long kulturId, + String kulturNavn, + String modellId, + String modellNavn + ) + { + setVarselId( varselId ); + setLovligVarselId( lovligVarselId ); + setStartDato( startDato ); + setSluttDato( sluttDato ); + setKlimastasjonId( klimastasjonId ); + setKlimastasjonNavn(klimastasjonNavn); + setFeltId( feltId ); + setFeltNavn(feltNavn); + setPersonlig( personlig ); + setInaktiv( inaktiv ); + setSistEndretAv( sistEndretAv ); + setSistEndretDato( sistEndretDato ); + setLogiskSlettet( logiskSlettet ); + setOrganismeId(organismeId); + setOrganismeNavn(organismeNavn); + setKulturId(kulturId); + setKulturNavn(kulturNavn); + setModellId(modellId); + setModellNavn(modellNavn); + } + + /** + * @param varselId Unik identifikator for varsel + */ + public final void setVarselId( long varselId ) + { + setAttribute("varselId", varselId); + } + + /** + * @param lovligVarselId Id for lovligVarsel + */ + public final void setLovligVarselId( long lovligVarselId ) + { + setAttribute("lovligVarselId", lovligVarselId); + } + + /** + * @param startDato StartDato for varselet + */ + public final void setStartDato( Date startDato ) + { + setAttribute( "startDato", startDato ); + } + + /** + * @param sluttDato SluttDato for varselet + */ + public final void setSluttDato( Date sluttDato ) + { + setAttribute( "sluttDato", sluttDato ); + } + + /** + * @param klimastasjonId Id for klimastasjon + */ + public final void setKlimastasjonId( long klimastasjonId ) + { + setAttribute("klimastasjonId", klimastasjonId); + } + + /** + * @param feltId Id for felt + */ + public final void setFeltId( long feltId ) + { + setAttribute("feltId", feltId); + } + + /** + * @param personlig Personlig eller offentlig varsel + */ + public final void setPersonlig( boolean personlig ) + { + setAttribute("personlig", personlig); + } + + /** + * @param inaktiv Aktivt eller inaktivt varsel + */ + public final void setInaktiv( boolean inaktiv ) + { + setAttribute("inaktiv", inaktiv); + } + + /** + * @param sistEndretAv Id til bruker som sist endret varselet + */ + public final void setSistEndretAv( long sistEndretAv ) + { + setAttribute("sistEndretAv", sistEndretAv); + } + + /** + * @param sistEndretAvBrukernavn Brukernavn til bruker som sist endret varselet + */ + public void setSistEndretAvBrukernavn( String sistEndretAvBrukernavn ) + { + setAttribute( "sistEndretAvBrukernavn", sistEndretAvBrukernavn ); + } + + /** + * @param sistEndretDato Tid for siste endring + */ + public final void setSistEndretDato( Date sistEndretDato ) + { + setAttribute( "sistEndretDato", sistEndretDato ); + } + + /** + * @param logiskSlettet Slettet eller ikke slettet varsel + */ + public final void setLogiskSlettet( boolean logiskSlettet ) + { + setAttribute("logiskSlettet", logiskSlettet); + } + + /** + * @param klimastasjonNavn Navn for klimastasjon + */ + public void setKlimastasjonNavn( String klimastasjonNavn ) + { + setAttribute( "klimastasjonNavn", klimastasjonNavn ); + } + + /** + * @param feltNavn Navn for felt + */ + public void setFeltNavn( String feltNavn ) + { + setAttribute( "feltNavn", feltNavn ); + } + + /** + * @param gaardNavn Navn for gaard + */ + public void setGaardNavn( String gaardNavn ) + { + setAttribute( "gaardNavn", gaardNavn ); + } + + /** + * @param skifteNavn Navn for skifte + */ + public void setSkifteNavn( String skifteNavn ) + { + setAttribute( "skifteNavn", skifteNavn ); + } + + /** + * @param modellId ModellID + */ + public void setModellId( String modellId ) + { + setAttribute("modellId", modellId); + } + + /** + * @param modellNavn ModellNavn + */ + public void setModellNavn( String modellNavn ) + { + setAttribute( "modellNavn", modellNavn ); + } + + /** + * @param modellWebNavn ModellNavn for VIPS-forsiden + */ + public void setModellWebNavn( String modellWebNavn ) + { + setAttribute( "modellWebNavn", modellWebNavn ); + } + + /** + * @param kulturId KulturID + */ + public void setKulturId( long kulturId ) + { + setAttribute("kulturId", kulturId); + } + + /** + * @param skifteKulturId Id til den nyeste kultur som er registrert p� skifte + */ + public void setSkifteKulturId( long skifteKulturId ) + { + setAttribute("skifteKulturId", skifteKulturId); + } + + /** + * @param kulturNavn Kulturnavn + */ + public void setKulturNavn( String kulturNavn ) + { + setAttribute( "kulturNavn", kulturNavn ); + } + + /** + * @param organismeId OrganismeID + */ + public void setOrganismeId( long organismeId ) + { + setAttribute("organismeId", organismeId); + } + + /** + * @param organismeNavn Organismenavn + */ + public void setOrganismeNavn( String organismeNavn ) + { + setAttribute( "organismeNavn", organismeNavn ); + } + + + /** + * @return Unik identifikator for varsel + */ + public long getVarselId() + { + return ( ( Long )getAttribute( "varselId" ) ); + } + + /** + * @return LovligVarsel Id + */ + public long getLovligVarselId() + { + return ( ( Long )getAttribute( "lovligVarselId" ) ); + } + + /** + * @return Startdato for varselet + */ + public Date getStartDato() + { + return ( Date )getAttribute( "startDato" ); + } + + /** + * @return Sluttdato for varselet + */ + public Date getSluttDato() + { + return ( Date )getAttribute( "sluttDato" ); + } + + /** + * @return Id for klimastasjon + */ + public long getKlimastasjonId() + { + return ( ( Long )getAttribute( "klimastasjonId" ) ); + } + + /** + * @return Id for felt + */ + public long getFeltId() + { + return ( ( Long )getAttribute( "feltId" ) ); + } + + /** + * @return personlig + */ + public boolean getPersonlig() + { + return ( ( Boolean )getAttribute( "personlig" ) ); + } + + /** + * @return inaktiv + */ + public boolean getInaktiv() + { + return ( ( Boolean )getAttribute( "inaktiv" ) ); + } + + /** + * @return sistEndretAv + */ + public long getSistEndretAv() + { + return ( ( Long )getAttribute( "sistEndretAv" ) ); + } + + /** + * @return sistEndretAvBrukernavn + */ + public String getSistEndretAvBrukernavn() + { + return ( String )getAttribute( "sistEndretAvBrukernavn" ); + } + + /** + * @return sistEndretDato + */ + public Date getSistEndretDato() + { + return ( Date )getAttribute( "sistEndretDato" ); + } + + /** + * @return True hvis varselet er slettet, false ellers + */ + public boolean getLogiskSlettet() + { + if( getAttribute( "logiskSlettet" ) != null ) + { + return ( ( Boolean )getAttribute( "logiskSlettet" ) ); + } + else + { + return false; + } + } + + /** + * @return Navn for klimastasjon + */ + public String getKlimastasjonNavn() + { + return ( String )getAttribute( "klimastasjonNavn" ); + } + + /** + * @return Id for modell + */ + public String getModellId() + { + return ( String )getAttribute( "modellId" ) ; + } + + /** + * @return Navn p� modell + */ + public String getModellNavn() + { + return ( String )getAttribute( "modellNavn" ); + } + + /** + * @return Navn paa modell til bruk p� VIPS-forsiden + */ + public String getModellWebNavn() + { + return ( String )getAttribute( "modellWebNavn" ); + } + + /** + * @return Id for kultur + */ + public long getKulturId() + { + return ( ( Long )getAttribute( "kulturId" ) ); + } + + /** + * @return Id for kultur + */ + public long getSkifteKulturId() + { + Long retVal = ( Long )getAttribute( "skifteKulturId" ); + if(retVal == null) return -1; + else return retVal; + } + + /** + * @return Navn på kultur + */ + public String getKulturNavn() + { + return ( String )getAttribute( "kulturNavn" ); + } + + /** + * @return Id for organisme + */ + public long getOrganismeId() + { + return ( ( Long )getAttribute( "organismeId" ) ); + } + + /** + * @return Navn p� organisme + */ + public String getOrganismeNavn() + { + return ( String )getAttribute( "organismeNavn" ); + } + + + /** + * @return Navnet p� feltet varselet utf�res for + */ + public String getFeltNavn() + { + return ( ( String )getAttribute( "feltNavn" ) ); + } + + /** + * @return Navnet p� g�rden varselet utf�res for + */ + public String getGaardNavn() + { + return ( ( String )getAttribute( "gaardNavn" ) ); + } + + /** + * @return Navnet p� skiftet varselet utf�res for + */ + public String getSkifteNavn() + { + return ( ( String )getAttribute( "skifteNavn" ) ); + } + + + + /** + * Sorterer alfabetisk p� klimastasjonNavn, hvis det er oppgitt + * @param o + * @return + */ + @Override + public int compareTo(Object o) { + VIPSMobileForecast other = (VIPSMobileForecast) o; + return this.compareTo(other); + } + + /** + * Sorterer alfabetisk p� G�rd, Skifte, Felt og klimastasjonNavn, hvis det er oppgitt. Deretter kronologisk p� startDato + * @param other + * @return + */ + public int compareTo(VIPSMobileForecast other) + { + int retVal = 0; + try + { + retVal = this.getGaardNavn().compareTo(other.getGaardNavn()); + if(retVal != 0) return retVal; + + }catch(NullPointerException npe){} + + try + { + retVal = this.getSkifteNavn().compareTo(other.getSkifteNavn()); + if(retVal != 0) return retVal; + + }catch(NullPointerException npe){} + + try + { + retVal = this.getFeltNavn().compareTo(other.getFeltNavn()); + if(retVal != 0) return retVal; + + }catch(NullPointerException npe){} + + try + { + retVal = this.getKlimastasjonNavn().compareTo(other.getKlimastasjonNavn()); + if(retVal != 0) return retVal; + }catch(NullPointerException npe){} + + try + { + retVal = this.getStartDato().compareTo(other.getStartDato()); + if(retVal != 0) return retVal; + }catch(NullPointerException npe){} + + + return retVal; + } + + /** + * @return the DnmiSiteId + */ + public Integer getDnmiSiteId() { + return DnmiSiteId; + } + + /** + * @param DnmiSiteId the DnmiSiteId to set + */ + public void setDnmiSiteId(Integer DnmiSiteId) { + this.DnmiSiteId = DnmiSiteId; + } + + + + private Object getAttribute(String key) + { + if(this.props != null) + { + return this.props.get(key); + } + else + { + return null; + } + } + + private void setAttribute(String key, Object value) + { + if(this.props == null) + { + this.props = new HashMap<>(); + } + this.props.put(key, value); + } +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..5c317dc33db4774a9a7422a4f05b74d36dc2bc21 --- /dev/null +++ b/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileMessage.java @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2015 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.Date; + +/** + * @copyright 2015 <a href="http://www.nibio.no/">NIBIO</a> + * @author Tor-Einar Skog <tor-einar.skog@nibio.no> + */ +public class VIPSMobileMessage { + + private int meldingId; + private String tittel; + private String ingress; + private String tekst; + private Date registrertDato; + private Date gyldigTilDato; + private int meldingType; + private String bildeURL; + private String bildetekst; + + public VIPSMobileMessage ( + int meldingId, + String tittel, + String ingress, + String tekst, + Date registrertDato, + Date gyldigTilDato, + int meldingType, + String bildeURL, + String bildetekst + ) + { + this.meldingId = meldingId; + this.tittel = tittel; + this.ingress = ingress; + this.tekst = tekst; + this.registrertDato = registrertDato; + this.gyldigTilDato = gyldigTilDato; + this.meldingType = meldingType; + this.bildeURL = bildeURL; + this.bildetekst = bildetekst; + } + + /** + * @return the meldingId + */ + public int getMeldingId() { + return meldingId; + } + + /** + * @param meldingId the meldingId to set + */ + public void setMeldingId(int meldingId) { + this.meldingId = meldingId; + } + + /** + * @return the tittel + */ + public String getTittel() { + return tittel; + } + + /** + * @param tittel the tittel to set + */ + public void setTittel(String tittel) { + this.tittel = tittel; + } + + /** + * @return the ingress + */ + public String getIngress() { + return ingress; + } + + /** + * @param ingress the ingress to set + */ + public void setIngress(String ingress) { + this.ingress = ingress; + } + + /** + * @return the tekst + */ + public String getTekst() { + return tekst; + } + + /** + * @param tekst the tekst to set + */ + public void setTekst(String tekst) { + this.tekst = tekst; + } + + /** + * @return the registrertDato + */ + public Date getRegistrertDato() { + return registrertDato; + } + + /** + * @param registrertDato the registrertDato to set + */ + public void setRegistrertDato(Date registrertDato) { + this.registrertDato = registrertDato; + } + + /** + * @return the gyldigTilDato + */ + public Date getGyldigTilDato() { + return gyldigTilDato; + } + + /** + * @param gyldigTilDato the gyldigTilDato to set + */ + public void setGyldigTilDato(Date gyldigTilDato) { + this.gyldigTilDato = gyldigTilDato; + } + + /** + * @return the meldingType + */ + public int getMeldingType() { + return meldingType; + } + + /** + * @param meldingType the meldingType to set + */ + public void setMeldingType(int meldingType) { + this.meldingType = meldingType; + } + + /** + * @return the bildeURL + */ + public String getBildeURL() { + return bildeURL; + } + + /** + * @param bildeURL the bildeURL to set + */ + public void setBildeURL(String bildeURL) { + this.bildeURL = bildeURL; + } + + /** + * @return the bildetekst + */ + public String getBildetekst() { + return bildetekst; + } + + /** + * @param bildetekst the bildetekst to set + */ + public void setBildetekst(String bildetekst) { + this.bildetekst = bildetekst; + } + + public boolean getLeaf() + { + return true; + } + +} diff --git a/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobilePresentation.java b/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobilePresentation.java new file mode 100644 index 0000000000000000000000000000000000000000..eba5fd7943e8536669678ce2bc3ac158f77e23b7 --- /dev/null +++ b/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobilePresentation.java @@ -0,0 +1,882 @@ +/* + * Copyright (c) 2015 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 com.fasterxml.jackson.annotation.JsonFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + + +/** + * Rip off from old VIPS + * © 2015 NIBIO + * @author Tor-Einar Skog <tor-einar.skog@nibio.no> + */ +public class VIPSMobilePresentation +{ + + private Map<String, Object> props; + /** + * Lager et nytt presentasjon Business Object + * @param + */ + public VIPSMobilePresentation + ( + long presentasjonId, + Date dagensDato, + int nivaa, + int varselFarge1, + int varselFarge2, + int varselFarge3, + int varselFarge4, + int varselFarge5, + int varselFarge6, + int varselFarge7, + int varselFarge8, + int varselFarge9, + int varselFarge10, + int varselFarge11, + String varselTekst1, + String varselTekst2, + String varselTekst3, + String varselTekst4, + String varselTekst5, + String varselTekst6, + String varselTekst7, + String varselTekst8, + String varselTekst9, + String varselTekst10, + String varselTekst11, + long klimastasjonId, + long organismeId, + long kulturId, + long feltId, + String modellId, + long varselId, + String klimastasjonNavn, + String organismeNavn, + String kulturNavn, + String feltNavn, + String modellNavn, + String klimastasjonHjelpUrl, + String modellHjelpUrl, + boolean personlig ) { + this ( + presentasjonId, + dagensDato, + nivaa, + varselFarge1, + varselFarge2, + varselFarge3, + varselFarge4, + varselFarge5, + varselFarge6, + varselFarge7, + varselFarge8, + varselFarge9, + varselFarge10, + varselFarge11, + varselTekst1, + varselTekst2, + varselTekst3, + varselTekst4, + varselTekst5, + varselTekst6, + varselTekst7, + varselTekst8, + varselTekst9, + varselTekst10, + varselTekst11, + klimastasjonId, + organismeId, + kulturId, + feltId, + modellId, + klimastasjonNavn, + organismeNavn, + kulturNavn, + feltNavn, + modellNavn, + klimastasjonHjelpUrl, + modellHjelpUrl ); + setVarselId( varselId ); + setPersonlig( personlig ); + } + +/** + * Lager et nytt presentasjon Business Object + * @param + */ + public VIPSMobilePresentation + ( + long presentasjonId, + Date dagensDato, + int nivaa, + int varselFarge1, + int varselFarge2, + int varselFarge3, + int varselFarge4, + int varselFarge5, + int varselFarge6, + int varselFarge7, + int varselFarge8, + int varselFarge9, + int varselFarge10, + int varselFarge11, + String varselTekst1, + String varselTekst2, + String varselTekst3, + String varselTekst4, + String varselTekst5, + String varselTekst6, + String varselTekst7, + String varselTekst8, + String varselTekst9, + String varselTekst10, + String varselTekst11, + long klimastasjonId, + long organismeId, + long kulturId, + long feltId, + String modellId, + String klimastasjonNavn, + String organismeNavn, + String kulturNavn, + String feltNavn, + String modellNavn, + String klimastasjonHjelpUrl, + String modellHjelpUrl + ) + { + setPresentasjonId( presentasjonId ); + setDagensDato( dagensDato ); + setNivaa( nivaa ); + setVarselFarge1( varselFarge1 ); + setVarselFarge2( varselFarge2 ); + setVarselFarge3( varselFarge3 ); + setVarselFarge4( varselFarge4 ); + setVarselFarge5( varselFarge5 ); + setVarselFarge6( varselFarge6 ); + setVarselFarge7( varselFarge7 ); + setVarselFarge8( varselFarge8 ); + setVarselFarge9( varselFarge9 ); + setVarselFarge10( varselFarge10 ); + setVarselFarge11( varselFarge11 ); + setVarselTekst1( varselTekst1 ); + setVarselTekst2( varselTekst2 ); + setVarselTekst3( varselTekst3 ); + setVarselTekst4( varselTekst4 ); + setVarselTekst5( varselTekst5 ); + setVarselTekst6( varselTekst6 ); + setVarselTekst7( varselTekst7 ); + setVarselTekst8( varselTekst8 ); + setVarselTekst9( varselTekst9 ); + setVarselTekst10( varselTekst10 ); + setVarselTekst11( varselTekst11 ); + setKlimastasjonId( klimastasjonId ); + setOrganismeId( organismeId ); + setKulturId( kulturId ); + setFeltId( feltId ); + setModellId( modellId ); + setKlimastasjonNavn( klimastasjonNavn ); + setOrganismeNavn( organismeNavn ); + setKulturNavn( kulturNavn ); + setFeltNavn( feltNavn ); + setModellNavn( modellNavn ); + setKlimastasjonHjelpUrl( klimastasjonHjelpUrl ); + setModellHjelpUrl( modellHjelpUrl ); + setVarselId( -1 ); + setPersonlig( false ); + } + + /** + * @param varselId Unik identifikator for presentasjon + */ + public final void setPresentasjonId( long presentasjonId ) + { + setAttribute("presentasjonId", presentasjonId); + } + + /** + * @param varselId Unik identifikator for presentasjon + */ + public final void setPersonlig( boolean personlig ) + { + setAttribute("personlig", personlig); + } + + /** + * @param dagensDato Dato presentasjonen gjelder for + */ + public final void setDagensDato( Date dagensDato ) + { + setAttribute( "dagensDato", dagensDato ); + } + + /** + * @param nivaa Nivaa for presentasjon + */ + public final void setNivaa( int nivaa ) + { + setAttribute("nivaa", nivaa); + } + + /** + * @param varselFarge1 Status for farge + */ + public final void setVarselFarge1( int varselFarge1 ) + { + setAttribute("varselFarge1", varselFarge1); + } + + /** + * @param varselFarge2 Status for farge + */ + public final void setVarselFarge2( int varselFarge2 ) + { + setAttribute("varselFarge2", varselFarge2); + } + + /** + * @param varselFarge3 Status for farge + */ + public final void setVarselFarge3( int varselFarge3 ) + { + setAttribute("varselFarge3", varselFarge3); + } + + /** + * @param varselFarge4 Status for farge + */ + public final void setVarselFarge4( int varselFarge4 ) + { + setAttribute("varselFarge4", varselFarge4); + } + + /** + * @param varselFarge5 Status for farge + */ + public final void setVarselFarge5( int varselFarge5 ) + { + setAttribute("varselFarge5", varselFarge5); + } + + /** + * @param varselFarge6 Status for farge + */ + public final void setVarselFarge6( int varselFarge6 ) + { + setAttribute("varselFarge6", varselFarge6); + } + + /** + * @param varselFarge7 Status for farge + */ + public final void setVarselFarge7( int varselFarge7 ) + { + setAttribute("varselFarge7", varselFarge7); + } + + /** + * @param varselFarge8 Status for farge + */ + public final void setVarselFarge8( int varselFarge8 ) + { + setAttribute("varselFarge8", varselFarge8); + } + + /** + * @param varselFarge9 Status for farge + */ + public final void setVarselFarge9( int varselFarge9 ) + { + setAttribute("varselFarge9", varselFarge9); + } + + /** + * @param varselFarge10 Status for farge + */ + public final void setVarselFarge10( int varselFarge10 ) + { + setAttribute("varselFarge10", varselFarge10); + } + + /** + * @param varselFarge11 Status for farge + */ + public final void setVarselFarge11( int varselFarge11 ) + { + setAttribute("varselFarge11", varselFarge11); + } + + /** + * @param varselTekst1 Tekst for varsel rute + */ + public final void setVarselTekst1( String varselTekst1 ) + { + setAttribute( "varselTekst1", varselTekst1 ); + } + + + /** + * @param varselTekst2 Tekst for varsel rute + */ + public final void setVarselTekst2( String varselTekst2 ) + { + setAttribute( "varselTekst2", varselTekst2 ); + } + + /** + * @param varselTekst3 Tekst for varsel rute + */ + public final void setVarselTekst3( String varselTekst3 ) + { + setAttribute( "varselTekst3", varselTekst3 ); + } + + /** + * @param varselTekst4 Tekst for varsel rute + */ + public final void setVarselTekst4( String varselTekst4 ) + { + setAttribute( "varselTekst4", varselTekst4 ); + } + + /** + * @param varselTekst5 Tekst for varsel rute + */ + public final void setVarselTekst5( String varselTekst5 ) + { + setAttribute( "varselTekst5", varselTekst5 ); + } + + /** + * @param varselTekst6 Tekst for varsel rute + */ + public final void setVarselTekst6( String varselTekst6 ) + { + setAttribute( "varselTekst6", varselTekst6 ); + } + + /** + * @param varselTekst7 Tekst for varsel rute + */ + public final void setVarselTekst7( String varselTekst7 ) + { + setAttribute( "varselTekst7", varselTekst7 ); + } + + /** + * @param varselTekst8 Tekst for varsel rute + */ + public final void setVarselTekst8( String varselTekst8 ) + { + setAttribute( "varselTekst8", varselTekst8 ); + } + + /** + * @param varselTekst9 Tekst for varsel rute + */ + public final void setVarselTekst9( String varselTekst9 ) + { + setAttribute( "varselTekst9", varselTekst9 ); + } + + /** + * @param varselTekst10 Tekst for varsel rute + */ + public final void setVarselTekst10( String varselTekst10 ) + { + setAttribute( "varselTekst10", varselTekst10 ); + } + + /** + * @param varselTekst11 Tekst for varsel rute + */ + public final void setVarselTekst11( String varselTekst11 ) + { + setAttribute( "varselTekst11", varselTekst11 ); + } + + /** + * @param klimastasjonId Id for klimastasjon + */ + public final void setKlimastasjonId( long klimastasjonId ) + { + setAttribute("klimastasjonId", klimastasjonId); + } + + /** + * @param organismeId Id for organisme + */ + public final void setOrganismeId( long organismeId ) + { + setAttribute("organismeId", organismeId); + } + + /** + * @param kulturId Id for kultur + */ + public final void setKulturId( long kulturId ) + { + setAttribute("kulturId", kulturId); + } + + /** + * @param feltId Id for felt + */ + public final void setFeltId( long feltId ) + { + setAttribute("feltId", feltId); + } + + /** + * @param modellId Id for modell + */ + public final void setModellId( String modellId ) + { + setAttribute( "modellId", modellId ); + } + + /** + * @param modellId Id for modell + */ + public final void setVarselId( long varselId ) + { + setAttribute("varselId", varselId); + } + + /** + * @param klimastasjonNavn Navn for klimastasjon + */ + public final void setKlimastasjonNavn( String klimastasjonNavn ) + { + setAttribute( "klimastasjonNavn", klimastasjonNavn ); + } + + /** + * @param organismeNavn Navn for organisme + */ + public final void setOrganismeNavn( String organismeNavn ) + { + setAttribute( "organismeNavn", organismeNavn ); + } + + /** + * @param kulturNavn Navn for kultur + */ + public final void setKulturNavn( String kulturNavn ) + { + setAttribute( "kulturNavn", kulturNavn ); + } + + /** + * @param feltNavn Navn for felt + */ + public final void setFeltNavn( String feltNavn ) + { + setAttribute( "feltNavn", feltNavn ); + } + + /** + * @param modellNavn Navn for modell + */ + public final void setModellNavn( String modellNavn ) + { + setAttribute( "modellNavn", modellNavn ); + } + + /** + * @param modellNavn Navn for modell til bruk p� VIPS-forsiden + */ + public void setModellWebNavn( String modellWebNavn ) + { + setAttribute( "modellWebNavn", modellWebNavn ); + } + + /** + * @param klimastasjonHjelpUrl Hjelp url for klimastasjon + */ + public final void setKlimastasjonHjelpUrl( String klimastasjonHjelpUrl ) + { + setAttribute( "klimastasjonHjelpUrl", klimastasjonHjelpUrl ); + } + + /** + * @param modellHjelpUrl Hjelp url for modell + */ + public final void setModellHjelpUrl( String modellHjelpUrl ) + { + setAttribute( "modellHjelpUrl", modellHjelpUrl ); + } + + + /** + * @return Unik identifikator for varsel + */ + public long getPresentasjonId() + { + return ( ( Long )getAttribute( "presentasjonId" ) ); + } + + /** + * @return Unik identifikator for varsel + */ + public boolean getPersonlig() + { + return ( ( Boolean )getAttribute( "personlig" ) ); + } + + /** + * @return dagensDato + */ +// @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd") + @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ssXXX", timezone="UTC") + //@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="dd.MM.yyyy", timezone="UTC") + public Date getDagensDato() + { + return ( (Date)getAttribute( "dagensDato" ) ); + } + + /** + * @return Nivaa for presentasjon + */ + public int getNivaa() + { + return ( ( Integer )getAttribute( "nivaa" ) ); + } + + /** + * @return Farge for varsel + */ + public int getVarselFarge1() + { + return ( ( Integer )getAttribute( "varselFarge1" ) ); + } + + /** + * @return Farge for varsel + */ + public int getVarselFarge2() + { + return ( ( Integer )getAttribute( "varselFarge2" ) ); + } + + /** + * @return Farge for varsel + */ + public int getVarselFarge3() + { + return ( ( Integer )getAttribute( "varselFarge3" ) ); + } + + /** + * @return Farge for varsel + */ + public int getVarselFarge4() + { + return ( ( Integer )getAttribute( "varselFarge4" ) ); + } + + /** + * @return Farge for varsel + */ + public int getVarselFarge5() + { + return ( ( Integer )getAttribute( "varselFarge5" ) ); + } + + /** + * @return Farge for varsel + */ + public int getVarselFarge6() + { + return ( ( Integer )getAttribute( "varselFarge6" ) ); + } + + /** + * @return Farge for varsel + */ + public int getVarselFarge7() + { + return ( ( Integer )getAttribute( "varselFarge7" ) ); + } + + /** + * @return Farge for varsel + */ + public int getVarselFarge8() + { + return ( ( Integer )getAttribute( "varselFarge8" ) ); + } + + /** + * @return Farge for varsel + */ + public int getVarselFarge9() + { + return ( ( Integer )getAttribute( "varselFarge9" ) ); + } + + /** + * @return Farge for varsel + */ + public int getVarselFarge10() + { + return ( ( Integer )getAttribute( "varselFarge10" ) ); + } + + /** + * @return Farge for varsel + */ + public int getVarselFarge11() + { + return ( ( Integer )getAttribute( "varselFarge11" ) ); + } + + /** + * @return Navn for klimastasjon + */ + public String getVarselTekst1() + { + return ( String )getAttribute( "varselTekst1" ); + } + + /** + * @return Navn for klimastasjon + */ + public String getVarselTekst2() + { + return ( String )getAttribute( "varselTekst2" ); + } + + /** + * @return Navn for klimastasjon + */ + public String getVarselTekst3() + { + return ( String )getAttribute( "varselTekst3" ); + } + + /** + * @return Navn for klimastasjon + */ + public String getVarselTekst4() + { + return ( String )getAttribute( "varselTekst4" ); + } + + /** + * @return Navn for klimastasjon + */ + public String getVarselTekst5() + { + return ( String )getAttribute( "varselTekst5" ); + } + + /** + * @return Navn for klimastasjon + */ + public String getVarselTekst6() + { + return ( String )getAttribute( "varselTekst6" ); + } + + /** + * @return Navn for klimastasjon + */ + public String getVarselTekst7() + { + return ( String )getAttribute( "varselTekst7" ); + } + + /** + * @return Navn for klimastasjon + */ + public String getVarselTekst8() + { + return ( String )getAttribute( "varselTekst8" ); + } + + /** + * @return Navn for klimastasjon + */ + public String getVarselTekst9() + { + return ( String )getAttribute( "varselTekst9" ); + } + + /** + * @return Navn for klimastasjon + */ + public String getVarselTekst10() + { + return ( String )getAttribute( "varselTekst10" ); + } + + /** + * @return Navn for klimastasjon + */ + public String getVarselTekst11() + { + return ( String )getAttribute( "varselTekst11" ); + } + + /** + * @return Id for klimastasjon + */ + public long getKlimastasjonId() + { + return ( ( Long )getAttribute( "klimastasjonId" ) ); + } + + /** + * @return Id for organisme + */ + public long getOrganismeId() + { + return ( ( Long )getAttribute( "organismeId" ) ); + } + + /** + * @return Id for kultur + */ + public long getKulturId() + { + return ( ( Long )getAttribute( "kulturId" ) ); + } + + /** + * @return Id for felt + */ + public long getFeltId() + { + return ( ( Long )getAttribute( "feltId" ) ); + } + + /** + * @return Id for modell + */ + public String getModellId() + { + return ( String )getAttribute( "modellId" ); + } + + /** + * @return Id for modell + */ + public long getVarselId() + { + return ( ( Long )getAttribute( "varselId" ) ); + } + + /** + * @return Navn for klimastasjon + */ + public String getKlimastasjonNavn() + { + return ( String )getAttribute( "klimastasjonNavn" ); + } + + /** + * @return Navn for organisme + */ + public String getOrganismeNavn() + { + return ( String )getAttribute( "organismeNavn" ); + } + + /** + * @return Navn for kultur + */ + public String getKulturNavn() + { + return ( String )getAttribute( "kulturNavn" ); + } + + /** + * @return Navn for modell + */ + public String getFeltNavn() + { + return ( String )getAttribute( "feltNavn" ); + } + + /** + * @return Navn for modell + */ + public String getModellNavn() + { + return ( String )getAttribute( "modellNavn" ); + } + + /** + * @return Navn for modell til bruk paa VIPS-forsiden + */ + public String getModellWebNavn() + { + return ( String )getAttribute( "modellWebNavn" ); + } + + /** + * @return Hjelp url for klimastasjon + */ + public String getKlimastasjonHjelpUrl() + { + return ( String )getAttribute( "klimastasjonHjelpUrl" ); + } + + /** + * @return Hjelp url for modell + */ + public String getModellHjelpUrl() + { + return ( String )getAttribute( "modellHjelpUrl" ); + } + + + public boolean getLeaf() + { + return true; + } + + + private Object getAttribute(String key) + { + if(this.props != null) + { + return this.props.get(key); + } + else + { + return null; + } + } + + private void setAttribute(String key, Object value) + { + if(this.props == null) + { + this.props = new HashMap<>(); + } + this.props.put(key, value); + } +} 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 8946f6467a89c1492a2e73e8d1223366c254efce..a8e5b3ca097812312e000386eae0f7c2627cec97 100644 --- a/src/main/java/no/nibio/vips/logic/service/LogicService.java +++ b/src/main/java/no/nibio/vips/logic/service/LogicService.java @@ -285,6 +285,7 @@ public class LogicService { @Produces("application/json;charset=UTF-8") public Response getMessageList( @QueryParam("publishedFrom") String publishedFrom , @QueryParam("publishedTo") String publishedTo, + @QueryParam("locale") String locale, @PathParam("organizationId") Integer organizationId ) { diff --git a/src/main/java/no/nibio/vips/logic/service/VIPSMobileService.java b/src/main/java/no/nibio/vips/logic/service/VIPSMobileService.java new file mode 100644 index 0000000000000000000000000000000000000000..928d19465b18b2fefacc1d62b5368c0101b30835 --- /dev/null +++ b/src/main/java/no/nibio/vips/logic/service/VIPSMobileService.java @@ -0,0 +1,365 @@ +/* + * Copyright (c) 2015 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.service; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Set; +import java.util.TimeZone; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.GET; +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.entity.Result; +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.PointOfInterestWeatherStation; +import no.nibio.vips.logic.entity.VipsLogicUser; +import no.nibio.vips.logic.entity.vipsmobile.VIPSMobileForecast; +import no.nibio.vips.logic.entity.vipsmobile.VIPSMobileMessage; +import no.nibio.vips.logic.entity.vipsmobile.VIPSMobilePresentation; +import no.nibio.vips.logic.i18n.SessionLocaleUtil; +import no.nibio.vips.logic.util.SessionControllerGetter; +import no.nibio.vips.logic.util.SystemTime; +import no.nibio.vips.util.WeatherUtil; +import org.jboss.resteasy.spi.HttpRequest; + +/** + * The purpose of this service is to mimic the services for VIPSMobile that + * 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> + * @author Tor-Einar Skog <tor-einar.skog@nibio.no> + */ +@Path("rest/vipsmobile") +public class VIPSMobileService { + + @Context + private HttpRequest httpRequest; + @Context + private HttpServletRequest httpServletRequest; + + @GET + @Path("melding") + @Produces("application/json;charset=UTF-8") + public Response getMessages( + @QueryParam("organizationId") Integer organizationId, + @QueryParam("locale") String locale + ) + { + Date datePublishedFrom = SystemTime.getSystemTime(); + Date datePublishedTo = datePublishedFrom; + List<Message> messageList = SessionControllerGetter.getMessageBean().getMessageList(organizationId, datePublishedFrom, datePublishedTo); + + List<VIPSMobileMessage> retVal = new ArrayList<>(); + for(Message message: messageList) + { + // Determine language + // Priority: Preferred language, English, first available locale + Set<MessageLocale> messageLocales = message.getMessageLocaleSet(); + MessageLocale first = null; + MessageLocale english = null; + MessageLocale optimal = null; + for(MessageLocale mLocale:messageLocales) + { + if(mLocale.getMessageLocalePK().getLocale().equals(locale)) + { + optimal = mLocale; + break; + } + if(first == null) + { + first = mLocale; + } + if(mLocale.getMessageLocalePK().getLocale().equals("en")) + { + english = mLocale; + } + } + + MessageLocale pragmaticBestLocale = optimal != null ? optimal + : english != null ? english + : first; + + String imageURL = ""; + String imageCaption = ""; + try + { + MessageIllustration illustration = message.getMessageIllustrationSet().iterator().next(); + imageURL = String.format("/static/images/messages/%s/%s", pragmaticBestLocale.getCreatedBy().getOrganizationId().getOrganizationId(), illustration.getMessageIllustrationPK().getFileName()); + }catch(NoSuchElementException | NullPointerException ex){} + + VIPSMobileMessage vmMessage = new VIPSMobileMessage( + message.getMessageId(), + pragmaticBestLocale.getHeading(), + pragmaticBestLocale.getLeadParagraph(), + pragmaticBestLocale.getBody(), + message.getDatePub(), + message.getDateValidTo(), + message.getMessageTagSet().iterator().next().getMessageTagId(), + imageURL, + "Test" + ); + + retVal.add(vmMessage); + } + + return Response.ok().entity(retVal).build(); + } + + @GET + @Path("presentasjoner") + @Produces("application/json;charset=UTF-8") + public Response getPresentations( + @QueryParam("varselIder") String forecastConfigurationIds, + @QueryParam("timeZone") String timeZoneStr, + @QueryParam("locale") String locale + ){ + // Default locale is English + if(locale == null) + { + locale = "en"; + } + + // Get model info + Map<String, ModelInformation> modelInformationMap = SessionControllerGetter.getForecastBean().getIndexedModelInformation(); + + TimeZone timeZone = timeZoneStr != null ? TimeZone.getTimeZone(timeZoneStr) + : TimeZone.getDefault(); + List<Long> parsedIds = new ArrayList<>(); + for(String idCandidate:forecastConfigurationIds.split(",")) + { + try + { + parsedIds.add(Long.valueOf(idCandidate)); + } + catch(NumberFormatException ex){} + } + List<VIPSMobilePresentation> retVal = new ArrayList<>(); + if(!parsedIds.isEmpty()) + { + List<ForecastConfiguration> configsWithSummaries = SessionControllerGetter.getForecastBean().getForecastConfigurationWithSummaries(parsedIds); + // Initializing the array of summaries + Date today = new WeatherUtil().normalizeToExactDate(SystemTime.getSystemTime(), timeZone); + List<Date> datesList = new ArrayList<>(); + Integer[] statusList = new Integer[11]; + Calendar cal = Calendar.getInstance(timeZone); + cal.setTime(today); + cal.add(Calendar.DATE, -4); + for(int i=0;i<11;i++) + { + datesList.add(cal.getTime()); + statusList[i] = Result.WARNING_STATUS_NO_WARNING_MISSING_DATA; + cal.add(Calendar.DATE, 1); + } + + for(ForecastConfiguration config:configsWithSummaries) + { + List<ForecastSummary> summaries = config.getForecastSummaries(); + if(summaries == null || summaries.isEmpty()) + { + continue; + } + for(ForecastSummary summary:summaries) + { + for(int i=0;i<11;i++) + { + if(datesList.get(i).compareTo(summary.getForecastSummaryPK().getSummaryForDate()) == 0) + { + statusList[i] = summary.getWarningStatus(); + } + } + } + + VIPSMobilePresentation pres = new VIPSMobilePresentation( + -1, + today, + 2, + statusList[0], + statusList[1], + statusList[2], + statusList[3], + statusList[4], + statusList[5], + statusList[6], + statusList[7], + statusList[8], + statusList[9], + statusList[10], + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + config.getWeatherStationPointOfInterestId().getPointOfInterestId(), + config.getPestOrganismId().getOrganismId(), + config.getCropOrganismId().getOrganismId(), + config.getLocationPointOfInterestId().getPointOfInterestId(), + config.getModelId(), + config.getWeatherStationPointOfInterestId().getName(), + config.getPestOrganismId().getLocalName(locale), + config.getCropOrganismId().getLocalName(locale), + config.getLocationPointOfInterestId().getName(), + SessionLocaleUtil.getI18nText(httpServletRequest, config.getModelId()), + "", + "" + ); + pres.setVarselId(config.getForecastConfigurationId()); + retVal.add(pres); + // Reset statusList + for(int i=0;i<11;i++) + { + statusList[i] = Result.WARNING_STATUS_NO_WARNING_MISSING_DATA; + cal.add(Calendar.DATE, 1); + } + } + } + return Response.ok().entity(retVal).build(); + } + + @GET + @Path("varsler") + @Produces("application/json;charset=UTF-8") + public Response getForecastConfigurations( + @QueryParam("klimastasjonId") Integer klimastasjonId, + @QueryParam("kulturId") List<Integer> kulturIder, + @QueryParam("locale") String locale + ) + { + // Default locale is English + if(locale == null) + { + locale = "en"; + } + + Date to = SystemTime.getSystemTime(); + Calendar cal = Calendar.getInstance(); + cal.setTime(to); + cal.add(Calendar.MONTH, -2); + Date from = cal.getTime(); + + PointOfInterestWeatherStation station = (PointOfInterestWeatherStation) SessionControllerGetter.getPointOfInterestBean().getPointOfInterest(klimastasjonId); + List<ForecastConfiguration> forecasts = SessionControllerGetter.getForecastBean().getForecastConfigurations(station, from, to); + List<VIPSMobileForecast> retVal = new ArrayList<>(); + for(ForecastConfiguration forecast:forecasts) + { + for(Integer cropOrganismId:kulturIder) + { + if(cropOrganismId.equals(forecast.getCropOrganismId().getOrganismId())) + { + // Create old style VIPS forecast object, add to returned list + VIPSMobileForecast varsel = new VIPSMobileForecast( + forecast.getForecastConfigurationId(), + -1, + forecast.getDateStart(), + forecast.getDateEnd(), + forecast.getWeatherStationPointOfInterestId().getPointOfInterestId(), + forecast.getWeatherStationPointOfInterestId().getName(), + forecast.getLocationPointOfInterestId().getPointOfInterestId(), + forecast.getLocationPointOfInterestId().getName(), + false, + false, + -1, + null, + false, + forecast.getPestOrganismId() != null ? forecast.getPestOrganismId().getOrganismId() : -1l, + forecast.getPestOrganismId() != null ? + forecast.getPestOrganismId().getLocalName(locale) != null && ! forecast.getPestOrganismId().getLocalName(locale).isEmpty() ? + forecast.getPestOrganismId().getLocalName(locale) + : forecast.getPestOrganismId().getLatinName() + : "", + forecast.getCropOrganismId().getOrganismId(), + forecast.getCropOrganismId().getLocalName(locale), + forecast.getModelId(), + SessionLocaleUtil.getI18nText(httpServletRequest, forecast.getModelId()) + ); + retVal.add(varsel); + break; + } + } + } + return Response.ok().entity(retVal).build(); + } + + /** + * Returns a list of forecasts for given organization + * @param organizationId + * @return + */ + @GET + @Path("organizationforecastconfigurations/{organizationId}") + @Produces("application/json;charset=UTF-8") + public Response getForecastConfigurationsForOrganization( + @PathParam("organizationId") Integer organizationId, + @QueryParam("cropOrganismId") List<Integer> cropOrganismIds, + @QueryParam("from") Date from, + @QueryParam("to") Date to + ) + { + + if(from == null || to == null) + { + to = SystemTime.getSystemTime(); + Calendar cal = Calendar.getInstance(); + cal.setTime(to); + cal.add(Calendar.MONTH, -2); + from = cal.getTime(); + } + + // First: Get all users for organization + List<VipsLogicUser> organizationUsers = SessionControllerGetter.getUserBean().getUsersByOrganization(organizationId); + // Then: Get forecasts for these users, collate and return + List<ForecastConfiguration> forecasts = new ArrayList<>(); + + for(VipsLogicUser user:organizationUsers) + { + Integer userId = user.getUserId(); + List<ForecastConfiguration> result = cropOrganismIds != null && ! cropOrganismIds.isEmpty() ? + SessionControllerGetter.getForecastBean().getForecastConfigurationsForUserAndCropsAndDate(userId,cropOrganismIds, from, to) + : SessionControllerGetter.getForecastBean().getForecastConfigurationsForUserAndDate(userId, from, to); + if(forecasts == null) + forecasts = result; + else + forecasts.addAll(result); + } + + return Response.ok().entity(forecasts).build(); + } +}