use of au.gov.asd.tac.constellation.graph.node.create.NewDefaultSchemaGraphAction in project constellation by constellation-app.
the class ExecuteListener method handle.
/**
* Handles the click of the execute button in the data access view.
* <p/>
* If the execute button was in the "Go" state then it will iterate through
* all the tabs and run the enabled and valid plugins.
* <p/>
* If the execute button was in the "Stop" state then cancel any running plugins.
*
* @param event the event triggered by clicking the execute button
*/
@Override
public void handle(final ActionEvent event) {
// When no graph present, create a new one
if (DataAccessPaneState.getCurrentGraphId() == null && dataAccessPane.getDataAccessTabPane().hasActiveAndValidPlugins()) {
// Create new graph
final NewDefaultSchemaGraphAction graphAction = new NewDefaultSchemaGraphAction();
graphAction.actionPerformed(null);
Graph newActiveGraph = null;
// Wait while graph is getting made
while (newActiveGraph == null) {
newActiveGraph = GraphManager.getDefault().getActiveGraph();
}
// Set the state's current graph ID to the ID of the new graph
DataAccessPaneState.setCurrentGraphId(newActiveGraph.getId());
}
// Run the selected queries
final ObservableList<Tab> tabs = dataAccessPane.getDataAccessTabPane().getTabPane().getTabs();
if (CollectionUtils.isNotEmpty(tabs) && DataAccessPaneState.isExecuteButtonIsGo()) {
// Change the execute button to "Stop" and do not disable because it is now running
dataAccessPane.setExecuteButtonToStop(false);
// Set the state for the current graph state to running queries
DataAccessPaneState.setQueriesRunning(true);
// Check to see if an output dir exists. Non exisiting dirs do not prevent the
// plugins running, just triggers a notification
final File outputDir = DataAccessPreferenceUtilities.getDataAccessResultsDirEx();
if (outputDir != null && outputDir.isDirectory()) {
StatusDisplayer.getDefault().setStatusText(String.format(STATUS_MESSAGE_FORMAT, outputDir.getAbsolutePath()));
} else if (outputDir != null) {
NotificationDisplayer.getDefault().notify(RESULTS_DIR_NOT_FOUND_TITLE, ERROR_ICON, String.format(RESULTS_DIR_NOT_FOUND_MSG, outputDir.getAbsolutePath()), null);
}
// Save the current data access view state
PluginExecution.withPlugin(new SimplePlugin(SAVE_STATE_PLUGIN_NAME) {
@Override
protected void execute(final PluginGraphs graphs, final PluginInteraction interaction, final PluginParameters parameters) throws InterruptedException, PluginException {
DataAccessUtilities.saveDataAccessState(dataAccessPane.getDataAccessTabPane().getTabPane(), GraphNode.getGraph(DataAccessPaneState.getCurrentGraphId()));
}
}).executeLater(null);
// Run the plugins from each tab. The barrier is the plugin run futures
// from the previous tab. When the tab is run, it has the option to
// wait for the previous tab to complete.
List<Future<?>> barrier = null;
for (final Tab tab : tabs) {
LOGGER.log(Level.INFO, String.format("Running tab: %s", tab.getText()));
barrier = DataAccessTabPane.getQueryPhasePane(tab).runPlugins(barrier);
}
// Asynchronously start the task that waits for all the plugins to complete.
// Once they are complete this task will perform cleanup.
CompletableFuture.runAsync(new WaitForQueriesToCompleteTask(dataAccessPane, DataAccessPaneState.getCurrentGraphId()), dataAccessPane.getParentComponent().getExecutorService());
LOGGER.info("Plugins run.");
} else {
// The execute button is in a "Stop" state. So cancel any running plugins.
DataAccessPaneState.getRunningPlugins().keySet().forEach(running -> running.cancel(true));
// Nothing is running now, so change the execute button to "Go".
dataAccessPane.setExecuteButtonToGo(false);
}
// Disables all plugins in the plugin pane
if (DataAccessPreferenceUtilities.isDeselectPluginsOnExecuteEnabled()) {
deselectAllPlugins();
}
}
Aggregations