View | Details | Raw Unified | Return to bug 290860 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/mylyn/internal/jira/core/model/JiraVersion.java (+4 lines)
Lines 113-116 Link Here
113
		return sb.toString();
113
		return sb.toString();
114
	}
114
	}
115
115
116
	public boolean supportsPerProjectIssueTypes() {
117
		return this.compareTo(JiraVersion.JIRA_3_12) >= 0;
118
	}
119
116
}
120
}
(-)src/org/eclipse/mylyn/internal/jira/core/model/Project.java (+26 lines)
Lines 14-20 Link Here
14
14
15
import java.io.Serializable;
15
import java.io.Serializable;
16
import java.util.ArrayList;
16
import java.util.ArrayList;
17
import java.util.HashMap;
17
import java.util.List;
18
import java.util.List;
19
import java.util.Map;
18
20
19
/**
21
/**
20
 * TODO need mapping statuses -> actions -> fields TODO need mapping statuses -> fields
22
 * TODO need mapping statuses -> actions -> fields TODO need mapping statuses -> fields
Lines 48-53 Link Here
48
50
49
	private SecurityLevel[] securityLevels;
51
	private SecurityLevel[] securityLevels;
50
52
53
	private Map<String, IssueType> issueTypesById;
54
55
	private boolean details;
56
51
	public Project(String id) {
57
	public Project(String id) {
52
		this.id = id;
58
		this.id = id;
53
	}
59
	}
Lines 212-217 Link Here
212
218
213
	public void setIssueTypes(IssueType[] issueTypes) {
219
	public void setIssueTypes(IssueType[] issueTypes) {
214
		this.issueTypes = issueTypes;
220
		this.issueTypes = issueTypes;
221
		this.issueTypesById = new HashMap<String, IssueType>();
222
		if (issueTypes != null) {
223
			for (IssueType type : issueTypes) {
224
				issueTypesById.put(type.getId(), type);
225
			}
226
		}
215
	}
227
	}
216
228
217
	public SecurityLevel[] getSecurityLevels() {
229
	public SecurityLevel[] getSecurityLevels() {
Lines 222-225 Link Here
222
		this.securityLevels = securityLevels;
234
		this.securityLevels = securityLevels;
223
	}
235
	}
224
236
237
	public void setDetails(boolean details) {
238
		this.details = details;
239
	}
240
241
	public boolean hasDetails() {
242
		return details;
243
	}
244
245
	public IssueType getIssueTypeById(String typeId) {
246
		if (issueTypesById != null) {
247
			return issueTypesById.get(typeId);
248
		}
249
		return null;
250
	}
225
}
251
}
(-)src/org/eclipse/mylyn/internal/jira/core/service/JiraClientCache.java (-51 / +29 lines)
Lines 12-21 Link Here
12
12
13
package org.eclipse.mylyn.internal.jira.core.service;
13
package org.eclipse.mylyn.internal.jira.core.service;
14
14
15
import java.util.Arrays;
16
import java.util.HashMap;
15
import java.util.HashMap;
17
import java.util.HashSet;
18
import java.util.Set;
19
16
20
import org.eclipse.core.runtime.IProgressMonitor;
17
import org.eclipse.core.runtime.IProgressMonitor;
21
import org.eclipse.core.runtime.SubMonitor;
18
import org.eclipse.core.runtime.SubMonitor;
Lines 75-82 Link Here
75
72
76
		submonitor.setWorkRemaining(data.projects.length);
73
		submonitor.setWorkRemaining(data.projects.length);
77
		for (Project project : data.projects) {
74
		for (Project project : data.projects) {
78
			initializeProject(project, submonitor.newChild(1, SubMonitor.SUPPRESS_NONE));
79
80
			data.projectsById.put(project.getId(), project);
75
			data.projectsById.put(project.getId(), project);
81
			data.projectsByKey.put(project.getKey(), project);
76
			data.projectsByKey.put(project.getKey(), project);
82
		}
77
		}
Lines 87-98 Link Here
87
				project.getKey()), 5);
82
				project.getKey()), 5);
88
83
89
		synchronized (project) {
84
		synchronized (project) {
90
			final String version = data.serverInfo.getVersion();
85
			final JiraVersion version = new JiraVersion(data.serverInfo.getVersion());
91
86
92
			project.setComponents(jiraClient.getComponents(project.getKey(), subMonitor.newChild(1)));
87
			project.setComponents(jiraClient.getComponents(project.getKey(), subMonitor.newChild(1)));
93
			project.setVersions(jiraClient.getVersions(project.getKey(), subMonitor.newChild(1)));
88
			project.setVersions(jiraClient.getVersions(project.getKey(), subMonitor.newChild(1)));
94
89
95
			if (supportsPerProjectIssueTypes(version) >= 0) {
90
			if (version.supportsPerProjectIssueTypes()) {
96
				IssueType[] issueTypes = jiraClient.getIssueTypes(project.getId(), subMonitor.newChild(1));
91
				IssueType[] issueTypes = jiraClient.getIssueTypes(project.getId(), subMonitor.newChild(1));
97
				IssueType[] subTaskIssueTypes = jiraClient.getSubTaskIssueTypes(project.getId(), subMonitor.newChild(1));
92
				IssueType[] subTaskIssueTypes = jiraClient.getSubTaskIssueTypes(project.getId(), subMonitor.newChild(1));
98
				for (IssueType issueType : subTaskIssueTypes) {
93
				for (IssueType issueType : subTaskIssueTypes) {
Lines 105-111 Link Here
105
100
106
				project.setIssueTypes(projectIssueTypes);
101
				project.setIssueTypes(projectIssueTypes);
107
			}
102
			}
108
			if (new JiraVersion(version).compareTo(JiraVersion.JIRA_3_13) >= 0) {
103
			if (version.compareTo(JiraVersion.JIRA_3_13) >= 0) {
109
				try {
104
				try {
110
					SecurityLevel[] securityLevels = jiraClient.getAvailableSecurityLevels(project.getKey(),
105
					SecurityLevel[] securityLevels = jiraClient.getAvailableSecurityLevels(project.getKey(),
111
							subMonitor.newChild(1));
106
							subMonitor.newChild(1));
Lines 120-125 Link Here
120
					project.setSecurityLevels(null);
115
					project.setSecurityLevels(null);
121
				}
116
				}
122
			}
117
			}
118
119
			project.setDetails(true);
123
		}
120
		}
124
	}
121
	}
125
122
Lines 161-205 Link Here
161
		SubMonitor submonitor = SubMonitor.convert(monitor, Messages.JiraClientCache_getting_issue_types, 2);
158
		SubMonitor submonitor = SubMonitor.convert(monitor, Messages.JiraClientCache_getting_issue_types, 2);
162
159
163
		String version = data.serverInfo.getVersion();
160
		String version = data.serverInfo.getVersion();
164
		if (supportsPerProjectIssueTypes(version) >= 0) {
161
		IssueType[] issueTypes = jiraClient.getIssueTypes(submonitor.newChild(1));
165
			// collect issue types from all projects to avoid additional SOAP request
162
		IssueType[] subTaskIssueTypes;
166
			Set<IssueType> issueTypes = new HashSet<IssueType>();
163
		if (new JiraVersion(version).compareTo(JiraVersion.JIRA_3_3) >= 0) {
167
			for (Project project : data.projects) {
164
			subTaskIssueTypes = jiraClient.getSubTaskIssueTypes(submonitor.newChild(1));
168
				IssueType[] projectIssueTypes = project.getIssueTypes();
169
				if (projectIssueTypes != null) {
170
					issueTypes.addAll(Arrays.asList(projectIssueTypes));
171
				}
172
			}
173
174
			data.issueTypes = issueTypes.toArray(new IssueType[0]);
175
			data.issueTypesById = new HashMap<String, IssueType>(data.issueTypes.length);
176
			for (IssueType issueType : data.issueTypes) {
177
				data.issueTypesById.put(issueType.getId(), issueType);
178
			}
179
		} else {
165
		} else {
180
			IssueType[] issueTypes = jiraClient.getIssueTypes(submonitor.newChild(1));
166
			subTaskIssueTypes = new IssueType[0];
181
			IssueType[] subTaskIssueTypes;
167
		}
182
			if (new JiraVersion(version).compareTo(JiraVersion.JIRA_3_3) >= 0) {
183
				subTaskIssueTypes = jiraClient.getSubTaskIssueTypes(submonitor.newChild(1));
184
			} else {
185
				subTaskIssueTypes = new IssueType[0];
186
			}
187
188
			data.issueTypesById = new HashMap<String, IssueType>(issueTypes.length + subTaskIssueTypes.length);
189
168
190
			for (IssueType issueType : issueTypes) {
169
		data.issueTypesById = new HashMap<String, IssueType>(issueTypes.length + subTaskIssueTypes.length);
191
				data.issueTypesById.put(issueType.getId(), issueType);
192
			}
193
170
194
			for (IssueType issueType : subTaskIssueTypes) {
171
		for (IssueType issueType : issueTypes) {
195
				issueType.setSubTaskType(true);
172
			data.issueTypesById.put(issueType.getId(), issueType);
196
				data.issueTypesById.put(issueType.getId(), issueType);
173
		}
197
			}
198
174
199
			data.issueTypes = new IssueType[issueTypes.length + subTaskIssueTypes.length];
175
		for (IssueType issueType : subTaskIssueTypes) {
200
			System.arraycopy(issueTypes, 0, data.issueTypes, 0, issueTypes.length);
176
			issueType.setSubTaskType(true);
201
			System.arraycopy(subTaskIssueTypes, 0, data.issueTypes, issueTypes.length, subTaskIssueTypes.length);
177
			data.issueTypesById.put(issueType.getId(), issueType);
202
		}
178
		}
179
180
		data.issueTypes = new IssueType[issueTypes.length + subTaskIssueTypes.length];
181
		System.arraycopy(issueTypes, 0, data.issueTypes, 0, issueTypes.length);
182
		System.arraycopy(subTaskIssueTypes, 0, data.issueTypes, issueTypes.length, subTaskIssueTypes.length);
203
	}
183
	}
204
184
205
	private void initializeStatuses(JiraClientData data, IProgressMonitor monitor) throws JiraException {
185
	private void initializeStatuses(JiraClientData data, IProgressMonitor monitor) throws JiraException {
Lines 213-219 Link Here
213
	}
193
	}
214
194
215
	private void initializeProjectRoles(JiraClientData data, IProgressMonitor monitor) throws JiraException {
195
	private void initializeProjectRoles(JiraClientData data, IProgressMonitor monitor) throws JiraException {
216
		data.projectRoles = jiraClient.getProjectRoles(monitor);
196
		SubMonitor submonitor = SubMonitor.convert(monitor, Messages.JiraClientCache_getting_project_roles, 1);
197
198
		data.projectRoles = jiraClient.getProjectRoles(submonitor.newChild(1));
217
	}
199
	}
218
200
219
	private void initializeResolutions(JiraClientData data, IProgressMonitor monitor) throws JiraException {
201
	private void initializeResolutions(JiraClientData data, IProgressMonitor monitor) throws JiraException {
Lines 253-271 Link Here
253
235
254
	public synchronized void refreshDetails(IProgressMonitor monitor) throws JiraException {
236
	public synchronized void refreshDetails(IProgressMonitor monitor) throws JiraException {
255
		SubMonitor subMonitor = SubMonitor.convert(monitor, Messages.JiraClientCache_Updating_repository_configuration,
237
		SubMonitor subMonitor = SubMonitor.convert(monitor, Messages.JiraClientCache_Updating_repository_configuration,
256
				20);
238
				7);
257
239
258
		final JiraClientData newData = new JiraClientData();
240
		final JiraClientData newData = new JiraClientData();
259
241
260
		refreshServerInfo(newData, subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE));
242
		refreshServerInfo(newData, subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE));
261
		data.serverInfo = newData.serverInfo;
243
		data.serverInfo = newData.serverInfo;
262
244
263
		initializeProjects(newData, subMonitor.newChild(15, SubMonitor.SUPPRESS_NONE));
264
		initializePriorities(newData, subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE));
245
		initializePriorities(newData, subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE));
265
		initializeIssueTypes(newData, subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE));
246
		initializeIssueTypes(newData, subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE));
266
		initializeResolutions(newData, subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE));
247
		initializeResolutions(newData, subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE));
267
		initializeStatuses(newData, subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE));
248
		initializeStatuses(newData, subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE));
268
		initializeProjectRoles(newData, subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE));
249
		initializeProjectRoles(newData, subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE));
250
		initializeProjects(newData, subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE));
269
251
270
		newData.lastUpdate = System.currentTimeMillis();
252
		newData.lastUpdate = System.currentTimeMillis();
271
		this.data = newData;
253
		this.data = newData;
Lines 276-283 Link Here
276
	 * to complete and should not be called from a UI thread.
258
	 * to complete and should not be called from a UI thread.
277
	 */
259
	 */
278
	public synchronized void refreshServerInfo(JiraClientData data, IProgressMonitor monitor) throws JiraException {
260
	public synchronized void refreshServerInfo(JiraClientData data, IProgressMonitor monitor) throws JiraException {
279
		monitor = SubMonitor.convert(monitor, Messages.JiraClientCache_Getting_server_information, 1);
261
		SubMonitor submonitor = SubMonitor.convert(monitor, Messages.JiraClientCache_Getting_server_information, 1);
280
		data.serverInfo = jiraClient.getServerInfo(monitor);
262
		data.serverInfo = jiraClient.getServerInfo(submonitor.newChild(1));
281
	}
263
	}
282
264
283
	public synchronized void refreshServerInfo(IProgressMonitor monitor) throws JiraException {
265
	public synchronized void refreshServerInfo(IProgressMonitor monitor) throws JiraException {
Lines 324-331 Link Here
324
		return user;
306
		return user;
325
	}
307
	}
326
308
327
	private int supportsPerProjectIssueTypes(String version) {
328
		return new JiraVersion(version).compareTo(JiraVersion.JIRA_3_12);
329
	}
330
331
}
309
}
(-)src/org/eclipse/mylyn/internal/jira/core/service/messages.properties (-1 / +2 lines)
Lines 13-19 Link Here
13
JiraClientCache_getting_issue_types=Getting issue types
13
JiraClientCache_getting_issue_types=Getting issue types
14
JiraClientCache_getting_priorities=Getting priorities
14
JiraClientCache_getting_priorities=Getting priorities
15
JiraClientCache_getting_project_details=Getting project details
15
JiraClientCache_getting_project_details=Getting project details
16
JiraClientCache_getting_resolutions=Gettings resolutions
16
JiraClientCache_getting_resolutions=Getting resolutions
17
JiraClientCache_getting_server_info=Getting server info
17
JiraClientCache_getting_server_info=Getting server info
18
JiraClientCache_getting_statuses=Getting statuses
18
JiraClientCache_getting_statuses=Getting statuses
19
JiraClientCache_project_details_for=Getting project details for {0}
19
JiraClientCache_project_details_for=Getting project details for {0}
20
JiraClientCache_getting_project_roles=Getting project roles
(-)src/org/eclipse/mylyn/internal/jira/core/service/FilterDefinitionConverter.java (-1 / +18 lines)
Lines 187-192 Link Here
187
			Set<Version> versions = new LinkedHashSet<Version>();
187
			Set<Version> versions = new LinkedHashSet<Version>();
188
188
189
			for (Project project : projects) {
189
			for (Project project : projects) {
190
				if (!project.hasDetails()) {
191
					continue;
192
				}
190
				for (String componentId : componentIds) {
193
				for (String componentId : componentIds) {
191
					Component[] projectComponents = project.getComponents();
194
					Component[] projectComponents = project.getComponents();
192
					for (Component component : projectComponents) {
195
					for (Component component : projectComponents) {
Lines 209-215 Link Here
209
		List<String> typeIds = getIds(params, TYPE_KEY);
212
		List<String> typeIds = getIds(params, TYPE_KEY);
210
		List<IssueType> issueTypes = new ArrayList<IssueType>();
213
		List<IssueType> issueTypes = new ArrayList<IssueType>();
211
		for (String typeId : typeIds) {
214
		for (String typeId : typeIds) {
212
			IssueType issueType = client.getCache().getIssueTypeById(typeId);
215
			IssueType issueType = null;
216
			if (projects.size() > 0) {
217
				for (Project project : projects) {
218
					issueType = project.getIssueTypeById(typeId);
219
					if (issueType != null) {
220
						break;
221
					}
222
				}
223
			}
224
225
			// fallback - if there are no projects or project issue types are not supported
226
			if (issueType == null) {
227
				issueType = client.getCache().getIssueTypeById(typeId);
228
			}
229
213
			if (issueType != null) {
230
			if (issueType != null) {
214
				issueTypes.add(issueType);
231
				issueTypes.add(issueType);
215
			} else if (validate) {
232
			} else if (validate) {
(-)src/org/eclipse/mylyn/internal/jira/core/service/Messages.java (+1 lines)
Lines 43-46 Link Here
43
43
44
	public static String JiraClientCache_project_details_for;
44
	public static String JiraClientCache_project_details_for;
45
45
46
	public static String JiraClientCache_getting_project_roles;
46
}
47
}
(-)src/org/eclipse/mylyn/internal/jira/core/JiraTaskDataHandler.java (-4 / +32 lines)
Lines 170-182 Link Here
170
			TaskData oldTaskData, boolean forceCache, IProgressMonitor monitor) throws JiraException {
170
			TaskData oldTaskData, boolean forceCache, IProgressMonitor monitor) throws JiraException {
171
		TaskData data = new TaskData(getAttributeMapper(repository), JiraCorePlugin.CONNECTOR_KIND,
171
		TaskData data = new TaskData(getAttributeMapper(repository), JiraCorePlugin.CONNECTOR_KIND,
172
				repository.getRepositoryUrl(), jiraIssue.getId());
172
				repository.getRepositoryUrl(), jiraIssue.getId());
173
		initializeTaskData(data, client, jiraIssue.getProject());
173
		initializeTaskData(repository, data, client, jiraIssue.getProject(), monitor);
174
		updateTaskData(data, jiraIssue, client, oldTaskData, forceCache, monitor);
174
		updateTaskData(data, jiraIssue, client, oldTaskData, forceCache, monitor);
175
		addOperations(data, jiraIssue, client, oldTaskData, forceCache, monitor);
175
		addOperations(data, jiraIssue, client, oldTaskData, forceCache, monitor);
176
		return data;
176
		return data;
177
	}
177
	}
178
178
179
	public void initializeTaskData(TaskData data, JiraClient client, Project project) {
179
	private Project ensureProjectHasDetails(JiraClient client, TaskRepository repository, Project project,
180
			IProgressMonitor monitor) throws JiraException {
181
		if (!project.hasDetails()) {
182
			client.getCache().refreshProjectDetails(project.getId(), monitor);
183
			return client.getCache().getProjectById(project.getId());
184
		}
185
		return project;
186
	}
187
188
	public void initializeTaskData(TaskRepository repository, TaskData data, JiraClient client, Project project,
189
			IProgressMonitor monitor) throws JiraException {
190
		project = ensureProjectHasDetails(client, repository, project, monitor);
191
180
		data.setVersion(TASK_DATA_VERSION_CURRENT.toString());
192
		data.setVersion(TASK_DATA_VERSION_CURRENT.toString());
181
193
182
		createAttribute(data, JiraAttribute.CREATION_DATE);
194
		createAttribute(data, JiraAttribute.CREATION_DATE);
Lines 1134-1140 Link Here
1134
		if (project == null) {
1146
		if (project == null) {
1135
			return false;
1147
			return false;
1136
		}
1148
		}
1137
		initializeTaskData(data, client, project);
1149
		if (!project.hasDetails()) {
1150
			try {
1151
				client.getCache().refreshProjectDetails(project.getId(), monitor);
1152
			} catch (JiraException e) {
1153
				final IStatus status = JiraCorePlugin.toStatus(repository, e);
1154
				trace(status);
1155
				throw new CoreException(status);
1156
			}
1157
		}
1158
1159
		try {
1160
			initializeTaskData(repository, data, client, project, monitor);
1161
		} catch (JiraException e) {
1162
			final IStatus status = JiraCorePlugin.toStatus(repository, e);
1163
			trace(status);
1164
			throw new CoreException(status);
1165
		}
1138
		return true;
1166
		return true;
1139
	}
1167
	}
1140
1168
Lines 1166-1172 Link Here
1166
			}
1194
			}
1167
1195
1168
			Project project = client.getCache().getProjectById(projectAttribute.getValue());
1196
			Project project = client.getCache().getProjectById(projectAttribute.getValue());
1169
			initializeTaskData(taskData, client, project);
1197
			initializeTaskData(repository, taskData, client, project, monitor);
1170
1198
1171
			new JiraTaskMapper(taskData).merge(new JiraTaskMapper(parentTaskData));
1199
			new JiraTaskMapper(taskData).merge(new JiraTaskMapper(parentTaskData));
1172
			taskData.getRoot().getAttribute(JiraAttribute.PROJECT.id()).setValue(project.getId());
1200
			taskData.getRoot().getAttribute(JiraAttribute.PROJECT.id()).setValue(project.getId());
(-)src/org/eclipse/mylyn/internal/jira/core/JiraAttributeMapper.java (-1 / +1 lines)
Lines 128-134 Link Here
128
						JiraAttribute.PROJECT.id());
128
						JiraAttribute.PROJECT.id());
129
				if (projectAttribute != null) {
129
				if (projectAttribute != null) {
130
					Project project = client.getCache().getProjectById(projectAttribute.getValue());
130
					Project project = client.getCache().getProjectById(projectAttribute.getValue());
131
					if (project != null) {
131
					if (project != null && project.hasDetails()) {
132
						if (JiraAttribute.COMPONENTS.id().equals(attribute.getId())) {
132
						if (JiraAttribute.COMPONENTS.id().equals(attribute.getId())) {
133
							for (Component component : project.getComponents()) {
133
							for (Component component : project.getComponents()) {
134
								options.put(component.getId(), component.getName());
134
								options.put(component.getId(), component.getName());
(-)src/org/eclipse/mylyn/internal/jira/ui/wizards/messages.properties (+1 lines)
Lines 67-72 Link Here
67
JiraProjectPage_Pick_a_project_to_open_the_new_bug_editor=Pick a project to open the new bug editor.\n\
67
JiraProjectPage_Pick_a_project_to_open_the_new_bug_editor=Pick a project to open the new bug editor.\n\
68
Press the Update button if the project is not in the list.
68
Press the Update button if the project is not in the list.
69
JiraProjectPage_Update_Projects_from_Repository=Update Projects from Repository
69
JiraProjectPage_Update_Projects_from_Repository=Update Projects from Repository
70
JiraProjectPage_This_project_has_details_missing=You need to be online to create a task for this project as it is missing required details which will be downloaded
70
71
71
JiraRepositorySettingsPage_Advanced_Configuration=Advanced &Configuration
72
JiraRepositorySettingsPage_Advanced_Configuration=Advanced &Configuration
72
JiraRepositorySettingsPage_Authentication_credentials_are_valid_character_encodeing=Authentication credentials are valid. Note: The character encoding could not be determined, verify 'Additional Settings'.
73
JiraRepositorySettingsPage_Authentication_credentials_are_valid_character_encodeing=Authentication credentials are valid. Note: The character encoding could not be determined, verify 'Additional Settings'.
(-)src/org/eclipse/mylyn/internal/jira/ui/wizards/Messages.java (+2 lines)
Lines 194-197 Link Here
194
	public static String JiraRepositorySettingsPage_working_hours_per_day;
194
	public static String JiraRepositorySettingsPage_working_hours_per_day;
195
195
196
	public static String JiraRepositorySettingsPage_Validate_server_settings;
196
	public static String JiraRepositorySettingsPage_Validate_server_settings;
197
198
	public static String JiraProjectPage_This_project_has_details_missing;
197
}
199
}
(-)src/org/eclipse/mylyn/internal/jira/ui/wizards/JiraFilterDefinitionPage.java (-72 / +121 lines)
Lines 25-30 Link Here
25
import org.eclipse.core.runtime.IProgressMonitor;
25
import org.eclipse.core.runtime.IProgressMonitor;
26
import org.eclipse.core.runtime.IStatus;
26
import org.eclipse.core.runtime.IStatus;
27
import org.eclipse.core.runtime.OperationCanceledException;
27
import org.eclipse.core.runtime.OperationCanceledException;
28
import org.eclipse.core.runtime.SubMonitor;
28
import org.eclipse.jface.dialogs.Dialog;
29
import org.eclipse.jface.dialogs.Dialog;
29
import org.eclipse.jface.dialogs.IDialogSettings;
30
import org.eclipse.jface.dialogs.IDialogSettings;
30
import org.eclipse.jface.operation.IRunnableWithProgress;
31
import org.eclipse.jface.operation.IRunnableWithProgress;
Lines 189-194 Link Here
189
190
190
	private static final Project[] NO_PROJECTS = new Project[0];
191
	private static final Project[] NO_PROJECTS = new Project[0];
191
192
193
	private static final int HEIGHT_HINT = 50;
194
195
	private static final int WIDTH_HINT = 150;
196
192
	final Placeholder ALL_PROJECTS = new Placeholder(Messages.JiraFilterDefinitionPage_All_Projects);
197
	final Placeholder ALL_PROJECTS = new Placeholder(Messages.JiraFilterDefinitionPage_All_Projects);
193
198
194
	final Placeholder ANY_ASSIGNEE = new Placeholder(Messages.JiraFilterDefinitionPage_Any);
199
	final Placeholder ANY_ASSIGNEE = new Placeholder(Messages.JiraFilterDefinitionPage_Any);
Lines 626-633 Link Here
626
	private void createComponentsViewer(Composite c) {
631
	private void createComponentsViewer(Composite c) {
627
		components = new ListViewer(c, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL);
632
		components = new ListViewer(c, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL);
628
		GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
633
		GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
629
		gridData.heightHint = 50;
634
		gridData.heightHint = HEIGHT_HINT;
630
		gridData.widthHint = 90;
635
		gridData.widthHint = WIDTH_HINT;
631
		components.getControl().setLayoutData(gridData);
636
		components.getControl().setLayoutData(gridData);
632
637
633
		components.setContentProvider(new IStructuredContentProvider() {
638
		components.setContentProvider(new IStructuredContentProvider() {
Lines 642-655 Link Here
642
647
643
			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
648
			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
644
				Project[] projects = (Project[]) newInput;
649
				Project[] projects = (Project[]) newInput;
645
				if (projects == null || projects.length == 0) {
650
				if (projects == null || projects.length == 0 || projects.length > 1) {
646
					currentElements = new Object[] { ANY_COMPONENT };
651
					currentElements = new Object[] { ANY_COMPONENT };
647
				} else {
652
				} else {
648
					Set<Object> elements = new LinkedHashSet<Object>();
653
					Set<Object> elements = new LinkedHashSet<Object>();
649
					elements.add(ANY_COMPONENT);
654
					elements.add(ANY_COMPONENT);
650
					elements.add(NO_COMPONENT);
655
					elements.add(NO_COMPONENT);
651
					for (Project project : projects) {
656
					for (Project project : projects) {
652
						if (project != null) {
657
						if (project != null && project.hasDetails()) {
653
							elements.addAll(Arrays.asList(project.getComponents()));
658
							elements.addAll(Arrays.asList(project.getComponents()));
654
						}
659
						}
655
					}
660
					}
Lines 740-751 Link Here
740
		{
745
		{
741
			SashForm cc = new SashForm(sashForm, SWT.NONE);
746
			SashForm cc = new SashForm(sashForm, SWT.NONE);
742
747
743
			ISelectionChangedListener selectionChangeListener = new ISelectionChangedListener() {
744
				public void selectionChanged(SelectionChangedEvent event) {
745
					// validatePage();
746
				}
747
			};
748
749
			{
748
			{
750
				Composite comp = new Composite(cc, SWT.NONE);
749
				Composite comp = new Composite(cc, SWT.NONE);
751
				GridLayout gridLayout = new GridLayout();
750
				GridLayout gridLayout = new GridLayout();
Lines 757-782 Link Here
757
				typeLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false));
756
				typeLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false));
758
				typeLabel.setText(Messages.JiraFilterDefinitionPage_Type);
757
				typeLabel.setText(Messages.JiraFilterDefinitionPage_Type);
759
758
760
				issueType = new ListViewer(comp, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL);
759
				createIssueTypesViewer(comp);
761
				GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
762
				gridData.heightHint = 50;
763
				gridData.widthHint = 90;
764
				issueType.getList().setLayoutData(gridData);
765
766
				issueType.setLabelProvider(new LabelProvider() {
767
768
					@Override
769
					public String getText(Object element) {
770
						if (element instanceof Placeholder) {
771
							return ((Placeholder) element).getText();
772
						}
773
774
						return ((IssueType) element).getName();
775
					}
776
777
				});
778
779
				issueType.addSelectionChangedListener(selectionChangeListener);
780
			}
760
			}
781
761
782
			{
762
			{
Lines 792-799 Link Here
792
772
793
				status = new ListViewer(comp, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL);
773
				status = new ListViewer(comp, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL);
794
				GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
774
				GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
795
				gridData.heightHint = 50;
775
				gridData.heightHint = HEIGHT_HINT;
796
				gridData.widthHint = 90;
776
				gridData.widthHint = WIDTH_HINT;
797
				status.getList().setLayoutData(gridData);
777
				status.getList().setLayoutData(gridData);
798
778
799
				status.setLabelProvider(new LabelProvider() {
779
				status.setLabelProvider(new LabelProvider() {
Lines 808-815 Link Here
808
					}
788
					}
809
789
810
				});
790
				});
811
812
				status.addSelectionChangedListener(selectionChangeListener);
813
			}
791
			}
814
792
815
			{
793
			{
Lines 825-832 Link Here
825
803
826
				resolution = new ListViewer(comp, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL);
804
				resolution = new ListViewer(comp, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL);
827
				GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
805
				GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
828
				gridData.heightHint = 50;
806
				gridData.heightHint = HEIGHT_HINT;
829
				gridData.widthHint = 90;
807
				gridData.widthHint = WIDTH_HINT;
830
				resolution.getList().setLayoutData(gridData);
808
				resolution.getList().setLayoutData(gridData);
831
809
832
				resolution.setLabelProvider(new LabelProvider() {
810
				resolution.setLabelProvider(new LabelProvider() {
Lines 841-848 Link Here
841
					}
819
					}
842
820
843
				});
821
				});
844
845
				resolution.addSelectionChangedListener(selectionChangeListener);
846
			}
822
			}
847
823
848
			{
824
			{
Lines 858-865 Link Here
858
834
859
				priority = new ListViewer(comp, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL);
835
				priority = new ListViewer(comp, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL);
860
				GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
836
				GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
861
				gridData.heightHint = 50;
837
				gridData.heightHint = HEIGHT_HINT;
862
				gridData.widthHint = 90;
838
				gridData.widthHint = WIDTH_HINT;
863
				priority.getList().setLayoutData(gridData);
839
				priority.getList().setLayoutData(gridData);
864
840
865
				priority.setLabelProvider(new LabelProvider() {
841
				priority.setLabelProvider(new LabelProvider() {
Lines 874-880 Link Here
874
					}
850
					}
875
851
876
				});
852
				});
877
				priority.addSelectionChangedListener(selectionChangeListener);
878
			}
853
			}
879
854
880
			cc.setWeights(new int[] { 1, 1, 1, 1 });
855
			cc.setWeights(new int[] { 1, 1, 1, 1 });
Lines 1118-1123 Link Here
1118
		Dialog.applyDialogFont(parent);
1093
		Dialog.applyDialogFont(parent);
1119
	}
1094
	}
1120
1095
1096
	private void createIssueTypesViewer(Composite comp) {
1097
		issueType = new ListViewer(comp, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL);
1098
		GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
1099
		gridData.heightHint = HEIGHT_HINT;
1100
		gridData.widthHint = WIDTH_HINT;
1101
		issueType.getList().setLayoutData(gridData);
1102
1103
		issueType.setContentProvider(new IStructuredContentProvider() {
1104
			private Object[] currentElements;
1105
1106
			public Object[] getElements(Object inputElement) {
1107
				return currentElements;
1108
			}
1109
1110
			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
1111
				final Project[] projects = (Project[]) newInput;
1112
				IssueType[] types = null;
1113
1114
				if (projects == null || projects.length == 0 || projects.length > 1) {
1115
					types = client.getCache().getIssueTypes();
1116
				} else if (projects[0].hasDetails()) {
1117
					types = projects[0].getIssueTypes();
1118
				}
1119
1120
				if (types != null) {
1121
					Object[] elements = new Object[types.length + 1];
1122
					System.arraycopy(types, 0, elements, 1, types.length);
1123
					elements[0] = ANY_ISSUE_TYPE;
1124
					currentElements = elements;
1125
				}
1126
			}
1127
1128
			public void dispose() {
1129
			}
1130
		});
1131
1132
		issueType.setLabelProvider(new LabelProvider() {
1133
1134
			@Override
1135
			public String getText(Object element) {
1136
				if (element instanceof Placeholder) {
1137
					return ((Placeholder) element).getText();
1138
				}
1139
1140
				return ((IssueType) element).getName();
1141
			}
1142
1143
		});
1144
1145
		issueType.setInput(NO_PROJECTS);
1146
	}
1147
1121
//	@Override
1148
//	@Override
1122
//	public boolean isPageComplete() {
1149
//	public boolean isPageComplete() {
1123
//		// XXX workaround for bad implementation of AbstractRepositoryQueryPage.isPageComplete()
1150
//		// XXX workaround for bad implementation of AbstractRepositoryQueryPage.isPageComplete()
Lines 1142-1149 Link Here
1142
	private void createFixForViewer(Composite c) {
1169
	private void createFixForViewer(Composite c) {
1143
		fixFor = new ListViewer(c, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL);
1170
		fixFor = new ListViewer(c, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL);
1144
		GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
1171
		GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
1145
		gridData.heightHint = 50;
1172
		gridData.heightHint = HEIGHT_HINT;
1146
		gridData.widthHint = 90;
1173
		gridData.widthHint = WIDTH_HINT;
1147
		fixFor.getControl().setLayoutData(gridData);
1174
		fixFor.getControl().setLayoutData(gridData);
1148
1175
1149
		fixFor.setContentProvider(new IStructuredContentProvider() {
1176
		fixFor.setContentProvider(new IStructuredContentProvider() {
Lines 1158-1164 Link Here
1158
1185
1159
			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
1186
			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
1160
				Project[] projects = (Project[]) newInput;
1187
				Project[] projects = (Project[]) newInput;
1161
				if (projects == null || projects.length == 0) {
1188
				if (projects == null || projects.length == 0 || projects.length > 1) {
1162
					currentElements = new Object[] { ANY_FIX_VERSION };
1189
					currentElements = new Object[] { ANY_FIX_VERSION };
1163
				} else {
1190
				} else {
1164
					List<Object> elements = new ArrayList<Object>();
1191
					List<Object> elements = new ArrayList<Object>();
Lines 1169-1175 Link Here
1169
					Set<Version> unreleasedVersions = new LinkedHashSet<Version>();
1196
					Set<Version> unreleasedVersions = new LinkedHashSet<Version>();
1170
1197
1171
					for (Project project : projects) {
1198
					for (Project project : projects) {
1172
						if (project != null) {
1199
						if (project != null && project.hasDetails()) {
1173
							releasedVersions.addAll(Arrays.asList(project.getReleasedVersions()));
1200
							releasedVersions.addAll(Arrays.asList(project.getReleasedVersions()));
1174
							unreleasedVersions.addAll(Arrays.asList(project.getUnreleasedVersions()));
1201
							unreleasedVersions.addAll(Arrays.asList(project.getUnreleasedVersions()));
1175
						}
1202
						}
Lines 1191-1198 Link Here
1191
	private void createProjectsViewer(Composite c) {
1218
	private void createProjectsViewer(Composite c) {
1192
		project = new ListViewer(c, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL);
1219
		project = new ListViewer(c, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL);
1193
		GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
1220
		GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
1194
		gridData.heightHint = 50;
1221
		gridData.heightHint = HEIGHT_HINT;
1195
		gridData.widthHint = 90;
1222
		gridData.widthHint = WIDTH_HINT;
1196
		project.getControl().setLayoutData(gridData);
1223
		project.getControl().setLayoutData(gridData);
1197
1224
1198
		project.setLabelProvider(new LabelProvider() {
1225
		project.setLabelProvider(new LabelProvider() {
Lines 1226-1233 Link Here
1226
	private void createReportedInViewer(Composite c) {
1253
	private void createReportedInViewer(Composite c) {
1227
		reportedIn = new ListViewer(c, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL);
1254
		reportedIn = new ListViewer(c, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL);
1228
		GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
1255
		GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
1229
		gridData.heightHint = 50;
1256
		gridData.heightHint = HEIGHT_HINT;
1230
		gridData.widthHint = 90;
1257
		gridData.widthHint = WIDTH_HINT;
1231
		reportedIn.getControl().setLayoutData(gridData);
1258
		reportedIn.getControl().setLayoutData(gridData);
1232
1259
1233
		reportedIn.setContentProvider(new IStructuredContentProvider() {
1260
		reportedIn.setContentProvider(new IStructuredContentProvider() {
Lines 1242-1248 Link Here
1242
1269
1243
			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
1270
			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
1244
				Project[] projects = (Project[]) newInput;
1271
				Project[] projects = (Project[]) newInput;
1245
				if (projects == null || projects.length == 0) {
1272
				if (projects == null || projects.length == 0 || projects.length > 1) {
1246
					currentElements = new Object[] { ANY_REPORTED_VERSION };
1273
					currentElements = new Object[] { ANY_REPORTED_VERSION };
1247
				} else {
1274
				} else {
1248
					List<Object> elements = new ArrayList<Object>();
1275
					List<Object> elements = new ArrayList<Object>();
Lines 1253-1259 Link Here
1253
					Set<Object> unreleasedVersions = new LinkedHashSet<Object>();
1280
					Set<Object> unreleasedVersions = new LinkedHashSet<Object>();
1254
1281
1255
					for (Project project : projects) {
1282
					for (Project project : projects) {
1256
						if (project != null) {
1283
						if (project != null && project.hasDetails()) {
1257
							releasedVersions.addAll(Arrays.asList(project.getReleasedVersions()));
1284
							releasedVersions.addAll(Arrays.asList(project.getReleasedVersions()));
1258
							unreleasedVersions.addAll(Arrays.asList(project.getUnreleasedVersions()));
1285
							unreleasedVersions.addAll(Arrays.asList(project.getUnreleasedVersions()));
1259
						}
1286
						}
Lines 1330-1355 Link Here
1330
		});
1357
		});
1331
		project.setInput(client);
1358
		project.setInput(client);
1332
1359
1333
		issueType.setContentProvider(new IStructuredContentProvider() {
1334
1335
			public void dispose() {
1336
			}
1337
1338
			public Object[] getElements(Object inputElement) {
1339
				JiraClient server = (JiraClient) inputElement;
1340
				Object[] elements = new Object[server.getCache().getIssueTypes().length + 1];
1341
				elements[0] = ANY_ISSUE_TYPE;
1342
				System.arraycopy(server.getCache().getIssueTypes(), 0, elements, 1,
1343
						server.getCache().getIssueTypes().length);
1344
1345
				return elements;
1346
			}
1347
1348
			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
1349
			}
1350
		});
1351
		issueType.setInput(client);
1352
1353
		status.setContentProvider(new IStructuredContentProvider() {
1360
		status.setContentProvider(new IStructuredContentProvider() {
1354
1361
1355
			public void dispose() {
1362
			public void dispose() {
Lines 1698-1706 Link Here
1698
		initializeContentProviders();
1705
		initializeContentProviders();
1699
	}
1706
	}
1700
1707
1701
	void updateCurrentProjects(Project[] projects) {
1708
	void updateCurrentProjects(final Project[] projects) {
1709
		if (projects != null) {
1710
			IRunnableWithProgress updateProjectDetails = new IRunnableWithProgress() {
1711
				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
1712
					SubMonitor submonitor = SubMonitor.convert(monitor,
1713
							Messages.JiraFilterDefinitionPage_Update_Attributes_from_Repository, projects.length);
1714
1715
					for (final Project project : projects) {
1716
						if (project.hasDetails()) {
1717
							continue;
1718
						}
1719
						try {
1720
							client.getCache().refreshProjectDetails(project.getId(),
1721
									submonitor.newChild(1, SubMonitor.SUPPRESS_NONE));
1722
						} catch (final JiraException e) {
1723
							Display.getDefault().asyncExec(new Runnable() {
1724
								public void run() {
1725
									JiraFilterDefinitionPage.this.setErrorMessage(NLS.bind(
1726
											Messages.JiraFilterDefinitionPage_Error_updating_attributes_X,
1727
											e.getMessage()));
1728
								}
1729
							});
1730
						}
1731
					}
1732
				}
1733
			};
1734
1735
			try {
1736
				if (getContainer() != null) {
1737
					getContainer().run(true, true, updateProjectDetails);
1738
				} else if (getSearchContainer() != null) {
1739
					getSearchContainer().getRunnableContext().run(true, true, updateProjectDetails);
1740
				} else {
1741
					IProgressService service = PlatformUI.getWorkbench().getProgressService();
1742
					service.busyCursorWhile(updateProjectDetails);
1743
				}
1744
			} catch (Exception e) {
1745
				JiraFilterDefinitionPage.this.setErrorMessage(NLS.bind(
1746
						Messages.JiraFilterDefinitionPage_Error_updating_attributes_X, e.getMessage()));
1747
			}
1748
		}
1749
1702
		this.fixFor.setInput(projects);
1750
		this.fixFor.setInput(projects);
1703
		this.components.setInput(projects);
1751
		this.components.setInput(projects);
1704
		this.reportedIn.setInput(projects);
1752
		this.reportedIn.setInput(projects);
1753
		this.issueType.setInput(projects);
1705
	}
1754
	}
1706
}
1755
}
(-)src/org/eclipse/mylyn/internal/jira/ui/wizards/JiraProjectPage.java (+16 lines)
Lines 44-49 Link Here
44
import org.eclipse.mylyn.internal.jira.core.service.JiraException;
44
import org.eclipse.mylyn.internal.jira.core.service.JiraException;
45
import org.eclipse.mylyn.internal.jira.core.util.JiraUtil;
45
import org.eclipse.mylyn.internal.jira.core.util.JiraUtil;
46
import org.eclipse.mylyn.internal.jira.ui.JiraUiPlugin;
46
import org.eclipse.mylyn.internal.jira.ui.JiraUiPlugin;
47
import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages;
47
import org.eclipse.mylyn.internal.provisional.commons.ui.CommonUiUtil;
48
import org.eclipse.mylyn.internal.provisional.commons.ui.CommonUiUtil;
48
import org.eclipse.mylyn.internal.provisional.commons.ui.EnhancedFilteredTree;
49
import org.eclipse.mylyn.internal.provisional.commons.ui.EnhancedFilteredTree;
49
import org.eclipse.mylyn.internal.provisional.commons.ui.ICoreRunnable;
50
import org.eclipse.mylyn.internal.provisional.commons.ui.ICoreRunnable;
Lines 57-62 Link Here
57
import org.eclipse.swt.SWT;
58
import org.eclipse.swt.SWT;
58
import org.eclipse.swt.events.SelectionAdapter;
59
import org.eclipse.swt.events.SelectionAdapter;
59
import org.eclipse.swt.events.SelectionEvent;
60
import org.eclipse.swt.events.SelectionEvent;
61
import org.eclipse.swt.graphics.Image;
60
import org.eclipse.swt.layout.GridData;
62
import org.eclipse.swt.layout.GridData;
61
import org.eclipse.swt.layout.GridLayout;
63
import org.eclipse.swt.layout.GridLayout;
62
import org.eclipse.swt.widgets.Button;
64
import org.eclipse.swt.widgets.Button;
Lines 127-132 Link Here
127
				}
129
				}
128
				return ""; //$NON-NLS-1$
130
				return ""; //$NON-NLS-1$
129
			}
131
			}
132
133
			@Override
134
			public Image getImage(Object element) {
135
				if (element instanceof Project) {
136
					Project project = (Project) element;
137
					if (!project.hasDetails()) {
138
						return CommonImages.getImage(CommonImages.REFRESH);
139
					}
140
				}
141
				return super.getImage(element);
142
			}
130
		});
143
		});
131
144
132
		projectTreeViewer.setContentProvider(new ITreeContentProvider() {
145
		projectTreeViewer.setContentProvider(new ITreeContentProvider() {
Lines 181-188 Link Here
181
			public void selectionChanged(SelectionChangedEvent event) {
194
			public void selectionChanged(SelectionChangedEvent event) {
182
				if (getSelectedProject() == null) {
195
				if (getSelectedProject() == null) {
183
					setErrorMessage(Messages.JiraProjectPage_You_must_select_a_project);
196
					setErrorMessage(Messages.JiraProjectPage_You_must_select_a_project);
197
				} else if (!getSelectedProject().hasDetails()) {
198
					setMessage(Messages.JiraProjectPage_This_project_has_details_missing);
184
				} else {
199
				} else {
185
					setErrorMessage(null);
200
					setErrorMessage(null);
201
					setMessage(null);
186
				}
202
				}
187
				getWizard().getContainer().updateButtons();
203
				getWizard().getContainer().updateButtons();
188
			}
204
			}

Return to bug 290860