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 45736 Details for
Bug 145123
Support for generic web-based repositories
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]
implemented externalization and fixed task opening
Clipboard-attachment (text/plain), 19.77 KB, created by
Eugene Kuleshov
on 2006-07-05 03:33:45 EDT
(
hide
)
Description:
implemented externalization and fixed task opening
Filename:
MIME Type:
Creator:
Eugene Kuleshov
Created:
2006-07-05 03:33:45 EDT
Size:
19.77 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.mylar.sandbox >Index: src/org/eclipse/mylar/internal/sandbox/web/WebQuery.java >=================================================================== >RCS file: /home/technology/org.eclipse.mylar/sandbox/org.eclipse.mylar.sandbox/src/org/eclipse/mylar/internal/sandbox/web/WebQuery.java,v >retrieving revision 1.1 >diff -u -r1.1 WebQuery.java >--- src/org/eclipse/mylar/internal/sandbox/web/WebQuery.java 23 Jun 2006 02:43:58 -0000 1.1 >+++ src/org/eclipse/mylar/internal/sandbox/web/WebQuery.java 5 Jul 2006 07:36:21 -0000 >@@ -25,7 +25,6 @@ > TaskList taskList, String repositoryUrl) { > super(description, taskList); > this.taskPrefix = taskPrefix; >- > this.regexp = regexp; > > setQueryUrl(queryUrl); >Index: src/org/eclipse/mylar/internal/sandbox/web/WebQueryWizardPage.java >=================================================================== >RCS file: /home/technology/org.eclipse.mylar/sandbox/org.eclipse.mylar.sandbox/src/org/eclipse/mylar/internal/sandbox/web/WebQueryWizardPage.java,v >retrieving revision 1.1 >diff -u -r1.1 WebQueryWizardPage.java >--- src/org/eclipse/mylar/internal/sandbox/web/WebQueryWizardPage.java 23 Jun 2006 02:43:58 -0000 1.1 >+++ src/org/eclipse/mylar/internal/sandbox/web/WebQueryWizardPage.java 5 Jul 2006 07:36:21 -0000 >@@ -11,6 +11,11 @@ > import java.util.regex.Matcher; > import java.util.regex.Pattern; > >+import org.eclipse.jface.bindings.keys.KeyStroke; >+import org.eclipse.jface.fieldassist.ContentProposalAdapter; >+import org.eclipse.jface.fieldassist.IContentProposal; >+import org.eclipse.jface.fieldassist.IContentProposalProvider; >+import org.eclipse.jface.fieldassist.TextContentAdapter; > import org.eclipse.jface.wizard.WizardPage; > import org.eclipse.mylar.provisional.tasklist.AbstractRepositoryQuery; > import org.eclipse.mylar.provisional.tasklist.MylarTaskListPlugin; >@@ -67,8 +72,8 @@ > this.query = query; > > setTitle("Create web query"); >- setDescription("http://subclipse.tigris.org/issues/buglist.cgi?issue_status=NEW;issue_status=STARTED;issue_status=REOPENED&order=issues.issue_id\n" + >- "<a href=\"show_bug.cgi\\?id\\=(.+?)\">.+?<span class=\"summary\">(.+?)</span>"); >+ setDescription("Specify URL for web page that show query results and regexp to extract id and description " + >+ repository.getUrl()); > } > > public void createControl(Composite parent) { >@@ -102,6 +107,7 @@ > preview.setText("Preview"); > preview.addSelectionListener(new SelectionAdapter() { > public void widgetSelected(final SelectionEvent e) { >+ webPage = null; > updatePreview(); > } > }); >@@ -118,7 +124,7 @@ > regexpLabel.setText("Regexp:"); > regexpLabel.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, true)); > >- regexpText = new Text(composite, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER); >+ regexpText = new Text(composite, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.WRAP); > GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); > gridData.heightHint = 39; > regexpText.setLayoutData(gridData); >@@ -129,6 +135,10 @@ > } > } > }); >+ >+ >+ ContentProposalAdapter adapter = new ContentProposalAdapter(regexpText, new TextContentAdapter(), >+ new RegExpProposalProvider(), KeyStroke.getInstance(SWT.CTRL, ' '), null); > > previewTable = new Table(sashForm, SWT.BORDER); > previewTable.setLinesVisible(true); >@@ -206,5 +216,50 @@ > } > return webPage; > } >+ >+ >+ /** >+ * Simple proposal provider for regexps >+ */ >+ private static final class RegExpProposalProvider implements IContentProposalProvider { >+ private static final String[] LABELS = { >+ "IssueZilla", >+ "GForge", >+ "Trac", >+ "Jira", >+ "vBulletin" >+ }; >+ private static final String[] PROPOSALS = { >+ "<a href=\"show_bug.cgi\\?id\\=(.+?)\">.+?<span class=\"summary\">(.+?)</span>", >+ "<a class=\"tracker\" href=\"/tracker/index.php\\?func=detail&aid=(.+?)&group_id=GROUP&atid=ATID\">(.+?)</a></td>", >+ "<td class=\"summary\"><a title=\"View ticket\" href=\"/project/ticket/(.+?)\">(.+?)</a></td>", >+ "<td class=\"nav summary\">\\s+?<a href=\"/browse/(.+?)\".+?>(.+?)</a>", >+ "<a href=\"showthread.php\\?.+?t=(\\d+?)\" id=\"thread_title_\\1\">(.+?)</a>" >+ }; >+ >+ public IContentProposal[] getProposals(String contents, int position) { >+ IContentProposal[] res = new IContentProposal[LABELS.length]; >+ for (int i = 0; i < LABELS.length; i++) { >+ final String label = LABELS[i]; >+ final String content = PROPOSALS[i]; >+ res[i] = new IContentProposal() { >+ public String getContent() { >+ return content; >+ } >+ public int getCursorPosition() { >+ return content.length(); >+ } >+ public String getDescription() { >+ return content; >+ } >+ public String getLabel() { >+ return label; >+ } >+ }; >+ } >+ return res; >+ } >+ } > > } >+ >Index: src/org/eclipse/mylar/internal/sandbox/web/WebRepositoryConnector.java >=================================================================== >RCS file: /home/technology/org.eclipse.mylar/sandbox/org.eclipse.mylar.sandbox/src/org/eclipse/mylar/internal/sandbox/web/WebRepositoryConnector.java,v >retrieving revision 1.4 >diff -u -r1.4 WebRepositoryConnector.java >--- src/org/eclipse/mylar/internal/sandbox/web/WebRepositoryConnector.java 23 Jun 2006 02:43:58 -0000 1.4 >+++ src/org/eclipse/mylar/internal/sandbox/web/WebRepositoryConnector.java 5 Jul 2006 07:36:21 -0000 >@@ -31,6 +31,7 @@ > import org.eclipse.jface.wizard.IWizard; > import org.eclipse.jface.wizard.WizardDialog; > import org.eclipse.mylar.internal.core.util.MylarStatusHandler; >+import org.eclipse.mylar.internal.tasklist.RetrieveTitleFromUrlJob; > import org.eclipse.mylar.internal.tasklist.ui.wizards.AbstractAddExistingTaskWizard; > import org.eclipse.mylar.internal.tasklist.ui.wizards.AbstractRepositorySettingsPage; > import org.eclipse.mylar.internal.tasklist.ui.wizards.ExistingTaskWizardPage; >@@ -88,15 +89,20 @@ > > // Support > >- public ITask createTaskFromExistingKey(TaskRepository repository, String id) { >+ public ITask createTaskFromExistingKey(TaskRepository repository, final String id) { > if(REPOSITORY_TYPE.equals(repository.getKind())) { >- String taskUrl = repository.getProperty(PROPERTY_TASK_PREFIX_URL) + id; >- String label = "#"+id; >- // TODO fetch the task description? >+ String taskPrefix = repository.getProperty(PROPERTY_TASK_PREFIX_URL); >+ >+ final WebTask task = new WebTask(id, id, taskPrefix, repository.getUrl()); >+ >+ RetrieveTitleFromUrlJob job = new RetrieveTitleFromUrlJob(taskPrefix+id) { >+ protected void setTitle(String pageTitle) { >+ task.setDescription(id+": "+pageTitle); >+ MylarTaskListPlugin.getTaskListManager().getTaskList().notifyLocalInfoChanged(task); >+ } >+ }; >+ job.schedule(); > >- String handle = AbstractRepositoryTask.getHandle(repository.getUrl(), id); >- WebTask task = new WebTask(handle, label, id); >- task.setUrl(taskUrl); > return task; > } > >@@ -150,7 +156,7 @@ > do { > String id = matcher.group(1); > String description = matcher.group(2); >- hits.add(new WebQueryHit(id, description, query.getRepositoryUrl())); >+ hits.add(new WebQueryHit(id, id+": "+description, ((WebQuery) query).getTaskPrefix(), query.getRepositoryUrl())); > } while(matcher.find()); > queryStatus.add(Status.OK_STATUS); > } >@@ -255,7 +261,22 @@ > > StringBuffer resource = new StringBuffer(); > String line; >- while((line = r.readLine())!=null) { >+ while(true) { >+ int retryCount = 0; >+ do { >+ if(retryCount>0) { >+ try { >+ Thread.sleep(1000L); >+ } catch (InterruptedException ex) { >+ // ignore >+ } >+ } >+ line = r.readLine(); >+ retryCount++; >+ } while(line==null && retryCount<5); >+ if(line==null) { >+ break; >+ } > resource.append(line).append("\n"); > } > return resource; >Index: src/org/eclipse/mylar/internal/sandbox/web/WebTask.java >=================================================================== >RCS file: /home/technology/org.eclipse.mylar/sandbox/org.eclipse.mylar.sandbox/src/org/eclipse/mylar/internal/sandbox/web/WebTask.java,v >retrieving revision 1.1 >diff -u -r1.1 WebTask.java >--- src/org/eclipse/mylar/internal/sandbox/web/WebTask.java 16 Jun 2006 18:34:08 -0000 1.1 >+++ src/org/eclipse/mylar/internal/sandbox/web/WebTask.java 5 Jul 2006 07:36:21 -0000 >@@ -21,17 +21,18 @@ > */ > public class WebTask extends AbstractRepositoryTask { > >- private String id; >+ private final String id; >+ private final String taskPrefix; >+ private final String repositoryUrl; > >- public WebTask(String handle, String label, String id) { >- super(handle, label, false); >+ public WebTask(String id, String label, String taskPrefix, String repositoryUrl) { >+ super(taskPrefix + id, label, false); > this.id = id; >+ this.taskPrefix = taskPrefix; >+ this.repositoryUrl = repositoryUrl; >+ setUrl(taskPrefix + id); > } > >- public String getId() { >- return this.id; >- } >- > public String getRepositoryKind() { > return WebRepositoryConnector.REPOSITORY_TYPE; > } >@@ -43,6 +44,19 @@ > public boolean isPersistentInWorkspace() { > return false; > } >- >+ >+ public String getTaskPrefix() { >+ return this.taskPrefix; >+ } >+ >+ public String getId() { >+ return this.id; >+ } >+ >+ @Override >+ public String getRepositoryUrl() { >+ return repositoryUrl; >+ } >+ > } > >Index: src/org/eclipse/mylar/internal/sandbox/web/WebQueryHit.java >=================================================================== >RCS file: /home/technology/org.eclipse.mylar/sandbox/org.eclipse.mylar.sandbox/src/org/eclipse/mylar/internal/sandbox/web/WebQueryHit.java,v >retrieving revision 1.1 >diff -u -r1.1 WebQueryHit.java >--- src/org/eclipse/mylar/internal/sandbox/web/WebQueryHit.java 23 Jun 2006 02:43:58 -0000 1.1 >+++ src/org/eclipse/mylar/internal/sandbox/web/WebQueryHit.java 5 Jul 2006 07:36:21 -0000 >@@ -10,6 +10,9 @@ > > import org.eclipse.mylar.provisional.tasklist.AbstractQueryHit; > import org.eclipse.mylar.provisional.tasklist.AbstractRepositoryTask; >+import org.eclipse.mylar.provisional.tasklist.ITask; >+import org.eclipse.mylar.provisional.tasklist.MylarTaskListPlugin; >+import org.eclipse.mylar.provisional.tasklist.TaskList; > > /** > * Represents issue returned by <code>WebQuery</code> >@@ -17,16 +20,18 @@ > * @author Eugene Kuleshov > */ > public class WebQueryHit extends AbstractQueryHit { >+ private final String taskPrefix; > > private AbstractRepositoryTask task; > > >- public WebQueryHit(String id, String description, String repositoryUrl) { >- super(repositoryUrl, description, Integer.parseInt(id)); >+ public WebQueryHit(String id, String description, String taskPrefix, String repositoryUrl) { >+ super(repositoryUrl, description, id); >+ this.taskPrefix = taskPrefix; > } > > public String getDescription() { >- return id + ": "+ description; >+ return description; > } > > public String getPriority() { >@@ -46,13 +51,30 @@ > } > > public AbstractRepositoryTask getOrCreateCorrespondingTask() { >- // TODO >- return null; >+ TaskList taskList = MylarTaskListPlugin.getTaskListManager().getTaskList(); >+ >+ ITask existingTask = taskList.getTask(getHandleIdentifier()); >+ if (existingTask instanceof WebTask) { >+ this.task = (WebTask) existingTask; >+ } else { >+ task = new WebTask(id, description, taskPrefix, repositoryUrl); >+ taskList.addTask(task); >+ } >+ return task; > } > > public void setHandleIdentifier(String id) { >- // TODO >+ task.setHandleIdentifier(id); >+ } >+ >+ @Override >+ public String getHandleIdentifier() { >+ return taskPrefix + getId(); > } > >+ public String getTaskPrefix() { >+ return this.taskPrefix; >+ } >+ > } > >Index: plugin.xml >=================================================================== >RCS file: /home/technology/org.eclipse.mylar/sandbox/org.eclipse.mylar.sandbox/plugin.xml,v >retrieving revision 1.20 >diff -u -r1.20 plugin.xml >--- plugin.xml 16 Jun 2006 18:34:08 -0000 1.20 >+++ plugin.xml 5 Jul 2006 07:36:21 -0000 >@@ -131,11 +131,9 @@ > id="org.eclipse.mylar.web.tasklist.repositories" > name="Generic web-based repository" > type="web"/> >- <!-- > <externalizer > class="org.eclipse.mylar.internal.sandbox.web.WebTaskExternalizer" > id="org.eclipse.mylar.web.tasklist.externalizer"/> >- --> > </extension> > > </plugin> >Index: src/org/eclipse/mylar/internal/sandbox/web/WebTaskExternalizer.java >=================================================================== >RCS file: src/org/eclipse/mylar/internal/sandbox/web/WebTaskExternalizer.java >diff -N src/org/eclipse/mylar/internal/sandbox/web/WebTaskExternalizer.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/mylar/internal/sandbox/web/WebTaskExternalizer.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,204 @@ >+/******************************************************************************* >+ * Copyright (c) 2004 - 2006 Mylar 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.mylar.internal.sandbox.web; >+ >+import org.eclipse.mylar.internal.tasklist.TaskExternalizationException; >+import org.eclipse.mylar.provisional.tasklist.AbstractQueryHit; >+import org.eclipse.mylar.provisional.tasklist.AbstractRepositoryQuery; >+import org.eclipse.mylar.provisional.tasklist.AbstractTaskContainer; >+import org.eclipse.mylar.provisional.tasklist.DelegatingTaskExternalizer; >+import org.eclipse.mylar.provisional.tasklist.ITask; >+import org.eclipse.mylar.provisional.tasklist.MylarTaskListPlugin; >+import org.eclipse.mylar.provisional.tasklist.TaskList; >+import org.w3c.dom.Document; >+import org.w3c.dom.Element; >+import org.w3c.dom.Node; >+import org.w3c.dom.NodeList; >+ >+/** >+ * Task externalizer for generic web based issue tracking systems >+ * >+ * @author Eugene Kuleshov >+ */ >+public class WebTaskExternalizer extends DelegatingTaskExternalizer { >+ >+ private static final String KEY_WEB = "Web"; >+ >+ private static final String KEY_WEB_CATEGORY = "WebQuery" + KEY_CATEGORY; >+ >+ private static final String KEY_WEB_QUERY_HIT = KEY_WEB + KEY_QUERY_HIT; >+ >+ private static final String KEY_WEB_QUERY = KEY_WEB + KEY_QUERY; >+ >+ private static final String KEY_WEB_ISSUE = "WebIssue"; >+ >+ private static final String KEY_REGEXP = "Regexp"; >+ >+ private static final String KEY_PREFIX = "TaskPrefix"; >+ >+ private static final String KEY_KEY = "Key"; >+ >+ >+ @Override >+ public boolean canReadQuery(Node node) { >+ return node.getNodeName().equals(KEY_WEB_QUERY); >+ } >+ >+ @Override >+ public boolean canCreateElementFor(AbstractRepositoryQuery category) { >+ return category instanceof WebQuery; >+ } >+ >+ @Override >+ public boolean canCreateElementFor(ITask task) { >+ return task instanceof WebTask; >+ } >+ >+ @Override >+ public boolean canReadQueryHit(Node node) { >+ return node.getNodeName().equals(getQueryHitTagName()); >+ } >+ >+ @Override >+ public Element createQueryElement(AbstractRepositoryQuery query, Document doc, Element parent) { >+ Element node = super.createQueryElement(query, doc, parent); >+ >+ if (query instanceof WebQuery) { >+ WebQuery webQuery = (WebQuery) query; >+ node.setAttribute(KEY_REGEXP, webQuery.getRegexp()); >+ node.setAttribute(KEY_PREFIX, webQuery.getTaskPrefix()); >+ } >+ >+ return node; >+ } >+ >+ @Override >+ public Element createQueryHitElement(AbstractQueryHit queryHit, Document doc, Element parent) { >+ Element node = doc.createElement(getQueryHitTagName()); >+ >+ node.setAttribute(KEY_KEY, queryHit.getId()); >+ node.setAttribute(KEY_NAME, queryHit.getDescription()); >+ // node.setAttribute(KEY_PREFIX, ((WebQueryHit) queryHit).getTaskPrefix()); >+ // node.setAttribute(KEY_REPOSITORY_URL, queryHit.getRepositoryUrl()); >+ >+ parent.appendChild(node); >+ return null; >+ } >+ >+ @Override >+ public Element createTaskElement(ITask task, Document doc, Element parent) { >+ Element node = super.createTaskElement(task, doc, parent); >+ node.setAttribute(KEY_KEY, ((WebTask) task).getId()); >+ node.setAttribute(KEY_NAME, ((WebTask) task).getDescription()); >+ node.setAttribute(KEY_PREFIX, ((WebTask) task).getTaskPrefix()); >+ node.setAttribute(KEY_REPOSITORY_URL, ((WebTask) task).getRepositoryUrl()); >+ return node; >+ } >+ >+ @Override >+ public ITask readTask(Node node, TaskList taskList, AbstractTaskContainer category, ITask parent) >+ throws TaskExternalizationException { >+ Element element = (Element) node; >+ >+ String id = null; >+ if (element.hasAttribute(KEY_KEY)) { >+ id = element.getAttribute(KEY_KEY); >+ } else { >+ throw new TaskExternalizationException("Id not stored for bug report"); >+ } >+ >+ String label; >+ if (element.hasAttribute(KEY_NAME)) { >+ label = element.getAttribute(KEY_NAME); >+ } else { >+ throw new TaskExternalizationException("Description not stored for bug report"); >+ } >+ >+ String prefix = null; >+ if (element.hasAttribute(KEY_PREFIX)) { >+ prefix = element.getAttribute(KEY_PREFIX); >+ } else { >+ throw new TaskExternalizationException("Prefix not stored for bug report"); >+ } >+ >+ String repositoryUrl = null; >+ if (element.hasAttribute(KEY_REPOSITORY_URL)) { >+ repositoryUrl = element.getAttribute(KEY_REPOSITORY_URL); >+ } else { >+ throw new TaskExternalizationException("Repository URL not stored for bug report"); >+ } >+ >+ WebTask task = new WebTask(id, label, prefix, repositoryUrl); >+ >+ readTaskInfo(task, taskList, element, parent, category); >+ return task; >+ } >+ >+ @Override >+ public AbstractRepositoryQuery readQuery(Node node, TaskList taskList) throws TaskExternalizationException { >+ Element element = (Element) node; >+ >+ String description = element.getAttribute(KEY_NAME); >+ String queryUrl = element.getAttribute(KEY_QUERY_STRING); >+ String taskPrefix = element.getAttribute(KEY_PREFIX); >+ String regexp = element.getAttribute(KEY_REGEXP); >+ String repositoryUrl = element.getAttribute(KEY_REPOSITORY_URL); >+ >+ AbstractRepositoryQuery query = new WebQuery(description, queryUrl, taskPrefix, regexp, >+ MylarTaskListPlugin.getTaskListManager().getTaskList(), repositoryUrl); >+ >+ boolean hasCaughtException = false; >+ NodeList list = node.getChildNodes(); >+ for (int i = 0; i < list.getLength(); i++) { >+ Node child = list.item(i); >+ try { >+ readQueryHit(child, taskList, query); >+ } catch (TaskExternalizationException e) { >+ hasCaughtException = true; >+ } >+ } >+ if (hasCaughtException) { >+ throw new TaskExternalizationException("Failed to load all hits"); >+ } >+ return query; >+ } >+ >+ @Override >+ public void readQueryHit(Node node, TaskList taskList, AbstractRepositoryQuery query) >+ throws TaskExternalizationException { >+ Element element = (Element) node; >+ >+ String id = element.getAttribute(KEY_KEY); >+ String description = element.getAttribute(KEY_NAME); >+ >+ WebQueryHit hit = new WebQueryHit(id, description, ((WebQuery) query).getTaskPrefix(), query.getRepositoryUrl()); >+ query.addHit(hit); >+ } >+ >+ @Override >+ public String getQueryTagNameForElement(AbstractRepositoryQuery query) { >+ return query instanceof WebQuery ? KEY_WEB_QUERY : ""; >+ } >+ >+ @Override >+ public String getCategoryTagName() { >+ return KEY_WEB_CATEGORY; >+ } >+ >+ @Override >+ public String getQueryHitTagName() { >+ return KEY_WEB_QUERY_HIT; >+ } >+ >+ @Override >+ public String getTaskTagName() { >+ return KEY_WEB_ISSUE; >+ } >+ >+}
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 145123
:
44702
|
45141
|
45184
|
45736
|
45811
|
45814
|
45892
|
46105
|
46185
|
46217
|
46219
|
46247
|
46300