diff options
author | Jeff Johnston | 2017-11-29 18:36:56 +0000 |
---|---|---|
committer | Jeff Johnston | 2017-11-29 21:56:06 +0000 |
commit | 2b0a45b6c15ede61a69c5b829419831517c56002 (patch) | |
tree | 822cf3188eeebf6590128d6b72a17c29b3e8e4aa | |
parent | 1435e3954884bf60bfa844e634f6f421dd7086f9 (diff) | |
download | org.eclipse.linuxtools-2b0a45b6c15ede61a69c5b829419831517c56002.tar.gz org.eclipse.linuxtools-2b0a45b6c15ede61a69c5b829419831517c56002.tar.xz org.eclipse.linuxtools-2b0a45b6c15ede61a69c5b829419831517c56002.zip |
OSIO Mylyn improvements
- fix regression for New Task caused by looking for space id in
OSIORestClient postTaskData which doesn't exist for a new task
- fix UI look and feel for the Repository query page by adding
our own RepositoryQueryAttributeEditor class
- add token fetch support to OSIORestRequest which will try to
get the token provider extension before attempting to use
the user-provided token
- remove Activity section from the Task editor
- fix ordering of work item types by using a TreeMap in Space class
- put repository under Tasks category instead of Bugs which
doesn't apply here
- add org.eclipse.core.resources as dependency to core plug-in
Change-Id: I7155e4c152607894c52db0e9d210b3cc8e600390
Reviewed-on: https://git.eclipse.org/r/112588
Tested-by: Hudson CI
Reviewed-by: Jeff Johnston <jjohnstn@redhat.com>
11 files changed, 267 insertions, 63 deletions
diff --git a/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/META-INF/MANIFEST.MF b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/META-INF/MANIFEST.MF index d354c78c94..7b5d8fb277 100644 --- a/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/META-INF/MANIFEST.MF +++ b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/META-INF/MANIFEST.MF @@ -15,7 +15,8 @@ Require-Bundle: org.eclipse.core.runtime, com.google.guava;bundle-version="21.0.0", org.apache.httpcomponents.httpclient;bundle-version="4.5.2", org.apache.httpcomponents.httpcore;bundle-version="4.4.6", - com.google.gson;bundle-version="2.7.0" + com.google.gson;bundle-version="2.7.0", + org.eclipse.core.resources Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy Import-Package: org.eclipse.jdt.annotation diff --git a/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/core/OSIORestClient.java b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/core/OSIORestClient.java index 674920e95f..a9935e8b11 100644 --- a/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/core/OSIORestClient.java +++ b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/core/OSIORestClient.java @@ -304,17 +304,11 @@ public class OSIORestClient { public RepositoryResponse postTaskData(TaskData taskData, Set<TaskAttribute> oldAttributes, TaskRepository repository, IOperationMonitor monitor) throws OSIORestException { - TaskAttribute spaceIdAttribute = taskData.getRoot().getAttribute(OSIORestTaskSchema.getDefault().SPACE_ID.getKey()); - String spaceId = spaceIdAttribute.getValue(); Space space = null; if (taskData.isNew()) { + TaskAttribute spaceAttribute = taskData.getRoot().getAttribute(OSIORestTaskSchema.getDefault().SPACE.getKey()); Map<String, Space> spaces = getCachedSpaces(new NullOperationMonitor()); - for (Space s : spaces.values()) { - if (s.getId().equals(spaceId)) { - space = s; - break; - } - } + space = spaces.get(spaceAttribute.getValue()); String id = null; try { id = new OSIORestPostNewTask(client, taskData, space, connector, repository).run(monitor); @@ -323,6 +317,8 @@ public class OSIORestClient { } return new RepositoryResponse(ResponseKind.TASK_CREATED, id); } else { + TaskAttribute spaceIdAttribute = taskData.getRoot().getAttribute(OSIORestTaskSchema.getDefault().SPACE_ID.getKey()); + String spaceId = spaceIdAttribute.getValue(); OSIORestConfiguration config; try { config = connector.getRepositoryConfiguration(repository); diff --git a/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/core/OSIORestCreateTaskSchema.java b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/core/OSIORestCreateTaskSchema.java index fb04049197..0af33fffe4 100644 --- a/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/core/OSIORestCreateTaskSchema.java +++ b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/core/OSIORestCreateTaskSchema.java @@ -36,4 +36,4 @@ public class OSIORestCreateTaskSchema extends AbstractTaskSchema { public final Field TITLE = inheritFrom(parent.SUMMARY).addFlags(Flag.REQUIRED).create(); -} +} diff --git a/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/core/OSIORestMessages.properties b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/core/OSIORestMessages.properties index c230c306e7..52ea493180 100644 --- a/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/core/OSIORestMessages.properties +++ b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/core/OSIORestMessages.properties @@ -36,6 +36,8 @@ SchemaLinks.label=Links\n(Select to remove) SchemaRemoveLinks.label=Remove Link SchemaNumber.label=# +TokenProviderFetchError.msg=Error fetching OpenShift.io token provider + UnknownAssignee.msg=Assignee: {0} not valid for space UnknownLabel.msg=Label: {0} not valid for space diff --git a/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/core/OSIORestRequest.java b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/core/OSIORestRequest.java index 219784f825..90f92a1fec 100644 --- a/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/core/OSIORestRequest.java +++ b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/core/OSIORestRequest.java @@ -18,14 +18,20 @@ import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.util.function.Function; -import org.apache.commons.httpclient.Header; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.methods.HttpRequestBase; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.Status; import org.eclipse.linuxtools.internal.mylyn.osio.rest.core.response.data.ErrorResponse; +import org.eclipse.mylyn.commons.core.StatusHandler; import org.eclipse.mylyn.commons.core.operations.IOperationMonitor; -import org.eclipse.mylyn.commons.repositories.core.RepositoryLocation; import org.eclipse.mylyn.commons.repositories.core.auth.AuthenticationException; import org.eclipse.mylyn.commons.repositories.core.auth.AuthenticationRequest; import org.eclipse.mylyn.commons.repositories.core.auth.AuthenticationType; @@ -38,7 +44,6 @@ import org.eclipse.osgi.util.NLS; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; -import com.google.gson.stream.JsonWriter; public abstract class OSIORestRequest<T> extends CommonHttpOperation<T> { protected static final String ACCEPT = "Accept"; //$NON-NLS-1$ @@ -102,47 +107,35 @@ public abstract class OSIORestRequest<T> extends CommonHttpOperation<T> { String urlSuffix = getUrlSuffix(); return baseUrl() + urlSuffix; } - + + private Function<IResource, String> getProvider() { + IConfigurationElement[] elements = Platform.getExtensionRegistry().getConfigurationElementsFor("org.jboss.tools.openshift.io.core.tokenProvider"); //$NON-NLS-1$ + for(IConfigurationElement element : elements) { + try { + return (Function<IResource, String>) element.createExecutableExtension("class"); //$NON-NLS-1$ + } catch (CoreException e) { + StatusHandler.log(new Status(IStatus.ERROR, OSIORestCore.ID_PLUGIN, + OSIORestMessages.getString("TokenProviderFetchError.msg"), //$NON-NLS-1$ + e)); + } + } + return null; + } + private String getToken() { - String auth_token = getClient().getLocation().getProperty(IOSIORestConstants.REPOSITORY_AUTH_TOKEN); + String auth_token = null; + Function<IResource, String> provider = getProvider(); + if (provider != null) { + auth_token = (String) provider.apply(null); + } + if (auth_token != null) { + return auth_token; + } + auth_token = getClient().getLocation().getProperty(IOSIORestConstants.REPOSITORY_AUTH_TOKEN); if (auth_token != null) { return auth_token; } - // TODO: remove below when authorization UI is working - return "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIwb" - + "EwwdlhzOVlSVnFaTW93eXc4dU5MUl95cjBpRmFvemR" - + "RazlyenEyT1ZVIn0.eyJqdGkiOiI5YTlmMTk3Yi1iY" - + "2I4LTRmY2QtYjM2OC04ZDg5MDRjYmRiYWIiLCJleHA" - + "iOjE1MDgzODgwNjgsIm5iZiI6MCwiaWF0IjoxNTA1N" - + "zk2MDY4LCJpc3MiOiJodHRwczovL3Nzby5vcGVuc2h" - + "pZnQuaW8vYXV0aC9yZWFsbXMvZmFicmljOCIsImF1Z" - + "CI6ImZhYnJpYzgtb25saW5lLXBsYXRmb3JtIiwic3V" - + "iIjoiZTkwMjRmODQtODQ1My00YTgwLWFjZWMtOThhM" - + "jc2ODZlYzI0IiwidHlwIjoiQmVhcmVyIiwiYXpwIjo" - + "iZmFicmljOC1vbmxpbmUtcGxhdGZvcm0iLCJhdXRoX" - + "3RpbWUiOjE1MDU0OTA4MjUsInNlc3Npb25fc3RhdGU" - + "iOiI5MTFlZWE0Ny01NjcyLTRkNGItYWZiMi1mOTFjM" - + "TQ2NGE1MTciLCJhY3IiOiIwIiwiYWxsb3dlZC1vcml" - + "naW5zIjpbIioiXSwicmVhbG1fYWNjZXNzIjp7InJvb" - + "GVzIjpbInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXN" - + "vdXJjZV9hY2Nlc3MiOnsiYnJva2VyIjp7InJvbGVzI" - + "jpbInJlYWQtdG9rZW4iXX0sImFjY291bnQiOnsicm9" - + "sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtY" - + "WNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0" - + "sImFwcHJvdmVkIjp0cnVlLCJuYW1lIjoiSmVmZiBKb" - + "2huc3RvbiIsImNvbXBhbnkiOiJSZWQgSGF0IiwicHJ" - + "lZmVycmVkX3VzZXJuYW1lIjoiampvaG5zdG4iLCJna" - + "XZlbl9uYW1lIjoiSmVmZiIsImZhbWlseV9uYW1lIjo" - + "iSm9obnN0b24iLCJlbWFpbCI6Impqb2huc3RuQHJlZ" - + "GhhdC5jb20ifQ.VMe9GfHxG51BkH5YPXyfcLsZgIi9" - + "-ui0gXzco3t7AKLhIsHKUYiInurwxYJVT2ToHffMwN" - + "rrfUbm0eGAkLbR_A_04vvYzi7keBMep0XjuZW6lM3v" - + "xb-93NxITQcHCNMFvLxvm1wrN5ui29X5x4NIcIcU0K" - + "ye2qsDKn_d-UxQXDgxavqrc_a5d0RYb-WImPej2ZDe" - + "po8IU16Ev-wPWLLN91KnqLBSyVCB2MxFkkdNOE284n" - + "I5p2yzCX_QbVMKdbuY0S8Hyu8Bs-A1LMBAB2xuecSu" - + "u4Glykw9KNNOV8KqNSAoDwm_KIw7SG2kcv_d8Z4oap" - + "HlrNg4u9_2rsPzEKotnw"; + return ""; //$NON-NLS-1$ } private String getBearer() { @@ -168,7 +161,7 @@ public abstract class OSIORestRequest<T> extends CommonHttpOperation<T> { throws IOException, OSIORestException { try (BufferedInputStream is = new BufferedInputStream(response.getResponseEntityAsStream())) { InputStreamReader in = new InputStreamReader(is); - throwExeptionIfRestError(is, in); + throwExceptionIfRestError(is, in); return parseFromJson(in); } } @@ -235,7 +228,7 @@ public abstract class OSIORestRequest<T> extends CommonHttpOperation<T> { return new Gson().fromJson(in, a.getType()); } - protected void throwExeptionIfRestError(InputStream is, InputStreamReader in) + protected void throwExceptionIfRestError(InputStream is, InputStreamReader in) throws IOException, OSIORestException { try { is.mark(18); diff --git a/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/core/response/data/Space.java b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/core/response/data/Space.java index eb7ee24e0d..91d7781884 100644 --- a/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/core/response/data/Space.java +++ b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.core/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/core/response/data/Space.java @@ -12,6 +12,7 @@ package org.eclipse.linuxtools.internal.mylyn.osio.rest.core.response.data; import java.util.LinkedHashMap; import java.util.Map; +import java.util.TreeMap; import java.util.stream.Collectors; public class Space implements IdNamed { @@ -93,8 +94,8 @@ public class Space implements IdNamed { public void setWorkItemTypes(Map<String, WorkItemTypeData> workItemTypes) { this.workItemTypes = workItemTypes; - this.workItemTypesIdNamed = workItemTypes.entrySet().stream() - .collect(Collectors.toMap(Map.Entry::getKey, e -> (IdNamed)e.getValue())); + this.workItemTypesIdNamed = new TreeMap<>(workItemTypes.entrySet().stream() + .collect(Collectors.toMap(Map.Entry::getKey, e -> (IdNamed)e.getValue()))); } public Map<String, WorkItemTypeData> getWorkItemTypes() { diff --git a/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.ui/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/ui/OSIORestRepositorySettingsPage.java b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.ui/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/ui/OSIORestRepositorySettingsPage.java index 49c34ab16a..2e3284f3d4 100644 --- a/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.ui/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/ui/OSIORestRepositorySettingsPage.java +++ b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.ui/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/ui/OSIORestRepositorySettingsPage.java @@ -75,7 +75,7 @@ public class OSIORestRepositorySettingsPage extends AbstractRepositorySettingsPa authTokenLabel = new Label(authTokenContainer, SWT.NONE); authTokenLabel.setText(Messages.OSIORestRepositorySettingsPage_auth_token); - authToken = new StyledText(authTokenContainer, SWT.BORDER | SWT.WRAP); + authToken = new StyledText(authTokenContainer, SWT.BORDER | SWT.WRAP | SWT.PASSWORD); authToken.setEnabled(true); GridDataFactory.fillDefaults() .grab(true, true) @@ -117,6 +117,7 @@ public class OSIORestRepositorySettingsPage extends AbstractRepositorySettingsPa public void applyTo(TaskRepository repository) { repository.setProperty(IOSIORestConstants.REPOSITORY_AUTH_TOKEN, authToken.getText()); repository.setProperty(IOSIORestConstants.REPOSITORY_AUTH_ID, userId.getText()); + repository.setCategory(TaskRepository.CATEGORY_TASKS); super.applyTo(repository); } } diff --git a/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.ui/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/ui/OSIORestTaskEditorPage.java b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.ui/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/ui/OSIORestTaskEditorPage.java index ed367bc72a..80cd191649 100644 --- a/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.ui/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/ui/OSIORestTaskEditorPage.java +++ b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.ui/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/ui/OSIORestTaskEditorPage.java @@ -89,6 +89,7 @@ public class OSIORestTaskEditorPage extends AbstractTaskEditorPage { ArrayList<TaskEditorPartDescriptor> descriptorsToRemove = new ArrayList<TaskEditorPartDescriptor>(2); for (TaskEditorPartDescriptor taskEditorPartDescriptor : descriptors) { if (taskEditorPartDescriptor.getId().equals(ID_PART_PEOPLE) || + taskEditorPartDescriptor.getId().equals("org.eclipse.mylyn.tasks.activity.ui.viewer.ActivityPart") || //$NON-NLS-1$ taskEditorPartDescriptor.getId().equals(ID_PART_ATTRIBUTES)) { descriptorsToRemove.add(taskEditorPartDescriptor); continue; diff --git a/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.ui/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/ui/provisional/RepositoryQueryAttributeEditor.java b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.ui/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/ui/provisional/RepositoryQueryAttributeEditor.java new file mode 100644 index 0000000000..5e44ae2e06 --- /dev/null +++ b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.ui/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/ui/provisional/RepositoryQueryAttributeEditor.java @@ -0,0 +1,174 @@ +/******************************************************************************* + * Copyright (c) 2008, 2011 Tasktop Technologies 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: + * Tasktop Technologies - initial API and implementation + *******************************************************************************/ + +package org.eclipse.linuxtools.internal.mylyn.osio.rest.ui.provisional; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.eclipse.core.runtime.Assert; +import org.eclipse.jface.resource.JFaceResources; +import org.eclipse.mylyn.tasks.core.data.TaskAttribute; +import org.eclipse.mylyn.tasks.core.data.TaskDataModel; +import org.eclipse.mylyn.tasks.ui.editors.AbstractAttributeEditor; +import org.eclipse.mylyn.tasks.ui.editors.LayoutHint; +import org.eclipse.mylyn.tasks.ui.editors.LayoutHint.ColumnSpan; +import org.eclipse.mylyn.tasks.ui.editors.LayoutHint.RowSpan; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.List; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.forms.widgets.FormToolkit; + +/** + * @author Steffen Pingel + */ +public class RepositoryQueryAttributeEditor extends AbstractAttributeEditor { + + private String[] allValues; + + private Text text; + + private List list; + + protected boolean suppressRefresh; + + public RepositoryQueryAttributeEditor(TaskDataModel manager, TaskAttribute taskAttribute) { + super(manager, taskAttribute); + if (isReadOnly()) { + setLayoutHint(new LayoutHint(RowSpan.SINGLE, ColumnSpan.SINGLE)); + } else { + setLayoutHint(new LayoutHint(RowSpan.MULTIPLE, ColumnSpan.SINGLE)); + } + } + + @Override + public void createControl(Composite parent, FormToolkit toolkit) { + if (isReadOnly()) { + text = new Text(parent, SWT.FLAT | SWT.READ_ONLY | SWT.WRAP); + text.setFont(JFaceResources.getDefaultFont()); + toolkit.adapt(text, false, false); + text.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); + select(getValues(), getValuesLabels()); + text.setToolTipText(getDescription()); + setControl(text); + } else { + list = new List(parent, SWT.FLAT | SWT.MULTI | SWT.V_SCROLL | SWT.BORDER); + toolkit.adapt(list, false, false); + list.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); + list.setFont(JFaceResources.getDefaultFont()); + list.setToolTipText(getDescription()); + + updateListWithOptions(); + + select(getValues(), getValuesLabels()); + + if (allValues != null) { + list.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + Assert.isNotNull(allValues); + int[] indices = list.getSelectionIndices(); + String[] selectedValues = new String[indices.length]; + for (int i = 0; i < indices.length; i++) { + int index = indices[i]; + Assert.isLegal(index >= 0 && index <= allValues.length - 1); + selectedValues[i] = allValues[index]; + } + try { + suppressRefresh = true; + setValues(selectedValues); + } finally { + suppressRefresh = false; + } + } + }); + list.showSelection(); + } + + setControl(list); + } + } + + private void updateListWithOptions() { + if (list != null && !list.isDisposed()) { + Map<String, String> labelByValue = getAttributeMapper().getOptions(getTaskAttribute()); + if (labelByValue != null) { + int topIndex = list.getTopIndex(); + list.removeAll(); + allValues = labelByValue.keySet().toArray(new String[0]); + for (String value : allValues) { + list.add(labelByValue.get(value)); + } + if (topIndex > 0) { + list.setTopIndex(topIndex); + } + } + } + } + + public String[] getValues() { + return getAttributeMapper().getValues(getTaskAttribute()).toArray(new String[0]); + } + + public String[] getValuesLabels() { + return getAttributeMapper().getValueLabels(getTaskAttribute()).toArray(new String[0]); + } + + private void select(String[] values, String[] labels) { + if (text != null && !text.isDisposed()) { + StringBuilder valueString = new StringBuilder(); + if (labels != null) { + for (int i = 0; i < labels.length; i++) { + valueString.append(labels[i]); + if (i != labels.length - 1) { + valueString.append(", "); //$NON-NLS-1$ + } + } + } + text.setText(valueString.toString()); + + } else if (list != null && !list.isDisposed()) { + if (values != null) { + list.deselectAll(); + Set<String> selectedValues = new HashSet<String>(Arrays.asList(values)); + for (int i = 0; i < allValues.length; i++) { + if (selectedValues.contains(allValues[i])) { + list.select(i); + } + } + } else { + list.setItems(labels); + list.setSelection(labels); + } + } + } + + public void setValues(String[] values) { + getAttributeMapper().setValues(getTaskAttribute(), Arrays.asList(values)); + attributeChanged(); + } + + @Override + public void refresh() { + updateListWithOptions(); + select(getValues(), getValuesLabels()); + } + + @Override + public boolean shouldAutoRefresh() { + return !suppressRefresh; + } +} diff --git a/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.ui/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/ui/provisional/RepositoryQueryAttributeEditorFactory.java b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.ui/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/ui/provisional/RepositoryQueryAttributeEditorFactory.java new file mode 100644 index 0000000000..c561aa1a0d --- /dev/null +++ b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.ui/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/ui/provisional/RepositoryQueryAttributeEditorFactory.java @@ -0,0 +1,35 @@ +package org.eclipse.linuxtools.internal.mylyn.osio.rest.ui.provisional; + +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.mylyn.tasks.core.TaskRepository; +import org.eclipse.mylyn.tasks.core.data.TaskAttribute; +import org.eclipse.mylyn.tasks.core.data.TaskDataModel; +import org.eclipse.mylyn.tasks.ui.editors.AbstractAttributeEditor; +import org.eclipse.mylyn.tasks.ui.editors.AttributeEditorFactory; +import org.eclipse.ui.services.IServiceLocator; + +public class RepositoryQueryAttributeEditorFactory extends AttributeEditorFactory { + + private final TaskDataModel taskModel; + + public RepositoryQueryAttributeEditorFactory(@NonNull TaskDataModel model, @NonNull TaskRepository taskRepository) { + super(model, taskRepository); + this.taskModel = model; + } + + public RepositoryQueryAttributeEditorFactory(@NonNull TaskDataModel model, @NonNull TaskRepository taskRepository, + @Nullable IServiceLocator serviceLocator) { + super(model, taskRepository, serviceLocator); + this.taskModel = model; + } + + @NonNull + public AbstractAttributeEditor createEditor(@NonNull String type, @NonNull TaskAttribute taskAttribute) { + if (TaskAttribute.TYPE_MULTI_SELECT.equals(type)) { + return new RepositoryQueryAttributeEditor(taskModel, taskAttribute); + } + return super.createEditor(type, taskAttribute); + } + +} diff --git a/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.ui/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/ui/provisional/RepositoryQuerySchemaPage.java b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.ui/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/ui/provisional/RepositoryQuerySchemaPage.java index ef2c012fd5..4ede5405dc 100644 --- a/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.ui/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/ui/provisional/RepositoryQuerySchemaPage.java +++ b/mylyn/org.eclipse.linuxtools.mylyn.osio.rest.ui/src/org/eclipse/linuxtools/internal/mylyn/osio/rest/ui/provisional/RepositoryQuerySchemaPage.java @@ -50,15 +50,15 @@ import org.eclipse.ui.forms.widgets.FormToolkit; @SuppressWarnings("nls") public class RepositoryQuerySchemaPage extends AbstractRepositoryQueryPage2 { - private static final int LABEL_WIDTH = 110; + private static final int LABEL_WIDTH = 100; - private static final int COLUMN_WIDTH = 140; + private static final int COLUMN_WIDTH = 160; private static final int COLUMN_GAP = 20; private static final int MULTI_COLUMN_WIDTH = COLUMN_WIDTH + 5 + COLUMN_GAP + LABEL_WIDTH + 5 + COLUMN_WIDTH; - private static final int MULTI_ROW_HEIGHT = 55; + private static final int MULTI_ROW_HEIGHT = 80; protected final AbstractQueryPageSchema schema; @@ -103,7 +103,7 @@ public class RepositoryQuerySchemaPage extends AbstractRepositoryQueryPage2 { layout.marginHeight = 0; layout.marginWidth = 10; layout.horizontalSpacing = 0; - layout.verticalSpacing = 0; + layout.verticalSpacing = 10; scrolledBodyComposite.setLayout(layout); Composite attributesComposite = new Composite(scrolledBodyComposite, SWT.NONE); @@ -113,11 +113,11 @@ public class RepositoryQuerySchemaPage extends AbstractRepositoryQueryPage2 { .span(2, 1) .applyTo(attributesComposite); layout = new GridLayout(6, false); - layout.marginHeight = 0; - layout.marginWidth = 0; + layout.marginHeight = 20; + layout.marginWidth = 10; attributesComposite.setLayout(layout); GridData g = new GridData(GridData.FILL, GridData.FILL, true, true); - g.widthHint = 400; + g.widthHint = 600; attributesComposite.setLayoutData(g); attributesComposite.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_LIST_FOREGROUND)); FormToolkit toolkit = new FormToolkit(parent.getDisplay()); @@ -127,7 +127,7 @@ public class RepositoryQuerySchemaPage extends AbstractRepositoryQueryPage2 { ITaskDataWorkingCopy workingCopy = TasksUi.getTaskDataManager().createWorkingCopy(nTask, data); final TaskDataModel model = new TaskDataModel(repository, nTask, workingCopy); - factory = new AttributeEditorFactory(model, repository); + factory = new RepositoryQueryAttributeEditorFactory(model, repository); model.addModelListener(new TaskDataModelListener() { @Override |