Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 73863 Details for
Bug 189518
support import/export of Task List queries
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Query Import/Export UI (from context menu)
query-import-export-ui-context-menu.txt (text/plain), 17.60 KB, created by
Jevgeni Holodkov
on 2007-07-16 12:30:18 EDT
(
hide
)
Description:
Query Import/Export UI (from context menu)
Filename:
MIME Type:
Creator:
Jevgeni Holodkov
Created:
2007-07-16 12:30:18 EDT
Size:
17.60 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.mylyn.tasks.tests >Index: src/org/eclipse/mylyn/tasks/tests/QueryExportImportTest.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/QueryExportImportTest.java,v >retrieving revision 1.1 >diff -u -r1.1 QueryExportImportTest.java >--- src/org/eclipse/mylyn/tasks/tests/QueryExportImportTest.java 10 Jul 2007 20:00:48 -0000 1.1 >+++ src/org/eclipse/mylyn/tasks/tests/QueryExportImportTest.java 16 Jul 2007 16:30:29 -0000 >@@ -14,13 +14,11 @@ > import java.io.File; > import java.util.ArrayList; > import java.util.List; >-import java.util.Set; > > import junit.framework.TestCase; > > import org.eclipse.mylyn.tasks.core.AbstractRepositoryQuery; > import org.eclipse.mylyn.tasks.core.AbstractTaskListFactory; >-import org.eclipse.mylyn.tasks.core.TaskList; > import org.eclipse.mylyn.tasks.tests.connector.MockRepositoryQuery; > import org.eclipse.mylyn.tasks.tests.connector.MockTaskListFactory; > import org.eclipse.mylyn.tasks.ui.TasksUiPlugin; >@@ -69,11 +67,9 @@ > TasksUiPlugin.getTaskListManager().getTaskListWriter().writeQuery(query, outFile); > assertTrue(outFile.exists()); > >- TaskList taskList = TasksUiPlugin.getTaskListManager().resetTaskList(); >- > File inFile = new File(dest, "test-query.xml.zip"); >- TasksUiPlugin.getTaskListManager().getTaskListWriter().readQueries(taskList, inFile); >- Set<AbstractRepositoryQuery> queries = taskList.getQueries(); >+ List<AbstractRepositoryQuery> queries = TasksUiPlugin.getTaskListManager().getTaskListWriter().readQueries( >+ inFile); > assertEquals("1 Query is imported", 1, queries.size()); > } > >#P org.eclipse.mylyn.tasks.ui >Index: src/org/eclipse/mylyn/internal/tasks/ui/util/TaskListWriter.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TaskListWriter.java,v >retrieving revision 1.36 >diff -u -r1.36 TaskListWriter.java >--- src/org/eclipse/mylyn/internal/tasks/ui/util/TaskListWriter.java 10 Jul 2007 20:00:47 -0000 1.36 >+++ src/org/eclipse/mylyn/internal/tasks/ui/util/TaskListWriter.java 16 Jul 2007 16:30:30 -0000 >@@ -57,6 +57,7 @@ > * @author Mik Kersten > * @author Ken Sueda > * @author Rob Elves >+ * @author Jevgeni Holodkov > * > * TODO: move to core? > */ >@@ -338,8 +339,11 @@ > } > } > >- private void readQuery(TaskList taskList, Node child) { >- boolean wasRead = false; >+ /** >+ * Reads the Query from the specified Node. If taskList is not null, then also adds this query to the TaskList >+ */ >+ private AbstractRepositoryQuery readQuery(TaskList taskList, Node child) { >+ AbstractRepositoryQuery query = null; > for (AbstractTaskListFactory externalizer : externalizers) { > Set<String> queryTagNames = externalizer.getQueryElementNames(); > if (queryTagNames != null && queryTagNames.contains(child.getNodeName())) { >@@ -355,32 +359,41 @@ > label = childElement.getAttribute(DelegatingTaskExternalizer.KEY_LABEL); > } > >- AbstractRepositoryQuery query = externalizer.createQuery(repositoryUrl, >- queryString, label, childElement); >+ query = externalizer.createQuery(repositoryUrl, queryString, label, childElement); > if (query != null) { >- wasRead = true; > if (childElement.getAttribute(DelegatingTaskExternalizer.KEY_LAST_REFRESH) != null > && !childElement.getAttribute( > DelegatingTaskExternalizer.KEY_LAST_REFRESH).equals("")) { > query.setLastSynchronizedStamp(childElement.getAttribute(DelegatingTaskExternalizer.KEY_LAST_REFRESH)); > } >- taskList.internalAddQuery(query); > } >- NodeList queryChildren = child.getChildNodes(); >- for (int ii = 0; ii < queryChildren.getLength(); ii++) { >- Node queryNode = queryChildren.item(ii); >- try { >- delagatingExternalizer.readQueryHit((Element) queryNode, taskList, query); >- } catch (TaskExternalizationException e) { >- hasCaughtException = true; >+ >+ // add created Query to the TaskList and read QueryHits (Tasks related to the Query) >+ if (taskList != null) { >+ if (query != null) { >+ taskList.internalAddQuery(query); >+ } >+ >+ NodeList queryChildren = child.getChildNodes(); >+ for (int ii = 0; ii < queryChildren.getLength(); ii++) { >+ Node queryNode = queryChildren.item(ii); >+ try { >+ delagatingExternalizer.readQueryHit((Element) queryNode, taskList, query); >+ } catch (TaskExternalizationException e) { >+ hasCaughtException = true; >+ } > } > } >+ >+ > break; > } > } >- if (!wasRead) { >+ if (query == null) { > orphanedQueryNodes.add(child); > } >+ >+ return query; > } > > /** >@@ -507,14 +520,15 @@ > return; > } > >- public void readQueries(TaskList taskList, File inFile) { >+ public List<AbstractRepositoryQuery> readQueries(File inFile) { >+ List<AbstractRepositoryQuery> queries = new ArrayList<AbstractRepositoryQuery>(); > try { > if (!inFile.exists()) >- return; >+ return queries; > Document doc = openAsDOM(inFile); > if (doc == null) { > handleException(inFile, null, new TaskExternalizationException("TaskList was not well formed XML")); >- return; >+ return queries; > } > Element root = doc.getDocumentElement(); > readVersion = root.getAttribute(ATTRIBUTE_VERSION); >@@ -527,7 +541,10 @@ > Node child = list.item(i); > try { > if (child.getNodeName().endsWith(AbstractTaskListFactory.KEY_QUERY)) { >- readQuery(taskList, child); >+ AbstractRepositoryQuery query = readQuery(null, child); >+ if (query != null) { >+ queries.add(query); >+ } > } > } catch (Exception e) { > handleException(inFile, child, e); >@@ -540,9 +557,6 @@ > handleException(inFile, null, e); > } > >- if (!hasCaughtException) { >- // save new task list only if there were no exception! >- writeTaskList(taskList, inFile); >- } >+ return queries; > } > } >Index: src/org/eclipse/mylyn/tasks/ui/AbstractRepositoryConnectorUi.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/AbstractRepositoryConnectorUi.java,v >retrieving revision 1.39 >diff -u -r1.39 AbstractRepositoryConnectorUi.java >--- src/org/eclipse/mylyn/tasks/ui/AbstractRepositoryConnectorUi.java 10 Jul 2007 00:30:40 -0000 1.39 >+++ src/org/eclipse/mylyn/tasks/ui/AbstractRepositoryConnectorUi.java 16 Jul 2007 16:30:30 -0000 >@@ -44,6 +44,7 @@ > * > * @author Mik Kersten > * @author Eugene Kuleshov >+ * @author Jevgeni Holodkov > * @since 2.0 > */ > public abstract class AbstractRepositoryConnectorUi { >@@ -134,28 +135,11 @@ > } > > public void openEditQueryDialog(AbstractRepositoryQuery query) { >- try { >- TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository(query.getRepositoryKind(), >- query.getRepositoryUrl()); >- if (repository == null) >- return; >- >- IWizard wizard = this.getQueryWizard(repository, query); >- >- Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); >- if (wizard != null && shell != null && !shell.isDisposed()) { >- WizardDialog dialog = new WizardDialog(shell, wizard); >- dialog.create(); >- dialog.setTitle("Edit Repository Query"); >- dialog.setBlockOnOpen(true); >- if (dialog.open() == Dialog.CANCEL) { >- dialog.close(); >- return; >- } >- } >- } catch (Exception e) { >- StatusHandler.fail(e, e.getMessage(), true); >- } >+ openQueryDialog(query, "Edit Repository Query"); >+ } >+ >+ public void openImportQueryDialog(AbstractRepositoryQuery query) { >+ openQueryDialog(query, "Import Repository Query"); > } > > public IWizard getAddExistingTaskWizard(TaskRepository repository) { >@@ -237,4 +221,29 @@ > public String getKindLabel(String kindLabel) { > return null; > } >+ >+ protected void openQueryDialog(AbstractRepositoryQuery query, String dialogTitle) { >+ try { >+ TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository(query.getRepositoryKind(), >+ query.getRepositoryUrl()); >+ if (repository == null) >+ return; >+ >+ IWizard wizard = this.getQueryWizard(repository, query); >+ >+ Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); >+ if (wizard != null && shell != null && !shell.isDisposed()) { >+ WizardDialog dialog = new WizardDialog(shell, wizard); >+ dialog.create(); >+ dialog.setTitle(dialogTitle); >+ dialog.setBlockOnOpen(true); >+ if (dialog.open() == Dialog.CANCEL) { >+ dialog.close(); >+ return; >+ } >+ } >+ } catch (Exception e) { >+ StatusHandler.fail(e, e.getMessage(), true); >+ } >+ } > } >Index: plugin.xml >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/plugin.xml,v >retrieving revision 1.254 >diff -u -r1.254 plugin.xml >--- plugin.xml 7 Jul 2007 01:38:37 -0000 1.254 >+++ plugin.xml 16 Jul 2007 16:30:30 -0000 >@@ -99,7 +99,7 @@ > class="org.eclipse.mylyn.internal.tasks.ui.wizards.TaskDataImportWizard" > icon="icons/eview16/task-list.gif" > id="org.eclipse.mylyn.tasks.ui.wizards.import" >- name="Task List"> >+ name="Task Data"> > <description> > Import task data files from file system. > </description> >@@ -342,7 +342,28 @@ > </or> > </enablement> > </action> >+ >+ <action >+ class="org.eclipse.mylyn.internal.tasks.ui.actions.QueryExportAction" >+ definitionId="org.eclipse.ui.query.export" >+ enablesFor="org.eclipse.mylyn.tasks.core.AbstractRepositoryQuery" >+ id="org.eclipse.mylyn.tasks.ui.actions.export.query" >+ label="Export Query..." >+ menubarPath="repository" >+ tooltip="Export Repository Query"> >+ </action> > >+ <action >+ class="org.eclipse.mylyn.internal.tasks.ui.actions.QueryImportAction" >+ definitionId="org.eclipse.ui.query.import" >+ enablesFor="*" >+ icon="icons/etool16/import.gif" >+ id="org.eclipse.mylyn.tasks.ui.actions.import.query" >+ label="Import Query..." >+ menubarPath="repository" >+ tooltip="Import Repository Query"> >+ </action> >+ > <action > class="org.eclipse.mylyn.internal.tasks.ui.actions.NewTaskAction" > enablesFor="*" >Index: src/org/eclipse/mylyn/internal/tasks/ui/actions/QueryImportAction.java >=================================================================== >RCS file: src/org/eclipse/mylyn/internal/tasks/ui/actions/QueryImportAction.java >diff -N src/org/eclipse/mylyn/internal/tasks/ui/actions/QueryImportAction.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/mylyn/internal/tasks/ui/actions/QueryImportAction.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,79 @@ >+/******************************************************************************* >+ * Copyright (c) 2004, 2007 Mylyn project committers and others. >+ * 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 >+ *******************************************************************************/ >+ >+package org.eclipse.mylyn.internal.tasks.ui.actions; >+ >+import java.io.File; >+import java.util.Iterator; >+import java.util.List; >+ >+import org.eclipse.jface.action.Action; >+import org.eclipse.jface.action.IAction; >+import org.eclipse.jface.dialogs.MessageDialog; >+import org.eclipse.jface.viewers.ISelection; >+import org.eclipse.mylyn.internal.tasks.ui.ITasksUiConstants; >+import org.eclipse.mylyn.tasks.core.AbstractRepositoryQuery; >+import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi; >+import org.eclipse.mylyn.tasks.ui.TasksUiPlugin; >+import org.eclipse.swt.widgets.FileDialog; >+import org.eclipse.swt.widgets.Shell; >+import org.eclipse.ui.IViewActionDelegate; >+import org.eclipse.ui.IViewPart; >+import org.eclipse.ui.PlatformUI; >+ >+/** >+ * Makes able to select an exported query file and import it back to the system. >+ * @author Jevgeni Holodkov >+ */ >+public class QueryImportAction extends Action implements IViewActionDelegate { >+ >+ protected ISelection selection; >+ >+ public void init(IViewPart view) { >+ // ignore >+ } >+ >+ public void run(IAction action) { >+ run(); >+ } >+ >+ public void selectionChanged(IAction action, ISelection selection) { >+ // ignore >+ } >+ >+ >+ public void run() { >+ Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); >+ FileDialog dialog = new FileDialog(shell); >+ dialog.setFilterExtensions(new String[] { "*" + ITasksUiConstants.FILE_EXTENSION }); >+ >+ String path = dialog.open(); >+ if (path != null) { >+ File file = new File(path); >+ if (file.isFile()) { >+ List<AbstractRepositoryQuery> queries = TasksUiPlugin.getTaskListManager() >+ .getTaskListWriter() >+ .readQueries(file); >+ >+ if (queries.size() > 0) { >+ for (Iterator<AbstractRepositoryQuery> it = queries.iterator(); it.hasNext();) { >+ AbstractRepositoryQuery repositoryQuery = it.next(); >+ AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getConnectorUi(repositoryQuery.getRepositoryKind()); >+ connectorUi.openImportQueryDialog(repositoryQuery); >+ } >+ } else { >+ MessageDialog.openError(shell, "Query Export Error", >+ "The specified file is not an exported query. Please, check that you have provided the correct file."); >+ return; >+ } >+ } >+ } >+ return; >+ } >+ >+} >Index: src/org/eclipse/mylyn/internal/tasks/ui/actions/QueryExportAction.java >=================================================================== >RCS file: src/org/eclipse/mylyn/internal/tasks/ui/actions/QueryExportAction.java >diff -N src/org/eclipse/mylyn/internal/tasks/ui/actions/QueryExportAction.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/mylyn/internal/tasks/ui/actions/QueryExportAction.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,92 @@ >+/******************************************************************************* >+ * Copyright (c) 2004, 2007 Mylyn project committers and others. >+ * 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 >+ *******************************************************************************/ >+ >+package org.eclipse.mylyn.internal.tasks.ui.actions; >+ >+import java.io.File; >+ >+import org.eclipse.jface.action.Action; >+import org.eclipse.jface.action.IAction; >+import org.eclipse.jface.dialogs.MessageDialog; >+import org.eclipse.jface.viewers.ISelection; >+import org.eclipse.jface.viewers.StructuredSelection; >+import org.eclipse.mylyn.internal.tasks.ui.ITasksUiConstants; >+import org.eclipse.mylyn.tasks.core.AbstractRepositoryQuery; >+import org.eclipse.mylyn.tasks.ui.TasksUiPlugin; >+import org.eclipse.swt.SWT; >+import org.eclipse.swt.widgets.FileDialog; >+import org.eclipse.swt.widgets.Shell; >+import org.eclipse.ui.IViewActionDelegate; >+import org.eclipse.ui.IViewPart; >+import org.eclipse.ui.PlatformUI; >+ >+/** >+ * Makes able to export selected query to the file system. >+ * @author Jevgeni Holodkov >+ */ >+public class QueryExportAction extends Action implements IViewActionDelegate { >+ >+ protected ISelection selection; >+ >+ public void init(IViewPart view) { >+ // ignore >+ } >+ >+ public void run(IAction action) { >+ run(getSelectedQuery(selection)); >+ } >+ >+ public void selectionChanged(IAction action, ISelection selection) { >+ this.selection = selection; >+ AbstractRepositoryQuery selectedQuery = getSelectedQuery(selection); >+ action.setEnabled(true); >+ if (selectedQuery != null) { >+ action.setEnabled(true); >+ } else { >+ action.setEnabled(false); >+ } >+ } >+ >+ protected AbstractRepositoryQuery getSelectedQuery(ISelection newSelection) { >+ if (selection instanceof StructuredSelection) { >+ Object selectedObject = ((StructuredSelection) selection).getFirstElement(); >+ if (selectedObject instanceof AbstractRepositoryQuery) { >+ return (AbstractRepositoryQuery) selectedObject; >+ } >+ } >+ return null; >+ } >+ >+ >+ >+ public void run(AbstractRepositoryQuery query) { >+ Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); >+ FileDialog dialog = new FileDialog(shell, SWT.PRIMARY_MODAL | SWT.SAVE); >+ dialog.setFilterExtensions(new String[] { "*" + ITasksUiConstants.FILE_EXTENSION }); >+ dialog.setFileName(query.getHandleIdentifier()); >+ >+ String path = dialog.open(); >+ if (path != null) { >+ File file = new File(path); >+ if (file.isDirectory()) { >+ MessageDialog.openError(shell, "Query Export Error", "Could not export query because specified location is a folder"); >+ return; >+ } >+ >+ // Prompt the user to confirm if save operation will cause an overwrite >+ if (file.exists()) { >+ if (!MessageDialog.openConfirm(shell, "Confirm File Replace", "The file " + file.getPath() >+ + " already exists. Do you want to overwrite it?")) { >+ return; >+ } >+ } >+ TasksUiPlugin.getTaskListManager().getTaskListWriter().writeQuery(query, file); >+ } >+ return; >+ } >+}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 189518
:
73436
|
73437
| 73863 |
73864
|
74255
|
74256
|
74262
|
74263
|
74311
|
75245
|
75246