Commit 464663848aaa68ff46f2141f92a73294c432e48e
Merge branch 'development' of https://git.ziemers.de/edu/BeuthBot into development
Showing
28 changed files
with
839 additions
and
19 deletions
docker/rasa_nlu/volumes/data/api/intents/showFood.json
| @@ -10,6 +10,7 @@ | @@ -10,6 +10,7 @@ | ||
| 10 | "parameters": [ | 10 | "parameters": [ |
| 11 | { | 11 | { |
| 12 | "id": "7b5df330-e1fc-4bb4-86de-5a51be29c836", | 12 | "id": "7b5df330-e1fc-4bb4-86de-5a51be29c836", |
| 13 | + "required": false, | ||
| 13 | "dataType": "@date", | 14 | "dataType": "@date", |
| 14 | "name": "date", | 15 | "name": "date", |
| 15 | "value": "$date", | 16 | "value": "$date", |
| @@ -17,6 +18,7 @@ | @@ -17,6 +18,7 @@ | ||
| 17 | }, | 18 | }, |
| 18 | { | 19 | { |
| 19 | "id": "f3da5ec9-d3e8-4263-9bc3-7d600784bd0d", | 20 | "id": "f3da5ec9-d3e8-4263-9bc3-7d600784bd0d", |
| 21 | + "required": false, | ||
| 20 | "dataType": "@dishtype", | 22 | "dataType": "@dishtype", |
| 21 | "name": "dishtype", | 23 | "name": "dishtype", |
| 22 | "value": "$dishtype", | 24 | "value": "$dishtype", |
| @@ -24,6 +26,7 @@ | @@ -24,6 +26,7 @@ | ||
| 24 | }, | 26 | }, |
| 25 | { | 27 | { |
| 26 | "id": "499e1a33-d7ef-4446-ae7d-30ab94c9e3a5", | 28 | "id": "499e1a33-d7ef-4446-ae7d-30ab94c9e3a5", |
| 29 | + "required": false, | ||
| 27 | "dataType": "@healthy", | 30 | "dataType": "@healthy", |
| 28 | "name": "healthy", | 31 | "name": "healthy", |
| 29 | "value": "$healthy", | 32 | "value": "$healthy", |
| @@ -31,6 +34,7 @@ | @@ -31,6 +34,7 @@ | ||
| 31 | }, | 34 | }, |
| 32 | { | 35 | { |
| 33 | "id": "f53af932-a4f2-4fe5-be2d-eb96a30e9400", | 36 | "id": "f53af932-a4f2-4fe5-be2d-eb96a30e9400", |
| 37 | + "required": false, | ||
| 34 | "dataType": "@ingredients", | 38 | "dataType": "@ingredients", |
| 35 | "name": "ingredients", | 39 | "name": "ingredients", |
| 36 | "value": "$ingredients", | 40 | "value": "$ingredients", |
| @@ -38,6 +42,7 @@ | @@ -38,6 +42,7 @@ | ||
| 38 | }, | 42 | }, |
| 39 | { | 43 | { |
| 40 | "id": "b8c8ab1d-4190-4200-9540-2893a084a1fd", | 44 | "id": "b8c8ab1d-4190-4200-9540-2893a084a1fd", |
| 45 | + "required": false, | ||
| 41 | "dataType": "@price", | 46 | "dataType": "@price", |
| 42 | "name": "price", | 47 | "name": "price", |
| 43 | "value": "$price", | 48 | "value": "$price", |
| @@ -45,6 +50,7 @@ | @@ -45,6 +50,7 @@ | ||
| 45 | }, | 50 | }, |
| 46 | { | 51 | { |
| 47 | "id": "92607e59-96c8-4c61-8dc0-670c7b8c2b43", | 52 | "id": "92607e59-96c8-4c61-8dc0-670c7b8c2b43", |
| 53 | + "required": false, | ||
| 48 | "dataType": "@dishcategory", | 54 | "dataType": "@dishcategory", |
| 49 | "name": "dishcategory", | 55 | "name": "dishcategory", |
| 50 | "value": "$dishcategory", | 56 | "value": "$dishcategory", |
docker/wildfly/volumes/conf/beuthbot.properties
| @@ -18,7 +18,7 @@ API_AI_TOKEN = XXXXX | @@ -18,7 +18,7 @@ API_AI_TOKEN = XXXXX | ||
| 18 | TELEGRAM_WEBHOOK_URL = /telegram/getUpdates | 18 | TELEGRAM_WEBHOOK_URL = /telegram/getUpdates |
| 19 | 19 | ||
| 20 | # Your Bot Token e.g.: 000000000:AAAAa0aAA_aaA-Aaaa0A0Aa_a0aa0A0AAAA | 20 | # Your Bot Token e.g.: 000000000:AAAAa0aAA_aaA-Aaaa0A0Aa_a0aa0A0AAAA |
| 21 | -TELEGRAM_BOT_TOKEN = 452768505:AAHNXEYi9nSHcmVc4b3799I00uTZmK53wl4\ | 21 | +TELEGRAM_BOT_TOKEN = 451726698:AAH2qwZaWOgn1IU1CjJU-HjHDMODG6DEkN0 |
| 22 | 22 | ||
| 23 | 23 | ||
| 24 | 24 |
docu/BeuthBot.postman_collection.json
0 → 100644
| 1 | +{ | ||
| 2 | + "info": { | ||
| 3 | + "name": "BeuthBot", | ||
| 4 | + "_postman_id": "fd29548f-6b95-81d0-cae3-1233324d3846", | ||
| 5 | + "description": "", | ||
| 6 | + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" | ||
| 7 | + }, | ||
| 8 | + "item": [ | ||
| 9 | + { | ||
| 10 | + "name": "Facebook", | ||
| 11 | + "description": "", | ||
| 12 | + "item": [ | ||
| 13 | + { | ||
| 14 | + "name": "FB setWebhook", | ||
| 15 | + "request": { | ||
| 16 | + "method": "GET", | ||
| 17 | + "header": [], | ||
| 18 | + "body": {}, | ||
| 19 | + "url": { | ||
| 20 | + "raw": "localhost:8080/facebook/setWebhook", | ||
| 21 | + "host": [ | ||
| 22 | + "localhost" | ||
| 23 | + ], | ||
| 24 | + "port": "8080", | ||
| 25 | + "path": [ | ||
| 26 | + "facebook", | ||
| 27 | + "setWebhook" | ||
| 28 | + ] | ||
| 29 | + }, | ||
| 30 | + "description": "" | ||
| 31 | + }, | ||
| 32 | + "response": [] | ||
| 33 | + }, | ||
| 34 | + { | ||
| 35 | + "name": "FB getUpdates", | ||
| 36 | + "request": { | ||
| 37 | + "method": "POST", | ||
| 38 | + "header": [ | ||
| 39 | + { | ||
| 40 | + "key": "Content-Type", | ||
| 41 | + "value": "application/json" | ||
| 42 | + } | ||
| 43 | + ], | ||
| 44 | + "body": { | ||
| 45 | + "mode": "raw", | ||
| 46 | + "raw": "{\"object\":\"page\",\"entry\":[{\"id\":\"163783704220143\",\"time\":1513427045712,\"messaging\":[{\"sender\":{\"id\":\"1385529261556255\"},\"recipient\":{\"id\":\"163783704220143\"},\"timestamp\":1513427044846,\"message\":{\"mid\":\"mid.$cAADOButO2l5mkI1R7lgX0gFO8FR5\",\"seq\":4370,\"text\":\"Hallo\"}}]}]}" | ||
| 47 | + }, | ||
| 48 | + "url": { | ||
| 49 | + "raw": "localhost:8080/facebook/getUpdates", | ||
| 50 | + "host": [ | ||
| 51 | + "localhost" | ||
| 52 | + ], | ||
| 53 | + "port": "8080", | ||
| 54 | + "path": [ | ||
| 55 | + "facebook", | ||
| 56 | + "getUpdates" | ||
| 57 | + ] | ||
| 58 | + }, | ||
| 59 | + "description": "" | ||
| 60 | + }, | ||
| 61 | + "response": [] | ||
| 62 | + } | ||
| 63 | + ] | ||
| 64 | + }, | ||
| 65 | + { | ||
| 66 | + "name": "Rasa", | ||
| 67 | + "description": "", | ||
| 68 | + "item": [ | ||
| 69 | + { | ||
| 70 | + "name": "Rasa parse", | ||
| 71 | + "request": { | ||
| 72 | + "method": "GET", | ||
| 73 | + "header": [], | ||
| 74 | + "body": {}, | ||
| 75 | + "url": { | ||
| 76 | + "raw": "localhost:5000/parse?q=Gerichte", | ||
| 77 | + "host": [ | ||
| 78 | + "localhost" | ||
| 79 | + ], | ||
| 80 | + "port": "5000", | ||
| 81 | + "path": [ | ||
| 82 | + "parse" | ||
| 83 | + ], | ||
| 84 | + "query": [ | ||
| 85 | + { | ||
| 86 | + "key": "q", | ||
| 87 | + "value": "Gerichte", | ||
| 88 | + "equals": true | ||
| 89 | + } | ||
| 90 | + ] | ||
| 91 | + }, | ||
| 92 | + "description": "" | ||
| 93 | + }, | ||
| 94 | + "response": [] | ||
| 95 | + } | ||
| 96 | + ] | ||
| 97 | + }, | ||
| 98 | + { | ||
| 99 | + "name": "Telegram", | ||
| 100 | + "description": "", | ||
| 101 | + "item": [ | ||
| 102 | + { | ||
| 103 | + "name": "Telegram setWebhook", | ||
| 104 | + "request": { | ||
| 105 | + "method": "GET", | ||
| 106 | + "header": [], | ||
| 107 | + "body": {}, | ||
| 108 | + "url": { | ||
| 109 | + "raw": "" | ||
| 110 | + }, | ||
| 111 | + "description": "" | ||
| 112 | + }, | ||
| 113 | + "response": [] | ||
| 114 | + }, | ||
| 115 | + { | ||
| 116 | + "name": "Telegram setWebhook", | ||
| 117 | + "request": { | ||
| 118 | + "method": "POST", | ||
| 119 | + "header": [], | ||
| 120 | + "body": {}, | ||
| 121 | + "url": { | ||
| 122 | + "raw": "localhost:8080/telegram/setWebhook", | ||
| 123 | + "host": [ | ||
| 124 | + "localhost" | ||
| 125 | + ], | ||
| 126 | + "port": "8080", | ||
| 127 | + "path": [ | ||
| 128 | + "telegram", | ||
| 129 | + "setWebhook" | ||
| 130 | + ] | ||
| 131 | + }, | ||
| 132 | + "description": "" | ||
| 133 | + }, | ||
| 134 | + "response": [] | ||
| 135 | + } | ||
| 136 | + ] | ||
| 137 | + }, | ||
| 138 | + { | ||
| 139 | + "name": "Wildfly Home", | ||
| 140 | + "request": { | ||
| 141 | + "method": "GET", | ||
| 142 | + "header": [], | ||
| 143 | + "body": {}, | ||
| 144 | + "url": { | ||
| 145 | + "raw": "localhost/8080", | ||
| 146 | + "host": [ | ||
| 147 | + "localhost" | ||
| 148 | + ], | ||
| 149 | + "path": [ | ||
| 150 | + "8080" | ||
| 151 | + ] | ||
| 152 | + }, | ||
| 153 | + "description": "" | ||
| 154 | + }, | ||
| 155 | + "response": [] | ||
| 156 | + } | ||
| 157 | + ] | ||
| 158 | +} | ||
| 0 | \ No newline at end of file | 159 | \ No newline at end of file |
services/Common/src/main/java/de/bht/beuthbot/daos/LogMessageDAO.java
0 → 100644
| 1 | +package de.bht.beuthbot.daos; | ||
| 2 | + | ||
| 3 | +import de.bht.beuthbot.model.entities.LogMessage; | ||
| 4 | + | ||
| 5 | +import javax.ejb.Remote; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * Created by Stephan Hausdörfer on 19.01.2018. | ||
| 9 | + */ | ||
| 10 | +@Remote | ||
| 11 | +public interface LogMessageDAO extends GenericDAO<LogMessage, Long> { | ||
| 12 | + | ||
| 13 | + LogMessage createMessage(); | ||
| 14 | +} |
services/Common/src/main/java/de/bht/beuthbot/daos/LogMessageDAOImpl.java
0 → 100644
| 1 | +package de.bht.beuthbot.daos; | ||
| 2 | + | ||
| 3 | +import de.bht.beuthbot.model.entities.LogMessage; | ||
| 4 | +import de.bht.beuthbot.model.entities.LogMessageImpl; | ||
| 5 | + | ||
| 6 | +import javax.ejb.Stateless; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | + * Created by Stephan Hausdörfer on 19.01.2018. | ||
| 10 | + */ | ||
| 11 | +@Stateless | ||
| 12 | +public class LogMessageDAOImpl extends GenericHibernateDAO<LogMessage, LogMessageImpl, Long> implements LogMessageDAO { | ||
| 13 | + | ||
| 14 | + @Override | ||
| 15 | + public LogMessage createMessage() { | ||
| 16 | + return new LogMessageImpl(); | ||
| 17 | + } | ||
| 18 | +} | ||
| 0 | \ No newline at end of file | 19 | \ No newline at end of file |
services/Common/src/main/java/de/bht/beuthbot/daos/ReminderDAO.java
0 → 100644
| 1 | +package de.bht.beuthbot.daos; | ||
| 2 | + | ||
| 3 | +import de.bht.beuthbot.model.entities.Reminder; | ||
| 4 | + | ||
| 5 | +import javax.ejb.Remote; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * Created by Stephan Hausdörfer on 16.01.2018. | ||
| 9 | + */ | ||
| 10 | +@Remote | ||
| 11 | +public interface ReminderDAO extends GenericDAO<Reminder, Long> { | ||
| 12 | + | ||
| 13 | + Reminder createReminder(); | ||
| 14 | +} |
services/Common/src/main/java/de/bht/beuthbot/daos/ReminderDAOImpl.java
0 → 100644
| 1 | +package de.bht.beuthbot.daos; | ||
| 2 | + | ||
| 3 | +import de.bht.beuthbot.model.entities.Reminder; | ||
| 4 | +import de.bht.beuthbot.model.entities.ReminderImpl; | ||
| 5 | + | ||
| 6 | +import javax.ejb.Stateless; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | + * Created by Stephan Hausdörfer on 16.01.2018. | ||
| 10 | + */ | ||
| 11 | +@Stateless | ||
| 12 | +public class ReminderDAOImpl extends GenericHibernateDAO<Reminder, ReminderImpl, Long> implements ReminderDAO { | ||
| 13 | + | ||
| 14 | + @Override | ||
| 15 | + public Reminder createReminder() { | ||
| 16 | + return new ReminderImpl(); | ||
| 17 | + } | ||
| 18 | +} |
services/Common/src/main/java/de/bht/beuthbot/model/EntityName.java
| @@ -5,7 +5,7 @@ package de.bht.beuthbot.model; | @@ -5,7 +5,7 @@ package de.bht.beuthbot.model; | ||
| 5 | */ | 5 | */ |
| 6 | public enum EntityName { | 6 | public enum EntityName { |
| 7 | 7 | ||
| 8 | - DATE("date"), DISH_TYPE("dishtype"), HEALTHY("healthy"), INGREDIENTS("ingredients"), DISH_CATEGORY("dishcategory"), | 8 | + DATE("date"), TIME("time"), DISH_TYPE("dishtype"), HEALTHY("healthy"), INGREDIENTS("ingredients"), DISH_CATEGORY("dishcategory"), |
| 9 | DISH_NAME("dishname"), REMINDER_CYCLE("reminderCycle"); | 9 | DISH_NAME("dishname"), REMINDER_CYCLE("reminderCycle"); |
| 10 | 10 | ||
| 11 | private String text; | 11 | private String text; |
services/Common/src/main/java/de/bht/beuthbot/model/entities/AppUserImpl.java
| @@ -13,7 +13,7 @@ import javax.persistence.Table; | @@ -13,7 +13,7 @@ import javax.persistence.Table; | ||
| 13 | * Postgres does not support creating a table named "user". | 13 | * Postgres does not support creating a table named "user". |
| 14 | */ | 14 | */ |
| 15 | @Entity | 15 | @Entity |
| 16 | -@Table | 16 | +@Table(name = "app_user") |
| 17 | public class AppUserImpl extends EntityBaseImpl implements AppUser { | 17 | public class AppUserImpl extends EntityBaseImpl implements AppUser { |
| 18 | 18 | ||
| 19 | private String facebookUserId; | 19 | private String facebookUserId; |
services/Common/src/main/java/de/bht/beuthbot/model/entities/EntityBaseImpl.java
services/Common/src/main/java/de/bht/beuthbot/model/entities/GenericEntity.java
| @@ -14,7 +14,7 @@ import java.util.stream.Collectors; | @@ -14,7 +14,7 @@ import java.util.stream.Collectors; | ||
| 14 | * Follows the Entity-Attribute-Value model of database design. | 14 | * Follows the Entity-Attribute-Value model of database design. |
| 15 | */ | 15 | */ |
| 16 | @Entity | 16 | @Entity |
| 17 | -@Table | 17 | +@Table(name = "generic_entity") |
| 18 | public class GenericEntity extends EntityBaseImpl { | 18 | public class GenericEntity extends EntityBaseImpl { |
| 19 | 19 | ||
| 20 | /** | 20 | /** |
services/Common/src/main/java/de/bht/beuthbot/model/entities/GenericEntityAttribute.java
| @@ -14,7 +14,7 @@ import java.util.stream.Collectors; | @@ -14,7 +14,7 @@ import java.util.stream.Collectors; | ||
| 14 | * Holds a collection of generic values. | 14 | * Holds a collection of generic values. |
| 15 | */ | 15 | */ |
| 16 | @Entity | 16 | @Entity |
| 17 | -@Table | 17 | +@Table(name = "generic_entity_attribute") |
| 18 | public class GenericEntityAttribute extends EntityBaseImpl { | 18 | public class GenericEntityAttribute extends EntityBaseImpl { |
| 19 | 19 | ||
| 20 | private String name; | 20 | private String name; |
services/Common/src/main/java/de/bht/beuthbot/model/entities/GenericEntityAttributeValue.java
| @@ -11,7 +11,7 @@ import javax.persistence.Table; | @@ -11,7 +11,7 @@ import javax.persistence.Table; | ||
| 11 | * Supports complex nested types using a reference to a generic sub entity. | 11 | * Supports complex nested types using a reference to a generic sub entity. |
| 12 | */ | 12 | */ |
| 13 | @Entity | 13 | @Entity |
| 14 | -@Table | 14 | +@Table(name = "generic_entity_attribute_value") |
| 15 | public class GenericEntityAttributeValue extends EntityBaseImpl { | 15 | public class GenericEntityAttributeValue extends EntityBaseImpl { |
| 16 | 16 | ||
| 17 | private Boolean valueAsBool; | 17 | private Boolean valueAsBool; |
services/Common/src/main/java/de/bht/beuthbot/model/entities/LogMessage.java
0 → 100644
| 1 | +package de.bht.beuthbot.model.entities; | ||
| 2 | + | ||
| 3 | +/** | ||
| 4 | + * Created by Stephan Hausdörfer on 19.01.2018. | ||
| 5 | + */ | ||
| 6 | +public interface LogMessage extends EntityBase { | ||
| 7 | + | ||
| 8 | + long getUserId(); | ||
| 9 | + | ||
| 10 | + void setUserId(long userId); | ||
| 11 | + | ||
| 12 | + String getMessage(); | ||
| 13 | + | ||
| 14 | + void setMessage(String message); | ||
| 15 | +} |
services/Common/src/main/java/de/bht/beuthbot/model/entities/LogMessageImpl.java
0 → 100644
| 1 | +package de.bht.beuthbot.model.entities; | ||
| 2 | + | ||
| 3 | +import javax.persistence.Entity; | ||
| 4 | +import javax.persistence.Table; | ||
| 5 | + | ||
| 6 | +/** | ||
| 7 | + * Created by Stephan Hausdörfer on 19.01.2018. | ||
| 8 | + */ | ||
| 9 | +@Entity | ||
| 10 | +@Table(name = "log_message") | ||
| 11 | +public class LogMessageImpl extends EntityBaseImpl implements LogMessage { | ||
| 12 | + | ||
| 13 | + private long userId; | ||
| 14 | + | ||
| 15 | + private String message; | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + @Override | ||
| 19 | + public long getUserId() { | ||
| 20 | + return userId; | ||
| 21 | + } | ||
| 22 | + | ||
| 23 | + @Override | ||
| 24 | + public void setUserId(long userId) { | ||
| 25 | + this.userId = userId; | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + @Override | ||
| 29 | + public String getMessage() { | ||
| 30 | + return message; | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + @Override | ||
| 34 | + public void setMessage(String message) { | ||
| 35 | + this.message = message; | ||
| 36 | + } | ||
| 37 | +} |
services/Common/src/main/java/de/bht/beuthbot/model/entities/Reminder.java
0 → 100644
| 1 | +package de.bht.beuthbot.model.entities; | ||
| 2 | + | ||
| 3 | +import de.bht.beuthbot.model.Messenger; | ||
| 4 | +import de.bht.beuthbot.model.enumeration.ReminderCycle; | ||
| 5 | + | ||
| 6 | +import java.time.LocalDate; | ||
| 7 | +import java.util.Map; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * Created by Stephan Hausdörfer on 16.01.2018. | ||
| 11 | + */ | ||
| 12 | +public interface Reminder extends EntityBase { | ||
| 13 | + | ||
| 14 | + long getUserId(); | ||
| 15 | + | ||
| 16 | + void setUserId(long userId); | ||
| 17 | + | ||
| 18 | + ReminderCycle getReminderCycle(); | ||
| 19 | + | ||
| 20 | + void setReminderCycle(ReminderCycle reminderCycle); | ||
| 21 | + | ||
| 22 | + LocalDate getCycleTime(); | ||
| 23 | + | ||
| 24 | + void setCycleTime(LocalDate cycleTime); | ||
| 25 | + | ||
| 26 | + Messenger getMessenger(); | ||
| 27 | + | ||
| 28 | + void setMessenger(Messenger messenger); | ||
| 29 | + | ||
| 30 | + String getIntent(); | ||
| 31 | + | ||
| 32 | + void setIntent(String intent); | ||
| 33 | + | ||
| 34 | + Map<String, String> getEntities(); | ||
| 35 | + | ||
| 36 | + void setEntities(Map<String, String> entities); | ||
| 37 | +} |
services/Common/src/main/java/de/bht/beuthbot/model/entities/ReminderImpl.java
0 → 100644
| 1 | +package de.bht.beuthbot.model.entities; | ||
| 2 | + | ||
| 3 | +import de.bht.beuthbot.model.Messenger; | ||
| 4 | +import de.bht.beuthbot.model.enumeration.ReminderCycle; | ||
| 5 | + | ||
| 6 | +import javax.persistence.CollectionTable; | ||
| 7 | +import javax.persistence.ElementCollection; | ||
| 8 | +import javax.persistence.Entity; | ||
| 9 | +import javax.persistence.Table; | ||
| 10 | +import java.time.LocalDate; | ||
| 11 | +import java.util.Map; | ||
| 12 | + | ||
| 13 | +/** | ||
| 14 | + * Created by Stephan Hausdörfer on 16.01.2018. | ||
| 15 | + */ | ||
| 16 | +@Entity | ||
| 17 | +@Table(name = "reminder") | ||
| 18 | +public class ReminderImpl extends EntityBaseImpl implements Reminder { | ||
| 19 | + | ||
| 20 | + private long userId; | ||
| 21 | + | ||
| 22 | + private ReminderCycle reminderCycle; | ||
| 23 | + | ||
| 24 | + private LocalDate cycleTime; | ||
| 25 | + | ||
| 26 | + private Messenger messenger; | ||
| 27 | + | ||
| 28 | + private String intent; | ||
| 29 | + | ||
| 30 | + @ElementCollection | ||
| 31 | + @CollectionTable(name = "reminder_entities") | ||
| 32 | + private Map<String, String> entities; | ||
| 33 | + | ||
| 34 | + @Override | ||
| 35 | + public long getUserId() { | ||
| 36 | + return userId; | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + @Override | ||
| 40 | + public void setUserId(long userId) { | ||
| 41 | + this.userId = userId; | ||
| 42 | + } | ||
| 43 | + | ||
| 44 | + @Override | ||
| 45 | + public ReminderCycle getReminderCycle() { | ||
| 46 | + return reminderCycle; | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + @Override | ||
| 50 | + public void setReminderCycle(ReminderCycle reminderCycle) { | ||
| 51 | + this.reminderCycle = reminderCycle; | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + @Override | ||
| 55 | + public LocalDate getCycleTime() { | ||
| 56 | + return cycleTime; | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + @Override | ||
| 60 | + public void setCycleTime(LocalDate cycleTime) { | ||
| 61 | + this.cycleTime = cycleTime; | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + @Override | ||
| 65 | + public Messenger getMessenger() { | ||
| 66 | + return messenger; | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | + @Override | ||
| 70 | + public void setMessenger(Messenger messenger) { | ||
| 71 | + this.messenger = messenger; | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + @Override | ||
| 75 | + public String getIntent() { | ||
| 76 | + return intent; | ||
| 77 | + } | ||
| 78 | + | ||
| 79 | + @Override | ||
| 80 | + public void setIntent(String intent) { | ||
| 81 | + this.intent = intent; | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + @Override | ||
| 85 | + public Map<String, String> getEntities() { | ||
| 86 | + return entities; | ||
| 87 | + } | ||
| 88 | + | ||
| 89 | + @Override | ||
| 90 | + public void setEntities(Map<String, String> entities) { | ||
| 91 | + this.entities = entities; | ||
| 92 | + } | ||
| 93 | +} |
services/Common/src/main/java/de/bht/beuthbot/model/enumeration/ReminderCycle.java
0 → 100644
services/Common/src/main/java/de/bht/beuthbot/utils/DateStringExtractor.java
0 → 100644
| 1 | +package de.bht.beuthbot.utils; | ||
| 2 | + | ||
| 3 | +import javax.ejb.Local; | ||
| 4 | +import java.time.DayOfWeek; | ||
| 5 | +import java.time.LocalDate; | ||
| 6 | +import java.time.format.TextStyle; | ||
| 7 | +import java.util.Locale; | ||
| 8 | + | ||
| 9 | +public class DateStringExtractor { | ||
| 10 | + public static LocalDate getLocalDateFromString(String dateString) { | ||
| 11 | + LocalDate retrievedDate = LocalDate.now(); //initialize as current date | ||
| 12 | + DayOfWeek today = retrievedDate.getDayOfWeek(); | ||
| 13 | + | ||
| 14 | + if(dateString.equals("TODAY")) { | ||
| 15 | + return retrievedDate; | ||
| 16 | + } else if(dateString.equals("TOMORROW")) { | ||
| 17 | + retrievedDate = retrievedDate.plusDays(1); | ||
| 18 | + } else if(dateString.equals("DAYAFTERTOMORROW")) { | ||
| 19 | + retrievedDate = retrievedDate.plusDays(2); | ||
| 20 | + } else if(dateString.equals("MONDAY") || dateString.equals("TUESDAY") || dateString.equals("WEDNESDAY") || dateString.equals("THURSDAY") || dateString.equals("FRIDAY") || dateString.equals("SATURDAY") || dateString.equals("SUNDAY")) { | ||
| 21 | + DayOfWeek dayFromString = DayOfWeek.valueOf(dateString); | ||
| 22 | + long distanceBetweenDates = dayFromString.getValue() - today.getValue(); | ||
| 23 | + //if the distance between given days is equal to or smaller than 0 we can infer that the user is referring to the upcoming week | ||
| 24 | + if(distanceBetweenDates <= 0) { | ||
| 25 | + distanceBetweenDates += 7; | ||
| 26 | + } | ||
| 27 | + retrievedDate = retrievedDate.plusDays(distanceBetweenDates); | ||
| 28 | + | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + return retrievedDate; | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + //This function takes a LocalDate and returns its Weekday Name in form of a string | ||
| 35 | + public static String getWeekDayFromLocalDate(LocalDate date, boolean pretty, Locale locale) { | ||
| 36 | + String weekDay = date.getDayOfWeek().getDisplayName(TextStyle.FULL, locale); | ||
| 37 | + if(pretty) { //if pretty is set to true, we will return pretty names like "Today" and "Tomorrow" | ||
| 38 | + if(LocalDate.now().getDayOfWeek().getValue() == date.getDayOfWeek().getValue()) { //TODAY | ||
| 39 | + if(locale == Locale.GERMAN) { | ||
| 40 | + weekDay = "heute"; | ||
| 41 | + } else { | ||
| 42 | + weekDay = "today"; | ||
| 43 | + } | ||
| 44 | + } else if(LocalDate.now().plusDays(1).getDayOfWeek().getValue() == date.getDayOfWeek().getValue()) { //TOMORROW | ||
| 45 | + if(locale == Locale.GERMAN) { | ||
| 46 | + weekDay = "morgen"; | ||
| 47 | + } else { | ||
| 48 | + weekDay = "tomorrow"; | ||
| 49 | + } | ||
| 50 | + } | ||
| 51 | + } | ||
| 52 | + return weekDay; | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + public static String getGermanWeekDayFromLocalDate(LocalDate date, boolean pretty) { | ||
| 56 | + return getWeekDayFromLocalDate(date, pretty, Locale.GERMAN); | ||
| 57 | + } | ||
| 58 | +} |
services/MainBot/src/main/java/de/bht/beuthbot/canteen/model/CanteenData.java
| 1 | package de.bht.beuthbot.canteen.model; | 1 | package de.bht.beuthbot.canteen.model; |
| 2 | 2 | ||
| 3 | +import de.bht.beuthbot.utils.DateStringExtractor; | ||
| 3 | import org.slf4j.Logger; | 4 | import org.slf4j.Logger; |
| 4 | import org.slf4j.LoggerFactory; | 5 | import org.slf4j.LoggerFactory; |
| 5 | 6 | ||
| @@ -84,8 +85,10 @@ public class CanteenData { | @@ -84,8 +85,10 @@ public class CanteenData { | ||
| 84 | public final List<Dish> getDishesFiltered(final String pDate, final String pHealthy, final String pDishType, | 85 | public final List<Dish> getDishesFiltered(final String pDate, final String pHealthy, final String pDishType, |
| 85 | final String pMarkings, final String pDishCategory) { | 86 | final String pMarkings, final String pDishCategory) { |
| 86 | 87 | ||
| 87 | - final LocalDate date = ("tomorrow".equals(pDate) ? LocalDate.now().plusDays(1) : LocalDate.now()); | ||
| 88 | - | 88 | + logger.debug("pDate: " + pDate); |
| 89 | + //final LocalDate date = ("tomorrow".equals(pDate) ? LocalDate.now().plusDays(1) : LocalDate.now()); | ||
| 90 | + final LocalDate date = DateStringExtractor.getLocalDateFromString(pDate); | ||
| 91 | + logger.debug("resulting local date: " + date); | ||
| 89 | final TrafficLight trafficLight = (pHealthy != null && !"".equals(pHealthy) ? TrafficLight.getTrafficLight(pHealthy): null); | 92 | final TrafficLight trafficLight = (pHealthy != null && !"".equals(pHealthy) ? TrafficLight.getTrafficLight(pHealthy): null); |
| 90 | 93 | ||
| 91 | final DishType dishType = (pDishType != null && !"".equals(pDishType) ? DishType.getDishTypeByName(pDishType) : null); | 94 | final DishType dishType = (pDishType != null && !"".equals(pDishType) ? DishType.getDishTypeByName(pDishType) : null); |
services/MainBot/src/main/java/de/bht/beuthbot/drools/DroolsService.java
| 1 | package de.bht.beuthbot.drools; | 1 | package de.bht.beuthbot.drools; |
| 2 | 2 | ||
| 3 | - | ||
| 4 | - | ||
| 5 | - | ||
| 6 | import com.google.gson.Gson; | 3 | import com.google.gson.Gson; |
| 7 | 4 | ||
| 8 | - | ||
| 9 | import de.bht.beuthbot.attachments.AttachmentStore; | 5 | import de.bht.beuthbot.attachments.AttachmentStore; |
| 10 | import de.bht.beuthbot.canteen.Parser; | 6 | import de.bht.beuthbot.canteen.Parser; |
| 11 | import de.bht.beuthbot.canteen.model.CanteenData; | 7 | import de.bht.beuthbot.canteen.model.CanteenData; |
| 12 | import de.bht.beuthbot.conf.Application; | 8 | import de.bht.beuthbot.conf.Application; |
| 13 | import de.bht.beuthbot.daos.AppUserDAO; | 9 | import de.bht.beuthbot.daos.AppUserDAO; |
| 10 | +import de.bht.beuthbot.daos.LogMessageDAO; | ||
| 14 | import de.bht.beuthbot.drools.model.DroolsMessage; | 11 | import de.bht.beuthbot.drools.model.DroolsMessage; |
| 15 | import de.bht.beuthbot.jms.ProcessQueue; | 12 | import de.bht.beuthbot.jms.ProcessQueue; |
| 16 | import de.bht.beuthbot.jms.ProcessQueueMessageProtocol; | 13 | import de.bht.beuthbot.jms.ProcessQueueMessageProtocol; |
| @@ -18,6 +15,8 @@ import de.bht.beuthbot.jms.Target; | @@ -18,6 +15,8 @@ import de.bht.beuthbot.jms.Target; | ||
| 18 | import de.bht.beuthbot.jms.TaskMessage; | 15 | import de.bht.beuthbot.jms.TaskMessage; |
| 19 | import de.bht.beuthbot.model.Messenger; | 16 | import de.bht.beuthbot.model.Messenger; |
| 20 | import de.bht.beuthbot.model.entities.AppUser; | 17 | import de.bht.beuthbot.model.entities.AppUser; |
| 18 | + | ||
| 19 | +import de.bht.beuthbot.model.entities.LogMessage; | ||
| 21 | import org.kie.api.KieServices; | 20 | import org.kie.api.KieServices; |
| 22 | import org.kie.api.runtime.KieContainer; | 21 | import org.kie.api.runtime.KieContainer; |
| 23 | import org.kie.api.runtime.KieSession; | 22 | import org.kie.api.runtime.KieSession; |
| @@ -73,6 +72,9 @@ public class DroolsService implements MessageListener { | @@ -73,6 +72,9 @@ public class DroolsService implements MessageListener { | ||
| 73 | @Resource(lookup = "java:global/global/AppUserDAOImpl") | 72 | @Resource(lookup = "java:global/global/AppUserDAOImpl") |
| 74 | private AppUserDAO userDAO; | 73 | private AppUserDAO userDAO; |
| 75 | 74 | ||
| 75 | + @Resource(lookup = "java:global/global/LogMessageDAOImpl") | ||
| 76 | + private LogMessageDAO logMessageDAO; | ||
| 77 | + | ||
| 76 | @Inject | 78 | @Inject |
| 77 | private Parser parser; | 79 | private Parser parser; |
| 78 | 80 | ||
| @@ -143,7 +145,10 @@ public class DroolsService implements MessageListener { | @@ -143,7 +145,10 @@ public class DroolsService implements MessageListener { | ||
| 143 | } | 145 | } |
| 144 | AppUser finishedUser = userDAO.saveOrUpdate(tempUser); | 146 | AppUser finishedUser = userDAO.saveOrUpdate(tempUser); |
| 145 | 147 | ||
| 146 | - | 148 | + LogMessage logMessage = logMessageDAO.createMessage(); |
| 149 | + logMessage.setUserId(finishedUser.getId()); | ||
| 150 | + logMessage.setMessage(botMessage.getText()); | ||
| 151 | + logMessageDAO.saveOrUpdate(logMessage); | ||
| 147 | 152 | ||
| 148 | ksession.setGlobal("canteenData", canteenData); | 153 | ksession.setGlobal("canteenData", canteenData); |
| 149 | ksession.setGlobal("user", finishedUser); | 154 | ksession.setGlobal("user", finishedUser); |
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.daos.AppUserDAO; | ||
| 5 | +import de.bht.beuthbot.daos.ReminderDAO; | ||
| 6 | +import de.bht.beuthbot.jms.Target; | ||
| 7 | +import de.bht.beuthbot.model.EntityName; | ||
| 8 | +import de.bht.beuthbot.model.Intent; | ||
| 9 | +import de.bht.beuthbot.model.Messenger; | ||
| 10 | +import de.bht.beuthbot.model.entities.AppUser; | ||
| 11 | +import de.bht.beuthbot.model.entities.Reminder; | ||
| 12 | +import de.bht.beuthbot.model.enumeration.ReminderCycle; | ||
| 13 | +import de.bht.beuthbot.utils.DateStringExtractor; | ||
| 14 | + | ||
| 15 | +import org.slf4j.Logger; | ||
| 16 | +import org.slf4j.LoggerFactory; | ||
| 17 | + | ||
| 18 | +import de.bht.beuthbot.conf.Application; | ||
| 19 | +import de.bht.beuthbot.jms.ProcessQueue; | ||
| 20 | +import de.bht.beuthbot.jms.TaskMessage; | ||
| 21 | + | ||
| 22 | +import java.text.SimpleDateFormat; | ||
| 23 | +import java.time.LocalDate; | ||
| 24 | +import java.util.*; | ||
| 25 | +import javax.annotation.PostConstruct; | ||
| 26 | +import javax.annotation.Resource; | ||
| 27 | +import javax.ejb.*; | ||
| 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 | + /** Injected AppUserDAO */ | ||
| 52 | + @Resource(lookup = "java:global/global/AppUserDAOImpl") | ||
| 53 | + private AppUserDAO userDAO; | ||
| 54 | + | ||
| 55 | + /** Injected ReminderDAO */ | ||
| 56 | + @Resource(lookup = "java:global/global/ReminderDAOImpl") | ||
| 57 | + private ReminderDAO reminderDAO; | ||
| 58 | + | ||
| 59 | + boolean isActive = true; | ||
| 60 | + | ||
| 61 | + public SchedulerBean() { | ||
| 62 | + | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + //CONSTRUCTOR | ||
| 66 | + @PostConstruct | ||
| 67 | + public void init(){ | ||
| 68 | + logger.debug("SchedulerBean initiated!"); | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + @Schedule(hour="*", minute="*") | ||
| 72 | + public void fetchReminders() { | ||
| 73 | + logger.debug("SchedulerBean fired!"); | ||
| 74 | + | ||
| 75 | + if (!isActive) return; | ||
| 76 | + | ||
| 77 | + SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy KK:mm"); | ||
| 78 | + String dateNow = formatter.format(new Date()); | ||
| 79 | + | ||
| 80 | + List<Reminder> reminders = reminderDAO.findAll(); | ||
| 81 | + | ||
| 82 | + for (Reminder reminder : reminders) { | ||
| 83 | + //Check if date time now equals reminder date time | ||
| 84 | + if(dateNow.equals(formatter.format(reminder.getCycleTime()))) { | ||
| 85 | + Long messageID = 1L; | ||
| 86 | + AppUser user = userDAO.findById(reminder.getUserId()); | ||
| 87 | + Long messengerId = Long.valueOf(user.getFacebookUserId() == null ? user.getTelegramUserId() : user.getFacebookUserId()); | ||
| 88 | + Messenger messenger = reminder.getMessenger(); | ||
| 89 | + String text = ""; | ||
| 90 | + String intent = reminder.getIntent(); | ||
| 91 | + Map entities = reminder.getEntities(); | ||
| 92 | + try { | ||
| 93 | + TaskMessage message = new TaskMessage(1L, Target.MAINBOT, messageID, messengerId , messenger, text, null, intent, entities); | ||
| 94 | + processQueue.route(new TaskMessage(message)); | ||
| 95 | + } catch (Exception e) { | ||
| 96 | + logger.error("Something went wrong while attempting to send reminder!", e); | ||
| 97 | + } | ||
| 98 | + } | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + public Reminder createReminder(TaskMessage message, AppUser user) { | ||
| 103 | + logger.debug("Creating reminder"); | ||
| 104 | + | ||
| 105 | + Messenger messenger = message.getMessenger(); | ||
| 106 | + | ||
| 107 | + | ||
| 108 | + //Figure out when to remind the user | ||
| 109 | + | ||
| 110 | + //Set reminder cycle to one shot as a default | ||
| 111 | + ReminderCycle cycle = ReminderCycle.ONCE; | ||
| 112 | + //Extract the Date from the message | ||
| 113 | + String messageDay = message.getEntities().getOrDefault("date", "TODAY"); | ||
| 114 | + //If the date retrieved from the message contains a cycling parameter (e.g. "daily"), set the reminderCycle | ||
| 115 | + switch(messageDay) { | ||
| 116 | + case "DAILY": | ||
| 117 | + cycle = ReminderCycle.DAILY; | ||
| 118 | + break; | ||
| 119 | + case "WEEKLY": | ||
| 120 | + cycle = ReminderCycle.WEEKLY; | ||
| 121 | + break; | ||
| 122 | + case "MONTHLY": | ||
| 123 | + cycle = ReminderCycle.MONTHLY; | ||
| 124 | + break; | ||
| 125 | + } | ||
| 126 | + | ||
| 127 | + LocalDate cycleDate = DateStringExtractor.getLocalDateFromString(messageDay); | ||
| 128 | + | ||
| 129 | + Date cycleTime; | ||
| 130 | + try { | ||
| 131 | + //Read out time for Reminder | ||
| 132 | + | ||
| 133 | + String messageTime = message.getEntities().getOrDefault("time",""); | ||
| 134 | + //time should not be empty | ||
| 135 | + if(!messageTime.equals("")) { | ||
| 136 | + //get Date new for day, month, year | ||
| 137 | + String dateNow = new SimpleDateFormat("dd.MM.yyyy").format(new Date()); | ||
| 138 | + //remove all chars from time String (e.g. "10 Uhr") | ||
| 139 | + String reminderTime = messageTime.replaceAll("[^0-9:]", ""); | ||
| 140 | + //trim spaces | ||
| 141 | + reminderTime = reminderTime.trim(); | ||
| 142 | + //check if given time is e.g. "11:15" | ||
| 143 | + if(reminderTime.contains(":")) { | ||
| 144 | + //split for hours and minutes | ||
| 145 | + String[] splittedTime = reminderTime.split(":"); | ||
| 146 | + //add hours and minutes to date | ||
| 147 | + if(splittedTime.length > 1) | ||
| 148 | + dateNow = dateNow + " " + splittedTime[0] + ":" + splittedTime[1]; | ||
| 149 | + } else { | ||
| 150 | + //add hours from time and set to "00" | ||
| 151 | + dateNow = dateNow + " " + reminderTime + ":" + "00"; | ||
| 152 | + } | ||
| 153 | + | ||
| 154 | + SimpleDateFormat f = new SimpleDateFormat("dd.MM.yyyy hh:mm"); | ||
| 155 | + Date d = f.parse(dateNow); | ||
| 156 | + long milliseconds = d.getTime(); | ||
| 157 | + cycleTime = new Date(milliseconds); | ||
| 158 | + | ||
| 159 | + } else | ||
| 160 | + cycleTime = new Date(); | ||
| 161 | + | ||
| 162 | + } catch (Exception e) { | ||
| 163 | + return null; | ||
| 164 | + } | ||
| 165 | + //Figure out what we're reminding the user of | ||
| 166 | + String intent = message.getEntities().getOrDefault("event","FALLBACK"); | ||
| 167 | + | ||
| 168 | + Map<String, String> entities = new HashMap<>(); | ||
| 169 | + switch(intent) { | ||
| 170 | + case "showFood": | ||
| 171 | + intent = Intent.SHOW_FOOD.getText(); | ||
| 172 | + logger.debug("Intent is show food"); | ||
| 173 | + entities.put(EntityName.DATE.getText(), cycleDate.toString()); | ||
| 174 | + entities.put(EntityName.TIME.getText(), cycleTime.toString()); | ||
| 175 | + logger.debug("Entities added: " + entities); | ||
| 176 | + break; | ||
| 177 | + case "showCourses": | ||
| 178 | + //TODO: add Courses functionality | ||
| 179 | + break; | ||
| 180 | + default: | ||
| 181 | + intent = "FALLBACK"; | ||
| 182 | + break; | ||
| 183 | + } | ||
| 184 | + | ||
| 185 | + logger.debug("Creating reminder with date " + cycleDate.toString() + " and time " + cycleTime.toString()); | ||
| 186 | + | ||
| 187 | + Reminder reminder = reminderDAO.createReminder(); | ||
| 188 | + reminder.setUserId(user.getId()); | ||
| 189 | + reminder.setReminderCycle(cycle); | ||
| 190 | + reminder.setCycleTime(cycleDate); | ||
| 191 | + reminder.setMessenger(messenger); | ||
| 192 | + reminder.setIntent(intent); | ||
| 193 | + reminder.setEntities(entities); | ||
| 194 | + | ||
| 195 | + return reminderDAO.saveOrUpdate(reminder); | ||
| 196 | + } | ||
| 197 | + | ||
| 198 | +} |
services/MainBot/src/main/resources/de/bht/beuthbot/drools/Canteen.drl
| @@ -32,16 +32,21 @@ import de.bht.beuthbot.drools.model.DroolsMessage; | @@ -32,16 +32,21 @@ import de.bht.beuthbot.drools.model.DroolsMessage; | ||
| 32 | 32 | ||
| 33 | import de.bht.beuthbot.scheduler.SchedulerBean | 33 | import de.bht.beuthbot.scheduler.SchedulerBean |
| 34 | import de.bht.beuthbot.jms.TaskMessage | 34 | import de.bht.beuthbot.jms.TaskMessage |
| 35 | -import de.bht.beuthbot.scheduler.model.ReminderCycle | ||
| 36 | import java.util.Date | 35 | import java.util.Date |
| 37 | import java.text.SimpleDateFormat | 36 | import java.text.SimpleDateFormat |
| 38 | import java.text.ParseException | 37 | import java.text.ParseException |
| 39 | import de.bht.beuthbot.model.Messenger | 38 | import de.bht.beuthbot.model.Messenger |
| 40 | -import de.bht.beuthbot.scheduler.model.Reminder; | 39 | + |
| 40 | +import java.time.DayOfWeek; | ||
| 41 | +import java.time.LocalDate | ||
| 42 | +import de.bht.beuthbot.utils.DateStringExtractor | ||
| 43 | +import de.bht.beuthbot.model.entities.Reminder; | ||
| 41 | 44 | ||
| 42 | global de.bht.beuthbot.canteen.model.CanteenData canteenData; | 45 | global de.bht.beuthbot.canteen.model.CanteenData canteenData; |
| 43 | global de.bht.beuthbot.model.entities.AppUser user; | 46 | global de.bht.beuthbot.model.entities.AppUser user; |
| 44 | 47 | ||
| 48 | + | ||
| 49 | + | ||
| 45 | // ---------------------- GREETING ------------------------------------ | 50 | // ---------------------- GREETING ------------------------------------ |
| 46 | rule "Hello Drools" | 51 | rule "Hello Drools" |
| 47 | dialect "java" | 52 | dialect "java" |
| @@ -88,8 +93,12 @@ rule "Show dishes filtered" | @@ -88,8 +93,12 @@ rule "Show dishes filtered" | ||
| 88 | when | 93 | when |
| 89 | m : DroolsMessage( getIntent().equals(Intent.SHOW_FOOD.getText()) && !entities.isEmpty() ) | 94 | m : DroolsMessage( getIntent().equals(Intent.SHOW_FOOD.getText()) && !entities.isEmpty() ) |
| 90 | then | 95 | then |
| 96 | + String day = m.getEntities().getOrDefault(EntityName.DATE.getText(), ""); | ||
| 97 | + if(day != "") { | ||
| 98 | + day = DateStringExtractor.getGermanWeekDayFromLocalDate(DateStringExtractor.getLocalDateFromString(day),true); | ||
| 99 | + } | ||
| 91 | modify( m ) { | 100 | modify( m ) { |
| 92 | - setText("Gerichte:\n" + canteenData.getDishesFilteredAsString( | 101 | + setText("Diese Gerichte gibt es " + day + ":\n" + canteenData.getDishesFilteredAsString( |
| 93 | (m.getEntities().containsKey(EntityName.DATE.getText()) ? m.getEntities().get(EntityName.DATE.getText()) : null), | 102 | (m.getEntities().containsKey(EntityName.DATE.getText()) ? m.getEntities().get(EntityName.DATE.getText()) : null), |
| 94 | (m.getEntities().containsKey(EntityName.HEALTHY.getText()) ? m.getEntities().get(EntityName.HEALTHY.getText()) : null), | 103 | (m.getEntities().containsKey(EntityName.HEALTHY.getText()) ? m.getEntities().get(EntityName.HEALTHY.getText()) : null), |
| 95 | (m.getEntities().containsKey(EntityName.DISH_TYPE.getText()) ? m.getEntities().get(EntityName.DISH_TYPE.getText()) : null), | 104 | (m.getEntities().containsKey(EntityName.DISH_TYPE.getText()) ? m.getEntities().get(EntityName.DISH_TYPE.getText()) : null), |
| @@ -126,7 +135,13 @@ rule "Create reminder" | @@ -126,7 +135,13 @@ rule "Create reminder" | ||
| 126 | then | 135 | then |
| 127 | SchedulerBean s = new SchedulerBean(); | 136 | SchedulerBean s = new SchedulerBean(); |
| 128 | TaskMessage message = new TaskMessage(m); | 137 | TaskMessage message = new TaskMessage(m); |
| 129 | - String messageText = s.createReminder(message, user); | 138 | + Reminder reminder = s.createReminder(message, user); |
| 139 | + String messageText = ""; | ||
| 140 | + if(reminder.getIntent() == Intent.SHOW_FOOD.getText()) { | ||
| 141 | + messageText = "Ich werde dir " + DateStringExtractor.getGermanWeekDayFromLocalDate(reminder.getCycleTime(), true) + " um " + new SimpleDateFormat("KK:mm").format(reminder.getCycleTime()) + " Uhr den Mensaplan mitteilen!"; | ||
| 142 | + } else { | ||
| 143 | + messageText = "Es war mir leider nicht möglich eine Erinnerung für dich anzulegen. Versuche es bitte noch einmal."; | ||
| 144 | + } //TODO: Add other intents | ||
| 130 | m.setText(messageText); | 145 | m.setText(messageText); |
| 131 | 146 | ||
| 132 | end | 147 | end |
services/Rasa/src/main/java/de/bht/beuthbot/nlp/rasa/RasaConnector.java
| @@ -79,7 +79,8 @@ public class RasaConnector implements MessageListener { | @@ -79,7 +79,8 @@ public class RasaConnector implements MessageListener { | ||
| 79 | logger.debug("{}: {}", response.getStatus(), responseAsString); | 79 | logger.debug("{}: {}", response.getStatus(), responseAsString); |
| 80 | 80 | ||
| 81 | RasaResponse rasaResponse = gson.fromJson(responseAsString, RasaResponse.class); | 81 | RasaResponse rasaResponse = gson.fromJson(responseAsString, RasaResponse.class); |
| 82 | - TaskMessage messageToMainBot = new TaskMessage(new RasaMessage(incomingChatMessage, rasaResponse)); | 82 | + RasaMessage rasaMessage = new RasaMessage(incomingChatMessage, rasaResponse); |
| 83 | + TaskMessage messageToMainBot = new TaskMessage(rasaMessage); | ||
| 83 | processQueue.route(messageToMainBot); | 84 | processQueue.route(messageToMainBot); |
| 84 | } catch (JMSException e) { | 85 | } catch (JMSException e) { |
| 85 | logger.error("Error while processing message.", e); | 86 | logger.error("Error while processing message.", e); |
services/Telegram/src/main/java/de/bht/beuthbot/messenger/telegram/TelegramReceiveAdapter.java
| @@ -13,6 +13,9 @@ import com.pengrad.telegrambot.response.GetFileResponse; | @@ -13,6 +13,9 @@ import com.pengrad.telegrambot.response.GetFileResponse; | ||
| 13 | import de.bht.beuthbot.attachments.AttachmentStore; | 13 | import de.bht.beuthbot.attachments.AttachmentStore; |
| 14 | import de.bht.beuthbot.conf.Application; | 14 | import de.bht.beuthbot.conf.Application; |
| 15 | import de.bht.beuthbot.conf.Configuration; | 15 | import de.bht.beuthbot.conf.Configuration; |
| 16 | +import de.bht.beuthbot.daos.AppUserDAO; | ||
| 17 | +import de.bht.beuthbot.daos.LogMessageDAO; | ||
| 18 | +import de.bht.beuthbot.daos.ReminderDAO; | ||
| 16 | import de.bht.beuthbot.jms.ProcessQueue; | 19 | import de.bht.beuthbot.jms.ProcessQueue; |
| 17 | import de.bht.beuthbot.jms.TaskMessage; | 20 | import de.bht.beuthbot.jms.TaskMessage; |
| 18 | import de.bht.beuthbot.messenger.telegram.model.TelegramAttachment; | 21 | import de.bht.beuthbot.messenger.telegram.model.TelegramAttachment; |
| @@ -20,6 +23,11 @@ import de.bht.beuthbot.messenger.telegram.model.TelegramMessage; | @@ -20,6 +23,11 @@ import de.bht.beuthbot.messenger.telegram.model.TelegramMessage; | ||
| 20 | import de.bht.beuthbot.messenger.telegram.model.TelegramWebhookURL; | 23 | import de.bht.beuthbot.messenger.telegram.model.TelegramWebhookURL; |
| 21 | import de.bht.beuthbot.model.Attachment; | 24 | import de.bht.beuthbot.model.Attachment; |
| 22 | import de.bht.beuthbot.model.AttachmentType; | 25 | import de.bht.beuthbot.model.AttachmentType; |
| 26 | +import de.bht.beuthbot.model.Messenger; | ||
| 27 | +import de.bht.beuthbot.model.entities.AppUser; | ||
| 28 | +import de.bht.beuthbot.model.entities.LogMessage; | ||
| 29 | +import de.bht.beuthbot.model.entities.Reminder; | ||
| 30 | +import de.bht.beuthbot.model.enumeration.ReminderCycle; | ||
| 23 | import org.apache.http.HttpStatus; | 31 | import org.apache.http.HttpStatus; |
| 24 | import org.slf4j.Logger; | 32 | import org.slf4j.Logger; |
| 25 | import org.slf4j.LoggerFactory; | 33 | import org.slf4j.LoggerFactory; |
| @@ -27,10 +35,14 @@ import org.slf4j.LoggerFactory; | @@ -27,10 +35,14 @@ import org.slf4j.LoggerFactory; | ||
| 27 | import javax.annotation.PostConstruct; | 35 | import javax.annotation.PostConstruct; |
| 28 | import javax.annotation.Resource; | 36 | import javax.annotation.Resource; |
| 29 | import javax.ws.rs.Consumes; | 37 | import javax.ws.rs.Consumes; |
| 38 | +import javax.ws.rs.GET; | ||
| 30 | import javax.ws.rs.POST; | 39 | import javax.ws.rs.POST; |
| 31 | import javax.ws.rs.Path; | 40 | import javax.ws.rs.Path; |
| 32 | import javax.ws.rs.core.MediaType; | 41 | import javax.ws.rs.core.MediaType; |
| 33 | import javax.ws.rs.core.Response; | 42 | import javax.ws.rs.core.Response; |
| 43 | +import java.time.LocalDate; | ||
| 44 | +import java.util.HashMap; | ||
| 45 | +import java.util.List; | ||
| 34 | 46 | ||
| 35 | /** | 47 | /** |
| 36 | * @Author: Christopher Kümmel on 5/14/2017. | 48 | * @Author: Christopher Kümmel on 5/14/2017. |
| @@ -56,6 +68,18 @@ public class TelegramReceiveAdapter { | @@ -56,6 +68,18 @@ public class TelegramReceiveAdapter { | ||
| 56 | /** com.pengrad.telegrambot.TelegramBot; */ | 68 | /** com.pengrad.telegrambot.TelegramBot; */ |
| 57 | private TelegramBot bot; | 69 | private TelegramBot bot; |
| 58 | 70 | ||
| 71 | + /** Injected AppUserDAO */ | ||
| 72 | + @Resource(lookup = "java:global/global/AppUserDAOImpl") | ||
| 73 | + private AppUserDAO userDAO; | ||
| 74 | + | ||
| 75 | + /** Injected AppUserDAO */ | ||
| 76 | + @Resource(lookup = "java:global/global/ReminderDAOImpl") | ||
| 77 | + private ReminderDAO reminderDAO; | ||
| 78 | + | ||
| 79 | + /** Injected AppUserDAO */ | ||
| 80 | + @Resource(lookup = "java:global/global/LogMessageDAOImpl") | ||
| 81 | + private LogMessageDAO logMessageDAO; | ||
| 82 | + | ||
| 59 | /** | 83 | /** |
| 60 | * Initialize TelegramBot with Token | 84 | * Initialize TelegramBot with Token |
| 61 | */ | 85 | */ |
| @@ -131,6 +155,52 @@ public class TelegramReceiveAdapter { | @@ -131,6 +155,52 @@ public class TelegramReceiveAdapter { | ||
| 131 | } | 155 | } |
| 132 | } | 156 | } |
| 133 | 157 | ||
| 158 | + /** | ||
| 159 | + * Test method for database | ||
| 160 | + * @return Http response | ||
| 161 | + */ | ||
| 162 | + @GET | ||
| 163 | + @Path("/testDatabase") | ||
| 164 | + public Response testDatabase() { | ||
| 165 | + logger.info("testDatabase: Start"); | ||
| 166 | + AppUser user = userDAO.createUser(); | ||
| 167 | + user.setFacebookUserId("88"); | ||
| 168 | + user.setTelegramUserId("99"); | ||
| 169 | + user.setProperty("test_key", "test_value"); | ||
| 170 | + userDAO.saveOrUpdate(user); | ||
| 171 | + logger.info("testDatabase: Speichern durchgefuehrt"); | ||
| 172 | + | ||
| 173 | + List<AppUser> userList = userDAO.findAll(); | ||
| 174 | + String result = userList.get(0).getTelegramUserId(); | ||
| 175 | + logger.info("TelegramUserId: " + result); | ||
| 176 | + logger.info("testDatabase: Auslesen durchgefuehrt"); | ||
| 177 | + | ||
| 178 | + Reminder reminder = reminderDAO.createReminder(); | ||
| 179 | + reminder.setMessenger(Messenger.TELEGRAM); | ||
| 180 | + reminder.setReminderCycle(ReminderCycle.DAILY); | ||
| 181 | + reminder.setCycleTime(LocalDate.now()); | ||
| 182 | + Long userId = userList.get(0).getId(); | ||
| 183 | + reminder.setUserId(userId); | ||
| 184 | + reminder.setIntent("Intent"); | ||
| 185 | + HashMap entities = new HashMap(); | ||
| 186 | + entities.put("key1", "value2"); | ||
| 187 | + entities.put("key2", "value2"); | ||
| 188 | + reminder.setEntities(entities); | ||
| 189 | + reminderDAO.saveOrUpdate(reminder); | ||
| 190 | + | ||
| 191 | + List<Reminder> reminders = reminderDAO.findAll(); | ||
| 192 | + Reminder reminderResult = reminders.get(0); | ||
| 193 | + logger.info("Reminder Cycle: " + reminderResult.getReminderCycle().toString()); | ||
| 194 | + logger.info("Telegram ID via Reminder: " + userDAO.findById(reminderResult.getUserId()).getTelegramUserId()); | ||
| 195 | + | ||
| 196 | + LogMessage logMessage = logMessageDAO.createMessage(); | ||
| 197 | + logMessage.setUserId(userList.get(0).getId()); | ||
| 198 | + logMessage.setMessage("Message"); | ||
| 199 | + logMessageDAO.saveOrUpdate(logMessage); | ||
| 200 | + | ||
| 201 | + return Response.status(HttpStatus.SC_OK).build(); | ||
| 202 | + } | ||
| 203 | + | ||
| 134 | 204 | ||
| 135 | /** | 205 | /** |
| 136 | * RESTEasy HTTP Post to set Webhook | 206 | * RESTEasy HTTP Post to set Webhook |
services/Telegram/src/main/java/de/bht/beuthbot/messenger/telegram/TelegramSendAdapter.java
| @@ -103,9 +103,13 @@ public class TelegramSendAdapter implements MessageListener { | @@ -103,9 +103,13 @@ public class TelegramSendAdapter implements MessageListener { | ||
| 103 | * @param message to send | 103 | * @param message to send |
| 104 | */ | 104 | */ |
| 105 | private void sendMessage(final Long senderId, final String message) { | 105 | private void sendMessage(final Long senderId, final String message) { |
| 106 | + logger.debug("Message is " + message.length() + " characters long"); | ||
| 106 | SendMessage request = new SendMessage(senderId, message); | 107 | SendMessage request = new SendMessage(senderId, message); |
| 107 | SendResponse sendResponse = bot.execute(request); | 108 | SendResponse sendResponse = bot.execute(request); |
| 108 | logger.debug("Send message: " + sendResponse.isOk()); | 109 | logger.debug("Send message: " + sendResponse.isOk()); |
| 110 | + if(!sendResponse.isOk()) { | ||
| 111 | + logger.debug("Sending message to user " + senderId + " failed: " + sendResponse.message()); | ||
| 112 | + } | ||
| 109 | } | 113 | } |
| 110 | 114 | ||
| 111 | /** | 115 | /** |
services/Telegram/src/main/java/de/bht/beuthbot/messenger/telegram/model/TelegramWebhookURL.java
0 → 100644
| 1 | +package de.bht.beuthbot.messenger.telegram.model; | ||
| 2 | + | ||
| 3 | +import de.bht.beuthbot.conf.Application; | ||
| 4 | +import de.bht.beuthbot.conf.Configuration; | ||
| 5 | + | ||
| 6 | +import javax.annotation.Resource; | ||
| 7 | + | ||
| 8 | +public class TelegramWebhookURL { | ||
| 9 | + /** BeuthBot Application Bean */ | ||
| 10 | + @Resource(lookup = "java:global/global/ApplicationBean") | ||
| 11 | + private Application application; | ||
| 12 | + | ||
| 13 | + private String url; | ||
| 14 | + | ||
| 15 | + public String getUrl() { | ||
| 16 | + return url; | ||
| 17 | + } | ||
| 18 | + | ||
| 19 | + public void setUrl(String url) { | ||
| 20 | + /* | ||
| 21 | + if(!botToken.equals(application.getConfiguration(Configuration.TELEGRAM_BOT_TOKEN))) { | ||
| 22 | + return; | ||
| 23 | + }*/ | ||
| 24 | + this.url = url; | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + @Override | ||
| 28 | + public String toString() { | ||
| 29 | + return url; | ||
| 30 | + } | ||
| 31 | +} |