Skip to content
Snippets Groups Projects
Commit e8597cea authored by Tor-Einar Skog's avatar Tor-Einar Skog
Browse files

Isolate messaging by organization [VIPSUTV-502]

parent 2c163b3e
No related branches found
No related tags found
No related merge requests found
...@@ -19,8 +19,6 @@ ...@@ -19,8 +19,6 @@
package no.nibio.vips.logic.messaging; package no.nibio.vips.logic.messaging;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ibm.icu.text.MessageFormat; import com.ibm.icu.text.MessageFormat;
import com.ibm.icu.util.ULocale; import com.ibm.icu.util.ULocale;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
...@@ -37,7 +35,6 @@ import javax.persistence.EntityManager; ...@@ -37,7 +35,6 @@ import javax.persistence.EntityManager;
import javax.persistence.NoResultException; import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import javax.persistence.Query; import javax.persistence.Query;
import javax.ws.rs.core.Response;
import no.nibio.vips.entity.Result; import no.nibio.vips.entity.Result;
import no.nibio.vips.logic.entity.ForecastConfiguration; import no.nibio.vips.logic.entity.ForecastConfiguration;
import no.nibio.vips.logic.entity.ForecastResult; import no.nibio.vips.logic.entity.ForecastResult;
...@@ -49,11 +46,8 @@ import no.nibio.vips.logic.messaging.distribution.IVipsMessageHandler; ...@@ -49,11 +46,8 @@ import no.nibio.vips.logic.messaging.distribution.IVipsMessageHandler;
import no.nibio.vips.logic.messaging.distribution.VipsMessageInputHandler; import no.nibio.vips.logic.messaging.distribution.VipsMessageInputHandler;
import no.nibio.vips.logic.messaging.distribution.entity.VipsMessage; import no.nibio.vips.logic.messaging.distribution.entity.VipsMessage;
import no.nibio.vips.logic.util.Globals; import no.nibio.vips.logic.util.Globals;
import no.nibio.vips.logic.util.RESTAuthenticator;
import no.nibio.vips.logic.util.SystemTime; import no.nibio.vips.logic.util.SystemTime;
import org.jboss.resteasy.client.jaxrs.ResteasyClient; import org.slf4j.LoggerFactory;
import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;
import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;
/** /**
* @copyright 2015-2022 <a href="http://www.nibio.no/">NIBIO</a> * @copyright 2015-2022 <a href="http://www.nibio.no/">NIBIO</a>
...@@ -64,6 +58,8 @@ public class MessagingBean { ...@@ -64,6 +58,8 @@ public class MessagingBean {
@PersistenceContext(unitName="VIPSLogic-PU") @PersistenceContext(unitName="VIPSLogic-PU")
EntityManager em; EntityManager em;
private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(MessagingBean.class);
private Map<Integer, UniversalMessageFormat> universalMessageFormats; private Map<Integer, UniversalMessageFormat> universalMessageFormats;
public UniversalMessageFormat getUniversalMessageFormat(Integer universalMessageFormatId) public UniversalMessageFormat getUniversalMessageFormat(Integer universalMessageFormatId)
...@@ -118,41 +114,7 @@ public class MessagingBean { ...@@ -118,41 +114,7 @@ public class MessagingBean {
// Store it // Store it
em.persist(uMessage); em.persist(uMessage);
/*
ResteasyClient client = (ResteasyClient) ResteasyClientBuilder.newClient();//new ResteasyClientBuilder().build();
//client.register(new RESTAuthenticator("user", "userPass"));
client.register(new RESTAuthenticator("VIPSLogic", "plmoknijbuhv000"));
//ResteasyWebTarget target = client.target("http://kart13utv.ad.skogoglandskap.no:8080");
// TODO Make this configurable in app server
ResteasyWebTarget target = client.target("http://localhost:8080");
//ResteasyWebTarget target = client.target("http://logic.testvips2.nibio.no");
UniversalMessagingServiceClient umClient = target.proxy(UniversalMessagingServiceClient.class);
if (
System.getProperty("no.nibio.vips.logic.DISABLE_MESSAGING_SYSTEM") == null
|| System.getProperty("no.nibio.vips.logic.DISABLE_MESSAGING_SYSTEM").equals("false")
)
{
try
{
System.out.println(new ObjectMapper().writeValueAsString(uMessage));
Response r = umClient.sendMessage(new ObjectMapper().writeValueAsString(uMessage));
// TODO: Handle result
String result = r.readEntity(String.class);
System.out.println(result);
}
catch(JsonProcessingException ex)
{
// Handle error
}
}
else
{
System.out.println("Messaging system disabled. This message was not sent: " + uMessage.toString());
}
*/
// TODO Handle errors better! // TODO Handle errors better!
try try
...@@ -167,7 +129,7 @@ public class MessagingBean { ...@@ -167,7 +129,7 @@ public class MessagingBean {
} }
else else
{ {
System.out.println("Messaging system disabled. This message was not sent: " + uMessage.toString()); LOGGER.debug("Messaging system disabled. This message was not sent: " + uMessage.toString());
} }
} }
catch(Exception ex) catch(Exception ex)
...@@ -203,11 +165,12 @@ public class MessagingBean { ...@@ -203,11 +165,12 @@ public class MessagingBean {
"AND u.user_id IN ( \n" + "AND u.user_id IN ( \n" +
" SELECT mns.user_id FROM messaging.message_notification_subscription mns, public.vips_logic_user u \n" + " SELECT mns.user_id FROM messaging.message_notification_subscription mns, public.vips_logic_user u \n" +
" WHERE mns.user_id = u.user_id \n" + " WHERE mns.user_id = u.user_id \n" +
" and u.organization_id = " + message.getOrganizationId() +
(message.getCropCategoryIds() != null && message.getCropCategoryIds().length != 0 ? " AND mns.crop_category_ids && ARRAY" + Arrays.asList(message.getCropCategoryIds()).toString() + " \n" : "") + (message.getCropCategoryIds() != null && message.getCropCategoryIds().length != 0 ? " AND mns.crop_category_ids && ARRAY" + Arrays.asList(message.getCropCategoryIds()).toString() + " \n" : "") +
(message.getMessageTagIds() != null && !message.getMessageTagIds().isEmpty() ? " AND mns.message_tag_ids && ARRAY" + message.getMessageTagIds().toString() + " \n" : "" )+ // && is the array_overlaps operator (message.getMessageTagIds() != null && !message.getMessageTagIds().isEmpty() ? " AND mns.message_tag_ids && ARRAY" + message.getMessageTagIds().toString() + " \n" : "" )+ // && is the array_overlaps operator
" AND (mns.universal_message_format_id <> " + UniversalMessageFormat.FORMAT_SMS + " OR (mns.universal_message_format_id = " + UniversalMessageFormat.FORMAT_SMS + " AND u.approves_sms_billing IS TRUE))" + " AND (mns.universal_message_format_id <> " + UniversalMessageFormat.FORMAT_SMS + " OR (mns.universal_message_format_id = " + UniversalMessageFormat.FORMAT_SMS + " AND u.approves_sms_billing IS TRUE))" +
"); \n"; "); \n";
//System.out.println(sql); LOGGER.debug(sql);
Query q = em.createNativeQuery(sql, Query q = em.createNativeQuery(sql,
MessageRecipient.class); MessageRecipient.class);
...@@ -409,6 +372,7 @@ public class MessagingBean { ...@@ -409,6 +372,7 @@ public class MessagingBean {
" WHERE :weatherStationId = ANY(fens.weather_station_ids) \n" + " WHERE :weatherStationId = ANY(fens.weather_station_ids) \n" +
" AND fens.crop_category_ids && ARRAY(SELECT crop_category_id FROM public.crop_category WHERE :cropOrganismId = ANY(crop_organism_ids))" + " AND fens.crop_category_ids && ARRAY(SELECT crop_category_id FROM public.crop_category WHERE :cropOrganismId = ANY(crop_organism_ids))" +
" AND fens.user_id = u.user_id \n" + " AND fens.user_id = u.user_id \n" +
" AND u.organization_id = " + config.getVipsLogicUserId().getOrganizationId().getOrganizationId() +
" AND (fens.universal_message_format_id <> " + UniversalMessageFormat.FORMAT_SMS + " OR (fens.universal_message_format_id = " + UniversalMessageFormat.FORMAT_SMS + " AND u.approves_sms_billing IS TRUE))" + " AND (fens.universal_message_format_id <> " + UniversalMessageFormat.FORMAT_SMS + " OR (fens.universal_message_format_id = " + UniversalMessageFormat.FORMAT_SMS + " AND u.approves_sms_billing IS TRUE))" +
");\n"; ");\n";
Query q = em.createNativeQuery(sql, MessageRecipient.class); Query q = em.createNativeQuery(sql, MessageRecipient.class);
...@@ -480,8 +444,8 @@ public class MessagingBean { ...@@ -480,8 +444,8 @@ public class MessagingBean {
} }
private List<MessageRecipient> getObservationNotificationSubscribers(Observation observation) { private List<MessageRecipient> getObservationNotificationSubscribers(Observation observation) {
Query q = em.createNativeQuery( VipsLogicUser observer = em.find(VipsLogicUser.class, observation.getUserId());
"SELECT \n" + String sql = "SELECT \n" +
" u.preferred_locale,\n" + " u.preferred_locale,\n" +
" u.free_sms, \n" + " u.free_sms, \n" +
" umf.format_name AS type,\n" + " umf.format_name AS type,\n" +
...@@ -499,11 +463,15 @@ public class MessagingBean { ...@@ -499,11 +463,15 @@ public class MessagingBean {
" SELECT ons.user_id FROM messaging.observation_notification_subscription ons, public.vips_logic_user u \n" + " SELECT ons.user_id FROM messaging.observation_notification_subscription ons, public.vips_logic_user u \n" +
" WHERE ons.crop_category_ids && ARRAY(SELECT crop_category_id FROM public.crop_category WHERE :cropOrganismId = ANY(crop_organism_ids)) \n" + " WHERE ons.crop_category_ids && ARRAY(SELECT crop_category_id FROM public.crop_category WHERE :cropOrganismId = ANY(crop_organism_ids)) \n" +
" AND ons.user_id = u.user_id \n" + " AND ons.user_id = u.user_id \n" +
" and u.organization_id = " + observer.getOrganizationId().getOrganizationId() +
" AND (ons.universal_message_format_id <> " + UniversalMessageFormat.FORMAT_SMS + " OR (ons.universal_message_format_id = " + UniversalMessageFormat.FORMAT_SMS + " AND u.approves_sms_billing IS TRUE))" + " AND (ons.universal_message_format_id <> " + UniversalMessageFormat.FORMAT_SMS + " OR (ons.universal_message_format_id = " + UniversalMessageFormat.FORMAT_SMS + " AND u.approves_sms_billing IS TRUE))" +
");\n", ");\n";
LOGGER.debug(sql);
Query q = em.createNativeQuery(
sql,
MessageRecipient.class) MessageRecipient.class)
.setParameter("cropOrganismId", observation.getCropOrganismId()); .setParameter("cropOrganismId", observation.getCropOrganismId());
LOGGER.debug(q.toString());
return q.getResultList(); return q.getResultList();
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment