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 73436 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]
Core changes to support query import / export
query-import-export-core-1_0.txt (text/plain), 14.25 KB, created by
Jevgeni Holodkov
on 2007-07-10 12:07:44 EDT
(
hide
)
Description:
Core changes to support query import / export
Filename:
MIME Type:
Creator:
Jevgeni Holodkov
Created:
2007-07-10 12:07:44 EDT
Size:
14.25 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.mylyn.tasks.tests >Index: src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java,v >retrieving revision 1.27 >diff -u -r1.27 AllTasksTests.java >--- src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java 27 Jun 2007 21:30:09 -0000 1.27 >+++ src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java 10 Jul 2007 15:47:24 -0000 >@@ -50,6 +50,7 @@ > suite.addTestSuite(CommentQuoterTest.class); > suite.addTestSuite(OfflineStorageTest.class); > suite.addTestSuite(OfflineCachingStorageTest.class); >+ suite.addTestSuite(QueryExportImportTest.class); > // $JUnit-END$ > > // suite.addTestSuite(BackgroundSaveTest.class); >Index: src/org/eclipse/mylyn/tasks/tests/connector/MockTaskListFactory.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockTaskListFactory.java,v >retrieving revision 1.4 >diff -u -r1.4 MockTaskListFactory.java >--- src/org/eclipse/mylyn/tasks/tests/connector/MockTaskListFactory.java 26 Jun 2007 01:16:10 -0000 1.4 >+++ src/org/eclipse/mylyn/tasks/tests/connector/MockTaskListFactory.java 10 Jul 2007 15:47:24 -0000 >@@ -8,6 +8,10 @@ > > package org.eclipse.mylyn.tasks.tests.connector; > >+import java.util.HashSet; >+import java.util.Set; >+ >+import org.eclipse.mylyn.tasks.core.AbstractRepositoryQuery; > import org.eclipse.mylyn.tasks.core.AbstractTask; > import org.eclipse.mylyn.tasks.core.AbstractTaskListFactory; > import org.w3c.dom.Element; >@@ -16,11 +20,18 @@ > * @author Mik Kersten > */ > public class MockTaskListFactory extends AbstractTaskListFactory { >+ >+ private static final String QUERY_ELEMENT_NAME = "MockQuery"; > > @Override > public boolean canCreate(AbstractTask task) { > return task instanceof MockRepositoryTask; > } >+ >+ @Override >+ public boolean canCreate(AbstractRepositoryQuery query) { >+ return query instanceof MockRepositoryQuery; >+ } > > @Override > public AbstractTask createTask(String repositoryUrl, String taskId, String summary, Element element) { >@@ -33,6 +44,24 @@ > return "Mock" + AbstractTaskListFactory.KEY_TASK; > } > >+ @Override >+ public String getQueryElementName(AbstractRepositoryQuery query) { >+ return QUERY_ELEMENT_NAME; >+ } >+ >+ @Override >+ public AbstractRepositoryQuery createQuery(String repositoryUrl, String queryString, String label, Element element) { >+ MockRepositoryQuery query = new MockRepositoryQuery(label, queryString); >+ return query; >+ } >+ >+ @Override >+ public Set<String> getQueryElementNames() { >+ Set<String> names = new HashSet<String>(); >+ names.add(QUERY_ELEMENT_NAME); >+ return names; >+ } >+ > // private static final String KEY_MOCK = "Mock"; > // > // @Override >Index: src/org/eclipse/mylyn/tasks/tests/QueryExportImportTest.java >=================================================================== >RCS file: src/org/eclipse/mylyn/tasks/tests/QueryExportImportTest.java >diff -N src/org/eclipse/mylyn/tasks/tests/QueryExportImportTest.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/mylyn/tasks/tests/QueryExportImportTest.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,99 @@ >+/******************************************************************************* >+ * Copyright (c) 2004 - 2006 University Of British Columbia 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 >+ * >+ * Contributors: >+ * University Of British Columbia - initial API and implementation >+ *******************************************************************************/ >+ >+package org.eclipse.mylyn.tasks.tests; >+ >+import java.io.File; >+import java.io.UnsupportedEncodingException; >+import java.net.URLEncoder; >+import java.util.ArrayList; >+import java.util.List; >+import java.util.Set; >+ >+import org.eclipse.mylyn.context.core.ContextCorePlugin; >+import org.eclipse.mylyn.monitor.core.StatusHandler; >+import org.eclipse.mylyn.tasks.core.AbstractRepositoryQuery; >+import org.eclipse.mylyn.tasks.core.AbstractTaskListFactory; >+import org.eclipse.mylyn.tasks.core.QueryHitCollector; >+import org.eclipse.mylyn.tasks.core.TaskList; >+import org.eclipse.mylyn.tasks.core.TaskRepository; >+import org.eclipse.mylyn.tasks.tests.connector.MockRepositoryConnector; >+import org.eclipse.mylyn.tasks.tests.connector.MockRepositoryQuery; >+import org.eclipse.mylyn.tasks.tests.connector.MockTaskListFactory; >+import org.eclipse.mylyn.tasks.ui.TaskFactory; >+import org.eclipse.mylyn.tasks.ui.TaskListManager; >+import org.eclipse.mylyn.tasks.ui.TasksUiPlugin; >+ >+import junit.framework.TestCase; >+ >+public class QueryExportImportTest extends TestCase { >+ >+ private File dest; >+ >+ @Override >+ protected void setUp() throws Exception { >+ super.setUp(); >+ >+ removeFiles(new File(TasksUiPlugin.getDefault().getDataDirectory())); >+ >+ // Create test export destination directory >+ dest = new File(TasksUiPlugin.getDefault().getDataDirectory() + File.separator + "TestDir"); >+ if (dest.exists()) { >+ removeFiles(dest); >+ } else { >+ dest.mkdir(); >+ } >+ assertTrue(dest.exists()); >+ } >+ >+ @Override >+ protected void tearDown() throws Exception { >+ super.tearDown(); >+ >+ removeFiles(dest); >+ dest.delete(); >+ assertFalse(dest.exists()); >+ } >+ >+ public void testExportImportQuery() { >+ List<AbstractTaskListFactory> externalizers = new ArrayList<AbstractTaskListFactory>(); >+ externalizers.add(new MockTaskListFactory()); >+ TasksUiPlugin.getTaskListManager().getTaskListWriter().setDelegateExternalizers(externalizers); >+ >+ MockRepositoryQuery query = new MockRepositoryQuery("Test Query"); >+ >+ File outFile = new File(dest, "test-query.xml.zip"); >+ >+ 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(); >+ assertEquals("1 Query is imported", 1, queries.size()); >+ } >+ >+ >+ >+ private void removeFiles(File root) { >+ if (root.isDirectory()) { >+ for (File file : root.listFiles()) { >+ if (file.isDirectory()) { >+ removeFiles(file); >+ } >+ file.delete(); >+ } >+ } >+ } >+ >+} >#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.35 >diff -u -r1.35 TaskListWriter.java >--- src/org/eclipse/mylyn/internal/tasks/ui/util/TaskListWriter.java 10 Jul 2007 00:30:39 -0000 1.35 >+++ src/org/eclipse/mylyn/internal/tasks/ui/util/TaskListWriter.java 10 Jul 2007 15:47:26 -0000 >@@ -312,49 +312,8 @@ > for (int i = 0; i < list.getLength(); i++) { > Node child = list.item(i); > try { >- boolean wasRead = false; > if (child.getNodeName().endsWith(AbstractTaskListFactory.KEY_QUERY)) { >- for (AbstractTaskListFactory externalizer : externalizers) { >- Set<String> queryTagNames = externalizer.getQueryElementNames(); >- if (queryTagNames != null && queryTagNames.contains(child.getNodeName())) { >- Element childElement = (Element) child; >- // TODO: move this stuff into externalizer >- String repositoryUrl = childElement.getAttribute(DelegatingTaskExternalizer.KEY_REPOSITORY_URL); >- String queryString = childElement.getAttribute(AbstractTaskListFactory.KEY_QUERY_STRING); >- if (queryString.length() == 0) { // fallback for legacy >- queryString = childElement.getAttribute(AbstractTaskListFactory.KEY_QUERY); >- } >- String label = childElement.getAttribute(DelegatingTaskExternalizer.KEY_NAME); >- if (label.length() == 0) { // fallback for legacy >- label = childElement.getAttribute(DelegatingTaskExternalizer.KEY_LABEL); >- } >- >- AbstractRepositoryQuery 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; >- } >- } >- break; >- } >- } >- if (!wasRead) { >- orphanedQueryNodes.add(child); >- } >+ readQuery(taskList, child); > } > } catch (Exception e) { > handleException(inFile, child, e); >@@ -379,6 +338,51 @@ > } > } > >+ private void readQuery(TaskList taskList, Node child) { >+ boolean wasRead = false; >+ for (AbstractTaskListFactory externalizer : externalizers) { >+ Set<String> queryTagNames = externalizer.getQueryElementNames(); >+ if (queryTagNames != null && queryTagNames.contains(child.getNodeName())) { >+ Element childElement = (Element) child; >+ // TODO: move this stuff into externalizer >+ String repositoryUrl = childElement.getAttribute(DelegatingTaskExternalizer.KEY_REPOSITORY_URL); >+ String queryString = childElement.getAttribute(AbstractTaskListFactory.KEY_QUERY_STRING); >+ if (queryString.length() == 0) { // fallback for legacy >+ queryString = childElement.getAttribute(AbstractTaskListFactory.KEY_QUERY); >+ } >+ String label = childElement.getAttribute(DelegatingTaskExternalizer.KEY_NAME); >+ if (label.length() == 0) { // fallback for legacy >+ label = childElement.getAttribute(DelegatingTaskExternalizer.KEY_LABEL); >+ } >+ >+ AbstractRepositoryQuery 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; >+ } >+ } >+ break; >+ } >+ } >+ if (!wasRead) { >+ orphanedQueryNodes.add(child); >+ } >+ } >+ > /** > * Opens the specified XML file and parses it into a DOM Document. > * >@@ -407,7 +411,7 @@ > // Parse the content of the given file as an XML document > // and return a new DOM Document object. Also throws IOException > InputStream inputStream = null; >- if (inputFile.getName().endsWith(ITasksUiConstants.DEFAULT_TASK_LIST_FILE)) { >+ if (inputFile.getName().endsWith(ITasksUiConstants.FILE_EXTENSION)) { > // is zipped context > inputStream = new ZipInputStream(new FileInputStream(inputFile)); > ((ZipInputStream) inputStream).getNextEntry(); >@@ -475,4 +479,70 @@ > public List<AbstractTaskListFactory> getExternalizers() { > return externalizers; > } >+ >+ public void writeQuery(AbstractRepositoryQuery query, File outFile) { >+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); >+ DocumentBuilder db; >+ Document doc = null; >+ >+ try { >+ db = dbf.newDocumentBuilder(); >+ doc = db.newDocument(); >+ } catch (ParserConfigurationException e) { >+ StatusHandler.log(e, "could not create document"); >+ return; >+ } >+ >+ Element root = doc.createElement(ELEMENT_TASK_LIST); >+ root.setAttribute(ATTRIBUTE_VERSION, VALUE_VERSION); >+ >+ try { >+ delagatingExternalizer.createQueryElement(query, doc, root); >+ } catch (Throwable t) { >+ StatusHandler.fail(t, "Did not externalize: " + query.getSummary(), true); >+ } >+ >+ doc.appendChild(root); >+ writeDOMtoFile(doc, outFile); >+ return; >+ } >+ >+ public void readQueries(TaskList taskList, File inFile) { >+ try { >+ if (!inFile.exists()) >+ return; >+ Document doc = openAsDOM(inFile); >+ if (doc == null) { >+ handleException(inFile, null, new TaskExternalizationException("TaskList was not well formed XML")); >+ return; >+ } >+ Element root = doc.getDocumentElement(); >+ readVersion = root.getAttribute(ATTRIBUTE_VERSION); >+ >+ if (!readVersion.equals(VALUE_VERSION_1_0_0)) { >+ NodeList list = root.getChildNodes(); >+ >+ // read queries >+ for (int i = 0; i < list.getLength(); i++) { >+ Node child = list.item(i); >+ try { >+ if (child.getNodeName().endsWith(AbstractTaskListFactory.KEY_QUERY)) { >+ readQuery(taskList, child); >+ } >+ } catch (Exception e) { >+ handleException(inFile, child, e); >+ } >+ } >+ } else { >+ StatusHandler.log("version: " + readVersion + " not supported", this); >+ } >+ } catch (Exception e) { >+ handleException(inFile, null, e); >+ } >+ >+ if (!hasCaughtException) { >+ // save new task list only if there were no exception! >+ writeTaskList(taskList, inFile); >+ } >+ } > }
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