Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 187127 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/mylyn/internal/tasks/ui/PersonProposalProvider.java (-8 / +38 lines)
Lines 28-33 Link Here
28
/**
28
/**
29
 * @author Shawn Minto
29
 * @author Shawn Minto
30
 * @author Eugene Kuleshov
30
 * @author Eugene Kuleshov
31
 * @author Steffen Pingel
31
 */
32
 */
32
public class PersonProposalProvider implements IContentProposalProvider {
33
public class PersonProposalProvider implements IContentProposalProvider {
33
34
Lines 49-73 Link Here
49
			throw new IllegalArgumentException();
50
			throw new IllegalArgumentException();
50
		}
51
		}
51
52
53
		int leftSeparator = getIndexOfLeftSeparator(contents, position);
54
		int rightSeparator = getIndexOfRightSeparator(contents, position);
55
56
		assert leftSeparator <= position;
57
		assert position <= rightSeparator;
58
59
		String searchText = contents.substring(leftSeparator + 1, position);
60
		String resultPrefix = contents.substring(0, leftSeparator + 1);
61
		String resultPostfix = contents.substring(rightSeparator);
62
63
		// retrieve subset of the tree set using key range
52
		SortedSet<String> addressSet = getAddressSet();
64
		SortedSet<String> addressSet = getAddressSet();
53
		if (position > 0) {
65
		if (!searchText.equals("")) {
54
			// retrieve subset of the tree set using key range
66
			searchText = searchText.toLowerCase();
55
			char[] chars = contents.toLowerCase().toCharArray();
67
			char[] nextWord = searchText.toCharArray();
56
			String contents1 = new String(chars, 0, position);
68
			nextWord[searchText.length() - 1]++;
57
			chars[position - 1]++;
69
			addressSet = addressSet.subSet(searchText, new String(nextWord));
58
			String contents2 = new String(chars, 0, position);
59
			addressSet = addressSet.subSet(contents1, contents2);
60
		}
70
		}
61
71
62
		IContentProposal[] result = new IContentProposal[addressSet.size()];
72
		IContentProposal[] result = new IContentProposal[addressSet.size()];
63
		int i = 0;
73
		int i = 0;
64
		for (final String address : addressSet) {
74
		for (final String address : addressSet) {
65
			result[i++] = new PersonContentProposal(address, address.equalsIgnoreCase(currentUser));
75
			result[i++] = new PersonContentProposal(address, address.equalsIgnoreCase(currentUser), resultPrefix
76
					+ address + resultPostfix, resultPrefix.length() + address.length());
66
		}
77
		}
67
		Arrays.sort(result);
78
		Arrays.sort(result);
68
		return result;
79
		return result;
69
	}
80
	}
70
81
82
	private int getIndexOfLeftSeparator(String contents, int position) {
83
		int i = contents.lastIndexOf(' ', position - 1);
84
		i = Math.max(contents.lastIndexOf(',', position - 1), i);
85
		return i;
86
	}
87
88
	private int getIndexOfRightSeparator(String contents, int position) {
89
		int index = contents.length();
90
		int i = contents.indexOf(' ', position);
91
		if (i != -1) {
92
			index = Math.min(i, index);
93
		}
94
		i = contents.indexOf(',', position);
95
		if (i != -1) {
96
			index = Math.min(i, index);
97
		}
98
		return index;
99
	}
100
71
	private SortedSet<String> getAddressSet() {
101
	private SortedSet<String> getAddressSet() {
72
		if (addressSet != null) {
102
		if (addressSet != null) {
73
			return addressSet;
103
			return addressSet;
(-)src/org/eclipse/mylyn/internal/tasks/ui/PersonContentProposal.java (-3 / +16 lines)
Lines 8-13 Link Here
8
8
9
package org.eclipse.mylyn.internal.tasks.ui;
9
package org.eclipse.mylyn.internal.tasks.ui;
10
10
11
import org.eclipse.core.runtime.Assert;
11
import org.eclipse.jface.fieldassist.IContentProposal;
12
import org.eclipse.jface.fieldassist.IContentProposal;
12
import org.eclipse.swt.graphics.Image;
13
import org.eclipse.swt.graphics.Image;
13
14
Lines 20-28 Link Here
20
21
21
	private boolean isCurrentUser = false;
22
	private boolean isCurrentUser = false;
22
23
23
	public PersonContentProposal(String address, boolean isCurrentUser) {
24
	private final String replacementText;
25
26
	private final int cursorPosition;
27
28
	public PersonContentProposal(String address, boolean isCurrentUser, String replacementText, int cursorPosition) {
29
		Assert.isNotNull(address);
30
		Assert.isNotNull(replacementText);
24
		this.address = address;
31
		this.address = address;
25
		this.isCurrentUser = isCurrentUser;
32
		this.isCurrentUser = isCurrentUser;
33
		this.replacementText = replacementText;
34
		this.cursorPosition = cursorPosition;
35
	}
36
37
	public PersonContentProposal(String address, boolean isCurrentUser) {
38
		this(address, isCurrentUser, address, address.length());
26
	}
39
	}
27
40
28
	public String getLabel() {
41
	public String getLabel() {
Lines 34-44 Link Here
34
	}
47
	}
35
48
36
	public int getCursorPosition() {
49
	public int getCursorPosition() {
37
		return address.length();
50
		return cursorPosition;
38
	}
51
	}
39
52
40
	public String getContent() {
53
	public String getContent() {
41
		return address;
54
		return replacementText;
42
	}
55
	}
43
56
44
	public Image getImage() {
57
	public Image getImage() {
(-)src/org/eclipse/mylyn/tasks/tests/PersonProposalProviderTest.java (+87 lines)
Lines 14-19 Link Here
14
import org.eclipse.mylyn.internal.tasks.ui.PersonProposalProvider;
14
import org.eclipse.mylyn.internal.tasks.ui.PersonProposalProvider;
15
import org.eclipse.mylyn.tasks.tests.connector.MockRepositoryTask;
15
import org.eclipse.mylyn.tasks.tests.connector.MockRepositoryTask;
16
16
17
/**
18
 * @author Frank Becker
19
 * @author Steffen Pingel
20
 */
17
public class PersonProposalProviderTest extends TestCase {
21
public class PersonProposalProviderTest extends TestCase {
18
22
19
	public void testGetProposalsNullParameters() {
23
	public void testGetProposalsNullParameters() {
Lines 51-54 Link Here
51
		assertEquals("foo", result[0].getContent());
55
		assertEquals("foo", result[0].getContent());
52
	}
56
	}
53
57
58
	public void testGetProposalsMultipleAddresses() {
59
		IContentProposal[] result;
60
61
		MockRepositoryTask task = new MockRepositoryTask(null, "1", null);
62
		task.setOwner("foo");
63
		PersonProposalProvider provider = new PersonProposalProvider(task, null);
64
65
		result = provider.getProposals("f,xx", 1);
66
		assertNotNull(result);
67
		assertEquals(1, result.length);
68
		assertEquals("foo,xx", result[0].getContent());
69
		assertEquals("foo", result[0].getLabel());
70
		assertEquals(3, result[0].getCursorPosition());
71
72
		result = provider.getProposals("f xx", 1);
73
		assertNotNull(result);
74
		assertEquals(1, result.length);
75
		assertEquals("foo xx", result[0].getContent());
76
		assertEquals("foo", result[0].getLabel());
77
		assertEquals(3, result[0].getCursorPosition());
78
79
		result = provider.getProposals("a,xx", 1);
80
		assertNotNull(result);
81
		assertEquals(0, result.length);
82
83
		result = provider.getProposals("xx,f", 4);
84
		assertNotNull(result);
85
		assertEquals(1, result.length);
86
		assertEquals("xx,foo", result[0].getContent());
87
		assertEquals("foo", result[0].getLabel());
88
		assertEquals(6, result[0].getCursorPosition());
89
90
		result = provider.getProposals("xx f", 4);
91
		assertNotNull(result);
92
		assertEquals(1, result.length);
93
		assertEquals("xx foo", result[0].getContent());
94
		assertEquals("foo", result[0].getLabel());
95
		assertEquals(6, result[0].getCursorPosition());
96
97
		result = provider.getProposals("xx,a", 4);
98
		assertNotNull(result);
99
		assertEquals(0, result.length);
100
101
		result = provider.getProposals("xyz,f,yy", 4);
102
		assertNotNull(result);
103
		assertEquals(1, result.length);
104
		assertEquals("xyz,foo,yy", result[0].getContent());
105
		assertEquals("foo", result[0].getLabel());
106
		assertEquals(7, result[0].getCursorPosition());
107
108
		result = provider.getProposals("xx f yy", 4);
109
		assertNotNull(result);
110
		assertEquals(1, result.length);
111
		assertEquals("xx foo yy", result[0].getContent());
112
		assertEquals("foo", result[0].getLabel());
113
		assertEquals(6, result[0].getCursorPosition());
114
115
		result = provider.getProposals("xx,a,yy", 4);
116
		assertNotNull(result);
117
		assertEquals(0, result.length);
118
119
		result = provider.getProposals("xx,,yy", 3);
120
		assertNotNull(result);
121
		assertEquals(1, result.length);
122
		assertEquals("xx,foo,yy", result[0].getContent());
123
		assertEquals("foo", result[0].getLabel());
124
		assertEquals(6, result[0].getCursorPosition());
125
126
		result = provider.getProposals("x yy", 2);
127
		assertNotNull(result);
128
		assertEquals(1, result.length);
129
		assertEquals("x foo", result[0].getContent());
130
		assertEquals("foo", result[0].getLabel());
131
		assertEquals(5, result[0].getCursorPosition());
132
133
		result = provider.getProposals(", ", 1);
134
		assertNotNull(result);
135
		assertEquals(1, result.length);
136
		assertEquals("x,foo ", result[0].getContent());
137
		assertEquals("foo", result[0].getLabel());
138
		assertEquals(5, result[0].getCursorPosition());
139
	}
140
54
}
141
}

Return to bug 187127