lttng.control: add possibility to run a list of lttng commands
authorBernd Hufmann <Bernd.Hufmann@ericsson.com>
Tue, 10 Dec 2013 17:18:11 +0000 (12:18 -0500)
committerBernd Hufmann <bernd.hufmann@ericsson.com>
Fri, 13 Jun 2014 16:48:41 +0000 (12:48 -0400)
Change-Id: Ib391f02da6980f1d9381212bc448c12de2d69279
Signed-off-by: Bernd Hufmann <Bernd.Hufmann@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/26757
Reviewed-by: Marc-Andre Laperle <marc-andre.laperle@ericsson.com>
Tested-by: Marc-Andre Laperle <marc-andre.laperle@ericsson.com>
Tested-by: Hudson CI
13 files changed:
org.eclipse.linuxtools.lttng2.control.ui/META-INF/MANIFEST.MF
org.eclipse.linuxtools.lttng2.control.ui/build.properties
org.eclipse.linuxtools.lttng2.control.ui/plugin.properties
org.eclipse.linuxtools.lttng2.control.ui/plugin.xml
org.eclipse.linuxtools.lttng2.control.ui/src/org/eclipse/linuxtools/internal/lttng2/control/ui/views/dialogs/ISelectCommandScriptDialog.java [new file with mode: 0644]
org.eclipse.linuxtools.lttng2.control.ui/src/org/eclipse/linuxtools/internal/lttng2/control/ui/views/dialogs/OpenCommandScriptDialog.java [new file with mode: 0644]
org.eclipse.linuxtools.lttng2.control.ui/src/org/eclipse/linuxtools/internal/lttng2/control/ui/views/dialogs/TraceControlDialogFactory.java
org.eclipse.linuxtools.lttng2.control.ui/src/org/eclipse/linuxtools/internal/lttng2/control/ui/views/handlers/ExecuteCommandScriptHandler.java [new file with mode: 0644]
org.eclipse.linuxtools.lttng2.control.ui/src/org/eclipse/linuxtools/internal/lttng2/control/ui/views/messages/Messages.java
org.eclipse.linuxtools.lttng2.control.ui/src/org/eclipse/linuxtools/internal/lttng2/control/ui/views/messages/messages.properties
org.eclipse.linuxtools.lttng2.control.ui/src/org/eclipse/linuxtools/internal/lttng2/control/ui/views/model/impl/TraceSessionGroup.java
org.eclipse.linuxtools.lttng2.control.ui/src/org/eclipse/linuxtools/internal/lttng2/control/ui/views/service/ILttngControlService.java
org.eclipse.linuxtools.lttng2.control.ui/src/org/eclipse/linuxtools/internal/lttng2/control/ui/views/service/LTTngControlService.java

index e65c47f8a0c7fb0ee76d713f3e006c5bc4165ad0..6902dfd3c25643b515b3d34930db32923caad131 100644 (file)
@@ -38,7 +38,8 @@ Export-Package: org.eclipse.linuxtools.internal.lttng2.control.ui;x-fr
  x-friends:="org.eclipse.linuxtools.lttng2.control.ui.tests",org.eclip
  se.linuxtools.internal.lttng2.control.ui.views.service;x-friends:="or
  g.eclipse.linuxtools.lttng2.control.ui.tests"
-Import-Package: org.eclipse.rse.core,
+Import-Package: com.google.common.collect,
+ org.eclipse.rse.core,
  org.eclipse.rse.core.model,
  org.eclipse.rse.core.subsystems,
  org.eclipse.rse.services,
index cb21f79b7684ee02df0966710c1f7ef6f2edf5d5..94af68f0588e62f4dc7760950c401237c980361e 100644 (file)
@@ -19,3 +19,5 @@ bin.includes = META-INF/,\
                about.html,\
                plugin.properties
 src.includes = about.html
+additional.bundles = org.eclipse.jdt.annotation
+jars.extra.classpath = platform:/plugin/org.eclipse.jdt.annotation
index 399f2d513a7b1c12952ece82e9b70198b41c54ec..81a564ee795b9c3a16e23b802d27c28da22e239e 100644 (file)
@@ -86,6 +86,9 @@ commands.control.delete.description=Delete Target Node
 commands.control.create.session=Create Session...
 commands.control.create.session.description=Create a Trace Session
 
+commands.control.execute.command.script=Execute Command Script...
+commands.control.execute.command.script.description=Execute Command Script
+
 commands.control.destroy.session=Destroy Session...
 commands.control.destroy.session.description=Destroy a Trace Session
 
index d47c061e03ddec875babc1dcce5d9cc7adafc8a0..9240836ca57bb52697e162ebdc100d4d984487a8 100644 (file)
             id="org.eclipse.linuxtools.internal.lttng2.ui.commands.control.createSession"
             name="%commands.control.create.session">
       </command>
+      <command
+            categoryId="org.eclipse.linuxtools.internal.lttng2.ui.commands.control.category"
+            description="%commands.control.execute.command.script.description"
+            id="org.eclipse.linuxtools.internal.lttng2.ui.commands.control.executeScript"
+            name="%commands.control.execute.command.script">
+      </command>
       <command
             categoryId="org.eclipse.linuxtools.internal.lttng2.ui.commands.control.category"
             description="%commands.control.destroy.session.description"
                </with>
             </visibleWhen>
          </command>
+         <command
+               commandId="org.eclipse.linuxtools.internal.lttng2.ui.commands.control.executeScript"
+               icon="icons/elcl16/add_button.gif"
+               label="%commands.control.execute.command.script"
+               style="push">
+            <visibleWhen
+                  checkEnabled="false">
+               <with
+                     variable="activeMenuSelection">
+                  <iterate
+                        operator="or">
+                     <instanceof
+                           value="org.eclipse.linuxtools.internal.lttng2.control.ui.views.model.impl.TraceSessionGroup">
+                     </instanceof>
+                  </iterate>
+               </with>
+            </visibleWhen>
+         </command>
          <command
                commandId="org.eclipse.linuxtools.internal.lttng2.ui.commands.control.start"
                icon="icons/elcl16/start_trace.gif"
             </with>
          </activeWhen>
       </handler>
+      <handler
+            class="org.eclipse.linuxtools.internal.lttng2.control.ui.views.handlers.ExecuteCommandScriptHandler"
+            commandId="org.eclipse.linuxtools.internal.lttng2.ui.commands.control.executeScript">
+         <activeWhen>
+            <with
+                  variable="selection">
+               <iterate
+                     operator="or">
+                  <instanceof
+                        value="org.eclipse.linuxtools.internal.lttng2.control.ui.views.model.impl.TraceSessionGroup">
+                  </instanceof>
+               </iterate>
+            </with>
+         </activeWhen>
+      </handler>
       <handler
             class="org.eclipse.linuxtools.internal.lttng2.control.ui.views.handlers.DestroySessionHandler"
             commandId="org.eclipse.linuxtools.internal.lttng2.ui.commands.control.destroySession">
diff --git a/org.eclipse.linuxtools.lttng2.control.ui/src/org/eclipse/linuxtools/internal/lttng2/control/ui/views/dialogs/ISelectCommandScriptDialog.java b/org.eclipse.linuxtools.lttng2.control.ui/src/org/eclipse/linuxtools/internal/lttng2/control/ui/views/dialogs/ISelectCommandScriptDialog.java
new file mode 100644 (file)
index 0000000..15dd52e
--- /dev/null
@@ -0,0 +1,32 @@
+/**********************************************************************
+ * Copyright (c) 2014 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Bernd Hufmann - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.linuxtools.internal.lttng2.control.ui.views.dialogs;
+
+import java.util.List;
+
+/**
+ * Interface for dialog for selecting a command script.
+ *
+ * @author Bernd Hufmann
+ *
+ */
+public interface ISelectCommandScriptDialog {
+    /**
+     * @return a list of command
+     */
+    List<String> getCommands();
+
+    /**
+     * @return the open return value
+     */
+    int open();
+}
diff --git a/org.eclipse.linuxtools.lttng2.control.ui/src/org/eclipse/linuxtools/internal/lttng2/control/ui/views/dialogs/OpenCommandScriptDialog.java b/org.eclipse.linuxtools.lttng2.control.ui/src/org/eclipse/linuxtools/internal/lttng2/control/ui/views/dialogs/OpenCommandScriptDialog.java
new file mode 100644 (file)
index 0000000..7957f41
--- /dev/null
@@ -0,0 +1,200 @@
+/**********************************************************************
+ * Copyright (c) 2014 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Bernd Hufmann - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.linuxtools.internal.lttng2.control.ui.views.dialogs;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.linuxtools.internal.lttng2.control.ui.Activator;
+import org.eclipse.linuxtools.internal.lttng2.control.ui.views.messages.Messages;
+import org.eclipse.linuxtools.tmf.core.io.BufferedRandomAccessFile;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+import com.google.common.collect.ImmutableList;
+
+/**
+ * <p>
+ * Dialog box for selecting a command script. It parses the script and
+ * provides a list of shell commands to be executed.
+ * </p>
+ *
+ * @author Bernd Hufmann
+ */
+public class OpenCommandScriptDialog extends Dialog implements ISelectCommandScriptDialog {
+
+    // ------------------------------------------------------------------------
+    // Constants
+    // ------------------------------------------------------------------------
+    /**
+     * The icon file for this dialog box.
+     */
+    public static final String CREATE_SESSION_ICON_FILE = "icons/elcl16/add_button.gif"; //$NON-NLS-1$
+
+    // ------------------------------------------------------------------------
+    // Attributes
+    // ------------------------------------------------------------------------
+
+    // Dialog attributes
+    private Control fControl = null;
+    private Composite fDialogComposite = null;
+    private Button fBrowseButton;
+    private Label fFileNameLabel = null;
+    private Text fFileNameText = null;
+
+    // Output list of commands
+    private List<String> fCommands = null;
+
+    // ------------------------------------------------------------------------
+    // Constructors
+    // ------------------------------------------------------------------------
+    /**
+     * Constructor
+     * @param shell - a shell for the display of the dialog
+     */
+    public OpenCommandScriptDialog(Shell shell) {
+        super(shell);
+        setShellStyle(SWT.RESIZE | getShellStyle());
+    }
+
+    // ------------------------------------------------------------------------
+    // Accessors
+    // ------------------------------------------------------------------------
+
+    @Override
+    @NonNull public List<String> getCommands() {
+        if (fCommands != null) {
+            return fCommands;
+        }
+        return new ArrayList<>();
+    }
+
+    // ------------------------------------------------------------------------
+    // Operations
+    // ------------------------------------------------------------------------
+
+    @Override
+    protected Control createContents(Composite parent) {
+        fControl = super.createContents(parent);
+
+        /* set the shell minimum size */
+        Point clientArea = fControl.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+        Rectangle trim = getShell().computeTrim(0, 0, clientArea.x, clientArea.y);
+        getShell().setMinimumSize(trim.width, trim.height);
+
+        return fControl;
+    }
+
+    @Override
+    protected void configureShell(Shell newShell) {
+        super.configureShell(newShell);
+        newShell.setText(Messages.TraceControl_ExecuteScriptDialogTitle);
+        newShell.setImage(Activator.getDefault().loadIcon(CREATE_SESSION_ICON_FILE));
+    }
+
+    @Override
+    protected Control createDialogArea(Composite parent) {
+
+        // Main dialog panel
+        fDialogComposite = new Composite(parent, SWT.NONE);
+        GridLayout layout = new GridLayout(1, true);
+        fDialogComposite.setLayout(layout);
+        fDialogComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+        Group sessionGroup = new Group(fDialogComposite, SWT.SHADOW_NONE);
+        sessionGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+        sessionGroup.setLayout(new GridLayout(6, true));
+
+        fFileNameLabel = new Label(sessionGroup, SWT.RIGHT);
+        fFileNameLabel.setText(Messages.TraceControl_ExecuteScriptSelectLabel);
+        fFileNameText = new Text(sessionGroup, SWT.NONE);
+
+        fBrowseButton = new Button(sessionGroup, SWT.PUSH);
+        fBrowseButton.setText(Messages.TraceControl_ExecuteScriptBrowseText);
+        fBrowseButton.addListener(SWT.Selection, new Listener() {
+            @Override
+            public void handleEvent(Event event) {
+                handleFilePathBrowseButtonPressed(SWT.OPEN);
+            }
+        });
+
+        // layout widgets
+        GridData data = new GridData(GridData.FILL_HORIZONTAL);
+        data.horizontalSpan = 1;
+        data.grabExcessHorizontalSpace = false;
+        fFileNameLabel.setLayoutData(data);
+
+        data = new GridData(GridData.FILL_HORIZONTAL);
+        data.horizontalSpan = 4;
+        fFileNameText.setLayoutData(data);
+
+        data = new GridData(GridData.FILL_HORIZONTAL);
+        data.horizontalSpan = 1;
+
+        // Initialize a empty list
+        fCommands = new ArrayList<>();
+
+        return fDialogComposite;
+    }
+
+    private void handleFilePathBrowseButtonPressed(int fileDialogStyle) {
+        FileDialog dialog = new FileDialog(getShell(), fileDialogStyle | SWT.SHEET);
+        dialog.setFilterExtensions(new String[] { "*.*", "*.*" }); //$NON-NLS-1$ //$NON-NLS-2$
+        dialog.setText(Messages.TraceControl_ExecuteScriptDialogTitle);
+        String selectedFileName = dialog.open();
+        fFileNameText.setText(selectedFileName);
+    }
+
+    @Override
+    protected void createButtonsForButtonBar(Composite parent) {
+        createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, true);
+        createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
+    }
+
+    @Override
+    protected void okPressed() {
+        // Validate input data
+        String sessionPath = fFileNameText.getText();
+
+        if (!"".equals(sessionPath)) { //$NON-NLS-1$
+            ImmutableList.Builder<String> builder = new ImmutableList.Builder<>();
+            try (BufferedRandomAccessFile rafile = new BufferedRandomAccessFile(sessionPath, "r")) { //$NON-NLS-1$
+                String line = rafile.getNextLine();
+                while (line != null) {
+                    builder.add(line);
+                    line = rafile.getNextLine();
+                }
+            } catch (IOException e) {
+                return;
+            }
+            fCommands = builder.build();
+            super.okPressed();
+        }
+    }
+}
index fb87a70a2f02f8c865b20ab5b3f30a1f17e44605..58364d2471af92fdcd6f419cfac12586c755fa73 100644 (file)
@@ -48,6 +48,11 @@ public final class TraceControlDialogFactory {
      */
     private ICreateSessionDialog fCreateSessionDialog;
 
+    /**
+     * The command script selection dialog.
+     */
+    private ISelectCommandScriptDialog fCommandScriptDialog;
+
     /**
      * The enable events dialog.
      */
@@ -148,6 +153,16 @@ public final class TraceControlDialogFactory {
         return fCreateSessionDialog;
     }
 
+    /**
+     * @return command script selection dialog implementation
+     */
+    public ISelectCommandScriptDialog getCommandScriptDialog() {
+        if (fCommandScriptDialog == null) {
+            fCommandScriptDialog = new OpenCommandScriptDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
+        }
+        return fCommandScriptDialog;
+    }
+
     /**
      * Sets a create session dialog implementation.
      * @param createSessionDialog - a create session implementation.
diff --git a/org.eclipse.linuxtools.lttng2.control.ui/src/org/eclipse/linuxtools/internal/lttng2/control/ui/views/handlers/ExecuteCommandScriptHandler.java b/org.eclipse.linuxtools.lttng2.control.ui/src/org/eclipse/linuxtools/internal/lttng2/control/ui/views/handlers/ExecuteCommandScriptHandler.java
new file mode 100644 (file)
index 0000000..1db9731
--- /dev/null
@@ -0,0 +1,116 @@
+/**********************************************************************
+ * Copyright (c) 2014 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Bernd Hufmann - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.linuxtools.internal.lttng2.control.ui.views.handlers;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.linuxtools.internal.lttng2.control.ui.Activator;
+import org.eclipse.linuxtools.internal.lttng2.control.ui.views.ControlView;
+import org.eclipse.linuxtools.internal.lttng2.control.ui.views.dialogs.ISelectCommandScriptDialog;
+import org.eclipse.linuxtools.internal.lttng2.control.ui.views.dialogs.TraceControlDialogFactory;
+import org.eclipse.linuxtools.internal.lttng2.control.ui.views.messages.Messages;
+import org.eclipse.linuxtools.internal.lttng2.control.ui.views.model.impl.TraceSessionGroup;
+import org.eclipse.ui.IWorkbenchPage;
+
+/**
+ * <p>
+ * Command handler implementation to execute commands of a command script.
+ * </p>
+ *
+ * @author Bernd Hufmann
+ */
+public class ExecuteCommandScriptHandler extends BaseControlViewHandler {
+
+    // ------------------------------------------------------------------------
+    // Attributes
+    // ------------------------------------------------------------------------
+
+    /**
+     * The trace session group the command is to be executed on.
+     */
+    private TraceSessionGroup fSessionGroup = null;
+
+    // ------------------------------------------------------------------------
+    // Operations
+    // ------------------------------------------------------------------------
+
+    @Override
+    public Object execute(ExecutionEvent event) throws ExecutionException {
+
+        fLock.lock();
+        try {
+            final TraceSessionGroup sessionGroup = fSessionGroup;
+
+            // Open dialog box for the node name and address
+            final ISelectCommandScriptDialog dialog = TraceControlDialogFactory.getInstance().getCommandScriptDialog();
+
+            if (dialog.open() != Window.OK) {
+                return null;
+            }
+
+            Job job = new Job(Messages.TraceControl_ExecuteScriptJob) {
+                @Override
+                protected IStatus run(IProgressMonitor monitor) {
+                    try {
+                        sessionGroup.executeCommands(monitor, dialog.getCommands());
+                    } catch (ExecutionException e) {
+                        return new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.TraceControl_CreateSessionFailure, e);
+                    }
+                    return Status.OK_STATUS;
+                }
+            };
+            job.setUser(true);
+            job.schedule();
+        } finally {
+            fLock.unlock();
+        }
+        return null;
+    }
+
+    @Override
+    public boolean isEnabled() {
+
+        // Get workbench page for the Control View
+        IWorkbenchPage page = getWorkbenchPage();
+        if (page == null) {
+            return false;
+        }
+
+        TraceSessionGroup sessionGroup = null;
+
+        // Check if the session group project is selected
+        ISelection selection = page.getSelection(ControlView.ID);
+        if (selection instanceof StructuredSelection) {
+            Object element = ((StructuredSelection) selection).getFirstElement();
+            sessionGroup = (element instanceof TraceSessionGroup) ? (TraceSessionGroup) element : null;
+        }
+
+        boolean isEnabled = sessionGroup != null;
+        fLock.lock();
+        try {
+            fSessionGroup = null;
+            if(isEnabled) {
+                fSessionGroup = sessionGroup;
+            }
+        } finally {
+            fLock.unlock();
+        }
+        return isEnabled;
+    }
+}
index e1366ef159a74adb65ad3321adbc6c3bdd7535a0..893d1905c8fe0faba86fd4a5e4af03a93237b5b1 100644 (file)
@@ -292,6 +292,13 @@ public final class Messages extends NLS {
     public static String TraceControl_VerboseLevelVeryVerbosePreference;
     public static String TraceControl_VerboseLevelVeryVeryVerbosePreference;
 
+    public static String TraceControl_ExecuteScriptJob;
+    public static String TraceControl_ExecuteScriptError;
+
+    public static String TraceControl_ExecuteScriptDialogTitle;
+    public static String TraceControl_ExecuteScriptBrowseText;
+    public static String TraceControl_ExecuteScriptSelectLabel;
+
     static {
         // initialize resource bundle
         NLS.initializeMessages(BUNDLE_NAME, Messages.class);
index cd7c2fddd985ec908d1784862c5bbc43795be02e..7fbf077abe76740f1b3a860f574c0cfbe66d2aab 100644 (file)
@@ -278,3 +278,10 @@ TraceControl_VerboseLevelNonePreference=None
 TraceControl_VerboseLevelVerbosePreference=Level 1
 TraceControl_VerboseLevelVeryVerbosePreference=Level 2
 TraceControl_VerboseLevelVeryVeryVerbosePreference=Level 3
+
+TraceControl_ExecuteScriptJob=Executing command script
+TraceControl_ExecuteScriptError=Error executing command script
+
+TraceControl_ExecuteScriptDialogTitle=Select command script
+TraceControl_ExecuteScriptBrowseText=Browse...
+TraceControl_ExecuteScriptSelectLabel=Select Script
index fafa425a26715d7613764587aadb52f38f092141..90c0ca31beebe5c23fdc9a0a28c2e82ced8c7460 100644 (file)
@@ -12,6 +12,8 @@
  **********************************************************************/
 package org.eclipse.linuxtools.internal.lttng2.control.ui.views.model.impl;
 
+import java.util.List;
+
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
@@ -130,6 +132,20 @@ public class TraceSessionGroup extends TraceControlComponent {
         }
     }
 
+    /**
+     * Command to execute a list of commands
+     * @param monitor
+     *            - a progress monitor
+     * @param commands
+     *            - a list of commands to execute
+     * @throws ExecutionException
+     *            If the command fails
+     */
+    public void executeCommands(IProgressMonitor monitor, List<String> commands) throws ExecutionException {
+        getControlService().runCommands(monitor, commands);
+        getTargetNode().refresh();
+    }
+
     /**
      * Destroys a session with given session name.
      *
index ebefe44f4978033f4bf9a44b484fe06bc398d5f2..7684e8078ed09f33ba7f3b795ab6f5251406bf99 100644 (file)
@@ -381,4 +381,17 @@ public interface ILttngControlService {
      */
     void recordSnapshot(String sessionName, IProgressMonitor monitor)
             throws ExecutionException;
+
+    /**
+     * Executes a list of commands
+     *
+     * @param monitor
+     *      - a progress monitor
+     * @param commands
+     *      - array of commands
+     * @throws ExecutionException
+     *      If a command fails
+     */
+    void runCommands(IProgressMonitor monitor, List<String> commands)
+            throws ExecutionException;
 }
index 92a8b25f17441be43aa718e5d76ce14f038f461b..52e11c76d2453295eedbff045946a1982a63294a 100644 (file)
@@ -999,6 +999,20 @@ public class LTTngControlService implements ILttngControlService {
         executeCommand(command.toString(), monitor);
     }
 
+    @Override
+    public void runCommands(IProgressMonitor monitor, List<String> commands) throws ExecutionException {
+        for (String command : commands) {
+            if (monitor.isCanceled()) {
+                return;
+            }
+
+            if (command.isEmpty() || command.startsWith("#")) { //$NON-NLS-1$
+                continue;
+            }
+            executeCommand(command, monitor);
+        }
+    }
+
     // ------------------------------------------------------------------------
     // Helper methods
     // ------------------------------------------------------------------------
This page took 0.059885 seconds and 5 git commands to generate.