Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 260619
Collapse All | Expand All

(-)src/org/eclipse/mylyn/internal/web/tasks/WebRepositoryConnector.java (-126 / +65 lines)
Lines 26-33 Link Here
26
import java.util.regex.Matcher;
26
import java.util.regex.Matcher;
27
import java.util.regex.Pattern;
27
import java.util.regex.Pattern;
28
28
29
import org.apache.commons.codec.EncoderException;
30
import org.apache.commons.codec.net.URLCodec;
31
import org.apache.commons.httpclient.Header;
29
import org.apache.commons.httpclient.Header;
32
import org.apache.commons.httpclient.HostConfiguration;
30
import org.apache.commons.httpclient.HostConfiguration;
33
import org.apache.commons.httpclient.HttpClient;
31
import org.apache.commons.httpclient.HttpClient;
Lines 37-47 Link Here
37
import org.apache.commons.httpclient.methods.PostMethod;
35
import org.apache.commons.httpclient.methods.PostMethod;
38
import org.apache.commons.lang.StringEscapeUtils;
36
import org.apache.commons.lang.StringEscapeUtils;
39
import org.eclipse.core.runtime.CoreException;
37
import org.eclipse.core.runtime.CoreException;
38
import org.eclipse.core.runtime.IConfigurationElement;
39
import org.eclipse.core.runtime.IExtension;
40
import org.eclipse.core.runtime.IExtensionRegistry;
40
import org.eclipse.core.runtime.IProgressMonitor;
41
import org.eclipse.core.runtime.IProgressMonitor;
41
import org.eclipse.core.runtime.IStatus;
42
import org.eclipse.core.runtime.IStatus;
43
import org.eclipse.core.runtime.Platform;
42
import org.eclipse.core.runtime.Status;
44
import org.eclipse.core.runtime.Status;
43
import org.eclipse.mylyn.commons.net.AbstractWebLocation;
45
import org.eclipse.mylyn.commons.net.AbstractWebLocation;
44
import org.eclipse.mylyn.commons.net.AuthenticationCredentials;
45
import org.eclipse.mylyn.commons.net.AuthenticationType;
46
import org.eclipse.mylyn.commons.net.AuthenticationType;
46
import org.eclipse.mylyn.commons.net.WebLocation;
47
import org.eclipse.mylyn.commons.net.WebLocation;
47
import org.eclipse.mylyn.commons.net.WebUtil;
48
import org.eclipse.mylyn.commons.net.WebUtil;
Lines 57-62 Link Here
57
import org.eclipse.mylyn.tasks.core.sync.ISynchronizationSession;
58
import org.eclipse.mylyn.tasks.core.sync.ISynchronizationSession;
58
import org.eclipse.mylyn.tasks.ui.TaskRepositoryLocationUiFactory;
59
import org.eclipse.mylyn.tasks.ui.TaskRepositoryLocationUiFactory;
59
import org.eclipse.mylyn.tasks.ui.TasksUi;
60
import org.eclipse.mylyn.tasks.ui.TasksUi;
61
import org.eclipse.mylyn.web.tasks.ITaskMapperUpdator;
62
import org.eclipse.mylyn.web.tasks.WebRepositoryConstant;
63
import org.eclipse.mylyn.web.tasks.WebRepositoryUtil;
60
64
61
import com.sun.syndication.feed.module.DCModule;
65
import com.sun.syndication.feed.module.DCModule;
62
import com.sun.syndication.feed.synd.SyndEntry;
66
import com.sun.syndication.feed.synd.SyndEntry;
Lines 69-122 Link Here
69
 * 
73
 * 
70
 * @author Eugene Kuleshov
74
 * @author Eugene Kuleshov
71
 */
75
 */
72
public class WebRepositoryConnector extends AbstractRepositoryConnector {
76
public class WebRepositoryConnector extends AbstractRepositoryConnector implements WebRepositoryConstant {
73
74
	public static final String REPOSITORY_TYPE = "web";
75
76
	public static final String PROPERTY_TASK_CREATION_URL = "taskCreationUrl";
77
78
	public static final String PROPERTY_TASK_URL = "taskUrl";
79
80
	public static final String PROPERTY_QUERY_URL = "queryUrl";
81
82
	public static final String PROPERTY_QUERY_METHOD = "queryMethod";
83
84
	public static final String PROPERTY_QUERY_REGEXP = "queryPattern";
85
86
	public static final String PROPERTY_LOGIN_FORM_URL = "loginFormUrl";
87
88
	public static final String PROPERTY_LOGIN_TOKEN_REGEXP = "loginTokenPattern";
89
90
	public static final String PROPERTY_LOGIN_REQUEST_METHOD = "loginRequestMethod";
91
92
	public static final String PROPERTY_LOGIN_REQUEST_URL = "loginRequestUrl";
93
94
	public static final String PARAM_PREFIX = "param_";
95
96
	public static final String PARAM_SERVER_URL = "serverUrl";
97
98
	public static final String PARAM_USER_ID = "userId";
99
100
	public static final String PARAM_PASSWORD = "password";
101
102
	public static final String PARAM_LOGIN_TOKEN = "loginToken";
103
104
	public static final String REQUEST_POST = "POST";
105
106
	public static final String REQUEST_GET = "GET";
107
77
108
	private static final String COMPLETED_STATUSES = "completed|fixed|resolved|invalid|verified|deleted|closed|done";
78
	private static final String COMPLETED_STATUSES = "completed|fixed|resolved|invalid|verified|deleted|closed|done";
109
79
110
	public static final String KEY_TASK_PREFIX = "taskPrefix";
111
112
	public static final String KEY_QUERY_TEMPLATE = "UrlTemplate";
113
114
	public static final String KEY_QUERY_PATTERN = "Regexp";
115
116
	private static final String USER_AGENT = "WebTemplatesConnector";
80
	private static final String USER_AGENT = "WebTemplatesConnector";
117
81
118
	private final static Date DEFAULT_DATE = new Date(0);
119
120
	@Override
82
	@Override
121
	public String getConnectorKind() {
83
	public String getConnectorKind() {
122
		return REPOSITORY_TYPE;
84
		return REPOSITORY_TYPE;
Lines 168-177 Link Here
168
	@Override
130
	@Override
169
	public TaskData getTaskData(TaskRepository repository, String taskId, IProgressMonitor monitor)
131
	public TaskData getTaskData(TaskRepository repository, String taskId, IProgressMonitor monitor)
170
			throws CoreException {
132
			throws CoreException {
171
		String taskPrefix = evaluateParams(repository.getProperty(PROPERTY_TASK_URL), repository);
133
		String taskPrefix = WebRepositoryUtil.evaluateParams(repository.getProperty(PROPERTY_TASK_URL), repository);
172
		TaskData taskData = createTaskData(repository, taskId);
134
		TaskData taskData = createTaskData(repository, taskId);
173
		TaskMapper mapper = new TaskMapper(taskData, true);
135
		TaskMapper mapper = new TaskMapper(taskData, true);
174
		mapper.setCreationDate(DEFAULT_DATE);
136
		mapper.setCreationDate(WebRepositoryUtil.DEFAULT_DATE);
175
		mapper.setSummary(taskId);
137
		mapper.setSummary(taskId);
176
		mapper.setTaskUrl(taskPrefix + taskId);
138
		mapper.setTaskUrl(taskPrefix + taskId);
177
		mapper.setValue(KEY_TASK_PREFIX, taskPrefix);
139
		mapper.setValue(KEY_TASK_PREFIX, taskPrefix);
Lines 194-200 Link Here
194
		// lookup repository using task prefix url
156
		// lookup repository using task prefix url
195
		IRepositoryManager repositoryManager = TasksUi.getRepositoryManager();
157
		IRepositoryManager repositoryManager = TasksUi.getRepositoryManager();
196
		for (TaskRepository repository : repositoryManager.getRepositories(getConnectorKind())) {
158
		for (TaskRepository repository : repositoryManager.getRepositories(getConnectorKind())) {
197
			String taskUrl = evaluateParams(repository.getProperty(PROPERTY_TASK_URL), repository);
159
			String taskUrl = WebRepositoryUtil.evaluateParams(repository.getProperty(PROPERTY_TASK_URL), repository);
198
			if (taskUrl != null && !taskUrl.equals("") && url.startsWith(taskUrl)) {
160
			if (taskUrl != null && !taskUrl.equals("") && url.startsWith(taskUrl)) {
199
				return repository.getRepositoryUrl();
161
				return repository.getRepositoryUrl();
200
			}
162
			}
Lines 205-211 Link Here
205
			TaskRepository repository = repositoryManager.getRepository(query.getConnectorKind(),
167
			TaskRepository repository = repositoryManager.getRepository(query.getConnectorKind(),
206
					query.getRepositoryUrl());
168
					query.getRepositoryUrl());
207
			if (repository != null) {
169
			if (repository != null) {
208
				String queryUrl = evaluateParams(query.getAttribute(KEY_TASK_PREFIX), //
170
				String queryUrl = WebRepositoryUtil.evaluateParams(query.getAttribute(KEY_TASK_PREFIX), //
209
						getQueryParams(query), repository);
171
						getQueryParams(query), repository);
210
				if (queryUrl != null && !queryUrl.equals("") && url.startsWith(queryUrl)) {
172
				if (queryUrl != null && !queryUrl.equals("") && url.startsWith(queryUrl)) {
211
					return query.getRepositoryUrl();
173
					return query.getRepositoryUrl();
Lines 219-225 Link Here
219
		Map<String, String> params = new LinkedHashMap<String, String>();
181
		Map<String, String> params = new LinkedHashMap<String, String>();
220
		Map<String, String> attributes = query.getAttributes();
182
		Map<String, String> attributes = query.getAttributes();
221
		for (String name : attributes.keySet()) {
183
		for (String name : attributes.keySet()) {
222
			if (name.startsWith(WebRepositoryConnector.PARAM_PREFIX)) {
184
			if (name.startsWith(WebRepositoryConstant.PARAM_PREFIX)) {
223
				params.put(name, attributes.get(name));
185
				params.put(name, attributes.get(name));
224
			}
186
			}
225
		}
187
		}
Lines 234-240 Link Here
234
196
235
		IRepositoryManager repositoryManager = TasksUi.getRepositoryManager();
197
		IRepositoryManager repositoryManager = TasksUi.getRepositoryManager();
236
		for (TaskRepository repository : repositoryManager.getRepositories(getConnectorKind())) {
198
		for (TaskRepository repository : repositoryManager.getRepositories(getConnectorKind())) {
237
			String start = evaluateParams(repository.getProperty(PROPERTY_TASK_URL), repository);
199
			String start = WebRepositoryUtil.evaluateParams(repository.getProperty(PROPERTY_TASK_URL), repository);
238
			if (start != null && url.startsWith(start)) {
200
			if (start != null && url.startsWith(start)) {
239
				return url.substring(start.length());
201
				return url.substring(start.length());
240
			}
202
			}
Lines 247-253 Link Here
247
		IRepositoryManager repositoryManager = TasksUi.getRepositoryManager();
209
		IRepositoryManager repositoryManager = TasksUi.getRepositoryManager();
248
		TaskRepository repository = repositoryManager.getRepository(getConnectorKind(), repositoryUrl);
210
		TaskRepository repository = repositoryManager.getRepository(getConnectorKind(), repositoryUrl);
249
		if (repository != null) {
211
		if (repository != null) {
250
			String prefix = evaluateParams(repository.getProperty(PROPERTY_TASK_URL), repository);
212
			String prefix = WebRepositoryUtil.evaluateParams(repository.getProperty(PROPERTY_TASK_URL), repository);
251
			return prefix + taskId;
213
			return prefix + taskId;
252
		}
214
		}
253
		return null;
215
		return null;
Lines 257-272 Link Here
257
	public IStatus performQuery(TaskRepository repository, IRepositoryQuery query, TaskDataCollector resultCollector,
219
	public IStatus performQuery(TaskRepository repository, IRepositoryQuery query, TaskDataCollector resultCollector,
258
			ISynchronizationSession session, IProgressMonitor monitor) {
220
			ISynchronizationSession session, IProgressMonitor monitor) {
259
		Map<String, String> queryParameters = getQueryParams(query);
221
		Map<String, String> queryParameters = getQueryParams(query);
260
		String queryUrl = evaluateParams(query.getUrl(), queryParameters, repository);
222
		String queryUrl = WebRepositoryUtil.evaluateParams(query.getUrl(), queryParameters, repository);
261
		try {
223
		try {
262
			String content = fetchResource(queryUrl, queryParameters, repository);
224
			String content = fetchResource(queryUrl, queryParameters, repository);
263
225
264
			String taskPrefixAttribute = query.getAttribute(KEY_TASK_PREFIX);
226
			String taskPrefixAttribute = query.getAttribute(KEY_TASK_PREFIX);
265
			if (!Util.isPresent(taskPrefixAttribute)) {
227
			if (!isPresent(taskPrefixAttribute)) {
266
				return performRssQuery(content, monitor, resultCollector, repository);
228
				return performRssQuery(content, monitor, resultCollector, repository);
267
			} else {
229
			} else {
268
				String taskPrefix = evaluateParams(taskPrefixAttribute, queryParameters, repository);
230
				String taskPrefix = WebRepositoryUtil.evaluateParams(taskPrefixAttribute, queryParameters, repository);
269
				String queryPattern = evaluateParams(query.getAttribute(KEY_QUERY_PATTERN), queryParameters, repository);
231
				String queryPattern = WebRepositoryUtil.evaluateParams(query.getAttribute(KEY_QUERY_PATTERN),
232
						queryParameters, repository);
270
				return performQuery(content, queryPattern, taskPrefix, monitor, resultCollector, repository);
233
				return performQuery(content, queryPattern, taskPrefix, monitor, resultCollector, repository);
271
			}
234
			}
272
		} catch (IOException e) {
235
		} catch (IOException e) {
Lines 290-296 Link Here
290
	@Override
253
	@Override
291
	public void updateTaskFromTaskData(TaskRepository repository, ITask task, TaskData taskData) {
254
	public void updateTaskFromTaskData(TaskRepository repository, ITask task, TaskData taskData) {
292
		TaskMapper mapper = new TaskMapper(taskData);
255
		TaskMapper mapper = new TaskMapper(taskData);
293
		if (Util.isPresent(mapper.getValue(KEY_TASK_PREFIX))) {
256
		if (isPresent(mapper.getValue(KEY_TASK_PREFIX))) {
294
			task.setAttribute(KEY_TASK_PREFIX, mapper.getValue(KEY_TASK_PREFIX));
257
			task.setAttribute(KEY_TASK_PREFIX, mapper.getValue(KEY_TASK_PREFIX));
295
			task.setTaskKey(task.getTaskId());
258
			task.setTaskKey(task.getTaskId());
296
		} else {
259
		} else {
Lines 300-307 Link Here
300
		mapper.applyTo(task);
263
		mapper.applyTo(task);
301
	}
264
	}
302
265
266
	private static ITaskMapperUpdator getTaskMapperUpdator(TaskRepository repository) {
267
		String updatorID = repository.getProperty(PROPERTY_TASKMAPPER_UPDATOR);
268
		if (updatorID != null && updatorID.length() > 0) {
269
			IExtensionRegistry registry = Platform.getExtensionRegistry();
270
			IExtension[] extensions = registry.getExtensionPoint(EXTENSION_TASKMAPPER_UPDATOR).getExtensions();
271
			for (IExtension extension : extensions) {
272
				IConfigurationElement[] elements = extension.getConfigurationElements();
273
				for (IConfigurationElement element : elements) {
274
					if (element.getAttribute("id").equals(updatorID)) {
275
						try {
276
							Object obj = element.createExecutableExtension("class");
277
							if (obj instanceof ITaskMapperUpdator) {
278
								return (ITaskMapperUpdator) obj;
279
							}
280
						} catch (CoreException e) {
281
							String ee = e.toString();
282
						}
283
					}
284
				}
285
			}
286
		}
287
		return null;
288
	}
289
303
	public static IStatus performQuery(String resource, String regexp, String taskPrefix, IProgressMonitor monitor,
290
	public static IStatus performQuery(String resource, String regexp, String taskPrefix, IProgressMonitor monitor,
304
			TaskDataCollector resultCollector, TaskRepository repository) {
291
			TaskDataCollector resultCollector, TaskRepository repository) {
292
293
		ITaskMapperUpdator updator = getTaskMapperUpdator(repository);
294
305
		NamedPattern p = new NamedPattern(regexp, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL
295
		NamedPattern p = new NamedPattern(regexp, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL
306
				| Pattern.UNICODE_CASE | Pattern.CANON_EQ);
296
				| Pattern.UNICODE_CASE | Pattern.CANON_EQ);
307
297
Lines 324-330 Link Here
324
314
325
						TaskData data = createTaskData(repository, id);
315
						TaskData data = createTaskData(repository, id);
326
						TaskMapper mapper = new TaskMapper(data, true);
316
						TaskMapper mapper = new TaskMapper(data, true);
327
						mapper.setCreationDate(DEFAULT_DATE);
317
						mapper.setCreationDate(WebRepositoryUtil.DEFAULT_DATE);
328
						mapper.setTaskUrl(taskPrefix + id);
318
						mapper.setTaskUrl(taskPrefix + id);
329
						mapper.setSummary(description);
319
						mapper.setSummary(description);
330
						mapper.setValue(KEY_TASK_PREFIX, taskPrefix);
320
						mapper.setValue(KEY_TASK_PREFIX, taskPrefix);
Lines 344-350 Link Here
344
334
345
						TaskData data = createTaskData(repository, id);
335
						TaskData data = createTaskData(repository, id);
346
						TaskMapper mapper = new TaskMapper(data, true);
336
						TaskMapper mapper = new TaskMapper(data, true);
347
						mapper.setCreationDate(DEFAULT_DATE);
337
						mapper.setCreationDate(WebRepositoryUtil.DEFAULT_DATE);
348
						mapper.setTaskUrl(taskPrefix + id);
338
						mapper.setTaskUrl(taskPrefix + id);
349
						mapper.setSummary(description);
339
						mapper.setSummary(description);
350
						mapper.setValue(KEY_TASK_PREFIX, taskPrefix);
340
						mapper.setValue(KEY_TASK_PREFIX, taskPrefix);
Lines 355-364 Link Here
355
						if (status != null) {
345
						if (status != null) {
356
							if (COMPLETED_STATUSES.contains(status.toLowerCase())) {
346
							if (COMPLETED_STATUSES.contains(status.toLowerCase())) {
357
								// TODO set actual completion date here
347
								// TODO set actual completion date here
358
								mapper.setCompletionDate(DEFAULT_DATE);
348
								mapper.setCompletionDate(WebRepositoryUtil.DEFAULT_DATE);
359
							}
349
							}
360
						}
350
						}
361
351
352
						if (updator != null) {
353
							updator.update(mapper, repository, p, matcher);
354
						}
355
362
						resultCollector.accept(data);
356
						resultCollector.accept(data);
363
					}
357
					}
364
				}
358
				}
Lines 374-380 Link Here
374
	}
368
	}
375
369
376
	private static TaskData createTaskData(TaskRepository taskRepository, String id) {
370
	private static TaskData createTaskData(TaskRepository taskRepository, String id) {
377
		TaskData data = new TaskData(new TaskAttributeMapper(taskRepository), WebRepositoryConnector.REPOSITORY_TYPE,
371
		TaskData data = new TaskData(new TaskAttributeMapper(taskRepository), WebRepositoryConstant.REPOSITORY_TYPE,
378
				taskRepository.getRepositoryUrl(), id);
372
				taskRepository.getRepositoryUrl(), id);
379
		data.setPartial(true);
373
		data.setPartial(true);
380
		return data;
374
		return data;
Lines 486-493 Link Here
486
			return;
480
			return;
487
		}
481
		}
488
482
489
		String loginFormUrl = evaluateParams(repository.getProperty(PROPERTY_LOGIN_FORM_URL), params, repository);
483
		String loginFormUrl = WebRepositoryUtil.evaluateParams(repository.getProperty(PROPERTY_LOGIN_FORM_URL), params,
490
		String loginToken = evaluateParams(repository.getProperty(PROPERTY_LOGIN_TOKEN_REGEXP), params, repository);
484
				repository);
485
		String loginToken = WebRepositoryUtil.evaluateParams(repository.getProperty(PROPERTY_LOGIN_TOKEN_REGEXP),
486
				params, repository);
491
		if (isPresent(loginFormUrl) || isPresent(loginToken)) {
487
		if (isPresent(loginFormUrl) || isPresent(loginToken)) {
492
			GetMethod method = new GetMethod(loginFormUrl);
488
			GetMethod method = new GetMethod(loginFormUrl);
493
			// method.setFollowRedirects(false);
489
			// method.setFollowRedirects(false);
Lines 501-514 Link Here
501
			}
497
			}
502
		}
498
		}
503
499
504
		String loginRequestUrl = evaluateParams(repository.getProperty(PROPERTY_LOGIN_REQUEST_URL), params, repository);
500
		String loginRequestUrl = WebRepositoryUtil.evaluateParams(repository.getProperty(PROPERTY_LOGIN_REQUEST_URL),
501
				params, repository);
505
		requestResource(loginRequestUrl, client, hostConfiguration, getLoginMethod(params, repository));
502
		requestResource(loginRequestUrl, client, hostConfiguration, getLoginMethod(params, repository));
506
	}
503
	}
507
504
508
	public static HttpMethod getLoginMethod(Map<String, String> params, TaskRepository repository) {
505
	public static HttpMethod getLoginMethod(Map<String, String> params, TaskRepository repository) {
509
		String requestMethod = repository.getProperty(PROPERTY_LOGIN_REQUEST_METHOD);
506
		String requestMethod = repository.getProperty(PROPERTY_LOGIN_REQUEST_METHOD);
510
		String requestTemplate = repository.getProperty(PROPERTY_LOGIN_REQUEST_URL);
507
		String requestTemplate = repository.getProperty(PROPERTY_LOGIN_REQUEST_URL);
511
		String requestUrl = evaluateParams(requestTemplate, params, repository);
508
		String requestUrl = WebRepositoryUtil.evaluateParams(requestTemplate, params, repository);
512
509
513
		if (REQUEST_GET.equals(requestMethod)) {
510
		if (REQUEST_GET.equals(requestMethod)) {
514
			return new GetMethod(requestUrl);
511
			return new GetMethod(requestUrl);
Lines 529-535 Link Here
529
			if (nv.length == 1) {
526
			if (nv.length == 1) {
530
				postMethod.addParameter(nv[0], "");
527
				postMethod.addParameter(nv[0], "");
531
			} else {
528
			} else {
532
				String value = evaluateParams(nv[1], getParams(repository, params), false);
529
				String value = WebRepositoryUtil.evaluateParams(nv[1], WebRepositoryUtil.getParams(repository, params),
530
						false);
533
				postMethod.addParameter(nv[0], value);
531
				postMethod.addParameter(nv[0], value);
534
			}
532
			}
535
		}
533
		}
Lines 597-661 Link Here
597
		return refreshUrl;
595
		return refreshUrl;
598
	}
596
	}
599
597
600
	public static String evaluateParams(String value, Map<String, String> params, TaskRepository repository) {
601
		return evaluateParams(value, getParams(repository, params), true);
602
	}
603
604
	public static String evaluateParams(String value, TaskRepository repository) {
605
		return evaluateParams(value, getParams(repository, null), true);
606
	}
607
608
	private static String evaluateParams(String value, Map<String, String> params, boolean encode) {
609
		if (value == null || value.indexOf("${") == -1) {
610
			return value;
611
		}
612
613
		int n = 0;
614
		int n1 = value.indexOf("${");
615
		StringBuilder evaluatedValue = new StringBuilder(value.length());
616
		while (n1 > -1) {
617
			evaluatedValue.append(value.substring(n, n1));
618
			int n2 = value.indexOf("}", n1);
619
			if (n2 > -1) {
620
				String key = value.substring(n1 + 2, n2);
621
				if (PARAM_SERVER_URL.equals(key) || PARAM_USER_ID.equals(key) || PARAM_PASSWORD.equals(key)) {
622
					evaluatedValue.append(evaluateParams(params.get(key), params, false));
623
				} else {
624
					String val = evaluateParams(params.get(PARAM_PREFIX + key), params, false);
625
					evaluatedValue.append(encode ? encode(val) : val);
626
				}
627
			}
628
			n = n2 + 1;
629
			n1 = value.indexOf("${", n2);
630
		}
631
		if (n > -1) {
632
			evaluatedValue.append(value.substring(n));
633
		}
634
		return evaluatedValue.toString();
635
	}
636
637
	private static Map<String, String> getParams(TaskRepository repository, Map<String, String> params) {
638
		Map<String, String> mergedParams = new LinkedHashMap<String, String>(repository.getProperties());
639
		mergedParams.put(PARAM_SERVER_URL, repository.getRepositoryUrl());
640
		AuthenticationCredentials credentials = repository.getCredentials(AuthenticationType.REPOSITORY);
641
		if (credentials != null) {
642
			mergedParams.put(PARAM_USER_ID, credentials.getUserName());
643
			mergedParams.put(PARAM_PASSWORD, credentials.getPassword());
644
		}
645
		if (params != null) {
646
			mergedParams.putAll(params);
647
		}
648
		return mergedParams;
649
	}
650
651
	private static String encode(String value) {
652
		try {
653
			return new URLCodec().encode(value);
654
		} catch (EncoderException ex) {
655
			return value;
656
		}
657
	}
658
659
	public static List<String> getTemplateVariables(String value) {
598
	public static List<String> getTemplateVariables(String value) {
660
		if (value == null) {
599
		if (value == null) {
661
			return Collections.emptyList();
600
			return Collections.emptyList();

Return to bug 260619