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 122193 Details for
Bug 260619
[web connector] support special processing for the task list with the web template
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]
connector.patch
web.tasks.patch (text/plain), 16.22 KB, created by
Hiroyuki
on 2009-01-10 18:10:56 EST
(
hide
)
Description:
connector.patch
Filename:
MIME Type:
Creator:
Hiroyuki
Created:
2009-01-10 18:10:56 EST
Size:
16.22 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.mylyn.web.tasks >Index: src/org/eclipse/mylyn/internal/web/tasks/WebRepositoryConnector.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.web.tasks/src/org/eclipse/mylyn/internal/web/tasks/WebRepositoryConnector.java,v >retrieving revision 1.61 >diff -u -r1.61 WebRepositoryConnector.java >--- src/org/eclipse/mylyn/internal/web/tasks/WebRepositoryConnector.java 13 Sep 2008 03:28:24 -0000 1.61 >+++ src/org/eclipse/mylyn/internal/web/tasks/WebRepositoryConnector.java 10 Jan 2009 23:06:35 -0000 >@@ -26,8 +26,6 @@ > import java.util.regex.Matcher; > import java.util.regex.Pattern; > >-import org.apache.commons.codec.EncoderException; >-import org.apache.commons.codec.net.URLCodec; > import org.apache.commons.httpclient.Header; > import org.apache.commons.httpclient.HostConfiguration; > import org.apache.commons.httpclient.HttpClient; >@@ -37,11 +35,14 @@ > import org.apache.commons.httpclient.methods.PostMethod; > import org.apache.commons.lang.StringEscapeUtils; > import org.eclipse.core.runtime.CoreException; >+import org.eclipse.core.runtime.IConfigurationElement; >+import org.eclipse.core.runtime.IExtension; >+import org.eclipse.core.runtime.IExtensionRegistry; > import org.eclipse.core.runtime.IProgressMonitor; > import org.eclipse.core.runtime.IStatus; >+import org.eclipse.core.runtime.Platform; > import org.eclipse.core.runtime.Status; > import org.eclipse.mylyn.commons.net.AbstractWebLocation; >-import org.eclipse.mylyn.commons.net.AuthenticationCredentials; > import org.eclipse.mylyn.commons.net.AuthenticationType; > import org.eclipse.mylyn.commons.net.WebLocation; > import org.eclipse.mylyn.commons.net.WebUtil; >@@ -57,6 +58,9 @@ > import org.eclipse.mylyn.tasks.core.sync.ISynchronizationSession; > import org.eclipse.mylyn.tasks.ui.TaskRepositoryLocationUiFactory; > import org.eclipse.mylyn.tasks.ui.TasksUi; >+import org.eclipse.mylyn.web.tasks.ITaskMapperUpdator; >+import org.eclipse.mylyn.web.tasks.WebRepositoryConstant; >+import org.eclipse.mylyn.web.tasks.WebRepositoryUtil; > > import com.sun.syndication.feed.module.DCModule; > import com.sun.syndication.feed.synd.SyndEntry; >@@ -69,54 +73,12 @@ > * > * @author Eugene Kuleshov > */ >-public class WebRepositoryConnector extends AbstractRepositoryConnector { >- >- public static final String REPOSITORY_TYPE = "web"; >- >- public static final String PROPERTY_TASK_CREATION_URL = "taskCreationUrl"; >- >- public static final String PROPERTY_TASK_URL = "taskUrl"; >- >- public static final String PROPERTY_QUERY_URL = "queryUrl"; >- >- public static final String PROPERTY_QUERY_METHOD = "queryMethod"; >- >- public static final String PROPERTY_QUERY_REGEXP = "queryPattern"; >- >- public static final String PROPERTY_LOGIN_FORM_URL = "loginFormUrl"; >- >- public static final String PROPERTY_LOGIN_TOKEN_REGEXP = "loginTokenPattern"; >- >- public static final String PROPERTY_LOGIN_REQUEST_METHOD = "loginRequestMethod"; >- >- public static final String PROPERTY_LOGIN_REQUEST_URL = "loginRequestUrl"; >- >- public static final String PARAM_PREFIX = "param_"; >- >- public static final String PARAM_SERVER_URL = "serverUrl"; >- >- public static final String PARAM_USER_ID = "userId"; >- >- public static final String PARAM_PASSWORD = "password"; >- >- public static final String PARAM_LOGIN_TOKEN = "loginToken"; >- >- public static final String REQUEST_POST = "POST"; >- >- public static final String REQUEST_GET = "GET"; >+public class WebRepositoryConnector extends AbstractRepositoryConnector implements WebRepositoryConstant { > > private static final String COMPLETED_STATUSES = "completed|fixed|resolved|invalid|verified|deleted|closed|done"; > >- public static final String KEY_TASK_PREFIX = "taskPrefix"; >- >- public static final String KEY_QUERY_TEMPLATE = "UrlTemplate"; >- >- public static final String KEY_QUERY_PATTERN = "Regexp"; >- > private static final String USER_AGENT = "WebTemplatesConnector"; > >- private final static Date DEFAULT_DATE = new Date(0); >- > @Override > public String getConnectorKind() { > return REPOSITORY_TYPE; >@@ -168,10 +130,10 @@ > @Override > public TaskData getTaskData(TaskRepository repository, String taskId, IProgressMonitor monitor) > throws CoreException { >- String taskPrefix = evaluateParams(repository.getProperty(PROPERTY_TASK_URL), repository); >+ String taskPrefix = WebRepositoryUtil.evaluateParams(repository.getProperty(PROPERTY_TASK_URL), repository); > TaskData taskData = createTaskData(repository, taskId); > TaskMapper mapper = new TaskMapper(taskData, true); >- mapper.setCreationDate(DEFAULT_DATE); >+ mapper.setCreationDate(WebRepositoryUtil.DEFAULT_DATE); > mapper.setSummary(taskId); > mapper.setTaskUrl(taskPrefix + taskId); > mapper.setValue(KEY_TASK_PREFIX, taskPrefix); >@@ -194,7 +156,7 @@ > // lookup repository using task prefix url > IRepositoryManager repositoryManager = TasksUi.getRepositoryManager(); > for (TaskRepository repository : repositoryManager.getRepositories(getConnectorKind())) { >- String taskUrl = evaluateParams(repository.getProperty(PROPERTY_TASK_URL), repository); >+ String taskUrl = WebRepositoryUtil.evaluateParams(repository.getProperty(PROPERTY_TASK_URL), repository); > if (taskUrl != null && !taskUrl.equals("") && url.startsWith(taskUrl)) { > return repository.getRepositoryUrl(); > } >@@ -205,7 +167,7 @@ > TaskRepository repository = repositoryManager.getRepository(query.getConnectorKind(), > query.getRepositoryUrl()); > if (repository != null) { >- String queryUrl = evaluateParams(query.getAttribute(KEY_TASK_PREFIX), // >+ String queryUrl = WebRepositoryUtil.evaluateParams(query.getAttribute(KEY_TASK_PREFIX), // > getQueryParams(query), repository); > if (queryUrl != null && !queryUrl.equals("") && url.startsWith(queryUrl)) { > return query.getRepositoryUrl(); >@@ -219,7 +181,7 @@ > Map<String, String> params = new LinkedHashMap<String, String>(); > Map<String, String> attributes = query.getAttributes(); > for (String name : attributes.keySet()) { >- if (name.startsWith(WebRepositoryConnector.PARAM_PREFIX)) { >+ if (name.startsWith(WebRepositoryConstant.PARAM_PREFIX)) { > params.put(name, attributes.get(name)); > } > } >@@ -234,7 +196,7 @@ > > IRepositoryManager repositoryManager = TasksUi.getRepositoryManager(); > for (TaskRepository repository : repositoryManager.getRepositories(getConnectorKind())) { >- String start = evaluateParams(repository.getProperty(PROPERTY_TASK_URL), repository); >+ String start = WebRepositoryUtil.evaluateParams(repository.getProperty(PROPERTY_TASK_URL), repository); > if (start != null && url.startsWith(start)) { > return url.substring(start.length()); > } >@@ -247,7 +209,7 @@ > IRepositoryManager repositoryManager = TasksUi.getRepositoryManager(); > TaskRepository repository = repositoryManager.getRepository(getConnectorKind(), repositoryUrl); > if (repository != null) { >- String prefix = evaluateParams(repository.getProperty(PROPERTY_TASK_URL), repository); >+ String prefix = WebRepositoryUtil.evaluateParams(repository.getProperty(PROPERTY_TASK_URL), repository); > return prefix + taskId; > } > return null; >@@ -257,16 +219,17 @@ > public IStatus performQuery(TaskRepository repository, IRepositoryQuery query, TaskDataCollector resultCollector, > ISynchronizationSession session, IProgressMonitor monitor) { > Map<String, String> queryParameters = getQueryParams(query); >- String queryUrl = evaluateParams(query.getUrl(), queryParameters, repository); >+ String queryUrl = WebRepositoryUtil.evaluateParams(query.getUrl(), queryParameters, repository); > try { > String content = fetchResource(queryUrl, queryParameters, repository); > > String taskPrefixAttribute = query.getAttribute(KEY_TASK_PREFIX); >- if (!Util.isPresent(taskPrefixAttribute)) { >+ if (!isPresent(taskPrefixAttribute)) { > return performRssQuery(content, monitor, resultCollector, repository); > } else { >- String taskPrefix = evaluateParams(taskPrefixAttribute, queryParameters, repository); >- String queryPattern = evaluateParams(query.getAttribute(KEY_QUERY_PATTERN), queryParameters, repository); >+ String taskPrefix = WebRepositoryUtil.evaluateParams(taskPrefixAttribute, queryParameters, repository); >+ String queryPattern = WebRepositoryUtil.evaluateParams(query.getAttribute(KEY_QUERY_PATTERN), >+ queryParameters, repository); > return performQuery(content, queryPattern, taskPrefix, monitor, resultCollector, repository); > } > } catch (IOException e) { >@@ -290,7 +253,7 @@ > @Override > public void updateTaskFromTaskData(TaskRepository repository, ITask task, TaskData taskData) { > TaskMapper mapper = new TaskMapper(taskData); >- if (Util.isPresent(mapper.getValue(KEY_TASK_PREFIX))) { >+ if (isPresent(mapper.getValue(KEY_TASK_PREFIX))) { > task.setAttribute(KEY_TASK_PREFIX, mapper.getValue(KEY_TASK_PREFIX)); > task.setTaskKey(task.getTaskId()); > } else { >@@ -300,8 +263,35 @@ > mapper.applyTo(task); > } > >+ private static ITaskMapperUpdator getTaskMapperUpdator(TaskRepository repository) { >+ String updatorID = repository.getProperty(PROPERTY_TASKMAPPER_UPDATOR); >+ if (updatorID != null && updatorID.length() > 0) { >+ IExtensionRegistry registry = Platform.getExtensionRegistry(); >+ IExtension[] extensions = registry.getExtensionPoint(EXTENSION_TASKMAPPER_UPDATOR).getExtensions(); >+ for (IExtension extension : extensions) { >+ IConfigurationElement[] elements = extension.getConfigurationElements(); >+ for (IConfigurationElement element : elements) { >+ if (element.getAttribute("id").equals(updatorID)) { >+ try { >+ Object obj = element.createExecutableExtension("class"); >+ if (obj instanceof ITaskMapperUpdator) { >+ return (ITaskMapperUpdator) obj; >+ } >+ } catch (CoreException e) { >+ String ee = e.toString(); >+ } >+ } >+ } >+ } >+ } >+ return null; >+ } >+ > public static IStatus performQuery(String resource, String regexp, String taskPrefix, IProgressMonitor monitor, > TaskDataCollector resultCollector, TaskRepository repository) { >+ >+ ITaskMapperUpdator updator = getTaskMapperUpdator(repository); >+ > NamedPattern p = new NamedPattern(regexp, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL > | Pattern.UNICODE_CASE | Pattern.CANON_EQ); > >@@ -324,7 +314,7 @@ > > TaskData data = createTaskData(repository, id); > TaskMapper mapper = new TaskMapper(data, true); >- mapper.setCreationDate(DEFAULT_DATE); >+ mapper.setCreationDate(WebRepositoryUtil.DEFAULT_DATE); > mapper.setTaskUrl(taskPrefix + id); > mapper.setSummary(description); > mapper.setValue(KEY_TASK_PREFIX, taskPrefix); >@@ -344,7 +334,7 @@ > > TaskData data = createTaskData(repository, id); > TaskMapper mapper = new TaskMapper(data, true); >- mapper.setCreationDate(DEFAULT_DATE); >+ mapper.setCreationDate(WebRepositoryUtil.DEFAULT_DATE); > mapper.setTaskUrl(taskPrefix + id); > mapper.setSummary(description); > mapper.setValue(KEY_TASK_PREFIX, taskPrefix); >@@ -355,10 +345,14 @@ > if (status != null) { > if (COMPLETED_STATUSES.contains(status.toLowerCase())) { > // TODO set actual completion date here >- mapper.setCompletionDate(DEFAULT_DATE); >+ mapper.setCompletionDate(WebRepositoryUtil.DEFAULT_DATE); > } > } > >+ if (updator != null) { >+ updator.update(mapper, repository, p, matcher); >+ } >+ > resultCollector.accept(data); > } > } >@@ -374,7 +368,7 @@ > } > > private static TaskData createTaskData(TaskRepository taskRepository, String id) { >- TaskData data = new TaskData(new TaskAttributeMapper(taskRepository), WebRepositoryConnector.REPOSITORY_TYPE, >+ TaskData data = new TaskData(new TaskAttributeMapper(taskRepository), WebRepositoryConstant.REPOSITORY_TYPE, > taskRepository.getRepositoryUrl(), id); > data.setPartial(true); > return data; >@@ -486,8 +480,10 @@ > return; > } > >- String loginFormUrl = evaluateParams(repository.getProperty(PROPERTY_LOGIN_FORM_URL), params, repository); >- String loginToken = evaluateParams(repository.getProperty(PROPERTY_LOGIN_TOKEN_REGEXP), params, repository); >+ String loginFormUrl = WebRepositoryUtil.evaluateParams(repository.getProperty(PROPERTY_LOGIN_FORM_URL), params, >+ repository); >+ String loginToken = WebRepositoryUtil.evaluateParams(repository.getProperty(PROPERTY_LOGIN_TOKEN_REGEXP), >+ params, repository); > if (isPresent(loginFormUrl) || isPresent(loginToken)) { > GetMethod method = new GetMethod(loginFormUrl); > // method.setFollowRedirects(false); >@@ -501,14 +497,15 @@ > } > } > >- String loginRequestUrl = evaluateParams(repository.getProperty(PROPERTY_LOGIN_REQUEST_URL), params, repository); >+ String loginRequestUrl = WebRepositoryUtil.evaluateParams(repository.getProperty(PROPERTY_LOGIN_REQUEST_URL), >+ params, repository); > requestResource(loginRequestUrl, client, hostConfiguration, getLoginMethod(params, repository)); > } > > public static HttpMethod getLoginMethod(Map<String, String> params, TaskRepository repository) { > String requestMethod = repository.getProperty(PROPERTY_LOGIN_REQUEST_METHOD); > String requestTemplate = repository.getProperty(PROPERTY_LOGIN_REQUEST_URL); >- String requestUrl = evaluateParams(requestTemplate, params, repository); >+ String requestUrl = WebRepositoryUtil.evaluateParams(requestTemplate, params, repository); > > if (REQUEST_GET.equals(requestMethod)) { > return new GetMethod(requestUrl); >@@ -529,7 +526,8 @@ > if (nv.length == 1) { > postMethod.addParameter(nv[0], ""); > } else { >- String value = evaluateParams(nv[1], getParams(repository, params), false); >+ String value = WebRepositoryUtil.evaluateParams(nv[1], WebRepositoryUtil.getParams(repository, params), >+ false); > postMethod.addParameter(nv[0], value); > } > } >@@ -597,65 +595,6 @@ > return refreshUrl; > } > >- public static String evaluateParams(String value, Map<String, String> params, TaskRepository repository) { >- return evaluateParams(value, getParams(repository, params), true); >- } >- >- public static String evaluateParams(String value, TaskRepository repository) { >- return evaluateParams(value, getParams(repository, null), true); >- } >- >- private static String evaluateParams(String value, Map<String, String> params, boolean encode) { >- if (value == null || value.indexOf("${") == -1) { >- return value; >- } >- >- int n = 0; >- int n1 = value.indexOf("${"); >- StringBuilder evaluatedValue = new StringBuilder(value.length()); >- while (n1 > -1) { >- evaluatedValue.append(value.substring(n, n1)); >- int n2 = value.indexOf("}", n1); >- if (n2 > -1) { >- String key = value.substring(n1 + 2, n2); >- if (PARAM_SERVER_URL.equals(key) || PARAM_USER_ID.equals(key) || PARAM_PASSWORD.equals(key)) { >- evaluatedValue.append(evaluateParams(params.get(key), params, false)); >- } else { >- String val = evaluateParams(params.get(PARAM_PREFIX + key), params, false); >- evaluatedValue.append(encode ? encode(val) : val); >- } >- } >- n = n2 + 1; >- n1 = value.indexOf("${", n2); >- } >- if (n > -1) { >- evaluatedValue.append(value.substring(n)); >- } >- return evaluatedValue.toString(); >- } >- >- private static Map<String, String> getParams(TaskRepository repository, Map<String, String> params) { >- Map<String, String> mergedParams = new LinkedHashMap<String, String>(repository.getProperties()); >- mergedParams.put(PARAM_SERVER_URL, repository.getRepositoryUrl()); >- AuthenticationCredentials credentials = repository.getCredentials(AuthenticationType.REPOSITORY); >- if (credentials != null) { >- mergedParams.put(PARAM_USER_ID, credentials.getUserName()); >- mergedParams.put(PARAM_PASSWORD, credentials.getPassword()); >- } >- if (params != null) { >- mergedParams.putAll(params); >- } >- return mergedParams; >- } >- >- private static String encode(String value) { >- try { >- return new URLCodec().encode(value); >- } catch (EncoderException ex) { >- return value; >- } >- } >- > public static List<String> getTemplateVariables(String value) { > if (value == null) { > return Collections.emptyList();
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 260619
:
122191
|
122192
| 122193 |
122194
|
122195
|
122197