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 54456 Details for
Bug 151602
[Web connector] Support queries that require login
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]
Reworked patch with login support and new templates
Clipboard-attachment (text/plain), 40.43 KB, created by
Eugene Kuleshov
on 2006-11-24 00:17:19 EST
(
hide
)
Description:
Reworked patch with login support and new templates
Filename:
MIME Type:
Creator:
Eugene Kuleshov
Created:
2006-11-24 00:17:19 EST
Size:
40.43 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.mylar.tasks.tests >Index: src/org/eclipse/mylar/tasks/tests/WebRepositoryConnectorTest.java >=================================================================== >RCS file: /cvsroot/technology/org.eclipse.mylar/org.eclipse.mylar.tasks.tests/src/org/eclipse/mylar/tasks/tests/WebRepositoryConnectorTest.java,v >retrieving revision 1.4 >diff -u -r1.4 WebRepositoryConnectorTest.java >--- src/org/eclipse/mylar/tasks/tests/WebRepositoryConnectorTest.java 20 Nov 2006 18:39:38 -0000 1.4 >+++ src/org/eclipse/mylar/tasks/tests/WebRepositoryConnectorTest.java 24 Nov 2006 05:02:40 -0000 >@@ -60,22 +60,34 @@ > Map<String, String> attributes = new HashMap<String, String>(template.getAttributes()); > for(Map.Entry<String, String> e : attributes.entrySet()) { > String key = e.getKey(); >- if(key.startsWith(WebRepositoryConnector.PARAM_PREFIX)) { >+// if(key.startsWith(WebRepositoryConnector.PARAM_PREFIX)) { > params.put(key, e.getValue()); >- } >+// } > } > > TaskRepository repository = new TaskRepository(WebTask.REPOSITORY_TYPE, template.repositoryUrl, params); >- repository.setAuthenticationCredentials("user", "pwd"); >+ if(repository.getUrl().equals("http://demo.otrs.org")) { >+ // HACK: OTRS repository require auth >+ repository.setAuthenticationCredentials("skywalker", "skywalker"); >+// } else { >+// repository.setAuthenticationCredentials("user", "pwd"); >+ } > > String taskQueryUrl = WebRepositoryConnector.evaluateParams(template.taskQueryUrl, repository); >- String buffer = WebRepositoryConnector.fetchResource(taskQueryUrl, null, null, null); >+ String buffer = WebRepositoryConnector.fetchResource(taskQueryUrl, params, repository); >+ assertTrue("Unable to fetch resource\n" + taskQueryUrl, buffer != null && buffer.length() > 0); > > String regexp = WebRepositoryConnector.evaluateParams(template.getAttribute(WebRepositoryConnector.PROPERTY_QUERY_REGEXP), repository); > IStatus resultingStatus = WebRepositoryConnector.performQuery(buffer, regexp, null, monitor, collector, repository); > > assertTrue("Query failed\n"+taskQueryUrl+"\n"+regexp+"\n"+resultingStatus.toString(), queryStatus.isOK()); >- assertTrue("Expected non-empty query result\n"+taskQueryUrl+"\n"+regexp, hits.size()>0); >+ try { >+ assertTrue("Expected non-empty query result\n" + taskQueryUrl + "\n" + regexp, hits.size() > 0); >+ } catch (Exception e) { >+ System.err.println(taskQueryUrl); >+ System.err.println(buffer); >+ System.err.println("--------------------------------------------------------"); >+ } > } > > public String getName() { >#P org.eclipse.mylar.tasks.web >Index: src/org/eclipse/mylar/internal/tasks/web/WebRepositorySettingsPage.java >=================================================================== >RCS file: /cvsroot/technology/org.eclipse.mylar/org.eclipse.mylar.tasks.web/src/org/eclipse/mylar/internal/tasks/web/WebRepositorySettingsPage.java,v >retrieving revision 1.1 >diff -u -r1.1 WebRepositorySettingsPage.java >--- src/org/eclipse/mylar/internal/tasks/web/WebRepositorySettingsPage.java 10 Nov 2006 02:29:02 -0000 1.1 >+++ src/org/eclipse/mylar/internal/tasks/web/WebRepositorySettingsPage.java 24 Nov 2006 05:02:41 -0000 >@@ -17,6 +17,11 @@ > import org.eclipse.jface.layout.GridDataFactory; > import org.eclipse.jface.util.IPropertyChangeListener; > import org.eclipse.jface.util.PropertyChangeEvent; >+import org.eclipse.jface.viewers.ComboViewer; >+import org.eclipse.jface.viewers.IStructuredContentProvider; >+import org.eclipse.jface.viewers.IStructuredSelection; >+import org.eclipse.jface.viewers.StructuredSelection; >+import org.eclipse.jface.viewers.Viewer; > import org.eclipse.mylar.internal.tasks.ui.wizards.AbstractRepositorySettingsPage; > import org.eclipse.mylar.tasks.core.RepositoryTemplate; > import org.eclipse.mylar.tasks.core.TaskRepository; >@@ -26,6 +31,7 @@ > import org.eclipse.swt.events.SelectionListener; > import org.eclipse.swt.layout.GridData; > import org.eclipse.swt.layout.GridLayout; >+import org.eclipse.swt.widgets.Combo; > import org.eclipse.swt.widgets.Composite; > import org.eclipse.swt.widgets.Display; > import org.eclipse.swt.widgets.Label; >@@ -36,9 +42,12 @@ > import org.eclipse.ui.forms.widgets.FormToolkit; > import org.eclipse.ui.forms.widgets.Section; > >+import static org.eclipse.mylar.internal.tasks.web.Util.*; >+ >+ > /** > * Settings page for generic web-based repository connector >- * >+ * > * @author Eugene Kuleshov > */ > public class WebRepositorySettingsPage extends AbstractRepositorySettingsPage implements IPropertyChangeListener { >@@ -48,20 +57,32 @@ > private static final String DESCRIPTION = "Select a server template example and modify the parameters to match the settings " > + "for your project, usually found in the query URL."; > >+ private ParametersEditor parametersEditor; >+ > private Text taskUrlText; > > private Text newTaskText; > > private Text queryUrlText; > >+ private ComboViewer queryRequestMethod; >+ > private Text queryPatternText; > >- private ParametersEditor parametersEditor; >+ private Text loginFormUrlText; >+ >+ private Text loginTokenPatternText; >+ >+ private Text loginRequestUrlText; >+ >+ private ComboViewer loginRequestMethod; >+ > > private FormToolkit toolkit = new FormToolkit(Display.getCurrent()); > > private Map<String, String> oldProperties; > >+ > public WebRepositorySettingsPage(AbstractRepositoryConnectorUi repositoryUi) { > super(TITLE, DESCRIPTION, repositoryUi); > } >@@ -79,19 +100,31 @@ > RepositoryTemplate template = connector.getTemplate(text); > if (template != null) { > repositoryLabelEditor.setStringValue(template.label); >- setUrl(template.repositoryUrl); >- taskUrlText.setText(template.taskPrefixUrl); >- newTaskText.setText(template.newTaskUrl); >- queryUrlText.setText(template.taskQueryUrl); >- queryPatternText.setText(template.getAttribute(WebRepositoryConnector.PROPERTY_QUERY_REGEXP)); >+ setUrl(nvl(template.repositoryUrl)); >+ >+ taskUrlText.setText(nvl(template.taskPrefixUrl)); >+ newTaskText.setText(nvl(template.newTaskUrl)); >+ >+ queryUrlText.setText(nvl(template.taskQueryUrl)); >+ selectMethod(queryRequestMethod, // >+ template.getAttribute(WebRepositoryConnector.PROPERTY_QUERY_METHOD)); >+ queryPatternText.setText(nvl(template.getAttribute(WebRepositoryConnector.PROPERTY_QUERY_REGEXP))); >+ >+ loginRequestUrlText.setText(nvl(template.getAttribute(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_URL))); >+ selectMethod(loginRequestMethod, // >+ template.getAttribute(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_METHOD)); >+ loginFormUrlText >+ .setText(nvl(template.getAttribute(WebRepositoryConnector.PROPERTY_LOGIN_FORM_URL))); >+ loginTokenPatternText.setText(nvl(template >+ .getAttribute(WebRepositoryConnector.PROPERTY_LOGIN_TOKEN_REGEXP))); > > parametersEditor.removeAll(); > > for (Map.Entry<String, String> entry : template.getAttributes().entrySet()) { > String key = entry.getKey(); > if (key.startsWith(WebRepositoryConnector.PARAM_PREFIX)) { >- parametersEditor.add(key.substring(WebRepositoryConnector.PARAM_PREFIX.length()), entry >- .getValue()); >+ parametersEditor.add(key.substring(WebRepositoryConnector.PARAM_PREFIX.length()), // >+ entry.getValue()); > } > } > >@@ -107,25 +140,37 @@ > }); > > Composite editor = getParameterEditor(parent); >- GridDataFactory.fillDefaults().hint(SWT.DEFAULT, 240).grab(true, true).span(2, 1).applyTo(editor); >- >+ // GridDataFactory.fillDefaults().hint(SWT.DEFAULT, 240).grab(true, true).span(2, 1).applyTo(editor); >+ GridDataFactory.fillDefaults().hint(200, SWT.DEFAULT).span(2, SWT.DEFAULT).applyTo(editor); >+ > if (repository != null) { > taskUrlText.setText(getTextProperty(WebRepositoryConnector.PROPERTY_TASK_URL)); > newTaskText.setText(getTextProperty(WebRepositoryConnector.PROPERTY_TASK_CREATION_URL)); >+ >+ selectMethod(queryRequestMethod, getTextProperty(WebRepositoryConnector.PROPERTY_QUERY_METHOD)); > queryUrlText.setText(getTextProperty(WebRepositoryConnector.PROPERTY_QUERY_URL)); > queryPatternText.setText(getTextProperty(WebRepositoryConnector.PROPERTY_QUERY_REGEXP)); > >+ loginFormUrlText.setText(getTextProperty(WebRepositoryConnector.PROPERTY_LOGIN_FORM_URL)); >+ loginTokenPatternText.setText(getTextProperty(WebRepositoryConnector.PROPERTY_LOGIN_TOKEN_REGEXP)); >+ >+ selectMethod(loginRequestMethod, getTextProperty(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_METHOD)); >+ loginRequestUrlText.setText(getTextProperty(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_URL)); >+ > oldProperties = repository.getProperties(); > parametersEditor.addParams(oldProperties, new LinkedHashMap<String, String>()); > } > } > >- private String getTextProperty(String name) { >- String value = repository.getProperty(name); >- if (value == null) { >- return ""; >+ private void selectMethod(ComboViewer viewer, String method) { >+ if(!isPresent(method)) { >+ method = WebRepositoryConnector.REQUEST_GET; > } >- return value; >+ viewer.setSelection(new StructuredSelection(new Object[] {method}), true); >+ } >+ >+ private String getTextProperty(String name) { >+ return nvl(repository.getProperty(name)); > } > > protected boolean isValidUrl(String name) { >@@ -153,10 +198,16 @@ > gridData_1.minimumHeight = 80; > parametersEditor.setLayoutData(gridData_1); > >+ createAdvancedComposite(parent, composite); >+ >+ return composite; >+ } >+ >+ private void createAdvancedComposite(Composite parent, final Composite composite) { > ExpandableComposite expComposite = toolkit.createExpandableComposite(composite, Section.COMPACT > | Section.TWISTIE | Section.TITLE_BAR); > expComposite.clientVerticalSpacing = 0; >- GridData gridData_2 = new GridData(SWT.FILL, SWT.FILL, true, false); >+ GridData gridData_2 = new GridData(SWT.FILL, SWT.TOP, true, false); > gridData_2.horizontalIndent = -5; > expComposite.setLayoutData(gridData_2); > expComposite.setFont(parent.getFont()); >@@ -164,14 +215,14 @@ > expComposite.setText("Advanced &Configuration"); > expComposite.addExpansionListener(new ExpansionAdapter() { > public void expansionStateChanged(ExpansionEvent e) { >- composite.layout(); >+ getControl().getShell().pack(); > } > }); > toolkit.paintBordersFor(expComposite); > > Composite composite2 = toolkit.createComposite(expComposite, SWT.BORDER); > GridLayout gridLayout2 = new GridLayout(); >- gridLayout2.numColumns = 2; >+ gridLayout2.numColumns = 3; > gridLayout2.verticalSpacing = 0; > composite2.setLayout(gridLayout2); > expComposite.setClient(composite2); >@@ -180,29 +231,85 @@ > taskUrlLabel.setLayoutData(new GridData()); > > taskUrlText = new Text(composite2, SWT.BORDER); >- taskUrlText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); >+ taskUrlText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); > > Label newTaskLabel = toolkit.createLabel(composite2, "&New Task URL:", SWT.NONE); >- newTaskLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false)); >+ newTaskLabel.setLayoutData(new GridData()); > > newTaskText = new Text(composite2, SWT.BORDER); >- newTaskText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); >+ newTaskText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); >+ >+ final Label separatorLabel2 = new Label(composite2, SWT.HORIZONTAL | SWT.SEPARATOR); >+ final GridData gridData_4 = new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1); >+ gridData_4.verticalIndent = 5; >+ gridData_4.heightHint = 5; >+ separatorLabel2.setLayoutData(gridData_4); >+ toolkit.adapt(separatorLabel2, true, true); > >- Label queryUrlLabel = toolkit.createLabel(composite2, "&Query URL:", SWT.NONE); >- queryUrlLabel.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false)); >+ Label queryUrlLabel = toolkit.createLabel(composite2, "&Query Request URL:", SWT.NONE); >+ queryUrlLabel.setLayoutData(new GridData()); > > queryUrlText = new Text(composite2, SWT.BORDER); >- queryUrlText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); >+ queryUrlText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); >+ >+ queryRequestMethod = new ComboViewer(composite2, SWT.BORDER | SWT.READ_ONLY); >+ queryRequestMethod.setContentProvider(new MethodTypeContentProvider()); >+ queryRequestMethod.setInput(""); >+ { >+ Combo combo = queryRequestMethod.getCombo(); >+ toolkit.adapt(combo, true, true); >+ combo.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false)); >+ } > > Label queryPatternLabel = toolkit.createLabel(composite2, "Query &Pattern:", SWT.NONE); >- queryPatternLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, false, true)); >+ queryPatternLabel.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, true)); > > queryPatternText = new Text(composite2, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.WRAP); >- GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); >+ GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1); >+ gridData.widthHint = 200; > gridData.heightHint = 40; > queryPatternText.setLayoutData(gridData); > >- return composite; >+ final Label separatorLabel1 = new Label(composite2, SWT.HORIZONTAL | SWT.SEPARATOR); >+ final GridData gridData_3 = new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1); >+ gridData_3.heightHint = 5; >+ gridData_3.verticalIndent = 5; >+ separatorLabel1.setLayoutData(gridData_3); >+ toolkit.adapt(separatorLabel1, true, true); >+ >+ final Label loginrequestUrlLabel = new Label(composite2, SWT.NONE); >+ loginrequestUrlLabel.setLayoutData(new GridData()); >+ toolkit.adapt(loginrequestUrlLabel, true, true); >+ loginrequestUrlLabel.setText("Login &Request URL:"); >+ >+ loginRequestUrlText = new Text(composite2, SWT.BORDER); >+ toolkit.adapt(loginRequestUrlText, true, true); >+ loginRequestUrlText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); >+ >+ loginRequestMethod = new ComboViewer(composite2, SWT.BORDER | SWT.READ_ONLY); >+ loginRequestMethod.setContentProvider(new MethodTypeContentProvider()); >+ loginRequestMethod.setInput(""); >+ { >+ Combo combo = loginRequestMethod.getCombo(); >+ toolkit.adapt(combo, true, true); >+ combo.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false)); >+ } >+ >+ Label loginPageLabel = toolkit.createLabel(composite2, "Login &Form URL:", SWT.NONE); >+ loginPageLabel.setLayoutData(new GridData()); >+ >+ loginFormUrlText = new Text(composite2, SWT.BORDER); >+ loginFormUrlText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1)); >+ >+ Label loginTokenLabel = toolkit.createLabel(composite2, "Login &Token Pattern:", SWT.NONE); >+ loginTokenLabel.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, true)); >+ >+ loginTokenPatternText = new Text(composite2, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.WRAP); >+ final GridData gridData_1 = new GridData(SWT.FILL, SWT.FILL, false, true, 2, 1); >+ gridData_1.widthHint = 200; >+ gridData_1.heightHint = 30; >+ loginTokenPatternText.setLayoutData(gridData_1); >+ > } > > public void propertyChange(PropertyChangeEvent event) { >@@ -216,8 +323,20 @@ > public void updateProperties(TaskRepository repository) { > repository.setProperty(WebRepositoryConnector.PROPERTY_TASK_URL, taskUrlText.getText()); > repository.setProperty(WebRepositoryConnector.PROPERTY_TASK_CREATION_URL, newTaskText.getText()); >+ > repository.setProperty(WebRepositoryConnector.PROPERTY_QUERY_URL, queryUrlText.getText()); > repository.setProperty(WebRepositoryConnector.PROPERTY_QUERY_REGEXP, queryPatternText.getText()); >+ repository.setProperty(WebRepositoryConnector.PROPERTY_QUERY_METHOD, getSelection(queryRequestMethod)); >+ >+ String loginRequestUrl = loginRequestUrlText.getText(); >+ repository.setProperty(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_URL, loginRequestUrl); >+ if(loginRequestUrl.length()>0) { >+ repository.setProperty(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_METHOD, getSelection(loginRequestMethod)); >+ } else { >+ repository.removeProperty(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_METHOD); >+ } >+ repository.setProperty(WebRepositoryConnector.PROPERTY_LOGIN_FORM_URL, loginFormUrlText.getText()); >+ repository.setProperty(WebRepositoryConnector.PROPERTY_LOGIN_TOKEN_REGEXP, loginTokenPatternText.getText()); > > if (oldProperties != null) { > for (Map.Entry<String, String> e : oldProperties.entrySet()) { >@@ -233,4 +352,26 @@ > } > } > >+ private String getSelection(ComboViewer viewer) { >+ return (String) ((IStructuredSelection) viewer.getSelection()).getFirstElement(); >+ } >+ >+ >+ private static class MethodTypeContentProvider implements IStructuredContentProvider { >+ >+ private static final Object[] ELEMENTS = new Object[] { WebRepositoryConnector.REQUEST_GET, >+ WebRepositoryConnector.REQUEST_POST }; >+ >+ public Object[] getElements(Object inputElement) { >+ return ELEMENTS; >+ } >+ >+ public void dispose() { >+ } >+ >+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { >+ } >+ >+ } >+ > } >Index: src/org/eclipse/mylar/internal/tasks/web/WebRepositoryConnector.java >=================================================================== >RCS file: /cvsroot/technology/org.eclipse.mylar/org.eclipse.mylar.tasks.web/src/org/eclipse/mylar/internal/tasks/web/WebRepositoryConnector.java,v >retrieving revision 1.6 >diff -u -r1.6 WebRepositoryConnector.java >--- src/org/eclipse/mylar/internal/tasks/web/WebRepositoryConnector.java 20 Nov 2006 18:39:50 -0000 1.6 >+++ src/org/eclipse/mylar/internal/tasks/web/WebRepositoryConnector.java 24 Nov 2006 05:02:40 -0000 >@@ -25,7 +25,10 @@ > > import org.apache.commons.httpclient.Header; > import org.apache.commons.httpclient.HttpClient; >+import org.apache.commons.httpclient.HttpException; >+import org.apache.commons.httpclient.HttpMethod; > import org.apache.commons.httpclient.methods.GetMethod; >+import org.apache.commons.httpclient.methods.PostMethod; > import org.eclipse.core.runtime.CoreException; > import org.eclipse.core.runtime.IProgressMonitor; > import org.eclipse.core.runtime.IStatus; >@@ -45,9 +48,12 @@ > import org.eclipse.mylar.tasks.core.TaskRepositoryManager; > import org.eclipse.mylar.tasks.ui.TasksUiPlugin; > >+import static org.eclipse.mylar.internal.tasks.web.Util.*; >+ >+ > /** > * Generic connector for web based issue tracking systems >- * >+ * > * @author Eugene Kuleshov > */ > public class WebRepositoryConnector extends AbstractRepositoryConnector { >@@ -58,8 +64,18 @@ > > 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"; >@@ -68,6 +84,14 @@ > > 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 String getRepositoryType() { > return WebTask.REPOSITORY_TYPE; > } >@@ -151,9 +175,6 @@ > public IStatus performQuery(AbstractRepositoryQuery query, TaskRepository repository, IProgressMonitor monitor, > QueryHitCollector resultCollector) { > if (query instanceof WebQuery) { >- String repositoryUser = repository.getUserName(); >- String repositoryPassword = repository.getPassword(); >- > WebQuery webQuery = (WebQuery) query; > Map<String, String> queryParameters = webQuery.getQueryParameters(); > String queryUrl = evaluateParams(query.getUrl(), queryParameters, repository); >@@ -162,7 +183,7 @@ > > try { > // if (regexp != null && regexp.trim().length() > 0) { >- return performQuery(fetchResource(queryUrl, repositoryUser, repositoryPassword, repository.getProxy()), queryPattern, >+ return performQuery(fetchResource(queryUrl, queryParameters, repository), queryPattern, > taskPrefix, monitor, resultCollector, repository); > // } else { > // return performRssQuery(queryUrl, taskPrefix, repositoryUrl, >@@ -199,6 +220,13 @@ > // ignore > } > >+ @Override >+ public void updateTask(TaskRepository repository, AbstractRepositoryTask repositoryTask) throws CoreException { >+ } >+ >+ >+ // utility methods >+ > public static IStatus performQuery(String resource, String regexp, String taskPrefix, IProgressMonitor monitor, > QueryHitCollector collector, TaskRepository repository) { > Pattern p = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL >@@ -247,72 +275,171 @@ > return text.trim(); > } > >- /* >- * public static IStatus performRssQuery(String queryUrl, String taskPrefix, >- * String repositoryUrl, String repositoryUser, String repositoryPassword, >- * IProgressMonitor monitor, QueryHitCollector collector) { SyndFeedInput >- * input = new SyndFeedInput(); try { SyndFeed feed = input.build(new >- * XmlReader(new URL(queryUrl))); >- * >- * SimpleDateFormat df = new SimpleDateFormat("MMM dd, HH:mm"); >- * >- * for (Iterator it = feed.getEntries().iterator(); it.hasNext(); ) { >- * SyndEntry entry = (SyndEntry) it.next(); >- * >- * Date date = entry.getUpdatedDate(); if(date==null) { date = >- * entry.getPublishedDate(); } if(date==null) { DCModule module = (DCModule) >- * entry.getModule("http://purl.org/dc/elements/1.1/"); date = >- * module.getDate(); } if(date==null) { // TODO } >- * >- * String entryUri = entry.getUri(); if(entryUri.startsWith(taskPrefix)) { >- * String id = df.format(date); // entryUri.substring(taskPrefix.length()); >- * >- * try { collector.accept(new WebQueryHit(id, id+": "+entry.getTitle(), >- * taskPrefix, repositoryUrl)); } catch (CoreException e) { return new >- * Status(IStatus.ERROR, TasksUiPlugin.PLUGIN_ID, IStatus.ERROR, "Unable >- * collect results.", e); } } } return Status.OK_STATUS; } catch (Exception >- * ex) { return new Status(IStatus.OK, TasksUiPlugin.PLUGIN_ID, IStatus.OK, >- * "Could not fetch resource: " + queryUrl, ex); } } >- */ > >- public static String fetchResource(String url, String user, String password, Proxy proxySettings) throws IOException { >+// public static IStatus performRssQuery(String queryUrl, String taskPrefix, String repositoryUrl, >+// String repositoryUser, String repositoryPassword, IProgressMonitor monitor, QueryHitCollector collector) { >+// SyndFeedInput input = new SyndFeedInput(); >+// try { >+// SyndFeed feed = input.build(new XmlReader(new URL(queryUrl))); >+// >+// SimpleDateFormat df = new SimpleDateFormat("MMM dd, HH:mm"); >+// >+// for (Iterator it = feed.getEntries().iterator(); it.hasNext();) { >+// SyndEntry entry = (SyndEntry) it.next(); >+// >+// Date date = entry.getUpdatedDate(); >+// if (date == null) { >+// date = entry.getPublishedDate(); >+// } >+// if (date == null) { >+// DCModule module = (DCModule) entry.getModule("http://purl.org/dc/elements/1.1/"); >+// date = module.getDate(); >+// } >+// if (date == null) { >+// // TODO >+// } >+// >+// String entryUri = entry.getUri(); >+// if (entryUri.startsWith(taskPrefix)) { >+// String id = df.format(date); // entryUri.substring(taskPrefix.length()); >+// >+// try { >+// collector.accept(new WebQueryHit(id, id + ": " + entry.getTitle(), taskPrefix, repositoryUrl)); >+// } catch (CoreException e) { >+// return new Status(IStatus.ERROR, TasksUiPlugin.PLUGIN_ID, IStatus.ERROR, >+// "Unable collect results.", e); >+// } >+// } >+// } >+// return Status.OK_STATUS; >+// } catch (Exception ex) { >+// return new Status(IStatus.OK, TasksUiPlugin.PLUGIN_ID, IStatus.OK, "Could not fetch resource: " + queryUrl, >+// ex); >+// } >+// } >+ >+ >+ public static String fetchResource(String url, Map<String, String> params, TaskRepository repository) throws IOException { > HttpClient client = new HttpClient(); >- WebClientUtil.setupHttpClient(client, proxySettings, url, user, password); >+ WebClientUtil.setupHttpClient(client, repository.getProxy(), url, // >+ repository.getUserName(), repository.getPassword()); > >- GetMethod get = new GetMethod(url); >- try { >- client.executeMethod(get); >- Header refreshHeader = get.getResponseHeader("Refresh"); >+ loginRequestIfNeeded(client, params, repository); > >- if (refreshHeader != null) { >- String value = refreshHeader.getValue(); >- int n = value.indexOf(";url="); >- if (n != -1) { >- value = value.substring(n + 5); >- int requestPath; >- if (value.charAt(0) == '/') { >- int colonSlashSlash = url.indexOf("://"); >- requestPath = url.indexOf('/', colonSlashSlash + 3); >- } else { >- requestPath = url.lastIndexOf('/'); >- } >+ GetMethod method = new GetMethod(url); >+ method.setFollowRedirects(false); >+ return requestResource(url, client, method); >+ } >+ >+ private static void loginRequestIfNeeded(HttpClient client, Map<String, String> params, TaskRepository repository) >+ throws HttpException, IOException { >+ if (!isPresent(repository.getUserName()) || !isPresent(repository.getPassword()) >+ || !isPresent(repository.getProperty(PROPERTY_LOGIN_REQUEST_URL))) { >+ return; >+ } >+ >+ String loginFormUrl = evaluateParams(repository.getProperty(PROPERTY_LOGIN_FORM_URL), params, repository); >+ String loginToken = evaluateParams(repository.getProperty(PROPERTY_LOGIN_TOKEN_REGEXP), params, repository); >+ if (isPresent(loginFormUrl) || isPresent(loginToken)) { >+ GetMethod method = new GetMethod(loginFormUrl); >+ method.setFollowRedirects(false); >+ String loginFormPage = requestResource(loginFormUrl, client, method); >+ if (loginFormPage != null) { >+ Pattern p = Pattern.compile(loginToken); >+ Matcher m = p.matcher(loginFormPage); >+ if (m.find()) { >+ params.put(PARAM_PREFIX + PARAM_LOGIN_TOKEN, m.group(1)); >+ } >+ } >+ } > >- String refreshUrl; >- if (requestPath == -1) { >- refreshUrl = url + "/" + value; >- } else { >- refreshUrl = url.substring(0, requestPath + 1) + value; >- } >+ String loginRequestUrl = evaluateParams(repository.getProperty(PROPERTY_LOGIN_REQUEST_URL), params, repository); >+ String loginRequestMethod = repository.getProperty(PROPERTY_LOGIN_REQUEST_METHOD); > >- get = new GetMethod(refreshUrl); >- client.executeMethod(get); >+ HttpMethod method = null; >+ if (REQUEST_POST.equals(loginRequestMethod)) { >+ int n = loginRequestUrl.indexOf('?'); >+ if (n == -1) { >+ method = new PostMethod(loginRequestUrl); >+ } else { >+ PostMethod postMethod = new PostMethod(loginRequestUrl.substring(0, n - 1)); >+ // TODO this does not take into account escaped values >+ String[] requestParams = loginRequestUrl.substring(n + 1).split("&"); >+ for (String requestParam : requestParams) { >+ String[] nv = requestParam.split("="); >+ postMethod.addParameter(nv[0], nv.length == 1 ? "" : nv[1]); >+ } >+ method = postMethod; >+ } >+ } else { >+ method = new GetMethod(loginRequestUrl); >+ method.setFollowRedirects(false); >+ } >+ >+ requestResource(loginRequestUrl, client, method); >+ } >+ >+ private static String requestResource(String url, HttpClient client, HttpMethod method) throws IOException, >+ HttpException { >+ String refreshUrl = null; >+ try { >+ client.executeMethod(method); >+ >+ if(method.getStatusCode()==302) { >+ Header location = method.getResponseHeader("Location"); >+ if (location!=null) { >+ refreshUrl = location.getValue(); > } > } >- return get.getResponseBodyAsString(); >+ if(refreshUrl == null) { >+ refreshUrl = getRefreshUrl(url, method); >+ } >+ if (refreshUrl == null) { >+ return method.getResponseBodyAsString(); >+ } > > } finally { >- get.releaseConnection(); >+ method.releaseConnection(); > } >+ >+ if (refreshUrl != null) { >+ method = new GetMethod(refreshUrl); >+ try { >+ client.executeMethod(method); >+ return method.getResponseBodyAsString(); >+ } finally { >+ method.releaseConnection(); >+ } >+ } >+ return null; >+ } >+ >+ private static String getRefreshUrl(String url, HttpMethod method) { >+ Header refreshHeader = method.getResponseHeader("Refresh"); >+ if (refreshHeader == null) { >+ return null; >+ } >+ String value = refreshHeader.getValue(); >+ int n = value.indexOf(";url="); >+ if (n == -1) { >+ return null; >+ } >+ value = value.substring(n + 5); >+ int requestPath; >+ if (value.charAt(0) == '/') { >+ int colonSlashSlash = url.indexOf("://"); >+ requestPath = url.indexOf('/', colonSlashSlash + 3); >+ } else { >+ requestPath = url.lastIndexOf('/'); >+ } >+ >+ String refreshUrl; >+ if (requestPath == -1) { >+ refreshUrl = url + "/" + value; >+ } else { >+ refreshUrl = url.substring(0, requestPath + 1) + value; >+ } >+ return refreshUrl; > } > > public static String evaluateParams(String value, Map<String, String> params, TaskRepository repository) { >@@ -352,7 +479,4 @@ > return vars; > } > >- @Override >- public void updateTask(TaskRepository repository, AbstractRepositoryTask repositoryTask) throws CoreException { >- } > } >Index: src/org/eclipse/mylar/internal/tasks/web/WebQueryWizardPage.java >=================================================================== >RCS file: /cvsroot/technology/org.eclipse.mylar/org.eclipse.mylar.tasks.web/src/org/eclipse/mylar/internal/tasks/web/WebQueryWizardPage.java,v >retrieving revision 1.5 >diff -u -r1.5 WebQueryWizardPage.java >--- src/org/eclipse/mylar/internal/tasks/web/WebQueryWizardPage.java 22 Nov 2006 19:32:25 -0000 1.5 >+++ src/org/eclipse/mylar/internal/tasks/web/WebQueryWizardPage.java 24 Nov 2006 05:02:40 -0000 >@@ -133,7 +133,7 @@ > expComposite.setText("Advanced &Configuration"); > expComposite.addExpansionListener(new ExpansionAdapter() { > public void expansionStateChanged(ExpansionEvent e) { >- composite.layout(); >+ getControl().getShell().pack(); > } > }); > toolkit.paintBordersFor(expComposite); >@@ -145,7 +145,9 @@ > toolkit.createLabel(composite1, "&Query URL:", SWT.NONE); > > queryUrlText = new Text(composite1, SWT.BORDER); >- queryUrlText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); >+ final GridData gridData_2 = new GridData(SWT.FILL, SWT.CENTER, true, false); >+ gridData_2.widthHint = 200; >+ queryUrlText.setLayoutData(gridData_2); > queryUrlText.addModifyListener(new ModifyListener() { > public void modifyText(final ModifyEvent e) { > webPage = null; >@@ -158,6 +160,7 @@ > > queryPatternText = new Text(composite1, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.WRAP); > GridData gridData = new GridData(SWT.FILL, SWT.TOP, true, false); >+ gridData.widthHint = 200; > gridData.heightHint = 45; > queryPatternText.setLayoutData(gridData); > >@@ -316,7 +319,7 @@ > final List<AbstractQueryHit> queryHits = new ArrayList<AbstractQueryHit>(); > try { > if(webPage==null) { >- webPage = WebRepositoryConnector.fetchResource(evaluatedUrl, repository.getUserName(), repository.getPassword(), repository.getProxy()); >+ webPage = WebRepositoryConnector.fetchResource(evaluatedUrl, params, repository); > } > > QueryHitCollector collector = new QueryHitCollector(TasksUiPlugin.getTaskListManager().getTaskList()) { >Index: src/org/eclipse/mylar/internal/tasks/web/WebQuery.java >=================================================================== >RCS file: /cvsroot/technology/org.eclipse.mylar/org.eclipse.mylar.tasks.web/src/org/eclipse/mylar/internal/tasks/web/WebQuery.java,v >retrieving revision 1.2 >diff -u -r1.2 WebQuery.java >--- src/org/eclipse/mylar/internal/tasks/web/WebQuery.java 11 Nov 2006 06:41:01 -0000 1.2 >+++ src/org/eclipse/mylar/internal/tasks/web/WebQuery.java 24 Nov 2006 05:02:40 -0000 >@@ -8,6 +8,7 @@ > > package org.eclipse.mylar.internal.tasks.web; > >+import java.util.LinkedHashMap; > import java.util.Map; > > import org.eclipse.mylar.internal.tasks.core.WebTask; >@@ -15,8 +16,8 @@ > import org.eclipse.mylar.tasks.core.TaskList; > > /** >- * Represents pattern-based query on repository web page >- * >+ * Represents pattern-based query on repository web page >+ * > * @author Eugene Kuleshov > */ > public class WebQuery extends AbstractRepositoryQuery { >@@ -25,7 +26,7 @@ > private final String queryPattern; > private final Map<String, String> params; > >- public WebQuery(TaskList taskList, String description, >+ public WebQuery(TaskList taskList, String description, > String queryUrl, String queryPattern, String taskPrefix, > String repositoryUrl, Map<String, String> params) { > super(description, taskList); >@@ -45,13 +46,13 @@ > public String getTaskPrefix() { > return this.taskPrefix; > } >- >+ > public String getQueryPattern() { > return this.queryPattern; > } >- >+ > public Map<String, String> getQueryParameters() { >- return this.params; >+ return new LinkedHashMap<String, String>(this.params); > } > > } >Index: plugin.xml >=================================================================== >RCS file: /cvsroot/technology/org.eclipse.mylar/org.eclipse.mylar.tasks.web/plugin.xml,v >retrieving revision 1.2 >diff -u -r1.2 plugin.xml >--- plugin.xml 10 Nov 2006 21:37:23 -0000 1.2 >+++ plugin.xml 24 Nov 2006 05:02:40 -0000 >@@ -81,10 +81,10 @@ > label="ASM (GForge)" > urlRepository="http://forge.objectweb.org/tracker" > urlTask="${serverUrl}/?group_id=${group_id}&func=detail&atid=${atid}&aid=" >- urlNewTask="${serverUrl}?group_id=${group_id}&func=add" >- urlTaskQuery="${serverUrl}?group_id=${group_id}&atid=${atid}"> >+ urlNewTask="${serverUrl}/?group_id=${group_id}&func=add" >+ urlTaskQuery="${serverUrl}/?group_id=${group_id}&atid=${atid}&_status=100&set=custom"> > <attribute name="param_group_id" value="23"/> >- <attribute name="param_atid" value="350023"/> >+ <attribute name="param_atid" value="100023"/> > <attribute name="queryPattern" > value="<a class="tracker" href="/tracker/index.php\?func=detail&aid=(.+?)&group_id=${group_id}&atid=${atid}">(.+?)</a></td>"/> > </repository> >@@ -93,8 +93,8 @@ > label="Azureus (SourceForge)" > urlRepository="http://sourceforge.net/tracker" > urlTask="${serverUrl}/?group_id=${group_id}&func=detail&atid=${atid}&aid=" >- urlNewTask="${serverUrl}?group_id=${group_id}&func=add" >- urlTaskQuery="${serverUrl}?group_id=${group_id}&atid=${atid}"> >+ urlNewTask="${serverUrl}/?group_id=${group_id}&func=add" >+ urlTaskQuery="${serverUrl}/?group_id=${group_id}&atid=${atid}"> > <attribute name="param_group_id" value="84122"/> > <attribute name="param_atid" value="575154"/> > <attribute name="queryPattern" >@@ -141,6 +141,71 @@ > <attribute name="queryPattern" > value="<tr .+?<a href="view.php\?id=(.+?)">.+?<td class="left">(.+?)</td></tr>"/> > </repository> >+ <!-- >+ <repository >+ anonymous="true" >+ label="ChangeLogic (anonymous)" >+ repositoryKind="web" >+ urlNewTask="${serverUrl}/index.php?event=Add_task" >+ urlRepository="http://changelogic.araneaframework.org" >+ urlTask="${serverUrl}/index.php?event=Show_public_task&task_id=" >+ urlTaskQuery="${serverUrl}/index.php?event=Show_public_task_list"> >+ <attribute name="queryPattern" >+ value="<a href="index.php\?event\=Show_public_task&amp;task_id\=.+?&amp;project_id\=0">(.+?)</a>.+?</td>.+?<td>.+?</td>.+?<td>.+?</td>.+?<td>.+?</td>.+?<td>(.+?)</td>"/> >+ </repository> >+ --> >+ <repository >+ anonymous="false" >+ label="Aranea Framework (ChangeLogic)" >+ repositoryKind="web" >+ urlRepository="http://changelogic.araneaframework.org" >+ urlTask="${serverUrl}/index.php?event=Show_task&task_id=" >+ urlNewTask="${serverUrl}/index.php?event=Add_task&project_id=${project_id}" >+ urlTaskQuery="${serverUrl}/index.php?event=Show_public_task_list&project_id=${project_id}&page=-1&cookietest=2"> >+ <attribute >+ name="loginFormUrl" >+ value="${serverUrl}"> >+ </attribute> >+ <attribute name="loginTokenPattern" >+ value="<form name="Login_form" method="POST" action="index.php\?event\=Login&amp;project_id\=0&amp;link_uid\=(\p{Alnum}+?)\"(?:.*?)>"/> >+ <attribute name="loginRequestMethod" value="POST"/> >+ <attribute name="loginRequestUrl" >+ value="${serverUrl}/index.php?event=Login&link_uid=${loginToken}&username=${userId}&password=${password}"/> >+ <attribute name="queryPattern" >+ value="<a href="index.php\?event\=Show_.+?task.+?task_id=(.+?)&.+?</td>.+?<td>.+?</td>.+?<td>.+?</td>.+?<td>.+?</td>.+?<td>.+?</td>.+?<td>(.+?)</td>"/> >+ <attribute name="param_project_id" value="1"/> >+ </repository> >+ >+ <repository >+ anonymous="false" >+ label="OTRS" >+ repositoryKind="web" >+ urlRepository="http://demo.otrs.org" >+ urlNewTask="${serverUrl}/otrs/index.pl?Action=AgentTicketPhone" >+ urlTask="${serverUrl}/otrs/index.pl?Action=AgentTicketZoom&TicketID=" >+ urlTaskQuery="${serverUrl}/otrs/index.pl?Action=AgentTicketMailbox"> >+ <attribute name="queryPattern" >+ value="<a href=\"/otrs/index.pl\?Action=AgentTicketZoom&TicketID=(.+?)".+?<b>Subject:</b>.+?<div title=".+?">(.+?)</div></td>"/> >+ <attribute name="loginRequestUrl" >+ value="${serverUrl}/otrs/index.pl?Action=Login&User=${userId}&Password=${password}"/> >+ </repository> >+ >+ <repository >+ anonymous="false" >+ label="JavaForge (CodeLogic)" >+ repositoryKind="web" >+ urlRepository="http://www.javaforge.com/proj/tracker" >+ urlTask="${serverUrl}/itemDetails.do?navigation=true&task_id=" >+ urlNewTask="${serverUrl}/submitNew.do?tracker_id=${tracker_id}" >+ urlTaskQuery="${serverUrl}/browseAllTrackers.do?proj_id=${proj_id}&tracker_type_id=${tracker_type_id}&onlyOpen=false&pagesize=0"> >+ <attribute >+ name="queryPattern" >+ value="<a href="/proj/tracker/itemDetails.do\?.+?task_id=(\d+?)">(.+?)</a>"/> >+ <attribute name="param_tracker_id" value="41"/> >+ <attribute name="param_tracker_type_id" value="2"/> >+ <attribute name="param_proj_id" value="11"/> >+ </repository> >+ > </extension> > > </plugin> >Index: src/org/eclipse/mylar/internal/tasks/web/Util.java >=================================================================== >RCS file: src/org/eclipse/mylar/internal/tasks/web/Util.java >diff -N src/org/eclipse/mylar/internal/tasks/web/Util.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/mylar/internal/tasks/web/Util.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,26 @@ >+/******************************************************************************* >+ * 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.tasks.web; >+ >+/** >+ * Utility methods >+ * >+ * @author Eugene Kuleshov >+ */ >+public class Util { >+ >+ public static boolean isPresent(String value) { >+ return value != null && value.length() > 0; >+ } >+ >+ public static String nvl(String value) { >+ return value == null ? "" : value; >+ } >+ >+}
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 151602
:
52731
|
52732
|
52749
|
52821
|
52824
|
52838
|
54090
|
54115
|
54116
|
54122
|
54124
|
54125
|
54126
|
54128
|
54277
|
54288
|
54299
| 54456 |
54457