* 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)
--- /dev/null
+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
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
bin.includes = META-INF/,\
.,\
icons/,\
- about.html,\
- plugin.properties
+ about.html,\
+ plugin.properties,\
+ plugin.xml
--- /dev/null
+<?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
--- /dev/null
+<?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
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;
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)
*/
super.stop(context);
}
+ public Image getImageFromPath(String path)
+ {
+ return AbstractUIPlugin.imageDescriptorFromPlugin(PLUGIN_ID, path).createImage();
+ }
+
}
--- /dev/null
+/*******************************************************************************\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
--- /dev/null
+/*******************************************************************************\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
--- /dev/null
+/*******************************************************************************\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
--- /dev/null
+/*******************************************************************************\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
--- /dev/null
+/*******************************************************************************\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
--- /dev/null
+/*******************************************************************************\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
--- /dev/null
+/*******************************************************************************\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
--- /dev/null
+/*******************************************************************************\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
--- /dev/null
+/*******************************************************************************\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
*
* 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>
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
@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)
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
--- /dev/null
+/*******************************************************************************
+ * 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
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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
--- /dev/null
+/*******************************************************************************
+ * 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);
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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
--- /dev/null
+/*******************************************************************************
+ * 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);
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+/*******************************************************************************\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
--- /dev/null
+/*******************************************************************************\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
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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();
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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();
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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
--- /dev/null
+/*******************************************************************************
+ * 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
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+}
--- /dev/null
+/*******************************************************************************
+ * 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();
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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();
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
+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
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,
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);
}
TmfEvent event = parseEvent(nextEventContext);
long pos = context.getRank();
while (event != null && pos++ <= rank) {
- context = new TmfExperimentContext(nextEventContext);
+// context = new TmfExperimentContext(nextEventContext);
event = getNextEvent(nextEventContext);
}
--- /dev/null
+/*******************************************************************************\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
--- /dev/null
+/*******************************************************************************\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
--- /dev/null
+/*******************************************************************************\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
--- /dev/null
+/*******************************************************************************\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
public interface ITmfContext {
public long UNKNOWN_RANK = -2L;
+ public long INITIAL_RANK = -1L;
public void setLocation(ITmfLocation<?> location);
public ITmfLocation<?> getLocation();
*/
public String getName();
+ /**
+ * @return the cache size
+ */
+ public int getCacheSize();
+
/**
* @return the number of events in the trace
*/
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.
@Override
public int hashCode() {
+ if (fLocation == null)
+ return -1;
return fLocation.hashCode();
}
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();
}
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) {
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;
/**
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
// ------------------------------------------------------------------------
* event).
*/
- @SuppressWarnings({ "unchecked", "unused" })
+ @SuppressWarnings("unchecked")
private void indexTrace(boolean waitForCompletion) {
fCheckpoints.clear();
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);
+ }
+ }
}