2010-07-12 Francois Chouinard <fchouinar@gmail.com> Contribution for Bug319428...
authorFrancois Chouinard <fchouinard@gmail.com>
Mon, 12 Jul 2010 17:49:42 +0000 (17:49 +0000)
committerFrancois Chouinard <fchouinard@gmail.com>
Mon, 12 Jul 2010 17:49:42 +0000 (17:49 +0000)
* src/org/eclipse/linuxtools/tmf/signal/TmfTraceClosedSignal.java: New file.
* src/org/eclipse/linuxtools/tmf/signal/TmfTraceOpenedSignal.java: New file.
* src/org/eclipse/linuxtools/tmf/signal/TmfTraceParserUpdatedSignal.java: New file.
* src/org/eclipse/linuxtools/tmf/signal/TmfTraceSelectedSignal.java: New file.
* META-INF/MANIFEST.MF: Added a dependency on org.eclipse.core.resources
* src/org/eclipse/linuxtools/tmf/experiment/TmfExperiment.java (seekEvent): Commented out useless statements
* src/org/eclipse/linuxtools/tmf/trace/ITmfContext.java: Added a constant
* src/org/eclipse/linuxtools/tmf/trace/ITmfTrace.java: Added APIs
* src/org/eclipse/linuxtools/tmf/trace/TmfLocation.java: Added validation on location
* src/org/eclipse/linuxtools/tmf/trace/TmfTrace.java (getRank): Added
(indexTrace): Cleaned up warning
(queueLongRequest): Added background process handling

        * src/org/eclipse/linuxtools/tmf/ui/TmfUiPlugin.java:
- Initialized ParserProviderManager
- Added getImageFromPath()
* src/org/eclipse/linuxtools/tmf/ui/editors/ITmfTraceEditor.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/editors/TmfEditor.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/editors/TmfEditorInput.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/editors/TmfEventsEditor.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/editors/TmfMultiPageEditorPart.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/parsers/IParserProvider.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/parsers/ParserProviderManager.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/TmfEventsView.java: Use TmfEventsTable instead of Table
* src/org/eclipse/linuxtools/tmf/ui/views/project/ProjectView.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/TmfProjectNature.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/AddTraceWizard.java:
* src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/AddTraceWizardPage.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/DialogTraceContentProvider.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/DialogTraceLabelProvider.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/ImportTraceWizard.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/ImportTraceWizardPage.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/NewExperimentDialog.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/NewProjectMainWizardPage.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/NewProjectWizard.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/CloseProjectHandler.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/DeleteExperimentHandler.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/DeleteProjectHandler.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/DeleteTraceHandler.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/ImportTraceHandler.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/NewExperimentHandler.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/NewProjectHandler.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/OpenExperimentHandler.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/OpenProjectHandler.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/OpenTraceHandler.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/RefreshHandler.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/RenameExperimentHandler.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/RenameProjectHandler.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/RenameTraceHandler.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/SelectParserContributionItem.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/SelectParserHandler.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/SelectTracesHandler.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/model/ITmfProjectTreeNode.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfExperimentFolderNode.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfExperimentNode.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectContentProvider.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectLabelProvider.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectNode.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectRoot.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfTraceFolderNode.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectTreeNode.java: New file.
* src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfTraceNode.java: New file.
* schema/org.eclipse.linuxtools.tmf.ui.parserprovider.exsd: Extension point for parser providers
* META-INF/MANIFEST.MF: Added plugin.xml in includes
* build.properties: Added plugin.xml in includes
* plugin.xml: New file (extensions used by TmfEditor, TmfTable, TmfProject)

65 files changed:
org.eclipse.linuxtools.tmf.ui/ChangeLog [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/META-INF/MANIFEST.MF
org.eclipse.linuxtools.tmf.ui/build.properties
org.eclipse.linuxtools.tmf.ui/plugin.xml [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/schema/org.eclipse.linuxtools.tmf.ui.parserprovider.exsd [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/TmfUiPlugin.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/TmfUiPreferenceInitializer.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/editors/ITmfTraceEditor.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/editors/TmfEditor.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/editors/TmfEditorInput.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/editors/TmfEventsEditor.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/editors/TmfMultiPageEditorPart.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/parsers/IParserProvider.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/parsers/ParserProviderManager.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/viewers/events/TmfEventsTable.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/TmfEventsView.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/ProjectView.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/TmfProjectNature.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/AddTraceWizard.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/AddTraceWizardPage.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/DialogTraceContentProvider.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/DialogTraceLabelProvider.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/ImportTraceWizard.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/ImportTraceWizardPage.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/NewExperimentDialog.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/NewProjectMainWizardPage.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/NewProjectWizard.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/CloseProjectHandler.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/DeleteExperimentHandler.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/DeleteProjectHandler.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/DeleteTraceHandler.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/ImportTraceHandler.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/NewExperimentHandler.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/NewProjectHandler.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/OpenExperimentHandler.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/OpenProjectHandler.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/OpenTraceHandler.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/RefreshHandler.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/RenameExperimentHandler.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/RenameProjectHandler.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/RenameTraceHandler.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/SelectParserContributionItem.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/SelectParserHandler.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/SelectTracesHandler.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/ITmfProjectTreeNode.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfExperimentFolderNode.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfExperimentNode.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectContentProvider.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectLabelProvider.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectNode.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectRoot.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectTreeNode.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfTraceFolderNode.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfTraceNode.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf/ChangeLog
org.eclipse.linuxtools.tmf/META-INF/MANIFEST.MF
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperiment.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/signal/TmfTraceClosedSignal.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/signal/TmfTraceOpenedSignal.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/signal/TmfTraceParserUpdatedSignal.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/signal/TmfTraceSelectedSignal.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/ITmfContext.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/ITmfTrace.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfLocation.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfTrace.java

diff --git a/org.eclipse.linuxtools.tmf.ui/ChangeLog b/org.eclipse.linuxtools.tmf.ui/ChangeLog
new file mode 100644 (file)
index 0000000..ad147d0
--- /dev/null
@@ -0,0 +1,56 @@
+2010-07-12  Francois Chouinard  <fchouinar@gmail.com>
+
+       * src/org/eclipse/linuxtools/tmf/ui/TmfUiPlugin.java: 
+               - Initialized ParserProviderManager
+               - Added getImageFromPath() 
+       * src/org/eclipse/linuxtools/tmf/ui/editors/ITmfTraceEditor.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/editors/TmfEditor.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/editors/TmfEditorInput.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/editors/TmfEventsEditor.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/editors/TmfMultiPageEditorPart.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/parsers/IParserProvider.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/parsers/ParserProviderManager.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/TmfEventsView.java: Use TmfEventsTable instead of Table 
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/ProjectView.java: New file. 
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/TmfProjectNature.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/AddTraceWizard.java: 
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/AddTraceWizardPage.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/DialogTraceContentProvider.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/DialogTraceLabelProvider.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/ImportTraceWizard.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/ImportTraceWizardPage.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/NewExperimentDialog.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/NewProjectMainWizardPage.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/NewProjectWizard.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/CloseProjectHandler.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/DeleteExperimentHandler.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/DeleteProjectHandler.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/DeleteTraceHandler.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/ImportTraceHandler.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/NewExperimentHandler.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/NewProjectHandler.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/OpenExperimentHandler.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/OpenProjectHandler.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/OpenTraceHandler.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/RefreshHandler.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/RenameExperimentHandler.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/RenameProjectHandler.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/RenameTraceHandler.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/SelectParserContributionItem.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/SelectParserHandler.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/SelectTracesHandler.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/model/ITmfProjectTreeNode.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfExperimentFolderNode.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfExperimentNode.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectContentProvider.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectLabelProvider.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectNode.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectRoot.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfTraceFolderNode.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectTreeNode.java: New file.
+       * src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfTraceNode.java: New file.
+       * schema/org.eclipse.linuxtools.tmf.ui.parserprovider.exsd: Extension point for parser providers
+       * META-INF/MANIFEST.MF: Added plugin.xml in includes
+       * build.properties: Added plugin.xml in includes
+       * plugin.xml: New file (extensions used by TmfEditor, TmfTable, TmfProject)
+       
\ No newline at end of file
index 192c41e9b8cb20987f897c622e65221f8fcf8736..3f01a433837808a2724dced215bc10801110de9f 100644 (file)
@@ -1,20 +1,26 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
-Bundle-SymbolicName: org.eclipse.linuxtools.tmf.ui
+Bundle-SymbolicName: org.eclipse.linuxtools.tmf.ui;singleton:=true
 Bundle-Version: 0.2.0.qualifier
 Bundle-Activator: org.eclipse.linuxtools.tmf.ui.TmfUiPlugin
 Bundle-Vendor: %Bundle-Vendor
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime,
- org.eclipse.linuxtools.tmf;bundle-version="0.2.0"
+ org.eclipse.linuxtools.tmf;bundle-version="0.2.0",
+ org.eclipse.core.resources;bundle-version="3.6.0",
+ org.eclipse.ui.ide;bundle-version="3.6.0"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.linuxtools.tmf.ui,
+ org.eclipse.linuxtools.tmf.ui.editors,
+ org.eclipse.linuxtools.tmf.ui.parsers,
  org.eclipse.linuxtools.tmf.ui.viewers,
+ org.eclipse.linuxtools.tmf.ui.viewers.events,
  org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis,
  org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.dialogs,
  org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.model,
  org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets,
- org.eclipse.linuxtools.tmf.ui.views
+ org.eclipse.linuxtools.tmf.ui.views,
+ org.eclipse.linuxtools.tmf.ui.views.project
 Bundle-Localization: plugin
index fc25bf7e08613f36c7ffdb4b2f4fc44b705380ac..e77da8dab3c8a56e7c855e322bdbf777b66038e2 100644 (file)
@@ -3,5 +3,6 @@ output.. = bin/
 bin.includes = META-INF/,\
                .,\
                icons/,\
-              about.html,\
-               plugin.properties
+               about.html,\
+               plugin.properties,\
+               plugin.xml
diff --git a/org.eclipse.linuxtools.tmf.ui/plugin.xml b/org.eclipse.linuxtools.tmf.ui/plugin.xml
new file mode 100644 (file)
index 0000000..ff93cbb
--- /dev/null
@@ -0,0 +1,379 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<?eclipse version="3.4"?>\r
+<plugin>\r
+   <extension-point id="org.eclipse.linuxtools.tmf.ui.parserProviders" name="Parser Providers" schema="schema/org.eclipse.linuxtools.tmf.ui.parserprovider.exsd"/>\r
+   <extension\r
+         point="org.eclipse.ui.views">\r
+      <category\r
+            id="org.eclipse.linuxtools.tmf.ui.views.category"\r
+            name="TMF">\r
+      </category>\r
+      <view\r
+            allowMultiple="false"\r
+            category="org.eclipse.linuxtools.tmf.ui.views.category"\r
+            class="org.eclipse.linuxtools.tmf.ui.views.project.ProjectView"\r
+            icon="icons/project_view.gif"\r
+            id="org.eclipse.linuxtools.tmf.ui.views.project"\r
+            name="Projects"\r
+            restorable="true">\r
+      </view>\r
+      <view\r
+            allowMultiple="false"\r
+            category="org.eclipse.linuxtools.tmf.ui.views.category"\r
+            class="org.eclipse.linuxtools.tmf.ui.views.TmfEventsView"\r
+            icon="icons/events_view.gif"\r
+            id="org.eclipse.linuxtools.tmf.ui.views.events"\r
+            name="Events"\r
+            restorable="true">\r
+      </view>\r
+   </extension>\r
+   <extension\r
+         point="org.eclipse.ui.editors">\r
+      <editor\r
+            class="org.eclipse.linuxtools.tmf.ui.editors.TmfEventsEditor"\r
+            default="false"\r
+            icon="icons/events_view.gif"\r
+            id="org.eclipse.linuxtools.tmf.ui.editors.events"\r
+            name="Events">\r
+         <contentTypeBinding\r
+               contentTypeId="org.eclipse.linuxtools.tmf.ui.content-type.trace">\r
+         </contentTypeBinding>\r
+      </editor>\r
+   </extension>\r
+   <extension\r
+         id="org.eclipse.linuxtools.tmf.wizards.new"\r
+         name="%extension.name.2"\r
+         point="org.eclipse.ui.newWizards">\r
+      <category\r
+            id="org.eclipse.linuxtools.tmf.ui.wizards.new"\r
+            name="TMF">\r
+      </category>\r
+      <wizard\r
+            category="org.eclipse.linuxtools.tmf.ui.wizards.new"\r
+            class="org.eclipse.linuxtools.tmf.ui.views.project.dialogs.NewProjectWizard"\r
+            id="org.eclipse.linuxtools.tmf.ui.views.ui.wizards.newProject"\r
+            name="TMF Project"\r
+            project="true">\r
+         <description>\r
+            %wizard.description.0\r
+         </description>\r
+      </wizard>\r
+   </extension>\r
+   <extension\r
+         id="org.eclipse.linuxtools.tmf.ui.views.project.TmfProjectNature"\r
+         name="TMF Project Nature"\r
+         point="org.eclipse.core.resources.natures">\r
+      <runtime>\r
+         <run\r
+               class="org.eclipse.linuxtools.tmf.ui.views.project.TmfProjectNature">\r
+         </run>\r
+      </runtime>\r
+   </extension>\r
+   <extension\r
+         id="org.eclipse.linuxtools.tmf.ui.actionSets"\r
+         name="TMF Action Sets"\r
+         point="org.eclipse.ui.actionSets">\r
+      <actionSet\r
+            description="TMF Action Set"\r
+            id="org.eclipse.linuxtools.tmf.ui.actionSet"\r
+            label="TMF Action Set"\r
+            visible="true">\r
+      </actionSet>\r
+   </extension>\r
+   <extension\r
+         id="org.eclipse.linuxtools.tmf.ui.commands"\r
+         name="TMF Commands"\r
+         point="org.eclipse.ui.commands">\r
+      <category\r
+            description="TMF Project Commands"\r
+            id="org.eclipse.linuxtools.tmf.ui.commands.project.category"\r
+            name="TMF Project Commands">\r
+      </category>\r
+      <command\r
+            categoryId="org.eclipse.linuxtools.tmf.ui.commands.project.category"\r
+            description="Create an TMF Project"\r
+            id="org.eclipse.linuxtools.tmf.ui.command.project.new"\r
+            name="New Project">\r
+      </command>\r
+      <command\r
+            categoryId="org.eclipse.linuxtools.tmf.ui.commands.project.category"\r
+            description="Open an TMF Project"\r
+            id="org.eclipse.linuxtools.tmf.ui.command.project.open"\r
+            name="Open Project">\r
+      </command>\r
+      <command\r
+            categoryId="org.eclipse.linuxtools.tmf.ui.commands.project.category"\r
+            description="Close an TMF Project"\r
+            id="org.eclipse.linuxtools.tmf.ui.command.project.close"\r
+            name="Close Project">\r
+      </command>\r
+      <command\r
+            categoryId="org.eclipse.linuxtools.tmf.ui.commands.project.category"\r
+            description="Rename an TMF Project"\r
+            id="org.eclipse.linuxtools.tmf.ui.command.project.rename"\r
+            name="Rename Project">\r
+      </command>\r
+      <command\r
+            categoryId="org.eclipse.linuxtools.tmf.ui.commands.project.category"\r
+            description="Delete an TMF Project"\r
+            id="org.eclipse.linuxtools.tmf.ui.command.project.delete"\r
+            name="Delete Project">\r
+      </command>\r
+      <command\r
+            categoryId="org.eclipse.linuxtools.tmf.ui.commands.project.category"\r
+            description="Import an TMF Trace"\r
+            id="org.eclipse.linuxtools.tmf.ui.command.project.trace.import"\r
+            name="Import Trace">\r
+      </command>\r
+      <command\r
+            categoryId="org.eclipse.linuxtools.tmf.ui.commands.project.category"\r
+            description="Open an TMF Trace"\r
+            id="org.eclipse.linuxtools.tmf.ui.command.project.trace.open"\r
+            name="Open Trace">\r
+      </command>\r
+      <command\r
+            categoryId="org.eclipse.linuxtools.tmf.ui.commands.project.category"\r
+            description="Select the Parser for a TMF Trace"\r
+            id="org.eclipse.linuxtools.tmf.ui.command.project.trace.selectparser"\r
+            name="Select Parser">\r
+         <commandParameter\r
+               id="org.eclipse.linuxtools.tmf.ui.commandparameter.project.trace.selectparser.parser"\r
+               name="Parser"\r
+               optional="false">\r
+         </commandParameter>\r
+      </command>\r
+      <command\r
+            categoryId="org.eclipse.linuxtools.tmf.ui.commands.project.category"\r
+            description="Rename an TMF Trace"\r
+            id="org.eclipse.linuxtools.tmf.ui.command.project.trace.rename"\r
+            name="Rename Trace">\r
+      </command>\r
+      <command\r
+            categoryId="org.eclipse.linuxtools.tmf.ui.commands.project.category"\r
+            description="Delete an TMF Trace"\r
+            id="org.eclipse.linuxtools.tmf.ui.command.project.trace.delete"\r
+            name="Delete Trace">\r
+      </command>\r
+      <command\r
+            categoryId="org.eclipse.linuxtools.tmf.ui.commands.project.category"\r
+            description="Create an TMF Experiment"\r
+            id="org.eclipse.linuxtools.tmf.ui.command.project.experiment.new"\r
+            name="New Experiment">\r
+      </command>\r
+      <command\r
+            categoryId="org.eclipse.linuxtools.tmf.ui.commands.project.category"\r
+            description="Select TMF Traces"\r
+            id="org.eclipse.linuxtools.tmf.ui.command.project.experiment.select"\r
+            name="Select Traces">\r
+      </command>\r
+      <command\r
+            categoryId="org.eclipse.linuxtools.tmf.ui.commands.project.category"\r
+            description="Open an TMF Experiment"\r
+            id="org.eclipse.linuxtools.tmf.ui.command.project.experiment.open"\r
+            name="Open Experiment">\r
+      </command>\r
+      <command\r
+            categoryId="org.eclipse.linuxtools.tmf.ui.commands.project.category"\r
+            description="Rename an TMF Experiment"\r
+            id="org.eclipse.linuxtools.tmf.ui.command.project.experiment.rename"\r
+            name="Rename Experiment">\r
+      </command>\r
+      <command\r
+            categoryId="org.eclipse.linuxtools.tmf.ui.commands.project.category"\r
+            description="Delete an TMF Experiment"\r
+            id="org.eclipse.linuxtools.tmf.ui.command.project.experiment.delete"\r
+            name="Delete Experiment">\r
+      </command>\r
+      <command\r
+            categoryId="org.eclipse.linuxtools.tmf.ui.commands.project.category"\r
+            description="Refresh View"\r
+            id="org.eclipse.linuxtools.tmf.ui.command.project.refresh"\r
+            name="Refresh View">\r
+      </command>\r
+   </extension>\r
+   <extension\r
+         id="org.eclipse.linuxtools.tmf.ui.menus"\r
+         name="TMF Menus"\r
+         point="org.eclipse.ui.menus">\r
+      <menuContribution\r
+            locationURI="popup:org.eclipse.linuxtools.tmf.ui.views.project?after=additions">\r
+         <command\r
+               commandId="org.eclipse.linuxtools.tmf.ui.command.project.new"\r
+               id="org.eclipse.linuxtools.tmf.ui.menu.popup.project.new"\r
+               label="New Project"\r
+               style="push">\r
+         </command>\r
+         <command\r
+               commandId="org.eclipse.linuxtools.tmf.ui.command.project.open"\r
+               id="org.eclipse.linuxtools.tmf.ui.menu.popup.project.open"\r
+               label="Open Project"\r
+               style="push">\r
+         </command>\r
+         <command\r
+               commandId="org.eclipse.linuxtools.tmf.ui.command.project.close"\r
+               id="org.eclipse.linuxtools.tmf.ui.menu.popup.project.close"\r
+               label="Close Project"\r
+               style="push">\r
+         </command>\r
+         <command\r
+               commandId="org.eclipse.linuxtools.tmf.ui.command.project.delete"\r
+               id="org.eclipse.linuxtools.tmf.ui.menu.popup.project.delete"\r
+               label="Delete Project"\r
+               style="push">\r
+         </command>\r
+         <separator\r
+               name="org.eclipse.linuxtools.tmf.ui.menu.popup.project.separator1"\r
+               visible="true">\r
+         </separator>\r
+         <command\r
+               commandId="org.eclipse.linuxtools.tmf.ui.command.project.experiment.new"\r
+               id="org.eclipse.linuxtools.tmf.ui.menu.popup.project.experiment.new"\r
+               label="New Experiment"\r
+               style="push">\r
+         </command>\r
+         <command\r
+               commandId="org.eclipse.linuxtools.tmf.ui.command.project.experiment.select"\r
+               id="org.eclipse.linuxtools.tmf.ui.menu.popup.project.experiment.select"\r
+               label="Select Traces"\r
+               style="push">\r
+         </command>\r
+         <command\r
+               commandId="org.eclipse.linuxtools.tmf.ui.command.project.experiment.open"\r
+               id="org.eclipse.linuxtools.tmf.ui.menu.popup.project.experiment.open"\r
+               label="Open Experiment"\r
+               style="push">\r
+         </command>\r
+         <command\r
+               commandId="org.eclipse.linuxtools.tmf.ui.command.project.experiment.delete"\r
+               id="org.eclipse.linuxtools.tmf.ui.menu.popup.project.experiment.delete"\r
+               label="Delete Experiment"\r
+               style="push">\r
+         </command>\r
+         <separator\r
+               name="org.eclipse.linuxtools.tmf.ui.menu.popup.project.separator2"\r
+               visible="true">\r
+         </separator>\r
+         <command\r
+               commandId="org.eclipse.linuxtools.tmf.ui.command.project.trace.import"\r
+               id="org.eclipse.linuxtools.tmf.ui.menu.popup.project.trace.import"\r
+               label="Import Traces"\r
+               style="push">\r
+         </command>\r
+         <command\r
+               commandId="org.eclipse.linuxtools.tmf.ui.command.project.trace.open"\r
+               id="org.eclipse.linuxtools.tmf.ui.menu.popup.project.trace.open"\r
+               label="Open Trace"\r
+               style="push">\r
+         </command>\r
+         <menu\r
+               id="org.eclipse.linuxtools.tmf.ui.menu.project.trace.selectparser"\r
+               label="Select Parser">\r
+            <dynamic\r
+                  class="org.eclipse.linuxtools.tmf.ui.views.project.handlers.SelectParserContributionItem"\r
+                  id="org.eclipse.linuxtools.tmf.ui.command.project.trace.selectparser.dynamic">\r
+            </dynamic>\r
+         </menu>\r
+         <command\r
+               commandId="org.eclipse.linuxtools.tmf.ui.command.project.trace.delete"\r
+               id="org.eclipse.linuxtools.tmf.ui.menu.popup.project.trace.delete"\r
+               label="Delete Trace"\r
+               style="push">\r
+         </command>\r
+         <separator\r
+               name="org.eclipse.linuxtools.tmf.ui.menu.popup.project.separator3"\r
+               visible="true">\r
+         </separator>\r
+         <command\r
+               commandId="org.eclipse.linuxtools.tmf.ui.command.project.refresh"\r
+               id="org.eclipse.linuxtools.tmf.ui.menu.popup.project.refresh"\r
+               label="Refresh View"\r
+               style="push">\r
+         </command>\r
+      </menuContribution>\r
+   </extension>\r
+   <extension\r
+         id="org.eclipse.linuxtools.tmf.ui.handlers"\r
+         name="TMF Command Handlers"\r
+         point="org.eclipse.ui.handlers">\r
+      <handler\r
+            class="org.eclipse.linuxtools.tmf.ui.views.project.handlers.NewProjectHandler"\r
+            commandId="org.eclipse.linuxtools.tmf.ui.command.project.new">\r
+      </handler>\r
+      <handler\r
+            class="org.eclipse.linuxtools.tmf.ui.views.project.handlers.OpenProjectHandler"\r
+            commandId="org.eclipse.linuxtools.tmf.ui.command.project.open">\r
+      </handler>\r
+      <handler\r
+            class="org.eclipse.linuxtools.tmf.ui.views.project.handlers.CloseProjectHandler"\r
+            commandId="org.eclipse.linuxtools.tmf.ui.command.project.close">\r
+      </handler>\r
+      <handler\r
+            class="org.eclipse.linuxtools.tmf.ui.views.project.handlers.RenameProjectHandler"\r
+            commandId="org.eclipse.linuxtools.tmf.ui.command.project.rename">\r
+      </handler>\r
+      <handler\r
+            class="org.eclipse.linuxtools.tmf.ui.views.project.handlers.DeleteProjectHandler"\r
+            commandId="org.eclipse.linuxtools.tmf.ui.command.project.delete">\r
+      </handler>\r
+      <handler\r
+            class="org.eclipse.linuxtools.tmf.ui.views.project.handlers.ImportTraceHandler"\r
+            commandId="org.eclipse.linuxtools.tmf.ui.command.project.trace.import">\r
+      </handler>\r
+      <handler\r
+            class="org.eclipse.linuxtools.tmf.ui.views.project.handlers.OpenTraceHandler"\r
+            commandId="org.eclipse.linuxtools.tmf.ui.command.project.trace.open">\r
+      </handler>\r
+      <handler\r
+            class="org.eclipse.linuxtools.tmf.ui.views.project.handlers.RenameTraceHandler"\r
+            commandId="org.eclipse.linuxtools.tmf.ui.command.project.trace.rename">\r
+      </handler>\r
+      <handler\r
+            class="org.eclipse.linuxtools.tmf.ui.views.project.handlers.DeleteTraceHandler"\r
+            commandId="org.eclipse.linuxtools.tmf.ui.command.project.trace.delete">\r
+      </handler>\r
+      <handler\r
+            class="org.eclipse.linuxtools.tmf.ui.views.project.handlers.NewExperimentHandler"\r
+            commandId="org.eclipse.linuxtools.tmf.ui.command.project.experiment.new">\r
+      </handler>\r
+      <handler\r
+            class="org.eclipse.linuxtools.tmf.ui.views.project.handlers.SelectTracesHandler"\r
+            commandId="org.eclipse.linuxtools.tmf.ui.command.project.experiment.select">\r
+      </handler>\r
+      <handler\r
+            class="org.eclipse.linuxtools.tmf.ui.views.project.handlers.OpenExperimentHandler"\r
+            commandId="org.eclipse.linuxtools.tmf.ui.command.project.experiment.open">\r
+      </handler>\r
+      <handler\r
+            class="org.eclipse.linuxtools.tmf.ui.views.project.handlers.RenameExperimentHandler"\r
+            commandId="org.eclipse.linuxtools.tmf.ui.command.project.experiment.rename">\r
+      </handler>\r
+      <handler\r
+            class="org.eclipse.linuxtools.tmf.ui.views.project.handlers.DeleteExperimentHandler"\r
+            commandId="org.eclipse.linuxtools.tmf.ui.command.project.experiment.delete">\r
+      </handler>\r
+      <handler\r
+            class="org.eclipse.linuxtools.tmf.ui.views.project.handlers.RefreshHandler"\r
+            commandId="org.eclipse.linuxtools.tmf.ui.command.project.refresh">\r
+      </handler>\r
+      <handler\r
+            class="org.eclipse.linuxtools.tmf.ui.views.project.handlers.SelectParserHandler"\r
+            commandId="org.eclipse.linuxtools.tmf.ui.command.project.trace.selectparser">\r
+      </handler>\r
+   </extension>\r
+   <extension\r
+         point="org.eclipse.core.runtime.preferences">\r
+      <initializer\r
+            class="org.eclipse.linuxtools.tmf.ui.TmfUiPreferenceInitializer">\r
+      </initializer>\r
+   </extension>\r
+   <extension\r
+         point="org.eclipse.core.contenttype.contentTypes">\r
+      <content-type\r
+            file-extensions="log"\r
+            id="org.eclipse.linuxtools.tmf.ui.content-type.trace"\r
+            name="TMF Trace"\r
+            priority="normal">\r
+      </content-type>\r
+   </extension>\r
+\r
+</plugin>\r
diff --git a/org.eclipse.linuxtools.tmf.ui/schema/org.eclipse.linuxtools.tmf.ui.parserprovider.exsd b/org.eclipse.linuxtools.tmf.ui/schema/org.eclipse.linuxtools.tmf.ui.parserprovider.exsd
new file mode 100644 (file)
index 0000000..870ee88
--- /dev/null
@@ -0,0 +1,102 @@
+<?xml version='1.0' encoding='UTF-8'?>\r
+<!-- Schema file written by PDE -->\r
+<schema targetNamespace="org.eclipse.linuxtools.tmf.ui" xmlns="http://www.w3.org/2001/XMLSchema">\r
+<annotation>\r
+      <appinfo>\r
+         <meta.schema plugin="org.eclipse.linuxtools.tmf.ui" id="org.eclipse.linuxtools.tmf.ui.parserProviders" name="Parser Providers"/>\r
+      </appinfo>\r
+      <documentation>\r
+         A parser provider registers a list of trace parsers to the tracing framework.\r
+      </documentation>\r
+   </annotation>\r
+\r
+   <element name="extension">\r
+      <annotation>\r
+         <appinfo>\r
+            <meta.element />\r
+         </appinfo>\r
+      </annotation>\r
+      <complexType>\r
+         <sequence>\r
+            <element ref="parserProvider"/>\r
+         </sequence>\r
+         <attribute name="point" type="string" use="required">\r
+            <annotation>\r
+               <documentation>\r
+                  \r
+               </documentation>\r
+            </annotation>\r
+         </attribute>\r
+         <attribute name="id" type="string">\r
+            <annotation>\r
+               <documentation>\r
+                  \r
+               </documentation>\r
+            </annotation>\r
+         </attribute>\r
+         <attribute name="name" type="string">\r
+            <annotation>\r
+               <documentation>\r
+                  \r
+               </documentation>\r
+               <appinfo>\r
+                  <meta.attribute translatable="true"/>\r
+               </appinfo>\r
+            </annotation>\r
+         </attribute>\r
+      </complexType>\r
+   </element>\r
+\r
+   <element name="parserProvider">\r
+      <complexType>\r
+         <attribute name="class" type="string" use="required">\r
+            <annotation>\r
+               <documentation>\r
+                  \r
+               </documentation>\r
+               <appinfo>\r
+                  <meta.attribute kind="java" basedOn=":org.eclipse.linuxtools.tmf.ui.views.project.IParserProvider"/>\r
+               </appinfo>\r
+            </annotation>\r
+         </attribute>\r
+      </complexType>\r
+   </element>\r
+\r
+   <annotation>\r
+      <appinfo>\r
+         <meta.section type="since"/>\r
+      </appinfo>\r
+      <documentation>\r
+         [Enter the first release in which this extension point appears.]\r
+      </documentation>\r
+   </annotation>\r
+\r
+   <annotation>\r
+      <appinfo>\r
+         <meta.section type="examples"/>\r
+      </appinfo>\r
+      <documentation>\r
+         [Enter extension point usage example here.]\r
+      </documentation>\r
+   </annotation>\r
+\r
+   <annotation>\r
+      <appinfo>\r
+         <meta.section type="apiinfo"/>\r
+      </appinfo>\r
+      <documentation>\r
+         [Enter API information here.]\r
+      </documentation>\r
+   </annotation>\r
+\r
+   <annotation>\r
+      <appinfo>\r
+         <meta.section type="implementation"/>\r
+      </appinfo>\r
+      <documentation>\r
+         [Enter information about supplied implementation of this extension point.]\r
+      </documentation>\r
+   </annotation>\r
+\r
+\r
+</schema>\r
index 8902c935bbcde0333189cbdfdc1f0410e1a5350a..88cfd05c9c27c55c3b521ac0085141ec1056bda8 100644 (file)
@@ -12,6 +12,8 @@
 
 package org.eclipse.linuxtools.tmf.ui;
 
+import org.eclipse.linuxtools.tmf.ui.parsers.ParserProviderManager;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
 
@@ -67,9 +69,10 @@ public class TmfUiPlugin extends AbstractUIPlugin {
        public void start(BundleContext context) throws Exception {
                super.start(context);
                plugin = this;
+               ParserProviderManager.init();
        }
 
-       /*
+    /*
         * (non-Javadoc)
         * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
         */
@@ -79,4 +82,9 @@ public class TmfUiPlugin extends AbstractUIPlugin {
                super.stop(context);
        }
 
+    public Image getImageFromPath(String path)
+    {
+        return AbstractUIPlugin.imageDescriptorFromPlugin(PLUGIN_ID, path).createImage();
+    }
+
 }
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/TmfUiPreferenceInitializer.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/TmfUiPreferenceInitializer.java
new file mode 100644 (file)
index 0000000..f3818e3
--- /dev/null
@@ -0,0 +1,34 @@
+/*******************************************************************************\r
+ * Copyright (c) 2010 Ericsson\r
+ * \r
+ * All rights reserved. This program and the accompanying materials are\r
+ * made available under the terms of the Eclipse Public License v1.0 which\r
+ * accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ * \r
+ * Contributors:\r
+ *   Patrick Tasse - Initial API and implementation\r
+ *******************************************************************************/\r
+\r
+package org.eclipse.linuxtools.tmf.ui;\r
+\r
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;\r
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;\r
+import org.eclipse.core.runtime.preferences.InstanceScope;\r
+\r
+public class TmfUiPreferenceInitializer extends AbstractPreferenceInitializer {\r
+\r
+    public static final String ACTIVE_PROJECT_PREFERENCE = "ACTIVE_PROJECT";\r
+    public static final String ACTIVE_PROJECT_DEFAULT = "";\r
+    \r
+    public TmfUiPreferenceInitializer() {\r
+        super();\r
+    }\r
+\r
+    @Override\r
+    public void initializeDefaultPreferences() {\r
+        IEclipsePreferences node = new InstanceScope().getNode(TmfUiPlugin.PLUGIN_ID);\r
+        node.put(ACTIVE_PROJECT_PREFERENCE, ACTIVE_PROJECT_DEFAULT);\r
+    }\r
+\r
+}\r
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/editors/ITmfTraceEditor.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/editors/ITmfTraceEditor.java
new file mode 100644 (file)
index 0000000..2ddcdb5
--- /dev/null
@@ -0,0 +1,20 @@
+/*******************************************************************************\r
+ * Copyright (c) 2010 Ericsson\r
+ * \r
+ * All rights reserved. This program and the accompanying materials are\r
+ * made available under the terms of the Eclipse Public License v1.0 which\r
+ * accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ * \r
+ * Contributors:\r
+ *   Patrick Tasse - Initial API and implementation\r
+ *******************************************************************************/\r
+\r
+package org.eclipse.linuxtools.tmf.ui.editors;\r
+\r
+import org.eclipse.linuxtools.tmf.trace.ITmfTrace;\r
+\r
+public interface ITmfTraceEditor {\r
+\r
+    public ITmfTrace getTrace();\r
+}\r
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/editors/TmfEditor.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/editors/TmfEditor.java
new file mode 100644 (file)
index 0000000..36e0ed0
--- /dev/null
@@ -0,0 +1,51 @@
+/*******************************************************************************\r
+ * Copyright (c) 2010 Ericsson\r
+ * \r
+ * All rights reserved. This program and the accompanying materials are\r
+ * made available under the terms of the Eclipse Public License v1.0 which\r
+ * accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ * \r
+ * Contributors:\r
+ *   Patrick Tasse - Initial API and implementation\r
+ *******************************************************************************/\r
+\r
+package org.eclipse.linuxtools.tmf.ui.editors;\r
+\r
+import org.eclipse.linuxtools.tmf.component.ITmfComponent;\r
+import org.eclipse.linuxtools.tmf.signal.TmfSignal;\r
+import org.eclipse.linuxtools.tmf.signal.TmfSignalManager;\r
+import org.eclipse.ui.part.EditorPart;\r
+\r
+public abstract class TmfEditor extends EditorPart implements ITmfComponent {\r
+\r
+    private final String fName;\r
+    \r
+    // ------------------------------------------------------------------------\r
+    // Constructor\r
+    // ------------------------------------------------------------------------\r
+\r
+    public TmfEditor() {\r
+        super();\r
+        fName = "TmfEditor";\r
+        TmfSignalManager.register(this);\r
+    }\r
+\r
+    @Override\r
+    public void dispose() {\r
+        TmfSignalManager.deregister(this);\r
+        super.dispose();\r
+    }\r
+\r
+    // ------------------------------------------------------------------------\r
+    // ITmfComponent\r
+    // ------------------------------------------------------------------------\r
+\r
+    public String getName() {\r
+        return fName;\r
+    }\r
+    \r
+    public void broadcast(TmfSignal signal) {\r
+        TmfSignalManager.dispatchSignal(signal);\r
+    }\r
+}\r
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/editors/TmfEditorInput.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/editors/TmfEditorInput.java
new file mode 100644 (file)
index 0000000..0355d6b
--- /dev/null
@@ -0,0 +1,85 @@
+/*******************************************************************************\r
+ * Copyright (c) 2010 Ericsson\r
+ * \r
+ * All rights reserved. This program and the accompanying materials are\r
+ * made available under the terms of the Eclipse Public License v1.0 which\r
+ * accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ * \r
+ * Contributors:\r
+ *   Patrick Tasse - Initial API and implementation\r
+ *******************************************************************************/\r
+\r
+package org.eclipse.linuxtools.tmf.ui.editors;\r
+\r
+import org.eclipse.core.resources.IFile;\r
+import org.eclipse.core.resources.IResource;\r
+import org.eclipse.core.runtime.content.IContentType;\r
+import org.eclipse.jface.resource.ImageDescriptor;\r
+import org.eclipse.linuxtools.tmf.trace.ITmfTrace;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IFileEditorInput;\r
+import org.eclipse.ui.IPersistableElement;\r
+import org.eclipse.ui.PlatformUI;\r
+import org.eclipse.ui.ide.FileStoreEditorInput;\r
+import org.eclipse.ui.ide.IDE;\r
+\r
+public class TmfEditorInput implements IEditorInput {\r
+\r
+    private IResource fResource;\r
+    private ITmfTrace fTrace;\r
+\r
+    public TmfEditorInput(IResource resource, ITmfTrace trace) {\r
+        fResource = resource;\r
+        fTrace = trace;\r
+    }\r
+    \r
+    public Object getAdapter(@SuppressWarnings("rawtypes") Class adapter) {\r
+        return null;\r
+    }\r
+\r
+    public boolean exists() {\r
+        return fResource.exists();\r
+    }\r
+\r
+    public ImageDescriptor getImageDescriptor() {\r
+        if (fResource instanceof IFile) {\r
+            IFile file = (IFile) fResource;\r
+            IContentType contentType = IDE.getContentType(file);\r
+            return PlatformUI.getWorkbench().getEditorRegistry()\r
+                    .getImageDescriptor(file.getName(), contentType);\r
+        }\r
+        return null;\r
+    }\r
+\r
+    public String getName() {\r
+        return fResource.getName();\r
+    }\r
+\r
+    public IPersistableElement getPersistable() {\r
+        return null;\r
+    }\r
+\r
+    public String getToolTipText() {\r
+        return fResource.getFullPath().makeRelative().toString();\r
+    }\r
+\r
+    public IResource getResource() {\r
+        return fResource;\r
+    }\r
+    \r
+    public ITmfTrace getTrace() {\r
+        return fTrace;\r
+    }\r
+\r
+    public boolean equals(Object obj) {\r
+        if (obj instanceof TmfEditorInput) {\r
+            return fResource.equals(((TmfEditorInput) obj).fResource);\r
+        } else if (obj instanceof IFileEditorInput) {\r
+            return ((IFileEditorInput) obj).getFile().equals(fResource);\r
+        } else if (obj instanceof FileStoreEditorInput) {\r
+            return ((FileStoreEditorInput) obj).getURI().equals(fResource.getRawLocationURI());\r
+        }\r
+        return false;\r
+    }\r
+}\r
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/editors/TmfEventsEditor.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/editors/TmfEventsEditor.java
new file mode 100644 (file)
index 0000000..d106b70
--- /dev/null
@@ -0,0 +1,194 @@
+/*******************************************************************************\r
+ * Copyright (c) 2010 Ericsson\r
+ * \r
+ * All rights reserved. This program and the accompanying materials are\r
+ * made available under the terms of the Eclipse Public License v1.0 which\r
+ * accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ * \r
+ * Contributors:\r
+ *   Patrick Tasse - Initial API and implementation\r
+ *******************************************************************************/\r
+\r
+package org.eclipse.linuxtools.tmf.ui.editors;\r
+\r
+import org.eclipse.core.resources.IResource;\r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.linuxtools.tmf.signal.TmfSignalHandler;\r
+import org.eclipse.linuxtools.tmf.signal.TmfTraceClosedSignal;\r
+import org.eclipse.linuxtools.tmf.signal.TmfTraceOpenedSignal;\r
+import org.eclipse.linuxtools.tmf.signal.TmfTraceParserUpdatedSignal;\r
+import org.eclipse.linuxtools.tmf.signal.TmfTraceSelectedSignal;\r
+import org.eclipse.linuxtools.tmf.trace.ITmfTrace;\r
+import org.eclipse.linuxtools.tmf.ui.parsers.ParserProviderManager;\r
+import org.eclipse.linuxtools.tmf.ui.viewers.events.TmfEventsTable;\r
+import org.eclipse.linuxtools.tmf.ui.views.project.ProjectView;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.IEditorSite;\r
+import org.eclipse.ui.IFileEditorInput;\r
+import org.eclipse.ui.IPropertyListener;\r
+import org.eclipse.ui.IReusableEditor;\r
+import org.eclipse.ui.PartInitException;\r
+import org.eclipse.ui.ide.FileStoreEditorInput;\r
+\r
+/**\r
+ * <b><u>TmfEventsEditor</u></b>\r
+ */\r
+public class TmfEventsEditor extends TmfEditor implements ITmfTraceEditor, IReusableEditor, IPropertyListener {\r
+\r
+    public static final String ID = "org.eclipse.linuxtools.tmf.ui.editors.events";\r
+    \r
+    private TmfEventsTable fEventsTable;\r
+    private IResource fResource;\r
+    private ITmfTrace fTrace;\r
+    private Composite fParent;\r
+\r
+    @Override\r
+    public void doSave(IProgressMonitor monitor) {\r
+    }\r
+\r
+    @Override\r
+    public void doSaveAs() {\r
+    }\r
+\r
+    @Override\r
+    public void init(IEditorSite site, IEditorInput input) throws PartInitException {\r
+        if (input instanceof TmfEditorInput) {\r
+            fResource = ((TmfEditorInput) input).getResource();\r
+            fTrace = ((TmfEditorInput) input).getTrace();\r
+        } else if (input instanceof IFileEditorInput) {\r
+            fResource = ((IFileEditorInput) input).getFile();\r
+            fTrace = ParserProviderManager.getTrace(fResource);\r
+            input = new TmfEditorInput(fResource, fTrace);\r
+        } else if (input instanceof FileStoreEditorInput) {\r
+            try {\r
+                FileStoreEditorInput fileStoreEditorInput = (FileStoreEditorInput) input;\r
+                fResource = ProjectView.createLink(fileStoreEditorInput.getURI());\r
+                fTrace = ParserProviderManager.getTrace(fResource);\r
+                input = new TmfEditorInput(fResource, fTrace);\r
+            } catch (CoreException e) {\r
+                throw new PartInitException(e.getMessage());\r
+            }\r
+        } else {\r
+            throw new PartInitException("Invalid IEditorInput: " + input.getClass());\r
+        }\r
+        if (fTrace == null) {\r
+            throw new PartInitException("Invalid IEditorInput: " + fResource.getName());\r
+        }\r
+        super.setSite(site);\r
+        super.setInput(input);\r
+    }\r
+\r
+    @Override\r
+    public boolean isDirty() {\r
+        return false;\r
+    }\r
+\r
+    @Override\r
+    public boolean isSaveAsAllowed() {\r
+        return false;\r
+    }\r
+\r
+    @Override\r
+    public void setInput(IEditorInput input) {\r
+        super.setInput(input);\r
+        firePropertyChange(IEditorPart.PROP_INPUT);\r
+    }\r
+\r
+//    @Override\r
+    public void propertyChanged(Object source, int propId) {\r
+        if (propId == IEditorPart.PROP_INPUT) {\r
+            broadcast(new TmfTraceClosedSignal(this, fTrace));\r
+            fResource = ((TmfEditorInput) getEditorInput()).getResource();\r
+            fTrace = ((TmfEditorInput) getEditorInput()).getTrace();\r
+            fEventsTable.dispose();\r
+            if (fTrace != null) {\r
+                fEventsTable = createEventsTable(fParent, fTrace.getCacheSize());\r
+                fEventsTable.setTrace(fTrace);\r
+                broadcast(new TmfTraceOpenedSignal(this, fTrace));\r
+            } else {\r
+                fEventsTable = new TmfEventsTable(fParent, 0);\r
+            }\r
+            fParent.layout();\r
+        }\r
+    }\r
+\r
+    @Override\r
+    public void createPartControl(Composite parent) {\r
+        fParent = parent;\r
+        setPartName(getEditorInput().getName());\r
+        if (fTrace != null) {\r
+            fEventsTable = createEventsTable(parent, fTrace.getCacheSize());\r
+            fEventsTable.setTrace(fTrace);\r
+            broadcast(new TmfTraceOpenedSignal(this, fTrace));\r
+        } else {\r
+            fEventsTable = new TmfEventsTable(parent, 0);\r
+        }\r
+        addPropertyListener(this);\r
+    }\r
+\r
+    @Override\r
+    public void dispose() {\r
+        removePropertyListener(this);\r
+        if (fTrace != null) {\r
+            broadcast(new TmfTraceClosedSignal(this, fTrace));\r
+        }\r
+        if (fEventsTable != null) {\r
+            fEventsTable.dispose();\r
+        }\r
+        super.dispose();\r
+    }\r
+\r
+    protected TmfEventsTable createEventsTable(Composite parent, int cacheSize) {\r
+        TmfEventsTable eventsTable = ParserProviderManager.getEventsTable(fTrace, parent, cacheSize);\r
+        if (eventsTable == null) {\r
+            eventsTable = new TmfEventsTable(parent, cacheSize);\r
+        }\r
+        return eventsTable;\r
+    }\r
+    \r
+//    @Override\r
+    public ITmfTrace getTrace() {\r
+        return fTrace;\r
+    }\r
+\r
+    @Override\r
+    public void setFocus() {\r
+        fEventsTable.setFocus();\r
+        if (fTrace != null) {\r
+            broadcast(new TmfTraceSelectedSignal(this, fTrace));\r
+        }\r
+    }\r
+\r
+    // ------------------------------------------------------------------------\r
+    // Signal handlers\r
+    // ------------------------------------------------------------------------\r
+    \r
+    @TmfSignalHandler\r
+    public void traceParserUpdated(TmfTraceParserUpdatedSignal signal) {\r
+        if (signal.getTraceResource().equals(fResource)) {\r
+            broadcast(new TmfTraceClosedSignal(this, fTrace));\r
+            fTrace = ParserProviderManager.getTrace(fResource);\r
+            fEventsTable.dispose();\r
+            if (fTrace != null) {\r
+                fEventsTable = createEventsTable(fParent, fTrace.getCacheSize());\r
+                fEventsTable.setTrace(fTrace);\r
+                broadcast(new TmfTraceOpenedSignal(this, fTrace));\r
+            } else {\r
+                fEventsTable = new TmfEventsTable(fParent, 0);\r
+            }\r
+            fParent.layout();\r
+        }\r
+    }\r
+\r
+    @TmfSignalHandler\r
+    public void traceSelected(TmfTraceSelectedSignal signal) {\r
+        if (signal.getSource() != this && signal.getTrace().equals(fTrace)) {\r
+            getSite().getPage().bringToTop(this);\r
+        }\r
+    }\r
+\r
+}\r
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/editors/TmfMultiPageEditorPart.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/editors/TmfMultiPageEditorPart.java
new file mode 100644 (file)
index 0000000..70a2efc
--- /dev/null
@@ -0,0 +1,51 @@
+/*******************************************************************************\r
+ * Copyright (c) 2010 Ericsson\r
+ * \r
+ * All rights reserved. This program and the accompanying materials are\r
+ * made available under the terms of the Eclipse Public License v1.0 which\r
+ * accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ * \r
+ * Contributors:\r
+ *   Patrick Tasse - Initial API and implementation\r
+ *******************************************************************************/\r
+\r
+package org.eclipse.linuxtools.tmf.ui.editors;\r
+\r
+import org.eclipse.linuxtools.tmf.component.ITmfComponent;\r
+import org.eclipse.linuxtools.tmf.signal.TmfSignal;\r
+import org.eclipse.linuxtools.tmf.signal.TmfSignalManager;\r
+import org.eclipse.ui.part.MultiPageEditorPart;\r
+\r
+public abstract class TmfMultiPageEditorPart extends MultiPageEditorPart implements ITmfComponent {\r
+\r
+    private final String fName;\r
+    \r
+    // ------------------------------------------------------------------------\r
+    // Constructor\r
+    // ------------------------------------------------------------------------\r
+\r
+    public TmfMultiPageEditorPart() {\r
+        super();\r
+        fName = "TmfMultiPageEditorPart";\r
+        TmfSignalManager.register(this);\r
+    }\r
+\r
+    @Override\r
+    public void dispose() {\r
+        TmfSignalManager.deregister(this);\r
+        super.dispose();\r
+    }\r
+\r
+    // ------------------------------------------------------------------------\r
+    // ITmfComponent\r
+    // ------------------------------------------------------------------------\r
+\r
+    public String getName() {\r
+        return fName;\r
+    }\r
+    \r
+    public void broadcast(TmfSignal signal) {\r
+        TmfSignalManager.dispatchSignal(signal);\r
+    }\r
+}\r
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/parsers/IParserProvider.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/parsers/IParserProvider.java
new file mode 100644 (file)
index 0000000..0996532
--- /dev/null
@@ -0,0 +1,36 @@
+/*******************************************************************************\r
+ * Copyright (c) 2010 Ericsson\r
+ * \r
+ * All rights reserved. This program and the accompanying materials are\r
+ * made available under the terms of the Eclipse Public License v1.0 which\r
+ * accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ * \r
+ * Contributors:\r
+ *   Patrick Tasse - Initial API and implementation\r
+ *******************************************************************************/\r
+\r
+package org.eclipse.linuxtools.tmf.ui.parsers;\r
+\r
+import java.util.Map;\r
+\r
+import org.eclipse.core.resources.IResource;\r
+import org.eclipse.linuxtools.tmf.trace.ITmfTrace;\r
+import org.eclipse.linuxtools.tmf.ui.viewers.events.TmfEventsTable;\r
+import org.eclipse.swt.widgets.Composite;\r
+\r
+public interface IParserProvider {\r
+\r
+    public String getCategory();\r
+    \r
+    public ITmfTrace getTraceForParser(String parser, IResource resource);\r
+    \r
+    public ITmfTrace getTraceForContentType(String contentTypeId, IResource resource);\r
+    \r
+    public String getEditorIdForParser(String parser);\r
+    \r
+    public Map<String, String> getParserMap();\r
+\r
+    public TmfEventsTable getEventsTable(ITmfTrace trace, Composite parent, int cacheSize);\r
+\r
+}\r
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/parsers/ParserProviderManager.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/parsers/ParserProviderManager.java
new file mode 100644 (file)
index 0000000..c344b33
--- /dev/null
@@ -0,0 +1,138 @@
+/*******************************************************************************\r
+ * Copyright (c) 2010 Ericsson\r
+ * \r
+ * All rights reserved. This program and the accompanying materials are\r
+ * made available under the terms of the Eclipse Public License v1.0 which\r
+ * accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ * \r
+ * Contributors:\r
+ *   Patrick Tasse - Initial API and implementation\r
+ *******************************************************************************/\r
+\r
+package org.eclipse.linuxtools.tmf.ui.parsers;\r
+\r
+import java.util.ArrayList;\r
+import java.util.LinkedHashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.eclipse.core.resources.IResource;\r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.core.runtime.IConfigurationElement;\r
+import org.eclipse.core.runtime.IExtensionRegistry;\r
+import org.eclipse.core.runtime.Platform;\r
+import org.eclipse.core.runtime.QualifiedName;\r
+import org.eclipse.core.runtime.content.IContentType;\r
+import org.eclipse.linuxtools.tmf.trace.ITmfTrace;\r
+import org.eclipse.linuxtools.tmf.ui.TmfUiPlugin;\r
+import org.eclipse.linuxtools.tmf.ui.editors.TmfEventsEditor;\r
+import org.eclipse.linuxtools.tmf.ui.viewers.events.TmfEventsTable;\r
+import org.eclipse.swt.widgets.Composite;\r
+\r
+public class ParserProviderManager {\r
+\r
+    public static final QualifiedName PARSER_PROPERTY = new QualifiedName(TmfUiPlugin.PLUGIN_ID, "PARSER");\r
+\r
+    private static List<IParserProvider> fParserProviders = new ArrayList<IParserProvider>();\r
+\r
+    public static void init() {\r
+        IExtensionRegistry reg = Platform.getExtensionRegistry();\r
+        IConfigurationElement[] extensions = reg.getConfigurationElementsFor("org.eclipse.linuxtools.tmf.ui.parserProviders");\r
+        for (int i = 0; i < extensions.length; i++) {\r
+            IConfigurationElement element = extensions[i];\r
+            try {\r
+                IParserProvider parserProvider = (IParserProvider) element.createExecutableExtension("class");\r
+                addParserProvider(parserProvider);\r
+            } catch (CoreException e) {\r
+                e.printStackTrace();\r
+            }\r
+        }\r
+    }\r
+    \r
+    public static void addParserProvider(IParserProvider parserProvider) {\r
+        fParserProviders.add(parserProvider);\r
+    }\r
+\r
+    public static void removeParserProvider(IParserProvider parserProvider) {\r
+        fParserProviders.remove(parserProvider);\r
+    }\r
+\r
+    public static ITmfTrace getTrace(IResource resource) {\r
+        if (resource == null) {\r
+            return null;\r
+        }\r
+        try {\r
+            String parser = resource.getPersistentProperty(PARSER_PROPERTY);\r
+            if (parser != null) {\r
+                for (IParserProvider parserProvider : fParserProviders) {\r
+                    if (parserProvider != null) {\r
+                        ITmfTrace trace = parserProvider.getTraceForParser(parser, resource);\r
+                        if (trace != null) {\r
+                            return trace;\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+            IContentType contentType = Platform.getContentTypeManager().findContentTypeFor(resource.getName());\r
+            if (contentType != null) {\r
+                for (IParserProvider parserProvider : fParserProviders) {\r
+                    if (parserProvider != null) {\r
+                        ITmfTrace trace = parserProvider.getTraceForContentType(contentType.getId(), resource);\r
+                        if (trace != null) {\r
+                            resource.setPersistentProperty(PARSER_PROPERTY, trace.getClass().getCanonicalName());\r
+                            return trace;\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+        } catch (CoreException e) {\r
+            e.printStackTrace();\r
+        }\r
+        return null;\r
+    }\r
+\r
+    public static String getEditorId(IResource resource) {\r
+        if (resource == null) {\r
+            return null;\r
+        }\r
+        try {\r
+            String parser = resource.getPersistentProperty(PARSER_PROPERTY);\r
+            if (parser != null) {\r
+                for (IParserProvider parserProvider : fParserProviders) {\r
+                    if (parserProvider != null) {\r
+                        String editorId = parserProvider.getEditorIdForParser(parser);\r
+                        if (editorId != null) {\r
+                            return editorId;\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+            return TmfEventsEditor.ID;\r
+        } catch (CoreException e) {\r
+            e.printStackTrace();\r
+        }\r
+        return null;\r
+    }\r
+    \r
+    public static Map<String, Map<String, String>> getParserMap() {\r
+        Map<String, Map<String, String>> parserMap = new LinkedHashMap<String, Map<String, String>>();\r
+        for (IParserProvider parserProvider : fParserProviders) {\r
+            parserMap.put(parserProvider.getCategory(), parserProvider.getParserMap());\r
+        }\r
+        return parserMap;\r
+    }\r
+\r
+    public static TmfEventsTable getEventsTable(ITmfTrace trace, Composite parent, int cacheSize) {\r
+        for (IParserProvider parserProvider : fParserProviders) {\r
+            if (parserProvider != null) {\r
+                TmfEventsTable eventsTable = parserProvider.getEventsTable(trace, parent, cacheSize);\r
+                if (eventsTable != null) {\r
+                    return eventsTable;\r
+                }\r
+            }\r
+        }\r
+        return null;\r
+    }\r
+\r
+}\r
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/viewers/events/TmfEventsTable.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/viewers/events/TmfEventsTable.java
new file mode 100644 (file)
index 0000000..0528e25
--- /dev/null
@@ -0,0 +1,346 @@
+/*******************************************************************************\r
+ * Copyright (c) 2010 Ericsson\r
+ * \r
+ * All rights reserved. This program and the accompanying materials are\r
+ * made available under the terms of the Eclipse Public License v1.0 which\r
+ * accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ * \r
+ * Contributors:\r
+ *   Francois Chouinard - Initial API and implementation\r
+ *   Patrick Tasse - Factored out from events view\r
+ *******************************************************************************/\r
+\r
+package org.eclipse.linuxtools.tmf.ui.viewers.events;\r
+\r
+import org.eclipse.linuxtools.tmf.component.ITmfDataProvider;\r
+import org.eclipse.linuxtools.tmf.component.TmfComponent;\r
+import org.eclipse.linuxtools.tmf.event.TmfEvent;\r
+import org.eclipse.linuxtools.tmf.event.TmfTimestamp;\r
+import org.eclipse.linuxtools.tmf.request.TmfDataRequest;\r
+import org.eclipse.linuxtools.tmf.signal.TmfExperimentUpdatedSignal;\r
+import org.eclipse.linuxtools.tmf.signal.TmfRangeSynchSignal;\r
+import org.eclipse.linuxtools.tmf.signal.TmfSignalHandler;\r
+import org.eclipse.linuxtools.tmf.signal.TmfTimeSynchSignal;\r
+import org.eclipse.linuxtools.tmf.signal.TmfTraceUpdatedSignal;\r
+import org.eclipse.linuxtools.tmf.trace.ITmfTrace;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.SelectionAdapter;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Event;\r
+import org.eclipse.swt.widgets.Listener;\r
+import org.eclipse.swt.widgets.Table;\r
+import org.eclipse.swt.widgets.TableColumn;\r
+import org.eclipse.swt.widgets.TableItem;\r
+\r
+/**\r
+ * <b><u>TmfEventsTable</u></b>\r
+ */\r
+public class TmfEventsTable extends TmfComponent {\r
+\r
+//    private Shell fShell;\r
+    \r
+    // ------------------------------------------------------------------------\r
+    // Table data\r
+    // ------------------------------------------------------------------------\r
+\r
+    protected Table fTable;\r
+    protected ITmfTrace fTrace;\r
+    protected boolean fPackDone = false;\r
+\r
+    // Table column names\r
+    private final String TIMESTAMP_COLUMN = "Timestamp";\r
+    private final String SOURCE_COLUMN    = "Source";\r
+    private final String TYPE_COLUMN      = "Type";\r
+    private final String REFERENCE_COLUMN = "File";\r
+    private final String CONTENT_COLUMN   = "Content";\r
+    private final String[] columnProperties =  new String[] {\r
+        TIMESTAMP_COLUMN,\r
+        SOURCE_COLUMN,\r
+        TYPE_COLUMN,\r
+        REFERENCE_COLUMN,\r
+        CONTENT_COLUMN\r
+    };\r
+\r
+    // Column data\r
+    private class ColumnData {\r
+        public final String header;\r
+        public final int    width;\r
+        public final int    alignment;\r
+\r
+        public ColumnData(String h, int w, int a) {\r
+            header = h;\r
+            width = w;\r
+            alignment = a;\r
+        }\r
+    };\r
+\r
+    private ColumnData[] columnData = new ColumnData[] {\r
+        new ColumnData(columnProperties[0], 100, SWT.LEFT),\r
+        new ColumnData(columnProperties[1], 100, SWT.LEFT),\r
+        new ColumnData(columnProperties[2], 100, SWT.LEFT),\r
+        new ColumnData(columnProperties[3], 100, SWT.LEFT),\r
+        new ColumnData(columnProperties[4], 100, SWT.LEFT)\r
+    };\r
+\r
+    // ------------------------------------------------------------------------\r
+    // Event cache\r
+    // ------------------------------------------------------------------------\r
+\r
+    private final int fCacheSize;\r
+    private TmfEvent[] cache = new TmfEvent[1];\r
+    private int cacheStartIndex = 0;\r
+    private int cacheEndIndex = 0;\r
+//    private IResourceChangeListener fResourceChangeListener;\r
+\r
+    // ------------------------------------------------------------------------\r
+    // Constructor\r
+    // ------------------------------------------------------------------------\r
+\r
+    public TmfEventsTable(Composite parent, int cacheSize) {\r
+        super("TmfEventsTable");\r
+        \r
+        fCacheSize = cacheSize;\r
+        \r
+//        fShell = parent.getShell();\r
+        \r
+        // Create a virtual table\r
+        // TODO: change SINGLE to MULTI line selection and adjust the selection listener\r
+        final int style = SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.VIRTUAL;\r
+        fTable = new Table(parent, style);\r
+\r
+        // Set the table layout\r
+        GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);\r
+        fTable.setLayoutData(layoutData);\r
+\r
+        // Some cosmetic enhancements\r
+        fTable.setHeaderVisible(true);\r
+        fTable.setLinesVisible(true);\r
+\r
+        // Set the columns\r
+        createColumnHeaders(fTable);\r
+\r
+        // Handle the table item requests \r
+        fTable.addSelectionListener(new SelectionAdapter() {\r
+\r
+            @Override\r
+            public void widgetSelected(SelectionEvent e) {\r
+                TmfTimestamp ts = (TmfTimestamp) fTable.getSelection()[0].getData();\r
+                broadcast(new TmfTimeSynchSignal(fTable, ts));\r
+            }\r
+        });\r
+\r
+        // Handle the table item requests \r
+        fTable.addListener(SWT.SetData, new Listener() {\r
+\r
+            @SuppressWarnings("unchecked")\r
+                       public void handleEvent(Event event) {\r
+\r
+                final TableItem item = (TableItem) event.item;\r
+                final int index = fTable.indexOf(item);\r
+\r
+                // Note: this works because handleEvent() is called once for each row, in sequence  \r
+                if ((index >= cacheStartIndex ) && (index < cacheEndIndex)) {\r
+                    int i = index - cacheStartIndex;\r
+                    item.setText(extractItemFields(cache[i]));\r
+                    item.setData(new TmfTimestamp(cache[i].getTimestamp()));\r
+                    return;\r
+                }\r
+\r
+                TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(TmfEvent.class, index, fCacheSize) {\r
+                    @Override\r
+                    public void handleData() {\r
+                        TmfEvent[] tmpEvent = getData();\r
+                        if ((tmpEvent != null) && (tmpEvent.length > 0)) {\r
+                            cache = tmpEvent;\r
+                            cacheStartIndex = index;\r
+                            cacheEndIndex = index + tmpEvent.length;\r
+                        }\r
+                    }\r
+                };\r
+                ((ITmfDataProvider<TmfEvent>) fTrace).sendRequest(request);\r
+                try {\r
+                    request.waitForCompletion();\r
+                } catch (InterruptedException e) {\r
+                    e.printStackTrace();\r
+                }\r
+                \r
+                if (cache[0] != null && cacheStartIndex == index) {\r
+                    item.setText(extractItemFields(cache[0]));\r
+                    item.setData(new TmfTimestamp(cache[0].getTimestamp()));\r
+                    packColumns(fTable);\r
+                }\r
+                \r
+            }\r
+        });\r
+\r
+        fTable.setItemCount(0);\r
+    }\r
+\r
+    public void dispose() {\r
+        fTable.dispose();\r
+        if (fTrace != null) {\r
+            fTrace.dispose();\r
+        }\r
+        super.dispose();\r
+    }\r
+\r
+    public Table getTable() {\r
+        return fTable;\r
+    }\r
+    \r
+    /**\r
+     * @param table\r
+     * \r
+     * FIXME: Add support for column selection\r
+     */\r
+    public void createColumnHeaders(Table table) {\r
+        for (int i = 0; i < columnData.length; i++) {\r
+            TableColumn column = new TableColumn(table, columnData[i].alignment, i);\r
+            column.setText(columnData[i].header);\r
+            column.setWidth(columnData[i].width);\r
+        }\r
+    }\r
+\r
+    protected void packColumns(Table table) {\r
+        if (fPackDone) return;\r
+        for (TableColumn column : fTable.getColumns()) {\r
+            int headerWidth = column.getWidth();\r
+            column.pack();\r
+            if (column.getWidth() < headerWidth) {\r
+                column.setWidth(headerWidth);\r
+            }\r
+        }\r
+        fPackDone = true;\r
+    }\r
+    \r
+    /**\r
+     * @param event\r
+     * @return\r
+     * \r
+     * FIXME: Add support for column selection\r
+     */\r
+    public String[] extractItemFields(TmfEvent event) {\r
+        String[] fields = new String[0];\r
+        if (event != null) {\r
+            fields = new String[] {\r
+                new Long(event.getTimestamp().getValue()).toString(),       \r
+                event.getSource().getSourceId().toString(),\r
+                event.getType().getTypeId().toString(),\r
+                event.getReference().getReference().toString(),\r
+                event.getContent().toString()\r
+            };\r
+        }\r
+        return fields;\r
+    }\r
+\r
+    public void setFocus() {\r
+        fTable.setFocus();\r
+    }\r
+\r
+    public void setTrace(ITmfTrace trace) {\r
+        fTrace = trace;\r
+        \r
+        // Perform the updates on the UI thread\r
+        fTable.getDisplay().syncExec(new Runnable() {\r
+            public void run() {\r
+                //fTable.setSelection(0); PATA\r
+                fTable.removeAll();\r
+                cacheStartIndex = cacheEndIndex = 0; // Clear the cache\r
+                \r
+                if (!fTable.isDisposed() && fTrace != null) {\r
+                    //int nbEvents = (int) fTrace.getNbEvents();\r
+                    //fTable.setItemCount((nbEvents > 100) ? nbEvents : 100);\r
+                    fTable.setItemCount((int) fTrace.getNbEvents());\r
+                }\r
+            }\r
+        });\r
+//        ProgressMonitorDialog dialog = new ProgressMonitorDialog(fShell);\r
+//        try {\r
+//            dialog.run(false, false, new IRunnableWithProgress() {\r
+//                public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {\r
+//                    monitor.beginTask("Cleaning up, please wait", 0);\r
+//\r
+//\r
+//                    monitor.done();\r
+//                }\r
+//              });\r
+//        } catch (InvocationTargetException e) {\r
+//        } catch (InterruptedException e) {\r
+//        }\r
+    }\r
+\r
+    // ------------------------------------------------------------------------\r
+    // Signal handlers\r
+    // ------------------------------------------------------------------------\r
+    \r
+    @TmfSignalHandler\r
+    public void experimentUpdated(TmfExperimentUpdatedSignal signal) {\r
+        if (signal.getExperiment() != fTrace) return;\r
+        // Perform the refresh on the UI thread\r
+        fTable.getDisplay().asyncExec(new Runnable() {\r
+            public void run() {\r
+                if (!fTable.isDisposed() && fTrace != null) {\r
+                    fTable.setItemCount((int) fTrace.getNbEvents());\r
+                }\r
+            }\r
+        });\r
+    }\r
+    \r
+    @TmfSignalHandler\r
+    public void traceUpdated(TmfTraceUpdatedSignal signal) {\r
+        if (signal.getTrace() != fTrace) return;\r
+        // Perform the refresh on the UI thread\r
+        fTable.getDisplay().asyncExec(new Runnable() {\r
+            public void run() {\r
+                if (!fTable.isDisposed() && fTrace != null) {\r
+                    //int nbEvents = (int) fTrace.getNbEvents();\r
+                    //fTable.setItemCount((nbEvents > 100) ? nbEvents : 100);\r
+                    fTable.setItemCount((int) fTrace.getNbEvents());\r
+                }\r
+            }\r
+        });\r
+    }\r
+\r
+    private boolean fRefreshPending = false;\r
+    @TmfSignalHandler\r
+    public synchronized void rangeSynched(TmfRangeSynchSignal signal) {\r
+        if (!fRefreshPending) {\r
+            // Perform the refresh on the UI thread\r
+            fRefreshPending = true;\r
+            fTable.getDisplay().asyncExec(new Runnable() {\r
+                public void run() {\r
+                    fRefreshPending = false;\r
+                    if (!fTable.isDisposed() && fTrace != null) {\r
+                        fTable.setItemCount((int) fTrace.getNbEvents());\r
+                    }\r
+                }\r
+            });\r
+        }\r
+    }\r
+    \r
+    @TmfSignalHandler\r
+    public void currentTimeUpdated(TmfTimeSynchSignal signal) {\r
+        if (signal.getSource() != fTable && fTrace != null) {\r
+            final int index = (int) fTrace.getRank(signal.getCurrentTime());\r
+            // Perform the updates on the UI thread\r
+            fTable.getDisplay().asyncExec(new Runnable() {\r
+                public void run() {\r
+                    fTable.setSelection(index);\r
+                    // The timestamp might not correspond to an actual event\r
+                    // and the selection will point to the next experiment event.\r
+                    // But we would like to display both the event before and\r
+                    // after the selected timestamp.\r
+                    // This works fine by default except when the selected event\r
+                    // is the top displayed event. The following ensures that we\r
+                    // always see both events.\r
+                    if ((index > 0) && (index == fTable.getTopIndex())) {\r
+                        fTable.setTopIndex(index - 1);\r
+                    }\r
+                }\r
+            });\r
+        }\r
+    }\r
+}\r
index 33586f73562d92ef47bb7a4bd5059d349db1c88c..ead756746114b1cdbcf1791adce01af50c4df025 100644 (file)
@@ -8,35 +8,18 @@
  * 
  * Contributors:
  *   Francois Chouinard - Initial API and implementation
+ *   Patrick Tasse - Factored out events table
  *******************************************************************************/
 
 package org.eclipse.linuxtools.tmf.ui.views;
 
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.linuxtools.tmf.event.TmfEvent;
-import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
 import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
-import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
 import org.eclipse.linuxtools.tmf.signal.TmfExperimentSelectedSignal;
-import org.eclipse.linuxtools.tmf.signal.TmfExperimentUpdatedSignal;
-import org.eclipse.linuxtools.tmf.signal.TmfRangeSynchSignal;
 import org.eclipse.linuxtools.tmf.signal.TmfSignalHandler;
-import org.eclipse.linuxtools.tmf.signal.TmfTimeSynchSignal;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
+import org.eclipse.linuxtools.tmf.ui.viewers.events.TmfEventsTable;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.swt.widgets.TableItem;
 
 /**
  * <b><u>TmfEventsView</u></b>
@@ -51,60 +34,10 @@ public class TmfEventsView extends TmfView {
     public static final String ID = "org.eclipse.linuxtools.tmf.ui.views.events";
 
     private TmfExperiment<TmfEvent> fExperiment;
-    private String fTitlePrefix;
-
-       private Shell fShell;
-
-       // ------------------------------------------------------------------------
-    // Table data
-       // ------------------------------------------------------------------------
-
-    private Table fTable;
-
-    // Table column names
-    private final String TIMESTAMP_COLUMN = "Timestamp";
-    private final String SOURCE_COLUMN    = "Source";
-    private final String TYPE_COLUMN      = "Type";
-    private final String REFERENCE_COLUMN = "File";
-    private final String CONTENT_COLUMN   = "Content";
-    private final String[] columnProperties =  new String[] {
-       TIMESTAMP_COLUMN,
-        SOURCE_COLUMN,
-        TYPE_COLUMN,
-        REFERENCE_COLUMN,
-        CONTENT_COLUMN
-    };
-
-    // Column data
-    private class ColumnData {
-        public final String header;
-        public final int    width;
-        public final int    alignment;
-
-        public ColumnData(String h, int w, int a) {
-            header = h;
-            width = w;
-            alignment = a;
-        }
-    };
-
-    private ColumnData[] columnData = new ColumnData[] {
-        new ColumnData(columnProperties[0], 100, SWT.LEFT),
-        new ColumnData(columnProperties[1], 100, SWT.LEFT),
-        new ColumnData(columnProperties[2], 100, SWT.LEFT),
-        new ColumnData(columnProperties[3], 100, SWT.LEFT),
-        new ColumnData(columnProperties[4], 100, SWT.LEFT)
-    };
-
-       // ------------------------------------------------------------------------
-    // Event cache
-       // ------------------------------------------------------------------------
-
-       private static final int DEFAULT_CACHE_SIZE = 1000;
+    private TmfEventsTable fEventsTable;
+    private static final int DEFAULT_CACHE_SIZE = 1000;
     private final int fCacheSize;
-    private TmfEvent[] cache = new TmfEvent[1];
-    private int cacheStartIndex = 0;
-    private int cacheEndIndex = 0;
+    private String fTitlePrefix;
     
        // ------------------------------------------------------------------------
     // Constructor
@@ -126,124 +59,35 @@ public class TmfEventsView extends TmfView {
     @SuppressWarnings("unchecked")
        @Override
        public void createPartControl(Composite parent) {
-       
-       fShell = parent.getShell();
-    
-       // Create a virtual table
-       // TODO: change SINGLE to MULTI line selection and adjust the selection listener
-        final int style = SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.VIRTUAL;
-        fTable = new Table(parent, style);
-
-        // Set the table layout
-        GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
-        fTable.setLayoutData(layoutData);
-
-        // Some cosmetic enhancements
-        fTable.setHeaderVisible(true);
-        fTable.setLinesVisible(true);
-
-        // Set the columns
-        createColumnHeaders(fTable);
-
-        // Handle the table item requests 
-        fTable.addSelectionListener(new SelectionAdapter() {
-
-               @Override
-                       public void widgetSelected(SelectionEvent e) {
-                               TmfTimestamp ts = (TmfTimestamp) fTable.getSelection()[0].getData();
-                               broadcast(new TmfTimeSynchSignal(fTable, ts));
-                       }
-        });
-
-        // Handle the table item requests 
-        fTable.addListener(SWT.SetData, new Listener() {
-
-                       public void handleEvent(Event event) {
-
-                       final TableItem item = (TableItem) event.item;
-                               final int index = fTable.indexOf(item);
-
-                               // Note: this works because handleEvent() is called once for each row, in sequence  
-                               if ((index >= cacheStartIndex ) && (index < cacheEndIndex)) {
-                                       int i = index - cacheStartIndex;
-                                       item.setText(extractItemFields(cache[i]));
-                                       item.setData(new TmfTimestamp(cache[i].getTimestamp()));
-                                       return;
-                               }
-
-                               TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(TmfEvent.class, index, fCacheSize) {
-                                       @Override
-                                       public void handleData() {
-                                               TmfEvent[] tmpEvent = getData();
-                                               if ((tmpEvent != null) && (tmpEvent.length > 0)) {
-                                                       cache = tmpEvent;
-                                                       cacheStartIndex = index;
-                                                       cacheEndIndex = index + tmpEvent.length;
-//                                                     System.out.println("TmfTableView: entry#" + index);
-                                               }
-                                       }
-                               };
-                               fExperiment.sendRequest(request);
-                       try {
-                                       request.waitForCompletion();
-                                       if (cache[0] != null && cacheStartIndex == index) {
-                                               item.setText(extractItemFields(cache[0]));
-                                               item.setData(new TmfTimestamp(cache[0].getTimestamp()));
-                                       }
-                               } catch (InterruptedException e) {
-                                       e.printStackTrace();
-                               }
-                       }
-        });
-
-        fTable.setItemCount(0);
-       fTitlePrefix = getTitle();
-
-       // If an experiment is already selected, update the table
-       fExperiment = (TmfExperiment<TmfEvent>) TmfExperiment.getCurrentExperiment();
-       if (fExperiment != null) {
-               experimentSelected(new TmfExperimentSelectedSignal<TmfEvent>(fTable, fExperiment));
-       }
+        fEventsTable = createEventsTable(parent, fCacheSize);
+
+        fTitlePrefix = getTitle();
+        
+        // If an experiment is already selected, update the table
+        fExperiment = (TmfExperiment<TmfEvent>) TmfExperiment.getCurrentExperiment();
+        if (fExperiment != null) {
+            experimentSelected(new TmfExperimentSelectedSignal<TmfEvent>(fEventsTable, fExperiment));
+        }
     }
 
-       /**
-        * @param table
-        * 
-        * FIXME: Add support for column selection
-        */
-       protected void createColumnHeaders(Table table) {
-        for (int i = 0; i < columnData.length; i++) {
-            TableColumn column = new TableColumn(table, columnData[i].alignment, i);
-            column.setText(columnData[i].header);
-            column.setWidth(columnData[i].width);
+    @Override
+    public void dispose() {
+        if (fEventsTable != null) {
+            fEventsTable.dispose();
         }
-       }
+        super.dispose();
+    }
 
-       /**
-        * @param event
-        * @return
-        * 
-        * FIXME: Add support for column selection
-        */
-       protected String[] extractItemFields(TmfEvent event) {
-        String[] fields = new String[0];
-        if (event != null) {
-            fields = new String[] {
-                               new Long(event.getTimestamp().getValue()).toString(),           
-                               event.getSource().getSourceId().toString(),
-                               event.getType().getTypeId().toString(),
-                               event.getReference().getReference().toString(),
-                               event.getContent().toString()
-            };
-               }
-               return fields;
-       }
+    protected TmfEventsTable createEventsTable(Composite parent, int cacheSize) {
+        return new TmfEventsTable(parent, cacheSize);
+    }
 
     /* (non-Javadoc)
      * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
      */
     @Override
        public void setFocus() {
+        fEventsTable.setFocus();
     }
 
     /* (non-Javadoc)
@@ -254,97 +98,28 @@ public class TmfEventsView extends TmfView {
        return "[TmfEventsView]";
     }
 
-       // ------------------------------------------------------------------------
+    protected void createColumnHeaders(Table table) {
+       fEventsTable.createColumnHeaders(table);
+    }
+
+    protected String[] extractItemFields(TmfEvent event) {
+       return fEventsTable.extractItemFields(event);
+    }
+
+    // ------------------------------------------------------------------------
     // Signal handlers
        // ------------------------------------------------------------------------
     
        @SuppressWarnings("unchecked")
-       @TmfSignalHandler
+    @TmfSignalHandler
     public void experimentSelected(TmfExperimentSelectedSignal<TmfEvent> signal) {
-               // Update the trace reference
-       fExperiment = (TmfExperiment<TmfEvent>) signal.getExperiment();
-       setPartName(fTitlePrefix + " - " + fExperiment.getName());
-
-        ProgressMonitorDialog dialog = new ProgressMonitorDialog(fShell);
-       try {
-                       dialog.run(false, false, new IRunnableWithProgress() {
-                           public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-                               monitor.beginTask("Cleaning up, please wait", 0);
-
-                               // Perform the updates on the UI thread
-                               fTable.getDisplay().syncExec(new Runnable() {
-                                       public void run() {
-                                                       fTable.setSelection(0);
-                                                       fTable.removeAll();
-                                                       cacheStartIndex = cacheEndIndex = 0; // Clear the cache
-
-                                                       if (!fTable.isDisposed() && fExperiment != null) {
-                                                               int nbEvents = (int) fExperiment.getNbEvents();
-                                                               fTable.setItemCount((nbEvents > 100) ? nbEvents : 100);
-                                                       }
-                                       }
-                               });
-
-                               monitor.done();
-                           }
-                         });
-               } catch (InvocationTargetException e) {
-               } catch (InterruptedException e) {
-               }
-    }
+        // Update the trace reference
+        fExperiment = (TmfExperiment<TmfEvent>) signal.getExperiment();
+        setPartName(fTitlePrefix + " - " + fExperiment.getName());
 
-       @TmfSignalHandler
-    public void experimentUpdated(TmfExperimentUpdatedSignal signal) {
-        // Perform the refresh on the UI thread
-       fTable.getDisplay().asyncExec(new Runnable() {
-                       public void run() {
-                               if (!fTable.isDisposed() && fExperiment != null) {
-                                       int nbEvents = (int) fExperiment.getNbEvents();
-                               fTable.setItemCount((nbEvents > 100) ? nbEvents : 100);        
-                               }
-                       }
-        });
-    }
-
-       private boolean fRefreshPending = false;
-       @TmfSignalHandler
-    public synchronized void rangeSynched(TmfRangeSynchSignal signal) {
-               if (!fRefreshPending) {
-                       // Perform the refresh on the UI thread
-                       fRefreshPending = true;
-                       fTable.getDisplay().asyncExec(new Runnable() {
-                               public void run() {
-                                       fRefreshPending = false;
-                                       if (!fTable.isDisposed() && fExperiment != null) {
-                                               fTable.setItemCount((int) fExperiment.getNbEvents());
-//                                             if (Tracer.INTERNALS) Tracer.trace("TmfEventsView: itemCount=" + fTable.getItemCount());
-                                       }
-                               }
-                       });
-               }
-    }
-
-    @TmfSignalHandler
-    public void currentTimeUpdated(TmfTimeSynchSignal signal) {
-       if (signal.getSource() != fTable && fExperiment != null) {
-               final int index = (int) fExperiment.getRank(signal.getCurrentTime());
-            // Perform the updates on the UI thread
-            fTable.getDisplay().asyncExec(new Runnable() {
-               public void run() {
-                       fTable.setSelection(index);
-                       // The timestamp might not correspond to an actual event
-                       // and the selection will point to the next experiment event.
-                       // But we would like to display both the event before and
-                       // after the selected timestamp.
-                       // This works fine by default except when the selected event
-                       // is the top displayed event. The following ensures that we
-                       // always see both events.
-                       if ((index > 0) && (index == fTable.getTopIndex())) {
-                               fTable.setTopIndex(index - 1);
-                       }
-               }
-            });
-       }
+        if (fEventsTable != null) {
+            fEventsTable.setTrace(fExperiment);
+        }
     }
 
 }
\ No newline at end of file
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/ProjectView.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/ProjectView.java
new file mode 100644 (file)
index 0000000..e8c7aec
--- /dev/null
@@ -0,0 +1,399 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project;
+
+import java.io.File;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.NotEnabledException;
+import org.eclipse.core.commands.NotHandledException;
+import org.eclipse.core.commands.common.NotDefinedException;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.ViewerDropAdapter;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.linuxtools.tmf.event.TmfEvent;
+import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
+import org.eclipse.linuxtools.tmf.signal.TmfExperimentSelectedSignal;
+import org.eclipse.linuxtools.tmf.trace.ITmfTrace;
+import org.eclipse.linuxtools.tmf.ui.TmfUiPlugin;
+import org.eclipse.linuxtools.tmf.ui.TmfUiPreferenceInitializer;
+import org.eclipse.linuxtools.tmf.ui.editors.TmfEditorInput;
+import org.eclipse.linuxtools.tmf.ui.parsers.ParserProviderManager;
+import org.eclipse.linuxtools.tmf.ui.views.TmfView;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.ITmfProjectTreeNode;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfExperimentNode;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfProjectContentProvider;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfProjectLabelProvider;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfProjectNode;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfProjectRoot;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfProjectTreeNode;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfTraceNode;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.FileTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IReusableEditor;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.ui.part.ResourceTransfer;
+import org.osgi.service.prefs.BackingStoreException;
+
+/**
+ * <b><u>ProjectView</u></b>
+ * <p>
+ * The ProjectView keeps track of the Tmf projects in the workspace.
+ */
+public class ProjectView extends TmfView {
+
+    public static final String ID = "org.eclipse.linuxtools.tmf.ui.views.project";
+
+    // ------------------------------------------------------------------------
+    // Main data structures
+    // ------------------------------------------------------------------------
+
+    private TreeViewer fViewer;
+    private TmfProjectRoot fProjectRoot;
+
+    private IWorkspace fWorkspace;
+    private IResourceChangeListener fResourceChangeListener;
+    private IPreferenceChangeListener fPreferenceChangeListener;
+
+    // ------------------------------------------------------------------------
+    // Static methods
+    // ------------------------------------------------------------------------
+
+       static public IFolder getActiveProjectTracesFolder() {
+               IEclipsePreferences node = new InstanceScope()
+                               .getNode(TmfUiPlugin.PLUGIN_ID);
+               String activeProjectName = node.get(
+                               TmfUiPreferenceInitializer.ACTIVE_PROJECT_PREFERENCE,
+                               TmfUiPreferenceInitializer.ACTIVE_PROJECT_DEFAULT);
+               IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+               IProject[] projects = root.getProjects();
+               for (IProject project : projects) {
+                       if (project.isAccessible()
+                                       && project.getName().equals(activeProjectName)) {
+                               return project.getFolder(TmfProjectNode.TRACE_FOLDER_NAME);
+                       }
+               }
+               return null;
+       }
+
+       static public IFile createLink(URI uri) throws CoreException {
+               IFolder folder = getActiveProjectTracesFolder();
+               if (folder == null || !folder.exists()) {
+                       throw new CoreException(new Status(Status.ERROR, TmfUiPlugin.PLUGIN_ID,
+                                       "No active project set"));
+               }
+               String path = uri.getPath();
+               // TODO: support duplicate file names
+               IFile file = folder.getFile(path.substring(path
+                               .lastIndexOf(Path.SEPARATOR)));
+               if (!file.exists()) {
+                       file.createLink(uri, IResource.NONE, null);
+               }
+               return file;
+       }
+
+    // ------------------------------------------------------------------------
+    // View refresher
+    // ------------------------------------------------------------------------
+
+    // Perform updates on the UI thread
+    private Runnable fViewRefresher = new Runnable() {
+       public void run() {
+               if (fViewer != null) {
+                       Object[] elements = fViewer.getExpandedElements();
+                       fViewer.refresh();
+                       fViewer.setExpandedElements(elements);
+               }
+       }
+    };
+
+    public TmfProjectRoot getRoot() {
+       return fProjectRoot;
+    }
+   
+    // ------------------------------------------------------------------------
+    // Constructor
+    // ------------------------------------------------------------------------
+
+       public ProjectView() {
+               super("Projects");
+               
+               fWorkspace = ResourcesPlugin.getWorkspace();
+               try {
+            fWorkspace.getRoot().refreshLocal(IResource.DEPTH_INFINITE, null);
+        } catch (CoreException e) {
+            e.printStackTrace();
+        }
+
+               fProjectRoot = new TmfProjectRoot(this);
+       }
+
+       public void refresh() {
+               Tree tree = fViewer.getTree();
+               if (tree != null && !tree.isDisposed())
+                       tree.getDisplay().asyncExec(fViewRefresher);
+       }
+
+       public void setSelection(ITmfProjectTreeNode node) {
+               fViewer.setSelection(new StructuredSelection(node), true);
+       }
+
+    @Override
+    public void init(IViewSite site) throws PartInitException {
+        super.init(site);
+        fResourceChangeListener = new IResourceChangeListener() {
+            public void resourceChanged(IResourceChangeEvent event) {
+                if (event.getType() == IResourceChangeEvent.POST_CHANGE) {
+                    fProjectRoot.refreshChildren();
+                    refresh();
+                }
+            }            
+        };
+        fWorkspace.addResourceChangeListener(fResourceChangeListener);
+        fPreferenceChangeListener = new IPreferenceChangeListener() {
+            public void preferenceChange(PreferenceChangeEvent event) {
+                refresh();
+            }
+        };
+        IEclipsePreferences node = new InstanceScope().getNode(TmfUiPlugin.PLUGIN_ID);
+        node.addPreferenceChangeListener(fPreferenceChangeListener);
+    }
+
+    @Override
+       public void dispose() {
+       fWorkspace.removeResourceChangeListener(fResourceChangeListener);
+    }
+
+       @Override
+       public void createPartControl(Composite parent) {
+
+               fViewer = new TreeViewer(parent, SWT.SINGLE);
+        fViewer.setContentProvider(new TmfProjectContentProvider());
+        fViewer.setSorter(new ViewerSorter());
+        fViewer.setLabelProvider(new TmfProjectLabelProvider());
+        fViewer.setInput(fProjectRoot);
+
+        int ops = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+        Transfer[] transfers = new Transfer[] { ResourceTransfer.getInstance(), FileTransfer.getInstance() };
+        fViewer.addDropSupport(ops, transfers, new ViewerDropAdapter(fViewer) {
+            @Override
+            public boolean validateDrop(Object target, int operation, TransferData transferType) {
+                if (! (target instanceof ITmfProjectTreeNode)) {
+                    return false;
+                }
+                overrideOperation(DND.DROP_LINK);
+                return true;
+            }
+            @Override
+            public boolean performDrop(Object data) {
+                Object target = getCurrentTarget();
+                ITmfProjectTreeNode node = (TmfProjectTreeNode) target;
+                while (node != null && !(node instanceof TmfProjectNode)) {
+                    node = node.getParent();
+                }
+                IFolder targetFolder = ((TmfProjectNode) node).getTracesFolder().getFolder();
+                if (data instanceof String[]) {
+                    // FileTransfer
+                    System.out.println("Drop:" + ((String[])data)[0]);
+                    System.out.println("Folder:" + targetFolder);
+                    for (String path : (String[]) data) {
+                        File sourceFile = new File(path);
+                        if (sourceFile.isFile()) {
+                            IFile file = targetFolder.getFile(path.substring(path.lastIndexOf(File.separator)));
+                            try {
+                                file.createLink(sourceFile.toURI(), IResource.NONE, null);
+                                ITmfTrace trace = ParserProviderManager.getTrace(file);
+                                if (trace != null) {
+                                    trace.dispose();
+                                }
+                            } catch (CoreException e) {
+                                e.printStackTrace();
+                            }
+                        }
+                    }
+                } else if (data instanceof IResource[]) {
+                    // ResourceTransfer
+                    System.out.println("Drop:" + ((IResource[])data)[0].getName());
+                    System.out.println("Folder:" + targetFolder);
+                    for (IResource resource : (IResource[]) data) {
+                        if (resource instanceof IFile) {
+                            IFile file = targetFolder.getFile(resource.getName());
+                            try {
+                                file.createLink(resource.getLocation(), IResource.NONE, null);
+                                String parser = resource.getPersistentProperty(ParserProviderManager.PARSER_PROPERTY);
+                                file.setPersistentProperty(ParserProviderManager.PARSER_PROPERTY, parser);
+                            } catch (CoreException e) {
+                                e.printStackTrace();
+                            }
+                        }
+                        
+                    }
+                }
+                return true;
+            }
+        });
+
+        getSite().setSelectionProvider(fViewer);
+        hookMouse();
+
+        createContextMenu();
+       }
+
+    // ------------------------------------------------------------------------
+    // ViewPart
+    // ------------------------------------------------------------------------
+
+       @Override
+       public String toString() {
+               return "[ProjectView]";
+       }
+
+    // ------------------------------------------------------------------------
+    // hookMouse
+    // ------------------------------------------------------------------------
+
+    private void hookMouse() {
+        fViewer.getTree().addMouseListener(new MouseAdapter() {
+               @Override
+                       public void mouseDoubleClick(MouseEvent event) {
+                TreeSelection selection = (TreeSelection) fViewer.getSelection();
+                Object element = selection.getFirstElement();
+                if (element instanceof TmfExperimentNode) {
+                       TmfExperimentNode experiment = (TmfExperimentNode) element;
+                       selectExperiment(experiment);                
+                } else if (element instanceof TmfProjectNode) {
+                    TmfProjectNode project = (TmfProjectNode) element;
+                    if (project.isOpen() && project.isTmfProject()) {
+                        IEclipsePreferences node = new InstanceScope().getNode(TmfUiPlugin.PLUGIN_ID);
+                        node.put(TmfUiPreferenceInitializer.ACTIVE_PROJECT_PREFERENCE, ((TmfProjectNode) element).getName());
+                        try {
+                            node.flush();
+                        } catch (BackingStoreException e) {
+                            e.printStackTrace();
+                        }
+                    }
+                } else if (element instanceof TmfTraceNode) {
+                    IWorkbench wb = PlatformUI.getWorkbench();
+                    IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
+                    IHandlerService handlerService = (IHandlerService) win.getService(IHandlerService.class);
+                    try {
+                        handlerService.executeCommand("org.eclipse.linuxtools.tmf.ui.command.project.trace.open", null);
+                    } catch (ExecutionException e) {
+                        e.printStackTrace();
+                    } catch (NotDefinedException e) {
+                        e.printStackTrace();
+                    } catch (NotEnabledException e) {
+                    } catch (NotHandledException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        });
+    }
+
+       public void selectExperiment(TmfExperimentNode experiment) {
+       String expId = experiment.getName();
+//        if (fSelectedExperiment != null)
+//             fSelectedExperiment.deregister();
+        try {
+               TmfTraceNode[] traceEntries = experiment.getTraces();
+               int nbTraces = traceEntries.length;
+               List<ITmfTrace> traces = new ArrayList<ITmfTrace>();
+               int cacheSize = Integer.MAX_VALUE;
+               for (int i = 0; i < nbTraces; i++) {
+                       IResource resource = traceEntries[i].getResource();
+                resource = experiment.getProject().getTracesFolder().getTraceForLocation(resource.getLocation()).getResource();
+                       ITmfTrace expTrace = ParserProviderManager.getTrace(resource);
+                       if (expTrace != null) {
+                           traces.add(expTrace);
+                       cacheSize = Math.min(cacheSize, expTrace.getCacheSize());
+                       try {
+                           // create a new independent copy of the trace for the editor
+                               ITmfTrace trace = ParserProviderManager.getTrace(resource);
+                           IEditorInput editorInput = new TmfEditorInput(resource, trace);
+                           IWorkbench wb = PlatformUI.getWorkbench();
+                           IWorkbenchPage activePage = wb.getActiveWorkbenchWindow().getActivePage();
+                 
+                           String editorId = ParserProviderManager.getEditorId(resource);
+                           IEditorPart editor = activePage.findEditor(editorInput);
+                           if (editor != null && editor instanceof IReusableEditor) {
+                               activePage.reuseEditor((IReusableEditor)editor, editorInput);
+                               activePage.activate(editor);
+                           } else {
+                               editor = activePage.openEditor(editorInput, editorId);
+                           }
+                           
+                       } catch (PartInitException e) {
+                           e.printStackTrace();
+                       }
+                       }
+               }
+               TmfExperiment<TmfEvent> selectedExperiment = new TmfExperiment<TmfEvent>(TmfEvent.class, expId, traces.toArray(new ITmfTrace[0]), cacheSize);
+            broadcast(new TmfExperimentSelectedSignal<TmfEvent>(this, selectedExperiment));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    // ------------------------------------------------------------------------
+    // createContextMenu
+    // ------------------------------------------------------------------------
+
+       // Populated from the plug-in
+    private void createContextMenu() {
+        MenuManager menuManager = new MenuManager("#PopupMenu");
+        menuManager.setRemoveAllWhenShown(true);
+        Menu menu = menuManager.createContextMenu(fViewer.getControl());
+        fViewer.getControl().setMenu(menu);
+        getSite().registerContextMenu(menuManager, fViewer);
+    }
+
+}
\ No newline at end of file
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/TmfProjectNature.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/TmfProjectNature.java
new file mode 100644 (file)
index 0000000..83b21e3
--- /dev/null
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectNature;
+import org.eclipse.core.runtime.CoreException;
+
+/**
+ * <b><u>TmfProjectNature</u></b>
+ * <p>
+ * This is really a marker for the Tmf projects.
+ */
+public class TmfProjectNature implements IProjectNature {
+
+       public static final String ID = "org.eclipse.linuxtools.tmf.ui.views.project.TmfProjectNature";
+
+       private IProject fProject;
+       
+       /* (non-Javadoc)
+        * @see org.eclipse.core.resources.IProjectNature#configure()
+        */
+       public void configure() throws CoreException {
+               // TODO Auto-generated method stub
+
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.resources.IProjectNature#deconfigure()
+        */
+       public void deconfigure() throws CoreException {
+               // TODO Auto-generated method stub
+
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.resources.IProjectNature#getProject()
+        */
+       public IProject getProject() {
+               return fProject;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.resources.IProjectNature#setProject(org.eclipse.core.resources.IProject)
+        */
+       public void setProject(IProject project) {
+               fProject = project;
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/AddTraceWizard.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/AddTraceWizard.java
new file mode 100644 (file)
index 0000000..bcb4ae1
--- /dev/null
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.dialogs;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfExperimentNode;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfProjectNode;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfTraceNode;
+import org.eclipse.ui.IImportWizard;
+import org.eclipse.ui.IWorkbench;
+
+/**
+ * <b><u>AddTraceWizard</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class AddTraceWizard extends Wizard implements IImportWizard {
+
+    private TmfProjectNode fProject;
+    private TmfExperimentNode fExperiment;
+    private AddTraceWizardPage fMainPage;
+
+    /**
+     * @param project
+     */
+    public AddTraceWizard(TmfProjectNode project, TmfExperimentNode experiment) {
+       fProject = project;
+       fExperiment = experiment;
+    }
+
+    /* (non-Javadoc)
+        * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
+        */
+       public void init(IWorkbench workbench, IStructuredSelection selection) {
+       setWindowTitle("Adding traces to experiment");
+       }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.Wizard#addPages()
+     */
+    @Override
+       public void addPages() {
+        super.addPages();
+        fMainPage = new AddTraceWizardPage(fProject, "Some string");
+        addPage(fMainPage);
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.wizard.Wizard#performFinish()
+        */
+       @Override
+       public boolean performFinish() {
+
+               IWorkspace workspace = ResourcesPlugin.getWorkspace();
+               IFolder experimentFolder = fExperiment.getFolder();
+
+               TmfTraceNode[] traces = fMainPage.getSelection();
+               for (TmfTraceNode trace : traces) {
+                       try {
+                           IResource resource = trace.getResource();
+                           IPath location = resource.getLocation();
+                           if (resource instanceof IFolder) {
+                               IFolder folder = experimentFolder.getFolder(trace.getName());
+                               if (workspace.validateLinkLocation(folder, location).isOK()) {
+                                   folder.createLink(location, IResource.REPLACE, null);
+                               }
+                               else {
+                                   System.out.println("Problem");
+                               }
+                           } else {
+                    IFile file = experimentFolder.getFile(trace.getName());
+                    if (workspace.validateLinkLocation(file, location).isOK()) {
+                        file.createLink(location, IResource.REPLACE, null);
+                    }
+                    else {
+                        System.out.println("Problem");
+                    }
+                           }
+                       } catch (CoreException e) {
+                               e.printStackTrace();
+                       }
+               }
+
+               return true;
+       }       
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/AddTraceWizardPage.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/AddTraceWizardPage.java
new file mode 100644 (file)
index 0000000..8bd411c
--- /dev/null
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.dialogs;
+
+import java.util.Vector;
+
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfProjectNode;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfTraceNode;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+
+/**
+ * <b><u>AddTraceWizardPage</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class AddTraceWizardPage extends WizardPage {
+
+       private TmfProjectNode fProject;
+       private CheckboxTableViewer fCheckboxTableViewer;
+       
+       protected AddTraceWizardPage(TmfProjectNode project, String pageName) {
+               super(pageName);
+               setTitle("Select traces");
+               setDescription("Select the traces to add to the experiment");
+               fProject = project;
+       }
+
+       public void createControl(Composite parent) {
+               Composite container = new Composite(parent, SWT.NULL);
+               container.setLayout(new FormLayout());
+               setControl(container);
+
+               fCheckboxTableViewer = CheckboxTableViewer.newCheckList(container, SWT.BORDER);
+               fCheckboxTableViewer.setContentProvider(new DialogTraceContentProvider());
+               fCheckboxTableViewer.setLabelProvider(new DialogTraceLabelProvider());
+
+               final Table table = fCheckboxTableViewer.getTable();
+               final FormData formData = new FormData();
+               formData.bottom = new FormAttachment(100, 0);
+               formData.right  = new FormAttachment(100, 0);
+               formData.top    = new FormAttachment(0, 0);
+               formData.left   = new FormAttachment(0, 0);
+               table.setLayoutData(formData);
+               table.setHeaderVisible(true);
+
+               final TableColumn tableColumn = new TableColumn(table, SWT.NONE);
+               tableColumn.setWidth(200);
+               tableColumn.setText("Trace");
+
+        fCheckboxTableViewer.setInput(fProject.getTracesFolder());
+       }
+
+       public TmfTraceNode[] getSelection() {
+               Vector<TmfTraceNode> traces = new Vector<TmfTraceNode>();
+               Object[] selection = fCheckboxTableViewer.getCheckedElements();
+               for (Object sel : selection) {
+                       if (sel instanceof TmfTraceNode)
+                               traces.add((TmfTraceNode) sel);
+               }
+               TmfTraceNode[] result = new TmfTraceNode[traces.size()];
+               traces.toArray(result); 
+               return result;
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/DialogTraceContentProvider.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/DialogTraceContentProvider.java
new file mode 100644 (file)
index 0000000..0e0ddcd
--- /dev/null
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.dialogs;
+
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfTraceFolderNode;
+
+/**
+ * <b><u>TmfTracesContentProvider</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class DialogTraceContentProvider implements IStructuredContentProvider {
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+        */
+       public Object[] getElements(Object inputElement) {
+               if (inputElement instanceof TmfTraceFolderNode) {
+                       TmfTraceFolderNode folder = (TmfTraceFolderNode) inputElement;
+                       return folder.getTraces();
+               }
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+        */
+       public void dispose() {
+               // TODO Auto-generated method stub
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+        */
+       public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+               // TODO Auto-generated method stub
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/DialogTraceLabelProvider.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/DialogTraceLabelProvider.java
new file mode 100644 (file)
index 0000000..6992840
--- /dev/null
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.dialogs;
+
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfTraceNode;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * <b><u>TmfTracesLabelProvider</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class DialogTraceLabelProvider extends LabelProvider implements ITableLabelProvider {
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
+        */
+       public Image getColumnImage(Object element, int columnIndex) {
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
+        */
+       public String getColumnText(Object element, int columnIndex) {
+               if (element instanceof TmfTraceNode) {
+                       TmfTraceNode entry = (TmfTraceNode) element;
+                       switch (columnIndex) {
+                               case 0:
+                                       return entry.getName();
+                               default:
+                                       return null;
+                       }
+               }
+               return null;
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/ImportTraceWizard.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/ImportTraceWizard.java
new file mode 100644 (file)
index 0000000..6cb1e0d
--- /dev/null
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.dialogs;
+
+import java.util.List;
+
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.IImportWizard;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.internal.WorkbenchPlugin;
+import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
+import org.eclipse.ui.internal.wizards.datatransfer.DataTransferMessages;
+
+/**
+ * <b><u>ImportTraceWizard</u></b>
+ * <p>
+ *
+ * TODO: Implement me. Please.
+ */
+@SuppressWarnings("restriction")
+public class ImportTraceWizard extends Wizard implements IImportWizard {
+
+    private IWorkbench fWorkbench;
+    private IStructuredSelection fSelection;
+    private ImportTraceWizardPage fMainPage;
+
+    /**
+     * 
+     */
+    public ImportTraceWizard() {
+        IDialogSettings workbenchSettings = WorkbenchPlugin.getDefault().getDialogSettings();
+        IDialogSettings section = workbenchSettings.getSection("TmfTraceImportWizard");
+        if (section == null) {
+                       section = workbenchSettings.addNewSection("TmfTraceImportWizard");
+               }
+        setDialogSettings(section);
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.Wizard#addPages()
+     */
+    @Override
+       public void addPages() {
+        super.addPages();
+        fMainPage = new ImportTraceWizardPage(fWorkbench, fSelection);
+        addPage(fMainPage);
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
+     */
+       @SuppressWarnings("rawtypes")
+       public void init(IWorkbench workbench, IStructuredSelection selection) {
+        fWorkbench = workbench;
+        fSelection = selection;
+
+        List selectedResources = IDE.computeSelectedResources(selection);
+        if (!selectedResources.isEmpty()) {
+            fSelection = new StructuredSelection(selectedResources);
+        }
+
+        setWindowTitle(DataTransferMessages.DataTransfer_importTitle);
+        setDefaultPageImageDescriptor(IDEWorkbenchPlugin.getIDEImageDescriptor("wizban/importdir_wiz.png"));
+        setNeedsProgressMonitor(true);
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.Wizard#performFinish()
+     */
+    @Override
+       public boolean performFinish() {
+       return fMainPage.finish();
+    }
+
+}
\ No newline at end of file
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/ImportTraceWizardPage.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/ImportTraceWizardPage.java
new file mode 100644 (file)
index 0000000..b7bda04
--- /dev/null
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.dialogs;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfProjectNode;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.internal.wizards.datatransfer.WizardFileSystemResourceImportPage1;
+
+/**
+ * <b><u>ImportTraceWizardPage</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+@SuppressWarnings("restriction")
+public class ImportTraceWizardPage extends WizardFileSystemResourceImportPage1 {
+
+       public ImportTraceWizardPage(IWorkbench workbench, IStructuredSelection selection) {
+               super(workbench, selection);
+               TmfProjectNode folder = (TmfProjectNode) selection.getFirstElement();
+               String path = folder.getTracesFolder().getFolder().getFullPath().toOSString();
+               setContainerFieldValue(path);
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/NewExperimentDialog.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/NewExperimentDialog.java
new file mode 100644 (file)
index 0000000..27c593e
--- /dev/null
@@ -0,0 +1,335 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.dialogs;
+
+import java.lang.reflect.InvocationTargetException;
+import java.net.URI;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfExperimentFolderNode;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+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 org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.ui.dialogs.SelectionStatusDialog;
+import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
+import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
+import org.eclipse.ui.internal.ide.dialogs.CreateLinkedResourceGroup;
+
+/**
+ * NewExperimentDialog
+ * 
+ * This is stripped down version of NewFolderDialog.
+ */
+@SuppressWarnings("restriction")
+public class NewExperimentDialog extends SelectionStatusDialog {
+
+       private Text folderNameField;
+       private IContainer container;
+       private boolean firstLinkCheck = true;
+       private CreateLinkedResourceGroup linkedResourceGroup;
+
+       /**
+        * Creates a NewFolderDialog
+        * 
+        * @param parentShell parent of the new dialog
+        * @param container parent of the new folder
+        */
+       public NewExperimentDialog(Shell parentShell, TmfExperimentFolderNode experimentFolder) {
+               super(parentShell);
+               this.container = experimentFolder.getFolder();
+               setTitle("Tmf Experiment");
+               setStatusLineAboveButtons(true);
+       }
+
+       /**
+        * Creates the folder using the name and link target entered by the user.
+        * Sets the dialog result to the created folder.  
+        */
+       @Override
+       protected void computeResult() {
+       }
+
+       /**
+        * @see org.eclipse.jface.window.Window#create()
+        */
+       @Override
+       public void create() {
+               super.create();
+               getButton(IDialogConstants.OK_ID).setEnabled(false);
+       }
+
+       /**
+        * Creates the widget for advanced options.
+        *  
+        * @param parent the parent composite
+        */
+       protected void createLinkResourceGroup(Composite parent) {
+               linkedResourceGroup = new CreateLinkedResourceGroup(IResource.FOLDER,
+                               new Listener() {
+                                       public void handleEvent(Event e) {
+                                               validateLinkedResource();
+                                               firstLinkCheck = false;
+                                       }
+                               }, new CreateLinkedResourceGroup.IStringValue() {
+                                       public void setValue(String string) {
+                                               folderNameField.setText(string);
+                                       }
+
+                                       public String getValue() {
+                                               return folderNameField.getText();
+                                       }
+
+                                       public IResource getResource() {
+                                               // TODO Auto-generated method stub
+                                               return null;
+                                       }
+                               });
+       }
+
+       /* (non-Javadoc)
+        * Method declared on Dialog.
+        */
+       @Override
+       protected Control createDialogArea(Composite parent) {
+               Composite composite = (Composite) super.createDialogArea(parent);
+               composite.setLayout(new GridLayout());
+               composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+               createFolderNameGroup(composite);
+               createLinkResourceGroup(composite);
+               return composite;
+       }
+
+       /**
+        * Creates the folder name specification controls.
+        *
+        * @param parent the parent composite
+        */
+       private void createFolderNameGroup(Composite parent) {
+               Font font = parent.getFont();
+               Composite folderGroup = new Composite(parent, SWT.NONE);
+               GridLayout layout = new GridLayout();
+               layout.numColumns = 2;
+               folderGroup.setLayout(layout);
+               folderGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+               // new folder label
+               Label folderLabel = new Label(folderGroup, SWT.NONE);
+               folderLabel.setFont(font);
+               folderLabel.setText("Experiment name: ");
+
+               // new folder name entry field
+               folderNameField = new Text(folderGroup, SWT.BORDER);
+               GridData data = new GridData(GridData.FILL_HORIZONTAL);
+               data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH;
+               folderNameField.setLayoutData(data);
+               folderNameField.setFont(font);
+               folderNameField.addListener(SWT.Modify, new Listener() {
+                       public void handleEvent(Event event) {
+                               validateLinkedResource();
+                       }
+               });
+       }
+
+       /**
+        * Creates a folder resource handle for the folder with the given name.
+        * The folder handle is created relative to the container specified during 
+        * object creation. 
+        *
+        * @param folderName the name of the folder resource to create a handle for
+        * @return the new folder resource handle
+        */
+       private IFolder createFolderHandle(String folderName) {
+               IWorkspaceRoot workspaceRoot = container.getWorkspace().getRoot();
+               IPath folderPath = container.getFullPath().append(folderName);
+               IFolder folderHandle = workspaceRoot.getFolder(folderPath);
+
+               return folderHandle;
+       }
+
+       /**
+        * Creates a new folder with the given name and optionally linking to
+        * the specified link target.
+        * 
+        * @param folderName name of the new folder
+        * @param linkTarget name of the link target folder. may be null.
+        * @return IFolder the new folder
+        */
+       private IFolder createNewFolder(String folderName, final URI linkTarget) {
+               final IFolder folderHandle = createFolderHandle(folderName);
+
+               WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
+                       @Override
+                       public void execute(IProgressMonitor monitor) throws CoreException {
+                               try {
+                                       monitor.beginTask(IDEWorkbenchMessages.NewFolderDialog_progress, 2000);
+                                       if (monitor.isCanceled()) {
+                                               throw new OperationCanceledException();
+                                       }
+                                       if (linkTarget == null) {
+                                               folderHandle.create(false, true, monitor);
+                                       } else {
+                                               folderHandle.createLink(linkTarget, IResource.ALLOW_MISSING_LOCAL, monitor);
+                                       }
+                                       if (monitor.isCanceled()) {
+                                               throw new OperationCanceledException();
+                                       }
+                               } finally {
+                                       monitor.done();
+                               }
+                       }
+               };
+               try {
+                       PlatformUI.getWorkbench().getProgressService().busyCursorWhile(operation);
+               } catch (InterruptedException exception) {
+                       return null;
+               } catch (InvocationTargetException exception) {
+                       if (exception.getTargetException() instanceof CoreException) {
+                               ErrorDialog.openError(getShell(),
+                                               IDEWorkbenchMessages.NewFolderDialog_errorTitle, null, // no special message
+                                               ((CoreException) exception.getTargetException()).getStatus());
+                       } else {
+                               // CoreExceptions are handled above, but unexpected runtime exceptions and errors may still occur.
+                               IDEWorkbenchPlugin.log(getClass(),
+                                               "createNewExperiment", exception.getTargetException());
+                               MessageDialog.openError(getShell(),
+                                               IDEWorkbenchMessages.NewFolderDialog_errorTitle,
+                                               NLS.bind(IDEWorkbenchMessages.NewFolderDialog_internalError,
+                                                       exception.getTargetException().getMessage()));
+                       }
+                       return null;
+               }
+               return folderHandle;
+       }
+
+       /**
+        * Update the dialog's status line to reflect the given status. It is safe to call
+        * this method before the dialog has been opened.
+        */
+       @Override
+       protected void updateStatus(IStatus status) {
+               if (firstLinkCheck && status != null) {
+                       Status newStatus = new Status(IStatus.OK, status.getPlugin(),
+                                       status.getCode(), status.getMessage(), status.getException());
+                       super.updateStatus(newStatus);
+               } else {
+                       super.updateStatus(status);
+               }
+       }
+
+       /**
+        * Update the dialog's status line to reflect the given status. It is safe to call
+        * this method before the dialog has been opened.
+        * @param severity
+        * @param message
+        */
+       private void updateStatus(int severity, String message) {
+               updateStatus(new Status(severity, IDEWorkbenchPlugin.IDE_WORKBENCH, severity, message, null));
+       }
+
+       /**
+        * Checks whether the folder name and link location are valid.
+        * Disable the OK button if the folder name and link location are valid.
+        * a message that indicates the problem otherwise.
+        */
+       private void validateLinkedResource() {
+               boolean valid = validateFolderName();
+
+               if (valid) {
+                       IFolder linkHandle = createFolderHandle(folderNameField.getText());
+                       IStatus status = linkedResourceGroup.validateLinkLocation(linkHandle);
+
+                       if (status.getSeverity() != IStatus.ERROR) {
+                               getOkButton().setEnabled(true);
+                       } else {
+                               getOkButton().setEnabled(false);
+                       }
+
+                       if (status.isOK() == false) {
+                               updateStatus(status);
+                       }
+               } else {
+                       getOkButton().setEnabled(false);
+               }
+       }
+
+       /**
+        * Checks if the folder name is valid.
+        *
+        * @return null if the new folder name is valid.
+        *      a message that indicates the problem otherwise.
+        */
+       private boolean validateFolderName() {
+               String name = folderNameField.getText();
+               IWorkspace workspace = container.getWorkspace();
+               IStatus nameStatus = workspace.validateName(name, IResource.FOLDER);
+
+               if ("".equals(name)) {
+                       updateStatus(IStatus.ERROR, "Experiment name is empty");
+                       return false;
+               }
+               if (nameStatus.isOK() == false) {
+                       updateStatus(nameStatus);
+                       return false;
+               }
+               IPath path = new Path(name);
+               if (container.getFolder(path).exists()
+                               || container.getFile(path).exists()) {
+                       updateStatus(IStatus.ERROR, NLS.bind("Experiment already exists", name));
+                       return false;
+               }
+               updateStatus(IStatus.OK, "");
+               return true;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.dialogs.SelectionStatusDialog#okPressed()
+        */
+       @Override
+       protected void okPressed() {
+               URI linkTarget = linkedResourceGroup.getLinkTargetURI();
+               IFolder folder = createNewFolder(folderNameField.getText(), linkTarget);
+               if (folder == null) {
+                       return;
+               }
+
+               setSelectionResult(new IFolder[] { folder });
+
+               super.okPressed();
+       }
+}
\ No newline at end of file
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/NewProjectMainWizardPage.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/NewProjectMainWizardPage.java
new file mode 100644 (file)
index 0000000..b4c2f5c
--- /dev/null
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.dialogs;
+
+import org.eclipse.ui.dialogs.WizardNewProjectCreationPage;
+
+/**
+ * <b><u>NewProjectMainWizardPage</u></b>
+ * <p>
+ *
+ * TODO: Implement me. Please.
+ */
+public class NewProjectMainWizardPage extends WizardNewProjectCreationPage {
+
+    /**
+     * @param pageName
+     */
+    public NewProjectMainWizardPage(String pageName) {
+        super(pageName);
+    }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/NewProjectWizard.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/dialogs/NewProjectWizard.java
new file mode 100644 (file)
index 0000000..f928f4d
--- /dev/null
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.dialogs;
+
+import java.net.URI;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.linuxtools.tmf.ui.TmfUiPlugin;
+import org.eclipse.linuxtools.tmf.ui.views.project.TmfProjectNature;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfProjectNode;
+import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard;
+
+/**
+ * <b><u>NewProjectWizard</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class NewProjectWizard extends BasicNewResourceWizard {
+
+    private String fTtitle;
+    private String fDescription;
+
+    protected NewProjectMainWizardPage fMainPage;
+    protected String fProjectName;
+    protected URI fProjectLocation;
+    protected IConfigurationElement fConfigElement;
+
+    protected IProject fProject;
+
+    /**
+     * 
+     */
+    public NewProjectWizard() {
+        this("Tmf Project", "Create an Tmf Project");
+    }
+
+    /**
+     * @param title
+     * @param desc
+     */
+    public NewProjectWizard(String title, String desc) {
+        super();
+        setDialogSettings(TmfUiPlugin.getDefault().getDialogSettings());
+        setNeedsProgressMonitor(true);
+        setForcePreviousAndNextButtons(true);
+        setWindowTitle(title);
+        fTtitle = title;
+        fDescription = desc;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.Wizard#addPages()
+     */
+    @Override
+    public void addPages() {
+        fMainPage= new NewProjectMainWizardPage("Tmf Project");
+        fMainPage.setTitle(fTtitle);
+        fMainPage.setDescription(fDescription);
+        addPage(fMainPage);
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.Wizard#performCancel()
+     */
+    @Override
+    public boolean performCancel() {
+        return true;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.Wizard#performFinish()
+     */
+    @Override
+    public boolean performFinish() {
+        fProjectName = fMainPage.getProjectName();
+        fProjectLocation = fMainPage.useDefaults() ? null : fMainPage.getLocationURI();
+        fProject = createProject(fProjectName, fProjectLocation, new NullProgressMonitor());
+        return true;
+    }
+
+    public IProject getProject() {
+       return fProject;
+    }
+    /**
+     * @param projectName
+     * @param projectLocation
+     * @param monitor
+     * @return
+     */
+    private IProject createProject(String projectName, URI projectLocation, IProgressMonitor monitor) {
+
+        IWorkspace workspace = ResourcesPlugin.getWorkspace();
+        IWorkspaceRoot root = workspace.getRoot();
+        IProject project = root.getProject(projectName);
+
+        try {
+            if (!project.exists()) {
+                IProjectDescription description = workspace.newProjectDescription(project.getName());
+                if (projectLocation != null)
+                    description.setLocationURI(projectLocation);
+                project.create(description, monitor);
+            }
+
+            if (!project.isOpen())
+                project.open(monitor);
+
+            IProjectDescription description = project.getDescription();
+            description.setNatureIds(new String[] { TmfProjectNature.ID } );
+            project.setDescription(description, null);
+
+            IFolder folder = project.getFolder(TmfProjectNode.TRACE_FOLDER_NAME);
+            if (!folder.exists())
+                folder.create(true, true, null);
+
+            folder = project.getFolder(TmfProjectNode.EXPER_FOLDER_NAME);
+            if (!folder.exists())
+                folder.create(true, true, null);
+
+            return project;
+        }
+        catch (CoreException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+}
\ No newline at end of file
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/CloseProjectHandler.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/CloseProjectHandler.java
new file mode 100644 (file)
index 0000000..427661f
--- /dev/null
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.linuxtools.tmf.ui.views.project.ProjectView;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfProjectNode;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * <b><u>CloseProjectHandler</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class CloseProjectHandler extends AbstractHandler {
+
+       private TmfProjectNode fProject = null;
+
+       // ------------------------------------------------------------------------
+       // Validation
+       // ------------------------------------------------------------------------
+
+       public boolean isEnabled() {
+               
+               // Check if we are closing down
+               IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+               if (window == null)
+                       return false;
+
+               // Check if we are in the Project View
+               IWorkbenchPage page = window.getActivePage();
+               if (page == null || !(page.getActivePart() instanceof ProjectView))
+                       return false;
+
+               // Check if a project is selected
+               ISelection selection = page.getSelection(ProjectView.ID);
+               if (selection instanceof StructuredSelection) {
+                       Object element = ((StructuredSelection) selection).getFirstElement();
+                       fProject = (element instanceof TmfProjectNode) ? (TmfProjectNode) element : null;
+               }
+               return (fProject != null && fProject.isOpen());
+       }
+
+       // ------------------------------------------------------------------------
+       // Execution
+       // ------------------------------------------------------------------------
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+
+               if (fProject != null) {
+                       fProject.closeProject();
+                       fProject.refresh();
+               }
+               return null;
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/DeleteExperimentHandler.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/DeleteExperimentHandler.java
new file mode 100644 (file)
index 0000000..d40f612
--- /dev/null
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.linuxtools.tmf.ui.views.project.ProjectView;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.ITmfProjectTreeNode;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfExperimentNode;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * <b><u>DeleteExperimentHandler</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class DeleteExperimentHandler extends AbstractHandler {
+
+       private TmfExperimentNode fExperiment = null;
+
+       // ------------------------------------------------------------------------
+       // Validation
+       // ------------------------------------------------------------------------
+
+       public boolean isEnabled() {
+
+               // Check if we are closing down
+               IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+               if (window == null)
+                       return false;
+
+               // Check if a trace is selected
+               IWorkbenchPage page = window.getActivePage();
+               if (!(page.getActivePart() instanceof ProjectView))
+                       return false;
+
+               // Check if a trace is selected
+               ISelection selection = page.getSelection(ProjectView.ID);
+               if (selection instanceof StructuredSelection) {
+                       Object element = ((StructuredSelection) selection).getFirstElement();
+                       fExperiment = (element instanceof TmfExperimentNode) ? (TmfExperimentNode) element : null;
+               }
+
+               return (fExperiment != null);
+       }
+
+       // ------------------------------------------------------------------------
+       // Execution
+       // ------------------------------------------------------------------------
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+
+               IFolder folder = fExperiment.getFolder();
+               ITmfProjectTreeNode parent = fExperiment.getParent();
+               try {
+                       parent.removeChild(fExperiment);
+                       parent.refresh();
+                       folder.delete(true, true, null);
+               } catch (CoreException e) {
+                       e.printStackTrace();
+               }
+
+               return null;
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/DeleteProjectHandler.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/DeleteProjectHandler.java
new file mode 100644 (file)
index 0000000..612ea06
--- /dev/null
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.linuxtools.tmf.ui.views.project.ProjectView;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.ITmfProjectTreeNode;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfProjectNode;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * <b><u>DeleteProjectHandler</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class DeleteProjectHandler extends AbstractHandler {
+
+       private TmfProjectNode fProject = null;
+
+       // ------------------------------------------------------------------------
+       // Validation
+       // ------------------------------------------------------------------------
+
+       public boolean isEnabled() {
+               
+               // Check if we are closing down
+               IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+               if (window == null)
+                       return false;
+
+               // Check if we are in the Project View
+               IWorkbenchPage page = window.getActivePage();
+               if (!(page.getActivePart() instanceof ProjectView))
+                       return false;
+
+               // Check if a project is selected
+               ISelection selection = page.getSelection(ProjectView.ID);
+               if (selection instanceof StructuredSelection) {
+                       Object element = ((StructuredSelection) selection).getFirstElement();
+                       fProject = (element instanceof TmfProjectNode) ? (TmfProjectNode) element : null;
+               }
+               return (fProject != null);
+       }
+
+       // ------------------------------------------------------------------------
+       // Execution
+       // ------------------------------------------------------------------------
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+
+               IProject project = fProject.getProject();
+               ITmfProjectTreeNode parent = fProject.getParent();
+               try {
+                       parent.removeChild(fProject);
+                       parent.refresh();
+                       project.delete(true, true, null);
+               } catch (CoreException e) {
+                       e.printStackTrace();
+               }
+
+               return null;
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/DeleteTraceHandler.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/DeleteTraceHandler.java
new file mode 100644 (file)
index 0000000..66bbdda
--- /dev/null
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.linuxtools.tmf.ui.views.project.ProjectView;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.ITmfProjectTreeNode;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfExperimentFolderNode;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfExperimentNode;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfTraceNode;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * <b><u>DeleteTraceHandler</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class DeleteTraceHandler extends AbstractHandler {
+
+       private TmfTraceNode fTrace = null;
+
+       // ------------------------------------------------------------------------
+       // Validation
+       // ------------------------------------------------------------------------
+
+       public boolean isEnabled() {
+               
+               // Check if we are closing down
+               IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+               if (window == null)
+                       return false;
+
+               // Check if a trace is selected
+               IWorkbenchPage page = window.getActivePage();
+               if (!(page.getActivePart() instanceof ProjectView))
+                       return false;
+
+               // Check if a trace is selected
+               ISelection selection = page.getSelection(ProjectView.ID);
+               if (selection instanceof StructuredSelection) {
+                       Object element = ((StructuredSelection) selection).getFirstElement();
+                       fTrace = (element instanceof TmfTraceNode) ? (TmfTraceNode) element : null;
+               }
+
+               return (fTrace != null);
+       }
+
+       // ------------------------------------------------------------------------
+       // Execution
+       // ------------------------------------------------------------------------
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+
+               IResource resource = fTrace.getResource();
+               ITmfProjectTreeNode parent = fTrace.getParent();
+               try {
+                   if (!(parent instanceof TmfExperimentNode)) {
+                       // Delete the trace from every experiment where it appears
+                       TmfExperimentFolderNode experimentFolder = fTrace.getProject().getExperimentsFolder();
+                       for (ITmfProjectTreeNode experiment : experimentFolder.getChildren()) {
+                           for (int i = 0; i < experiment.getChildren().size(); i++) {
+                               TmfTraceNode trace = (TmfTraceNode) experiment.getChildren().get(i);
+                               if (trace.getResource().getLocation().equals(resource.getLocation())) {
+                                   experiment.removeChild(trace);
+                                   experiment.refresh();
+                                   trace.getResource().delete(true, null);
+                               }
+                           }
+                       }
+                   }
+                       parent.removeChild(fTrace);
+                       parent.refresh();
+                       resource.delete(true, null);
+               } catch (CoreException e) {
+                       e.printStackTrace();
+               }
+
+               return null;
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/ImportTraceHandler.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/ImportTraceHandler.java
new file mode 100644 (file)
index 0000000..303a5ca
--- /dev/null
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.linuxtools.tmf.ui.views.project.ProjectView;
+import org.eclipse.linuxtools.tmf.ui.views.project.dialogs.ImportTraceWizard;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.ITmfProjectTreeNode;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfProjectNode;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * <b><u>ImportTraceHandler</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class ImportTraceHandler extends AbstractHandler {
+
+       private TmfProjectNode fProject = null;
+
+       // ------------------------------------------------------------------------
+       // Validation
+       // ------------------------------------------------------------------------
+
+       public boolean isEnabled() {
+               
+               // Check if we are closing down
+               IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+               if (window == null)
+                       return false;
+
+               // Check if we are in the Project View
+               IWorkbenchPage page = window.getActivePage();
+               if (!(page.getActivePart() instanceof ProjectView))
+                       return false;
+
+               // Check if a project is selected
+               ISelection selection = page.getSelection(ProjectView.ID);
+               if (selection instanceof StructuredSelection) {
+                       Object element = ((StructuredSelection) selection).getFirstElement();
+                       if (element instanceof ITmfProjectTreeNode) {
+                               ITmfProjectTreeNode node = (ITmfProjectTreeNode) element;
+                               while (node != null && !(node instanceof TmfProjectNode)) {
+                                       node = node.getParent();
+                               }
+                               fProject = (node instanceof TmfProjectNode) ? (TmfProjectNode) node : null;
+                       }
+               }
+
+               return (fProject != null && fProject.isOpen() && fProject.isTmfProject());
+       }
+
+       // ------------------------------------------------------------------------
+       // Execution
+       // ------------------------------------------------------------------------
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+
+               // Set the selection to the project
+               IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+               ProjectView view = (ProjectView) page.getActivePart();
+               view.setSelection(fProject);
+
+               // Fire the Import Trace Wizard
+               IWorkbench workbench = PlatformUI.getWorkbench();
+               Shell shell = workbench.getActiveWorkbenchWindow().getShell();
+
+               ImportTraceWizard wizard = new ImportTraceWizard();
+               wizard.init(PlatformUI.getWorkbench(), new StructuredSelection(fProject));
+               WizardDialog dialog = new WizardDialog(shell, wizard);
+               dialog.open();
+
+               if (dialog.getReturnCode() == Window.OK && fProject != null) {
+                       fProject.refreshChildren();
+                       fProject.refresh();
+               }
+
+               return null;
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/NewExperimentHandler.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/NewExperimentHandler.java
new file mode 100644 (file)
index 0000000..5922341
--- /dev/null
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.linuxtools.tmf.ui.views.project.ProjectView;
+import org.eclipse.linuxtools.tmf.ui.views.project.dialogs.NewExperimentDialog;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.ITmfProjectTreeNode;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfExperimentFolderNode;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfProjectNode;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * <b><u>NewExperimentHandler</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class NewExperimentHandler extends AbstractHandler {
+
+       private TmfProjectNode fProject = null;
+
+       // ------------------------------------------------------------------------
+       // Validation
+       // ------------------------------------------------------------------------
+
+       public boolean isEnabled() {
+
+               // Check if we are closing down
+               IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+               if (window == null)
+                       return false;
+
+               // Check if we are in the Project View
+               IWorkbenchPage page = window.getActivePage();
+               if (!(page.getActivePart() instanceof ProjectView))
+                       return false;
+
+               // Check if a project is selected
+               ISelection selection = page.getSelection(ProjectView.ID);
+               if (selection instanceof StructuredSelection) {
+                       Object element = ((StructuredSelection) selection).getFirstElement();
+                       if (element instanceof ITmfProjectTreeNode) {
+                               ITmfProjectTreeNode node = (ITmfProjectTreeNode) element;
+                               while (node != null && !(node instanceof TmfProjectNode)) {
+                                       node = node.getParent();
+                               }
+                               fProject = (node instanceof TmfProjectNode) ? (TmfProjectNode) node : null;
+                       }
+               }
+
+               return (fProject != null && fProject.isOpen() && fProject.isTmfProject());
+       }
+
+       // ------------------------------------------------------------------------
+       // Execution
+       // ------------------------------------------------------------------------
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+
+               // Open the experiment creation dialog
+               TmfExperimentFolderNode experimentFolder = fProject.getExperimentsFolder();
+               Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+               NewExperimentDialog dialog = new NewExperimentDialog(shell, experimentFolder);
+               dialog.open();
+
+               if (dialog.getReturnCode() == Window.OK) {
+                       Object[] experiments = dialog.getResult();
+                       if (experiments[0] instanceof IFolder) {
+                               experimentFolder.addExperiment((IFolder) experiments[0]);
+                       }
+               }
+
+               return null;
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/NewProjectHandler.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/NewProjectHandler.java
new file mode 100644 (file)
index 0000000..a3e778c
--- /dev/null
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.linuxtools.tmf.ui.TmfUiPlugin;
+import org.eclipse.linuxtools.tmf.ui.TmfUiPreferenceInitializer;
+import org.eclipse.linuxtools.tmf.ui.views.project.ProjectView;
+import org.eclipse.linuxtools.tmf.ui.views.project.dialogs.NewProjectWizard;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfProjectRoot;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.osgi.service.prefs.BackingStoreException;
+
+/**
+ * <b><u>NewProjectHandler</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class NewProjectHandler extends AbstractHandler {
+
+       private TmfProjectRoot fProjectRoot = null;
+
+       // ------------------------------------------------------------------------
+       // Validation
+       // ------------------------------------------------------------------------
+
+       public boolean isEnabled() {
+               
+               // Check if we are closing down
+               IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+               if (window == null)
+                       return false;
+
+               // Check if we are in the Project View
+               IWorkbenchPart part = window.getActivePage().getActivePart();
+               if (!(part instanceof ProjectView))
+                       return false;
+
+               fProjectRoot = ((ProjectView) part).getRoot();
+
+               return (fProjectRoot != null);
+       }
+
+       // ------------------------------------------------------------------------
+       // Execution
+       // ------------------------------------------------------------------------
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+
+               // Fire the New Project Wizard
+               Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+               NewProjectWizard wizard = new NewProjectWizard();
+               WizardDialog dialog = new WizardDialog(shell, wizard);
+               dialog.open();
+
+               // Update the project model
+               if (dialog.getReturnCode() == Window.OK) {
+                       IProject project = wizard.getProject();
+                       if (project != null && fProjectRoot != null) {
+                IEclipsePreferences node = new InstanceScope().getNode(TmfUiPlugin.PLUGIN_ID);
+                node.put(TmfUiPreferenceInitializer.ACTIVE_PROJECT_PREFERENCE, project.getName());
+                try {
+                    node.flush();
+                } catch (BackingStoreException e) {
+                    e.printStackTrace();
+                }
+                               fProjectRoot.refreshChildren();
+                               fProjectRoot.refresh();
+                       }
+               }
+
+               return null;
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/OpenExperimentHandler.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/OpenExperimentHandler.java
new file mode 100644 (file)
index 0000000..c45c606
--- /dev/null
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.linuxtools.tmf.ui.views.project.ProjectView;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfExperimentNode;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * <b><u>OpenExperimentHandler</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class OpenExperimentHandler extends AbstractHandler {
+
+       private TmfExperimentNode fExperiment = null;
+
+       // ------------------------------------------------------------------------
+       // Validation
+       // ------------------------------------------------------------------------
+
+       public boolean isEnabled() {
+               // Check if we are closing down
+               IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+               if (window == null)
+                       return false;
+
+               // Check if a trace is selected
+               IWorkbenchPage page = window.getActivePage();
+               if (!(page.getActivePart() instanceof ProjectView))
+                       return false;
+
+               // Check if a trace is selected
+               ISelection selection = page.getSelection(ProjectView.ID);
+               if (selection instanceof StructuredSelection) {
+                       Object element = ((StructuredSelection) selection).getFirstElement();
+                       fExperiment = (element instanceof TmfExperimentNode) ? (TmfExperimentNode) element : null;
+               }
+
+               return (fExperiment != null);
+       }
+
+       // ------------------------------------------------------------------------
+       // Execution
+       // ------------------------------------------------------------------------
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+
+               // Set the selection to the project
+               IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+               ProjectView projectView = (ProjectView) page.getActivePart();
+
+               if (projectView != null) {
+                       projectView.selectExperiment(fExperiment);
+               }
+
+               return null;
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/OpenProjectHandler.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/OpenProjectHandler.java
new file mode 100644 (file)
index 0000000..e1a6726
--- /dev/null
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.linuxtools.tmf.ui.views.project.ProjectView;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfProjectNode;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * <b><u>OpenProjectHandler</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class OpenProjectHandler extends AbstractHandler {
+
+       private TmfProjectNode fProject = null;
+
+       // ------------------------------------------------------------------------
+       // Validation
+       // ------------------------------------------------------------------------
+
+       public boolean isEnabled() {
+               
+               // Check if we are closing down
+               IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+               if (window == null)
+                       return false;
+
+               // Check if we are in the Project View
+               IWorkbenchPage page = window.getActivePage();
+               if (!(page.getActivePart() instanceof ProjectView))
+                       return false;
+
+               // Check if a project is selected
+               ISelection selection = page.getSelection(ProjectView.ID);
+               if (selection instanceof StructuredSelection) {
+                       Object element = ((StructuredSelection) selection).getFirstElement();
+                       fProject = (element instanceof TmfProjectNode) ? (TmfProjectNode) element : null;
+               }
+               return (fProject != null && !fProject.isOpen());
+       }
+
+       // ------------------------------------------------------------------------
+       // Execution
+       // ------------------------------------------------------------------------
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+
+               if (fProject != null) {
+                       fProject.openProject();
+                       fProject.refresh();
+               }
+               return null;
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/OpenTraceHandler.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/OpenTraceHandler.java
new file mode 100644 (file)
index 0000000..6b7eaf6
--- /dev/null
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.linuxtools.tmf.trace.ITmfTrace;
+import org.eclipse.linuxtools.tmf.ui.editors.TmfEditorInput;
+import org.eclipse.linuxtools.tmf.ui.parsers.ParserProviderManager;
+import org.eclipse.linuxtools.tmf.ui.views.project.ProjectView;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfExperimentNode;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfTraceNode;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IReusableEditor;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * <b><u>OpenTraceHandler</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class OpenTraceHandler extends AbstractHandler {
+
+       private TmfTraceNode fTrace = null;
+
+       // ------------------------------------------------------------------------
+       // Validation
+       // ------------------------------------------------------------------------
+
+       public boolean isEnabled() {
+           
+        // Check if we are closing down
+        IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+        if (window == null)
+            return false;
+
+        // Check if a trace is selected
+        IWorkbenchPage page = window.getActivePage();
+        if (!(page.getActivePart() instanceof ProjectView))
+            return false;
+
+        // Check if a trace is selected
+        ISelection selection = page.getSelection(ProjectView.ID);
+        if (selection instanceof StructuredSelection) {
+            Object element = ((StructuredSelection) selection).getFirstElement();
+            fTrace = (element instanceof TmfTraceNode) ? (TmfTraceNode) element : null;
+        }
+
+        return (fTrace != null);
+       }
+
+       // ------------------------------------------------------------------------
+       // Execution
+       // ------------------------------------------------------------------------
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+
+        IResource resource = fTrace.getResource();
+        if (fTrace.getParent() instanceof TmfExperimentNode) {
+            resource = fTrace.getProject().getTracesFolder().getTraceForLocation(resource.getLocation()).getResource();
+        }
+        
+        ITmfTrace trace = ParserProviderManager.getTrace(resource);
+        if (trace == null) {
+            return null;
+        }
+        
+        try {
+            IEditorInput editorInput = new TmfEditorInput(resource, trace);
+            IWorkbench wb = PlatformUI.getWorkbench();
+            IWorkbenchPage activePage = wb.getActiveWorkbenchWindow().getActivePage();
+  
+            String editorId = ParserProviderManager.getEditorId(resource);
+            IEditorPart editor = activePage.findEditor(editorInput);
+            if (editor != null && editor instanceof IReusableEditor) {
+                activePage.reuseEditor((IReusableEditor)editor, editorInput);
+                activePage.activate(editor);
+            } else {
+                editor = activePage.openEditor(editorInput, editorId);
+            }
+            
+        } catch (PartInitException e) {
+            e.printStackTrace();
+        }
+        
+//        ITmfTrace[] traces = new ITmfTrace[]{trace};
+//        TmfExperiment<TmfEvent> experiment = new TmfExperiment<TmfEvent>(TmfEvent.class, resource.getName(), traces, trace.getCacheSize());
+//        experiment.indexExperiment(false);
+//        TmfSignalManager.dispatchSignal(new TmfExperimentSelectedSignal<TmfEvent>(this, experiment));
+        
+               return null;
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/RefreshHandler.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/RefreshHandler.java
new file mode 100644 (file)
index 0000000..8123f6d
--- /dev/null
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.linuxtools.tmf.ui.views.project.ProjectView;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.ITmfProjectTreeNode;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfProjectRoot;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * <b><u>RefreshHandler</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class RefreshHandler extends AbstractHandler {
+
+       private TmfProjectRoot fProjectRoot = null;
+
+       // ------------------------------------------------------------------------
+       // Validation
+       // ------------------------------------------------------------------------
+
+       public boolean isEnabled() {
+               
+               // Check if we are closing down
+               IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+               if (window == null)
+                       return false;
+
+               // Check if we can find the project model root node
+               ISelection selection = window.getActivePage().getSelection(ProjectView.ID);
+               if (selection instanceof StructuredSelection) {
+                       Object element = ((StructuredSelection) selection).getFirstElement();
+                       if (element instanceof ITmfProjectTreeNode) {
+                               ITmfProjectTreeNode node = (ITmfProjectTreeNode) element;
+                               while (node != null && !(node instanceof TmfProjectRoot)) {
+                                       node = node.getParent();
+                               }
+                               fProjectRoot = (node instanceof TmfProjectRoot) ? (TmfProjectRoot) node : null;
+                       }
+               }
+
+               return (fProjectRoot != null);
+       }
+
+       // ------------------------------------------------------------------------
+       // Execution
+       // ------------------------------------------------------------------------
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+        IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+        try {
+            root.refreshLocal(IResource.DEPTH_INFINITE, null);
+            fProjectRoot.refreshChildren();
+        } catch (CoreException e) {
+            throw new ExecutionException("CoreException", e);
+        }
+
+               return null;
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/RenameExperimentHandler.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/RenameExperimentHandler.java
new file mode 100644 (file)
index 0000000..d65dd61
--- /dev/null
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfExperimentNode;
+import org.eclipse.swt.widgets.MessageBox;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * <b><u>RenameExperimentHandler</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class RenameExperimentHandler extends AbstractHandler {
+
+       private TmfExperimentNode fExperiment = null;
+
+       // ------------------------------------------------------------------------
+       // Validation
+       // ------------------------------------------------------------------------
+
+       public boolean isEnabled() {
+               return (fExperiment != null);
+       }
+
+       // ------------------------------------------------------------------------
+       // Execution
+       // ------------------------------------------------------------------------
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+
+               MessageBox mb = new MessageBox(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
+               mb.setText("Rename Experiment");
+               mb.setMessage("Not implemented yet");
+               mb.open();
+
+               return null;
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/RenameProjectHandler.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/RenameProjectHandler.java
new file mode 100644 (file)
index 0000000..45fe8ab
--- /dev/null
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfProjectNode;
+import org.eclipse.swt.widgets.MessageBox;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * <b><u>RenameProjectHandler</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class RenameProjectHandler extends AbstractHandler {
+
+       private TmfProjectNode fProject = null;
+
+       // ------------------------------------------------------------------------
+       // Validation
+       // ------------------------------------------------------------------------
+
+       public boolean isEnabled() {
+
+//             // Check if we are closing down
+//             IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+//             if (window == null)
+//                     return false;
+//
+//             // Check if we are in the Project View
+//             IWorkbenchPage page = window.getActivePage();
+//             if (!(page.getActivePart() instanceof ProjectView))
+//                     return false;
+//
+//             // Check if a project is selected
+//             ISelection selection = page.getSelection(ProjectView.ID);
+//             if (selection instanceof StructuredSelection) {
+//                     Object element = ((StructuredSelection) selection).getFirstElement();
+//                     fProjectNode = (element instanceof TmfProjectNode) ? (TmfProjectNode) element : null;
+//             }
+
+               return (fProject != null);
+       }
+
+       // ------------------------------------------------------------------------
+       // Execution
+       // ------------------------------------------------------------------------
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+
+               MessageBox mb = new MessageBox(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
+               mb.setText("Rename Project");
+               mb.setMessage("Not implemented yet");
+               mb.open();
+
+               return null;
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/RenameTraceHandler.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/RenameTraceHandler.java
new file mode 100644 (file)
index 0000000..b077b24
--- /dev/null
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfTraceNode;
+import org.eclipse.swt.widgets.MessageBox;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * <b><u>RenameTraceHandler</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class RenameTraceHandler extends AbstractHandler {
+
+       private TmfTraceNode fTrace = null;
+
+       // ------------------------------------------------------------------------
+       // Validation
+       // ------------------------------------------------------------------------
+
+       public boolean isEnabled() {
+               return (fTrace != null);
+       }
+
+       // ------------------------------------------------------------------------
+       // Execution
+       // ------------------------------------------------------------------------
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+
+               MessageBox mb = new MessageBox(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
+               mb.setText("Rename Trace");
+               mb.setMessage("Not implemented yet");
+               mb.open();
+
+               return null;
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/SelectParserContributionItem.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/SelectParserContributionItem.java
new file mode 100644 (file)
index 0000000..64978a5
--- /dev/null
@@ -0,0 +1,66 @@
+/*******************************************************************************\r
+ * Copyright (c) 2010 Ericsson\r
+ * \r
+ * All rights reserved. This program and the accompanying materials are\r
+ * made available under the terms of the Eclipse Public License v1.0 which\r
+ * accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ * \r
+ * Contributors:\r
+ *   Patrick Tasse - Initial API and implementation\r
+ *******************************************************************************/\r
+\r
+package org.eclipse.linuxtools.tmf.ui.views.project.handlers;\r
+\r
+import java.util.HashMap;\r
+import java.util.LinkedList;\r
+import java.util.Map;\r
+import java.util.Map.Entry;\r
+\r
+import org.eclipse.jface.action.IContributionItem;\r
+import org.eclipse.jface.action.MenuManager;\r
+import org.eclipse.linuxtools.tmf.ui.parsers.ParserProviderManager;\r
+import org.eclipse.ui.PlatformUI;\r
+import org.eclipse.ui.actions.CompoundContributionItem;\r
+import org.eclipse.ui.menus.CommandContributionItem;\r
+import org.eclipse.ui.menus.CommandContributionItemParameter;\r
+\r
+\r
+public class SelectParserContributionItem extends CompoundContributionItem {\r
+\r
+    @Override\r
+    protected IContributionItem[] getContributionItems() {\r
+        Map<String, String> params;\r
+        LinkedList<IContributionItem> list = new LinkedList<IContributionItem>();\r
+        \r
+        ParserProviderManager.getParserMap();\r
+        \r
+        for(Entry<String, Map<String, String>> providerEntry : ParserProviderManager.getParserMap().entrySet()) {\r
+            MenuManager subMenu = new MenuManager(providerEntry.getKey());\r
+            for(Entry<String, String> entry : providerEntry.getValue().entrySet()) {\r
+                params = new HashMap<String, String>();\r
+                params.put("org.eclipse.linuxtools.tmf.ui.commandparameter.project.trace.selectparser.parser", entry.getValue());\r
+    \r
+                CommandContributionItemParameter param = new CommandContributionItemParameter(PlatformUI.getWorkbench().getActiveWorkbenchWindow(), "my.parameterid",\r
+                        "org.eclipse.linuxtools.tmf.ui.command.project.trace.selectparser",\r
+                        params,\r
+                        null, // icon\r
+                        null, // disabled icon\r
+                        null, // hover icon\r
+                        entry.getKey().replaceAll("&", "&&"), // label\r
+                        null, // mnemonic\r
+                        null, // tooltip\r
+                        CommandContributionItem.STYLE_PUSH,\r
+                        null, // help context id\r
+                        true // visibleEnable\r
+                );\r
+                \r
+                subMenu.add(new CommandContributionItem(param));\r
+            }\r
+            list.add(subMenu);\r
+        }\r
+\r
+        return (IContributionItem[]) list.toArray(new IContributionItem[list.size()]);\r
+    }\r
+\r
+}\r
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/SelectParserHandler.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/SelectParserHandler.java
new file mode 100644 (file)
index 0000000..2d55dbc
--- /dev/null
@@ -0,0 +1,106 @@
+/*******************************************************************************\r
+ * Copyright (c) 2010 Ericsson\r
+ * \r
+ * All rights reserved. This program and the accompanying materials are\r
+ * made available under the terms of the Eclipse Public License v1.0 which\r
+ * accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ * \r
+ * Contributors:\r
+ *   Patrick Tasse - Initial API and implementation\r
+ *******************************************************************************/\r
+\r
+package org.eclipse.linuxtools.tmf.ui.views.project.handlers;\r
+\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.resources.IResource;\r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.StructuredSelection;\r
+import org.eclipse.linuxtools.tmf.event.TmfEvent;\r
+import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;\r
+import org.eclipse.linuxtools.tmf.signal.TmfExperimentSelectedSignal;\r
+import org.eclipse.linuxtools.tmf.signal.TmfTraceParserUpdatedSignal;\r
+import org.eclipse.linuxtools.tmf.trace.ITmfTrace;\r
+import org.eclipse.linuxtools.tmf.ui.parsers.ParserProviderManager;\r
+import org.eclipse.linuxtools.tmf.ui.views.project.ProjectView;\r
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfExperimentNode;\r
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfTraceNode;\r
+import org.eclipse.ui.IWorkbenchPage;\r
+import org.eclipse.ui.IWorkbenchWindow;\r
+import org.eclipse.ui.PlatformUI;\r
+\r
+/**\r
+ * <b><u>OpenTraceHandler</u></b>\r
+ * <p>\r
+ */\r
+public class SelectParserHandler extends AbstractHandler {\r
+\r
+    private TmfTraceNode fTrace = null;\r
+    private ProjectView fProjectView = null;\r
+\r
+    // ------------------------------------------------------------------------\r
+    // Validation\r
+    // ------------------------------------------------------------------------\r
+\r
+    public boolean isEnabled() {\r
+        \r
+        // Check if we are closing down\r
+        IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();\r
+        if (window == null)\r
+            return false;\r
+\r
+        // Check if a trace is selected\r
+        IWorkbenchPage page = window.getActivePage();\r
+        if (!(page.getActivePart() instanceof ProjectView))\r
+            return false;\r
+        fProjectView = (ProjectView) page.getActivePart();\r
+\r
+        // Check if a trace is selected\r
+        ISelection selection = page.getSelection(ProjectView.ID);\r
+        if (selection instanceof StructuredSelection) {\r
+            Object element = ((StructuredSelection) selection).getFirstElement();\r
+            fTrace = (element instanceof TmfTraceNode) ? (TmfTraceNode) element : null;\r
+        }\r
+\r
+        return (fTrace != null);\r
+    }\r
+\r
+    // ------------------------------------------------------------------------\r
+    // Execution\r
+    // ------------------------------------------------------------------------\r
+\r
+    @SuppressWarnings("unchecked")\r
+       public Object execute(ExecutionEvent event) throws ExecutionException {\r
+        IResource resource = fTrace.getResource();\r
+        if (fTrace.getParent() instanceof TmfExperimentNode) {\r
+            resource = fTrace.getProject().getTracesFolder().getTraceForLocation(resource.getLocation()).getResource();\r
+        }\r
+        String parser = event.getParameter("org.eclipse.linuxtools.tmf.ui.commandparameter.project.trace.selectparser.parser");\r
+        try {\r
+            resource.setPersistentProperty(ParserProviderManager.PARSER_PROPERTY, parser);\r
+            fProjectView.broadcast(new TmfTraceParserUpdatedSignal(fProjectView, resource));\r
+            fTrace.getProject().refresh();\r
+            \r
+            TmfExperiment<TmfEvent> currentExperiment = (TmfExperiment<TmfEvent>) TmfExperiment.getCurrentExperiment();\r
+            if (currentExperiment != null) {\r
+                for (int i = 0; i < currentExperiment.getTraces().length; i++) {\r
+                    ITmfTrace trace = currentExperiment.getTraces()[i];\r
+                    if (resource.getLocation().toOSString().equals(trace.getPath())) {\r
+                        ITmfTrace newTrace = ParserProviderManager.getTrace(resource);\r
+                        if (newTrace != null) {\r
+                            currentExperiment.getTraces()[i] = newTrace;\r
+                            fProjectView.broadcast(new TmfExperimentSelectedSignal<TmfEvent>(new Object(), currentExperiment));\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+        } catch (CoreException e) {\r
+            e.printStackTrace();\r
+        }\r
+        return null;\r
+    }\r
+\r
+}\r
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/SelectTracesHandler.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/handlers/SelectTracesHandler.java
new file mode 100644 (file)
index 0000000..054d950
--- /dev/null
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.linuxtools.tmf.ui.views.project.ProjectView;
+import org.eclipse.linuxtools.tmf.ui.views.project.dialogs.AddTraceWizard;
+import org.eclipse.linuxtools.tmf.ui.views.project.model.TmfExperimentNode;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * <b><u>SelectTracesHandler</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class SelectTracesHandler extends AbstractHandler {
+
+       private TmfExperimentNode fExperiment = null;
+
+       // ------------------------------------------------------------------------
+       // Validation
+       // ------------------------------------------------------------------------
+
+       public boolean isEnabled() {
+
+               // Check if we are closing down
+               IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+               if (window == null)
+                       return false;
+
+               // Check if we are in the Project View
+               IWorkbenchPage page = window.getActivePage();
+               if (!(page.getActivePart() instanceof ProjectView))
+                       return false;
+
+               // Check that an experiment is selected
+               ISelection selection = page.getSelection(ProjectView.ID);
+               if (selection instanceof StructuredSelection) {
+                       Object element = ((StructuredSelection) selection).getFirstElement();
+                       fExperiment = (element instanceof TmfExperimentNode) ? (TmfExperimentNode) element : null;
+               }
+
+               return (fExperiment != null);
+       }
+
+       // ------------------------------------------------------------------------
+       // Execution
+       // ------------------------------------------------------------------------
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+
+               // Open the trace addition wizard
+               IWorkbench workbench = PlatformUI.getWorkbench();
+               Shell shell = workbench.getActiveWorkbenchWindow().getShell();
+
+               AddTraceWizard wizard = new AddTraceWizard(fExperiment.getProject(), fExperiment);
+               wizard.init(PlatformUI.getWorkbench(), null);
+               WizardDialog dialog = new WizardDialog(shell, wizard);
+               dialog.open();
+
+               return null;
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/ITmfProjectTreeNode.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/ITmfProjectTreeNode.java
new file mode 100644 (file)
index 0000000..e890a57
--- /dev/null
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.model;
+
+import java.util.List;
+
+/**
+ * <b><u>ITmfProjectTreeNode</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ * TODO: Make ITmfProjectTreeNode extends IAdaptable
+ */
+public interface ITmfProjectTreeNode {
+
+       public String getName();
+
+       public ITmfProjectTreeNode getParent();
+
+       public boolean hasChildren();
+       
+       public List<ITmfProjectTreeNode> getChildren();
+       
+       public void removeChild(ITmfProjectTreeNode child);
+
+       public void removeChildren();
+
+       public void refreshChildren();
+
+       public void refresh();
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfExperimentFolderNode.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfExperimentFolderNode.java
new file mode 100644 (file)
index 0000000..90d59a7
--- /dev/null
@@ -0,0 +1,130 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.model;
+
+import java.lang.reflect.Array;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+
+/**
+ * <b><u>TmfExperimentFolderNode</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class TmfExperimentFolderNode extends TmfProjectTreeNode {
+
+       private final IFolder fExperimentFolder;
+
+       // ------------------------------------------------------------------------
+       // Constructors
+       // ------------------------------------------------------------------------
+
+       public TmfExperimentFolderNode(IFolder folder) {
+               this(null, folder);
+       }
+
+       public TmfExperimentFolderNode(ITmfProjectTreeNode parent, IFolder folder) {
+               super(parent);
+               fExperimentFolder = folder;
+       }
+
+       // ------------------------------------------------------------------------
+       // TmfProjectTreeNode
+       // ------------------------------------------------------------------------
+
+       public String getName() {
+               return fExperimentFolder.getName();
+       }
+
+       @Override
+       public void refreshChildren() {
+               try {
+                       IResource[] resources = fExperimentFolder.members();
+                       for (IResource resource : resources) {
+                               if (resource instanceof IFolder) {
+                                       TmfExperimentNode node = find(resource.getName());
+                                       if (node == null) {
+                                               node = new TmfExperimentNode(this, (IFolder) resource);
+                                               fChildren.add(node);
+                                       }
+                               }
+                       }
+               for (ITmfProjectTreeNode node : fChildren) {
+                       if (exists(node.getName(), resources)) {
+                               node.refreshChildren();
+                       }
+                       else {
+                               fChildren.remove(node);
+                       }
+               }
+               } catch (CoreException e) {
+               }
+       }
+
+       private TmfExperimentNode find(String name) {
+               for (ITmfProjectTreeNode node : fChildren) {
+                       if (node instanceof TmfExperimentNode && node.getName().equals(name)) {
+                               return (TmfExperimentNode) node;
+                       }
+               }
+               return null;
+       }
+
+       private boolean exists(String name, IResource[] resources) {
+        for (IResource resource : resources) {
+                       if (resource.getName().equals(name))
+                               return true;
+        }
+               return false;
+       }
+
+       // ------------------------------------------------------------------------
+       // Accessors
+       // ------------------------------------------------------------------------
+
+       /**
+        * @return
+        */
+       public TmfProjectNode getProject() {
+               return (TmfProjectNode) getParent();
+       }
+
+       /**
+        * @return
+        */
+       public IFolder getFolder() {
+               return fExperimentFolder;
+       }
+
+       /**
+        * @return
+        */
+       public TmfExperimentNode[] getExperiments() {
+               TmfExperimentNode[] result = (TmfExperimentNode[]) Array.newInstance(TmfExperimentNode.class, fChildren.size());
+               return fChildren.toArray(result);
+       }
+
+       // ------------------------------------------------------------------------
+       // Modifiers
+       // ------------------------------------------------------------------------
+
+//     No longer needed: handled by the IResourceChangeListener in the View
+       public void addExperiment(IFolder experiment) {
+//             TmfExperimentNode node = new TmfExperimentNode(this, experiment);
+//             fChildren.add(node);
+//             refresh();
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfExperimentNode.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfExperimentNode.java
new file mode 100644 (file)
index 0000000..43e7196
--- /dev/null
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.model;
+
+import java.lang.reflect.Array;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+
+/**
+ * <b><u>TmfExperimentNode</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class TmfExperimentNode extends TmfProjectTreeNode {
+
+       private final IFolder fExperiment;
+
+       // ------------------------------------------------------------------------
+       // Constructors
+       // ------------------------------------------------------------------------
+
+       public TmfExperimentNode(IFolder resource) {
+               this(null, resource);
+       }
+       
+       public TmfExperimentNode(ITmfProjectTreeNode parent, IFolder folder) {
+               super(parent);
+               fExperiment = folder;
+       }
+       
+       // ------------------------------------------------------------------------
+       // TmfProjectTreeNode
+       // ------------------------------------------------------------------------
+
+       public String getName() {
+               return fExperiment.getName();
+       }
+
+       @Override
+       public void refreshChildren() {
+               try {
+                       IResource[] resources = fExperiment.members(0);
+                       for (IResource resource : resources) {
+                               TmfTraceNode node = find(resource.getName());
+                               if (node == null) {
+                                       node = new TmfTraceNode(this, resource);
+                                       fChildren.add(node);
+                               }
+                       }
+               for (ITmfProjectTreeNode node : fChildren) {
+                       if (!exists(node.getName(), resources)) {
+                               fChildren.remove(node);
+                       }
+               }
+               } catch (CoreException e) {
+               }
+       }
+
+       private TmfTraceNode find(String name) {
+               for (ITmfProjectTreeNode node : fChildren) {
+                       if (node instanceof TmfTraceNode && node.getName().equals(name)) {
+                               return (TmfTraceNode) node;
+                       }
+               }
+               return null;
+       }
+
+       private boolean exists(String name, IResource[] resources) {
+        for (IResource resource : resources) {
+                       if (resource.getName().equals(name))
+                               return true;
+        }
+               return false;
+       }
+
+       // ------------------------------------------------------------------------
+       // Modifiers
+       // ------------------------------------------------------------------------
+
+//     No longer needed: handled by the IResourceChangeListener in the View
+       public void addTrace(IResource trace) {
+//             TmfTraceNode node = new TmfTraceNode(this, trace);
+//             fChildren.add(node);
+//             refresh();
+       }
+
+       // ------------------------------------------------------------------------
+       // Accessors
+       // ------------------------------------------------------------------------
+
+       /**
+        * @return
+        */
+       public IFolder getFolder() {
+               return fExperiment;
+       }
+
+       /**
+        * @return
+        */
+       public TmfTraceNode[] getTraces() {
+               TmfTraceNode[] result = (TmfTraceNode[]) Array.newInstance(TmfTraceNode.class, fChildren.size());
+               return fChildren.toArray(result);
+       }
+
+       /**
+        * @return
+        */
+       public TmfProjectNode getProject() {
+               return (TmfProjectNode) getParent().getParent();
+       }
+
+}
\ No newline at end of file
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectContentProvider.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectContentProvider.java
new file mode 100644 (file)
index 0000000..96e7362
--- /dev/null
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.model;
+
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+/**
+ * <b><u>TmfProjectContentProvider</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+ public class TmfProjectContentProvider implements ITreeContentProvider {
+
+        public Object[] getChildren(Object parentElement) {
+               return ((ITmfProjectTreeNode) parentElement).getChildren().toArray();
+        }
+
+       public Object getParent(Object element) {
+               return ((ITmfProjectTreeNode) element).getParent();
+       }
+
+       public boolean hasChildren(Object element) {
+               return ((ITmfProjectTreeNode) element).hasChildren();
+       }
+
+       public Object[] getElements(Object inputElement) {
+               if (inputElement instanceof TmfProjectRoot) {
+                       return ((TmfProjectRoot) inputElement).getChildren().toArray();
+               }
+        return null;
+       }
+
+       public void dispose() {
+               // TODO Auto-generated method stub
+       }
+
+       public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+               // TODO Auto-generated method stub
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectLabelProvider.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectLabelProvider.java
new file mode 100644 (file)
index 0000000..bc8f0a4
--- /dev/null
@@ -0,0 +1,173 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.model;
+
+import java.net.URL;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.linuxtools.tmf.ui.TmfUiPlugin;
+import org.eclipse.linuxtools.tmf.ui.TmfUiPreferenceInitializer;
+import org.eclipse.linuxtools.tmf.ui.parsers.ParserProviderManager;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * <b><u>TmfProjectLabelProvider</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ * TODO: Find proper icons for traces and experiments
+ */
+public class TmfProjectLabelProvider implements ILabelProvider {
+
+       private final String fTraceIconFile      = "icons/events_view.gif";
+//     private final String fExperimentIconFile = "icons/garland16.png";
+
+       private final Image fOpenedProjectIcon;
+       private final Image fClosedProjectIcon;
+       private final Image fFolderIcon;
+    private final Image fTraceIcon;
+    private final Image fUnknownTraceIcon;
+       private final Image fExperimentIcon;
+
+       /**
+        * 
+        */
+       public TmfProjectLabelProvider() {
+
+               fOpenedProjectIcon = PlatformUI.getWorkbench().getSharedImages().getImage(org.eclipse.ui.ide.IDE.SharedImages.IMG_OBJ_PROJECT);
+               fClosedProjectIcon = PlatformUI.getWorkbench().getSharedImages().getImage(org.eclipse.ui.ide.IDE.SharedImages.IMG_OBJ_PROJECT_CLOSED);
+               fFolderIcon  = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
+
+               fTraceIcon = loadIcon(fTraceIconFile);
+               fUnknownTraceIcon = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_LCL_LINKTO_HELP);
+               fExperimentIcon = fFolderIcon; // loadIcon(fExperimentIconFile);
+       }
+
+       private Image loadIcon(String url) {
+               TmfUiPlugin plugin = TmfUiPlugin.getDefault();
+               Image icon = plugin.getImageRegistry().get(url);
+               if (icon == null) {
+                       URL imageURL = plugin.getBundle().getEntry(url);
+                       ImageDescriptor descriptor = ImageDescriptor.createFromURL(imageURL);
+                       icon = descriptor.createImage();
+                       plugin.getImageRegistry().put(url, icon);
+               }
+               return icon;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+        */
+       public Image getImage(Object element) {
+
+               if (element instanceof TmfProjectNode) {
+                       TmfProjectNode project = (TmfProjectNode) element;
+                       if (project.isOpen()) {
+                       IEclipsePreferences node = new InstanceScope().getNode(TmfUiPlugin.PLUGIN_ID);
+                       if (node.get(TmfUiPreferenceInitializer.ACTIVE_PROJECT_PREFERENCE, TmfUiPreferenceInitializer.ACTIVE_PROJECT_DEFAULT)
+                               .equals(project.getName())) {
+                           return fTraceIcon; //PATA placeholder image should be a highlighted open project
+                       } else {
+                           return fOpenedProjectIcon;
+                       }
+                       } else {
+                           return fClosedProjectIcon;
+                       }
+               }
+
+               if (element instanceof TmfTraceFolderNode) {
+                       return fFolderIcon;
+               }
+
+               if (element instanceof TmfTraceNode) {
+                   try {
+                       TmfTraceNode trace = (TmfTraceNode) element;
+                       IResource resource = trace.getResource();
+                       if (trace.getParent() instanceof TmfExperimentNode) {
+                           TmfExperimentNode experiment = (TmfExperimentNode)trace.getParent();
+                           TmfTraceFolderNode traceFolder = experiment.getProject().getTracesFolder();
+                           resource = traceFolder.getFolder().findMember(resource.getName());
+                       }
+
+                if (resource != null && resource.getPersistentProperty(ParserProviderManager.PARSER_PROPERTY) != null) {
+                    return fTraceIcon;
+                }
+            } catch (CoreException e) {
+                e.printStackTrace();
+            }
+            return fUnknownTraceIcon;
+               }
+
+               if (element instanceof TmfExperimentFolderNode) {
+                       return fFolderIcon;
+               }
+
+               if (element instanceof TmfExperimentNode) {
+                       return fExperimentIcon;
+               }
+
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+        */
+       public String getText(Object element) {
+               ITmfProjectTreeNode node = (ITmfProjectTreeNode) element;
+               String label = node.getName();
+               if (node instanceof TmfTraceFolderNode      || 
+                       node instanceof TmfExperimentFolderNode ||
+                       node instanceof TmfExperimentNode)
+               {
+                       label += " [" + node.getChildren().size() + "]";
+               }
+               return label;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+        */
+       public void addListener(ILabelProviderListener listener) {
+               // TODO Auto-generated method stub
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+        */
+       public void dispose() {
+               // TODO Auto-generated method stub
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
+        */
+       public boolean isLabelProperty(Object element, String property) {
+               // TODO Auto-generated method stub
+               return false;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+        */
+       public void removeListener(ILabelProviderListener listener) {
+               // TODO Auto-generated method stub
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectNode.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectNode.java
new file mode 100644 (file)
index 0000000..74ea1d2
--- /dev/null
@@ -0,0 +1,203 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.linuxtools.tmf.ui.views.project.TmfProjectNature;
+
+/**
+ * <b><u>TmfProjectNode</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class TmfProjectNode extends TmfProjectTreeNode {
+
+       public static final String TRACE_FOLDER_NAME = "Traces";
+       public static final String EXPER_FOLDER_NAME = "Experiments";
+
+       private final IProject fProject;
+       private boolean fIsTmfProject;
+       private boolean fIsOpen;
+       private TmfTraceFolderNode fTracesFolder;
+       private TmfExperimentFolderNode fExperimentsFolder;
+
+       // ------------------------------------------------------------------------
+       // Constructors
+       // ------------------------------------------------------------------------
+
+       public TmfProjectNode(IProject project) {
+               this(null, project);
+       }
+
+       public TmfProjectNode(ITmfProjectTreeNode parent, IProject project) {
+               super(parent);
+               fProject = project;
+               updateState();
+       }
+
+       // ------------------------------------------------------------------------
+       // TmfProjectTreeNode
+       // ------------------------------------------------------------------------
+
+       public String getName() {
+               return fProject.getName();
+       }
+
+       @Override
+       public void refreshChildren() {
+
+               if (!(fIsOpen && fIsTmfProject))
+                       return;
+
+               try {
+                       IResource[] resources = fProject.members();
+                       for (IResource resource : resources) {
+                               if (resource.getType() == IResource.FOLDER) {
+                                       String name = resource.getName();
+                                       if (name.equals(TRACE_FOLDER_NAME) && !isIncluded(true, name, fChildren)) {
+                                               fTracesFolder = new TmfTraceFolderNode(this, (IFolder) resource);
+                                               fChildren.add(fTracesFolder);
+                                       } else
+                                       if (name.equals(EXPER_FOLDER_NAME) && !isIncluded(false, name, fChildren)) {
+                                               fExperimentsFolder = new TmfExperimentFolderNode(this, (IFolder) resource);
+                                               fChildren.add(fExperimentsFolder);
+                                       }
+                               }
+                       }
+               List<ITmfProjectTreeNode> toRemove = new ArrayList<ITmfProjectTreeNode>();
+               for (ITmfProjectTreeNode node : fChildren) {
+                       if (exists(node.getName(), resources)) {
+                               node.refreshChildren();
+                       }
+                       else {
+                               toRemove.add(node);
+                       }
+               }
+               for (ITmfProjectTreeNode node : toRemove) {
+                       fChildren.remove(node);
+               }
+               
+               } catch (CoreException e) {
+               }
+       }
+
+       private boolean isIncluded(boolean isTraces, String name, List<ITmfProjectTreeNode> list) {
+               boolean found = false;
+               for (ITmfProjectTreeNode node : list) {
+                       if (node instanceof TmfTraceFolderNode && isTraces) {
+                               found |= node.getName().equals(name);
+                       } else
+                       if (node instanceof TmfExperimentFolderNode && !isTraces) {
+                               found |= node.getName().equals(name);
+                       }
+               }
+               return found;
+       }
+
+       private boolean exists(String name, IResource[] resources) {
+        for (IResource resource : resources) {
+                       if (resource.getName().equals(name))
+                               return true;
+        }
+               return false;
+       }
+
+       // ------------------------------------------------------------------------
+       // Modifiers
+       // ------------------------------------------------------------------------
+
+       public void openProject() {
+               try {
+                       fProject.open(null);
+                       updateState();
+                       refreshChildren();
+               } catch (CoreException e) {
+                       e.printStackTrace();
+               }
+       }
+
+       public void closeProject() {
+               try {
+                       fProject.close(null);
+                       updateState();
+                       removeChildren();
+               } catch (CoreException e) {
+                       e.printStackTrace();
+               }
+       }
+
+       private boolean isTmfProject(IProject project) {
+               boolean result = false;
+               if (project != null && project.isAccessible()) {
+                       try {
+                               result = project.hasNature(TmfProjectNature.ID);
+                       } catch (CoreException e) {
+                       }
+               }
+               return result;
+       }
+
+       public void updateState() {
+               fIsOpen = (fProject != null) ? fProject.isAccessible() : false;
+               if (!fIsOpen) {
+                   removeChildren();
+               }
+               fIsTmfProject = isTmfProject(fProject);
+       }
+
+       // ------------------------------------------------------------------------
+       // Accessors
+       // ------------------------------------------------------------------------
+
+       /**
+        * @return
+        */
+       public boolean isTmfProject() {
+               return fIsTmfProject;
+       }
+
+       /**
+        * @return
+        */
+       public boolean isOpen() {
+               return fIsOpen;
+       }
+
+       /**
+        * @return
+        */
+       public IProject getProject() {
+               return fProject;
+       }
+
+       /**
+        * @return
+        */
+       public TmfTraceFolderNode getTracesFolder() {
+               return fTracesFolder;
+       }
+
+       /**
+        * @return
+        */
+       public TmfExperimentFolderNode getExperimentsFolder() {
+               return fExperimentsFolder;
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectRoot.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectRoot.java
new file mode 100644 (file)
index 0000000..be3d62b
--- /dev/null
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectNature;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.linuxtools.tmf.ui.views.project.ProjectView;
+import org.eclipse.linuxtools.tmf.ui.views.project.TmfProjectNature;
+
+/**
+ * <b><u>TmfProjectRoot</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class TmfProjectRoot extends TmfProjectTreeNode {
+
+       private final ProjectView fView;
+       
+       // ------------------------------------------------------------------------
+       // Constructors
+       // ------------------------------------------------------------------------
+
+       public TmfProjectRoot(ProjectView view) {
+               super(null);
+               fView = view;
+               refreshChildren();
+       }
+
+       @Override
+       public void refresh() {
+               fView.refresh();
+       }
+
+       // ------------------------------------------------------------------------
+       // TmfProjectTreeNode
+       // ------------------------------------------------------------------------
+
+       public String getName() {
+               return null;
+       }
+
+       @Override
+       public void refreshChildren() {
+        IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+        IProject[] projects = root.getProjects();
+        for (IProject project : projects) {
+            if (!project.isOpen() || isTmfProject(project)) {
+               TmfProjectNode node = find(project.getName());
+               if (node == null) {
+                       node = new TmfProjectNode(this, project);
+                       fChildren.add(node);
+               } else {
+                       node.updateState();
+               }
+            }
+        }
+       List<ITmfProjectTreeNode> toRemove = new ArrayList<ITmfProjectTreeNode>();
+               for (ITmfProjectTreeNode node : fChildren) {
+                       if (exists(node.getName(), projects)) {
+                               node.refreshChildren();
+                       } else {
+                       toRemove.add(node);
+                       }
+        }
+               for (ITmfProjectTreeNode node : toRemove) {
+                       fChildren.remove(node);
+               }
+       }
+
+       private TmfProjectNode find(String name) {
+               for (ITmfProjectTreeNode node : fChildren) {
+                       if (node instanceof TmfProjectNode && node.getName().equals(name)) {
+                               return (TmfProjectNode) node;
+                       }
+               }
+               return null;
+       }
+
+       private boolean exists(String name, IProject[] projects) {
+        for (IProject project : projects) {
+                       if (project.getName().equals(name) && (!project.isOpen() || isTmfProject(project)))
+                               return true;
+        }
+               return false;
+       }
+
+       private boolean isTmfProject(IProject project) {
+           if (project.isOpen()) {
+               IProjectNature nature;
+            try {
+                nature = project.getNature(TmfProjectNature.ID);
+                if (nature instanceof TmfProjectNature) {
+                    return true;
+                }
+            } catch (CoreException e) {
+                e.printStackTrace();
+            }
+           }
+           return false;
+       }
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectTreeNode.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfProjectTreeNode.java
new file mode 100644 (file)
index 0000000..a137c77
--- /dev/null
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <b><u>TmfProjectTreeNode</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public abstract class TmfProjectTreeNode implements ITmfProjectTreeNode {
+
+       protected ITmfProjectTreeNode fParent = null;
+       protected List<ITmfProjectTreeNode> fChildren = null;
+
+       // ------------------------------------------------------------------------
+       // Constructor
+       // ------------------------------------------------------------------------
+
+       public TmfProjectTreeNode(ITmfProjectTreeNode parent) {
+               fParent = parent;
+               fChildren = new ArrayList<ITmfProjectTreeNode>();
+       }
+
+       @Override
+       public String toString() {
+               return getName();
+       }
+       
+       // ------------------------------------------------------------------------
+       // ITmfProjectTreeNode
+       // ------------------------------------------------------------------------
+
+       public ITmfProjectTreeNode getParent() {
+               return fParent;
+       }
+
+       public boolean hasChildren() {
+               return fChildren.size() > 0;
+       }
+
+       public List<ITmfProjectTreeNode> getChildren() {
+               return fChildren;
+       }
+
+       public abstract void refreshChildren();
+
+       public void refresh() {
+               fParent.refresh();
+       }
+
+       public void removeChild(ITmfProjectTreeNode child) {
+        for (ITmfProjectTreeNode node : fChildren) {
+               if (node == child) {
+                       node.removeChildren();
+                       // We can do it since we are returning right away
+                       fChildren.remove(node);
+                       return;
+               }
+        }
+       }
+
+       public void removeChildren() {
+        for (ITmfProjectTreeNode node : fChildren) {
+                       node.removeChildren();
+        }
+               fChildren.clear();
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfTraceFolderNode.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfTraceFolderNode.java
new file mode 100644 (file)
index 0000000..c1cf883
--- /dev/null
@@ -0,0 +1,142 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.model;
+
+import java.lang.reflect.Array;
+import java.util.Iterator;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+
+/**
+ * <b><u>TmfTraceFolderNode</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class TmfTraceFolderNode extends TmfProjectTreeNode {
+
+       private final IFolder fTraceFolder;
+
+       // ------------------------------------------------------------------------
+       // Constructors
+       // ------------------------------------------------------------------------
+
+       public TmfTraceFolderNode(IFolder folder) {
+               this(null, folder);
+       }
+
+       public TmfTraceFolderNode(ITmfProjectTreeNode parent, IFolder folder) {
+               super(parent);
+               fTraceFolder = folder;
+       }
+
+       // ------------------------------------------------------------------------
+       // TmfProjectTreeNode
+       // ------------------------------------------------------------------------
+
+       public String getName() {
+               return fTraceFolder.getName();
+       }
+
+       @Override
+       public void refreshChildren() {
+               try {
+                       IResource[] resources = fTraceFolder.members();
+                       for (IResource resource : resources) {
+                               TmfTraceNode node = find(resource.getName());
+                               if (node == null) {
+                                       node = new TmfTraceNode(this, resource);
+                                       fChildren.add(node);
+                               }
+                       }
+                       Iterator<ITmfProjectTreeNode> iterator = fChildren.iterator();
+                       while (iterator.hasNext()) {
+                               ITmfProjectTreeNode node = iterator.next();
+                       if (!exists(node.getName(), resources)) {
+                               iterator.remove();
+                       }
+                       }
+               } catch (CoreException e) {
+               }
+       }
+
+       private TmfTraceNode find(String name) {
+               for (ITmfProjectTreeNode node : fChildren) {
+                       if (node instanceof TmfTraceNode && node.getName().equals(name)) {
+                               return (TmfTraceNode) node;
+                       }
+               }
+               return null;
+       }
+
+       private boolean exists(String name, IResource[] resources) {
+        for (IResource resource : resources) {
+                       if (resource.getName().equals(name))
+                               return true;
+        }
+               return false;
+       }
+
+       // ------------------------------------------------------------------------
+       // Accessors
+       // ------------------------------------------------------------------------
+
+       /**
+        * @return
+        */
+       public TmfProjectNode getProject() {
+               return (TmfProjectNode) getParent();
+       }
+
+       /**
+        * @return
+        */
+       public IFolder getFolder() {
+               return fTraceFolder;
+       }
+
+       /**
+        * @return
+        */
+       public TmfTraceNode[] getTraces() {
+               TmfTraceNode[] result = (TmfTraceNode[]) Array.newInstance(TmfTraceNode.class, fChildren.size());
+               return fChildren.toArray(result);
+       }
+
+    /**
+     * @return
+     */
+       public TmfTraceNode getTraceForLocation(IPath location) {
+           for (ITmfProjectTreeNode node : fChildren) {
+               TmfTraceNode trace = (TmfTraceNode) node;
+               if (trace.getResource().getLocation().equals(location)) {
+                   return trace;
+               }
+           }
+           return null;
+       }
+       
+       // ------------------------------------------------------------------------
+       // Modifiers
+       // ------------------------------------------------------------------------
+
+//     No longer needed: handled by the IResourceChangeListener in the View
+       public void addTrace(IFolder trace) {
+//             TmfTraceNode node = new TmfTraceNode(this, trace);
+//             fChildren.add(node);
+//             refresh();
+       }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfTraceNode.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/model/TmfTraceNode.java
new file mode 100644 (file)
index 0000000..e81f18d
--- /dev/null
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.ui.views.project.model;
+
+import org.eclipse.core.resources.IResource;
+
+/**
+ * <b><u>TmfTraceNode</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class TmfTraceNode extends TmfProjectTreeNode {
+       
+       private final IResource fTrace;
+
+       // ------------------------------------------------------------------------
+       // Constructors
+       // ------------------------------------------------------------------------
+
+       public TmfTraceNode(IResource trace) {
+               this(null, trace);
+       }
+
+       public TmfTraceNode(ITmfProjectTreeNode parent, IResource trace) {
+               super(parent);
+               fTrace = trace;
+       }
+
+       // ------------------------------------------------------------------------
+       // TmfProjectTreeNode
+       // ------------------------------------------------------------------------
+
+       public String getName() {
+               return fTrace.getName();
+       }
+
+       @Override
+       public void refreshChildren() {
+       }
+
+       // ------------------------------------------------------------------------
+       // Accessors
+       // ------------------------------------------------------------------------
+
+       /**
+        * @return
+        */
+       public TmfProjectNode getProject() {
+        ITmfProjectTreeNode node = this;
+           while (node != null) {
+               node = node.getParent();
+               if (node instanceof TmfProjectNode) {
+                   return (TmfProjectNode) node;
+               }
+           }
+               return null;
+       }
+
+       /**
+        * @return
+        */
+       public IResource getResource() {
+               return fTrace;
+       }
+
+}
index 37961d5c40599f21761020568563085320a642e6..6feaf0bb8a0948bc165dc2971af1fd6a4845a24f 100644 (file)
@@ -1,3 +1,18 @@
+2010-07-12  Francois Chouinard  <fchouinard@gmail.com>
+
+       * src/org/eclipse/linuxtools/tmf/signal/TmfTraceClosedSignal.java: New file.
+       * src/org/eclipse/linuxtools/tmf/signal/TmfTraceOpenedSignal.java: New file.
+       * src/org/eclipse/linuxtools/tmf/signal/TmfTraceParserUpdatedSignal.java: New file.
+       * src/org/eclipse/linuxtools/tmf/signal/TmfTraceSelectedSignal.java: New file.
+       * META-INF/MANIFEST.MF: Added a dependency on org.eclipse.core.resources
+       * src/org/eclipse/linuxtools/tmf/experiment/TmfExperiment.java (seekEvent): Commented out useless statements
+       * src/org/eclipse/linuxtools/tmf/trace/ITmfContext.java: Added a constant
+       * src/org/eclipse/linuxtools/tmf/trace/ITmfTrace.java: Added APIs
+       * src/org/eclipse/linuxtools/tmf/trace/TmfLocation.java: Added validation on location
+       * src/org/eclipse/linuxtools/tmf/trace/TmfTrace.java (getRank): Added
+       (indexTrace): Cleaned up warning
+       (queueLongRequest): Added background process handling
+
 2010-07-08  Francois Chouinard  <fchouinard@gmail.com>
 
        * src/org/eclipse/linuxtools/tmf/trace/TmfTrace.java (indexTrace): New method + renamed a constant
index 2ea69c6057ec3a0237a02f52a0a36f3f9f54c6d7..91ccc4c681b007ff0db7a4ab0cc14550e0bdb04e 100644 (file)
@@ -5,7 +5,8 @@ Bundle-SymbolicName: org.eclipse.linuxtools.tmf
 Bundle-Version: 0.2.0.qualifier
 Bundle-Activator: org.eclipse.linuxtools.tmf.TmfCorePlugin
 Bundle-Vendor: %Bundle-Vendor
-Require-Bundle: org.eclipse.core.runtime
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources;bundle-version="3.6.0"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.linuxtools.tmf,
index 8052d025ed510a577d423ab2bd5bb065bab94765..58b394d5c48133c3234eda5d62b029df6d5005ac 100644 (file)
@@ -378,7 +378,7 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
         TmfExperimentContext nextEventContext = new TmfExperimentContext(context);
         TmfEvent event = parseEvent(nextEventContext);
         while (event != null && event.getTimestamp().compareTo(timestamp, false) < 0) {
-            context = new TmfExperimentContext(nextEventContext);
+//            context = new TmfExperimentContext(nextEventContext);
                event = getNextEvent(nextEventContext);
         }
 
@@ -426,7 +426,7 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
         TmfEvent event = parseEvent(nextEventContext);
         long pos = context.getRank();
         while (event != null && pos++ <= rank) {
-            context = new TmfExperimentContext(nextEventContext);
+//            context = new TmfExperimentContext(nextEventContext);
                event = getNextEvent(nextEventContext);
         }
 
diff --git a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/signal/TmfTraceClosedSignal.java b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/signal/TmfTraceClosedSignal.java
new file mode 100644 (file)
index 0000000..9d72d09
--- /dev/null
@@ -0,0 +1,37 @@
+/*******************************************************************************\r
+ * Copyright (c) 2010 Ericsson\r
+ * \r
+ * All rights reserved. This program and the accompanying materials are\r
+ * made available under the terms of the Eclipse Public License v1.0 which\r
+ * accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ * \r
+ * Contributors:\r
+ *   Patrick Tasse - Initial API and implementation\r
+ *******************************************************************************/\r
+\r
+package org.eclipse.linuxtools.tmf.signal;\r
+\r
+import org.eclipse.linuxtools.tmf.trace.ITmfTrace;\r
+\r
+/**\r
+ * <b><u>TmfTraceClosedSignal</u></b>\r
+ */\r
+public class TmfTraceClosedSignal extends TmfSignal {\r
+\r
+    private final ITmfTrace fTrace;\r
+    \r
+    public TmfTraceClosedSignal(Object source, ITmfTrace trace) {\r
+        super(source);\r
+        fTrace = trace;\r
+    }\r
+\r
+    public ITmfTrace getTrace() {\r
+        return fTrace;\r
+    }\r
+\r
+    @Override\r
+    public String toString() {\r
+        return "[TmfTraceClosedSignal (" + fTrace.getName() + ")]";\r
+    }\r
+}\r
diff --git a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/signal/TmfTraceOpenedSignal.java b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/signal/TmfTraceOpenedSignal.java
new file mode 100644 (file)
index 0000000..d1c5d44
--- /dev/null
@@ -0,0 +1,37 @@
+/*******************************************************************************\r
+ * Copyright (c) 2010 Ericsson\r
+ * \r
+ * All rights reserved. This program and the accompanying materials are\r
+ * made available under the terms of the Eclipse Public License v1.0 which\r
+ * accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ * \r
+ * Contributors:\r
+ *   Patrick Tasse - Initial API and implementation\r
+ *******************************************************************************/\r
+\r
+package org.eclipse.linuxtools.tmf.signal;\r
+\r
+import org.eclipse.linuxtools.tmf.trace.ITmfTrace;\r
+\r
+/**\r
+ * <b><u>TmfTraceOpenedSignal</u></b>\r
+ */\r
+public class TmfTraceOpenedSignal extends TmfSignal {\r
+\r
+    private final ITmfTrace fTrace;\r
+    \r
+    public TmfTraceOpenedSignal(Object source, ITmfTrace trace) {\r
+        super(source);\r
+        fTrace = trace;\r
+    }\r
+\r
+    public ITmfTrace getTrace() {\r
+        return fTrace;\r
+    }\r
+\r
+    @Override\r
+    public String toString() {\r
+        return "[TmfTraceOpenedSignal (" + fTrace.getName() + ")]";\r
+    }\r
+}\r
diff --git a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/signal/TmfTraceParserUpdatedSignal.java b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/signal/TmfTraceParserUpdatedSignal.java
new file mode 100644 (file)
index 0000000..1c6d5c0
--- /dev/null
@@ -0,0 +1,37 @@
+/*******************************************************************************\r
+ * Copyright (c) 2010 Ericsson\r
+ * \r
+ * All rights reserved. This program and the accompanying materials are\r
+ * made available under the terms of the Eclipse Public License v1.0 which\r
+ * accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ * \r
+ * Contributors:\r
+ *   Patrick Tasse - Initial API and implementation\r
+ *******************************************************************************/\r
+\r
+package org.eclipse.linuxtools.tmf.signal;\r
+\r
+import org.eclipse.core.resources.IResource;\r
+\r
+/**\r
+ * <b><u>TmfTraceParserUpdatedSignal</u></b>\r
+ */\r
+public class TmfTraceParserUpdatedSignal extends TmfSignal {\r
+\r
+    private final IResource fTraceResource;\r
+    \r
+    public TmfTraceParserUpdatedSignal(Object source, IResource traceResource) {\r
+        super(source);\r
+        fTraceResource = traceResource;\r
+    }\r
+\r
+    public IResource getTraceResource() {\r
+        return fTraceResource;\r
+    }\r
+\r
+    @Override\r
+    public String toString() {\r
+        return "[TmfTraceParserUpdatedSignal (" + fTraceResource.getName() + ")]";\r
+    }\r
+}\r
diff --git a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/signal/TmfTraceSelectedSignal.java b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/signal/TmfTraceSelectedSignal.java
new file mode 100644 (file)
index 0000000..6612e49
--- /dev/null
@@ -0,0 +1,37 @@
+/*******************************************************************************\r
+ * Copyright (c) 2010 Ericsson\r
+ * \r
+ * All rights reserved. This program and the accompanying materials are\r
+ * made available under the terms of the Eclipse Public License v1.0 which\r
+ * accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ * \r
+ * Contributors:\r
+ *   Patrick Tasse - Initial API and implementation\r
+ *******************************************************************************/\r
+\r
+package org.eclipse.linuxtools.tmf.signal;\r
+\r
+import org.eclipse.linuxtools.tmf.trace.ITmfTrace;\r
+\r
+/**\r
+ * <b><u>TmfTraceSelectedSignal</u></b>\r
+ */\r
+public class TmfTraceSelectedSignal extends TmfSignal {\r
+\r
+    private final ITmfTrace fTrace;\r
+    \r
+    public TmfTraceSelectedSignal(Object source, ITmfTrace trace) {\r
+        super(source);\r
+        fTrace = trace;\r
+    }\r
+\r
+    public ITmfTrace getTrace() {\r
+        return fTrace;\r
+    }\r
+\r
+    @Override\r
+    public String toString() {\r
+        return "[TmfTraceSelectedSignal (" + fTrace.getName() + ")]";\r
+    }\r
+}\r
index 66fa11a93e1595d2d3401611c15216f2bae3ad72..44d3c5c292413296c460af7c5a6da6104b862a20 100644 (file)
@@ -20,6 +20,7 @@ package org.eclipse.linuxtools.tmf.trace;
 public interface ITmfContext {
 
        public long UNKNOWN_RANK = -2L;
+    public long INITIAL_RANK = -1L;
 
        public void setLocation(ITmfLocation<?> location);
        public ITmfLocation<?> getLocation();
index 5b349515a2a98cfefb64f961bf03fa0933fdc653..f524dbb2a4d11e10c18d220e98446155b6f8316b 100644 (file)
@@ -35,6 +35,11 @@ public interface ITmfTrace extends ITmfComponent {
         */
        public String getName();
 
+    /**
+     * @return the cache size 
+     */
+    public int getCacheSize();
+
        /**
         * @return the number of events in the trace
         */
@@ -61,6 +66,15 @@ public interface ITmfTrace extends ITmfComponent {
     public TmfContext seekEvent(TmfTimestamp timestamp);
     public TmfContext seekEvent(long rank);
 
+    /**
+     * Returns the rank of the first event with the requested timestamp.
+     * If none, returns the index of the next event (if any).
+     *  
+     * @param timestamp
+     * @return
+     */
+    public long getRank(TmfTimestamp timestamp);
+    
     /**
      * Return the event pointed by the supplied context (or null if
      * no event left) and updates the context to the next event.
index 40d736456ff2fcf26877639c2072d9ef0e68a4ad..258e68523084a9b550db341b84e54eadb0125080 100644 (file)
@@ -51,6 +51,8 @@ public class TmfLocation<L> implements ITmfLocation<L> {
 
        @Override
     public int hashCode() {
+           if (fLocation == null)
+               return -1;
                return fLocation.hashCode();
     }
 
@@ -59,11 +61,15 @@ public class TmfLocation<L> implements ITmfLocation<L> {
         if (!(other instanceof TmfLocation<?>))
                return false;
         TmfLocation<?> o = (TmfLocation<?>) other;
+        if (fLocation == null)
+            return (o.fLocation == null);
         return fLocation.equals(o.fLocation);
     }
 
        @Override
        public String toString() {
+           if (fLocation == null)
+               return "null";
                return fLocation.toString();
        }
 
@@ -73,10 +79,12 @@ public class TmfLocation<L> implements ITmfLocation<L> {
                TmfLocation<L> clone = null;
                try {
                        clone = (TmfLocation<L>) super.clone();
-                       Class<?> clazz  = this.fLocation.getClass(); 
-                       Method   method = clazz.getMethod("clone", new Class[0]);
-                       Object   duplic = method.invoke(this.fLocation, new Object[0]);
-                       clone.fLocation = (L) duplic;
+                       if (this.fLocation != null) {
+                           Class<?> clazz  = this.fLocation.getClass(); 
+                           Method   method = clazz.getMethod("clone", new Class[0]);
+                           Object   duplic = method.invoke(this.fLocation, new Object[0]);
+                           clone.fLocation = (L) duplic;
+                       }
                } catch (NoSuchMethodException e) { 
                      // exception suppressed 
                } catch (Exception e) {
index 667b594380c45452b7d6cb77e9e73bd263e61676..4b173631d777f5d5849388a846d24950cd8c89d8 100644 (file)
@@ -22,9 +22,12 @@ import org.eclipse.linuxtools.tmf.event.TmfEvent;
 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
 import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
 import org.eclipse.linuxtools.tmf.request.ITmfDataRequest;
+import org.eclipse.linuxtools.tmf.request.ITmfDataRequest.ExecutionType;
 import org.eclipse.linuxtools.tmf.request.ITmfEventRequest;
 import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
 import org.eclipse.linuxtools.tmf.request.TmfEventRequest;
+import org.eclipse.linuxtools.tmf.signal.TmfSignalHandler;
+import org.eclipse.linuxtools.tmf.signal.TmfTraceOpenedSignal;
 import org.eclipse.linuxtools.tmf.signal.TmfTraceUpdatedSignal;
 
 /**
@@ -167,6 +170,18 @@ public abstract class TmfTrace<T extends TmfEvent> extends TmfEventProvider<T> i
        return (Vector<TmfCheckpoint>) fCheckpoints.clone();
     }
 
+    /**
+     * Returns the rank of the first event with the requested timestamp.
+     * If none, returns the index of the next event (if any).
+     *  
+     * @param timestamp
+     * @return
+     */
+    public long getRank(TmfTimestamp timestamp) {
+        TmfContext context = seekEvent(timestamp);
+        return context.getRank();
+    }
+
     // ------------------------------------------------------------------------
     // Operators
     // ------------------------------------------------------------------------
@@ -371,7 +386,7 @@ public abstract class TmfTrace<T extends TmfEvent> extends TmfEventProvider<T> i
         * event).
         */
 
-       @SuppressWarnings({ "unchecked", "unused" })
+       @SuppressWarnings("unchecked")
        private void indexTrace(boolean waitForCompletion) {
 
                fCheckpoints.clear();
@@ -423,4 +438,113 @@ public abstract class TmfTrace<T extends TmfEvent> extends TmfEventProvider<T> i
        broadcast(new TmfTraceUpdatedSignal(this, this, new TmfTimeRange(fStartTime, fEndTime)));
        }
    
+       // ------------------------------------------------------------------------
+       // TmfDataProvider
+       // ------------------------------------------------------------------------
+
+       @Override
+    protected void queueLongRequest(final ITmfDataRequest<T> request) {
+
+        // TODO: Handle the data requests also...
+        if (!(request instanceof ITmfEventRequest<?>)) {
+            super.queueRequest(request);
+            return;
+        }
+
+        final TmfTrace<T> trace = this;
+        
+        Thread thread = new Thread() {
+            @Override
+            public void run() {
+                
+//              final long requestStart = System.nanoTime();
+
+                final Integer[] CHUNK_SIZE = new Integer[1];
+                CHUNK_SIZE[0] = fIndexPageSize + 1;
+                
+                final ITmfEventRequest<T> req = (ITmfEventRequest<T>) request;
+                
+                final Integer[] nbRead = new Integer[1];
+                nbRead[0] = 0;
+
+//              final TmfTimestamp[] timestamp = new TmfTimestamp[1];
+//              timestamp[0] = new TmfTimestamp(req.getRange().getStartTime());
+//              final TmfTimestamp endTS = req.getRange().getEndTime();
+
+                final Boolean[] isFinished = new Boolean[1];
+                isFinished[0] = Boolean.FALSE;
+
+                while (!isFinished[0]) {
+
+//                  TmfEventRequest<T> subRequest = new TmfEventRequest<T>(req.getDataType(), new TmfTimeRange(timestamp[0], endTS), 
+//                          requestedSize, req.getBlockize(), ExecutionType.LONG)
+                    TmfDataRequest<T> subRequest = new TmfDataRequest<T>(req.getDataType(), nbRead[0], CHUNK_SIZE[0],
+                            req.getBlockize(), ExecutionType.LONG)
+                    {
+//                      int count = 0;
+                        @Override
+                        public void handleData() {
+                            T[] data = getData();
+//                          if (count == 0) {
+//                              System.out.println("First event of the block: " + data[0].getTimestamp());
+//                          }
+//                          count++;
+//                          Tracer.trace("Ndx: " + ((TmfEvent) data[0]).getTimestamp());
+                            req.setData(data);
+                            req.handleData();
+                            if (fNbRead == CHUNK_SIZE[0]) {
+                                nbRead[0] += fNbRead;
+//                              System.out.println("fNbRead=" + fNbRead + ", count=" + count +", total=" + nbRead[0] + ", TS=" + data[0].getTimestamp());
+                            }
+                            if (fNbRead > CHUNK_SIZE[0]) {
+                                System.out.println("ERROR - Read too many events");
+                            }
+                        }
+                        @Override
+                        public void handleCompleted() {
+//                          System.out.println("Request completed at: " + timestamp[0]);
+                            if (fNbRead < CHUNK_SIZE[0]) {
+                                req.done();
+                                isFinished[0] = Boolean.TRUE;
+                                nbRead[0] += fNbRead;
+//                              System.out.println("fNbRead=" + fNbRead + ", count=" + count +", total=" + nbRead[0]);
+                            }
+                            super.handleCompleted();
+                        }
+                    };
+
+                    if (!isFinished[0]) {
+                        trace.queueRequest(subRequest);
+
+                        try {
+                            subRequest.waitForCompletion();
+//                          System.out.println("Finished at " + timestamp[0]);
+                        } catch (InterruptedException e) {
+                            e.printStackTrace();
+                        }
+
+//                      TmfTimestamp newTS = new TmfTimestamp(timestamp[0].getValue() + 1, timestamp[0].getScale(), timestamp[0].getPrecision());
+//                      timestamp[0] = newTS;
+                        CHUNK_SIZE[0] = fIndexPageSize;
+//                      System.out.println("New timestamp: " + timestamp[0]);
+                    }
+                }
+//              final long requestEnded = System.nanoTime();
+//              System.out.println("Background request completed. Elapsed= " + (requestEnded * 1.0 - requestStart) / 1000000000);
+            }
+        };
+        thread.start();
+    }
+
+       // ------------------------------------------------------------------------
+       // Signal handlers
+       // ------------------------------------------------------------------------
+
+       @TmfSignalHandler
+       public void traceOpened(TmfTraceOpenedSignal signal) {
+           ITmfTrace trace = signal.getTrace();
+           if (trace == this) {
+               indexTrace(false);
+           }
+       }
 }
This page took 0.102008 seconds and 5 git commands to generate.