Commit 022a517bd5ea7dc6261a3ac53b2e705d9d57d8d4
1 parent
68eb64d2
Missing scheduler files
Showing
4 changed files
with
234 additions
and
0 deletions
services/MainBot/src/main/java/de/bht/beuthbot/scheduler/JAXActivator.java
0 → 100644
| 1 | +package de.bht.beuthbot.scheduler; | ||
| 2 | + | ||
| 3 | +import javax.ws.rs.ApplicationPath; | ||
| 4 | +import javax.ws.rs.core.Application; | ||
| 5 | + | ||
| 6 | +/** | ||
| 7 | + * JAXActivator is an arbitrary name, what is important is that javax.ws.rs.core.Application is extended | ||
| 8 | + * and the @ApplicationPath annotation is used with a "rest" path. Without this the rest routes linked to | ||
| 9 | + * from index.html would not be found. | ||
| 10 | + */ | ||
| 11 | +@ApplicationPath("") | ||
| 12 | +public class JAXActivator extends Application { | ||
| 13 | + // Left empty intentionally | ||
| 14 | +} |
services/MainBot/src/main/java/de/bht/beuthbot/scheduler/SchedulerBean.java
0 → 100644
| 1 | +package de.bht.beuthbot.scheduler; | ||
| 2 | + | ||
| 3 | +import de.bht.beuthbot.attachments.AttachmentStore; | ||
| 4 | +import de.bht.beuthbot.jms.Target; | ||
| 5 | +import de.bht.beuthbot.model.Attachment; | ||
| 6 | +import de.bht.beuthbot.model.Intent; | ||
| 7 | +import de.bht.beuthbot.model.Messenger; | ||
| 8 | +import de.bht.beuthbot.model.entities.AppUser; | ||
| 9 | +import de.bht.beuthbot.scheduler.model.Reminder; | ||
| 10 | +import de.bht.beuthbot.scheduler.model.ReminderCycle; | ||
| 11 | +import org.slf4j.Logger; | ||
| 12 | +import org.slf4j.LoggerFactory; | ||
| 13 | + | ||
| 14 | +import de.bht.beuthbot.conf.Application; | ||
| 15 | +import de.bht.beuthbot.conf.Configuration; | ||
| 16 | +import de.bht.beuthbot.jms.ProcessQueue; | ||
| 17 | +import de.bht.beuthbot.jms.TaskMessage; | ||
| 18 | + | ||
| 19 | +import java.text.ParseException; | ||
| 20 | +import java.text.SimpleDateFormat; | ||
| 21 | +import java.util.*; | ||
| 22 | +import javax.annotation.PostConstruct; | ||
| 23 | +import javax.annotation.Resource; | ||
| 24 | +import javax.ejb.*; | ||
| 25 | +import javax.ejb.Timer; | ||
| 26 | +import javax.ws.rs.GET; | ||
| 27 | +import javax.ws.rs.Path; | ||
| 28 | + | ||
| 29 | +@Singleton | ||
| 30 | +@Startup | ||
| 31 | +public class SchedulerBean { | ||
| 32 | + /** | ||
| 33 | + * slf4j Logger | ||
| 34 | + */ | ||
| 35 | + private final Logger logger = LoggerFactory.getLogger(SchedulerBean.class); | ||
| 36 | + //Timer object for call cycling | ||
| 37 | + @Resource | ||
| 38 | + TimerService timerService; | ||
| 39 | + /** Injected JMS MessageQueue */ | ||
| 40 | + @Resource(lookup = "java:global/global/ProcessQueueBean") | ||
| 41 | + private ProcessQueue processQueue; | ||
| 42 | + | ||
| 43 | + /** Injected AttachmentStore */ | ||
| 44 | + @Resource(lookup = "java:global/global/AttachmentStoreBean") | ||
| 45 | + private AttachmentStore attachmentStore; | ||
| 46 | + | ||
| 47 | + /** BeuthBot Application Bean */ | ||
| 48 | + @Resource(lookup = "java:global/global/ApplicationBean") | ||
| 49 | + private Application application; | ||
| 50 | + | ||
| 51 | + //list of reminders to be populated with data from the DB | ||
| 52 | + private static ArrayList<Reminder> _reminders = new ArrayList<>(); | ||
| 53 | + | ||
| 54 | + boolean isActive = true; | ||
| 55 | + | ||
| 56 | + public SchedulerBean() { | ||
| 57 | + | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + //CONSTRUCTOR | ||
| 61 | + @PostConstruct | ||
| 62 | + public void init(){ | ||
| 63 | + logger.debug("SchedulerBean initiated!"); | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + @Schedule(hour="*", minute="*") | ||
| 67 | + public void fetchReminders() { | ||
| 68 | + //TODO: Establish DB connection and retrieve list of reminders | ||
| 69 | + logger.debug("SchedulerBean fired!"); | ||
| 70 | + | ||
| 71 | + if (!isActive) return; | ||
| 72 | + | ||
| 73 | + SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy KK:mm"); | ||
| 74 | + String dateNow = formatter.format(new Date()); | ||
| 75 | + | ||
| 76 | + for (Reminder reminder : _reminders) { | ||
| 77 | + //Check if date time now equals reminder date time | ||
| 78 | + if(dateNow.equals(formatter.format(reminder.getCycleDate()))) { | ||
| 79 | + Long messageID = 1L; | ||
| 80 | + AppUser user = reminder.getUser(); //TODO: Fill with correct value from DB | ||
| 81 | + Long messengerId = Long.valueOf(user.getFacebookUserId() == null ? user.getTelegramUserId() : user.getFacebookUserId()); | ||
| 82 | + Messenger messenger = reminder.getMessenger(); //TODO: Fill with correct value from DB | ||
| 83 | + String text = ""; | ||
| 84 | + String intent = "showFood"; | ||
| 85 | + Map entities = Collections.emptyMap(); | ||
| 86 | + try { | ||
| 87 | + TaskMessage message = new TaskMessage(1L, Target.MAINBOT, messageID, messengerId , messenger, text, null, intent, entities); | ||
| 88 | + processQueue.route(new TaskMessage(message)); | ||
| 89 | + } catch (Exception e) { | ||
| 90 | + logger.error("Something went wrong while attempting to send reminder!", e); | ||
| 91 | + } | ||
| 92 | + } | ||
| 93 | + } | ||
| 94 | + } | ||
| 95 | + | ||
| 96 | + public String createReminder(TaskMessage message, AppUser user) { | ||
| 97 | + | ||
| 98 | + ReminderCycle cycle = ReminderCycle.DAILY; | ||
| 99 | + Messenger messener = message.getMessenger(); | ||
| 100 | + String intent = message.getEntities().getOrDefault("event",""); | ||
| 101 | + Date date; | ||
| 102 | + try { | ||
| 103 | + //Read out time for Reminder | ||
| 104 | + | ||
| 105 | + String messageTime = message.getEntities().getOrDefault("time",""); | ||
| 106 | + //time should not be empty | ||
| 107 | + if(!messageTime.equals("")) { | ||
| 108 | + //get Date new for day, month, year | ||
| 109 | + String dateNow = new SimpleDateFormat("dd.MM.yyyy").format(new Date()); | ||
| 110 | + //remove all chars from time String (e.g. "10 Uhr") | ||
| 111 | + String reminderTime = messageTime.replaceAll("[^0-9:]", ""); | ||
| 112 | + //trim spaces | ||
| 113 | + reminderTime = reminderTime.trim(); | ||
| 114 | + //check if given time is e.g. "11:15" | ||
| 115 | + if(reminderTime.contains(":")) { | ||
| 116 | + //split for hours and minutes | ||
| 117 | + String[] splittedTime = reminderTime.split(":"); | ||
| 118 | + //add hours and minutes to date | ||
| 119 | + if(splittedTime.length > 1) | ||
| 120 | + dateNow = dateNow + " " + splittedTime[0] + ":" + splittedTime[1]; | ||
| 121 | + } else { | ||
| 122 | + //add hours from time and set to "00" | ||
| 123 | + dateNow = dateNow + " " + reminderTime + ":" + "00"; | ||
| 124 | + } | ||
| 125 | + | ||
| 126 | + SimpleDateFormat f = new SimpleDateFormat("dd.MM.yyyy hh:mm"); | ||
| 127 | + Date d = f.parse(dateNow); | ||
| 128 | + long milliseconds = d.getTime(); | ||
| 129 | + date = new Date(milliseconds); | ||
| 130 | + | ||
| 131 | + } else | ||
| 132 | + date = new Date(); | ||
| 133 | + | ||
| 134 | + } catch (Exception e) { | ||
| 135 | + return "Fehler beim Anlegen der Erinnerung"; | ||
| 136 | + } | ||
| 137 | + | ||
| 138 | + Reminder reminder = new Reminder(user, cycle, date, messener, intent); | ||
| 139 | + _reminders.add(reminder); | ||
| 140 | + | ||
| 141 | + return "Erinnerung erstellt:\n" + | ||
| 142 | + "Wann: um " + new SimpleDateFormat("KK:mm").format(reminder.getCycleDate()) + " Uhr\n" + | ||
| 143 | + "Was: " + reminder.getIntent(); | ||
| 144 | + | ||
| 145 | + //TODO: Insert the new Reminder into Database | ||
| 146 | + } | ||
| 147 | + | ||
| 148 | +} |
services/MainBot/src/main/java/de/bht/beuthbot/scheduler/model/Reminder.java
0 → 100644
| 1 | +package de.bht.beuthbot.scheduler.model; | ||
| 2 | + | ||
| 3 | +import de.bht.beuthbot.model.Messenger; | ||
| 4 | +import de.bht.beuthbot.model.entities.AppUser; | ||
| 5 | + | ||
| 6 | +import java.util.Date; | ||
| 7 | + | ||
| 8 | +public class Reminder { | ||
| 9 | + //TODO: Replace with User Object | ||
| 10 | + private AppUser _user; | ||
| 11 | + //Reminder cycle | ||
| 12 | + private ReminderCycle _reminderCycle; | ||
| 13 | + //Date of Cycle | ||
| 14 | + private Date _cycleDate; | ||
| 15 | + //Used Messenger | ||
| 16 | + private Messenger _messenger; | ||
| 17 | + //Intent after Reminder is triggered | ||
| 18 | + private String _intent; | ||
| 19 | + | ||
| 20 | + public Reminder(AppUser user, ReminderCycle reminderCycle, Date cycleDate, Messenger messenger, String intent) { | ||
| 21 | + _user = user; | ||
| 22 | + _reminderCycle = reminderCycle; | ||
| 23 | + _cycleDate = cycleDate; | ||
| 24 | + _messenger = messenger; | ||
| 25 | + _intent = intent; | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + public Messenger getMessenger() { | ||
| 29 | + return _messenger; | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + public void setMessenger(Messenger messenger) { | ||
| 33 | + _messenger = messenger; | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + public String getIntent() { | ||
| 37 | + return _intent; | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + public void setIntent(String intent) { | ||
| 41 | + _intent = intent; | ||
| 42 | + } | ||
| 43 | + | ||
| 44 | + public AppUser getUser() { | ||
| 45 | + return _user; | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + public void setUserID(AppUser user) { | ||
| 49 | + _user = user; | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + public ReminderCycle getReminderCycle() { | ||
| 53 | + return _reminderCycle; | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + public void setReminderCycle(ReminderCycle reminderCycle) { | ||
| 57 | + _reminderCycle = reminderCycle; | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + public Date getCycleDate() { | ||
| 61 | + return _cycleDate; | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + public void setCycleDate(Date cycleDate) { | ||
| 65 | + _cycleDate = cycleDate; | ||
| 66 | + } | ||
| 67 | +} |