tmf: bug 487976: Add null checks for traces/exp. folders getters
authorBernd Hufmann <Bernd.Hufmann@ericsson.com>
Wed, 18 Jan 2017 15:33:51 +0000 (10:33 -0500)
committerBernd Hufmann <bernd.hufmann@ericsson.com>
Wed, 8 Feb 2017 20:47:10 +0000 (15:47 -0500)
This avoids NPE when Traces or Experiment folder have been deleted.
Handle gracefully the case when these folders don't exist on disk.

Change-Id: I5be56609be138dc22f6917e5da2a9638d140fb0c
Signed-off-by: Bernd Hufmann <Bernd.Hufmann@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/89142
Reviewed-by: Hudson CI
Reviewed-by: Jean-Christian Kouame <jean-christian.kouame@ericsson.com>
Tested-by: Jean-Christian Kouame <jean-christian.kouame@ericsson.com>
27 files changed:
lttng/org.eclipse.tracecompass.lttng2.control.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/control/ui/swtbot/tests/ControlViewTest.java
lttng/org.eclipse.tracecompass.lttng2.control.ui/src/org/eclipse/tracecompass/internal/lttng2/control/ui/views/handlers/ImportHandler.java
tmf/org.eclipse.tracecompass.tmf.analysis.xml.ui/src/org/eclipse/tracecompass/internal/tmf/analysis/xml/ui/handler/ManageXMLAnalysisDialog.java
tmf/org.eclipse.tracecompass.tmf.remote.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/remote/ui/swtbot/tests/fetch/FetchRemoteTracesTest.java
tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/shared/org/eclipse/tracecompass/tmf/ui/swtbot/tests/shared/SWTBotUtils.java
tmf/org.eclipse.tracecompass.tmf.ui.tests/shared/org/eclipse/tracecompass/tmf/ui/tests/shared/ProjectModelTestData.java
tmf/org.eclipse.tracecompass.tmf.ui.tests/src/org/eclipse/tracecompass/tmf/ui/tests/project/model/ProjectModelAnalysisTest.java
tmf/org.eclipse.tracecompass.tmf.ui.tests/src/org/eclipse/tracecompass/tmf/ui/tests/project/model/ProjectModelOutputTest.java
tmf/org.eclipse.tracecompass.tmf.ui.tests/src/org/eclipse/tracecompass/tmf/ui/tests/project/model/ProjectModelTraceTest.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/parsers/CustomParserUtils.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/handlers/DropAdapterAssistant.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/handlers/RenameFolderHandler.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/handlers/RenameTraceHandler.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/handlers/SelectTraceTypeHandler.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/model/TmfEditorLinkHelper.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/tracepkg/importexport/ExportTracePackageSelectTraceWizardPage.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/tracepkg/importexport/TracePackageExportOperation.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/tracepkg/importexport/TracePackageImportOperation.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/editors/TmfEventsEditor.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/Messages.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfAnalysisElement.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfExperimentElement.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectElement.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectRegistry.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTraceElement.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTraceTypeUIUtils.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/messages.properties

index 26b7243f2cc27fa32bf9f1b58cc407ebcbc3a6e0..5fa3db2dda8637fc007b9ed92462cb9ebd647668 100644 (file)
@@ -639,6 +639,7 @@ public class ControlViewTest {
 
     private static void verifyExperimentFolder(boolean createExperiment, TmfProjectElement tmfProject, String experimentName) {
         TmfExperimentFolder expFolder = tmfProject.getExperimentsFolder();
+        assertNotNull(expFolder);
         if (createExperiment) {
             if (experimentName != null) {
                 TmfExperimentElement expElement = expFolder.getExperiment(experimentName);
index 1c22101af00e481dccd379f381820852283ca355..419712c7bd844b4bb0d328e70276da2ab5735f7a 100644 (file)
@@ -280,12 +280,14 @@ public class ImportHandler extends BaseControlViewHandler {
         TmfTraceTypeUIUtils.setTraceType(traceFolder, selectedTraceType);
 
         final TmfProjectElement projectElement = TmfProjectRegistry.getProject(project, true);
-        final TmfTraceFolder tracesFolder = projectElement.getTracesFolder();
-        final List<TmfTraceElement> traces = tracesFolder.getTraces();
         TmfTraceElement found = null;
-        for (TmfTraceElement candidate : traces) {
-            if (candidate.getName().equals(connectionInfo.getSessionName())) {
-                found = candidate;
+        final TmfTraceFolder tracesFolder = projectElement.getTracesFolder();
+        if (tracesFolder != null) {
+            final List<TmfTraceElement> traces = tracesFolder.getTraces();
+            for (TmfTraceElement candidate : traces) {
+                if (candidate.getName().equals(connectionInfo.getSessionName())) {
+                    found = candidate;
+                }
             }
         }
 
index 48cb2effcadee6d1d967fdf7becd130a7865ed64..de28d93b18fc725977ff90b5d6c4d69799ad99ee 100644 (file)
@@ -46,9 +46,11 @@ import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.module.XmlUtils;
 import org.eclipse.tracecompass.internal.tmf.analysis.xml.ui.Activator;
 import org.eclipse.tracecompass.tmf.ui.dialog.TmfFileDialogFactory;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfCommonProjectElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentFolder;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectElement;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectModelElement;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectRegistry;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
 import org.eclipse.tracecompass.tmf.ui.project.model.TraceUtils;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IPropertyListener;
@@ -221,8 +223,14 @@ public class ManageXMLAnalysisDialog extends Dialog {
             TmfProjectElement pElement = TmfProjectRegistry.getProject(project);
             if (pElement != null) {
                 java.util.List<TmfCommonProjectElement> tElements = new ArrayList<>();
-                tElements.addAll(pElement.getTracesFolder().getTraces());
-                tElements.addAll(pElement.getExperimentsFolder().getExperiments());
+                TmfTraceFolder tracesFolder = pElement.getTracesFolder();
+                if (tracesFolder != null) {
+                    tElements.addAll(tracesFolder.getTraces());
+                }
+                TmfExperimentFolder experimentsFolder = pElement.getExperimentsFolder();
+                if (experimentsFolder != null) {
+                    tElements.addAll(experimentsFolder.getExperiments());
+                }
                 for (TmfCommonProjectElement tElement : tElements) {
                     boolean closeEditor = false;
                     for (IResource resource : tElement.getSupplementaryResources()) {
index 6b66637ffa88ebaa31bc4115454b5b5ad4881452..9031f398c5f1e06915aed796cda01b41832f6dc0 100644 (file)
@@ -47,6 +47,7 @@ import org.eclipse.tracecompass.tmf.remote.ui.swtbot.tests.TmfRemoteUISWTBotTest
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectElement;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectRegistry;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
 import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.ConditionHelpers;
 import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils;
 import org.eclipse.tracecompass.tmf.ui.tests.shared.WaitUtils;
@@ -131,7 +132,8 @@ public class FetchRemoteTracesTest {
 
         @Override
         public boolean test() throws Exception {
-            return fProject.getTracesFolder().getTraces().size() == fExpectedCount;
+            final TmfTraceFolder tracesFolder = fProject.getTracesFolder();
+            return ((tracesFolder != null) && (tracesFolder.getTraces().size() == fExpectedCount));
         }
 
         @Override
@@ -154,7 +156,9 @@ public class FetchRemoteTracesTest {
             public void run() {
                 final TmfProjectElement project = TmfProjectRegistry.getProject(ResourcesPlugin.getWorkspace().getRoot().getProject(PROJECT_NAME), true);
                 fBot.waitUntil(new TraceCountCondition(project, 2));
-                List<TmfTraceElement> traces = project.getTracesFolder().getTraces();
+                final TmfTraceFolder tracesFolder = project.getTracesFolder();
+                assertNotNull(tracesFolder);
+                List<TmfTraceElement> traces = tracesFolder.getTraces();
                 assertEquals(2, traces.size());
                 testTrace(traces.get(0), CONNECTION_NODE_NAME + "/resources/generated/synthetic-trace", TRACE_TYPE_LTTNG);
                 testTrace(traces.get(1), CONNECTION_NODE_NAME + "/resources/syslog", TRACE_TYPE_SYSLOG);
@@ -184,7 +188,9 @@ public class FetchRemoteTracesTest {
             public void run() {
                 TmfProjectElement project = TmfProjectRegistry.getProject(ResourcesPlugin.getWorkspace().getRoot().getProject(PROJECT_NAME), true);
                 fBot.waitUntil(new TraceCountCondition(project, 1));
-                List<TmfTraceElement> traces = project.getTracesFolder().getTraces();
+                final TmfTraceFolder tracesFolder = project.getTracesFolder();
+                assertNotNull(tracesFolder);
+                List<TmfTraceElement> traces = tracesFolder.getTraces();
                 assertEquals(1, traces.size());
                 testTrace(traces.get(0), CONNECTION_NODE_NAME + "/resources/syslog", TRACE_TYPE_SYSLOG);
             }
@@ -205,7 +211,9 @@ public class FetchRemoteTracesTest {
             @Override
             public void run() {
                 TmfProjectElement project = TmfProjectRegistry.getProject(ResourcesPlugin.getWorkspace().getRoot().getProject(PROJECT_NAME), true);
-                List<TmfTraceElement> traces = project.getTracesFolder().getTraces();
+                final TmfTraceFolder tracesFolder = project.getTracesFolder();
+                assertNotNull(tracesFolder);
+                List<TmfTraceElement> traces = tracesFolder.getTraces();
                 assertEquals(0, traces.size());
             }
         });
@@ -235,7 +243,9 @@ public class FetchRemoteTracesTest {
             @Override
             public void run() {
                 TmfProjectElement project = TmfProjectRegistry.getProject(ResourcesPlugin.getWorkspace().getRoot().getProject(PROJECT_NAME), true);
-                List<TmfTraceElement> traces = project.getTracesFolder().getTraces();
+                final TmfTraceFolder tracesFolder = project.getTracesFolder();
+                assertNotNull(tracesFolder);
+                List<TmfTraceElement> traces = tracesFolder.getTraces();
                 assertEquals(0, traces.size());
             }
         });
index e3e02c512c7721e3265564797bcf3428fe36b89d..a8b1972f9c1a64b70ec62d742150eb2137857afe 100644 (file)
@@ -646,6 +646,9 @@ public final class SWTBotUtils {
         IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
         TmfProjectElement tmfProject = TmfProjectRegistry.getProject(project, false);
         TmfTraceFolder tracesFolder = tmfProject.getTracesFolder();
+        if (tracesFolder == null) {
+            return;
+        }
         try {
             for (TmfTraceElement traceElement : tracesFolder.getTraces()) {
                 traceElement.delete(null);
@@ -714,6 +717,9 @@ public final class SWTBotUtils {
         IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
         TmfProjectElement tmfProject = TmfProjectRegistry.getProject(project, false);
         TmfExperimentFolder expFolder = tmfProject.getExperimentsFolder();
+        if (expFolder == null) {
+            return;
+        }
         expFolder.getExperiments().forEach(experiment -> {
             IResource resource = experiment.getResource();
             try {
index ec61a61ac744811eea1780f802c549e18f881131..436d381de48c4866b4d32e192d0dd8cbef33922f 100644 (file)
@@ -31,9 +31,11 @@ import org.eclipse.tracecompass.tmf.core.tests.shared.TmfTestTrace;
 import org.eclipse.tracecompass.tmf.ui.project.model.ITmfProjectModelElement;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfCommonProjectElement;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentFolder;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectElement;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectRegistry;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfTracesFolder;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.actions.WorkspaceModifyOperation;
@@ -74,8 +76,12 @@ public class ProjectModelTestData {
                 "org.eclipse.linuxtools.tmf.core.tests.tracetype");
 
         final TmfProjectElement projectElement = TmfProjectRegistry.getProject(project, true);
-        TmfTraceElement traceElement = projectElement.getTracesFolder().getTraces().get(0);
-        traceElement.refreshTraceType();
+        TmfTraceFolder tracesFolder = projectElement.getTracesFolder(); {
+            if (tracesFolder != null) {
+                TmfTraceElement traceElement = tracesFolder.getTraces().get(0);
+                traceElement.refreshTraceType();
+            }
+        }
 
         projectElement.refresh();
 
@@ -92,26 +98,28 @@ public class ProjectModelTestData {
      * @return The newly created experiment
      */
     public static TmfExperimentElement addExperiment(TmfProjectElement projectElement, String experimentName) {
-        IFolder experimentFolder = projectElement.getExperimentsFolder().getResource();
-        final IFolder folder = experimentFolder.getFolder(experimentName);
+        TmfExperimentFolder experimentsFolder = projectElement.getExperimentsFolder();
+        if (experimentsFolder != null) {
+            IFolder experimentFolder = experimentsFolder.getResource();
+            final IFolder folder = experimentFolder.getFolder(experimentName);
 
-        WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
-            @Override
-            public void execute(IProgressMonitor monitor) throws CoreException {
-                monitor.beginTask("", 1000);
-                folder.create(false, true, monitor);
-                monitor.done();
-            }
-        };
-        try {
-            PlatformUI.getWorkbench().getProgressService().busyCursorWhile(operation);
-        } catch (InterruptedException | InvocationTargetException | RuntimeException exception) {
-
-        }
+            WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
+                @Override
+                public void execute(IProgressMonitor monitor) throws CoreException {
+                    monitor.beginTask("", 1000);
+                    folder.create(false, true, monitor);
+                    monitor.done();
+                }
+            };
+            try {
+                PlatformUI.getWorkbench().getProgressService().busyCursorWhile(operation);
+            } catch (InterruptedException | InvocationTargetException | RuntimeException exception) {
 
-        for (ITmfProjectModelElement el : projectElement.getExperimentsFolder().getChildren()) {
-            if (el.getName().equals(experimentName) && (el instanceof TmfExperimentElement)) {
-                return (TmfExperimentElement) el;
+            }
+            for (ITmfProjectModelElement el : experimentsFolder.getChildren()) {
+                if (el.getName().equals(experimentName) && (el instanceof TmfExperimentElement)) {
+                    return (TmfExperimentElement) el;
+                }
             }
         }
         return null;
@@ -137,51 +145,57 @@ public class ProjectModelTestData {
      */
     public static void deleteProject(TmfProjectElement project) {
         /* Delete experiments */
-        ITmfProjectModelElement[] experiments = project.getExperimentsFolder().getChildren().toArray(new ITmfProjectModelElement[0]);
-        for (ITmfProjectModelElement element : experiments) {
-            if (element instanceof TmfExperimentElement) {
-                TmfExperimentElement experiment = (TmfExperimentElement) element;
-                IResource resource = experiment.getResource();
+        TmfExperimentFolder experimentsFolder = project.getExperimentsFolder();
+        if (experimentsFolder != null) {
+            ITmfProjectModelElement[] experiments = experimentsFolder.getChildren().toArray(new ITmfProjectModelElement[0]);
+            for (ITmfProjectModelElement element : experiments) {
+                if (element instanceof TmfExperimentElement) {
+                    TmfExperimentElement experiment = (TmfExperimentElement) element;
+                    IResource resource = experiment.getResource();
 
-                /* Close the experiment if open */
-                experiment.closeEditors();
+                    /* Close the experiment if open */
+                    experiment.closeEditors();
 
-                IPath path = resource.getLocation();
-                if (path != null) {
-                    /* Delete supplementary files */
-                    experiment.deleteSupplementaryFolder();
-                }
+                    IPath path = resource.getLocation();
+                    if (path != null) {
+                        /* Delete supplementary files */
+                        experiment.deleteSupplementaryFolder();
+                    }
 
-                /* Finally, delete the experiment */
-                try {
-                    resource.delete(true, null);
-                } catch (CoreException e) {
-                    Activator.getDefault().logError("Error deleting experiment element", e);
+                    /* Finally, delete the experiment */
+                    try {
+                        resource.delete(true, null);
+                    } catch (CoreException e) {
+                        Activator.getDefault().logError("Error deleting experiment element", e);
+                    }
                 }
             }
         }
 
         /* Delete traces */
-        ITmfProjectModelElement[] traces = project.getTracesFolder().getChildren().toArray(new ITmfProjectModelElement[0]);
-        for (ITmfProjectModelElement element : traces) {
-            if (element instanceof TmfTraceElement) {
-                TmfTraceElement trace = (TmfTraceElement) element;
-                IResource resource = trace.getResource();
+        TmfTraceFolder tracesFolder = project.getTracesFolder();
+        if (tracesFolder != null) {
+            ITmfProjectModelElement[] traces = tracesFolder.getChildren().toArray(new ITmfProjectModelElement[0]);
+            for (ITmfProjectModelElement element : traces) {
+                if (element instanceof TmfTraceElement) {
+                    TmfTraceElement trace = (TmfTraceElement) element;
+                    IResource resource = trace.getResource();
 
-                /* Close the trace if open */
-                trace.closeEditors();
+                    /* Close the trace if open */
+                    trace.closeEditors();
 
-                IPath path = resource.getLocation();
-                if (path != null) {
-                    /* Delete supplementary files */
-                    trace.deleteSupplementaryFolder();
-                }
+                    IPath path = resource.getLocation();
+                    if (path != null) {
+                        /* Delete supplementary files */
+                        trace.deleteSupplementaryFolder();
+                    }
 
-                /* Finally, delete the trace */
-                try {
-                    resource.delete(true, new NullProgressMonitor());
-                } catch (CoreException e) {
-                    Activator.getDefault().logError("Error deleting trace element", e);
+                    /* Finally, delete the trace */
+                    try {
+                        resource.delete(true, new NullProgressMonitor());
+                    } catch (CoreException e) {
+                        Activator.getDefault().logError("Error deleting trace element", e);
+                    }
                 }
             }
         }
index a4fc448c01ab5c105f1b85c57802f40de7b4e83c..dc5560cea3172b62b87981c0abd895241611699a 100644 (file)
@@ -27,6 +27,7 @@ import org.eclipse.tracecompass.tmf.ui.project.model.ITmfProjectModelElement;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfAnalysisElement;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectElement;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfViewsElement;
 import org.eclipse.tracecompass.tmf.ui.tests.shared.ProjectModelTestData;
 import org.eclipse.tracecompass.tmf.ui.tests.shared.WaitTimeoutException;
@@ -68,7 +69,9 @@ public class ProjectModelAnalysisTest {
 
     private TmfTraceElement getTraceElement() {
         TmfTraceElement trace = null;
-        for (ITmfProjectModelElement element : fixture.getTracesFolder().getChildren()) {
+        final TmfTraceFolder tracesFolder = fixture.getTracesFolder();
+        assertNotNull(tracesFolder);
+        for (ITmfProjectModelElement element : tracesFolder.getChildren()) {
             if (element instanceof TmfTraceElement) {
                 TmfTraceElement traceElement = (TmfTraceElement) element;
                 if (traceElement.getName().equals(ProjectModelTestData.getTraceName())) {
index f83c4bcaf6b493043cc3326b6338696a1d5a23be..649787cc91d1dc778e56941c475c8978314cbfb7 100644 (file)
@@ -25,6 +25,7 @@ import org.eclipse.tracecompass.tmf.ui.project.model.TmfAnalysisElement;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfAnalysisOutputElement;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectElement;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
 import org.eclipse.tracecompass.tmf.ui.tests.shared.IWaitCondition;
 import org.eclipse.tracecompass.tmf.ui.tests.shared.ProjectModelTestData;
 import org.eclipse.tracecompass.tmf.ui.tests.shared.WaitTimeoutException;
@@ -69,7 +70,9 @@ public class ProjectModelOutputTest {
 
     private TmfTraceElement getTraceElement() {
         TmfTraceElement trace = null;
-        for (ITmfProjectModelElement element : fixture.getTracesFolder().getChildren()) {
+        final TmfTraceFolder tracesFolder = fixture.getTracesFolder();
+        assertNotNull(tracesFolder);
+        for (ITmfProjectModelElement element : tracesFolder.getChildren()) {
             if (element instanceof TmfTraceElement) {
                 TmfTraceElement traceElement = (TmfTraceElement) element;
                 if (traceElement.getName().equals(ProjectModelTestData.getTraceName())) {
index d046185f685526427cbcd37376764c24280e3d70..b9dae64916d245823d6848d3a4962c0b977fc937 100644 (file)
@@ -23,6 +23,7 @@ import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfOpenTraceHelper;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectElement;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
 import org.eclipse.tracecompass.tmf.ui.tests.shared.ProjectModelTestData;
 import org.eclipse.tracecompass.tmf.ui.tests.shared.WaitTimeoutException;
 import org.junit.After;
@@ -65,7 +66,10 @@ public class ProjectModelTraceTest {
     public void testOpenTrace() {
         assertNotNull(fixture);
 
-        final TmfTraceElement traceElement = fixture.getTracesFolder().getTraces().get(0);
+        final TmfTraceFolder tracesFolder = fixture.getTracesFolder();
+        assertNotNull(tracesFolder);
+
+        final TmfTraceElement traceElement = tracesFolder.getTraces().get(0);
 
         /*
          * Get the trace from the element, it is not opened yet, should be null
index 5a30a8e9ec77019f6347ff98487a41fa842f2d5e..848ab210509b08cabb4aa96660aad53584840df3 100644 (file)
@@ -27,6 +27,7 @@ import org.eclipse.tracecompass.tmf.core.TmfProjectNature;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectElement;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectRegistry;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
 import org.eclipse.tracecompass.tmf.ui.project.model.TraceUtils;
 import org.eclipse.ui.PlatformUI;
 
@@ -55,19 +56,22 @@ public class CustomParserUtils {
                 for (IProject project : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
                     if (project.hasNature(TmfProjectNature.ID)) {
                         TmfProjectElement projectElement = TmfProjectRegistry.getProject(project, true);
-                        for (final TmfTraceElement trace : projectElement.getTracesFolder().getTraces()) {
-                            if (monitor.isCanceled()) {
-                                throw new OperationCanceledException();
-                            }
-                            if (traceTypeId.equals(trace.getTraceType())) {
-                                Display.getDefault().syncExec(new Runnable() {
-                                    @Override
-                                    public void run() {
-                                        trace.closeEditors();
-                                    }
-                                });
-                                trace.deleteSupplementaryResources();
-                                trace.refreshSupplementaryFolder();
+                        final TmfTraceFolder tracesFolder = projectElement.getTracesFolder();
+                        if (tracesFolder != null) {
+                            for (final TmfTraceElement trace : tracesFolder.getTraces()) {
+                                if (monitor.isCanceled()) {
+                                    throw new OperationCanceledException();
+                                }
+                                if (traceTypeId.equals(trace.getTraceType())) {
+                                    Display.getDefault().syncExec(new Runnable() {
+                                        @Override
+                                        public void run() {
+                                            trace.closeEditors();
+                                        }
+                                    });
+                                    trace.deleteSupplementaryResources();
+                                    trace.refreshSupplementaryFolder();
+                                }
                             }
                         }
                     }
index c8089b94095e21c08f677efd82d10938db9966ee..597782689e06818f1799f062170e9f91f27656f0 100644 (file)
@@ -137,11 +137,14 @@ public class DropAdapterAssistant extends CommonDropAdapterAssistant {
                     // If source resource is a trace, use the trace element
                     IResource sourceResource = (IResource) source;
                     TmfProjectElement projectElement = TmfProjectRegistry.getProject(sourceResource.getProject());
-                    if (projectElement != null && projectElement.getTracesFolder() != null) {
-                        for (TmfTraceElement trace : projectElement.getTracesFolder().getTraces()) {
-                            if (trace.getResource().equals(sourceResource)) {
-                                source = trace;
-                                break;
+                    if (projectElement != null) {
+                        TmfTraceFolder tracesFolder = projectElement.getTracesFolder();
+                        if (tracesFolder != null) {
+                            for (TmfTraceElement trace : tracesFolder.getTraces()) {
+                                if (trace.getResource().equals(sourceResource)) {
+                                    source = trace;
+                                    break;
+                                }
                             }
                         }
                     }
@@ -227,7 +230,12 @@ public class DropAdapterAssistant extends CommonDropAdapterAssistant {
 
         IResource traceResource = sourceResource;
 
-        IPath tracesFolderPath = targetExperiment.getProject().getTracesFolder().getPath();
+        TmfTraceFolder tracesFolder = targetExperiment.getProject().getTracesFolder();
+        if (tracesFolder == null) {
+            return null;
+        }
+
+        IPath tracesFolderPath = tracesFolder.getPath();
         if (tracesFolderPath.isPrefixOf(sourceResource.getFullPath())) {
             String elementPath = sourceResource.getFullPath().makeRelativeTo(tracesFolderPath).toString();
             for (TmfTraceElement trace : targetExperiment.getTraces()) {
@@ -237,7 +245,7 @@ public class DropAdapterAssistant extends CommonDropAdapterAssistant {
             }
         } else {
             String targetName = sourceResource.getName();
-            for (ITmfProjectModelElement element : targetExperiment.getProject().getTracesFolder().getChildren()) {
+            for (ITmfProjectModelElement element : tracesFolder.getChildren()) {
                 if (element.getName().equals(targetName)) {
                     targetName = promptRename(element);
                     if (targetName == null) {
@@ -248,17 +256,17 @@ public class DropAdapterAssistant extends CommonDropAdapterAssistant {
             }
             try {
                 if (operation == DND.DROP_COPY && !sourceResource.isLinked()) {
-                    IPath destination = targetExperiment.getProject().getTracesFolder().getResource().getFullPath().addTrailingSeparator().append(targetName);
+                    IPath destination = tracesFolder.getResource().getFullPath().addTrailingSeparator().append(targetName);
                     sourceResource.copy(destination, false, null);
                     cleanupBookmarks(destination);
                 } else {
-                    createLink(targetExperiment.getProject().getTracesFolder().getResource(), sourceResource, targetName);
+                    createLink(tracesFolder.getResource(), sourceResource, targetName);
                 }
                 // use the copied resource for the experiment
                 if (sourceResource.getType() == IResource.FILE) {
-                    traceResource = targetExperiment.getProject().getTracesFolder().getResource().getFile(targetName);
+                    traceResource = tracesFolder.getResource().getFile(targetName);
                 } else if (sourceResource.getType() == IResource.FOLDER) {
-                    traceResource = targetExperiment.getProject().getTracesFolder().getResource().getFolder(targetName);
+                    traceResource = tracesFolder.getResource().getFolder(targetName);
                 }
                 String sourceLocation = sourceResource.getPersistentProperty(TmfCommonConstants.SOURCE_LOCATION);
                 if (sourceLocation == null) {
@@ -272,7 +280,7 @@ public class DropAdapterAssistant extends CommonDropAdapterAssistant {
         }
         if (traceResource != null && traceResource.exists()) {
             setTraceType(traceResource);
-            for (TmfTraceElement trace : targetExperiment.getProject().getTracesFolder().getTraces()) {
+            for (TmfTraceElement trace : tracesFolder.getTraces()) {
                 if (trace.getResource().equals(traceResource)) {
                     targetExperiment.addTrace(trace);
                     targetExperiment.closeEditors();
@@ -299,9 +307,10 @@ public class DropAdapterAssistant extends CommonDropAdapterAssistant {
 
         IResource sourceResource = sourceTrace.getResource();
         IResource targetResource = drop(sourceResource, traceFolder, operation);
+        TmfTraceFolder tracesFolder = traceFolder.getProject().getTracesFolder();
 
-        if (targetResource != null) {
-            String elementPath = targetResource.getFullPath().makeRelativeTo(traceFolder.getProject().getTracesFolder().getPath()).toString();
+        if ((targetResource != null) && (tracesFolder != null)) {
+            String elementPath = targetResource.getFullPath().makeRelativeTo(tracesFolder.getPath()).toString();
             IFolder destinationSupplementaryFolder = traceFolder.getTraceSupplementaryFolder(elementPath);
             sourceTrace.copySupplementaryFolder(destinationSupplementaryFolder);
             return true;
@@ -370,7 +379,12 @@ public class DropAdapterAssistant extends CommonDropAdapterAssistant {
             TmfExperimentElement targetExperiment,
             int operation) {
 
-        IPath tracesFolderPath = targetExperiment.getProject().getTracesFolder().getResource().getLocation();
+        TmfTraceFolder tracesFolder = targetExperiment.getProject().getTracesFolder();
+        if (tracesFolder == null) {
+            return false;
+        }
+
+        IPath tracesFolderPath = tracesFolder.getResource().getLocation();
         IResource traceResource = null;
         if (tracesFolderPath.isPrefixOf(path)) {
             String elementPath = path.makeRelativeTo(tracesFolderPath).toString();
@@ -379,10 +393,10 @@ public class DropAdapterAssistant extends CommonDropAdapterAssistant {
                     return false;
                 }
             }
-            traceResource = targetExperiment.getProject().getTracesFolder().getResource().findMember(elementPath);
+            traceResource = tracesFolder.getResource().findMember(elementPath);
         } else {
             String targetName = path.lastSegment();
-            for (ITmfProjectModelElement element : targetExperiment.getProject().getTracesFolder().getChildren()) {
+            for (ITmfProjectModelElement element : tracesFolder.getChildren()) {
                 if (element.getName().equals(targetName)) {
                     targetName = promptRename(element);
                     if (targetName == null) {
@@ -392,16 +406,16 @@ public class DropAdapterAssistant extends CommonDropAdapterAssistant {
                 }
             }
             if (operation == DND.DROP_COPY) {
-                importTrace(targetExperiment.getProject().getTracesFolder().getResource(), path, targetName);
+                importTrace(tracesFolder.getResource(), path, targetName);
             } else {
-                createLink(targetExperiment.getProject().getTracesFolder().getResource(), path, targetName);
+                createLink(tracesFolder.getResource(), path, targetName);
             }
             // use the copied resource for the experiment
             File file = new File(path.toString());
             if (file.exists() && file.isFile()) {
-                traceResource = targetExperiment.getProject().getTracesFolder().getResource().getFile(targetName);
+                traceResource = tracesFolder.getResource().getFile(targetName);
             } else if (file.exists() && file.isDirectory()) {
-                traceResource = targetExperiment.getProject().getTracesFolder().getResource().getFolder(targetName);
+                traceResource = tracesFolder.getResource().getFolder(targetName);
             }
         }
         if (traceResource != null && traceResource.exists()) {
@@ -412,7 +426,7 @@ public class DropAdapterAssistant extends CommonDropAdapterAssistant {
                 displayException(e);
             }
             setTraceType(traceResource);
-            for (TmfTraceElement trace : targetExperiment.getProject().getTracesFolder().getTraces()) {
+            for (TmfTraceElement trace : tracesFolder.getTraces()) {
                 if (trace.getResource().equals(traceResource)) {
                     targetExperiment.addTrace(trace);
                     targetExperiment.closeEditors();
index 0a8e378d8505b438679c016e3b4cf16fc3262d61..60672569c40fcb0610b60c22e0254fbe392a7ff2 100644 (file)
@@ -28,6 +28,7 @@ import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.window.Window;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentFolder;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
 import org.eclipse.tracecompass.tmf.ui.project.model.TraceUtils;
@@ -81,6 +82,11 @@ public class RenameFolderHandler extends AbstractHandler {
         IContainer parentFolder = oldFolder.getResource().getParent();
         final TmfTraceFolder tracesFolder = oldFolder.getProject().getTracesFolder();
         final IPath newFolderPath = parentFolder.getFullPath().append(newName);
+        TmfExperimentFolder experimentFolder = oldFolder.getProject().getExperimentsFolder();
+        // Not a standard tracing project
+        if ((tracesFolder == null) || (experimentFolder == null)) {
+            return null;
+        }
 
         WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
             @Override
@@ -131,7 +137,7 @@ public class RenameFolderHandler extends AbstractHandler {
 
                 IPath oldFolderElementPath = oldFolder.getPath().makeRelativeTo(tracesFolder.getPath());
                 IPath newFolderElementPath = oldFolderElementPath.removeLastSegments(1).append(newName);
-                for (TmfExperimentElement experiment : oldFolder.getProject().getExperimentsFolder().getExperiments()) {
+                for (TmfExperimentElement experiment : experimentFolder.getExperiments()) {
                     for (TmfTraceElement oldTrace : experiment.getTraces()) {
                         if (oldTrace.getElementPath().startsWith(oldFolderElementPath.toString())) {
                             experiment.removeTrace(oldTrace);
index 676ebef5b9a7f33bde716e057b5f00ade446849a..7a31469f69699b37723850beadedcd521471c41c 100644 (file)
@@ -83,6 +83,13 @@ public class RenameTraceHandler extends AbstractHandler {
 
         IFolder parentFolder = (IFolder) oldTrace.getParent().getResource();
         final TmfTraceFolder tracesFolder = oldTrace.getProject().getTracesFolder();
+        TmfExperimentFolder experimentFolder = oldTrace.getProject().getExperimentsFolder();
+
+        // Not a standard tracing project
+        if ((tracesFolder == null) || (experimentFolder == null)) {
+            return null;
+        }
+
         final IPath newPath = parentFolder.getFullPath().append(newName);
 
         WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
@@ -153,7 +160,6 @@ public class RenameTraceHandler extends AbstractHandler {
                     return;
                 }
 
-                TmfExperimentFolder experimentFolder = newTrace.getProject().getExperimentsFolder();
                 for (final TmfExperimentElement experiment : experimentFolder.getExperiments()) {
                     for (final TmfTraceElement expTrace : experiment.getTraces()) {
                         if (expTrace.getElementPath().equals(oldTrace.getElementPath())) {
index ad5b264199bdb836beba2f0f0648238f5acbae2e..465db648f21e4abcd24ac64ac1af4802ae236189 100644 (file)
@@ -188,11 +188,13 @@ public class SelectTraceTypeHandler extends AbstractHandler {
         TmfTraceTypeUIUtils.setTraceType(resource, traceTypeHelper);
 
         TmfExperimentFolder experimentFolder = element.getProject().getExperimentsFolder();
-        for (final TmfExperimentElement experiment : experimentFolder.getExperiments()) {
-            for (final TmfTraceElement child : experiment.getTraces()) {
-                if (child.getName().equals(element.getName())) {
-                    TmfTraceTypeUIUtils.setTraceType(child.getResource(), traceTypeHelper);
-                    break;
+        if (experimentFolder != null) {
+            for (final TmfExperimentElement experiment : experimentFolder.getExperiments()) {
+                for (final TmfTraceElement child : experiment.getTraces()) {
+                    if (child.getName().equals(element.getName())) {
+                        TmfTraceTypeUIUtils.setTraceType(child.getResource(), traceTypeHelper);
+                        break;
+                    }
                 }
             }
         }
index d9af95a61b36206fd5f437103040c2a95b66921e..5001e2cf8edd598334b4710c67619a16aa08de1b 100644 (file)
@@ -18,9 +18,11 @@ import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.tracecompass.internal.tmf.ui.editors.ITmfEventsEditorConstants;
 import org.eclipse.tracecompass.tmf.core.TmfCommonConstants;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentFolder;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectElement;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectRegistry;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IEditorReference;
@@ -51,27 +53,36 @@ public class TmfEditorLinkHelper implements ILinkHelper {
                 }
 
                 final TmfProjectElement project = TmfProjectRegistry.getProject(file.getProject(), true);
+                TmfTraceFolder tracesFolder = project.getTracesFolder();
 
                 // Check for experiments, traces which are folders or traces which are files
                 if (ITmfEventsEditorConstants.EXPERIMENT_INPUT_TYPE_CONSTANTS.contains(traceTypeId)) {
+                    TmfExperimentFolder experimentFolder = project.getExperimentsFolder();
                     // Case 1: Experiment
-                    for (final TmfExperimentElement experimentElement : project.getExperimentsFolder().getExperiments()) {
-                        if (experimentElement.getResource().equals(file.getParent())) {
-                            return new StructuredSelection(experimentElement);
+                    if (experimentFolder != null) {
+                        for (final TmfExperimentElement experimentElement : experimentFolder.getExperiments()) {
+                            if (experimentElement.getResource().equals(file.getParent())) {
+                                return new StructuredSelection(experimentElement);
+                            }
                         }
                     }
                 } else if (ITmfEventsEditorConstants.TRACE_INPUT_TYPE_CONSTANTS.contains(traceTypeId)) {
                     // Case 2: Trace that is a folder
-                    for (final TmfTraceElement traceElement : project.getTracesFolder().getTraces()) {
-                        if (traceElement.getResource().equals(file.getParent())) {
-                            return new StructuredSelection(traceElement);
+
+                    if (tracesFolder != null) {
+                        for (final TmfTraceElement traceElement : tracesFolder.getTraces()) {
+                            if (traceElement.getResource().equals(file.getParent())) {
+                                return new StructuredSelection(traceElement);
+                            }
                         }
                     }
                 } else {
                     // Case 3: Trace that is a file
-                    for (final TmfTraceElement traceElement : project.getTracesFolder().getTraces()) {
-                        if (traceElement.getResource().equals(file)) {
-                            return new StructuredSelection(traceElement);
+                    if (tracesFolder != null) {
+                        for (final TmfTraceElement traceElement : tracesFolder.getTraces()) {
+                            if (traceElement.getResource().equals(file)) {
+                                return new StructuredSelection(traceElement);
+                            }
                         }
                     }
                 }
index 5d6b77d0915cf1758d360616e58fc1072a5a43d0..e18fb552ab4cc93ad82c73abc78971c9ee2c974e 100644 (file)
@@ -128,12 +128,17 @@ public class ExportTracePackageSelectTraceWizardPage extends WizardPage {
                 TmfProjectElement project = TmfProjectRegistry.getProject(fSelectedProject, true);
 
                 TmfTraceFolder tracesFolder = project.getTracesFolder();
-                List<TmfTraceElement> traces = tracesFolder.getTraces();
-                TmfTraceElement[] array = traces.toArray(new TmfTraceElement[] {});
-                traceViewer.setInput(array);
-                traceViewer.refresh();
-                fTraceTable.select(0);
-                fTraceTable.notifyListeners(SWT.Selection, new Event());
+                TmfTraceElement[] array = new TmfTraceElement[0];
+                if (tracesFolder != null) {
+                    List<TmfTraceElement> traces = tracesFolder.getTraces();
+                    array = traces.toArray(new TmfTraceElement[] {});
+                    traceViewer.setInput(array);
+                    traceViewer.refresh();
+                }
+                if (array.length > 0) {
+                    fTraceTable.select(0);
+                    fTraceTable.notifyListeners(SWT.Selection, new Event());
+                }
                 getWizard().getContainer().updateButtons();
             }
         });
index 65db332d884557943195b1db38fab3c07790a5a9..4ee2de812008ea7823276d2e7dc2c81b6e59c738 100644 (file)
@@ -49,6 +49,7 @@ import org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.TracePa
 import org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.TracePackageTraceElement;
 import org.eclipse.tracecompass.tmf.core.TmfCommonConstants;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
 import org.eclipse.tracecompass.tmf.ui.project.model.TraceUtils;
 import org.eclipse.ui.internal.wizards.datatransfer.ArchiveFileExportOperation;
 import org.w3c.dom.Document;
@@ -214,7 +215,12 @@ public class TracePackageExportOperation extends AbstractTracePackageOperation {
         Document doc = traceNode.getOwnerDocument();
         TmfTraceElement traceElement = ((TracePackageTraceElement) element.getParent()).getTraceElement();
         IResource resource = traceElement.getResource();
-        IPath traceFolderPath = traceElement.getProject().getTracesFolder().getPath();
+
+        final TmfTraceFolder tracesFolder = traceElement.getProject().getTracesFolder();
+        if (tracesFolder == null) {
+            return;
+        }
+        IPath traceFolderPath = tracesFolder.getPath();
 
         // project/Traces/A/B/Kernel -> A/B/Kernel
         IPath relativeToExportFolder = resource.getFullPath().makeRelativeTo(traceFolderPath);
index acf6229f462dbed318140a079408027f67399102..87383a184c65d828ebc2744241ce823be32564f1 100644 (file)
@@ -410,7 +410,11 @@ public class TracePackageImportOperation extends AbstractTracePackageOperation i
                 ArchiveFile archiveFile = getSpecifiedArchiveFile();
                 existingTrace.refreshSupplementaryFolder();
                 // Project/Traces/A/B -> A/B
-                IPath traceFolderRelativePath = fTmfTraceFolder.getPath().makeRelativeTo(fTmfTraceFolder.getProject().getTracesFolder().getPath());
+                final TmfTraceFolder tracesFolder = fTmfTraceFolder.getProject().getTracesFolder();
+                if (tracesFolder == null) {
+                    return new Status(IStatus.ERROR, Activator.PLUGIN_ID, org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.Messages.TracePackage_ErrorOperation);
+                }
+                IPath traceFolderRelativePath = fTmfTraceFolder.getPath().makeRelativeTo(tracesFolder.getPath());
                 // Project/.tracing/A/B/
                 IFolder traceSupplementaryFolder = fTmfTraceFolder.getTraceSupplementaryFolder(traceFolderRelativePath.toString());
                 IPath destinationContainerPath = traceSupplementaryFolder.getFullPath();
index 055aeaab7c54b933b984bc8adfab9bdda450c0fe..9af0dea041afffc4c96c2c383fc01496aca3f182 100644 (file)
@@ -56,10 +56,12 @@ import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
 import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment;
 import org.eclipse.tracecompass.tmf.ui.project.model.Messages;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentFolder;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfOpenTraceHelper;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectElement;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectRegistry;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceTypeUIUtils;
 import org.eclipse.tracecompass.tmf.ui.viewers.events.TmfEventsTable;
 import org.eclipse.ui.IEditorInput;
@@ -124,42 +126,52 @@ public class TmfEventsEditor extends TmfEditor implements ITmfTraceEditor, IReus
                 if (traceTypeId == null) {
                     throw new PartInitException(Messages.TmfOpenTraceHelper_NoTraceType);
                 }
+
                 if (ITmfEventsEditorConstants.EXPERIMENT_INPUT_TYPE_CONSTANTS.contains(traceTypeId)) {
                     // Special case: experiment bookmark resource
                     final TmfProjectElement project = TmfProjectRegistry.getProject(fFile.getProject(), true);
                     if (project == null) {
                         throw new PartInitException(Messages.TmfOpenTraceHelper_NoTraceType);
                     }
-                    for (final TmfExperimentElement experimentElement : project.getExperimentsFolder().getExperiments()) {
-                        if (experimentElement.getResource().equals(fFile.getParent())) {
-                            setPartName(experimentElement.getName());
-                            super.setSite(site);
-                            super.setInput(fileEditorInput);
-                            TmfOpenTraceHelper.reopenTraceFromElement(experimentElement, this);
-                            return;
+                    TmfExperimentFolder experimentFolder = project.getExperimentsFolder();
+                    if (experimentFolder != null) {
+                        for (final TmfExperimentElement experimentElement : experimentFolder.getExperiments()) {
+                            if (experimentElement.getResource().equals(fFile.getParent())) {
+                                setPartName(experimentElement.getName());
+                                super.setSite(site);
+                                super.setInput(fileEditorInput);
+                                TmfOpenTraceHelper.reopenTraceFromElement(experimentElement, this);
+                                return;
+                            }
                         }
                     }
                 } else if (ITmfEventsEditorConstants.TRACE_INPUT_TYPE_CONSTANTS.contains(traceTypeId)) {
                     // Special case: trace bookmark resource
                     final TmfProjectElement project = TmfProjectRegistry.getProject(fFile.getProject(), true);
-                    for (final TmfTraceElement traceElement : project.getTracesFolder().getTraces()) {
-                        if (traceElement.getResource().equals(fFile.getParent())) {
-                            setPartName(traceElement.getElementPath());
-                            super.setSite(site);
-                            super.setInput(fileEditorInput);
-                            TmfOpenTraceHelper.reopenTraceFromElement(traceElement, this);
-                            return;
+                    final TmfTraceFolder tracesFolder = project.getTracesFolder();
+                    if (tracesFolder != null) {
+                        for (final TmfTraceElement traceElement : tracesFolder.getTraces()) {
+                            if (traceElement.getResource().equals(fFile.getParent())) {
+                                setPartName(traceElement.getElementPath());
+                                super.setSite(site);
+                                super.setInput(fileEditorInput);
+                                TmfOpenTraceHelper.reopenTraceFromElement(traceElement, this);
+                                return;
+                            }
                         }
                     }
                 } else {
                     final TmfProjectElement project = TmfProjectRegistry.getProject(fFile.getProject(), true);
-                    for (final TmfTraceElement traceElement : project.getTracesFolder().getTraces()) {
-                        if (traceElement.getResource().equals(fFile)) {
-                            setPartName(traceElement.getElementPath());
-                            super.setSite(site);
-                            super.setInput(fileEditorInput);
-                            TmfOpenTraceHelper.reopenTraceFromElement(traceElement, this);
-                            return;
+                    final TmfTraceFolder tracesFolder = project.getTracesFolder();
+                    if (tracesFolder != null) {
+                        for (final TmfTraceElement traceElement : tracesFolder.getTraces()) {
+                            if (traceElement.getResource().equals(fFile)) {
+                                setPartName(traceElement.getElementPath());
+                                super.setSite(site);
+                                super.setInput(fileEditorInput);
+                                TmfOpenTraceHelper.reopenTraceFromElement(traceElement, this);
+                                return;
+                            }
                         }
                     }
                 }
index 80d9043a0639137775ae8460ed0cdde07f2f899a..8fdb8185cbb12f3ef35f2a5706069b155fe30ee4 100644 (file)
@@ -139,7 +139,16 @@ public class Messages extends NLS {
     /** Trace not found */
     public static String TmfOpenTraceHelper_TraceNotFound;
 
-
+    /**
+     * Error when experiment folder doesn't exists
+     * @since 2.3
+     */
+    public static String TmfProject_ExperimentFolderNotExists;
+    /**
+     * Error when traces folder doesn't exists
+     * @since 2.3
+     */
+    public static String TmfProject_TracesFolderNotExists;
     static {
         // initialize resource bundle
         NLS.initializeMessages(BUNDLE_NAME, Messages.class);
index 948cc57a139da7c787021a10850f811508d4f134..b94a37ac0f20890e8b893208c913a736b8db5aa4 100644 (file)
@@ -104,7 +104,11 @@ public class TmfAnalysisElement extends TmfProjectModelElement implements ITmfSt
         }
 
         /** Get base path for resource */
-        IPath path = getProject().getTracesFolder().getPath();
+        final TmfTraceFolder tracesFolder = getProject().getTracesFolder();
+        if (tracesFolder == null) {
+            return;
+        }
+        IPath path = tracesFolder.getPath();
         IResource resource = getResource();
         if (resource instanceof IFolder) {
             path = ((IFolder) resource).getFullPath();
index 9e9b336d923874deeec8a82abeff3e5c859350f0..c6810a1d27437268e094017f125e1c48fd898336 100644 (file)
@@ -40,6 +40,7 @@ import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.InvalidRegistryObjectException;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.graphics.Image;
@@ -411,7 +412,11 @@ public class TmfExperimentElement extends TmfCommonProjectElement implements IPr
 
     @Override
     public IFile createBookmarksFile() throws CoreException {
-        return createBookmarksFile(getProject().getExperimentsFolder().getResource(), ITmfEventsEditorConstants.EXPERIMENT_EDITOR_INPUT_TYPE);
+        TmfExperimentFolder experimentFolder = getProject().getExperimentsFolder();
+        if (experimentFolder == null) {
+            throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.TmfProject_ExperimentFolderNotExists));
+        }
+        return createBookmarksFile(experimentFolder.getResource(), ITmfEventsEditorConstants.EXPERIMENT_EDITOR_INPUT_TYPE);
     }
 
     @Override
index 17a4f14cfd118dbbcbf23bbfafc95212dc18c70c..1faacaf3b3a48d28cf81b17afd3230d878c517ce 100644 (file)
@@ -18,6 +18,7 @@ import java.util.Map;
 
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
+import org.eclipse.jdt.annotation.Nullable;
 import org.eclipse.swt.graphics.Image;
 
 /**
@@ -32,8 +33,8 @@ public class TmfProjectElement extends TmfProjectModelElement {
     // Attributes
     // ------------------------------------------------------------------------
 
-    private TmfTraceFolder fTraceFolder = null;
-    private TmfExperimentFolder fExperimentFolder = null;
+    @Nullable private TmfTraceFolder fTraceFolder = null;
+    @Nullable private TmfExperimentFolder fExperimentFolder = null;
 
     // ------------------------------------------------------------------------
     // Constructor
@@ -85,6 +86,7 @@ public class TmfProjectElement extends TmfProjectModelElement {
      * Returns the containing trace folder element.
      * @return the TMF trace folder element.
      */
+    @Nullable
     public TmfTraceFolder getTracesFolder() {
         return fTraceFolder;
     }
@@ -93,7 +95,7 @@ public class TmfProjectElement extends TmfProjectModelElement {
      * Returns the containing experiment folder element.
      * @return the TMF experiment folder element.
      */
-    public TmfExperimentFolder getExperimentsFolder() {
+    @Nullable public TmfExperimentFolder getExperimentsFolder() {
         return fExperimentFolder;
     }
 
index 824bae07e9359e97f053e4be2d53897f6730efbd..e80115f489ab4fb37116edd3db9034ec7ee694c3 100644 (file)
@@ -169,17 +169,20 @@ public class TmfProjectRegistry implements IResourceChangeListener {
                         if (tmfProjectElement == null) {
                             return;
                         }
-                        final List<TmfTraceElement> traces = tmfProjectElement.getTracesFolder().getTraces();
-                        if (!traces.isEmpty()) {
-                            // Close editors in UI Thread
-                            Display.getDefault().syncExec(new Runnable() {
-                                @Override
-                                public void run() {
-                                    for (TmfTraceElement traceElement : traces) {
-                                        traceElement.closeEditors();
+                        TmfTraceFolder tracesFolder = tmfProjectElement.getTracesFolder();
+                        if (tracesFolder != null) {
+                            final List<TmfTraceElement> traces = tracesFolder.getTraces();
+                            if (!traces.isEmpty()) {
+                                // Close editors in UI Thread
+                                Display.getDefault().syncExec(new Runnable() {
+                                    @Override
+                                    public void run() {
+                                        for (TmfTraceElement traceElement : traces) {
+                                            traceElement.closeEditors();
+                                        }
                                     }
-                                }
-                            });
+                                });
+                            }
                         }
                     }
                 } catch (CoreException e) {
index 68170634a7ee3fd72e326a325860c4995d8dc7b2..817dc84432c334a68803f23d051c1d88905c5ac3 100644 (file)
@@ -35,7 +35,9 @@ import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.URIUtil;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.osgi.util.NLS;
@@ -371,7 +373,11 @@ public class TmfTraceElement extends TmfCommonProjectElement implements IActionF
     public IFile createBookmarksFile() throws CoreException {
         IFile file = getBookmarksFile();
         if (getResource() instanceof IFolder) {
-            return createBookmarksFile(getProject().getTracesFolder().getResource(), ITmfEventsEditorConstants.TRACE_EDITOR_INPUT_TYPE);
+            TmfTraceFolder tracesFolder = getProject().getTracesFolder();
+            if (tracesFolder == null) {
+                throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.TmfProject_TracesFolderNotExists));
+            }
+            return createBookmarksFile(tracesFolder.getResource(), ITmfEventsEditorConstants.TRACE_EDITOR_INPUT_TYPE);
         }
         return file;
     }
@@ -409,9 +415,12 @@ public class TmfTraceElement extends TmfCommonProjectElement implements IActionF
         // If trace is under an experiment, return original trace from the
         // traces folder
         if (getParent() instanceof TmfExperimentElement) {
-            for (TmfTraceElement aTrace : getProject().getTracesFolder().getTraces()) {
-                if (aTrace.getElementPath().equals(getElementPath())) {
-                    return aTrace;
+            TmfTraceFolder tracesFolder = getProject().getTracesFolder();
+            if (tracesFolder != null) {
+                for (TmfTraceElement aTrace : tracesFolder.getTraces()) {
+                    if (aTrace.getElementPath().equals(getElementPath())) {
+                        return aTrace;
+                    }
                 }
             }
         }
@@ -664,11 +673,13 @@ public class TmfTraceElement extends TmfCommonProjectElement implements IActionF
         // Close experiments that contain the trace if open
         if (getParent() instanceof TmfTraceFolder) {
             TmfExperimentFolder experimentsFolder = getProject().getExperimentsFolder();
-            for (TmfExperimentElement experiment : experimentsFolder.getExperiments()) {
-                for (TmfTraceElement trace : experiment.getTraces()) {
-                    if (trace.getElementPath().equals(getElementPath())) {
-                        experiment.closeEditors();
-                        break;
+            if (experimentsFolder != null) {
+                for (TmfExperimentElement experiment : experimentsFolder.getExperiments()) {
+                    for (TmfTraceElement trace : experiment.getTraces()) {
+                        if (trace.getElementPath().equals(getElementPath())) {
+                            experiment.closeEditors();
+                            break;
+                        }
                     }
                 }
             }
@@ -704,18 +715,19 @@ public class TmfTraceElement extends TmfCommonProjectElement implements IActionF
                 TmfExperimentFolder experimentFolder = getProject().getExperimentsFolder();
 
                 // Propagate the removal to traces
-                for (TmfExperimentElement experiment : experimentFolder.getExperiments()) {
-                    List<TmfTraceElement> toRemove = new LinkedList<>();
-                    for (TmfTraceElement trace : experiment.getTraces()) {
-                        if (trace.getElementPath().equals(getElementPath())) {
-                            toRemove.add(trace);
+                if (experimentFolder != null) {
+                    for (TmfExperimentElement experiment : experimentFolder.getExperiments()) {
+                        List<TmfTraceElement> toRemove = new LinkedList<>();
+                        for (TmfTraceElement trace : experiment.getTraces()) {
+                            if (trace.getElementPath().equals(getElementPath())) {
+                                toRemove.add(trace);
+                            }
+                        }
+                        for (TmfTraceElement child : toRemove) {
+                            experiment.removeTrace(child);
                         }
-                    }
-                    for (TmfTraceElement child : toRemove) {
-                        experiment.removeTrace(child);
                     }
                 }
-
                 // Delete supplementary files
                 deleteSupplementaryFolder();
 
index dd2cade7f9e940a7fe5404d9a1f406210bb730fe..addd3673cd9293adc89fbd930b860b072eae7d82 100644 (file)
@@ -201,26 +201,36 @@ public final class TmfTraceTypeUIUtils {
         resource.setPersistentProperty(TmfCommonConstants.TRACETYPE, traceTypeId);
 
         TmfProjectElement tmfProject = TmfProjectRegistry.getProject(resource.getProject(), true);
-        if (tmfProject.getTracesFolder().getPath().isPrefixOf(resource.getFullPath())) {
-            String elementPath = resource.getFullPath().makeRelativeTo(tmfProject.getTracesFolder().getPath()).toString();
-            refreshTraceElement(tmfProject.getTracesFolder().getTraces(), elementPath);
-        } else if (resource.getParent().equals(tmfProject.getExperimentsFolder().getResource())) {
-            /* The trace type to set is for an experiment */
-            for (TmfExperimentElement experimentElement : tmfProject.getExperimentsFolder().getExperiments()) {
-                if (resource.equals(experimentElement.getResource())) {
-                    experimentElement.refreshTraceType();
-                    break;
-                }
+        TmfTraceFolder tracesFolder = tmfProject.getTracesFolder();
+        TmfExperimentFolder experimentsFolder = tmfProject.getExperimentsFolder();
+        if (tracesFolder != null) {
+            if (tracesFolder.getPath().isPrefixOf(resource.getFullPath())) {
+                String elementPath = resource.getFullPath().makeRelativeTo(tracesFolder.getPath()).toString();
+                refreshTraceElement(tracesFolder.getTraces(), elementPath);
             }
-        } else {
-            for (TmfExperimentElement experimentElement : tmfProject.getExperimentsFolder().getExperiments()) {
-                if (experimentElement.getPath().isPrefixOf(resource.getFullPath())) {
-                    String elementPath = resource.getFullPath().makeRelativeTo(experimentElement.getPath()).toString();
-                    refreshTraceElement(experimentElement.getTraces(), elementPath);
-                    break;
+        }
+        if ((tracesFolder == null) || (experimentsFolder != null)) {
+            if (experimentsFolder != null) {
+                if (resource.getParent().equals(experimentsFolder.getResource())) {
+                    /* The trace type to set is for an experiment */
+                    for (TmfExperimentElement experimentElement : experimentsFolder.getExperiments()) {
+                        if (resource.equals(experimentElement.getResource())) {
+                            experimentElement.refreshTraceType();
+                            break;
+                        }
+                    }
+                } else {
+                    for (TmfExperimentElement experimentElement : experimentsFolder.getExperiments()) {
+                        if (experimentElement.getPath().isPrefixOf(resource.getFullPath())) {
+                            String elementPath = resource.getFullPath().makeRelativeTo(experimentElement.getPath()).toString();
+                            refreshTraceElement(experimentElement.getTraces(), elementPath);
+                            break;
+                        }
+                    }
                 }
             }
         }
+
         if (refresh) {
             tmfProject.refresh();
         }
index a7a6a0a52187ab6684f7e42563132437f9f2f3d0..76c06317bcf7d2405330b50a628023d74272e1c1 100644 (file)
@@ -51,3 +51,6 @@ TmfOpenTraceHelper_NoTraceOrExperimentType=No experiment type associated to that
 TmfOpenTraceHelper_ErrorElement=Error opening {0}.
 TmfOpenTraceHelper_InitError = Error initializing trace.
 TmfOpenTraceHelper_TraceNotFound = Trace {0} not found.
+
+TmfProject_ExperimentFolderNotExists = Root experiment folder doesn't exist in project.
+TmfProject_TracesFolderNotExists = Root traces folder doesn't exist in project
This page took 0.047805 seconds and 5 git commands to generate.