diff --git a/pom.xml b/pom.xml index f5a44f87..18ad4eea 100644 --- a/pom.xml +++ b/pom.xml @@ -76,26 +76,28 @@ org.springframework.boot spring-boot-starter-data-jpa - org.springframework.boot - spring-boot-starter-hateoas + spring-boot-starter-mobile + diff --git a/src/main/java/org/woehlke/twitterwall/Application.java b/src/main/java/org/woehlke/twitterwall/Application.java index 4c40ee68..f7dcb9d1 100644 --- a/src/main/java/org/woehlke/twitterwall/Application.java +++ b/src/main/java/org/woehlke/twitterwall/Application.java @@ -4,6 +4,8 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.ImportResource; +import org.springframework.data.web.config.EnableSpringDataWebSupport; import org.springframework.scheduling.annotation.EnableScheduling; import org.woehlke.twitterwall.conf.TwitterProperties; import org.woehlke.twitterwall.conf.TwitterwallBackendProperties; @@ -22,6 +24,9 @@ TwitterwallSchedulerProperties.class, TwitterProperties.class }) +//@EnableWebMvc +@EnableSpringDataWebSupport +@ImportResource("classpath:integration.xml") public class Application { public static void main(String[] args) { diff --git a/src/main/java/org/woehlke/twitterwall/ScheduledTasks.java b/src/main/java/org/woehlke/twitterwall/ScheduledTasks.java index 162bb47a..911762b4 100644 --- a/src/main/java/org/woehlke/twitterwall/ScheduledTasks.java +++ b/src/main/java/org/woehlke/twitterwall/ScheduledTasks.java @@ -79,7 +79,7 @@ public ScheduledTasks(TwitterwallSchedulerProperties twitterwallSchedulerPropert private final static long FIXED_RATE_FOR_SCHEDULAR_FETCH_USER_LIST = ZWOELF_STUNDEN; - @Scheduled(fixedRate = FIXED_RATE_FOR_SCHEDULAR_FETCH_TWEETS) + //@Scheduled(fixedRate = FIXED_RATE_FOR_SCHEDULAR_FETCH_TWEETS) public void fetchTweetsFromTwitterSearch() { String msg = "fetch Tweets From TwitterSearch "; logEnv(msg); @@ -115,7 +115,7 @@ public void fetchTweetsFromTwitterSearch() { logEnv(msg); } - @Scheduled(fixedRate = FIXED_RATE_FOR_SCHEDULAR_UPDATE_TWEETS) + //@Scheduled(fixedRate = FIXED_RATE_FOR_SCHEDULAR_UPDATE_TWEETS) public void updateTweets() { String msg = "update Tweets "; logEnv(msg); @@ -151,7 +151,7 @@ public void updateTweets() { logEnv(msg); } - @Scheduled(fixedRate = FIXED_RATE_FOR_SCHEDULAR_UPDATE_USER) + //@Scheduled(fixedRate = FIXED_RATE_FOR_SCHEDULAR_UPDATE_USER) public void updateUserProfiles() { String msg = "update User Profiles "; logEnv(msg); @@ -185,7 +185,7 @@ public void updateUserProfiles() { logEnv(msg); } - @Scheduled(fixedRate = FIXED_RATE_FOR_SCHEDULAR_UPDATE_USER_BY_MENTION) + //@Scheduled(fixedRate = FIXED_RATE_FOR_SCHEDULAR_UPDATE_USER_BY_MENTION) public void updateUserProfilesFromMentions(){ String msg = "update User Profiles From Mentions"; logEnv(msg); @@ -219,7 +219,7 @@ public void updateUserProfilesFromMentions(){ logEnv(msg); } - @Scheduled(fixedRate = FIXED_RATE_FOR_SCHEDULAR_FETCH_USER_LIST) + //@Scheduled(fixedRate = FIXED_RATE_FOR_SCHEDULAR_FETCH_USER_LIST) public void fetchUsersFromDefinedUserList(){ String msg = "fetch Users from Defined User List "; logEnv(msg); diff --git a/src/main/java/org/woehlke/twitterwall/conf/TwitterwallSchedulerProperties.java b/src/main/java/org/woehlke/twitterwall/conf/TwitterwallSchedulerProperties.java index 8e35368d..d8e60178 100644 --- a/src/main/java/org/woehlke/twitterwall/conf/TwitterwallSchedulerProperties.java +++ b/src/main/java/org/woehlke/twitterwall/conf/TwitterwallSchedulerProperties.java @@ -126,6 +126,8 @@ public static class Facade { private List idTwitterToFetchForUserControllerTest = new ArrayList(); + private List screenNamesToFetchForUserControllerTest = new ArrayList(); + public List getIdTwitterToFetchForTweetTest() { return idTwitterToFetchForTweetTest; } @@ -141,6 +143,14 @@ public List getIdTwitterToFetchForUserControllerTest() { public void setIdTwitterToFetchForUserControllerTest(List idTwitterToFetchForUserControllerTest) { this.idTwitterToFetchForUserControllerTest = idTwitterToFetchForUserControllerTest; } + + public List getScreenNamesToFetchForUserControllerTest() { + return screenNamesToFetchForUserControllerTest; + } + + public void setScreenNamesToFetchForUserControllerTest(List screenNamesToFetchForUserControllerTest) { + this.screenNamesToFetchForUserControllerTest = screenNamesToFetchForUserControllerTest; + } } public Facade getFacade() { diff --git a/src/main/java/org/woehlke/twitterwall/frontend/controller/PagesController.java b/src/main/java/org/woehlke/twitterwall/frontend/controller/PagesController.java index 2d0b167d..b1f991c4 100644 --- a/src/main/java/org/woehlke/twitterwall/frontend/controller/PagesController.java +++ b/src/main/java/org/woehlke/twitterwall/frontend/controller/PagesController.java @@ -7,12 +7,11 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; -import org.woehlke.twitterwall.conf.TwitterProperties; import org.woehlke.twitterwall.conf.TwitterwallFrontendProperties; import org.woehlke.twitterwall.frontend.controller.common.Symbols; import org.woehlke.twitterwall.frontend.controller.common.ControllerHelper; import org.woehlke.twitterwall.oodm.entities.User; -import org.woehlke.twitterwall.scheduled.service.facade.CreateTestData; +import org.woehlke.twitterwall.scheduled.mq.endoint.StartTask; /** @@ -35,8 +34,9 @@ public String imprint(Model model) { String title = "Impressum"; String subtitle = twitterwallFrontendProperties.getImprintSubtitle(); model = controllerHelper.setupPage(model, title, subtitle, symbol); - String screenName = twitterwallFrontendProperties.getImprintScreenName(); - User user = createTestData.addUserForScreenName(screenName); + User user = startTask.createImprintUser(); + //String screenName = twitterwallFrontendProperties.getImprintScreenName(); + //User user = createTestData.addUserForScreenName(screenName); model.addAttribute("user", user); log.info("-----------------------------------------"); return "imprint"; @@ -46,15 +46,18 @@ public String imprint(Model model) { private final TwitterwallFrontendProperties twitterwallFrontendProperties; - private final TwitterProperties twitterProperties; + //private final TwitterProperties twitterProperties; - private final CreateTestData createTestData; + //private final CreateTestData createTestData; + + private final StartTask startTask; @Autowired - public PagesController(TwitterwallFrontendProperties twitterwallFrontendProperties, TwitterProperties twitterProperties, CreateTestData createTestData, ControllerHelper controllerHelper) { + public PagesController(TwitterwallFrontendProperties twitterwallFrontendProperties, StartTask startTask, ControllerHelper controllerHelper) { this.twitterwallFrontendProperties = twitterwallFrontendProperties; - this.twitterProperties = twitterProperties; - this.createTestData = createTestData; + //this.twitterProperties = twitterProperties; + //this.createTestData = createTestData; + this.startTask = startTask; this.controllerHelper = controllerHelper; } diff --git a/src/main/java/org/woehlke/twitterwall/frontend/controller/TestController.java b/src/main/java/org/woehlke/twitterwall/frontend/controller/TestController.java index 995d1c0b..4c63670d 100644 --- a/src/main/java/org/woehlke/twitterwall/frontend/controller/TestController.java +++ b/src/main/java/org/woehlke/twitterwall/frontend/controller/TestController.java @@ -17,6 +17,7 @@ import org.woehlke.twitterwall.frontend.controller.common.ControllerHelper; import org.woehlke.twitterwall.oodm.entities.User; import org.woehlke.twitterwall.oodm.service.UserService; +import org.woehlke.twitterwall.scheduled.mq.endoint.StartTask; import org.woehlke.twitterwall.scheduled.service.facade.CreateTestData; import org.woehlke.twitterwall.scheduled.service.facade.FetchUsersFromDefinedUserList; @@ -35,8 +36,8 @@ public String getTestData(Model model) { model = controllerHelper.setupPage(model,"Test Data Tweets",twitterProperties.getSearchQuery(),Symbols.GET_TEST_DATA.toString()); String msg = "/getTestData : "; if(twitterwallFrontendProperties.getContextTest()){ - model.addAttribute("latestTweets", createTestData.getTestDataTweets()); - model.addAttribute("users", createTestData.getTestDataUser()); + model.addAttribute("latestTweets", startTask.createTestDataForTweets()); + model.addAttribute("users", startTask.createTestDataForUser()); } else { model.addAttribute("latestTweets",null); model.addAttribute("users",null); @@ -73,21 +74,24 @@ public String getOnListRenew(@RequestParam(name= "page" ,defaultValue=""+ Contro private final TwitterProperties twitterProperties; + private final StartTask startTask; + @Autowired - public TestController(UserService userService, FetchUsersFromDefinedUserList fetchUsersFromDefinedUserList, CreateTestData createTestData, ControllerHelper controllerHelper, TwitterwallFrontendProperties twitterwallFrontendProperties, TwitterProperties twitterProperties) { + public TestController(UserService userService, FetchUsersFromDefinedUserList fetchUsersFromDefinedUserList, CreateTestData createTestData, ControllerHelper controllerHelper, TwitterwallFrontendProperties twitterwallFrontendProperties, TwitterProperties twitterProperties, StartTask startTask) { this.userService = userService; this.fetchUsersFromDefinedUserList = fetchUsersFromDefinedUserList; this.createTestData = createTestData; this.controllerHelper = controllerHelper; this.twitterwallFrontendProperties = twitterwallFrontendProperties; this.twitterProperties = twitterProperties; + this.startTask = startTask; } @Async protected void startOnListRenew(){ String msg = "startOnListRenew: "; - log.info(msg+"START scheduledTasksFacade.fetchUsersFromDefinedUserList: "); - fetchUsersFromDefinedUserList.fetchUsersFromDefinedUserList(); - log.info(msg+"DONE scheduledTasksFacade.fetchUsersFromDefinedUserList: "); + log.info(msg+"START startTask.fetchUsersFromDefinedUserList: "); + startTask.fetchUsersFromDefinedUserList(); + log.info(msg+"DONE startTask.fetchUsersFromDefinedUserList: "); } } diff --git a/src/main/java/org/woehlke/twitterwall/oodm/entities/Mention.java b/src/main/java/org/woehlke/twitterwall/oodm/entities/Mention.java index d914f9f1..11b544fb 100644 --- a/src/main/java/org/woehlke/twitterwall/oodm/entities/Mention.java +++ b/src/main/java/org/woehlke/twitterwall/oodm/entities/Mention.java @@ -57,8 +57,7 @@ public class Mention extends AbstractDomainObject implements DomainObje @Column(name = "name",length=4096, nullable = false) private String name = ""; - @NotNull - @JoinColumn(name = "fk_user") + @JoinColumn(name = "fk_user",nullable = true) @OneToOne(optional=true, fetch = EAGER, cascade = {DETACH, REFRESH, REMOVE}) private User user; @@ -78,10 +77,6 @@ public Mention(Task createdBy, Task updatedBy, String mentionString) { this.idTwitter = ID_TWITTER_UNDEFINED; this.screenName = mentionString; this.name = mentionString; - try { - Thread.sleep(100L); - } catch (InterruptedException e) { - } } private Mention() { diff --git a/src/main/java/org/woehlke/twitterwall/oodm/entities/Task.java b/src/main/java/org/woehlke/twitterwall/oodm/entities/Task.java index 5d5a49bb..a673c20d 100644 --- a/src/main/java/org/woehlke/twitterwall/oodm/entities/Task.java +++ b/src/main/java/org/woehlke/twitterwall/oodm/entities/Task.java @@ -75,61 +75,6 @@ public class Task implements DomainObjectMinimal { @Column(name="time_finished") private Date timeFinished = null; - @NotNull - @OneToMany(cascade = {DETACH, REFRESH, REMOVE}, fetch = EAGER,orphanRemoval=true, mappedBy="task") - private List history = new ArrayList<>(); - - @NotNull - @Embedded - @AttributeOverrides({ - @AttributeOverride(name = "countUser", column = @Column(name = "start_count_user",nullable=false)), - @AttributeOverride(name = "countTweets", column = @Column(name = "start_count_tweets",nullable=false)), - @AttributeOverride(name = "countHashTags", column = @Column(name = "start_count_hashtags",nullable=false)), - @AttributeOverride(name = "countMedia", column = @Column(name = "start_count_media",nullable=false)), - @AttributeOverride(name = "countMention", column = @Column(name = "start_count_mention",nullable=false)), - @AttributeOverride(name = "countTickerSymbol", column = @Column(name = "start_count_tickersymbol",nullable=false)), - @AttributeOverride(name = "countUrl", column = @Column(name = "start_count_url",nullable=false)), - @AttributeOverride(name = "countUrlCache", column = @Column(name = "start_count_urlcache",nullable=false)), - @AttributeOverride(name = "countTask", column = @Column(name = "start_count_task",nullable=false)), - @AttributeOverride(name = "countTaskHistory", column = @Column(name = "start_count_task_history",nullable=false)), - @AttributeOverride(name = "tweet2hashtag", column = @Column(name = "start_count_tweet2hashtag",nullable=false)), - @AttributeOverride(name = "tweet2media", column = @Column(name = "start_count_tweet2media",nullable=false)), - @AttributeOverride(name = "tweet2mention", column = @Column(name = "start_count_tweet2mention",nullable=false)), - @AttributeOverride(name = "tweet2tickersymbol", column = @Column(name = "start_count_tweet2tickersymbol",nullable=false)), - @AttributeOverride(name = "tweet2url", column = @Column(name = "start_count_tweet2url",nullable=false)), - @AttributeOverride(name = "userprofile2hashtag", column = @Column(name = "start_count_userprofile2hashtag",nullable=false)), - @AttributeOverride(name = "userprofile2media", column = @Column(name = "start_count_userprofile2media",nullable=false)), - @AttributeOverride(name = "userprofile2mention", column = @Column(name = "start_count_userprofile2mention",nullable=false)), - @AttributeOverride(name = "userprofile2tickersymbol", column = @Column(name = "start_count_userprofile2tickersymbol",nullable=false)), - @AttributeOverride(name = "userprofile2url", column = @Column(name = "start_count_userprofile2url",nullable=false)) - }) - private CountedEntities countedEntitiesAtStart; - - @Embedded - @AttributeOverrides({ - @AttributeOverride(name = "countUser", column = @Column(name = "done_count_user")), - @AttributeOverride(name = "countTweets", column = @Column(name = "done_count_tweets")), - @AttributeOverride(name = "countHashTags", column = @Column(name = "done_count_hashtags")), - @AttributeOverride(name = "countMedia", column = @Column(name = "done_count_media")), - @AttributeOverride(name = "countMention", column = @Column(name = "done_count_mention")), - @AttributeOverride(name = "countTickerSymbol", column = @Column(name = "done_count_tickersymbol")), - @AttributeOverride(name = "countUrl", column = @Column(name = "done_count_url")), - @AttributeOverride(name = "countUrlCache", column = @Column(name = "done_count_urlcache")), - @AttributeOverride(name = "countTask", column = @Column(name = "done_count_task")), - @AttributeOverride(name = "countTaskHistory", column = @Column(name = "done_count_task_history")), - @AttributeOverride(name = "tweet2hashtag", column = @Column(name = "done_count_tweet2hashtag")), - @AttributeOverride(name = "tweet2media", column = @Column(name = "done_count_tweet2media")), - @AttributeOverride(name = "tweet2mention", column = @Column(name = "done_count_tweet2mention")), - @AttributeOverride(name = "tweet2tickersymbol", column = @Column(name = "done_count_tweet2tickersymbol")), - @AttributeOverride(name = "tweet2url", column = @Column(name = "done_count_tweet2url")), - @AttributeOverride(name = "userprofile2hashtag", column = @Column(name = "done_count_userprofile2hashtag")), - @AttributeOverride(name = "userprofile2media", column = @Column(name = "done_count_userprofile2media")), - @AttributeOverride(name = "userprofile2mention", column = @Column(name = "done_count_userprofile2mention")), - @AttributeOverride(name = "userprofile2tickersymbol", column = @Column(name = "done_count_userprofile2tickersymbol")), - @AttributeOverride(name = "userprofile2url", column = @Column(name = "done_count_userprofile2url")) - }) - private CountedEntities countedEntitiesAtFinish; - private Task() { } @@ -138,16 +83,13 @@ public Task(String description,TaskType taskType) { this.description = description; } - public Task(String description, TaskType taskType, TaskStatus taskStatus, Date timeStarted, Date timeLastUpdate, Date timeFinished, List history, CountedEntities countedEntitiesAtStart, CountedEntities countedEntitiesAtFinish) { + public Task(String description, TaskType taskType, TaskStatus taskStatus, Date timeStarted, Date timeLastUpdate, Date timeFinished) { this.description = description; this.taskType = taskType; this.taskStatus = taskStatus; this.timeStarted = timeStarted; this.timeLastUpdate = timeLastUpdate; this.timeFinished = timeFinished; - this.history = history; - this.countedEntitiesAtStart = countedEntitiesAtStart; - this.countedEntitiesAtFinish = countedEntitiesAtFinish; } @Override @@ -189,22 +131,6 @@ public void setTimeFinished(Date timeFinished) { this.timeFinished = timeFinished; } - public CountedEntities getCountedEntitiesAtStart() { - return countedEntitiesAtStart; - } - - public void setCountedEntitiesAtStart(CountedEntities countedEntitiesAtStart) { - this.countedEntitiesAtStart = countedEntitiesAtStart; - } - - public CountedEntities getCountedEntitiesAtFinish() { - return countedEntitiesAtFinish; - } - - public void setCountedEntitiesAtFinish(CountedEntities countedEntitiesAtFinish) { - this.countedEntitiesAtFinish = countedEntitiesAtFinish; - } - public TaskStatus getTaskStatus() { return taskStatus; } @@ -221,18 +147,6 @@ public void setDescription(String description) { this.description = description; } - public List getHistory() { - return history; - } - - public void setHistory(List history) { - this.history = history; - } - - public void addHistory(TaskHistory history) { - this.history.add(history); - } - public Date getTimeLastUpdate() { return timeLastUpdate; } @@ -248,14 +162,6 @@ public void setTimeLastUpdate() { @Override public String toString() { - String countedEntitiesAtFinishStr = "null"; - if(countedEntitiesAtFinish != null){ - countedEntitiesAtFinishStr = countedEntitiesAtFinish.toString(); - } - String countedEntitiesAtStartStr = "null"; - if(countedEntitiesAtStart != null){ - countedEntitiesAtStartStr = countedEntitiesAtStart.toString(); - } return "Task{" + "id=" + id + ", taskType=" + taskType + @@ -263,8 +169,6 @@ public String toString() { ", timeStarted=" + timeStarted + ", timeLastUpdate=" + timeLastUpdate + ", timeFinished=" + timeFinished + - ", countedEntitiesAtStart=" + countedEntitiesAtStartStr + - ", countedEntitiesAtFinish=" + countedEntitiesAtFinishStr + '}'; } diff --git a/src/main/java/org/woehlke/twitterwall/oodm/entities/TaskHistory.java b/src/main/java/org/woehlke/twitterwall/oodm/entities/TaskHistory.java index 15a82ca1..43feca3b 100644 --- a/src/main/java/org/woehlke/twitterwall/oodm/entities/TaskHistory.java +++ b/src/main/java/org/woehlke/twitterwall/oodm/entities/TaskHistory.java @@ -2,6 +2,7 @@ import org.hibernate.validator.constraints.SafeHtml; import org.woehlke.twitterwall.oodm.entities.common.DomainObjectMinimal; +import org.woehlke.twitterwall.oodm.entities.parts.CountedEntities; import org.woehlke.twitterwall.oodm.entities.parts.TaskStatus; import org.woehlke.twitterwall.oodm.entities.listener.TaskHistoryListener; @@ -66,16 +67,44 @@ public class TaskHistory implements DomainObjectMinimal { @JoinColumn(name="task_id") private Task task; + //@NotNull + @Embedded + @AttributeOverrides({ + @AttributeOverride(name = "countUser", column = @Column(name = "count_user",nullable=false)), + @AttributeOverride(name = "countTweets", column = @Column(name = "count_tweets",nullable=false)), + @AttributeOverride(name = "countHashTags", column = @Column(name = "count_hashtags",nullable=false)), + @AttributeOverride(name = "countMedia", column = @Column(name = "count_media",nullable=false)), + @AttributeOverride(name = "countMention", column = @Column(name = "count_mention",nullable=false)), + @AttributeOverride(name = "countTickerSymbol", column = @Column(name = "count_tickersymbol",nullable=false)), + @AttributeOverride(name = "countUrl", column = @Column(name = "count_url",nullable=false)), + @AttributeOverride(name = "countUrlCache", column = @Column(name = "count_urlcache",nullable=false)), + @AttributeOverride(name = "countTask", column = @Column(name = "count_task",nullable=false)), + @AttributeOverride(name = "countTaskHistory", column = @Column(name = "count_task_history",nullable=false)), + @AttributeOverride(name = "tweet2hashtag", column = @Column(name = "count_tweet2hashtag",nullable=false)), + @AttributeOverride(name = "tweet2media", column = @Column(name = "count_tweet2media",nullable=false)), + @AttributeOverride(name = "tweet2mention", column = @Column(name = "count_tweet2mention",nullable=false)), + @AttributeOverride(name = "tweet2tickersymbol", column = @Column(name = "count_tweet2tickersymbol",nullable=false)), + @AttributeOverride(name = "tweet2url", column = @Column(name = "count_tweet2url",nullable=false)), + @AttributeOverride(name = "userprofile2hashtag", column = @Column(name = "count_userprofile2hashtag",nullable=false)), + @AttributeOverride(name = "userprofile2media", column = @Column(name = "count_userprofile2media",nullable=false)), + @AttributeOverride(name = "userprofile2mention", column = @Column(name = "count_userprofile2mention",nullable=false)), + @AttributeOverride(name = "userprofile2tickersymbol", column = @Column(name = "count_userprofile2tickersymbol",nullable=false)), + @AttributeOverride(name = "userprofile2url", column = @Column(name = "count_userprofile2url",nullable=false)) + }) + private CountedEntities countedEntities = new CountedEntities(); + private TaskHistory() { } - public TaskHistory(String description, TaskStatus taskStatusBefore, TaskStatus taskStatusNow) { + public TaskHistory(String description, TaskStatus taskStatusBefore, TaskStatus taskStatusNow, CountedEntities countedEntities) { + this.countedEntities = countedEntities; this.description = description; this.taskStatusBefore = taskStatusBefore; this.taskStatusNow = taskStatusNow; } - public TaskHistory(String description, TaskStatus taskStatusBefore, TaskStatus taskStatusNow, Date timeEvent, Task task) { + public TaskHistory(String description, TaskStatus taskStatusBefore, TaskStatus taskStatusNow, Date timeEvent, Task task, CountedEntities countedEntities) { + this.countedEntities = countedEntities; this.description = description; this.taskStatusBefore = taskStatusBefore; this.taskStatusNow = taskStatusNow; @@ -144,6 +173,14 @@ public void setIdTask(Long idTask) { this.idTask = idTask; } + public CountedEntities getCountedEntities() { + return countedEntities; + } + + public void setCountedEntities(CountedEntities countedEntities) { + this.countedEntities = countedEntities; + } + @Override public int compareTo(TaskHistory other) { return getUniqueId().compareTo(other.getUniqueId()); diff --git a/src/main/java/org/woehlke/twitterwall/oodm/entities/parts/TaskType.java b/src/main/java/org/woehlke/twitterwall/oodm/entities/parts/TaskType.java index cad6d7b7..525efcb9 100644 --- a/src/main/java/org/woehlke/twitterwall/oodm/entities/parts/TaskType.java +++ b/src/main/java/org/woehlke/twitterwall/oodm/entities/parts/TaskType.java @@ -13,5 +13,6 @@ public enum TaskType { FETCH_USERS_FROM_DEFINED_USER_LIST, CONTROLLER_GET_TESTDATA_TWEETS, CONTROLLER_GET_TESTDATA_USER, - CONTROLLER_ADD_USER_FOR_SCREEN_NAME + CONTROLLER_ADD_USER_FOR_SCREEN_NAME, + CONTROLLER_CREATE_IMPRINT_USER } diff --git a/src/main/java/org/woehlke/twitterwall/oodm/service/TaskService.java b/src/main/java/org/woehlke/twitterwall/oodm/service/TaskService.java index 7b0e1f96..fbf6d526 100644 --- a/src/main/java/org/woehlke/twitterwall/oodm/service/TaskService.java +++ b/src/main/java/org/woehlke/twitterwall/oodm/service/TaskService.java @@ -1,6 +1,7 @@ package org.woehlke.twitterwall.oodm.service; import org.woehlke.twitterwall.oodm.entities.Task; +import org.woehlke.twitterwall.oodm.entities.parts.CountedEntities; import org.woehlke.twitterwall.oodm.entities.parts.TaskType; import org.woehlke.twitterwall.oodm.service.common.DomainObjectMinimalService; @@ -9,24 +10,25 @@ */ public interface TaskService extends DomainObjectMinimalService { - Task create(String msg,TaskType type); + Task findById(long id); - Task done(Task task); + Task create(String msg,TaskType type,CountedEntities countedEntities); - Task error(Task task, Exception e); + Task done(Task task,CountedEntities countedEntities); - Task error(Task task, Exception e, String msg); + Task error(Task task, Exception e,CountedEntities countedEntities); - Task warn(Task task, Exception e); + Task error(Task task, Exception e, String msg,CountedEntities countedEntities); - Task warn(Task task, Exception e, String msg); + Task warn(Task task, Exception e,CountedEntities countedEntities); - Task event(Task task, String msg); + Task warn(Task task, Exception e, String msg,CountedEntities countedEntities); - Task warn(Task task, String msg); + Task event(Task task, String msg,CountedEntities countedEntities); - Task error(Task task, String msg); + Task warn(Task task, String msg,CountedEntities countedEntities); - Task findById(long id); + Task error(Task task, String msg,CountedEntities countedEntities); + Task start(Task task,CountedEntities countedEntities); } diff --git a/src/main/java/org/woehlke/twitterwall/oodm/service/impl/TaskServiceImpl.java b/src/main/java/org/woehlke/twitterwall/oodm/service/impl/TaskServiceImpl.java index 0cf2c681..0a8684f3 100644 --- a/src/main/java/org/woehlke/twitterwall/oodm/service/impl/TaskServiceImpl.java +++ b/src/main/java/org/woehlke/twitterwall/oodm/service/impl/TaskServiceImpl.java @@ -16,7 +16,6 @@ import org.woehlke.twitterwall.oodm.repositories.TaskHistoryRepository; import org.woehlke.twitterwall.oodm.repositories.TaskRepository; import org.woehlke.twitterwall.oodm.service.TaskService; -import org.woehlke.twitterwall.scheduled.service.persist.CountedEntitiesService; import java.util.Date; @@ -31,14 +30,11 @@ public class TaskServiceImpl implements TaskService { private final TaskRepository taskRepository; - private final CountedEntitiesService countedEntitiesService; - private final TaskHistoryRepository taskHistoryRepository; @Autowired - public TaskServiceImpl(TaskRepository taskRepository, CountedEntitiesService countedEntitiesService, TaskHistoryRepository taskHistoryRepository) { + public TaskServiceImpl(TaskRepository taskRepository, TaskHistoryRepository taskHistoryRepository) { this.taskRepository = taskRepository; - this.countedEntitiesService = countedEntitiesService; this.taskHistoryRepository = taskHistoryRepository; } @@ -53,164 +49,137 @@ public long count() { } @Override - public Task create(String msg,TaskType type) { - CountedEntities countedEntities = this.countedEntitiesService.countAll(); + public Task findById(long id) { + return taskRepository.findOne(id); + } + + @Override + public Task create(String msg,TaskType type,CountedEntities countedEntities) { Task task = new Task("start: "+msg,type); - task.setCountedEntitiesAtStart(countedEntities); - TaskHistory event = new TaskHistory("start: "+msg,TaskStatus.READY, TaskStatus.RUNNING); task.setTaskStatus(TaskStatus.RUNNING); - task.setTimeStarted(new Date()); task.setTimeLastUpdate(new Date()); - task.addHistory(event); - event.setTask(task); task = taskRepository.save(task); + TaskHistory event = new TaskHistory("create: "+msg,TaskStatus.READY, TaskStatus.READY,countedEntities); event.setIdTask(task.getId()); event.setTask(task); - task.addHistory(event); event = taskHistoryRepository.save(event); log.debug(task.toString()); return task; } @Override - public Task done(Task task) { - CountedEntities countedEntities = this.countedEntitiesService.countAll(); - task.setCountedEntitiesAtFinish(countedEntities); - TaskHistory event = new TaskHistory("done",task.getTaskStatus(),TaskStatus.FINISHED); - event.setIdTask(task.getId()); + public Task done(Task task,CountedEntities countedEntities) { task.setTaskStatus(TaskStatus.FINISHED); task.setTimeLastUpdate(new Date()); - event = taskHistoryRepository.save(event); - task.addHistory(event); task = taskRepository.save(task); + TaskHistory event = new TaskHistory("done",task.getTaskStatus(),TaskStatus.FINISHED,countedEntities); + event.setIdTask(task.getId()); event.setTask(task); - task.addHistory(event); event = taskHistoryRepository.save(event); log.debug(task.toString()); return task; } @Override - public Task error(Task task,Exception e) { - TaskHistory event = new TaskHistory("error: "+e.getMessage(),task.getTaskStatus(),TaskStatus.ERROR); - event.setIdTask(task.getId()); + public Task error(Task task,Exception e,CountedEntities countedEntities) { task.setTaskStatus(TaskStatus.ERROR); task.setTimeLastUpdate(new Date()); - task.addHistory(event); - event = taskHistoryRepository.save(event); - task.addHistory(event); task = taskRepository.save(task); + TaskHistory event = new TaskHistory("error: "+e.getMessage(),task.getTaskStatus(),TaskStatus.ERROR,countedEntities); + event.setIdTask(task.getId()); event.setTask(task); - task.addHistory(event); event = taskHistoryRepository.save(event); log.debug(task.toString()); return task; } @Override - public Task error(Task task, Exception e, String msg) { - TaskHistory event = new TaskHistory(msg+", error: "+e.getMessage(),task.getTaskStatus(),TaskStatus.ERROR); - event.setIdTask(task.getId()); + public Task error(Task task, Exception e, String msg,CountedEntities countedEntities) { task.setTaskStatus(TaskStatus.ERROR); task.setTimeLastUpdate(new Date()); - task.addHistory(event); - event = taskHistoryRepository.save(event); - task.addHistory(event); task = taskRepository.save(task); + TaskHistory event = new TaskHistory(msg+", error: "+e.getMessage(),task.getTaskStatus(),TaskStatus.ERROR,countedEntities); + event.setIdTask(task.getId()); event.setTask(task); - task.addHistory(event); event = taskHistoryRepository.save(event); log.debug(task.toString()); return task; } @Override - public Task warn(Task task, Exception e) { - TaskHistory event = new TaskHistory("warn: "+e.getMessage(),task.getTaskStatus(),TaskStatus.WARN); - event.setIdTask(task.getId()); + public Task warn(Task task, Exception e,CountedEntities countedEntities) { task.setTaskStatus(TaskStatus.WARN); task.setTimeLastUpdate(new Date()); - task.addHistory(event); - event = taskHistoryRepository.save(event); - task.addHistory(event); task = taskRepository.save(task); + TaskHistory event = new TaskHistory("warn: "+e.getMessage(),task.getTaskStatus(),TaskStatus.WARN,countedEntities); + event.setIdTask(task.getId()); event.setTask(task); - task.addHistory(event); event = taskHistoryRepository.save(event); log.debug(task.toString()); return task; } @Override - public Task warn(Task task, Exception e, String msg) { - TaskHistory event = new TaskHistory("warn: "+msg+", "+e.getMessage(),task.getTaskStatus(),TaskStatus.WARN); - event.setIdTask(task.getId()); + public Task warn(Task task, Exception e, String msg,CountedEntities countedEntities) { task.setTaskStatus(TaskStatus.WARN); task.setTimeLastUpdate(new Date()); - task.addHistory(event); - event = taskHistoryRepository.save(event); - task.addHistory(event); task = taskRepository.save(task); + TaskHistory event = new TaskHistory("warn: "+msg+", "+e.getMessage(),task.getTaskStatus(),TaskStatus.WARN,countedEntities); + event.setIdTask(task.getId()); event.setTask(task); - task.addHistory(event); event = taskHistoryRepository.save(event); log.debug(task.toString()); return task; } @Override - public Task event(Task task, String msg) { - TaskHistory event = new TaskHistory("event: "+msg,task.getTaskStatus(),task.getTaskStatus()); - event.setIdTask(task.getId()); + public Task event(Task task, String msg,CountedEntities countedEntities) { task.setTimeLastUpdate(new Date()); - task.addHistory(event); - event = taskHistoryRepository.save(event); - task.addHistory(event); task = taskRepository.save(task); + TaskHistory event = new TaskHistory("event: "+msg,task.getTaskStatus(),task.getTaskStatus(),countedEntities); + event.setIdTask(task.getId()); event.setTask(task); - task.addHistory(event); event = taskHistoryRepository.save(event); log.debug(task.toString()); return task; } @Override - public Task warn(Task task, String msg) { - TaskHistory event = new TaskHistory("warn: "+msg,task.getTaskStatus(),TaskStatus.WARN); - event.setIdTask(task.getId()); + public Task warn(Task task, String msg,CountedEntities countedEntities) { task.setTaskStatus(TaskStatus.WARN); task.setTimeLastUpdate(new Date()); - task.addHistory(event); - event = taskHistoryRepository.save(event); - task.addHistory(event); task = taskRepository.save(task); + TaskHistory event = new TaskHistory("warn: "+msg,task.getTaskStatus(),TaskStatus.WARN,countedEntities); + event.setIdTask(task.getId()); event.setTask(task); - task.addHistory(event); event = taskHistoryRepository.save(event); log.debug(task.toString()); return task; } @Override - public Task error(Task task, String msg) { - TaskHistory event = new TaskHistory("error: "+msg,task.getTaskStatus(),TaskStatus.ERROR); - event.setIdTask(task.getId()); - task.setTimeLastUpdate(new Date()); + public Task error(Task task, String msg,CountedEntities countedEntities) { task.setTaskStatus(TaskStatus.ERROR); task.setTimeLastUpdate(new Date()); - task.addHistory(event); - event = taskHistoryRepository.save(event); - task.addHistory(event); task = taskRepository.save(task); + TaskHistory event = new TaskHistory("error: "+msg,task.getTaskStatus(),TaskStatus.ERROR,countedEntities); + event.setIdTask(task.getId()); event.setTask(task); - task.addHistory(event); event = taskHistoryRepository.save(event); log.debug(task.toString()); return task; } @Override - public Task findById(long id) { - return taskRepository.findOne(id); + public Task start(Task task,CountedEntities countedEntities) { + task.setTaskStatus(TaskStatus.RUNNING); + task.setTimeLastUpdate(new Date()); + task = taskRepository.save(task); + TaskHistory event = new TaskHistory("start",task.getTaskStatus(),TaskStatus.RUNNING,countedEntities); + event.setIdTask(task.getId()); + event.setTask(task); + event = taskHistoryRepository.save(event); + log.debug(task.toString()); + return task; } } diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/CreateImprintUser.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/CreateImprintUser.java new file mode 100644 index 00000000..56bb8558 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/CreateImprintUser.java @@ -0,0 +1,10 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint; + +import org.springframework.messaging.Message; +import org.woehlke.twitterwall.scheduled.mq.msg.TaskMessage; +import org.woehlke.twitterwall.scheduled.mq.msg.TwitterProfileMessage; + +public interface CreateImprintUser { + + Message createImprintUser(Message mqMessage); +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/CreateTestDataForTweets.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/CreateTestDataForTweets.java new file mode 100644 index 00000000..024a0ca3 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/CreateTestDataForTweets.java @@ -0,0 +1,13 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint; + +import org.springframework.messaging.Message; +import org.woehlke.twitterwall.scheduled.mq.msg.TaskMessage; +import org.woehlke.twitterwall.scheduled.mq.msg.TweetFromTwitter; + +import java.util.List; + +public interface CreateTestDataForTweets { + + List splitMessage(Message message); + +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/CreateTestDataForUsers.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/CreateTestDataForUsers.java new file mode 100644 index 00000000..67195baa --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/CreateTestDataForUsers.java @@ -0,0 +1,12 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint; + +import org.springframework.messaging.Message; +import org.woehlke.twitterwall.scheduled.mq.msg.TaskMessage; +import org.woehlke.twitterwall.scheduled.mq.msg.TwitterProfileMessage; + +import java.util.List; + +public interface CreateTestDataForUsers { + + List splitMessage(Message message); +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/FetchDataFromDatabase.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/FetchDataFromDatabase.java new file mode 100644 index 00000000..610f6566 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/FetchDataFromDatabase.java @@ -0,0 +1,13 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint; + +import org.springframework.messaging.Message; +import org.woehlke.twitterwall.scheduled.mq.msg.TaskMessage; + +public interface FetchDataFromDatabase { + + void updateTweets(Message mqMessage); + + void updateUserProfiles(Message mqMessage); + + void updateUserProfilesFromMentions(Message mqMessage); +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/FetchDataFromRemoteTwitterApi.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/FetchDataFromRemoteTwitterApi.java new file mode 100644 index 00000000..4a0484b8 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/FetchDataFromRemoteTwitterApi.java @@ -0,0 +1,13 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint; + +import org.springframework.messaging.Message; +import org.woehlke.twitterwall.scheduled.mq.msg.TaskMessage; + +public interface FetchDataFromRemoteTwitterApi { + + void fetchTweetsFromTwitterSearch(Message mqMessage); + + void fetchUsersFromDefinedUserList(Message mqMessage); + + void createTestDataForUser(Message mqMessage); +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/FetchTweetsFromTwitterSearch.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/FetchTweetsFromTwitterSearch.java new file mode 100644 index 00000000..9cfa4a5a --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/FetchTweetsFromTwitterSearch.java @@ -0,0 +1,12 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint; + +import org.springframework.messaging.Message; +import org.woehlke.twitterwall.scheduled.mq.msg.TaskMessage; +import org.woehlke.twitterwall.scheduled.mq.msg.TweetFromTwitter; + +import java.util.List; + +public interface FetchTweetsFromTwitterSearch { + + List splitMessage(Message message); +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/FetchUsersFromDefinedUserList.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/FetchUsersFromDefinedUserList.java new file mode 100644 index 00000000..5e99ff75 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/FetchUsersFromDefinedUserList.java @@ -0,0 +1,12 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint; + +import org.springframework.messaging.Message; +import org.woehlke.twitterwall.scheduled.mq.msg.TaskMessage; +import org.woehlke.twitterwall.scheduled.mq.msg.TwitterProfileMessage; + +import java.util.List; + +public interface FetchUsersFromDefinedUserList { + + List splitMessage(Message message); +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/StartTask.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/StartTask.java new file mode 100644 index 00000000..7a344693 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/StartTask.java @@ -0,0 +1,26 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint; + +import org.woehlke.twitterwall.oodm.entities.Tweet; +import org.woehlke.twitterwall.oodm.entities.User; + +import java.util.List; + +public interface StartTask { + + void fetchTweetsFromTwitterSearch(); + + void updateTweets(); + + void updateUserProfiles(); + + void updateUserProfilesFromMentions(); + + void fetchUsersFromDefinedUserList(); + + User createImprintUser(); + + List createTestDataForUser(); + + List createTestDataForTweets(); + +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/TweetFinisher.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/TweetFinisher.java new file mode 100644 index 00000000..07a5145e --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/TweetFinisher.java @@ -0,0 +1,11 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint; + +import org.springframework.messaging.Message; +import org.woehlke.twitterwall.scheduled.mq.msg.TweetFromTwitter; +import org.woehlke.twitterwall.scheduled.mq.msg.TweetResultList; + +import java.util.List; + +public interface TweetFinisher { + TweetResultList finish(Message> incomingMessageList); +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/TweetPersistor.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/TweetPersistor.java new file mode 100644 index 00000000..921ebdf5 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/TweetPersistor.java @@ -0,0 +1,10 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint; + +import org.springframework.messaging.Message; +import org.woehlke.twitterwall.scheduled.mq.msg.TweetFromTwitter; +import org.woehlke.twitterwall.scheduled.mq.msg.TweetMsg; + +public interface TweetPersistor { + + Message persistTweet(Message incomingUserMessage); +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/TweetTransformator.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/TweetTransformator.java new file mode 100644 index 00000000..25820d77 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/TweetTransformator.java @@ -0,0 +1,9 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint; + +import org.springframework.messaging.Message; +import org.woehlke.twitterwall.scheduled.mq.msg.TweetFromTwitter; + +public interface TweetTransformator { + + Message transformTweet(Message message); +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/UserFinisher.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/UserFinisher.java new file mode 100644 index 00000000..19b3c5cf --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/UserFinisher.java @@ -0,0 +1,12 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint; + +import org.springframework.messaging.Message; +import org.woehlke.twitterwall.scheduled.mq.msg.UserMessage; +import org.woehlke.twitterwall.scheduled.mq.msg.UserResultList; + +import java.util.List; + +public interface UserFinisher { + + UserResultList finish(Message> incomingMessageList); +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/UserPersistor.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/UserPersistor.java new file mode 100644 index 00000000..2a145963 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/UserPersistor.java @@ -0,0 +1,10 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint; + +import org.springframework.messaging.Message; +import org.woehlke.twitterwall.oodm.entities.User; +import org.woehlke.twitterwall.scheduled.mq.msg.UserMessage; + +public interface UserPersistor { + + UserMessage persistUser(Message incomingUserMessage); +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/UserTransformator.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/UserTransformator.java new file mode 100644 index 00000000..1628d9d4 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/UserTransformator.java @@ -0,0 +1,10 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint; + +import org.springframework.messaging.Message; +import org.woehlke.twitterwall.scheduled.mq.msg.TwitterProfileMessage; +import org.woehlke.twitterwall.scheduled.mq.msg.UserMessage; + +public interface UserTransformator { + + Message transformUser(Message mqMessage); +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/CreateImprintUserImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/CreateImprintUserImpl.java new file mode 100644 index 00000000..a8f457f4 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/CreateImprintUserImpl.java @@ -0,0 +1,41 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.integration.support.MessageBuilder; +import org.springframework.messaging.Message; +import org.springframework.social.twitter.api.TwitterProfile; +import org.springframework.stereotype.Component; +import org.woehlke.twitterwall.conf.TwitterwallFrontendProperties; +import org.woehlke.twitterwall.scheduled.mq.endoint.CreateImprintUser; +import org.woehlke.twitterwall.scheduled.mq.msg.TaskMessage; +import org.woehlke.twitterwall.scheduled.mq.msg.TwitterProfileMessage; +import org.woehlke.twitterwall.scheduled.service.backend.TwitterApiService; + +@Component("mqCreateImprintUser") +public class CreateImprintUserImpl implements CreateImprintUser { + + private final TwitterApiService twitterApiService; + + private final TwitterwallFrontendProperties twitterwallFrontendProperties; + + @Autowired + public CreateImprintUserImpl(TwitterApiService twitterApiService, TwitterwallFrontendProperties twitterwallFrontendProperties) { + this.twitterApiService = twitterApiService; + this.twitterwallFrontendProperties = twitterwallFrontendProperties; + } + + @Override + public Message createImprintUser(Message mqMessageIn) { + String logMsg = "createImprintUser: "; + TaskMessage receivedMessage = mqMessageIn.getPayload(); + String screenName = twitterwallFrontendProperties.getImprintScreenName(); + TwitterProfile twitterProfile = twitterApiService.getUserProfileForScreenName(screenName); + TwitterProfileMessage outMsg = new TwitterProfileMessage(receivedMessage,screenName,twitterProfile); + Message mqMessageOut = MessageBuilder.withPayload(outMsg).copyHeaders(mqMessageIn.getHeaders()) + .setHeader("twitter_profile_id", twitterProfile.getId()) + .build(); + return mqMessageOut; + } +} + + diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/CreateTestDataForTweetsImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/CreateTestDataForTweetsImpl.java new file mode 100644 index 00000000..418316a5 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/CreateTestDataForTweetsImpl.java @@ -0,0 +1,54 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.Message; +import org.springframework.social.twitter.api.Tweet; +import org.springframework.stereotype.Component; +import org.woehlke.twitterwall.conf.TwitterwallSchedulerProperties; +import org.woehlke.twitterwall.oodm.entities.Task; +import org.woehlke.twitterwall.oodm.entities.parts.CountedEntities; +import org.woehlke.twitterwall.oodm.service.TaskService; +import org.woehlke.twitterwall.scheduled.mq.endoint.CreateTestDataForTweets; +import org.woehlke.twitterwall.scheduled.mq.msg.TaskMessage; +import org.woehlke.twitterwall.scheduled.mq.msg.TweetFromTwitter; +import org.woehlke.twitterwall.scheduled.service.backend.TwitterApiService; +import org.woehlke.twitterwall.scheduled.service.persist.CountedEntitiesService; + +import java.util.ArrayList; +import java.util.List; + +@Component("mqCreateTestDataForTweets") +public class CreateTestDataForTweetsImpl implements CreateTestDataForTweets { + + private final TwitterwallSchedulerProperties twitterwallSchedulerProperties; + + private final TwitterApiService twitterApiService; + + private final TaskService taskService; + + private final CountedEntitiesService countedEntitiesService; + + @Autowired + public CreateTestDataForTweetsImpl(TwitterwallSchedulerProperties twitterwallSchedulerProperties, TwitterApiService twitterApiService, TaskService taskService, CountedEntitiesService countedEntitiesService) { + this.twitterwallSchedulerProperties = twitterwallSchedulerProperties; + this.twitterApiService = twitterApiService; + this.taskService = taskService; + this.countedEntitiesService = countedEntitiesService; + } + + @Override + public List splitMessage(Message message) { + CountedEntities countedEntities = countedEntitiesService.countAll(); + List tweets = new ArrayList<>(); + TaskMessage msgIn = message.getPayload(); + long id = msgIn.getTaskId(); + Task task = taskService.findById(id); + task = taskService.start(task,countedEntities); + for (long idTwitter : twitterwallSchedulerProperties.getFacade().getIdTwitterToFetchForTweetTest()) { + Tweet tweet = twitterApiService.findOneTweetById(idTwitter); + TweetFromTwitter tweetMsg = new TweetFromTwitter(task.getId(),tweet); + tweets.add(tweetMsg); + } + return tweets; + } +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/CreateTestDataForUsersImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/CreateTestDataForUsersImpl.java new file mode 100644 index 00000000..754db408 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/CreateTestDataForUsersImpl.java @@ -0,0 +1,53 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint.impl; + +import org.springframework.messaging.Message; +import org.springframework.social.twitter.api.TwitterProfile; +import org.springframework.stereotype.Component; +import org.woehlke.twitterwall.conf.TwitterwallSchedulerProperties; +import org.woehlke.twitterwall.oodm.entities.Task; +import org.woehlke.twitterwall.oodm.entities.parts.CountedEntities; +import org.woehlke.twitterwall.oodm.service.TaskService; +import org.woehlke.twitterwall.scheduled.mq.endoint.CreateTestDataForUsers; +import org.woehlke.twitterwall.scheduled.mq.msg.TaskMessage; +import org.woehlke.twitterwall.scheduled.mq.msg.TwitterProfileMessage; +import org.woehlke.twitterwall.scheduled.service.backend.TwitterApiService; +import org.woehlke.twitterwall.scheduled.service.persist.CountedEntitiesService; + +import java.util.ArrayList; +import java.util.List; + +@Component("mqCreateTestDataForUsers") +public class CreateTestDataForUsersImpl implements CreateTestDataForUsers { + + private final TwitterwallSchedulerProperties twitterwallSchedulerProperties; + + private final TwitterApiService twitterApiService; + + private final TaskService taskService; + + private final CountedEntitiesService countedEntitiesService; + + public CreateTestDataForUsersImpl(TwitterwallSchedulerProperties twitterwallSchedulerProperties, TwitterApiService twitterApiService, TaskService taskService, CountedEntitiesService countedEntitiesService) { + this.twitterwallSchedulerProperties = twitterwallSchedulerProperties; + this.twitterApiService = twitterApiService; + this.taskService = taskService; + this.countedEntitiesService = countedEntitiesService; + } + + @Override + public List splitMessage(Message message) { + CountedEntities countedEntities = countedEntitiesService.countAll(); + List userProfileList = new ArrayList<>(); + TaskMessage msgIn = message.getPayload(); + long id = msgIn.getTaskId(); + Task task = taskService.findById(id); + task = taskService.start(task,countedEntities); + List userIdList = twitterwallSchedulerProperties.getFacade().getScreenNamesToFetchForUserControllerTest(); + for (String screenName : userIdList) { + TwitterProfile userProfile = twitterApiService.getUserProfileForScreenName(screenName); + TwitterProfileMessage userMsg = new TwitterProfileMessage(msgIn,userProfile); + userProfileList.add(userMsg); + } + return userProfileList; + } +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/FetchDataFromDatabaseImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/FetchDataFromDatabaseImpl.java new file mode 100644 index 00000000..2191993e --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/FetchDataFromDatabaseImpl.java @@ -0,0 +1,62 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint.impl; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.Message; +import org.springframework.stereotype.Component; +import org.woehlke.twitterwall.oodm.entities.Task; +import org.woehlke.twitterwall.oodm.entities.parts.CountedEntities; +import org.woehlke.twitterwall.oodm.service.TaskService; +import org.woehlke.twitterwall.scheduled.mq.endoint.FetchDataFromDatabase; +import org.woehlke.twitterwall.scheduled.mq.msg.TaskMessage; +import org.woehlke.twitterwall.scheduled.service.persist.CountedEntitiesService; + +@Component("mqFetchDataFromDatabase") +public class FetchDataFromDatabaseImpl implements FetchDataFromDatabase { + + private static final Logger log = LoggerFactory.getLogger(FetchDataFromDatabaseImpl.class); + + private final TaskService taskService; + + private final CountedEntitiesService countedEntitiesService; + + @Autowired + public FetchDataFromDatabaseImpl(TaskService taskService, CountedEntitiesService countedEntitiesService) { + this.taskService = taskService; + this.countedEntitiesService = countedEntitiesService; + } + + + private void react(String logMsg,Message mqMessage){ + CountedEntities countedEntities = countedEntitiesService.countAll(); + TaskMessage receivedMessage = mqMessage.getPayload(); + Task task = taskService.findById(receivedMessage.getTaskId()); + taskService.start(task,countedEntities); + log.info(logMsg+"##############################################"); + log.info(logMsg+"##############################################"); + log.info(logMsg+"##############################################"); + log.info(logMsg+"received: "+mqMessage.getPayload().toString()); + log.info(logMsg+"##############################################"); + log.info(logMsg+"##############################################"); + log.info(logMsg+"##############################################"); + } + + @Override + public void updateTweets(Message mqMessage) { + String logMsg = "updateTweets: "; + react(logMsg,mqMessage); + } + + @Override + public void updateUserProfiles(Message mqMessage) { + String logMsg = "updateUserProfiles: "; + react(logMsg,mqMessage); + } + + @Override + public void updateUserProfilesFromMentions(Message mqMessage) { + String logMsg = "updateUserProfilesFromMentions: "; + react(logMsg,mqMessage); + } +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/FetchDataFromRemoteTwitterApiImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/FetchDataFromRemoteTwitterApiImpl.java new file mode 100644 index 00000000..0ce240ac --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/FetchDataFromRemoteTwitterApiImpl.java @@ -0,0 +1,70 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint.impl; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.Message; +import org.springframework.stereotype.Component; +import org.woehlke.twitterwall.conf.TwitterwallFrontendProperties; +import org.woehlke.twitterwall.oodm.entities.Task; +import org.woehlke.twitterwall.oodm.entities.parts.CountedEntities; +import org.woehlke.twitterwall.oodm.service.TaskService; +import org.woehlke.twitterwall.scheduled.service.backend.TwitterApiService; +import org.woehlke.twitterwall.scheduled.mq.endoint.FetchDataFromRemoteTwitterApi; +import org.woehlke.twitterwall.scheduled.mq.msg.TaskMessage; +import org.woehlke.twitterwall.scheduled.service.persist.CountedEntitiesService; + +@Component("mqFetchDataFromRemoteTwitterApi") +public class FetchDataFromRemoteTwitterApiImpl implements FetchDataFromRemoteTwitterApi { + + private static final Logger log = LoggerFactory.getLogger(FetchDataFromRemoteTwitterApiImpl.class); + + private final TaskService taskService; + + private final TwitterApiService twitterApiService; + + private final TwitterwallFrontendProperties twitterwallFrontendProperties; + + private final CountedEntitiesService countedEntitiesService; + + @Autowired + public FetchDataFromRemoteTwitterApiImpl(TaskService taskService, TwitterApiService twitterApiService, TwitterwallFrontendProperties twitterwallFrontendProperties, CountedEntitiesService countedEntitiesService) { + this.taskService = taskService; + this.twitterApiService = twitterApiService; + this.twitterwallFrontendProperties = twitterwallFrontendProperties; + this.countedEntitiesService = countedEntitiesService; + } + + private void react(String logMsg,Message mqMessage){ + CountedEntities countedEntities = countedEntitiesService.countAll(); + TaskMessage receivedMessage = mqMessage.getPayload(); + Task task = taskService.findById(receivedMessage.getTaskId()); + taskService.start(task,countedEntities); + log.info(logMsg+"##############################################"); + log.info(logMsg+"##############################################"); + log.info(logMsg+"##############################################"); + log.info(logMsg+"received: "+mqMessage.getPayload().toString()); + log.info(logMsg+"##############################################"); + log.info(logMsg+"##############################################"); + log.info(logMsg+"##############################################"); + } + + @Override + public void fetchTweetsFromTwitterSearch(Message mqMessage) { + String logMsg = "fetchTweetsFromTwitterSearch: "; + this.react(logMsg, mqMessage); + } + + @Override + public void fetchUsersFromDefinedUserList(Message mqMessage) { + String logMsg = "fetchUsersFromDefinedUserList: "; + this.react(logMsg, mqMessage); + } + + @Override + public void createTestDataForUser(Message mqMessage) { + String logMsg = "createTestDataForUser: "; + this.react(logMsg, mqMessage); + } + +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/FetchTweetsFromTwitterSearchImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/FetchTweetsFromTwitterSearchImpl.java new file mode 100644 index 00000000..7dcdadb4 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/FetchTweetsFromTwitterSearchImpl.java @@ -0,0 +1,50 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.Message; +import org.springframework.social.twitter.api.Tweet; +import org.springframework.stereotype.Component; +import org.woehlke.twitterwall.oodm.entities.Task; +import org.woehlke.twitterwall.oodm.entities.parts.CountedEntities; +import org.woehlke.twitterwall.oodm.service.TaskService; +import org.woehlke.twitterwall.scheduled.mq.endoint.FetchTweetsFromTwitterSearch; +import org.woehlke.twitterwall.scheduled.mq.msg.TaskMessage; +import org.woehlke.twitterwall.scheduled.mq.msg.TweetFromTwitter; +import org.woehlke.twitterwall.scheduled.service.backend.TwitterApiService; +import org.woehlke.twitterwall.scheduled.service.persist.CountedEntitiesService; + +import java.util.ArrayList; +import java.util.List; + +@Component("mqFetchTweetsFromTwitterSearch") +public class FetchTweetsFromTwitterSearchImpl implements FetchTweetsFromTwitterSearch { + + private final TwitterApiService twitterApiService; + + private final TaskService taskService; + + private final CountedEntitiesService countedEntitiesService; + + @Autowired + public FetchTweetsFromTwitterSearchImpl(TwitterApiService twitterApiService, TaskService taskService, CountedEntitiesService countedEntitiesService) { + this.twitterApiService = twitterApiService; + this.taskService = taskService; + this.countedEntitiesService = countedEntitiesService; + } + + @Override + public List splitMessage(Message message) { + CountedEntities countedEntities = countedEntitiesService.countAll(); + List tweets = new ArrayList<>(); + TaskMessage msgIn = message.getPayload(); + long id = msgIn.getTaskId(); + Task task = taskService.findById(id); + task = taskService.start(task,countedEntities); + List twitterTweets = twitterApiService.findTweetsForSearchQuery(); + for (Tweet tweet: twitterTweets) { + TweetFromTwitter tweetMsg = new TweetFromTwitter(task.getId(),tweet); + tweets.add(tweetMsg); + } + return tweets; + } +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/FetchUsersFromDefinedUserListImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/FetchUsersFromDefinedUserListImpl.java new file mode 100644 index 00000000..29b7ede0 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/FetchUsersFromDefinedUserListImpl.java @@ -0,0 +1,58 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint.impl; + +import org.springframework.messaging.Message; +import org.springframework.social.twitter.api.TwitterProfile; +import org.springframework.stereotype.Component; +import org.woehlke.twitterwall.conf.TwitterwallFrontendProperties; +import org.woehlke.twitterwall.conf.TwitterwallSchedulerProperties; +import org.woehlke.twitterwall.oodm.entities.Task; +import org.woehlke.twitterwall.oodm.entities.parts.CountedEntities; +import org.woehlke.twitterwall.oodm.service.TaskService; +import org.woehlke.twitterwall.scheduled.mq.endoint.FetchUsersFromDefinedUserList; +import org.woehlke.twitterwall.scheduled.mq.msg.TaskMessage; +import org.woehlke.twitterwall.scheduled.mq.msg.TwitterProfileMessage; +import org.woehlke.twitterwall.scheduled.service.backend.TwitterApiService; +import org.woehlke.twitterwall.scheduled.service.persist.CountedEntitiesService; + +import java.util.ArrayList; +import java.util.List; + +@Component("mqFetchUsersFromDefinedUserList") +public class FetchUsersFromDefinedUserListImpl implements FetchUsersFromDefinedUserList { + + private final TwitterwallSchedulerProperties twitterwallSchedulerProperties; + + private final TwitterwallFrontendProperties twitterwallFrontendProperties; + + private final TwitterApiService twitterApiService; + + private final TaskService taskService; + + private final CountedEntitiesService countedEntitiesService; + + public FetchUsersFromDefinedUserListImpl(TwitterwallSchedulerProperties twitterwallSchedulerProperties, TwitterwallFrontendProperties twitterwallFrontendProperties, TwitterApiService twitterApiService, TaskService taskService, CountedEntitiesService countedEntitiesService) { + this.twitterwallSchedulerProperties = twitterwallSchedulerProperties; + this.twitterwallFrontendProperties = twitterwallFrontendProperties; + this.twitterApiService = twitterApiService; + this.taskService = taskService; + this.countedEntitiesService = countedEntitiesService; + } + + @Override + public List splitMessage(Message message) { + CountedEntities countedEntities = countedEntitiesService.countAll(); + List userProfileList = new ArrayList<>(); + TaskMessage msgIn = message.getPayload(); + long id = msgIn.getTaskId(); + Task task = taskService.findById(id); + task = taskService.start(task,countedEntities); + String imprintScreenName = twitterwallFrontendProperties.getImprintScreenName(); + String fetchUsersList = twitterwallSchedulerProperties.getFetchUserList().getName(); + List foundTwitterProfiles = twitterApiService.findUsersFromDefinedList(imprintScreenName,fetchUsersList); + for (TwitterProfile twitterProfile : foundTwitterProfiles) { + TwitterProfileMessage userMsg = new TwitterProfileMessage(msgIn,twitterProfile); + userProfileList.add(userMsg); + } + return userProfileList; + } +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/StartTaskImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/StartTaskImpl.java new file mode 100644 index 00000000..1603d389 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/StartTaskImpl.java @@ -0,0 +1,224 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.integration.core.MessagingTemplate; +import org.springframework.integration.support.MessageBuilder; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageChannel; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.woehlke.twitterwall.oodm.entities.Task; +import org.woehlke.twitterwall.oodm.entities.Tweet; +import org.woehlke.twitterwall.oodm.entities.User; +import org.woehlke.twitterwall.oodm.entities.parts.CountedEntities; +import org.woehlke.twitterwall.oodm.entities.parts.TaskType; +import org.woehlke.twitterwall.oodm.service.TaskService; +import org.woehlke.twitterwall.scheduled.mq.endoint.StartTask; +import org.woehlke.twitterwall.scheduled.mq.msg.TaskMessage; +import org.woehlke.twitterwall.scheduled.mq.msg.TweetResultList; +import org.woehlke.twitterwall.scheduled.mq.msg.UserMessage; +import org.woehlke.twitterwall.scheduled.mq.msg.UserResultList; +import org.woehlke.twitterwall.scheduled.service.persist.CountedEntitiesService; + +import java.util.ArrayList; +import java.util.List; + +@Component +public class StartTaskImpl implements StartTask { + + private final MessageChannel startTaskChannel; + + private final TaskService taskService; + + private final CountedEntitiesService countedEntitiesService; + + @Autowired + public StartTaskImpl(MessageChannel startTaskChannel, TaskService taskService, CountedEntitiesService countedEntitiesService) { + this.startTaskChannel = startTaskChannel; + this.taskService = taskService; + this.countedEntitiesService = countedEntitiesService; + } + + private void messageSender(final TaskType taskType) { + CountedEntities countedEntities = countedEntitiesService.countAll(); + Task task = taskService.create("Start via MQ", taskType,countedEntities); + TaskMessage taskMessage = new TaskMessage(task.getId(), taskType, task.getTimeStarted()); + Message mqMessage = MessageBuilder.withPayload(taskMessage) + .setHeader("task_id", task.getId()) + .setHeader("task_uid", task.getUniqueId()) + .setHeader("task_type", task.getTaskType()) + .build(); + MessagingTemplate mqTemplate = new MessagingTemplate(); + mqTemplate.send(startTaskChannel, mqMessage); + } + + + private final static long EINE_MINUTE = 60 * 1000; + + private final static long FUENF_MINUTEN = 5 * EINE_MINUTE; + + private final static long EINE_STUNDE = 60 * EINE_MINUTE; + + private final static long ZWOELF_STUNDEN = 12 * EINE_STUNDE; + + private final static long FIXED_RATE_FOR_SCHEDULAR_FETCH_TWEETS = EINE_STUNDE; + + private final static long FIXED_RATE_FOR_SCHEDULAR_UPDATE_USER = ZWOELF_STUNDEN; + + private final static long FIXED_RATE_FOR_SCHEDULAR_UPDATE_TWEETS = ZWOELF_STUNDEN; + + private final static long FIXED_RATE_FOR_SCHEDULAR_UPDATE_USER_BY_MENTION = EINE_STUNDE; + + private final static long FIXED_RATE_FOR_SCHEDULAR_FETCH_USER_LIST = ZWOELF_STUNDEN; + + + /* + twitterwall.mq.starttask.time.fetchTweetsFromTwitterSearch + twitterwall.mq.starttask.time.updateTweets + twitterwall.mq.starttask.time.updateUserProfiles + twitterwall.mq.starttask.time.updateUserProfilesFromMentions + twitterwall.mq.starttask.time.fetchUsersFromDefinedUserList + */ + + + @Override + @Scheduled(fixedRate = FIXED_RATE_FOR_SCHEDULAR_FETCH_TWEETS) + public void fetchTweetsFromTwitterSearch() { + TaskType taskType = TaskType.FETCH_TWEETS_FROM_TWITTER_SEARCH; + sendAndReceive(taskType); + } + + @Override + @Scheduled(fixedRate = FIXED_RATE_FOR_SCHEDULAR_UPDATE_TWEETS) + public void updateTweets() { + TaskType taskType = TaskType.UPDATE_TWEETS; + messageSender(taskType); + } + + @Override + @Scheduled(fixedRate = FIXED_RATE_FOR_SCHEDULAR_UPDATE_USER) + public void updateUserProfiles() { + TaskType taskType = TaskType.UPDATE_USER_PROFILES; + messageSender(taskType); + } + + @Override + @Scheduled(fixedRate = FIXED_RATE_FOR_SCHEDULAR_UPDATE_USER_BY_MENTION) + public void updateUserProfilesFromMentions() { + TaskType taskType = TaskType.UPDATE_USER_PROFILES_FROM_MENTIONS; + messageSender(taskType); + } + + private void sendAndReceive(TaskType taskType){ + CountedEntities countedEntities = countedEntitiesService.countAll(); + Task task = taskService.create("Start via MQ", taskType,countedEntities); + TaskMessage taskMessage = new TaskMessage(task.getId(), taskType, task.getTimeStarted()); + Message mqMessage = MessageBuilder.withPayload(taskMessage) + .setHeader("task_id", task.getId()) + .setHeader("task_uid", task.getUniqueId()) + .setHeader("task_type", task.getTaskType()) + .build(); + MessagingTemplate mqTemplate = new MessagingTemplate(); + Message returnedMessage = mqTemplate.sendAndReceive(startTaskChannel, mqMessage); + Object o = returnedMessage.getPayload(); + countedEntities = countedEntitiesService.countAll(); + if( o instanceof UserMessage){ + UserMessage msg = (UserMessage) o; + long taskId = msg.getTaskId(); + task = taskService.findById(taskId); + taskService.done(task,countedEntities); + } else { + taskService.error(task,"Wrong type of returnedMessage",countedEntities); + } + } + + @Override + @Scheduled(fixedRate = FIXED_RATE_FOR_SCHEDULAR_FETCH_USER_LIST) + public void fetchUsersFromDefinedUserList() { + TaskType taskType = TaskType.FETCH_USERS_FROM_DEFINED_USER_LIST; + sendAndReceive(taskType); + } + + @Override + public User createImprintUser() { + CountedEntities countedEntities = countedEntitiesService.countAll(); + TaskType taskType = TaskType.CONTROLLER_CREATE_IMPRINT_USER; + Task task = taskService.create("Start via MQ", taskType,countedEntities); + TaskMessage taskMessage = new TaskMessage(task.getId(), taskType, task.getTimeStarted()); + Message mqMessage = MessageBuilder.withPayload(taskMessage) + .setHeader("task_id", task.getId()) + .setHeader("task_uid", task.getUniqueId()) + .setHeader("task_type", task.getTaskType()) + .build(); + MessagingTemplate mqTemplate = new MessagingTemplate(); + Message returnedMessage = mqTemplate.sendAndReceive(startTaskChannel, mqMessage); + Object o = returnedMessage.getPayload(); + countedEntities = countedEntitiesService.countAll(); + if( o instanceof UserMessage){ + UserMessage msg = (UserMessage) o; + long taskId = msg.getTaskId(); + task = taskService.findById(taskId); + taskService.done(task,countedEntities); + return msg.getUser(); + } else { + taskService.error(task,"Wrong type of returnedMessage",countedEntities); + return null; + } + } + + @Override + public List createTestDataForUser() { + CountedEntities countedEntities = countedEntitiesService.countAll(); + TaskType taskType = TaskType.CONTROLLER_GET_TESTDATA_USER; + Task task = taskService.create("Start via MQ", taskType,countedEntities); + TaskMessage taskMessage = new TaskMessage(task.getId(), taskType, task.getTimeStarted()); + Message mqMessage = MessageBuilder.withPayload(taskMessage) + .setHeader("task_id", task.getId()) + .setHeader("task_uid", task.getUniqueId()) + .setHeader("task_type", task.getTaskType()) + .build(); + MessagingTemplate mqTemplate = new MessagingTemplate(); + Message returnedMessage = mqTemplate.sendAndReceive(startTaskChannel, mqMessage); + Object o = returnedMessage.getPayload(); + countedEntities = countedEntitiesService.countAll(); + if( o instanceof UserResultList){ + UserResultList result = (UserResultList) o; + long taskId = result.getTaskId(); + task = taskService.findById(taskId); + taskService.done(task,countedEntities); + return result.getUserList(); + } else { + taskService.error(task,"Wrong type of returnedMessage",countedEntities); + return new ArrayList<>(); + } + } + + @Override + public List createTestDataForTweets() { + CountedEntities countedEntities = countedEntitiesService.countAll(); + TaskType taskType = TaskType.CONTROLLER_GET_TESTDATA_TWEETS; + Task task = taskService.create("Start via MQ", taskType,countedEntities); + TaskMessage taskMessage = new TaskMessage(task.getId(), taskType, task.getTimeStarted()); + Message mqMessage = MessageBuilder.withPayload(taskMessage) + .setHeader("task_id", task.getId()) + .setHeader("task_uid", task.getUniqueId()) + .setHeader("task_type", task.getTaskType()) + .build(); + MessagingTemplate mqTemplate = new MessagingTemplate(); + Message returnedMessage = mqTemplate.sendAndReceive(startTaskChannel, mqMessage); + Object o = returnedMessage.getPayload(); + countedEntities = countedEntitiesService.countAll(); + if( o instanceof TweetResultList){ + TweetResultList result = (TweetResultList) o; + long taskId =result.getTaskId(); + task = taskService.findById(taskId); + taskService.done(task,countedEntities); + return result.getTweetList(); + } else { + taskService.error(task,"Wrong type of returnedMessage",countedEntities); + return new ArrayList<>(); + } + } +} + + diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/TweetFinisherImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/TweetFinisherImpl.java new file mode 100644 index 00000000..f330ede8 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/TweetFinisherImpl.java @@ -0,0 +1,26 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint.impl; + +import org.springframework.messaging.Message; +import org.springframework.stereotype.Component; +import org.woehlke.twitterwall.oodm.entities.Tweet; +import org.woehlke.twitterwall.scheduled.mq.endoint.TweetFinisher; +import org.woehlke.twitterwall.scheduled.mq.msg.TweetFromTwitter; +import org.woehlke.twitterwall.scheduled.mq.msg.TweetResultList; + +import java.util.ArrayList; +import java.util.List; + +@Component("mqTweetFinisher") +public class TweetFinisherImpl implements TweetFinisher { + + public TweetResultList finish(Message> incomingMessageList){ + List resultList = new ArrayList<>(); + long taskId = 0L; + for(TweetFromTwitter msg:incomingMessageList.getPayload()){ + resultList.add(msg.getTweet()); + taskId = msg.getTaskId(); + } + TweetResultList result = new TweetResultList(taskId,resultList); + return result; + } +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/TweetPersistorImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/TweetPersistorImpl.java new file mode 100644 index 00000000..2f3dd4a1 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/TweetPersistorImpl.java @@ -0,0 +1,40 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.integration.support.MessageBuilder; +import org.springframework.messaging.Message; +import org.springframework.stereotype.Component; +import org.woehlke.twitterwall.oodm.entities.Task; +import org.woehlke.twitterwall.oodm.entities.Tweet; +import org.woehlke.twitterwall.oodm.service.TaskService; +import org.woehlke.twitterwall.scheduled.mq.endoint.TweetPersistor; +import org.woehlke.twitterwall.scheduled.mq.msg.TweetFromTwitter; +import org.woehlke.twitterwall.scheduled.service.persist.StoreOneTweetPerform; + +@Component("mqTweetPersistor") +public class TweetPersistorImpl implements TweetPersistor { + + private final TaskService taskService; + + private final StoreOneTweetPerform storeOneTweetPerform; + + @Autowired + public TweetPersistorImpl(TaskService taskService, StoreOneTweetPerform storeOneTweetPerform) { + this.taskService = taskService; + this.storeOneTweetPerform = storeOneTweetPerform; + } + + @Override + public Message persistTweet(Message incomingUserMessage) { + TweetFromTwitter receivedMessage = incomingUserMessage.getPayload(); + long id = receivedMessage.getTaskId(); + Task task = taskService.findById(id); + Tweet tweet = storeOneTweetPerform.storeOneTweetPerform(receivedMessage.getTweet(),task); + TweetFromTwitter newTweetMsg = new TweetFromTwitter(id,tweet,receivedMessage.getTweetFromTwitter(),true,true); + Message mqMessageOut = MessageBuilder.withPayload(newTweetMsg) + .copyHeaders(incomingUserMessage.getHeaders()) + .setHeader("persisted",Boolean.TRUE) + .build(); + return mqMessageOut; + } +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/TweetTransformatorImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/TweetTransformatorImpl.java new file mode 100644 index 00000000..05988f38 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/TweetTransformatorImpl.java @@ -0,0 +1,40 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.integration.support.MessageBuilder; +import org.springframework.messaging.Message; +import org.springframework.stereotype.Component; +import org.woehlke.twitterwall.oodm.entities.Task; +import org.woehlke.twitterwall.oodm.entities.Tweet; +import org.woehlke.twitterwall.oodm.service.TaskService; +import org.woehlke.twitterwall.scheduled.mq.endoint.TweetTransformator; +import org.woehlke.twitterwall.scheduled.mq.msg.TweetFromTwitter; +import org.woehlke.twitterwall.scheduled.service.transform.TweetTransformService; + +@Component("mqTweetTransformator") +public class TweetTransformatorImpl implements TweetTransformator { + + private final TweetTransformService tweetTransformService; + + private final TaskService taskService; + + @Autowired + public TweetTransformatorImpl(TweetTransformService tweetTransformService, TaskService taskService) { + this.tweetTransformService = tweetTransformService; + this.taskService = taskService; + } + + @Override + public Message transformTweet(Message mqMessageIn) { + TweetFromTwitter inComingTweetMessage = mqMessageIn.getPayload(); + long taskId = inComingTweetMessage.getTaskId(); + Task task = taskService.findById(taskId); + Tweet myTweet = tweetTransformService.transform(inComingTweetMessage.getTweetFromTwitter(),task); + boolean tansformed = true; + TweetFromTwitter retVal = new TweetFromTwitter(taskId,myTweet,inComingTweetMessage.getTweetFromTwitter(),tansformed); + Message mqMessageOut = MessageBuilder.withPayload(retVal) + .copyHeaders(mqMessageIn.getHeaders()) + .build(); + return mqMessageOut; + } +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/UserFinisherImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/UserFinisherImpl.java new file mode 100644 index 00000000..1b12e187 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/UserFinisherImpl.java @@ -0,0 +1,31 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint.impl; + +import org.springframework.messaging.Message; +import org.springframework.stereotype.Component; +import org.woehlke.twitterwall.oodm.entities.User; +import org.woehlke.twitterwall.scheduled.mq.endoint.UserFinisher; +import org.woehlke.twitterwall.scheduled.mq.msg.UserMessage; +import org.woehlke.twitterwall.scheduled.mq.msg.UserResultList; + +import java.util.ArrayList; +import java.util.List; + +@Component("mqUserFinisher") +public class UserFinisherImpl implements UserFinisher { + + + @Override + public UserResultList finish(Message> incomingMessageList) { + long taskId = 0L; + List users = new ArrayList<>(); + List userMessageList = incomingMessageList.getPayload(); + if(userMessageList.size()>0) { + taskId = userMessageList.get(0).getTaskId(); + } + for(UserMessage msg :userMessageList){ + users.add(msg.getUser()); + } + UserResultList userResultList = new UserResultList(taskId,users); + return userResultList; + } +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/UserPersistorImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/UserPersistorImpl.java new file mode 100644 index 00000000..296f4d17 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/UserPersistorImpl.java @@ -0,0 +1,35 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.Message; +import org.springframework.stereotype.Component; +import org.woehlke.twitterwall.oodm.entities.Task; +import org.woehlke.twitterwall.oodm.entities.User; +import org.woehlke.twitterwall.oodm.service.TaskService; +import org.woehlke.twitterwall.scheduled.service.persist.StoreUserProcess; +import org.woehlke.twitterwall.scheduled.mq.endoint.UserPersistor; +import org.woehlke.twitterwall.scheduled.mq.msg.UserMessage; + +@Component("mqUserPersistor") +public class UserPersistorImpl implements UserPersistor { + + private final TaskService taskService; + + private final StoreUserProcess storeUserProcess; + + @Autowired + public UserPersistorImpl(TaskService taskService, StoreUserProcess storeUserProcess) { + this.taskService = taskService; + this.storeUserProcess = storeUserProcess; + } + + @Override + public UserMessage persistUser(Message incomingUserMessage) { + UserMessage receivedMessage = incomingUserMessage.getPayload(); + long id = receivedMessage.getTwitterProfileMessage().getTaskMessage().getTaskId(); + Task task = taskService.findById(id); + User user = storeUserProcess.storeUserProcess(receivedMessage.getUser(),task); + UserMessage userMessage = new UserMessage(user,id); + return userMessage; + } +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/UserTransformatorImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/UserTransformatorImpl.java new file mode 100644 index 00000000..7a7b548f --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/endoint/impl/UserTransformatorImpl.java @@ -0,0 +1,39 @@ +package org.woehlke.twitterwall.scheduled.mq.endoint.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.integration.support.MessageBuilder; +import org.springframework.messaging.Message; +import org.springframework.stereotype.Component; +import org.woehlke.twitterwall.oodm.entities.Task; +import org.woehlke.twitterwall.oodm.entities.User; +import org.woehlke.twitterwall.oodm.service.TaskService; +import org.woehlke.twitterwall.scheduled.service.transform.UserTransformService; +import org.woehlke.twitterwall.scheduled.mq.endoint.UserTransformator; +import org.woehlke.twitterwall.scheduled.mq.msg.TwitterProfileMessage; +import org.woehlke.twitterwall.scheduled.mq.msg.UserMessage; + +@Component("mqUserTransformator") +public class UserTransformatorImpl implements UserTransformator { + + private final UserTransformService userTransformService; + + private final TaskService taskService; + + @Autowired + public UserTransformatorImpl(UserTransformService userTransformService, TaskService taskService) { + this.userTransformService = userTransformService; + this.taskService = taskService; + } + + @Override + public Message transformUser(Message mqMessageIn) { + TwitterProfileMessage receivedMessage = mqMessageIn.getPayload(); + long id = receivedMessage.getTaskMessage().getTaskId(); + Task task = taskService.findById(id); + User user = userTransformService.transform(receivedMessage.getTwitterProfile(),task); + UserMessage outMsg = new UserMessage(receivedMessage,user); + Message mqMessageOut = MessageBuilder.withPayload(outMsg).copyHeaders(mqMessageIn.getHeaders()) + .build(); + return mqMessageOut; + } +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/TaskMessage.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/TaskMessage.java new file mode 100644 index 00000000..6e9c5256 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/TaskMessage.java @@ -0,0 +1,60 @@ +package org.woehlke.twitterwall.scheduled.mq.msg; + +import org.woehlke.twitterwall.oodm.entities.parts.TaskType; + +import java.io.Serializable; +import java.util.Date; + +public class TaskMessage implements Serializable { + + protected final long taskId; + protected final TaskType taskType; + protected final Date timeStarted; + + public TaskMessage(long taskId, TaskType taskType,Date timeStarted) { + this.taskId = taskId; + this.taskType = taskType; + this.timeStarted=timeStarted; + } + + public long getTaskId() { + return taskId; + } + + public TaskType getTaskType() { + return taskType; + } + + public Date getTimeStarted() { + return timeStarted; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof TaskMessage)) return false; + + TaskMessage that = (TaskMessage) o; + + if (getTaskId() != that.getTaskId()) return false; + if (getTaskType() != that.getTaskType()) return false; + return getTimeStarted() != null ? getTimeStarted().equals(that.getTimeStarted()) : that.getTimeStarted() == null; + } + + @Override + public int hashCode() { + int result = (int) (getTaskId() ^ (getTaskId() >>> 32)); + result = 31 * result + (getTaskType() != null ? getTaskType().hashCode() : 0); + result = 31 * result + (getTimeStarted() != null ? getTimeStarted().hashCode() : 0); + return result; + } + + @Override + public String toString() { + return "TaskMessage{" + + "taskId=" + taskId + + ", taskType=" + taskType + + ", timeStarted=" + timeStarted + + '}'; + } +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/TestDataForTweets.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/TestDataForTweets.java new file mode 100644 index 00000000..056c8c09 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/TestDataForTweets.java @@ -0,0 +1,4 @@ +package org.woehlke.twitterwall.scheduled.mq.msg; + +public class TestDataForTweets { +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/TweetFromTwitter.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/TweetFromTwitter.java new file mode 100644 index 00000000..386063da --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/TweetFromTwitter.java @@ -0,0 +1,115 @@ +package org.woehlke.twitterwall.scheduled.mq.msg; + + +import org.springframework.social.twitter.api.Tweet; + +import java.io.Serializable; + +public class TweetFromTwitter implements Serializable { + + private final long taskId; + private final long tweetIdFromTwitter; + private final org.springframework.social.twitter.api.Tweet tweetFromTwitter; + private final org.woehlke.twitterwall.oodm.entities.Tweet tweet; + private final boolean transformed; + private final boolean persisted; + + public TweetFromTwitter(long taskId,Tweet tweetFromTwitter){ + this.taskId = taskId; + this.tweetFromTwitter = tweetFromTwitter; + this.tweetIdFromTwitter = tweetFromTwitter.getId(); + this.tweet = null; + this.transformed = false; + this.persisted = false; + } + + public TweetFromTwitter(long taskId, long tweetIdFromTwitter, Tweet tweetFromTwitter, org.woehlke.twitterwall.oodm.entities.Tweet tweet, boolean transformed, boolean persisted) { + this.taskId = taskId; + this.tweetIdFromTwitter = tweetIdFromTwitter; + this.tweetFromTwitter = tweetFromTwitter; + this.tweet = tweet; + this.transformed = transformed; + this.persisted = persisted; + } + + public TweetFromTwitter(long taskId, org.woehlke.twitterwall.oodm.entities.Tweet myTweet, org.springframework.social.twitter.api.Tweet tweetFromTwitter, boolean tansformed) { + this.taskId = taskId; + this.tweetFromTwitter = tweetFromTwitter; + this.tweetIdFromTwitter = tweetFromTwitter.getId(); + this.tweet = myTweet; + this.transformed = tansformed; + this.persisted = false; + } + + public TweetFromTwitter(long taskId, org.woehlke.twitterwall.oodm.entities.Tweet tweet, Tweet tweetFromTwitter, boolean transformed, boolean persisted) { + this.taskId = taskId; + this.tweetFromTwitter = tweetFromTwitter; + this.tweetIdFromTwitter = tweetFromTwitter.getId(); + this.tweet = tweet; + this.transformed = transformed; + this.persisted = persisted; + } + + public long getTaskId() { + return taskId; + } + + public long getTweetIdFromTwitter() { + return tweetIdFromTwitter; + } + + public Tweet getTweetFromTwitter() { + return tweetFromTwitter; + } + + public org.woehlke.twitterwall.oodm.entities.Tweet getTweet() { + return tweet; + } + + public boolean isTransformed() { + return transformed; + } + + public boolean isPersisted() { + return persisted; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + TweetFromTwitter that = (TweetFromTwitter) o; + + if (taskId != that.taskId) return false; + if (tweetIdFromTwitter != that.tweetIdFromTwitter) return false; + if (transformed != that.transformed) return false; + if (persisted != that.persisted) return false; + if (tweetFromTwitter != null ? !tweetFromTwitter.equals(that.tweetFromTwitter) : that.tweetFromTwitter != null) + return false; + return tweet != null ? tweet.equals(that.tweet) : that.tweet == null; + } + + @Override + public int hashCode() { + int result = (int) (taskId ^ (taskId >>> 32)); + result = 31 * result + (int) (tweetIdFromTwitter ^ (tweetIdFromTwitter >>> 32)); + result = 31 * result + (tweetFromTwitter != null ? tweetFromTwitter.hashCode() : 0); + result = 31 * result + (tweet != null ? tweet.hashCode() : 0); + result = 31 * result + (transformed ? 1 : 0); + result = 31 * result + (persisted ? 1 : 0); + return result; + } + + @Override + public String toString() { + return "TweetFromTwitter{" + + "taskId=" + taskId + + ", tweetIdFromTwitter=" + tweetIdFromTwitter + + ", tweetFromTwitter=" + tweetFromTwitter + + ", tweet=" + tweet + + ", transformed=" + transformed + + ", persisted=" + persisted + + '}'; + } +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/TweetMsg.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/TweetMsg.java new file mode 100644 index 00000000..70a0fbff --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/TweetMsg.java @@ -0,0 +1,51 @@ +package org.woehlke.twitterwall.scheduled.mq.msg; + +import org.woehlke.twitterwall.oodm.entities.Tweet; + +import java.io.Serializable; + +public class TweetMsg implements Serializable { + + private final long taskId; + private final Tweet tweet; + + + public TweetMsg(long taskId, Tweet tweet) { + this.taskId = taskId; + this.tweet = tweet; + } + + public long getTaskId() { + return taskId; + } + + public Tweet getTweet() { + return tweet; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + TweetMsg tweetMsg = (TweetMsg) o; + + if (taskId != tweetMsg.taskId) return false; + return tweet != null ? tweet.equals(tweetMsg.tweet) : tweetMsg.tweet == null; + } + + @Override + public int hashCode() { + int result = (int) (taskId ^ (taskId >>> 32)); + result = 31 * result + (tweet != null ? tweet.hashCode() : 0); + return result; + } + + @Override + public String toString() { + return "TweetMsg{" + + "taskId=" + taskId + + ", tweet=" + tweet + + '}'; + } +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/TweetResultList.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/TweetResultList.java new file mode 100644 index 00000000..7858447d --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/TweetResultList.java @@ -0,0 +1,51 @@ +package org.woehlke.twitterwall.scheduled.mq.msg; + +import org.woehlke.twitterwall.oodm.entities.Tweet; + +import java.io.Serializable; +import java.util.List; + +public class TweetResultList implements Serializable { + + private final long taskId; + private final List tweetList; + + public TweetResultList(long taskId, List tweetList) { + this.taskId = taskId; + this.tweetList = tweetList; + } + + public long getTaskId() { + return taskId; + } + + public List getTweetList() { + return tweetList; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + TweetResultList that = (TweetResultList) o; + + if (taskId != that.taskId) return false; + return tweetList != null ? tweetList.equals(that.tweetList) : that.tweetList == null; + } + + @Override + public int hashCode() { + int result = (int) (taskId ^ (taskId >>> 32)); + result = 31 * result + (tweetList != null ? tweetList.hashCode() : 0); + return result; + } + + @Override + public String toString() { + return "TweetResultList{" + + "taskId=" + taskId + + ", tweetList=" + tweetList + + '}'; + } +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/TwitterProfileMessage.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/TwitterProfileMessage.java new file mode 100644 index 00000000..6eea4d56 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/TwitterProfileMessage.java @@ -0,0 +1,67 @@ +package org.woehlke.twitterwall.scheduled.mq.msg; + +import org.springframework.social.twitter.api.TwitterProfile; + +import java.io.Serializable; + +public class TwitterProfileMessage implements Serializable { + + private final TaskMessage taskMessage; + private final String screenName; + private final TwitterProfile twitterProfile; + + public TwitterProfileMessage(TaskMessage taskMessage, TwitterProfile twitterProfile){ + this.taskMessage = taskMessage; + this.screenName = twitterProfile.getScreenName(); + this.twitterProfile = twitterProfile; + } + + public TwitterProfileMessage(TaskMessage taskMessage, String screenName, TwitterProfile twitterProfile) { + this.taskMessage = taskMessage; + this.screenName = screenName; + this.twitterProfile = twitterProfile; + } + + public String getScreenName() { + return screenName; + } + + public TwitterProfile getTwitterProfile() { + return twitterProfile; + } + + public TaskMessage getTaskMessage() { + return taskMessage; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof TwitterProfileMessage)) return false; + + TwitterProfileMessage that = (TwitterProfileMessage) o; + + if (getTaskMessage() != null ? !getTaskMessage().equals(that.getTaskMessage()) : that.getTaskMessage() != null) + return false; + if (getScreenName() != null ? !getScreenName().equals(that.getScreenName()) : that.getScreenName() != null) + return false; + return getTwitterProfile() != null ? getTwitterProfile().equals(that.getTwitterProfile()) : that.getTwitterProfile() == null; + } + + @Override + public int hashCode() { + int result = getTaskMessage() != null ? getTaskMessage().hashCode() : 0; + result = 31 * result + (getScreenName() != null ? getScreenName().hashCode() : 0); + result = 31 * result + (getTwitterProfile() != null ? getTwitterProfile().hashCode() : 0); + return result; + } + + @Override + public String toString() { + return "TwitterProfileMessage{" + + "taskMessage=" + taskMessage + + ", screenName='" + screenName + '\'' + + ", twitterProfile=" + twitterProfile + + '}'; + } +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/UserMessage.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/UserMessage.java new file mode 100644 index 00000000..72aa88fe --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/UserMessage.java @@ -0,0 +1,66 @@ +package org.woehlke.twitterwall.scheduled.mq.msg; + +import org.woehlke.twitterwall.oodm.entities.User; + +import java.io.Serializable; + +public class UserMessage implements Serializable { + + private final long taskId; + private final TwitterProfileMessage twitterProfileMessage; + private final User user; + + public UserMessage(User user,long taskId){ + this.twitterProfileMessage = null; + this.user = user; + this.taskId = taskId; + } + + public UserMessage(TwitterProfileMessage twitterProfileMessage, User user) { + this.twitterProfileMessage = twitterProfileMessage; + this.user = user; + this.taskId = twitterProfileMessage.getTaskMessage().taskId; + } + + public TwitterProfileMessage getTwitterProfileMessage() { + return twitterProfileMessage; + } + + public User getUser() { + return user; + } + + public long getTaskId() { + return taskId; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof UserMessage)) return false; + + UserMessage that = (UserMessage) o; + + if (getTaskId() != that.getTaskId()) return false; + if (getTwitterProfileMessage() != null ? !getTwitterProfileMessage().equals(that.getTwitterProfileMessage()) : that.getTwitterProfileMessage() != null) + return false; + return getUser() != null ? getUser().equals(that.getUser()) : that.getUser() == null; + } + + @Override + public int hashCode() { + int result = (int) (getTaskId() ^ (getTaskId() >>> 32)); + result = 31 * result + (getTwitterProfileMessage() != null ? getTwitterProfileMessage().hashCode() : 0); + result = 31 * result + (getUser() != null ? getUser().hashCode() : 0); + return result; + } + + @Override + public String toString() { + return "UserMessage{" + + "taskId=" + taskId + + ", twitterProfileMessage=" + twitterProfileMessage + + ", user=" + user + + '}'; + } +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/UserResultList.java b/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/UserResultList.java new file mode 100644 index 00000000..201d9041 --- /dev/null +++ b/src/main/java/org/woehlke/twitterwall/scheduled/mq/msg/UserResultList.java @@ -0,0 +1,51 @@ +package org.woehlke.twitterwall.scheduled.mq.msg; + +import org.woehlke.twitterwall.oodm.entities.User; + +import java.io.Serializable; +import java.util.List; + +public class UserResultList implements Serializable { + + private final long taskId; + private final List userList; + + public UserResultList(long taskId, List userList) { + this.taskId = taskId; + this.userList = userList; + } + + public long getTaskId() { + return taskId; + } + + public List getUserList() { + return userList; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof UserResultList)) return false; + + UserResultList that = (UserResultList) o; + + if (getTaskId() != that.getTaskId()) return false; + return getUserList() != null ? getUserList().equals(that.getUserList()) : that.getUserList() == null; + } + + @Override + public int hashCode() { + int result = (int) (getTaskId() ^ (getTaskId() >>> 32)); + result = 31 * result + (getUserList() != null ? getUserList().hashCode() : 0); + return result; + } + + @Override + public String toString() { + return "UserResultList{" + + "taskId=" + taskId + + ", userList=" + userList + + '}'; + } +} diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/service/backend/TwitterApiService.java b/src/main/java/org/woehlke/twitterwall/scheduled/service/backend/TwitterApiService.java index 8c189d7e..c5ce34c3 100644 --- a/src/main/java/org/woehlke/twitterwall/scheduled/service/backend/TwitterApiService.java +++ b/src/main/java/org/woehlke/twitterwall/scheduled/service/backend/TwitterApiService.java @@ -14,6 +14,8 @@ public interface TwitterApiService { Tweet findOneTweetById(long id); + List getUserProfilesForTwitterIds(long... userProfileTwitterIds); + TwitterProfile getUserProfileForTwitterId(long userProfileTwitterId); TwitterProfile getUserProfileForScreenName(String screenName); diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/service/backend/impl/TwitterApiServiceImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/service/backend/impl/TwitterApiServiceImpl.java index c69e63f2..c886dba8 100644 --- a/src/main/java/org/woehlke/twitterwall/scheduled/service/backend/impl/TwitterApiServiceImpl.java +++ b/src/main/java/org/woehlke/twitterwall/scheduled/service/backend/impl/TwitterApiServiceImpl.java @@ -51,9 +51,19 @@ public Tweet findOneTweetById(long id) { return result; } + @Override + public List getUserProfilesForTwitterIds(long... userProfileTwitterIds) { + String msg = MSG+"getUserProfileForTwitterId: "+userProfileTwitterIds; + log.debug(msg); + List result = getTwitterProxy().userOperations().getUsers(userProfileTwitterIds); + msg += " result: "; + log.debug(msg+" size: "+result.size()); + return result; + } + @Override public TwitterProfile getUserProfileForTwitterId(long userProfileTwitterId) { - String msg = MSG+"findOneTweetById: "+userProfileTwitterId; + String msg = MSG+"getUserProfileForTwitterId: "+userProfileTwitterId; log.debug(msg); TwitterProfile result = getTwitterProxy().userOperations().getUserProfile(userProfileTwitterId); msg += " result: "; diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/CreateTestDataImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/CreateTestDataImpl.java index faebbda1..603eb2fc 100644 --- a/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/CreateTestDataImpl.java +++ b/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/CreateTestDataImpl.java @@ -16,11 +16,13 @@ import org.woehlke.twitterwall.oodm.entities.Task; import org.woehlke.twitterwall.oodm.entities.Tweet; import org.woehlke.twitterwall.oodm.entities.User; +import org.woehlke.twitterwall.oodm.entities.parts.CountedEntities; import org.woehlke.twitterwall.oodm.entities.parts.TaskType; import org.woehlke.twitterwall.oodm.service.TaskService; import org.woehlke.twitterwall.oodm.service.UserService; import org.woehlke.twitterwall.scheduled.service.backend.TwitterApiService; import org.woehlke.twitterwall.scheduled.service.facade.CreateTestData; +import org.woehlke.twitterwall.scheduled.service.persist.CountedEntitiesService; import org.woehlke.twitterwall.scheduled.service.persist.StoreOneTweet; import org.woehlke.twitterwall.scheduled.service.persist.StoreUserProfile; @@ -63,8 +65,9 @@ public class CreateTestDataImpl implements CreateTestData { public org.springframework.data.domain.Page getTestDataTweets(){ + CountedEntities countedEntities = countedEntitiesService.countAll(); String msg = "getTestDataTweets: "; - Task task = taskService.create(msg, TaskType.CONTROLLER_GET_TESTDATA_TWEETS); + Task task = taskService.create(msg, TaskType.CONTROLLER_GET_TESTDATA_TWEETS,countedEntities); List latest = new ArrayList<>(); try { log.info(msg + "--------------------------------------------------------------------"); @@ -106,8 +109,9 @@ public org.springframework.data.domain.Page getTestDataTweets(){ public org.springframework.data.domain.Page getTestDataUser(){ + CountedEntities countedEntities = countedEntitiesService.countAll(); String msg = "getTestDataUser: "; - Task task = taskService.create(msg, TaskType.CONTROLLER_GET_TESTDATA_USER); + Task task = taskService.create(msg, TaskType.CONTROLLER_GET_TESTDATA_USER,countedEntities); List user = new ArrayList<>(); try { int loopId = 0; @@ -129,7 +133,7 @@ public org.springframework.data.domain.Page tweetsForSearchQuery = null; @@ -76,15 +79,16 @@ public void fetchTweetsFromTwitterSearch() { } catch (Exception e){ e.printStackTrace(); log.error(msg+subCounter+e); - task = taskService.warn(task,e,msg+subCounter); + task = taskService.warn(task,e,msg+subCounter,countedEntities); } } } } } + countedEntities = countedEntitiesService.countAll(); String report = msg+" processed: "+loopId+" [ "+allLoop+" ] "; - taskService.event(task,report); - taskService.done(task); + taskService.event(task,report,countedEntities); + taskService.done(task,countedEntities); log.debug(msg+"---------------------------------------"); log.debug(msg+ "DONE fetchTweetsFromTwitterSearch: The time is now {}", dateFormat.format(new Date())); log.debug(msg+"---------------------------------------"); @@ -103,11 +107,14 @@ public void fetchTweetsFromTwitterSearch() { private final StoreUserProfileForScreenName storeUserProfileForScreenName; + private final CountedEntitiesService countedEntitiesService; + @Autowired - public FetchTweetsFromTwitterSearchImpl(TwitterApiService twitterApiService, StoreOneTweet storeOneTweet, TaskService taskService, StoreUserProfileForScreenName storeUserProfileForScreenName) { + public FetchTweetsFromTwitterSearchImpl(TwitterApiService twitterApiService, StoreOneTweet storeOneTweet, TaskService taskService, StoreUserProfileForScreenName storeUserProfileForScreenName, CountedEntitiesService countedEntitiesService) { this.twitterApiService = twitterApiService; this.storeOneTweet = storeOneTweet; this.taskService = taskService; this.storeUserProfileForScreenName = storeUserProfileForScreenName; + this.countedEntitiesService = countedEntitiesService; } } diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/FetchUsersFromDefinedUserListImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/FetchUsersFromDefinedUserListImpl.java index 7b30b1d7..8704fc5e 100644 --- a/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/FetchUsersFromDefinedUserListImpl.java +++ b/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/FetchUsersFromDefinedUserListImpl.java @@ -12,12 +12,14 @@ import org.woehlke.twitterwall.conf.TwitterwallFrontendProperties; import org.woehlke.twitterwall.conf.TwitterwallSchedulerProperties; import org.woehlke.twitterwall.oodm.entities.Task; +import org.woehlke.twitterwall.oodm.entities.parts.CountedEntities; import org.woehlke.twitterwall.oodm.entities.parts.TaskType; import org.woehlke.twitterwall.oodm.entities.Mention; import org.woehlke.twitterwall.oodm.service.TaskService; import org.woehlke.twitterwall.scheduled.service.backend.TwitterApiService; import org.woehlke.twitterwall.oodm.entities.User; import org.woehlke.twitterwall.scheduled.service.facade.FetchUsersFromDefinedUserList; +import org.woehlke.twitterwall.scheduled.service.persist.CountedEntitiesService; import org.woehlke.twitterwall.scheduled.service.persist.StoreUserProfileForScreenName; import org.woehlke.twitterwall.scheduled.service.persist.StoreUserProfileForUserList; @@ -35,8 +37,9 @@ public class FetchUsersFromDefinedUserListImpl implements FetchUsersFromDefinedU @Override public void fetchUsersFromDefinedUserList() { + CountedEntities countedEntities = countedEntitiesService.countAll(); String msg = "update Tweets: "; - Task task = taskService.create(msg, TaskType.FETCH_USERS_FROM_DEFINED_USER_LIST); + Task task = taskService.create(msg, TaskType.FETCH_USERS_FROM_DEFINED_USER_LIST,countedEntities); log.debug(msg + "---------------------------------------"); log.debug(msg + "START The time is now {}", dateFormat.format(new Date())); log.debug(msg + "---------------------------------------"); @@ -59,14 +62,15 @@ public void fetchUsersFromDefinedUserList() { String subCounter = counter+" ( "+subLoopId+ "from "+subNumber+" ) ["+allLoop+"] "; User userFromMention = storeUserProfileForScreenName.storeUserProfileForScreenName(mention.getScreenName(),task); if(userFromMention == null){ - taskService.warn(task,msg+subCounter); + taskService.warn(task,msg+subCounter,countedEntities); } log.debug(msg+subCounter+userFromMention.toString()); } } + countedEntities = countedEntitiesService.countAll(); String report = msg+" processed: "+loopId+" [ "+allLoop+" ] "; - taskService.event(task,report); - taskService.done(task); + taskService.event(task,report,countedEntities); + taskService.done(task,countedEntities); log.debug(msg + "---------------------------------------"); log.debug(msg + "DONE The time is now {}", dateFormat.format(new Date())); log.debug(msg + "---------------------------------------"); @@ -93,8 +97,10 @@ public void fetchUsersFromDefinedUserList() { private final TwitterProperties twitterProperties; + private final CountedEntitiesService countedEntitiesService; + @Autowired - public FetchUsersFromDefinedUserListImpl(StoreUserProfileForUserList storeUserProfileForUserList, TwitterApiService twitterApiService, TaskService taskService, StoreUserProfileForScreenName storeUserProfileForScreenName, TwitterwallBackendProperties twitterwallBackendProperties, TwitterwallSchedulerProperties twitterwallSchedulerProperties, TwitterwallFrontendProperties twitterwallFrontendProperties, TwitterProperties twitterProperties) { + public FetchUsersFromDefinedUserListImpl(StoreUserProfileForUserList storeUserProfileForUserList, TwitterApiService twitterApiService, TaskService taskService, StoreUserProfileForScreenName storeUserProfileForScreenName, TwitterwallBackendProperties twitterwallBackendProperties, TwitterwallSchedulerProperties twitterwallSchedulerProperties, TwitterwallFrontendProperties twitterwallFrontendProperties, TwitterProperties twitterProperties, CountedEntitiesService countedEntitiesService) { this.storeUserProfileForUserList = storeUserProfileForUserList; this.twitterApiService = twitterApiService; this.taskService = taskService; @@ -103,5 +109,6 @@ public FetchUsersFromDefinedUserListImpl(StoreUserProfileForUserList storeUserPr this.twitterwallSchedulerProperties = twitterwallSchedulerProperties; this.twitterwallFrontendProperties = twitterwallFrontendProperties; this.twitterProperties = twitterProperties; + this.countedEntitiesService = countedEntitiesService; } } diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/StoreTwitterProfileForProxyMentionForUserImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/StoreTwitterProfileForProxyMentionForUserImpl.java index cd82df76..b35201fe 100644 --- a/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/StoreTwitterProfileForProxyMentionForUserImpl.java +++ b/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/StoreTwitterProfileForProxyMentionForUserImpl.java @@ -8,11 +8,13 @@ import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.woehlke.twitterwall.oodm.entities.*; +import org.woehlke.twitterwall.oodm.entities.parts.CountedEntities; import org.woehlke.twitterwall.oodm.entities.parts.Entities; import org.woehlke.twitterwall.oodm.service.*; import org.woehlke.twitterwall.oodm.service.TaskService; import org.woehlke.twitterwall.scheduled.service.backend.TwitterApiService; import org.woehlke.twitterwall.scheduled.service.facade.StoreTwitterProfileForProxyMentionForUser; +import org.woehlke.twitterwall.scheduled.service.persist.CountedEntitiesService; import org.woehlke.twitterwall.scheduled.service.persist.CreatePersistentUrl; import org.woehlke.twitterwall.scheduled.service.persist.impl.StoreEntitiesProcessImpl; import org.woehlke.twitterwall.scheduled.service.persist.impl.StoreUserProcessImpl; @@ -32,6 +34,7 @@ public class StoreTwitterProfileForProxyMentionForUserImpl implements StoreTwitt @Override public User storeTwitterProfileForProxyMentionForUser(Mention mention, Task task) { + CountedEntities countedEntities = countedEntitiesService.countAll(); String msg = "storeTwitterProfileForProxyMentionForUser:"; String screenName = mention.getScreenName(); User foundUser = null; @@ -43,7 +46,7 @@ public User storeTwitterProfileForProxyMentionForUser(Mention mention, Task task try { twitterProfile = twitterApiService.getUserProfileForScreenName(screenName); } catch (ApiException twitterApiException) { - taskService.error(task,twitterApiException, msg); + taskService.error(task,twitterApiException, msg,countedEntities); log.error(msg+twitterApiException.getMessage()); } if(twitterProfile!=null){ @@ -145,7 +148,9 @@ private User storeUserProcess(User user, Task task){ private final CreatePersistentUrl createPersistentUrl; - public StoreTwitterProfileForProxyMentionForUserImpl(UserService userService, TwitterApiService twitterApiService, TaskService taskService, UserTransformService userTransformService, UrlService urlService, HashTagService hashTagService, MentionService mentionService, MediaService mediaService, TickerSymbolService tickerSymbolService, CreatePersistentUrl createPersistentUrl) { + private final CountedEntitiesService countedEntitiesService; + + public StoreTwitterProfileForProxyMentionForUserImpl(UserService userService, TwitterApiService twitterApiService, TaskService taskService, UserTransformService userTransformService, UrlService urlService, HashTagService hashTagService, MentionService mentionService, MediaService mediaService, TickerSymbolService tickerSymbolService, CreatePersistentUrl createPersistentUrl, CountedEntitiesService countedEntitiesService) { this.userService = userService; this.twitterApiService = twitterApiService; this.taskService = taskService; @@ -156,5 +161,6 @@ public StoreTwitterProfileForProxyMentionForUserImpl(UserService userService, Tw this.mediaService = mediaService; this.tickerSymbolService = tickerSymbolService; this.createPersistentUrl = createPersistentUrl; + this.countedEntitiesService = countedEntitiesService; } } diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/UpdateTweetsImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/UpdateTweetsImpl.java index 20935a32..c0707f7a 100644 --- a/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/UpdateTweetsImpl.java +++ b/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/UpdateTweetsImpl.java @@ -18,12 +18,14 @@ import org.woehlke.twitterwall.conf.TwitterwallSchedulerProperties; import org.woehlke.twitterwall.oodm.entities.User; import org.woehlke.twitterwall.oodm.entities.Task; +import org.woehlke.twitterwall.oodm.entities.parts.CountedEntities; import org.woehlke.twitterwall.oodm.entities.parts.TaskType; import org.woehlke.twitterwall.oodm.entities.Mention; import org.woehlke.twitterwall.oodm.service.TaskService; import org.woehlke.twitterwall.scheduled.service.backend.TwitterApiService; import org.woehlke.twitterwall.oodm.service.TweetService; import org.woehlke.twitterwall.scheduled.service.facade.UpdateTweets; +import org.woehlke.twitterwall.scheduled.service.persist.CountedEntitiesService; import org.woehlke.twitterwall.scheduled.service.persist.StoreOneTweet; import org.woehlke.twitterwall.scheduled.service.persist.StoreUserProfileForScreenName; @@ -42,11 +44,12 @@ public class UpdateTweetsImpl implements UpdateTweets { @Override public void updateTweets() { + CountedEntities countedEntities = countedEntitiesService.countAll(); String msg = "update Tweets: "; log.debug(msg + "---------------------------------------"); log.debug(msg + "START: The time is now {}", dateFormat.format(new Date())); log.debug(msg + "---------------------------------------"); - Task task = taskService.create(msg, TaskType.UPDATE_TWEETS); + Task task = taskService.create(msg, TaskType.UPDATE_TWEETS,countedEntities); int loopId = 0; int allLoop = 0; try { @@ -77,7 +80,7 @@ public void updateTweets() { User userFromMention = storeUserProfileForScreenName.storeUserProfileForScreenName(mention.getScreenName(), task); log.debug(msg + subCounter + userFromMention.toString()); } catch (IllegalArgumentException exe) { - task = taskService.warn(task, exe, msg + subCounter); + task = taskService.warn(task, exe, msg + subCounter,countedEntities); } } log.debug(msg + "-----------------------------------------------------"); @@ -86,10 +89,10 @@ public void updateTweets() { log.debug(msg + "Done SLEEP for " + twitterwallBackendProperties.getTwitter().getMillisToWaitBetweenTwoApiCalls() + " ms " + counter); log.debug(msg + "-----------------------------------------------------"); } catch (RateLimitExceededException e) { - task = taskService.error(task, e, msg + counter); + task = taskService.error(task, e, msg + counter,countedEntities); throw e; } catch (InterruptedException ex) { - task = taskService.warn(task, ex, msg + counter); + task = taskService.warn(task, ex, msg + counter,countedEntities); } finally { log.debug(msg + "---------------------------------------"); } @@ -97,13 +100,14 @@ public void updateTweets() { pageRequest = pageRequest.next(); } while (hasNext); } catch (ResourceAccessException e) { - task = taskService.error(task,e,msg + " check your Network Connection!"); + task = taskService.error(task,e,msg + " check your Network Connection!",countedEntities); } catch (RateLimitExceededException e) { - task = taskService.error(task,e,msg); + task = taskService.error(task,e,msg,countedEntities); } + countedEntities = countedEntitiesService.countAll(); String report = msg+" processed: "+loopId+" [ "+allLoop+" ] "; - this.taskService.event(task,report); - this.taskService.done(task); + this.taskService.event(task,report,countedEntities); + this.taskService.done(task,countedEntities); log.debug(msg + "---------------------------------------"); log.debug(msg + "DONE: The time is now {}", dateFormat.format(new Date())); log.debug(msg + "---------------------------------------"); @@ -132,8 +136,10 @@ public void updateTweets() { private final TwitterProperties twitterProperties; + private final CountedEntitiesService countedEntitiesService; + @Autowired - public UpdateTweetsImpl(TwitterApiService twitterApiService, TweetService tweetService, StoreOneTweet storeOneTweet, TaskService taskService, StoreUserProfileForScreenName storeUserProfileForScreenName, TwitterwallBackendProperties twitterwallBackendProperties, TwitterwallSchedulerProperties twitterwallSchedulerProperties, TwitterwallFrontendProperties twitterwallFrontendProperties, TwitterProperties twitterProperties) { + public UpdateTweetsImpl(TwitterApiService twitterApiService, TweetService tweetService, StoreOneTweet storeOneTweet, TaskService taskService, StoreUserProfileForScreenName storeUserProfileForScreenName, TwitterwallBackendProperties twitterwallBackendProperties, TwitterwallSchedulerProperties twitterwallSchedulerProperties, TwitterwallFrontendProperties twitterwallFrontendProperties, TwitterProperties twitterProperties, CountedEntitiesService countedEntitiesService) { this.twitterApiService = twitterApiService; this.tweetService = tweetService; this.storeOneTweet = storeOneTweet; @@ -143,6 +149,7 @@ public UpdateTweetsImpl(TwitterApiService twitterApiService, TweetService tweetS this.twitterwallSchedulerProperties = twitterwallSchedulerProperties; this.twitterwallFrontendProperties = twitterwallFrontendProperties; this.twitterProperties = twitterProperties; + this.countedEntitiesService = countedEntitiesService; } } diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/UpdateUserProfilesFromMentionsImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/UpdateUserProfilesFromMentionsImpl.java index db779b66..5160f017 100644 --- a/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/UpdateUserProfilesFromMentionsImpl.java +++ b/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/UpdateUserProfilesFromMentionsImpl.java @@ -16,6 +16,7 @@ import org.woehlke.twitterwall.conf.TwitterwallFrontendProperties; import org.woehlke.twitterwall.conf.TwitterwallSchedulerProperties; import org.woehlke.twitterwall.oodm.entities.Task; +import org.woehlke.twitterwall.oodm.entities.parts.CountedEntities; import org.woehlke.twitterwall.oodm.entities.parts.TaskType; import org.woehlke.twitterwall.oodm.service.TaskService; import org.woehlke.twitterwall.scheduled.service.backend.TwitterApiService; @@ -23,6 +24,7 @@ import org.woehlke.twitterwall.oodm.entities.Mention; import org.woehlke.twitterwall.oodm.service.MentionService; import org.woehlke.twitterwall.scheduled.service.facade.UpdateUserProfilesFromMentions; +import org.woehlke.twitterwall.scheduled.service.persist.CountedEntitiesService; import org.woehlke.twitterwall.scheduled.service.persist.StoreUserProfile; import org.woehlke.twitterwall.scheduled.service.persist.StoreUserProfileForScreenName; @@ -41,9 +43,10 @@ public class UpdateUserProfilesFromMentionsImpl implements UpdateUserProfilesFro @Override public void updateUserProfilesFromMentions(){ + CountedEntities countedEntities = countedEntitiesService.countAll(); String msg = "update User Profiles from Mentions: "; log.debug(msg + "START - The time is now {}", dateFormat.format(new Date())); - Task task = this.taskService.create(msg, TaskType.UPDATE_USER_PROFILES_FROM_MENTIONS); + Task task = this.taskService.create(msg, TaskType.UPDATE_USER_PROFILES_FROM_MENTIONS,countedEntities); int allLoop = 0; int loopId = 0; boolean hasNext=true; @@ -62,7 +65,7 @@ public void updateUserProfilesFromMentions(){ try { twitterProfile = this.twitterApiService.getUserProfileForScreenName(screenName); } catch (RateLimitExceededException e) { - task = taskService.error(task, e, msg); + task = taskService.error(task, e, msg,countedEntities); } if (twitterProfile != null) { User user = storeUserProfile.storeUserProfile(twitterProfile, task); @@ -100,9 +103,10 @@ public void updateUserProfilesFromMentions(){ } pageRequest = pageRequest.next(); } + countedEntities = countedEntitiesService.countAll(); String report = msg+" processed: "+loopId+" [ "+allLoop+" ] "; - this.taskService.event(task,report); - this.taskService.done(task); + this.taskService.event(task,report,countedEntities); + this.taskService.done(task,countedEntities); log.debug(msg +"---------------------------------------"); log.debug(msg + "DONE - The time is now {}", dateFormat.format(new Date())); log.debug(msg+"---------------------------------------"); @@ -131,8 +135,10 @@ public void updateUserProfilesFromMentions(){ private final TwitterProperties twitterProperties; + private final CountedEntitiesService countedEntitiesService; + @Autowired - public UpdateUserProfilesFromMentionsImpl(TwitterApiService twitterApiService, StoreUserProfile storeUserProfile, MentionService mentionService, TaskService taskService, StoreUserProfileForScreenName storeUserProfileForScreenName, TwitterwallBackendProperties twitterwallBackendProperties, TwitterwallSchedulerProperties twitterwallSchedulerProperties, TwitterwallFrontendProperties twitterwallFrontendProperties, TwitterProperties twitterProperties) { + public UpdateUserProfilesFromMentionsImpl(TwitterApiService twitterApiService, StoreUserProfile storeUserProfile, MentionService mentionService, TaskService taskService, StoreUserProfileForScreenName storeUserProfileForScreenName, TwitterwallBackendProperties twitterwallBackendProperties, TwitterwallSchedulerProperties twitterwallSchedulerProperties, TwitterwallFrontendProperties twitterwallFrontendProperties, TwitterProperties twitterProperties, CountedEntitiesService countedEntitiesService) { this.twitterApiService = twitterApiService; this.storeUserProfile = storeUserProfile; this.mentionService = mentionService; @@ -142,5 +148,6 @@ public UpdateUserProfilesFromMentionsImpl(TwitterApiService twitterApiService, S this.twitterwallSchedulerProperties = twitterwallSchedulerProperties; this.twitterwallFrontendProperties = twitterwallFrontendProperties; this.twitterProperties = twitterProperties; + this.countedEntitiesService = countedEntitiesService; } } diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/UpdateUserProfilesImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/UpdateUserProfilesImpl.java index 9e8c4c4b..4a9e91d6 100644 --- a/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/UpdateUserProfilesImpl.java +++ b/src/main/java/org/woehlke/twitterwall/scheduled/service/facade/impl/UpdateUserProfilesImpl.java @@ -16,6 +16,7 @@ import org.woehlke.twitterwall.conf.TwitterwallFrontendProperties; import org.woehlke.twitterwall.conf.TwitterwallSchedulerProperties; import org.woehlke.twitterwall.oodm.entities.Task; +import org.woehlke.twitterwall.oodm.entities.parts.CountedEntities; import org.woehlke.twitterwall.oodm.entities.parts.TaskType; import org.woehlke.twitterwall.oodm.entities.Mention; import org.woehlke.twitterwall.oodm.service.TaskService; @@ -23,6 +24,7 @@ import org.woehlke.twitterwall.oodm.entities.User; import org.woehlke.twitterwall.oodm.service.UserService; import org.woehlke.twitterwall.scheduled.service.facade.UpdateUserProfiles; +import org.woehlke.twitterwall.scheduled.service.persist.CountedEntitiesService; import org.woehlke.twitterwall.scheduled.service.persist.StoreUserProfile; import org.woehlke.twitterwall.scheduled.service.persist.StoreUserProfileForScreenName; @@ -40,12 +42,13 @@ public class UpdateUserProfilesImpl implements UpdateUserProfiles { @Override public void updateUserProfiles(){ + CountedEntities countedEntities = countedEntitiesService.countAll(); String msg = "update User Profiles From ProfileId: "; log.debug(msg+"---------------------------------------"); log.debug(msg + "START - The time is now {}", dateFormat.format(new Date())); int allLoop = 0; int loopId = 0; - Task task = this.taskService.create(msg, TaskType.UPDATE_USER_PROFILES); + Task task = this.taskService.create(msg, TaskType.UPDATE_USER_PROFILES,countedEntities); boolean hasNext=true; Pageable pageRequest = new PageRequest(FIRST_PAGE_NUMBER, twitterProperties.getPageSize()); while (hasNext) { @@ -61,7 +64,7 @@ public void updateUserProfiles(){ try { userProfile = twitterApiService.getUserProfileForTwitterId(userProfileTwitterId); } catch (RateLimitExceededException e) { - this.taskService.warn(task, e, msg); + this.taskService.warn(task, e, msg,countedEntities); } User user = storeUserProfile.storeUserProfile(userProfile, task); if(user!=null){ @@ -77,7 +80,7 @@ public void updateUserProfiles(){ User userFromMention = storeUserProfileForScreenName.storeUserProfileForScreenName(mention.getScreenName(), task); log.debug(msg + subCounter + userFromMention.toString()); } catch (IllegalArgumentException exe) { - this.taskService.warn(task, exe, msg + subCounter); + this.taskService.warn(task, exe, msg + subCounter,countedEntities); } } log.debug(msg + user.toString()); @@ -96,9 +99,10 @@ public void updateUserProfiles(){ } pageRequest = pageRequest.next(); } + countedEntities = countedEntitiesService.countAll(); String report = msg+" processed: "+loopId+" [ "+allLoop+" ] "; - taskService.event(task,report); - this.taskService.done(task); + taskService.event(task,report,countedEntities); + this.taskService.done(task,countedEntities); log.debug(msg +"---------------------------------------"); log.debug(msg + "DONE - The time is now {}", dateFormat.format(new Date())); log.debug(msg+"---------------------------------------"); @@ -126,8 +130,10 @@ public void updateUserProfiles(){ private final StoreUserProfileForScreenName storeUserProfileForScreenName; + private final CountedEntitiesService countedEntitiesService; + @Autowired - public UpdateUserProfilesImpl(TwitterwallBackendProperties twitterwallBackendProperties, TwitterwallSchedulerProperties twitterwallSchedulerProperties, TwitterwallFrontendProperties twitterwallFrontendProperties, TwitterProperties twitterProperties, StoreUserProfile storeUserProfile, TwitterApiService twitterApiService, UserService userService, TaskService taskService, StoreUserProfileForScreenName storeUserProfileForScreenName) { + public UpdateUserProfilesImpl(TwitterwallBackendProperties twitterwallBackendProperties, TwitterwallSchedulerProperties twitterwallSchedulerProperties, TwitterwallFrontendProperties twitterwallFrontendProperties, TwitterProperties twitterProperties, StoreUserProfile storeUserProfile, TwitterApiService twitterApiService, UserService userService, TaskService taskService, StoreUserProfileForScreenName storeUserProfileForScreenName, CountedEntitiesService countedEntitiesService) { this.twitterwallBackendProperties = twitterwallBackendProperties; this.twitterwallSchedulerProperties = twitterwallSchedulerProperties; this.twitterwallFrontendProperties = twitterwallFrontendProperties; @@ -137,5 +143,6 @@ public UpdateUserProfilesImpl(TwitterwallBackendProperties twitterwallBackendPro this.userService = userService; this.taskService = taskService; this.storeUserProfileForScreenName = storeUserProfileForScreenName; + this.countedEntitiesService = countedEntitiesService; } } diff --git a/src/main/java/org/woehlke/twitterwall/scheduled/service/persist/impl/StoreEntitiesProcessImpl.java b/src/main/java/org/woehlke/twitterwall/scheduled/service/persist/impl/StoreEntitiesProcessImpl.java index 5deae1b1..ca79dfb8 100644 --- a/src/main/java/org/woehlke/twitterwall/scheduled/service/persist/impl/StoreEntitiesProcessImpl.java +++ b/src/main/java/org/woehlke/twitterwall/scheduled/service/persist/impl/StoreEntitiesProcessImpl.java @@ -57,12 +57,12 @@ public Entities storeEntitiesProcess(Entities entities, Task task) { if(mention.isValid()){ Mention mentionPers =mentionService.store(mention, task); mentions.add(mentionPers); - } else if(mention.isRawMentionFromUserDescription()){ + }/* else if(mention.isRawMentionFromUserDescription()){ Mention mentionPers = createPersistentMention.getPersistentMentionAndUserFor(mention,task); if((mentionPers != null) && mentionPers.isValid()){ mentions.add(mentionPers); } - } + }*/ } for(Media medium:entities.getMedia()){ if(medium.isValid()) { diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index b93c5ae5..47516017 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -32,17 +32,17 @@ spring: name: @project.name@ datasource: driverClassName: org.postgresql.Driver - initialSize: 5 - max-total: 70 - maxActive: 60 - maxIdle: 5 - minIdle: 2 + #initialSize: 5 + #max-total: 70 + #maxActive: 60 + #maxIdle: 5 + #minIdle: 2 platform: POSTGRESQL - removeAbandoned: true - tomcat: - max-active: 50 - max-wait: 10000 - test-on-borrow: true + #removeAbandoned: true + #tomcat: + #max-active: 200 + #max-wait: 100000 + #test-on-borrow: true url: ${DATABASE_URL} devtools: livereload: @@ -54,7 +54,7 @@ spring: properties: hibernate: dialect: org.hibernate.dialect.PostgreSQL94Dialect - show-sql: false + show-sql: true template: cache: false thymeleaf: @@ -86,6 +86,14 @@ twitterwall: pageSize: 12 menuAppName: ${TWITTERWALL_APP_NAME} theme: ${TWITTERWALL_THEME} + mq: + starttask: + time: + fetchTweetsFromTwitterSearch: 3600000 # One Hour + fetchUsersFromDefinedUserList: 43200000 # 12 Hours + updateTweets: 43200000 # 12 Hours + updateUserProfiles: 43200000 # 12 Hours + updateUserProfilesFromMentions: 3600000 # One Hour scheduler: allowFetchTweetsFromTwitterSearch: ${TWITTERWALL_SCHEDULER_ALLOW_SEARCH} allowUpdateTweets: ${TWITTERWALL_SCHEDULER_ALLOW_UPDATE_TWEETS} @@ -109,12 +117,32 @@ twitterwall: - 876510758632386563 - 876496934676180992 idTwitterToFetchForUserControllerTest: - - 876433563561938944 #t3c_berlin - - 876456051016597504 #Codemonkey1988 - - 876420491329892354 #Walter_kran - - 876425220147564544 #tobenschmidt - - 876819177746649088 #Oliver1973 - - 876514968933478400 #wowa_TYPO3 - - 876441863191920641 #dirscherl17 - - 876441015523192832 #Markus306 - - 876440419416109056 #mattLefaux + #t3c_berlin + - 876433563561938944 + #Codemonkey1988 + - 876456051016597504 + #Walter_kran + - 876420491329892354 + #tobenschmidt + - 876425220147564544 + #Oliver1973 + - 876819177746649088 + #wowa_TYPO3 + - 876514968933478400 + #dirscherl17 + - 876441863191920641 + #Markus306 + - 876441015523192832 + #mattLefaux + - 876440419416109056 + screenNamesToFetchForUserControllerTest: + - t3c_berlin + - Codemonkey1988 + - Walter_kran + - tobenschmidt + - Oliver1973 + - wowa_TYPO3 + - dirscherl17 + - Markus306 + - mattLefaux + diff --git a/src/main/resources/integration.xml b/src/main/resources/integration.xml new file mode 100644 index 00000000..70ad9b2e --- /dev/null +++ b/src/main/resources/integration.xml @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/oauth.properties b/src/main/resources/oauth.properties new file mode 100644 index 00000000..62f13a1a --- /dev/null +++ b/src/main/resources/oauth.properties @@ -0,0 +1,4 @@ +twitter.oauth.consumerKey=${TWITTER_CONSUMER_KEY} +twitter.oauth.consumerSecret=${TWITTER_CONSUMER_SECRET} +twitter.oauth.accessToken=${TWITTER_ACCESS_TOKEN} +twitter.oauth.accessTokenSecret=${TWITTER_ACCESS_TOKEN_SECRET} diff --git a/src/test/java/org/woehlke/twitterwall/PrepareDataTestImpl.java b/src/test/java/org/woehlke/twitterwall/PrepareDataTestImpl.java index b61ffff7..b16c25e0 100644 --- a/src/test/java/org/woehlke/twitterwall/PrepareDataTestImpl.java +++ b/src/test/java/org/woehlke/twitterwall/PrepareDataTestImpl.java @@ -15,10 +15,12 @@ import org.woehlke.twitterwall.frontend.controller.TestControllerTest; import org.woehlke.twitterwall.oodm.entities.Tweet; import org.woehlke.twitterwall.oodm.entities.Task; +import org.woehlke.twitterwall.oodm.entities.parts.CountedEntities; import org.woehlke.twitterwall.oodm.entities.parts.TaskType; import org.woehlke.twitterwall.oodm.service.UserService; import org.woehlke.twitterwall.oodm.service.TaskService; import org.woehlke.twitterwall.scheduled.service.backend.TwitterApiService; +import org.woehlke.twitterwall.scheduled.service.persist.CountedEntitiesService; import org.woehlke.twitterwall.scheduled.service.persist.StoreOneTweet; import org.woehlke.twitterwall.scheduled.service.persist.StoreUserProfile; @@ -36,7 +38,7 @@ public class PrepareDataTestImpl implements PrepareDataTest { private static final Logger log = LoggerFactory.getLogger(TestControllerTest.class); @Autowired - public PrepareDataTestImpl(TwitterApiService twitterApiService, StoreOneTweet storeOneTweet, StoreUserProfile storeUserProfile, UserService userService, TaskService taskService, TwitterwallSchedulerProperties twitterwallSchedulerProperties, TwitterwallFrontendProperties twitterwallFrontendProperties, TwitterProperties twitterProperties) { + public PrepareDataTestImpl(TwitterApiService twitterApiService, StoreOneTweet storeOneTweet, StoreUserProfile storeUserProfile, UserService userService, TaskService taskService, TwitterwallSchedulerProperties twitterwallSchedulerProperties, TwitterwallFrontendProperties twitterwallFrontendProperties, TwitterProperties twitterProperties, CountedEntitiesService countedEntitiesService) { this.twitterApiService = twitterApiService; this.storeOneTweet = storeOneTweet; this.storeUserProfile = storeUserProfile; @@ -45,10 +47,12 @@ public PrepareDataTestImpl(TwitterApiService twitterApiService, StoreOneTweet st this.twitterwallSchedulerProperties = twitterwallSchedulerProperties; this.twitterwallFrontendProperties = twitterwallFrontendProperties; this.twitterProperties = twitterProperties; + this.countedEntitiesService = countedEntitiesService; } public void getTestDataTweets(String msg){ - Task task = taskService.create(msg, TaskType.CONTROLLER_GET_TESTDATA_TWEETS); + CountedEntities countedEntities = countedEntitiesService.countAll(); + Task task = taskService.create(msg, TaskType.CONTROLLER_GET_TESTDATA_TWEETS,countedEntities); List latest = new ArrayList<>(); try { log.info(msg + "--------------------------------------------------------------------"); @@ -79,11 +83,12 @@ public void getTestDataTweets(String msg){ for(Tweet tweet:latest){ log.debug(msg + tweet.toString()); } - taskService.done(task); + taskService.done(task,countedEntities); } public void getTestDataUser(String msg){ - Task task = taskService.create(msg, TaskType.CONTROLLER_GET_TESTDATA_USER); + CountedEntities countedEntities = countedEntitiesService.countAll(); + Task task = taskService.create(msg, TaskType.CONTROLLER_GET_TESTDATA_USER,countedEntities); List user = new ArrayList<>(); try { int loopId = 0; @@ -119,7 +124,8 @@ public void getTestDataUser(String msg){ for(org.woehlke.twitterwall.oodm.entities.User oneUser:user){ log.debug(msg + oneUser.toString()); } - taskService.done(task); + countedEntities = countedEntitiesService.countAll(); + taskService.done(task,countedEntities); } private final TwitterApiService twitterApiService; @@ -138,6 +144,8 @@ public void getTestDataUser(String msg){ private final TwitterProperties twitterProperties; + private final CountedEntitiesService countedEntitiesService; + private void logEnv(){ log.info("--------------------------------------------------------------------"); log.info("twitter.searchQuery = "+twitterProperties.getSearchQuery()); diff --git a/src/test/java/org/woehlke/twitterwall/frontend/controller/TaskControllerTest.java b/src/test/java/org/woehlke/twitterwall/frontend/controller/TaskControllerTest.java index c86b5c82..1a875db0 100644 --- a/src/test/java/org/woehlke/twitterwall/frontend/controller/TaskControllerTest.java +++ b/src/test/java/org/woehlke/twitterwall/frontend/controller/TaskControllerTest.java @@ -14,8 +14,10 @@ import org.springframework.test.web.servlet.MvcResult; import org.woehlke.twitterwall.Application; import org.woehlke.twitterwall.oodm.entities.Task; +import org.woehlke.twitterwall.oodm.entities.parts.CountedEntities; import org.woehlke.twitterwall.oodm.entities.parts.TaskType; import org.woehlke.twitterwall.oodm.service.TaskService; +import org.woehlke.twitterwall.scheduled.service.persist.CountedEntitiesService; import static org.assertj.core.api.Java6Assertions.assertThat; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; @@ -42,6 +44,9 @@ public class TaskControllerTest { @Autowired private TaskService taskService; + @Autowired + private CountedEntitiesService countedEntitiesService; + @Commit @Test public void controllerIsPresentTest(){ @@ -72,8 +77,9 @@ public void getAllTest()throws Exception { @Commit @Test public void getTaskByIdTest() throws Exception { + CountedEntities countedEntities = countedEntitiesService.countAll(); String msg ="getTaskByIdTest: "; - Task task = taskService.create(msg, TaskType.FETCH_TWEETS_FROM_TWITTER_SEARCH); + Task task = taskService.create(msg, TaskType.FETCH_TWEETS_FROM_TWITTER_SEARCH,countedEntities); long id = task.getId(); MvcResult result = this.mockMvc.perform(get("/task/"+id)) .andExpect(status().isOk()) diff --git a/src/test/java/org/woehlke/twitterwall/test/UserServiceTestImpl.java b/src/test/java/org/woehlke/twitterwall/test/UserServiceTestImpl.java index 7bea79a5..cfc1bb2f 100644 --- a/src/test/java/org/woehlke/twitterwall/test/UserServiceTestImpl.java +++ b/src/test/java/org/woehlke/twitterwall/test/UserServiceTestImpl.java @@ -10,11 +10,13 @@ import org.springframework.transaction.annotation.Transactional; import org.woehlke.twitterwall.conf.TwitterwallFrontendProperties; import org.woehlke.twitterwall.oodm.entities.Task; +import org.woehlke.twitterwall.oodm.entities.parts.CountedEntities; import org.woehlke.twitterwall.oodm.entities.parts.TaskType; import org.woehlke.twitterwall.oodm.service.TaskService; import org.woehlke.twitterwall.scheduled.service.backend.TwitterApiService; import org.woehlke.twitterwall.oodm.entities.User; import org.woehlke.twitterwall.oodm.service.UserService; +import org.woehlke.twitterwall.scheduled.service.persist.CountedEntitiesService; import org.woehlke.twitterwall.scheduled.service.persist.StoreUserProfile; import javax.persistence.NoResultException; @@ -44,6 +46,10 @@ public class UserServiceTestImpl implements UserServiceTest { @Autowired private TwitterwallFrontendProperties twitterwallFrontendProperties; + + @Autowired + private CountedEntitiesService countedEntitiesService; + @Override public User createImprintUser(){ return createUser(twitterwallFrontendProperties.getImprintScreenName()); @@ -51,8 +57,9 @@ public User createImprintUser(){ @Override public User createUser(String screenName) { + CountedEntities countedEntities = countedEntitiesService.countAll(); String msg = "createUser for screenName="+screenName; - Task task = taskService.create(msg, TaskType.CONTROLLER_GET_TESTDATA_USER); + Task task = taskService.create(msg, TaskType.CONTROLLER_GET_TESTDATA_USER,countedEntities); log.info("-----------------------------------------"); try { log.info("screenName = "+ screenName); @@ -82,7 +89,8 @@ public User createUser(String screenName) { return user; } } finally { - taskService.done(task); + countedEntities = countedEntitiesService.countAll(); + taskService.done(task,countedEntities); log.info("... finally done ..."); log.info("-----------------------------------------"); }