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 54126 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]
Bugfixes and new ChangeLogic templates to the previous patch
Clipboard-attachment (text/plain), 53.15 KB, created by
Erkki Lindpere
on 2006-11-18 11:21:15 EST
(
hide
)
Description:
Bugfixes and new ChangeLogic templates to the previous patch
Filename:
MIME Type:
Creator:
Erkki Lindpere
Created:
2006-11-18 11:21:15 EST
Size:
53.15 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#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 18 Nov 2006 16:11:41 -0000 >@@ -11,6 +11,7 @@ > > package org.eclipse.mylar.internal.tasks.web; > >+import java.util.ArrayList; > import java.util.LinkedHashMap; > import java.util.Map; > >@@ -18,6 +19,9 @@ > import org.eclipse.jface.util.IPropertyChangeListener; > import org.eclipse.jface.util.PropertyChangeEvent; > import org.eclipse.mylar.internal.tasks.ui.wizards.AbstractRepositorySettingsPage; >+import org.eclipse.mylar.internal.tasks.web.restui.EHttpMethod; >+import org.eclipse.mylar.internal.tasks.web.restui.NameValuePair; >+import org.eclipse.mylar.internal.tasks.web.restui.RESTRequestEditor; > import org.eclipse.mylar.tasks.core.RepositoryTemplate; > import org.eclipse.mylar.tasks.core.TaskRepository; > import org.eclipse.mylar.tasks.ui.AbstractRepositoryConnectorUi; >@@ -32,6 +36,7 @@ > import org.eclipse.swt.widgets.Text; > import org.eclipse.ui.forms.events.ExpansionAdapter; > import org.eclipse.ui.forms.events.ExpansionEvent; >+import org.eclipse.ui.forms.widgets.ColumnLayout; > import org.eclipse.ui.forms.widgets.ExpandableComposite; > import org.eclipse.ui.forms.widgets.FormToolkit; > import org.eclipse.ui.forms.widgets.Section; >@@ -56,8 +61,14 @@ > > private Text queryPatternText; > >+ private Text loginFormUrlText; >+ >+ private Text loginTokenPatternText; >+ > private ParametersEditor parametersEditor; > >+ private RESTRequestEditor loginRequestEditor; >+ > private FormToolkit toolkit = new FormToolkit(Display.getCurrent()); > > private Map<String, String> oldProperties; >@@ -84,16 +95,38 @@ > newTaskText.setText(template.newTaskUrl); > queryUrlText.setText(template.taskQueryUrl); > queryPatternText.setText(template.getAttribute(WebRepositoryConnector.PROPERTY_QUERY_REGEXP)); >+ loginFormUrlText >+ .setText(nvl(template.getAttribute(WebRepositoryConnector.PROPERTY_LOGIN_FORM_URL))); >+ loginTokenPatternText.setText(nvl(template >+ .getAttribute(WebRepositoryConnector.PROPERTY_LOGIN_TOKEN_REGEXP))); >+ String method = template.getAttribute(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_METHOD); >+ if (method != null) { >+ try { >+ loginRequestEditor.setMethod(EHttpMethod.valueOf(method)); >+ } catch (IllegalArgumentException e1) { >+ loginRequestEditor.setMethod(null); >+ } >+ } else { >+ loginRequestEditor.setMethod(null); >+ } >+ loginRequestEditor.setUrl(nvl(template >+ .getAttribute(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_URL))); > > parametersEditor.removeAll(); > >+ ArrayList<NameValuePair> pairs = new ArrayList<NameValuePair>(); > 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()); > } >+ if (key.startsWith(WebRepositoryConnector.LOGIN_REQUEST_PARAM_PREFIX)) { >+ pairs.add(new NameValuePair(key.substring(WebRepositoryConnector.LOGIN_REQUEST_PARAM_PREFIX >+ .length()), entry.getValue())); >+ } > } >+ loginRequestEditor.setParameters(pairs.toArray(new NameValuePair[pairs.size()])); > > getContainer().updateButtons(); > return; >@@ -114,20 +147,40 @@ > newTaskText.setText(getTextProperty(WebRepositoryConnector.PROPERTY_TASK_CREATION_URL)); > 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)); >+ try { >+ loginRequestEditor.setMethod(EHttpMethod >+ .valueOf(getTextProperty(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_METHOD))); >+ } catch (IllegalArgumentException e) { >+ // ignore >+ } >+ loginRequestEditor.setUrl(getTextProperty(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_URL)); > > oldProperties = repository.getProperties(); > parametersEditor.addParams(oldProperties, new LinkedHashMap<String, String>()); >+ ArrayList<NameValuePair> pairs = new ArrayList<NameValuePair>(); >+ for (Map.Entry<String, String> entry : oldProperties.entrySet()) { >+ if (entry.getKey().startsWith(WebRepositoryConnector.LOGIN_REQUEST_PARAM_PREFIX)) { >+ pairs.add(new NameValuePair(entry.getKey().substring( >+ WebRepositoryConnector.LOGIN_REQUEST_PARAM_PREFIX.length()), entry.getValue())); >+ } >+ } >+ loginRequestEditor.setParameters(pairs.toArray(new NameValuePair[pairs.size()])); > } > } > >- private String getTextProperty(String name) { >- String value = repository.getProperty(name); >+ private String nvl(String value) { > if (value == null) { > return ""; > } > return value; > } > >+ private String getTextProperty(String name) { >+ return nvl(repository.getProperty(name)); >+ } >+ > protected boolean isValidUrl(String name) { > return true; > } >@@ -153,6 +206,13 @@ > gridData_1.minimumHeight = 80; > parametersEditor.setLayoutData(gridData_1); > >+ createAdvancedComposite(parent, composite); >+ createLoginComposite(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; >@@ -201,8 +261,59 @@ > GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); > gridData.heightHint = 40; > queryPatternText.setLayoutData(gridData); >+ } > >- return composite; >+ private void createLoginComposite(final 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_2.horizontalIndent = -5; >+ expComposite.setLayoutData(gridData_2); >+ expComposite.setFont(parent.getFont()); >+ expComposite.setBackground(parent.getBackground()); >+ expComposite.setText("&Login Configuration (Expert)"); >+ expComposite.addExpansionListener(new ExpansionAdapter() { >+ public void expansionStateChanged(ExpansionEvent e) { >+ composite.layout(); >+ } >+ }); >+ >+ Composite loginComposite = toolkit.createComposite(expComposite, SWT.BORDER); >+ loginComposite.setLayout(new ColumnLayout()); >+ Section loginTokenSection = toolkit.createSection(loginComposite, Section.TWISTIE | Section.TITLE_BAR); >+ loginTokenSection.setText("Step 1. Retrieve login token (optional)"); >+ Composite composite2 = toolkit.createComposite(loginTokenSection); >+ GridLayout gridLayout2 = new GridLayout(); >+ gridLayout2.numColumns = 2; >+ gridLayout2.verticalSpacing = 0; >+ composite2.setLayout(gridLayout2); >+ >+ Label queryUrlLabel = toolkit.createLabel(composite2, "Login &Page URL:", SWT.NONE); >+ queryUrlLabel.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false)); >+ >+ loginFormUrlText = new Text(composite2, SWT.BORDER); >+ loginFormUrlText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); >+ >+ Label queryPatternLabel = toolkit.createLabel(composite2, "Login &Token Pattern:", SWT.NONE); >+ queryPatternLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, false, true)); >+ >+ loginTokenPatternText = new Text(composite2, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.WRAP); >+ GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); >+ gridData.heightHint = 40; >+ loginTokenPatternText.setLayoutData(gridData); >+ >+ loginTokenSection.setClient(composite2); >+ >+ Section loginRequestSection = toolkit.createSection(loginComposite, Section.TWISTIE | Section.TITLE_BAR >+ | Section.EXPANDED); >+ loginRequestSection.setText("Step 2. Login request"); >+ >+ loginRequestEditor = new RESTRequestEditor(loginRequestSection, SWT.NONE); >+ toolkit.adapt(loginRequestEditor); >+ loginRequestSection.setClient(loginRequestEditor); >+ >+ expComposite.setClient(loginComposite); > } > > public void propertyChange(PropertyChangeEvent event) { >@@ -218,11 +329,21 @@ > 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_LOGIN_FORM_URL, loginFormUrlText.getText()); >+ repository.setProperty(WebRepositoryConnector.PROPERTY_LOGIN_TOKEN_REGEXP, loginTokenPatternText.getText()); >+ EHttpMethod method = loginRequestEditor.getMethod(); >+ if (method == null) { >+ repository.removeProperty(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_METHOD); >+ } else { >+ repository.setProperty(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_METHOD, method.name()); >+ } >+ repository.setProperty(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_URL, loginRequestEditor.getUrl()); > > if (oldProperties != null) { > for (Map.Entry<String, String> e : oldProperties.entrySet()) { > String key = e.getKey(); >- if (key.startsWith(WebRepositoryConnector.PARAM_PREFIX)) { >+ if (key.startsWith(WebRepositoryConnector.PARAM_PREFIX) >+ || key.startsWith(WebRepositoryConnector.LOGIN_REQUEST_PARAM_PREFIX)) { > repository.removeProperty(key); > } > } >@@ -231,6 +352,9 @@ > for (Map.Entry<String, String> e : parametersEditor.getParameters().entrySet()) { > repository.setProperty(e.getKey(), e.getValue()); > } >+ for (NameValuePair pair : loginRequestEditor.getParameters()) { >+ repository.setProperty(WebRepositoryConnector.LOGIN_REQUEST_PARAM_PREFIX + pair.getName(), pair.getValue()); >+ } > } > > } >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.5 >diff -u -r1.5 WebRepositoryConnector.java >--- src/org/eclipse/mylar/internal/tasks/web/WebRepositoryConnector.java 15 Nov 2006 03:55:06 -0000 1.5 >+++ src/org/eclipse/mylar/internal/tasks/web/WebRepositoryConnector.java 18 Nov 2006 16:11:40 -0000 >@@ -17,6 +17,7 @@ > import java.net.URLDecoder; > import java.util.ArrayList; > import java.util.Collections; >+import java.util.HashMap; > import java.util.List; > import java.util.Map; > import java.util.Set; >@@ -25,7 +26,10 @@ > > import org.apache.commons.httpclient.Header; > import org.apache.commons.httpclient.HttpClient; >+import org.apache.commons.httpclient.HttpMethod; >+import org.apache.commons.httpclient.NameValuePair; > 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; >@@ -34,6 +38,7 @@ > import org.eclipse.mylar.internal.tasks.core.WebQueryHit; > import org.eclipse.mylar.internal.tasks.core.WebTask; > import org.eclipse.mylar.internal.tasks.ui.RetrieveTitleFromUrlJob; >+import org.eclipse.mylar.internal.tasks.web.restui.EHttpMethod; > import org.eclipse.mylar.tasks.core.AbstractRepositoryConnector; > import org.eclipse.mylar.tasks.core.AbstractRepositoryQuery; > import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; >@@ -60,6 +65,16 @@ > > 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 LOGIN_REQUEST_PARAM_PREFIX = "loginRequestParam_"; >+ > public static final String PARAM_PREFIX = "param_"; > > public static final String PARAM_SERVER_URL = "serverUrl"; >@@ -68,6 +83,8 @@ > > public static final String PARAM_PASSWORD = "password"; > >+ public static final String PARAM_LOGIN_TOKEN = "loginToken"; >+ > public String getRepositoryType() { > return WebTask.REPOSITORY_TYPE; > } >@@ -159,11 +176,25 @@ > String queryUrl = evaluateParams(query.getUrl(), queryParameters, repository); > String queryPattern = evaluateParams(webQuery.getQueryPattern(), queryParameters, repository); > String taskPrefix = evaluateParams(webQuery.getTaskPrefix(), queryParameters, repository); >+ Map<String, String> loginParams = new HashMap<String, String>(); >+ loginParams.put(WebRepositoryConnector.PROPERTY_LOGIN_FORM_URL, evaluateParams(repository >+ .getProperty(WebRepositoryConnector.PROPERTY_LOGIN_FORM_URL), queryParameters, repository)); >+ loginParams.put(WebRepositoryConnector.PROPERTY_LOGIN_TOKEN_REGEXP, evaluateParams(repository >+ .getProperty(WebRepositoryConnector.PROPERTY_LOGIN_TOKEN_REGEXP), queryParameters, repository)); >+ loginParams.put(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_METHOD, evaluateParams(repository >+ .getProperty(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_METHOD), queryParameters, repository)); >+ loginParams.put(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_URL, evaluateParams(repository >+ .getProperty(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_URL), queryParameters, repository)); >+ for (Map.Entry<String, String> entry : repository.getProperties().entrySet()) { >+ if (entry.getKey().startsWith(WebRepositoryConnector.LOGIN_REQUEST_PARAM_PREFIX)) { >+ loginParams.put(entry.getKey(), entry.getValue()); >+ } >+ } > > try { > // if (regexp != null && regexp.trim().length() > 0) { >- return performQuery(fetchResource(queryUrl, repositoryUser, repositoryPassword), queryPattern, >- taskPrefix, monitor, resultCollector, repository); >+ return performQuery(fetchResource(queryUrl, repositoryUser, repositoryPassword, loginParams, >+ queryParameters, repository), queryPattern, taskPrefix, monitor, resultCollector, repository); > // } else { > // return performRssQuery(queryUrl, taskPrefix, repositoryUrl, > // repositoryUser, repositoryPassword, >@@ -270,17 +301,100 @@ > * 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); } } >+ * 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) throws IOException { >+ public static String fetchResource(String url, String user, String password, Map<String, String> loginParams, >+ Map<String, String> params, TaskRepository repository) throws IOException { > HttpClient client = new HttpClient(); > Proxy proxySettings = TasksUiPlugin.getDefault().getProxySettings(); > WebClientUtil.setupHttpClient(client, proxySettings, url, user, password); > >+ if (loginParams != null) { >+ String loginFormUrl = loginParams.get(PROPERTY_LOGIN_FORM_URL); >+ if (loginFormUrl != null && !"".equals(loginFormUrl)) { >+ GetMethod get = new GetMethod(loginFormUrl); >+ String loginFormPage = null; >+ try { >+ client.executeMethod(get); >+ Header locationHeader = get.getResponseHeader("Location"); >+ if (locationHeader != null) { >+ get = new GetMethod(locationHeader.getValue()); >+ client.executeMethod(get); >+ } >+ Header refreshHeader = get.getResponseHeader("Refresh"); >+ 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('/'); >+ } >+ >+ String refreshUrl; >+ if (requestPath == -1) { >+ refreshUrl = url + "/" + value; >+ } else { >+ refreshUrl = url.substring(0, requestPath + 1) + value; >+ } >+ >+ get = new GetMethod(refreshUrl); >+ client.executeMethod(get); >+ } >+ } >+ loginFormPage = get.getResponseBodyAsString(); >+ } catch (Exception e) { >+ // ignore >+ e.printStackTrace(); >+ } finally { >+ get.releaseConnection(); >+ } >+ if (loginFormPage != null) { >+ String loginTokenPattern = loginParams.get(PROPERTY_LOGIN_TOKEN_REGEXP); >+ if (loginTokenPattern != null && !"".equals(loginTokenPattern)) { >+ Pattern p = Pattern.compile(loginTokenPattern); >+ Matcher m = p.matcher(loginFormPage); >+ if (m.find()) { >+ // TODO is it ok to modify the params map? >+ params.put(PARAM_PREFIX + PARAM_LOGIN_TOKEN, m.group(1)); >+ } >+ } >+ } >+ } >+ HttpMethod method = null; >+ try { >+ switch (EHttpMethod.valueOf(loginParams.get(PROPERTY_LOGIN_REQUEST_METHOD))) { >+ case GET: >+ method = new GetMethod(loginParams.get(PROPERTY_LOGIN_REQUEST_URL)); >+ break; >+ case POST: >+ method = new PostMethod(loginParams.get(PROPERTY_LOGIN_REQUEST_URL)); >+ for (Map.Entry<String, String> entry : loginParams.entrySet()) { >+ if (entry.getKey().startsWith(LOGIN_REQUEST_PARAM_PREFIX)) { >+ String value = evaluateParams(entry.getValue(), params, repository); >+ ((PostMethod) method).addParameter(new NameValuePair(entry.getKey().substring( >+ LOGIN_REQUEST_PARAM_PREFIX.length()), value)); >+ } >+ } >+ break; >+ } >+ client.executeMethod(method); >+ } catch (Exception e) { >+ // ignore >+ } finally { >+ if (method != null) { >+ method.releaseConnection(); >+ } >+ } >+ } >+ > GetMethod get = new GetMethod(url); > try { > client.executeMethod(get); >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.3 >diff -u -r1.3 WebQueryWizardPage.java >--- src/org/eclipse/mylar/internal/tasks/web/WebQueryWizardPage.java 16 Nov 2006 05:11:22 -0000 1.3 >+++ src/org/eclipse/mylar/internal/tasks/web/WebQueryWizardPage.java 18 Nov 2006 16:11:40 -0000 >@@ -10,6 +10,7 @@ > > import java.io.IOException; > import java.util.ArrayList; >+import java.util.HashMap; > import java.util.LinkedHashMap; > import java.util.List; > import java.util.Map; >@@ -49,31 +50,36 @@ > > /** > * Wizard page for configuring and preview web query >- * >+ * > * @author Eugene Kuleshov > */ > public class WebQueryWizardPage extends AbstractRepositoryQueryPage { > private Text queryUrlText; >+ > private Text queryPatternText; >+ > private Table previewTable; > > private String webPage; > > private TaskRepository repository; >+ > private WebQuery query; >+ > private UpdatePreviewJob updatePreviewJob; > > private FormToolkit toolkit = new FormToolkit(Display.getCurrent()); >+ > private ParametersEditor parametersEditor; >- private Map<String, String> oldProperties; > >+ private Map<String, String> oldProperties; > > public WebQueryWizardPage(TaskRepository repository) { > this(repository, null); > } > > public WebQueryWizardPage(TaskRepository repository, WebQuery query) { >- super("New web query", query==null ? getDefaultQueryTitle(repository) : query.getDescription()); >+ super("New web query", query == null ? getDefaultQueryTitle(repository) : query.getDescription()); > this.repository = repository; > this.query = query; > setTitle("Create web query"); >@@ -83,15 +89,16 @@ > private static String getDefaultQueryTitle(TaskRepository repository) { > String label = repository.getRepositoryLabel(); > String title = label; >- Set<AbstractRepositoryQuery> queries = TasksUiPlugin.getTaskListManager().getTaskList().getRepositoryQueries(repository.getUrl()); >- for(int n = 1; true; n++) { >+ Set<AbstractRepositoryQuery> queries = TasksUiPlugin.getTaskListManager().getTaskList().getRepositoryQueries( >+ repository.getUrl()); >+ for (int n = 1; true; n++) { > for (AbstractRepositoryQuery query : queries) { >- if(query.getDescription().equals(title)) { >+ if (query.getDescription().equals(title)) { > title = label + " " + n; > } > } > return title; >- } >+ } > } > > public void createControl(Composite parent) { >@@ -105,17 +112,18 @@ > > super.createControl(composite); > >-// Label descriptionLabel = new Label(composite, SWT.NONE); >-// descriptionLabel.setLayoutData(new GridData()); >-// descriptionLabel.setText("Query Title:"); >- >-// queryTitleText = new Text(composite, SWT.BORDER); >-// queryTitleText.addModifyListener(new ModifyListener() { >-// public void modifyText(ModifyEvent e) { >-// setPageComplete(isPageComplete()); >-// } >-// }); >-// queryTitleText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); >+ // Label descriptionLabel = new Label(composite, SWT.NONE); >+ // descriptionLabel.setLayoutData(new GridData()); >+ // descriptionLabel.setText("Query Title:"); >+ >+ // queryTitleText = new Text(composite, SWT.BORDER); >+ // queryTitleText.addModifyListener(new ModifyListener() { >+ // public void modifyText(ModifyEvent e) { >+ // setPageComplete(isPageComplete()); >+ // } >+ // }); >+ // queryTitleText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, >+ // false)); > > parametersEditor = new ParametersEditor(composite, SWT.NONE); > GridData gridData1 = new GridData(SWT.FILL, SWT.FILL, true, true); >@@ -123,7 +131,8 @@ > gridData1.minimumHeight = 80; > parametersEditor.setLayoutData(gridData1); > >- ExpandableComposite expComposite = toolkit.createExpandableComposite(composite, Section.COMPACT | Section.TWISTIE); >+ ExpandableComposite expComposite = toolkit.createExpandableComposite(composite, Section.COMPACT >+ | Section.TWISTIE); > expComposite.setFont(parent.getFont()); > GridData gridData_1 = new GridData(SWT.FILL, SWT.FILL, true, false); > gridData_1.heightHint = 150; >@@ -161,13 +170,13 @@ > gridData.heightHint = 45; > queryPatternText.setLayoutData(gridData); > >-// regexpText.addModifyListener(new ModifyListener() { >-// public void modifyText(final ModifyEvent e) { >-// if(webPage!=null) { >-// updatePreview(); >-// } >-// } >-// }); >+ // regexpText.addModifyListener(new ModifyListener() { >+ // public void modifyText(final ModifyEvent e) { >+ // if(webPage!=null) { >+ // updatePreview(); >+ // } >+ // } >+ // }); > > Button preview = new Button(composite1, SWT.NONE); > preview.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false)); >@@ -198,16 +207,16 @@ > > LinkedHashMap<String, String> vars = new LinkedHashMap<String, String>(); > Map<String, String> params = new LinkedHashMap<String, String>(); >- if(repository!=null) { >- >+ if (repository != null) { > > queryUrlText.setText(addVars(vars, repository.getProperty(WebRepositoryConnector.PROPERTY_QUERY_URL))); >- queryPatternText.setText(addVars(vars, repository.getProperty(WebRepositoryConnector.PROPERTY_QUERY_REGEXP))); >+ queryPatternText >+ .setText(addVars(vars, repository.getProperty(WebRepositoryConnector.PROPERTY_QUERY_REGEXP))); > > oldProperties = repository.getProperties(); > params.putAll(oldProperties); > } >- if(query!=null) { >+ if (query != null) { > setTitle(query.getDescription()); > queryUrlText.setText(addVars(vars, query.getUrl())); > queryPatternText.setText(addVars(vars, query.getQueryPattern())); >@@ -217,10 +226,10 @@ > } > > private static String addVars(LinkedHashMap<String, String> vars, String property) { >- if(property==null) { >+ if (property == null) { > return ""; > } >- for(String var : WebRepositoryConnector.getTemplateVariables(property)) { >+ for (String var : WebRepositoryConnector.getTemplateVariables(property)) { > vars.put(var, ""); > } > return property; >@@ -232,48 +241,48 @@ > String queryPattern = queryPatternText.getText(); > Map<String, String> params = parametersEditor.getParameters(); > return new WebQuery(TasksUiPlugin.getTaskListManager().getTaskList(), description, queryUrl, queryPattern, >- repository.getProperty(WebRepositoryConnector.PROPERTY_TASK_URL), >- repository.getUrl(), params); >+ repository.getProperty(WebRepositoryConnector.PROPERTY_TASK_URL), repository.getUrl(), params); > } > > synchronized void updatePreview() { >- if(updatePreviewJob==null) { >+ if (updatePreviewJob == null) { > updatePreviewJob = new UpdatePreviewJob("Updating preview"); > updatePreviewJob.setPriority(Job.DECORATE); > } >- updatePreviewJob.setParams(queryUrlText.getText(), queryPatternText.getText(), parametersEditor.getParameters()); >- if(!updatePreviewJob.isActive()) { >+ updatePreviewJob >+ .setParams(queryUrlText.getText(), queryPatternText.getText(), parametersEditor.getParameters()); >+ if (!updatePreviewJob.isActive()) { > updatePreviewJob.schedule(); > } > } > > public boolean isPageComplete() { >- if(getErrorMessage()!=null) { >+ if (getErrorMessage() != null) { > return false; > } > return super.isPageComplete(); > } > > void updatePreviewTable(List<AbstractQueryHit> hits, MultiStatus queryStatus) { >- if(previewTable.isDisposed()) { >+ if (previewTable.isDisposed()) { > return; > } > > previewTable.removeAll(); > >- if(hits!=null) { >+ if (hits != null) { > for (AbstractQueryHit hit : hits) { > TableItem item = new TableItem(previewTable, SWT.NONE); >- if(hit.getId()!=null) { >+ if (hit.getId() != null) { > item.setText(0, hit.getId()); >- if(hit.getDescription()!=null) { >+ if (hit.getDescription() != null) { > item.setText(1, hit.getDescription()); > } > } > } > } > >- if(queryStatus.isOK()) { >+ if (queryStatus.isOK()) { > setErrorMessage(null); > setPageComplete(true); > } else { >@@ -288,8 +297,11 @@ > > private final class UpdatePreviewJob extends Job { > private volatile String url; >+ > private volatile String regexp; >+ > private volatile Map<String, String> params; >+ > private volatile boolean active = false; > > private UpdatePreviewJob(String name) { >@@ -312,31 +324,56 @@ > String evaluatedUrl = WebRepositoryConnector.evaluateParams(url, params, repository); > active = true; > do { >- final MultiStatus queryStatus = new MultiStatus(TasksUiPlugin.PLUGIN_ID, IStatus.OK, "Query result", null); >+ final MultiStatus queryStatus = new MultiStatus(TasksUiPlugin.PLUGIN_ID, IStatus.OK, "Query result", >+ null); > final List<AbstractQueryHit> queryHits = new ArrayList<AbstractQueryHit>(); > try { >- if(webPage==null) { >- webPage = WebRepositoryConnector.fetchResource(evaluatedUrl, repository.getUserName(), repository.getPassword()); >+ if (webPage == null) { >+ HashMap<String, String> loginParams = new HashMap<String, String>(); >+ loginParams.put(WebRepositoryConnector.PROPERTY_LOGIN_FORM_URL, WebRepositoryConnector >+ .evaluateParams(repository.getProperty(WebRepositoryConnector.PROPERTY_LOGIN_FORM_URL), >+ params, repository)); >+ loginParams.put(WebRepositoryConnector.PROPERTY_LOGIN_TOKEN_REGEXP, WebRepositoryConnector >+ .evaluateParams(repository >+ .getProperty(WebRepositoryConnector.PROPERTY_LOGIN_TOKEN_REGEXP), params, >+ repository)); >+ loginParams.put(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_METHOD, WebRepositoryConnector >+ .evaluateParams(repository >+ .getProperty(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_METHOD), params, >+ repository)); >+ loginParams.put(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_URL, WebRepositoryConnector >+ .evaluateParams(repository >+ .getProperty(WebRepositoryConnector.PROPERTY_LOGIN_REQUEST_URL), params, >+ repository)); >+ for (Map.Entry<String, String> entry : repository.getProperties().entrySet()) { >+ if (entry.getKey().startsWith(WebRepositoryConnector.LOGIN_REQUEST_PARAM_PREFIX)) { >+ loginParams.put(entry.getKey(), entry.getValue()); >+ } >+ } >+ webPage = WebRepositoryConnector.fetchResource(evaluatedUrl, repository.getUserName(), >+ repository.getPassword(), loginParams, params, repository); > } > >- QueryHitCollector collector = new QueryHitCollector(TasksUiPlugin.getTaskListManager().getTaskList()) { >+ QueryHitCollector collector = new QueryHitCollector(TasksUiPlugin.getTaskListManager() >+ .getTaskList()) { > @Override > public void addMatch(AbstractQueryHit hit) { > queryHits.add(hit); > } > }; > >- IStatus status = WebRepositoryConnector.performQuery(webPage, evaluatedRegexp, null, monitor, collector, repository); >- if(!status.isOK()) { >+ IStatus status = WebRepositoryConnector.performQuery(webPage, evaluatedRegexp, null, monitor, >+ collector, repository); >+ if (!status.isOK()) { > queryStatus.add(status); > } > > } catch (final IOException ex) { > queryStatus.add(new Status(IStatus.ERROR, TasksUiPlugin.PLUGIN_ID, IStatus.ERROR, >- "Unable to fetch resource: "+ex.getMessage(), null)); >+ "Unable to fetch resource: " + ex.getMessage(), null)); > } catch (final Exception ex) { >- queryStatus.add(new Status(IStatus.ERROR, TasksUiPlugin.PLUGIN_ID, IStatus.ERROR, >- "Parsing error: "+ex.getMessage(), null)); >+ queryStatus.add(new Status(IStatus.ERROR, TasksUiPlugin.PLUGIN_ID, IStatus.ERROR, "Parsing error: " >+ + ex.getMessage(), null)); > } > > Display.getDefault().asyncExec(new Runnable() { >@@ -344,11 +381,10 @@ > updatePreviewTable(queryHits, queryStatus); > } > }); >- } while(!currentRegexp.equals(currentRegexp) && !monitor.isCanceled()); >+ } while (!currentRegexp.equals(currentRegexp) && !monitor.isCanceled()); > active = false; > return Status.OK_STATUS; > } > } > > } >- >Index: .project >=================================================================== >RCS file: /cvsroot/technology/org.eclipse.mylar/org.eclipse.mylar.tasks.web/.project,v >retrieving revision 1.1 >diff -u -r1.1 .project >--- .project 10 Nov 2006 02:13:18 -0000 1.1 >+++ .project 18 Nov 2006 16:11:39 -0000 >@@ -22,7 +22,9 @@ > </buildCommand> > </buildSpec> > <natures> >+ <nature>org.eclipse.jem.workbench.JavaEMFNature</nature> > <nature>org.eclipse.pde.PluginNature</nature> > <nature>org.eclipse.jdt.core.javanature</nature> >+ <nature>org.eclipse.jem.beaninfo.BeanInfoNature</nature> > </natures> > </projectDescription> >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 18 Nov 2006 16:11:39 -0000 >@@ -141,6 +141,68 @@ > <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>"> >+ </attribute> >+ <attribute >+ name="loginFormUrl" >+ value="${serverUrl}"> >+ </attribute> >+ </repository> >+ <repository >+ anonymous="false" >+ label="ChangeLogic (private)" >+ repositoryKind="web" >+ urlNewTask="${serverUrl}/index.php?event=Add_task&project_id=${projectId}" >+ urlRepository="http://changelogic.araneaframework.org" >+ urlTask="${serverUrl}/index.php?event=Show_task&task_id=" >+ urlTaskQuery="${serverUrl}/index.php?event=Show_task_list&project_id=${projectId}"> >+ <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> >+ <attribute >+ name="loginRequestMethod" >+ value="POST"> >+ </attribute> >+ <attribute >+ name="loginRequestUrl" >+ value="${serverUrl}/index.php?event=Login"> >+ </attribute> >+ <attribute >+ name="queryPattern" >+ value="<a href="index.php\?event\=Show_task&amp;task_id\=.+?&amp;project_id\=${projectId}&amp;recent_list_id=.+?">(.+?)</a>.+?</td>.+?<td>.+?</td>.+?<td>.+?</td>.+?<td>.+?</td>.+?<td>.+?</td>.+?<td>(.+?)</td>"> >+ </attribute> >+ <attribute >+ name="loginRequestParam_link_uid" >+ value="${loginToken}"> >+ </attribute> >+ <attribute >+ name="loginRequestParam_username" >+ value="${userId}"> >+ </attribute> >+ <attribute >+ name="loginRequestParam_password" >+ value="${password}"> >+ </attribute> >+ <attribute >+ name="param_projectId" >+ value="1"> >+ </attribute> >+ </repository> > </extension> > > </plugin> >Index: src/org/eclipse/mylar/internal/tasks/web/restui/MethodTypeContentProvider.java >=================================================================== >RCS file: src/org/eclipse/mylar/internal/tasks/web/restui/MethodTypeContentProvider.java >diff -N src/org/eclipse/mylar/internal/tasks/web/restui/MethodTypeContentProvider.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/mylar/internal/tasks/web/restui/MethodTypeContentProvider.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,28 @@ >+/******************************************************************************* >+ * Copyright (c) 2005, 2006 Erkki Lindpere and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * Erkki Lindpere - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.mylar.internal.tasks.web.restui; >+ >+import org.eclipse.jface.viewers.IStructuredContentProvider; >+import org.eclipse.jface.viewers.Viewer; >+ >+public class MethodTypeContentProvider implements IStructuredContentProvider { >+ >+ public Object[] getElements(Object inputElement) { >+ return EHttpMethod.values(); >+ } >+ >+ public void dispose() { >+ } >+ >+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { >+ } >+ >+} >Index: src/org/eclipse/mylar/internal/tasks/web/restui/NameValuePairLabelProvider.java >=================================================================== >RCS file: src/org/eclipse/mylar/internal/tasks/web/restui/NameValuePairLabelProvider.java >diff -N src/org/eclipse/mylar/internal/tasks/web/restui/NameValuePairLabelProvider.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/mylar/internal/tasks/web/restui/NameValuePairLabelProvider.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,37 @@ >+/******************************************************************************* >+ * Copyright (c) 2005, 2006 Erkki Lindpere and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * Erkki Lindpere - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.mylar.internal.tasks.web.restui; >+ >+import org.eclipse.jface.viewers.ITableLabelProvider; >+import org.eclipse.jface.viewers.LabelProvider; >+import org.eclipse.swt.graphics.Image; >+ >+public class NameValuePairLabelProvider extends LabelProvider implements >+ ITableLabelProvider { >+ >+ public Image getColumnImage(Object element, int columnIndex) { >+ return getImage(element); >+ } >+ >+ public String getColumnText(Object element, int columnIndex) { >+ if (element instanceof NameValuePair) { >+ NameValuePair pair = (NameValuePair) element; >+ switch (columnIndex) { >+ case 0: >+ return pair.getName(); >+ case 1: >+ return pair.getValue(); >+ } >+ } >+ return getText(element); >+ } >+ >+} >Index: src/org/eclipse/mylar/internal/tasks/web/restui/EHttpMethod.java >=================================================================== >RCS file: src/org/eclipse/mylar/internal/tasks/web/restui/EHttpMethod.java >diff -N src/org/eclipse/mylar/internal/tasks/web/restui/EHttpMethod.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/mylar/internal/tasks/web/restui/EHttpMethod.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,20 @@ >+/******************************************************************************* >+ * Copyright (c) 2005, 2006 Erkki Lindpere and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * Erkki Lindpere - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.mylar.internal.tasks.web.restui; >+ >+/** >+ * Represents a subset of HTTP methods: GET and POST >+ * >+ * @author Erkki Lindpere >+ */ >+public enum EHttpMethod { >+ GET, POST >+} >Index: src/org/eclipse/mylar/internal/tasks/web/restui/RESTRequestEditor.java >=================================================================== >RCS file: src/org/eclipse/mylar/internal/tasks/web/restui/RESTRequestEditor.java >diff -N src/org/eclipse/mylar/internal/tasks/web/restui/RESTRequestEditor.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/mylar/internal/tasks/web/restui/RESTRequestEditor.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,290 @@ >+/******************************************************************************* >+ * Copyright (c) 2005, 2006 Erkki Lindpere and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * Erkki Lindpere - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.mylar.internal.tasks.web.restui; >+ >+import org.eclipse.jface.viewers.CellEditor; >+import org.eclipse.jface.viewers.ComboViewer; >+import org.eclipse.jface.viewers.ICellModifier; >+import org.eclipse.jface.viewers.ISelection; >+import org.eclipse.jface.viewers.ISelectionChangedListener; >+import org.eclipse.jface.viewers.IStructuredSelection; >+import org.eclipse.jface.viewers.SelectionChangedEvent; >+import org.eclipse.jface.viewers.StructuredSelection; >+import org.eclipse.jface.viewers.TableViewer; >+import org.eclipse.jface.viewers.TextCellEditor; >+import org.eclipse.swt.SWT; >+import org.eclipse.swt.graphics.Point; >+import org.eclipse.swt.layout.GridData; >+import org.eclipse.swt.layout.GridLayout; >+import org.eclipse.swt.widgets.Button; >+import org.eclipse.swt.widgets.Combo; >+import org.eclipse.swt.widgets.Composite; >+import org.eclipse.swt.widgets.Group; >+import org.eclipse.swt.widgets.Label; >+import org.eclipse.swt.widgets.Table; >+import org.eclipse.swt.widgets.TableColumn; >+import org.eclipse.swt.widgets.TableItem; >+import org.eclipse.swt.widgets.Text; >+ >+public class RESTRequestEditor extends Composite { >+ >+ private Label urlLabel = null; >+ >+ private Label methodLabel = null; >+ >+ private Text urlText = null; >+ >+ private Combo methodCombo = null; >+ >+ private Group parametersGroup = null; >+ >+ private Table parametersTable = null; >+ >+ private TableViewer parametersViewer = null; >+ >+ private Composite buttonsComposite = null; >+ >+ private Button addButton = null; >+ >+ private Button removeButton = null; >+ >+ private ComboViewer comboViewer = null; >+ >+ public RESTRequestEditor(Composite parent, int style) { >+ super(parent, style); >+ initialize(); >+ } >+ >+ private void initialize() { >+ GridData gridData = new GridData(); >+ gridData.grabExcessHorizontalSpace = true; >+ gridData.verticalAlignment = GridData.CENTER; >+ gridData.horizontalAlignment = GridData.FILL; >+ GridLayout gridLayout = new GridLayout(); >+ gridLayout.numColumns = 2; >+ methodLabel = new Label(this, SWT.NONE); >+ methodLabel.setText("Method:"); >+ createMethodCombo(); >+ urlLabel = new Label(this, SWT.NONE); >+ urlLabel.setText("URL:"); >+ urlText = new Text(this, SWT.BORDER); >+ urlText.setLayoutData(gridData); >+ this.setLayout(gridLayout); >+ createParametersGroup(); >+ setSize(new Point(300, 200)); >+ } >+ >+ /** >+ * This method initializes methodCombo >+ * >+ */ >+ private void createMethodCombo() { >+ methodCombo = new Combo(this, SWT.NONE); >+ comboViewer = new ComboViewer(methodCombo); >+ comboViewer.setContentProvider(new MethodTypeContentProvider()); >+ comboViewer.setInput(new Object()); >+ comboViewer.setLabelProvider(new MethodTypeLabelProvider()); >+ comboViewer.addSelectionChangedListener(new ISelectionChangedListener() { >+ >+ public void selectionChanged(SelectionChangedEvent event) { >+ updateParametersGroupEnablement(event.getSelection()); >+ } >+ >+ }); >+ } >+ >+ private void updateParametersGroupEnablement(ISelection selection) { >+ IStructuredSelection sSel = (IStructuredSelection) selection; >+ boolean enabled = EHttpMethod.POST.equals(sSel.getFirstElement()); >+ parametersGroup.setEnabled(enabled); >+ parametersTable.setEnabled(enabled); >+ updateButtonsEnablement(enabled); >+ } >+ >+ private void updateButtonsEnablement(boolean enabled) { >+ addButton.setEnabled(enabled); >+ removeButton.setEnabled(enabled && !parametersViewer.getSelection().isEmpty()); >+ } >+ >+ /** >+ * This method initializes parametersGroup >+ * >+ */ >+ private void createParametersGroup() { >+ GridLayout gridLayout1 = new GridLayout(); >+ gridLayout1.numColumns = 2; >+ GridData gridData2 = new GridData(); >+ gridData2.grabExcessHorizontalSpace = true; >+ gridData2.horizontalAlignment = GridData.FILL; >+ gridData2.verticalAlignment = GridData.FILL; >+ gridData2.grabExcessVerticalSpace = true; >+ GridData gridData1 = new GridData(); >+ gridData1.horizontalSpan = 2; >+ gridData1.verticalAlignment = GridData.FILL; >+ gridData1.grabExcessVerticalSpace = true; >+ gridData1.horizontalAlignment = GridData.FILL; >+ parametersGroup = new Group(this, SWT.NONE); >+ parametersGroup.setText("POST Parameters"); >+ parametersGroup.setLayout(gridLayout1); >+ parametersGroup.setLayoutData(gridData1); >+ parametersTable = new Table(parametersGroup, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI); >+ parametersTable.setHeaderVisible(true); >+ parametersTable.setLayoutData(gridData2); >+ parametersTable.setLinesVisible(true); >+ createButtonsComposite(); >+ TableColumn tableColumn = new TableColumn(parametersTable, SWT.NONE); >+ tableColumn.setWidth(60); >+ tableColumn.setText("Name"); >+ TableColumn tableColumn1 = new TableColumn(parametersTable, SWT.NONE); >+ tableColumn1.setWidth(120); >+ tableColumn1.setText("Value"); >+ parametersViewer = new TableViewer(parametersTable); >+ parametersViewer.setLabelProvider(new NameValuePairLabelProvider()); >+ parametersViewer.setCellEditors(new CellEditor[] { new TextCellEditor(parametersTable), >+ new TextCellEditor(parametersTable) }); >+ parametersViewer.setColumnProperties(new String[] { "name", "value" }); >+ parametersViewer.setCellModifier(new ICellModifier() { >+ >+ public boolean canModify(Object element, String property) { >+ return true; >+ } >+ >+ public Object getValue(Object element, String property) { >+ if (element instanceof NameValuePair) { >+ NameValuePair pair = (NameValuePair) element; >+ if ("name".equals(property)) { >+ return pair.getName(); >+ } >+ if ("value".equals(property)) { >+ return pair.getValue(); >+ } >+ } >+ return null; >+ } >+ >+ public void modify(Object element, String property, Object value) { >+ if (element instanceof TableItem) { >+ TableItem item = (TableItem) element; >+ element = item.getData(); >+ } >+ if (element instanceof NameValuePair) { >+ NameValuePair pair = (NameValuePair) element; >+ if ("name".equals(property)) { >+ pair.setName((String) value); >+ } >+ if ("value".equals(property)) { >+ pair.setValue((String) value); >+ } >+ parametersViewer.refresh(element); >+ } >+ } >+ >+ }); >+ parametersViewer.addSelectionChangedListener(new ISelectionChangedListener() { >+ >+ public void selectionChanged(SelectionChangedEvent event) { >+ updateButtonsEnablement(true); >+ } >+ >+ }); >+ updateParametersGroupEnablement(new StructuredSelection()); >+ } >+ >+ /** >+ * This method initializes buttonsComposite >+ * >+ */ >+ private void createButtonsComposite() { >+ GridData gridData5 = new GridData(); >+ gridData5.horizontalAlignment = GridData.FILL; >+ gridData5.verticalAlignment = GridData.CENTER; >+ GridData gridData4 = new GridData(); >+ gridData4.horizontalAlignment = GridData.FILL; >+ gridData4.verticalAlignment = GridData.CENTER; >+ GridData gridData3 = new GridData(); >+ gridData3.horizontalAlignment = GridData.FILL; >+ gridData3.verticalAlignment = GridData.FILL; >+ buttonsComposite = new Composite(parametersGroup, SWT.NONE); >+ buttonsComposite.setLayout(new GridLayout()); >+ buttonsComposite.setLayoutData(gridData3); >+ addButton = new Button(buttonsComposite, SWT.NONE); >+ addButton.setText("Add"); >+ addButton.setLayoutData(gridData4); >+ addButton.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { >+ public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { >+ IStructuredSelection selection = (IStructuredSelection) parametersViewer.getSelection(); >+ Object newObject = new NameValuePair("<name>", "<value>"); >+ if (!selection.isEmpty()) { >+ int minIndex = -1; >+ for (int i : parametersTable.getSelectionIndices()) { >+ if (minIndex == -1 || i < minIndex) { >+ minIndex = i; >+ } >+ } >+ parametersViewer.insert(newObject, minIndex); >+ } else { >+ parametersViewer.add(newObject); >+ } >+ } >+ }); >+ removeButton = new Button(buttonsComposite, SWT.NONE); >+ removeButton.setText("Remove"); >+ removeButton.setLayoutData(gridData5); >+ removeButton.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { >+ public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { >+ IStructuredSelection selection = (IStructuredSelection) parametersViewer.getSelection(); >+ for (Object selected : selection.toArray()) { >+ parametersViewer.remove(selected); >+ } >+ } >+ }); >+ } >+ >+ public NameValuePair[] getParameters() { >+ TableItem[] items = parametersTable.getItems(); >+ NameValuePair[] pairs = new NameValuePair[items.length]; >+ int i = 0; >+ for (TableItem item : items) { >+ pairs[i++] = (NameValuePair) item.getData(); >+ } >+ return pairs; >+ } >+ >+ public void setParameters(NameValuePair[] pairs) { >+ parametersTable.removeAll(); >+ for (NameValuePair pair : pairs) { >+ parametersViewer.add(pair); >+ } >+ } >+ >+ public String getUrl() { >+ return urlText.getText(); >+ } >+ >+ public void setUrl(String url) { >+ urlText.setText(url); >+ } >+ >+ public EHttpMethod getMethod() { >+ return (EHttpMethod) ((IStructuredSelection) comboViewer.getSelection()).getFirstElement(); >+ } >+ >+ public void setMethod(EHttpMethod method) { >+ ISelection selection = null; >+ if (method == null) { >+ selection = new StructuredSelection(); >+ } else { >+ selection = new StructuredSelection(method); >+ } >+ comboViewer.setSelection(selection); >+ updateParametersGroupEnablement(selection); >+ } >+} >Index: src/org/eclipse/mylar/internal/tasks/web/restui/NameValuePair.java >=================================================================== >RCS file: src/org/eclipse/mylar/internal/tasks/web/restui/NameValuePair.java >diff -N src/org/eclipse/mylar/internal/tasks/web/restui/NameValuePair.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/mylar/internal/tasks/web/restui/NameValuePair.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,42 @@ >+/******************************************************************************* >+ * Copyright (c) 2005, 2006 Erkki Lindpere and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * Erkki Lindpere - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.mylar.internal.tasks.web.restui; >+ >+import java.io.Serializable; >+ >+public class NameValuePair implements Serializable { >+ private static final long serialVersionUID = 987600743855633022L; >+ private String name; >+ private String value; >+ >+ public NameValuePair(String name, String value) { >+ super(); >+ this.name = name; >+ this.value = value; >+ } >+ >+ public String getName() { >+ return name; >+ } >+ >+ public void setName(String name) { >+ this.name = name; >+ } >+ >+ public String getValue() { >+ return value; >+ } >+ >+ public void setValue(String value) { >+ this.value = value; >+ } >+ >+} >Index: src/org/eclipse/mylar/internal/tasks/web/restui/MethodTypeLabelProvider.java >=================================================================== >RCS file: src/org/eclipse/mylar/internal/tasks/web/restui/MethodTypeLabelProvider.java >diff -N src/org/eclipse/mylar/internal/tasks/web/restui/MethodTypeLabelProvider.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/mylar/internal/tasks/web/restui/MethodTypeLabelProvider.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,26 @@ >+/******************************************************************************* >+ * Copyright (c) 2005, 2006 Erkki Lindpere and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * Erkki Lindpere - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.mylar.internal.tasks.web.restui; >+ >+import org.eclipse.jface.viewers.LabelProvider; >+ >+public class MethodTypeLabelProvider extends LabelProvider { >+ >+ @Override >+ public String getText(Object element) { >+ if (element instanceof EHttpMethod) { >+ EHttpMethod type = (EHttpMethod) element; >+ return type.name(); >+ } >+ return super.getText(element); >+ } >+ >+}
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