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);
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()
);
}
// we do already have a subscription
else {
// see if it's active
if (mySubscription.getSubscriptionStatus() != SubscriptionStatus.ACTIVE) {
// send opt in confirm message if applicable
if (myOptInConfirmMessageRef != null) {
doOptInConfirmMessage(myOptInConfirmMessageRef, myMessageGroup, mySubscriber, mySubscription);
}
// if no opt in, then just mark active
else {
mySubscription.setSubscriptionStatus(SubscriptionStatus.ACTIVE);
}
}
// save subscription
mainDao.persist(mySubscription);
/* ========================================================== */
/* Make LogEntry */
/* ========================================================== */
mainDao.logEntry
(
LogEntryType.RESUBSCRIBED,
mySubscriber,
aMessageGroupName,
defaultLogEntryProps()
);
}
}
// now that we've done all the work -
// re-read subscriber, so we get the latest (probably not
// necessary, but it makes it me feel better ;)
mySubscriber = mainDao.getSubscriberById(mySubscriber.getId());
// log an info, just for politeness
logger().info("User '{}' subscribed to message group '{}' ({} opt-in confirm)",
new Object[] { mySubscriber.getEmail(), mySubscription.getMessageGroupName(),
(myOptInConfirmMessageRef != null ? "with" : "without")});
return mySubscriber;
}