/*********************************************************************************** * * Copyright (c) 2014 Kamil Baczkowicz * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v1.0 which accompany this distribution. * * The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html * * The Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * * Kamil Baczkowicz - initial API and implementation and/or initial documentation * */ package pl.baczkowicz.mqttspy.ui.scripts; import java.io.File; import java.util.ArrayList; import java.util.List; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import pl.baczkowicz.mqttspy.configuration.ConfigurationManager; import pl.baczkowicz.mqttspy.configuration.generated.TabbedSubscriptionDetails; import pl.baczkowicz.mqttspy.connectivity.IMqttConnection; import pl.baczkowicz.mqttspy.scripts.MqttScriptManager; import pl.baczkowicz.spy.common.generated.ScriptDetails; import pl.baczkowicz.spy.eventbus.IKBus; import pl.baczkowicz.spy.files.FileUtils; import pl.baczkowicz.spy.scripts.Script; import pl.baczkowicz.spy.ui.properties.PublicationScriptProperties; import pl.baczkowicz.spy.ui.scripts.ScriptTypeEnum; import pl.baczkowicz.spy.ui.utils.RunLaterExecutor; /** * Script manager that interacts with the UI. */ public class InteractiveScriptManager extends MqttScriptManager { /** Diagnostic logger. */ // private final static Logger logger = LoggerFactory.getLogger(InteractiveScriptManager.class); /** List of scripts, as displayed on the UI. */ private final ObservableList<PublicationScriptProperties> observableScriptList = FXCollections.observableArrayList(); public InteractiveScriptManager(final IKBus eventBus, final IMqttConnection connection) { super(eventBus, new RunLaterExecutor(), connection); } public void addScripts(final List<ScriptDetails> scriptDetails, final ScriptTypeEnum type) { final List<Script> addedScripts = populateScripts(scriptDetails); for (final Script script : addedScripts) { final PublicationScriptProperties properties = new PublicationScriptProperties(script); properties.typeProperty().setValue(type); script.setObserver(properties); observableScriptList.add(properties); } } public static String getScriptDirectoryForConnection(final String configuredDirectory) { final String filePathSeparator = System.getProperty("file.separator"); if (configuredDirectory != null && !configuredDirectory.isEmpty()) { if (!configuredDirectory.endsWith(filePathSeparator)) { return configuredDirectory + filePathSeparator; } return configuredDirectory; } else { // If directory defined, use the mqtt-spy's home directory return ConfigurationManager.getDefaultHomeDirectory(); } } public void addScripts(final String directory, final boolean includeSubdirectories, final ScriptTypeEnum type) { final List<File> files = new ArrayList<File>(); files.addAll(FileUtils.getFileNamesForDirectory( getScriptDirectoryForConnection(directory), includeSubdirectories, SCRIPT_EXTENSION)); populateScriptsFromFileList(directory, files, type); } public void addScripts(final String directory, final ScriptTypeEnum type) { final List<File> files = new ArrayList<File>(); files.addAll(FileUtils.getFileNamesForDirectory( getScriptDirectoryForConnection(directory), SCRIPT_EXTENSION)); populateScriptsFromFileList(directory, files, type); } public void addSubscriptionScripts(final List<TabbedSubscriptionDetails> list) { final List<ScriptDetails> scripts = new ArrayList<>(); for (final TabbedSubscriptionDetails sub : list) { if (sub.getScriptFile() != null && !sub.getScriptFile().trim().isEmpty()) { scripts.add(new ScriptDetails(false, false, sub.getScriptFile())); } } addScripts(scripts, ScriptTypeEnum.SUBSCRIPTION); } public void populateScriptsFromFileList(final String rootDirectory, final List<File> files, final ScriptTypeEnum type) { final List<Script> addedScripts = populateScriptsFromFileList(files); for (final Script script : addedScripts) { script.setRootDirectory(rootDirectory); final PublicationScriptProperties properties = new PublicationScriptProperties(script); properties.typeProperty().setValue(type); script.setObserver(properties); observableScriptList.add(properties); } } public void stopScriptFile(final File scriptFile) { final Script script = getPublicationScriptProperties(observableScriptList, getScriptName(scriptFile)).getScript(); stopScript(script); } public static PublicationScriptProperties getPublicationScriptProperties(final ObservableList<PublicationScriptProperties> observableScriptList, final String scriptName) { for (final PublicationScriptProperties properties : observableScriptList) { if (properties.getScript().getName().equals(scriptName)) { return properties; } } return null; } public ObservableList<PublicationScriptProperties> getObservableScriptList() { return observableScriptList; } public void removeScript(final PublicationScriptProperties item) { getScriptsMap().remove(item.getScript().getScriptId()); observableScriptList.remove(item); } }