tmf: lttngControl: mi: handle error via errorOutput
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng2.control.ui / src / org / eclipse / linuxtools / internal / lttng2 / control / ui / views / service / LTTngControlServiceMI.java
index 3e72f1a8376480522d5d3a6da76fee36da09a8da..1583b1c36ce9456297a3e2255b898b9122a18150 100644 (file)
@@ -225,7 +225,7 @@ public class LTTngControlServiceMI extends LTTngControlService {
         NodeList sessionsNode = document.getElementsByTagName(MIStrings.SESSION);
         // There should be only one session
         if (sessionsNode.getLength() != 1) {
-            throw new ExecutionException(Messages.TraceControl_MiInvalidNumberOfElementError);
+            throw new ExecutionException(NLS.bind(Messages.TraceControl_MiInvalidNumberOfElementError, MIStrings.SESSION));
         }
 
         // Populate session information
@@ -457,8 +457,16 @@ public class LTTngControlServiceMI extends LTTngControlService {
         ICommandResult result = executeCommand(command.toString(), monitor, false);
         List<IBaseEventInfo> events = new ArrayList<>();
 
-        if (isError(result)) {
-            return events;
+        if (isError(result) && result.getErrorOutput() != null) {
+            // Ignore the following 2 cases:
+            // Spawning a session daemon
+            // Error: Unable to list kernel events
+            // or:
+            // Error: Unable to list kernel events
+            if (ignoredPattern(result.getErrorOutput(), LTTngControlServiceConstants.LIST_KERNEL_NO_KERNEL_PROVIDER_PATTERN)) {
+                return events;
+            }
+            throw new ExecutionException(Messages.TraceControl_CommandError + LTTngControlServiceConstants.COMMAND_LIST_KERNEL);
         }
 
         Document document = getDocumentFromStrings(result.getOutput());
@@ -477,8 +485,16 @@ public class LTTngControlServiceMI extends LTTngControlService {
         ICommandResult result = executeCommand(command.toString(), monitor, false);
         List<IUstProviderInfo> allProviders = new ArrayList<>();
 
-        if (isError(result)) {
-            return allProviders;
+        if (isError(result) && result.getErrorOutput() != null) {
+            // Ignore the following 2 cases:
+            // Spawning a session daemon
+            // Error: Unable to list UST events: Listing UST events failed
+            // or:
+            // Error: Unable to list UST events: Listing UST events failed
+            if (ignoredPattern(result.getErrorOutput(), LTTngControlServiceConstants.LIST_UST_NO_UST_PROVIDER_PATTERN)) {
+                return allProviders;
+            }
+            throw new ExecutionException(Messages.TraceControl_CommandError + LTTngControlServiceConstants.COMMAND_LIST_UST);
         }
 
         Document document = getDocumentFromStrings(result.getOutput());
@@ -623,20 +639,38 @@ public class LTTngControlServiceMI extends LTTngControlService {
 
     @Override
     public void destroySession(String sessionName, IProgressMonitor monitor) throws ExecutionException {
-        // TODO Auto-generated method stub
+        String newName = formatParameter(sessionName);
 
-    }
+        StringBuffer command = createCommand(LTTngControlServiceConstants.COMMAND_DESTROY_SESSION, newName);
 
-    @Override
-    public void startSession(String sessionName, IProgressMonitor monitor) throws ExecutionException {
-        // TODO Auto-generated method stub
+        ICommandResult result = executeCommand(command.toString(), monitor, false);
+        String[] errorOutput = result.getErrorOutput();
 
-    }
+        if (isError(result) && (errorOutput != null)) {
+            // Don't treat this as an error
+            if (ignoredPattern(errorOutput, LTTngControlServiceConstants.SESSION_NOT_FOUND_ERROR_PATTERN)) {
+                return;
 
-    @Override
-    public void stopSession(String sessionName, IProgressMonitor monitor) throws ExecutionException {
-        // TODO Auto-generated method stub
+            }
+            throw new ExecutionException(Messages.TraceControl_CommandError + " " + command.toString() + "\n" + formatOutput(result)); //$NON-NLS-1$ //$NON-NLS-2$
+        }
+
+        // Check for action effect
+        Document doc = getDocumentFromStrings(result.getOutput());
+        NodeList sessions = doc.getElementsByTagName(MIStrings.SESSION);
+        if (sessions.getLength() != 1) {
+            throw new ExecutionException(NLS.bind(Messages.TraceControl_MiInvalidNumberOfElementError, MIStrings.SESSION));
+        }
 
+        Node rawSessionName = getFirstOf(sessions.item(0).getChildNodes(), MIStrings.NAME);
+        if (rawSessionName == null) {
+            throw new ExecutionException(Messages.TraceControl_MiMissingRequiredError);
+        }
+
+        // Validity check
+        if (!rawSessionName.getTextContent().equals(sessionName)) {
+            throw new ExecutionException(NLS.bind(Messages.TraceControl_UnexpectedValueError, rawSessionName.getTextContent(), sessionName));
+        }
     }
 
     @Override
This page took 0.02662 seconds and 5 git commands to generate.