Package org.jresponder.message

Examples of org.jresponder.message.MessageGroup


        }
      }
     
      if (mySubscription == null) return webApiUtil.result404("Couldn't find subscription");
     
      MessageGroup myMessageGroup = messageGroupSource.getMessageGroupByName(aMessageGroupName);
     
      if (myMessageGroup == null) return webApiUtil.result404("Couldn't find message group");
     
      MessageRef myMessageRef = myMessageGroup.getMessageRefByName(aMessageName);
     
      MimeMessage myMimeMessage = javaMailSender.createMimeMessage();
     
      SendConfig mySendConfig =
          sendConfigGroup.lookupSendConfig(mySubscriber, mySubscription, myMessageGroup, myMessageRef);
View Full Code Here


        if (messageGroupSource.getMessageGroupByName(aMessageGroupName) == null) {
          throw new IllegalArgumentException("message group does not exist");
        }
       
        // get the message group
        MessageGroup myMessageGroup = messageGroupSource.getMessageGroupByName(aMessageGroupName);
      logger().debug("Using MessageGroup: {}", myMessageGroup);
     
        // the opt-in-confirm message, if it exists
        MessageRef myOptInConfirmMessageRef = myMessageGroup.getOptInConfirmMessageRef();
      logger().debug("myOptInConfirmMessageRef: {}", myOptInConfirmMessageRef);
       
        // make sure we have an attribute map, even if it's empty
        if (aSubscriberPropsMap == null) {
          aSubscriberPropsMap = new HashMap<String,Object>();
        }
       
      logger().debug("aSubscriberPropsMap: {}", aSubscriberPropsMap);

       
        // find existing subscriber
        Subscriber mySubscriber = mainDao.getSubscriberByEmail(aEmail);
      logger().debug("Looked up subscriber with email ({}) and got: {}", aEmail, mySubscriber);
       
      Subscription mySubscription = null;
     
        // doesn't exist, create it
        if (mySubscriber == null) {
         
          logger().debug("No subscriber for this email, making a new record");
         
          // create subscriber
          mySubscriber = new Subscriber();
          mySubscriber.setEmail(aEmail);
          mySubscriber.setPropsMap(aSubscriberPropsMap);
          mySubscriber.setSubscriberStatus(SubscriberStatus.OK);
          mainDao.persist(mySubscriber);
         
          logger().debug("Now making a new subscription record");

            // create subscription
            mySubscription = new Subscription(mySubscriber, aMessageGroupName);
            mySubscription.setNextSendDate(new Date());
            mySubscription.setToken(tokenUtil.generateToken());
           
            // send opt in confirm message if applicable
            if (myOptInConfirmMessageRef != null) {
              logger().debug("About to send opt-in confirm message...");
              doOptInConfirmMessage(myOptInConfirmMessageRef, myMessageGroup, mySubscriber, mySubscription);
            }
            // if no opt in, then just mark active
            else {
              logger().debug("No opt-in confirm message, just marking as active");
              mySubscription.setSubscriptionStatus(SubscriptionStatus.ACTIVE);
            }
           
          logger().debug("Saving subscription");
            mainDao.persist(mySubscription);
           
        /* ========================================================== */
        /* Make LogEntry                                              */
        /* ========================================================== */
            mainDao.logEntry
                      (
                          LogEntryType.SUBSCRIBED,
                          mySubscriber,
                          aMessageGroupName,
                          defaultLogEntryProps()
                      );
           
        }
       
        // already there, merge
        else {
         
          logger().debug("Already have a Subscriber object for email address ({}): {}", aEmail, mySubscriber);
         
          // update attributes
          mySubscriber.setPropsMap(
              (Map<String,Object>)PropUtil.getInstance().propMerge(mySubscriber.getPropsMap(), aSubscriberPropsMap)
              );
         
          if (logger().isDebugEnabled()) {
            logger().debug("Saving updated properties: {}", mySubscriber.getPropsMap());
          }
         
            mainDao.persist(mySubscriber);
         
            // see if the subscription is there
            mySubscription =
                mainDao.getSubscriptionBySubscriberAndMessageGroupName
                  (
                      mySubscriber,
                      myMessageGroup.getName()
                  );
           
        logger().debug("Looking for corresponding Subscription record for subscriber and message group ({}) found: {}", myMessageGroup.getName(), mySubscription);
           
            // no subscription, create it
            if (mySubscription == null) {
             
              mySubscription = new Subscription(mySubscriber, aMessageGroupName);
View Full Code Here

   
    // 2. for this Subscription, find last message processed in
    //    the list for that group
   
    // first make sure we have a corresponding message group
    MessageGroup myMessageGroup = messageGroupSource.getMessageGroupByName(mySubscription.getMessageGroupName());
   
    // if no such message group, then we just get rid of the
    // subscription (lose the date so it doesn't get pulled back up);
    // also catch the case where no subscriber record, should never
    // happen, but adding scenario for robustness)
    if (myMessageGroup == null || mySubscriber == null) {
     
      logger().warn(
          "Either message group or subscriber was null, " +
          "bailing out (messageGroup: {}, subscriber: {})",
          myMessageGroup, mySubscriber);
     
      /* ====================================================== */
      /* clear next send date of subscription                   */
      /* ====================================================== */
      endSubscription(mySubscription);
      return true;
    }
   
    // get the name of the last message
    String myLastMessageName = mySubscription.getLastMessageName();
    logger().debug("myLastMessageName: {}", myLastMessageName);
   
    // if last message exists
    int mySendMessageRefIndex = myMessageGroup.indexOfName(myLastMessageName);
    if (mySendMessageRefIndex >= 0) {
      // increment to next one to get the message we should send
      mySendMessageRefIndex++;
    }
    // if last message name was null, then start at zero
    if (myLastMessageName == null) {
      mySendMessageRefIndex = 0;
    }
   
    logger().debug("myLastMessageRefIndex: {}", mySendMessageRefIndex);
   
   
    // 3. get the next message
   
    List<MessageRef> myMessageRefList = myMessageGroup.getMessageRefList();
   
    // the MessageRef that we are to send
    MessageRef mySendMessageRef = null;
    if (mySendMessageRefIndex >= 0) {
      // make sure we haven't gone beyond the end of the messages
      if (myMessageRefList.size() > mySendMessageRefIndex) {
        mySendMessageRef = myMessageRefList.get(mySendMessageRefIndex);
      }
    }
    logger().debug("about to send mySendMessageRef: {}", mySendMessageRef);

   
    // no message to send (either couldn't find last message or
    // there is no next message); also check for the case where
    // the last send date is not set (should never happen, but just
    // to keep it from breaking the system we treat it like end
    // of list)
    if (mySendMessageRef == null || mySubscription.getLastSendDate() == null) {
      logger().debug("no more messages to send for this subscription");
      /* ====================================================== */
      /* clear next send date of subscription                   */
      /* ====================================================== */
      endSubscription(mySubscription);
      return true;
    }
   

    if (mySubscription.getLastSendDate() == null) {
      logger().warn("last_send_date was null on subscription, should never happen");
    }
   
    // 3a.read the time on it and recalculate, confirm that
    //    time is now past
   
    Long myWait = mySendMessageRef.getWaitAfterLastMessage();
    if (myWait == null) {
      /* ====================================================== */
      /* clear next send date of subscription                   */
      /* ====================================================== */
      logger().warn("'wait after last message' value was not set for this message, ending the subscription");
      endSubscription(mySubscription);
      return true;
    }
   
    // 3b.if not past then set next consideration date to recalced date
    //    and kick back
   
    // see if it's time to send yet
    long myLastSendDate = mySubscription.getLastSendDate().getTime();
    if (myLastSendDate + myWait > new Date().getTime()) {
      logger().debug("it is not yet time to send this message, putting it back for later");
      // not time to send (possibly message changed since
      // this subscription record was last edited - also first
      // subscription looks like this);
      // reset the nextSendDate and move on
      mySubscription.setNextSendDate(new Date(myLastSendDate + myWait));
      mainDao.persist(mySubscription);
      return true;
    }
   
   
    // 4. render and send message
   
    boolean mySendWorked = sendMessage(
            mySendMessageRef,
            myMessageGroup,
            mySubscriber,
            mySubscription,
            LogEntryType.MESSAGE_SENT
        );
   
    // if the sending was skipped...
    if (!mySendWorked) {
     
      // write a log entry for the skipping
      mainDao.logEntry
            (
                 LogEntryType.MESSAGE_SKIPPED,
                 mySubscriber,
                 myMessageGroup.getName(),
                 propUtil.mkprops(
                     "message_name", mySendMessageRef.getName()
                     )
            );

    }
   
   
   
   
    // 5. get next message in the list and recalculate date based on that,
    //    update last message name and save
   
    // update the last sent info
    mySubscription.setLastMessageName(mySendMessageRef.getName());
    mySubscription.setLastSendDate(new Date());
   
    // index of next message
    int myNextMessageRefIndex = mySendMessageRefIndex + 1;
   
   
    // 5a.if no more messages, then next consideration date is set to null
   
    if (myNextMessageRefIndex >= myMessageRefList.size()) {
      mySubscription.setNextSendDate(null);
    }
   
    // if we have a next message, then calc when it fires
    else {
     
      MessageRef myNextMessageRef = myMessageRefList.get(myNextMessageRefIndex);
      Long myNextWait = myNextMessageRef.getWaitAfterLastMessage();
      mySubscription.setNextSendDate(
            new Date(mySubscription.getLastSendDate().getTime() + myNextWait)
          );

    }
   
    // save the changes to the subscription
    mainDao.persist(mySubscription);
   
    if (mySubscription.getNextSendDate() == null) {
     
      // write a log entry for the completion of the subscription
      mainDao.logEntry
          (
               LogEntryType.SUBSCRIPTION_DONE,
               mySubscriber,
               myMessageGroup.getName(),
               propUtil.mkprops(
                   "message_name", mySendMessageRef.getName()
                   )
          );
    }
View Full Code Here

TOP

Related Classes of org.jresponder.message.MessageGroup

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.