package de.fhb.autobday.manager; import de.fhb.autobday.dao.AbdAccountFacade; import de.fhb.autobday.dao.AbdContactFacade; import de.fhb.autobday.dao.AbdGroupFacade; import de.fhb.autobday.dao.AbdUserFacade; import de.fhb.autobday.data.*; import de.fhb.autobday.exception.contact.NoContactGivenException; import de.fhb.autobday.manager.group.GroupManagerLocal; import de.fhb.autobday.manager.mail.GoogleMailManagerLocal; import java.util.*; import java.util.logging.ConsoleHandler; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.Logger; import javax.ejb.*; import javax.interceptor.Interceptors; /** * Implementation of AbdManager. * * @author Michael Koppen mail: koppen@fh-brandenburg.de * @author Andy Klay mail: klay@fh-brandenburg.de */ @Startup @Stateless @Local @Interceptors(LoggerInterceptor.class) public class AbdManager implements AbdManagerLocal { private final static Logger LOGGER = Logger.getLogger(AbdManager.class.getName()); @EJB private AbdUserFacade userDAO; @EJB private AbdGroupFacade groupDAO; @EJB private AbdAccountFacade accountdataDAO; @EJB private AbdContactFacade contactDAO; @EJB private GoogleMailManagerLocal mailManager; @EJB private GroupManagerLocal groupManager; public AbdManager() { initLoggers(); } /** * {@inheritDoc} * */ @Override public List<AbdUser> getAllUser() { return userDAO.findAll(); } /** * {@inheritDoc} * */ @Override public List<AbdGroup> getAllGroups() { return groupDAO.findAll(); } /** * {@inheritDoc} * */ @Override public List<AbdAccount> getAllAccountdata() { return accountdataDAO.findAll(); } /** * {@inheritDoc} * */ @Override public List<AbdContact> getAllContacts() { return contactDAO.findAll(); } @Schedule(minute = "*/1", hour = "*") private void checkEveryMinute() { LOGGER.log(Level.INFO, "every minute idle message...{0}", new Date(System.currentTimeMillis())); } /** * {@inheritDoc} * */ @Schedule(minute = "53", hour = "20") @Override public void checkEveryDay() { LOGGER.log(Level.INFO, "EverDayCheck {0}", new Date(System.currentTimeMillis())); Calendar currentDateCal = Calendar.getInstance(); Calendar bdayDateCal = Calendar.getInstance(); String parsedMessageFromTemplate = "Empty Message!"; String template; AbdContact contact; AbdAccount actAccount; //search all contacts, which have bday today Date currentDate = new Date(System.currentTimeMillis()); currentDateCal.setTime(currentDate); LOGGER.log(Level.INFO, "Getting all Contacts"); Collection<AbdContact> Contacts = contactDAO.findAll(); List<AbdContact> birthdayContacts = new ArrayList<AbdContact>(); LOGGER.log(Level.INFO, "Searching for birthday-contacts"); for (AbdContact abdContact : Contacts) { System.out.println(abdContact.getFirstname() + " " + abdContact.getName() + " has bday on " + abdContact.getBday()); bdayDateCal.setTime(abdContact.getBday()); LOGGER.log(Level.INFO, "DAY: {0} CURRENT DAY: {1}", new Object[]{bdayDateCal.get(Calendar.DAY_OF_MONTH), currentDateCal.get(Calendar.DAY_OF_MONTH)}); LOGGER.log(Level.INFO, "MONTH: {0} CURRENT MONTH: {1}", new Object[]{bdayDateCal.get(Calendar.MONTH), currentDateCal.get(Calendar.MONTH)}); if ((bdayDateCal.get(Calendar.DAY_OF_MONTH) == currentDateCal.get(Calendar.DAY_OF_MONTH)) && (bdayDateCal.get(Calendar.MONTH) == currentDateCal.get(Calendar.MONTH))) { LOGGER.log(Level.INFO, "Contact with bday found: {0}", abdContact); birthdayContacts.add(abdContact); } } if (!birthdayContacts.isEmpty()) { //go through all bday candidates for (AbdContact aktContact : birthdayContacts) { Collection<AbdGroupToContact> aktContactInGroups = aktContact.getAbdGroupToContactCollection(); for (AbdGroupToContact aktGroupToContact : aktContactInGroups) { //if right relation found if (aktGroupToContact.getAbdContact().equals(aktContact)) { //and if group is marked as active if (aktGroupToContact.getActive()) { //and if contactToGroup is marked as active if (aktGroupToContact.getAbdGroup().getActive()) { actAccount = aktGroupToContact.getAbdGroup().getAccount(); template = aktGroupToContact.getAbdGroup().getTemplate(); contact = aktGroupToContact.getAbdContact(); try { //parse Template parsedMessageFromTemplate = groupManager.parseTemplate(template, contact); } catch (NoContactGivenException ex) { LOGGER.log(Level.SEVERE, null, ex); } //and send mail try { mailManager.sendUserMail(actAccount, "Happy Birthday", parsedMessageFromTemplate, contact.getMail()); } catch (Exception e) { LOGGER.log(Level.SEVERE, e.getMessage()); } } } } } } } else { LOGGER.log(Level.INFO, "No Birthdaycontacts found"); } } /** * initializes the loggers for the whole project. * */ private void initLoggers() { Level consoleHandlerLevel = Level.INFO; Logger rootLogger = Logger.getLogger(""); Handler[] handlers = rootLogger.getHandlers(); ConsoleHandler chandler = null; for (int i = 0; i < handlers.length; i++) { if (handlers[i] instanceof ConsoleHandler) { chandler = (ConsoleHandler) handlers[i]; } } if (chandler != null) { chandler.setLevel(consoleHandlerLevel); } else { LOGGER.log(Level.SEVERE, "No ConsoleHandler there."); } } // private String getSender(AbdGroupToContact aktGroupToContact) { // return aktGroupToContact.getAbdGroup().getAccount().getUsername(); // } }