From d159fc6fe899985c87e1535c8f0145962e31484a Mon Sep 17 00:00:00 2001 From: Arthur POIRET Date: Mon, 5 Nov 2018 14:15:23 +0100 Subject: [PATCH 1/5] Clear useless maven dependencies --- pom.xml | 49 +++++-------------- .../core/services/OwlPlugCentralService.java | 4 +- .../owlplug/core/utils/UrlUtils.java | 18 ++++++- src/main/resources/fxml/OptionsView.fxml | 2 +- 4 files changed, 33 insertions(+), 40 deletions(-) diff --git a/pom.xml b/pom.xml index 092832da..d39c0235 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.dropsnorz owlplug - 0.4.0-SNAPSHOT + 0.4.1-beta jar owlplug @@ -46,27 +46,12 @@ com.h2database h2 - 1.4.190 runtime - - junit - junit - 4.12 - test - - - - org.hamcrest - hamcrest-library - test - - ch.qos.logback logback-core - ${logback.version} @@ -86,36 +71,16 @@ 1.20 - - org.springframework.boot - spring-boot-starter-security - org.springframework.boot spring-boot-starter-tomcat - - org.springframework.security.oauth - spring-security-oauth2 - 1.0.5.RELEASE - - - - org.springframework.security - spring-security-oauth2-client - - - org.springframework.security - spring-security-oauth2-jose - - javax.xml.bind jaxb-api - javax.servlet javax.servlet-api @@ -175,6 +140,18 @@ net.sf.ehcache ehcache + + + junit + junit + test + + + + org.hamcrest + hamcrest-library + test + diff --git a/src/main/java/com/dropsnorz/owlplug/core/services/OwlPlugCentralService.java b/src/main/java/com/dropsnorz/owlplug/core/services/OwlPlugCentralService.java index 2c8ebb2a..ef35c46d 100644 --- a/src/main/java/com/dropsnorz/owlplug/core/services/OwlPlugCentralService.java +++ b/src/main/java/com/dropsnorz/owlplug/core/services/OwlPlugCentralService.java @@ -1,9 +1,9 @@ package com.dropsnorz.owlplug.core.services; +import com.dropsnorz.owlplug.core.utils.UrlUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import org.springframework.web.util.UriUtils; @Service public class OwlPlugCentralService { @@ -14,7 +14,7 @@ public class OwlPlugCentralService { public String getPluginImageUrl(String name) { - return owlplugCentralUrl + "/image-registry?name=" + UriUtils.encode(name, "UTF-8"); + return owlplugCentralUrl + "/image-registry?name=" + UrlUtils.encodeQuery(name); } diff --git a/src/main/java/com/dropsnorz/owlplug/core/utils/UrlUtils.java b/src/main/java/com/dropsnorz/owlplug/core/utils/UrlUtils.java index 34648c43..7a4211eb 100644 --- a/src/main/java/com/dropsnorz/owlplug/core/utils/UrlUtils.java +++ b/src/main/java/com/dropsnorz/owlplug/core/utils/UrlUtils.java @@ -1,9 +1,12 @@ package com.dropsnorz.owlplug.core.utils; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; + public class UrlUtils { /** - * Replaces spaces with url char %20 + * Replaces spaces with url char %20. * @param url - The url * @return url without space chars */ @@ -14,5 +17,18 @@ public static String fixSpaces(String url) { } return url.replace(" ", "%20"); } + + /** + * Translates a string into application/x-www-form-urlencodedformat using UTF-8 encoding. + * @param query - the query parameter to encode + * @return an encoded query parameter + */ + public static String encodeQuery(String query) { + try { + return URLEncoder.encode(query, "UTF-8"); + } catch (UnsupportedEncodingException e) { + return null; + } + } } diff --git a/src/main/resources/fxml/OptionsView.fxml b/src/main/resources/fxml/OptionsView.fxml index 4a0eca2a..85c099ad 100644 --- a/src/main/resources/fxml/OptionsView.fxml +++ b/src/main/resources/fxml/OptionsView.fxml @@ -131,7 +131,7 @@ - From ddd6e2f8d546c9688ae5d1fd0af3a92680c28ecc Mon Sep 17 00:00:00 2001 From: Arthur POIRET Date: Mon, 5 Nov 2018 14:47:25 +0100 Subject: [PATCH 2/5] Fix user account deletion from main comboBox --- pom.xml | 2 +- .../dropsnorz/owlplug/core/controllers/MainController.java | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index d39c0235..78e6307b 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.dropsnorz owlplug - 0.4.1-beta + 0.4.2-beta jar owlplug diff --git a/src/main/java/com/dropsnorz/owlplug/core/controllers/MainController.java b/src/main/java/com/dropsnorz/owlplug/core/controllers/MainController.java index 5e222e43..e468114d 100644 --- a/src/main/java/com/dropsnorz/owlplug/core/controllers/MainController.java +++ b/src/main/java/com/dropsnorz/owlplug/core/controllers/MainController.java @@ -97,16 +97,20 @@ public void initialize() { Platform.runLater(() -> accountComboBox.setValue(oldValue)); } - if (newValue instanceof UserAccount) { UserAccount userAccount = (UserAccount) newValue; prefs.putLong(ApplicationDefaults.SELECTED_ACCOUNT_KEY, userAccount.getId()); } + accountComboBox.hide(); }); accountComboBox.setButtonCell(new AccountCellFactory(imageCache, Pos.CENTER_RIGHT).call(null)); accountComboBox.setCellFactory(new AccountCellFactory(authentificationService,imageCache, true)); + + JFXComboBoxListViewSkin accountCBSkin = new JFXComboBoxListViewSkin(accountComboBox); + accountCBSkin.setHideOnClick(false); + accountComboBox.setSkin(accountCBSkin); refreshAccounts(); @@ -166,6 +170,7 @@ public void refreshAccounts() { accountComboBox.setValue(null); } + } public StackPane getRootPane() { From 5dfe00469cb6edf4fdb618e61211971ec172f3ec Mon Sep 17 00:00:00 2001 From: Arthur POIRET Date: Tue, 6 Nov 2018 15:51:31 +0100 Subject: [PATCH 3/5] Remove plugin arch and platform qualifer to resolve image based on plugin filename --- .../owlplug/core/services/PluginService.java | 7 ++- .../owlplug/core/utils/PluginUtils.java | 44 +++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/dropsnorz/owlplug/core/utils/PluginUtils.java diff --git a/src/main/java/com/dropsnorz/owlplug/core/services/PluginService.java b/src/main/java/com/dropsnorz/owlplug/core/services/PluginService.java index 949e8302..db2c9331 100644 --- a/src/main/java/com/dropsnorz/owlplug/core/services/PluginService.java +++ b/src/main/java/com/dropsnorz/owlplug/core/services/PluginService.java @@ -4,6 +4,7 @@ import com.dropsnorz.owlplug.core.components.TaskFactory; import com.dropsnorz.owlplug.core.dao.PluginDAO; import com.dropsnorz.owlplug.core.model.Plugin; +import com.dropsnorz.owlplug.core.utils.PluginUtils; import com.dropsnorz.owlplug.store.model.StoreProduct; import com.dropsnorz.owlplug.store.service.StoreService; import com.google.common.collect.Iterables; @@ -43,12 +44,14 @@ public void syncPlugins() { public String resolveImageUrl(Plugin plugin) { String url = ""; - Iterable products = pluginStoreService.getProductsByName(plugin.getName()); + + String absoluteName = PluginUtils.absoluteName(plugin.getName()); + Iterable products = pluginStoreService.getProductsByName(absoluteName); if (!Iterables.isEmpty(products)) { url = Iterables.get(products, 0).getIconUrl(); } else { - url = owlplugCentralService.getPluginImageUrl(plugin.getName()); + url = owlplugCentralService.getPluginImageUrl(absoluteName); } return url; diff --git a/src/main/java/com/dropsnorz/owlplug/core/utils/PluginUtils.java b/src/main/java/com/dropsnorz/owlplug/core/utils/PluginUtils.java new file mode 100644 index 00000000..12565669 --- /dev/null +++ b/src/main/java/com/dropsnorz/owlplug/core/utils/PluginUtils.java @@ -0,0 +1,44 @@ +package com.dropsnorz.owlplug.core.utils; + +public class PluginUtils { + + /** + * Returns plugin name without platform and architecture qualifiers. + * Example: + * input: WobbleIzer_x64 + * output: WobbleIzer + * @param name - the plugin name to filter + * @return The absolute plugin name + */ + public static String absoluteName(String name) { + + if (name == null) { + return null; + } + + // Remove trailing (XXbit) + name = name.replaceAll("[(]64bit[)]$", ""); + name = name.replaceAll("[(]32bit[)]$", ""); + // Remove trailing winXX, (?i) for case insensitive regex + name = name.replaceAll("(?i)win64$", ""); + name = name.replaceAll("(?i)win32$", ""); + // Remove trailing winXXvst, (?i) for case insensitive regex + name = name.replaceAll("(?i)win64vst$", ""); + name = name.replaceAll("(?i)win32vst$", ""); + // Remove trailing xXX + name = name.replaceAll("x64$", ""); + name = name.replaceAll("x32$", ""); + // Remove trailing XX + name = name.replaceAll("64$", ""); + name = name.replaceAll("32$", ""); + + //Remove trailing signs + name = name.replaceAll("(-)*$", ""); + name = name.replaceAll("(_)*$", ""); + name = name.replaceAll("([.])*$", ""); + + return name.trim(); + + } + +} From 0d45f8d8de6467ef50c4a1e3899d319aa55f37eb Mon Sep 17 00:00:00 2001 From: Arthur POIRET Date: Wed, 7 Nov 2018 13:51:25 +0100 Subject: [PATCH 4/5] Refacto TaskRunner data structures --- .../owlplug/core/components/TaskFactory.java | 9 --- .../owlplug/core/components/TaskRunner.java | 76 +++++++++++-------- .../core/controllers/TaskBarController.java | 6 +- 3 files changed, 49 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/dropsnorz/owlplug/core/components/TaskFactory.java b/src/main/java/com/dropsnorz/owlplug/core/components/TaskFactory.java index ad860b20..ebea15a0 100644 --- a/src/main/java/com/dropsnorz/owlplug/core/components/TaskFactory.java +++ b/src/main/java/com/dropsnorz/owlplug/core/components/TaskFactory.java @@ -73,19 +73,10 @@ public TaskExecutionContext createStoreSyncTask() { return create(task); } - public TaskExecutionContext create(AbstractTask task) { - bindOnFailHandler(task); return buildContext(task); } - - private void bindOnFailHandler(AbstractTask task) { - task.setOnFailed(e -> { - taskManager.triggerOnError(); - }); - } - private void notifyListeners(List listeners) { for (SimpleEventListener listener : listeners) { listener.onAction(); diff --git a/src/main/java/com/dropsnorz/owlplug/core/components/TaskRunner.java b/src/main/java/com/dropsnorz/owlplug/core/components/TaskRunner.java index b0432145..19408490 100644 --- a/src/main/java/com/dropsnorz/owlplug/core/components/TaskRunner.java +++ b/src/main/java/com/dropsnorz/owlplug/core/components/TaskRunner.java @@ -4,10 +4,10 @@ import com.dropsnorz.owlplug.core.tasks.AbstractTask; import com.dropsnorz.owlplug.core.tasks.TaskResult; import java.util.ArrayList; -import java.util.Collections; import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.LinkedBlockingDeque; import javafx.application.Platform; +import javafx.concurrent.Worker.State; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -33,25 +33,29 @@ public class TaskRunner { private TaskBarController taskBarController; private AsyncListenableTaskExecutor exec; - private CopyOnWriteArrayList pendingTasks; - private AbstractTask currentTask= null; + private LinkedBlockingDeque taskQueue; + private AbstractTask currentTask = null; private ArrayList taskHistory; private TaskRunner() { - exec = new SimpleAsyncTaskExecutor(); - pendingTasks = new CopyOnWriteArrayList(); + taskQueue = new LinkedBlockingDeque(); taskHistory = new ArrayList(); } public void submitTask(AbstractTask task) { + log.debug("Task submited to queue - {} ", task.getClass().getName()); + taskQueue.addLast(task); + scheduleNext(); + + } + public void submitTaskOnQueueHead(AbstractTask task) { log.debug("Task submited to queue - {} ", task.getClass().getName()); - pendingTasks.add(task); - addInTaskHistory(task); - refresh(false); + taskQueue.addFirst(task); + scheduleNext(); } @@ -59,48 +63,56 @@ public void submitTask(AbstractTask task) { * Refresh the task runner by submitting the next pending task for execution. * @param deleteCurrentTask true if the current running task should be deleted */ - private synchronized void refresh(boolean deleteCurrentTask) { - - if (deleteCurrentTask) { - log.debug("Remove task from queue - {}", currentTask.getClass().getName()); - pendingTasks.remove(currentTask); - currentTask = null; - //Unbind progress indicators - taskBarController.taskProgressBar.progressProperty().unbind(); - taskBarController.taskLabel.textProperty().unbind(); - } + private synchronized void scheduleNext() { - if (!pendingTasks.isEmpty() && currentTask == null) { + if (!taskQueue.isEmpty() && currentTask == null) { disableError(); //Get the next pending task - this.currentTask = pendingTasks.get(0); + AbstractTask polledTask = taskQueue.pollFirst(); + setCurrentTask(polledTask); + addInTaskHistory(currentTask); log.debug("Task submitted to executor - {} ", currentTask.getClass().getName()); - //Bind progress indicators - taskBarController.taskProgressBar.progressProperty().bind(currentTask.progressProperty()); - taskBarController.taskLabel.textProperty().bind(currentTask.messageProperty()); - ListenableFuture future = (ListenableFuture) exec.submitListenable(currentTask); future.addCallback(new ListenableFutureCallback() { - @Override public void onSuccess(TaskResult result) { Platform.runLater(() -> { - refresh(true); + if (currentTask.getState().equals(State.FAILED)) { + triggerOnError(); + } + removeCurrentTask(); + scheduleNext(); }); } @Override public void onFailure(Throwable ex) { Platform.runLater(() -> { - refresh(true); + removeCurrentTask(); + scheduleNext(); }); - } }); } } + private void setCurrentTask(AbstractTask task) { + this.currentTask = task; + //Bind progress indicators + taskBarController.taskProgressBar.progressProperty().bind(currentTask.progressProperty()); + taskBarController.taskLabel.textProperty().bind(currentTask.messageProperty()); + } + + private void removeCurrentTask() { + //Unbind progress indicators + taskBarController.taskProgressBar.progressProperty().unbind(); + taskBarController.taskLabel.textProperty().unbind(); + + currentTask = null; + + } + private void addInTaskHistory(AbstractTask task) { if (taskHistory.size() >= 10) { taskHistory.remove(0); @@ -109,14 +121,14 @@ private void addInTaskHistory(AbstractTask task) { } public List getPendingTasks() { - return Collections.unmodifiableList(pendingTasks); + return new ArrayList(taskQueue); } public List getTaskHistory() { - return Collections.unmodifiableList(taskHistory); + return new ArrayList(taskHistory); } - public void triggerOnError() { + private void triggerOnError() { taskBarController.taskProgressBar.getStyleClass().add("progress-bar-error"); } diff --git a/src/main/java/com/dropsnorz/owlplug/core/controllers/TaskBarController.java b/src/main/java/com/dropsnorz/owlplug/core/controllers/TaskBarController.java index fcf6ac68..e842968d 100644 --- a/src/main/java/com/dropsnorz/owlplug/core/controllers/TaskBarController.java +++ b/src/main/java/com/dropsnorz/owlplug/core/controllers/TaskBarController.java @@ -9,6 +9,7 @@ import com.jfoenix.controls.JFXPopup; import com.jfoenix.controls.JFXPopup.PopupHPosition; import com.jfoenix.controls.JFXPopup.PopupVPosition; +import java.util.ArrayList; import javafx.concurrent.Worker.State; import javafx.fxml.FXML; import javafx.scene.control.Label; @@ -51,7 +52,10 @@ private void openTaskHistory() { if (!taskRunner.getTaskHistory().isEmpty()) { JFXListView list = new JFXListView<>(); list.setPrefSize(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE); - list.getItems().addAll(taskRunner.getTaskHistory()); + + ArrayList tasks = new ArrayList<>(taskRunner.getTaskHistory()); + tasks.addAll(taskRunner.getPendingTasks()); + list.getItems().addAll(tasks); list.setCellFactory(new Callback, ListCell>() { @Override From 889c4352fa9fe8b33e65a90f57dd68d7fcf08f85 Mon Sep 17 00:00:00 2001 From: Arthur POIRET Date: Wed, 7 Nov 2018 18:07:00 +0100 Subject: [PATCH 5/5] Update SyncTask scheduling on task runner. --- .../owlplug/core/components/TaskRunner.java | 8 ++++++++ .../core/controllers/DirectoryInfoController.java | 4 ++-- .../core/controllers/PluginInfoController.java | 2 +- .../controllers/dialogs/WelcomeDialogController.java | 2 +- .../core/services/PluginRepositoryService.java | 8 ++++---- .../owlplug/core/services/PluginService.java | 2 +- .../owlplug/core/tasks/TaskExecutionContext.java | 6 +++++- .../owlplug/store/service/StoreService.java | 12 ++++++++---- 8 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/dropsnorz/owlplug/core/components/TaskRunner.java b/src/main/java/com/dropsnorz/owlplug/core/components/TaskRunner.java index 19408490..e76f1398 100644 --- a/src/main/java/com/dropsnorz/owlplug/core/components/TaskRunner.java +++ b/src/main/java/com/dropsnorz/owlplug/core/components/TaskRunner.java @@ -45,6 +45,10 @@ private TaskRunner() { } + /** + * Submit a task at the end of executor queue. + * @param task - the task to submit + */ public void submitTask(AbstractTask task) { log.debug("Task submited to queue - {} ", task.getClass().getName()); taskQueue.addLast(task); @@ -52,6 +56,10 @@ public void submitTask(AbstractTask task) { } + /** + * Submit a task in front of the executor queue. + * @param task - the task to submit + */ public void submitTaskOnQueueHead(AbstractTask task) { log.debug("Task submited to queue - {} ", task.getClass().getName()); taskQueue.addFirst(task); diff --git a/src/main/java/com/dropsnorz/owlplug/core/controllers/DirectoryInfoController.java b/src/main/java/com/dropsnorz/owlplug/core/controllers/DirectoryInfoController.java index 1b53bf16..9b4ece5d 100644 --- a/src/main/java/com/dropsnorz/owlplug/core/controllers/DirectoryInfoController.java +++ b/src/main/java/com/dropsnorz/owlplug/core/controllers/DirectoryInfoController.java @@ -71,8 +71,8 @@ public void initialize() { removeButton.setOnAction(removeEvent -> { dialog.close(); taskFactory.create(new DirectoryRemoveTask(pluginDirectory)) - .setOnSucceeded(x -> taskFactory.createPluginSyncTask().run()) - .run(); + .setOnSucceeded(x -> taskFactory.createPluginSyncTask().schedule()) + .schedule(); }); removeButton.getStyleClass().add("button-danger"); diff --git a/src/main/java/com/dropsnorz/owlplug/core/controllers/PluginInfoController.java b/src/main/java/com/dropsnorz/owlplug/core/controllers/PluginInfoController.java index 7c7138af..de60f0ee 100644 --- a/src/main/java/com/dropsnorz/owlplug/core/controllers/PluginInfoController.java +++ b/src/main/java/com/dropsnorz/owlplug/core/controllers/PluginInfoController.java @@ -104,7 +104,7 @@ public void initialize() { dialog.close(); taskFactory.create(new PluginRemoveTask(currentPlugin, pluginDAO)) .setOnSucceeded(x -> pluginsController.refreshPlugins()) - .run(); + .schedule(); }); removeButton.getStyleClass().add("button-danger"); diff --git a/src/main/java/com/dropsnorz/owlplug/core/controllers/dialogs/WelcomeDialogController.java b/src/main/java/com/dropsnorz/owlplug/core/controllers/dialogs/WelcomeDialogController.java index b6f2ad19..f7bd712f 100644 --- a/src/main/java/com/dropsnorz/owlplug/core/controllers/dialogs/WelcomeDialogController.java +++ b/src/main/java/com/dropsnorz/owlplug/core/controllers/dialogs/WelcomeDialogController.java @@ -70,7 +70,7 @@ public void initialize() { if (isDirectoryPathValid()) { this.close(); prefs.put(ApplicationDefaults.VST_DIRECTORY_KEY, directoryTextField.getText()); - taskFactory.createPluginSyncTask().run(); + taskFactory.createPluginSyncTask().schedule(); } else { errorLabel.setVisible(true); } diff --git a/src/main/java/com/dropsnorz/owlplug/core/services/PluginRepositoryService.java b/src/main/java/com/dropsnorz/owlplug/core/services/PluginRepositoryService.java index 6e40d60a..f3475833 100644 --- a/src/main/java/com/dropsnorz/owlplug/core/services/PluginRepositoryService.java +++ b/src/main/java/com/dropsnorz/owlplug/core/services/PluginRepositoryService.java @@ -82,8 +82,8 @@ public void pull(PluginRepository repository) { IRepositoryStrategy strategy = repositoryStrategyResolver.getStrategy(repository, parameters); taskFactory.create(new RepositoryTask(strategy, parameters, repository)) - .setOnSucceeded(e -> taskFactory.createPluginSyncTask().run()) - .run(); + .setOnSucceeded(e -> taskFactory.createPluginSyncTask().schedule()) + .schedule(); } @@ -96,8 +96,8 @@ public void delete(PluginRepository repository) { String localPath = getLocalRepositoryPath(repository); taskFactory.create(new RepositoryRemoveTask(pluginRepositoryDAO, repository, localPath)) - .setOnSucceeded(e -> taskFactory.createPluginSyncTask().run()) - .run(); + .setOnSucceeded(e -> taskFactory.createPluginSyncTask().scheduleNow()) + .schedule(); } diff --git a/src/main/java/com/dropsnorz/owlplug/core/services/PluginService.java b/src/main/java/com/dropsnorz/owlplug/core/services/PluginService.java index db2c9331..bc0007d3 100644 --- a/src/main/java/com/dropsnorz/owlplug/core/services/PluginService.java +++ b/src/main/java/com/dropsnorz/owlplug/core/services/PluginService.java @@ -30,7 +30,7 @@ public class PluginService { public void syncPlugins() { - taskFactory.createPluginSyncTask().run(); + taskFactory.createPluginSyncTask().schedule(); } diff --git a/src/main/java/com/dropsnorz/owlplug/core/tasks/TaskExecutionContext.java b/src/main/java/com/dropsnorz/owlplug/core/tasks/TaskExecutionContext.java index 735a2687..45d5dcc2 100644 --- a/src/main/java/com/dropsnorz/owlplug/core/tasks/TaskExecutionContext.java +++ b/src/main/java/com/dropsnorz/owlplug/core/tasks/TaskExecutionContext.java @@ -20,10 +20,14 @@ public AbstractTask getTask() { return task; } - public void run() { + public void schedule() { taskRunner.submitTask(task); } + public void scheduleNow() { + taskRunner.submitTaskOnQueueHead(task); + } + public TaskExecutionContext setOnSucceeded(EventHandler value) { task.setOnSucceeded(value); return this; diff --git a/src/main/java/com/dropsnorz/owlplug/store/service/StoreService.java b/src/main/java/com/dropsnorz/owlplug/store/service/StoreService.java index cf2e9cf8..db02a077 100644 --- a/src/main/java/com/dropsnorz/owlplug/store/service/StoreService.java +++ b/src/main/java/com/dropsnorz/owlplug/store/service/StoreService.java @@ -3,7 +3,6 @@ import com.dropsnorz.owlplug.core.components.ApplicationDefaults; import com.dropsnorz.owlplug.core.components.TaskFactory; import com.dropsnorz.owlplug.core.model.OSType; -import com.dropsnorz.owlplug.core.tasks.TaskException; import com.dropsnorz.owlplug.store.dao.StoreDAO; import com.dropsnorz.owlplug.store.dao.StoreProductDAO; import com.dropsnorz.owlplug.store.model.Store; @@ -17,7 +16,6 @@ import java.io.IOException; import javax.annotation.PostConstruct; import org.apache.http.HttpEntity; -import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; @@ -60,7 +58,7 @@ private void init() { } public void syncStores() { - taskFactory.createStoreSyncTask().run(); + taskFactory.createStoreSyncTask().schedule(); } @@ -94,9 +92,15 @@ public Iterable getProductsByName(String name) { return storeProductDAO.findByNameContainingIgnoreCase(name); } + /** + * Downloads and installs a store product in a directory. + * @param product - store product to retrieve + * @param targetDirectory - directory where the product will be installed + */ public void install(StoreProduct product, File targetDirectory) { taskFactory.create(new ProductInstallTask(product, targetDirectory, applicationDefaults)) - .run(); + .setOnSucceeded(e -> taskFactory.createPluginSyncTask().scheduleNow()) + .schedule(); } /**