### Eclipse Workspace Patch 1.0 #P org.eclipse.mylyn.jira.core Index: src/org/eclipse/mylyn/internal/jira/core/model/JiraVersion.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.jira.core/src/org/eclipse/mylyn/internal/jira/core/model/JiraVersion.java,v retrieving revision 1.14 diff -u -r1.14 JiraVersion.java --- src/org/eclipse/mylyn/internal/jira/core/model/JiraVersion.java 24 Jul 2009 12:04:22 -0000 1.14 +++ src/org/eclipse/mylyn/internal/jira/core/model/JiraVersion.java 2 Oct 2009 09:40:05 -0000 @@ -113,4 +113,8 @@ return sb.toString(); } + public boolean supportsPerProjectIssueTypes() { + return this.compareTo(JiraVersion.JIRA_3_12) >= 0; + } + } Index: src/org/eclipse/mylyn/internal/jira/core/model/Project.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.jira.core/src/org/eclipse/mylyn/internal/jira/core/model/Project.java,v retrieving revision 1.15 diff -u -r1.15 Project.java --- src/org/eclipse/mylyn/internal/jira/core/model/Project.java 24 Jul 2009 12:04:22 -0000 1.15 +++ src/org/eclipse/mylyn/internal/jira/core/model/Project.java 2 Oct 2009 09:40:05 -0000 @@ -14,7 +14,9 @@ import java.io.Serializable; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * TODO need mapping statuses -> actions -> fields TODO need mapping statuses -> fields @@ -48,6 +50,10 @@ private SecurityLevel[] securityLevels; + private Map issueTypesById; + + private boolean details; + public Project(String id) { this.id = id; } @@ -212,6 +218,12 @@ public void setIssueTypes(IssueType[] issueTypes) { this.issueTypes = issueTypes; + this.issueTypesById = new HashMap(); + if (issueTypes != null) { + for (IssueType type : issueTypes) { + issueTypesById.put(type.getId(), type); + } + } } public SecurityLevel[] getSecurityLevels() { @@ -222,4 +234,18 @@ this.securityLevels = securityLevels; } + public void setDetails(boolean details) { + this.details = details; + } + + public boolean hasDetails() { + return details; + } + + public IssueType getIssueTypeById(String typeId) { + if (issueTypesById != null) { + return issueTypesById.get(typeId); + } + return null; + } } Index: src/org/eclipse/mylyn/internal/jira/core/service/JiraClientCache.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.jira.core/src/org/eclipse/mylyn/internal/jira/core/service/JiraClientCache.java,v retrieving revision 1.16 diff -u -r1.16 JiraClientCache.java --- src/org/eclipse/mylyn/internal/jira/core/service/JiraClientCache.java 30 Sep 2009 19:38:06 -0000 1.16 +++ src/org/eclipse/mylyn/internal/jira/core/service/JiraClientCache.java 2 Oct 2009 09:40:05 -0000 @@ -12,10 +12,7 @@ package org.eclipse.mylyn.internal.jira.core.service; -import java.util.Arrays; import java.util.HashMap; -import java.util.HashSet; -import java.util.Set; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.SubMonitor; @@ -75,8 +72,6 @@ submonitor.setWorkRemaining(data.projects.length); for (Project project : data.projects) { - initializeProject(project, submonitor.newChild(1, SubMonitor.SUPPRESS_NONE)); - data.projectsById.put(project.getId(), project); data.projectsByKey.put(project.getKey(), project); } @@ -87,12 +82,12 @@ project.getKey()), 5); synchronized (project) { - final String version = data.serverInfo.getVersion(); + final JiraVersion version = new JiraVersion(data.serverInfo.getVersion()); project.setComponents(jiraClient.getComponents(project.getKey(), subMonitor.newChild(1))); project.setVersions(jiraClient.getVersions(project.getKey(), subMonitor.newChild(1))); - if (supportsPerProjectIssueTypes(version) >= 0) { + if (version.supportsPerProjectIssueTypes()) { IssueType[] issueTypes = jiraClient.getIssueTypes(project.getId(), subMonitor.newChild(1)); IssueType[] subTaskIssueTypes = jiraClient.getSubTaskIssueTypes(project.getId(), subMonitor.newChild(1)); for (IssueType issueType : subTaskIssueTypes) { @@ -105,7 +100,7 @@ project.setIssueTypes(projectIssueTypes); } - if (new JiraVersion(version).compareTo(JiraVersion.JIRA_3_13) >= 0) { + if (version.compareTo(JiraVersion.JIRA_3_13) >= 0) { try { SecurityLevel[] securityLevels = jiraClient.getAvailableSecurityLevels(project.getKey(), subMonitor.newChild(1)); @@ -120,6 +115,8 @@ project.setSecurityLevels(null); } } + + project.setDetails(true); } } @@ -161,45 +158,28 @@ SubMonitor submonitor = SubMonitor.convert(monitor, Messages.JiraClientCache_getting_issue_types, 2); String version = data.serverInfo.getVersion(); - if (supportsPerProjectIssueTypes(version) >= 0) { - // collect issue types from all projects to avoid additional SOAP request - Set issueTypes = new HashSet(); - for (Project project : data.projects) { - IssueType[] projectIssueTypes = project.getIssueTypes(); - if (projectIssueTypes != null) { - issueTypes.addAll(Arrays.asList(projectIssueTypes)); - } - } - - data.issueTypes = issueTypes.toArray(new IssueType[0]); - data.issueTypesById = new HashMap(data.issueTypes.length); - for (IssueType issueType : data.issueTypes) { - data.issueTypesById.put(issueType.getId(), issueType); - } + IssueType[] issueTypes = jiraClient.getIssueTypes(submonitor.newChild(1)); + IssueType[] subTaskIssueTypes; + if (new JiraVersion(version).compareTo(JiraVersion.JIRA_3_3) >= 0) { + subTaskIssueTypes = jiraClient.getSubTaskIssueTypes(submonitor.newChild(1)); } else { - IssueType[] issueTypes = jiraClient.getIssueTypes(submonitor.newChild(1)); - IssueType[] subTaskIssueTypes; - if (new JiraVersion(version).compareTo(JiraVersion.JIRA_3_3) >= 0) { - subTaskIssueTypes = jiraClient.getSubTaskIssueTypes(submonitor.newChild(1)); - } else { - subTaskIssueTypes = new IssueType[0]; - } - - data.issueTypesById = new HashMap(issueTypes.length + subTaskIssueTypes.length); + subTaskIssueTypes = new IssueType[0]; + } - for (IssueType issueType : issueTypes) { - data.issueTypesById.put(issueType.getId(), issueType); - } + data.issueTypesById = new HashMap(issueTypes.length + subTaskIssueTypes.length); - for (IssueType issueType : subTaskIssueTypes) { - issueType.setSubTaskType(true); - data.issueTypesById.put(issueType.getId(), issueType); - } + for (IssueType issueType : issueTypes) { + data.issueTypesById.put(issueType.getId(), issueType); + } - data.issueTypes = new IssueType[issueTypes.length + subTaskIssueTypes.length]; - System.arraycopy(issueTypes, 0, data.issueTypes, 0, issueTypes.length); - System.arraycopy(subTaskIssueTypes, 0, data.issueTypes, issueTypes.length, subTaskIssueTypes.length); + for (IssueType issueType : subTaskIssueTypes) { + issueType.setSubTaskType(true); + data.issueTypesById.put(issueType.getId(), issueType); } + + data.issueTypes = new IssueType[issueTypes.length + subTaskIssueTypes.length]; + System.arraycopy(issueTypes, 0, data.issueTypes, 0, issueTypes.length); + System.arraycopy(subTaskIssueTypes, 0, data.issueTypes, issueTypes.length, subTaskIssueTypes.length); } private void initializeStatuses(JiraClientData data, IProgressMonitor monitor) throws JiraException { @@ -213,7 +193,9 @@ } private void initializeProjectRoles(JiraClientData data, IProgressMonitor monitor) throws JiraException { - data.projectRoles = jiraClient.getProjectRoles(monitor); + SubMonitor submonitor = SubMonitor.convert(monitor, Messages.JiraClientCache_getting_project_roles, 1); + + data.projectRoles = jiraClient.getProjectRoles(submonitor.newChild(1)); } private void initializeResolutions(JiraClientData data, IProgressMonitor monitor) throws JiraException { @@ -253,19 +235,19 @@ public synchronized void refreshDetails(IProgressMonitor monitor) throws JiraException { SubMonitor subMonitor = SubMonitor.convert(monitor, Messages.JiraClientCache_Updating_repository_configuration, - 20); + 7); final JiraClientData newData = new JiraClientData(); refreshServerInfo(newData, subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE)); data.serverInfo = newData.serverInfo; - initializeProjects(newData, subMonitor.newChild(15, SubMonitor.SUPPRESS_NONE)); initializePriorities(newData, subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE)); initializeIssueTypes(newData, subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE)); initializeResolutions(newData, subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE)); initializeStatuses(newData, subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE)); initializeProjectRoles(newData, subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE)); + initializeProjects(newData, subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE)); newData.lastUpdate = System.currentTimeMillis(); this.data = newData; @@ -276,8 +258,8 @@ * to complete and should not be called from a UI thread. */ public synchronized void refreshServerInfo(JiraClientData data, IProgressMonitor monitor) throws JiraException { - monitor = SubMonitor.convert(monitor, Messages.JiraClientCache_Getting_server_information, 1); - data.serverInfo = jiraClient.getServerInfo(monitor); + SubMonitor submonitor = SubMonitor.convert(monitor, Messages.JiraClientCache_Getting_server_information, 1); + data.serverInfo = jiraClient.getServerInfo(submonitor.newChild(1)); } public synchronized void refreshServerInfo(IProgressMonitor monitor) throws JiraException { @@ -324,8 +306,4 @@ return user; } - private int supportsPerProjectIssueTypes(String version) { - return new JiraVersion(version).compareTo(JiraVersion.JIRA_3_12); - } - } Index: src/org/eclipse/mylyn/internal/jira/core/service/messages.properties =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.jira.core/src/org/eclipse/mylyn/internal/jira/core/service/messages.properties,v retrieving revision 1.3 diff -u -r1.3 messages.properties --- src/org/eclipse/mylyn/internal/jira/core/service/messages.properties 29 Sep 2009 17:51:40 -0000 1.3 +++ src/org/eclipse/mylyn/internal/jira/core/service/messages.properties 2 Oct 2009 09:40:05 -0000 @@ -13,7 +13,8 @@ JiraClientCache_getting_issue_types=Getting issue types JiraClientCache_getting_priorities=Getting priorities JiraClientCache_getting_project_details=Getting project details -JiraClientCache_getting_resolutions=Gettings resolutions +JiraClientCache_getting_resolutions=Getting resolutions JiraClientCache_getting_server_info=Getting server info JiraClientCache_getting_statuses=Getting statuses JiraClientCache_project_details_for=Getting project details for {0} +JiraClientCache_getting_project_roles=Getting project roles \ No newline at end of file Index: src/org/eclipse/mylyn/internal/jira/core/service/FilterDefinitionConverter.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.jira.core/src/org/eclipse/mylyn/internal/jira/core/service/FilterDefinitionConverter.java,v retrieving revision 1.4 diff -u -r1.4 FilterDefinitionConverter.java --- src/org/eclipse/mylyn/internal/jira/core/service/FilterDefinitionConverter.java 18 Sep 2009 01:07:58 -0000 1.4 +++ src/org/eclipse/mylyn/internal/jira/core/service/FilterDefinitionConverter.java 2 Oct 2009 09:40:05 -0000 @@ -187,6 +187,9 @@ Set versions = new LinkedHashSet(); for (Project project : projects) { + if (!project.hasDetails()) { + continue; + } for (String componentId : componentIds) { Component[] projectComponents = project.getComponents(); for (Component component : projectComponents) { @@ -209,7 +212,21 @@ List typeIds = getIds(params, TYPE_KEY); List issueTypes = new ArrayList(); for (String typeId : typeIds) { - IssueType issueType = client.getCache().getIssueTypeById(typeId); + IssueType issueType = null; + if (projects.size() > 0) { + for (Project project : projects) { + issueType = project.getIssueTypeById(typeId); + if (issueType != null) { + break; + } + } + } + + // fallback - if there are no projects or project issue types are not supported + if (issueType == null) { + issueType = client.getCache().getIssueTypeById(typeId); + } + if (issueType != null) { issueTypes.add(issueType); } else if (validate) { Index: src/org/eclipse/mylyn/internal/jira/core/service/Messages.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.jira.core/src/org/eclipse/mylyn/internal/jira/core/service/Messages.java,v retrieving revision 1.2 diff -u -r1.2 Messages.java --- src/org/eclipse/mylyn/internal/jira/core/service/Messages.java 29 Sep 2009 17:51:40 -0000 1.2 +++ src/org/eclipse/mylyn/internal/jira/core/service/Messages.java 2 Oct 2009 09:40:05 -0000 @@ -43,4 +43,5 @@ public static String JiraClientCache_project_details_for; + public static String JiraClientCache_getting_project_roles; } Index: src/org/eclipse/mylyn/internal/jira/core/JiraTaskDataHandler.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.jira.core/src/org/eclipse/mylyn/internal/jira/core/JiraTaskDataHandler.java,v retrieving revision 1.85 diff -u -r1.85 JiraTaskDataHandler.java --- src/org/eclipse/mylyn/internal/jira/core/JiraTaskDataHandler.java 2 Oct 2009 04:31:22 -0000 1.85 +++ src/org/eclipse/mylyn/internal/jira/core/JiraTaskDataHandler.java 2 Oct 2009 09:40:04 -0000 @@ -170,13 +170,25 @@ TaskData oldTaskData, boolean forceCache, IProgressMonitor monitor) throws JiraException { TaskData data = new TaskData(getAttributeMapper(repository), JiraCorePlugin.CONNECTOR_KIND, repository.getRepositoryUrl(), jiraIssue.getId()); - initializeTaskData(data, client, jiraIssue.getProject()); + initializeTaskData(repository, data, client, jiraIssue.getProject(), monitor); updateTaskData(data, jiraIssue, client, oldTaskData, forceCache, monitor); addOperations(data, jiraIssue, client, oldTaskData, forceCache, monitor); return data; } - public void initializeTaskData(TaskData data, JiraClient client, Project project) { + private Project ensureProjectHasDetails(JiraClient client, TaskRepository repository, Project project, + IProgressMonitor monitor) throws JiraException { + if (!project.hasDetails()) { + client.getCache().refreshProjectDetails(project.getId(), monitor); + return client.getCache().getProjectById(project.getId()); + } + return project; + } + + public void initializeTaskData(TaskRepository repository, TaskData data, JiraClient client, Project project, + IProgressMonitor monitor) throws JiraException { + project = ensureProjectHasDetails(client, repository, project, monitor); + data.setVersion(TASK_DATA_VERSION_CURRENT.toString()); createAttribute(data, JiraAttribute.CREATION_DATE); @@ -1134,7 +1146,23 @@ if (project == null) { return false; } - initializeTaskData(data, client, project); + if (!project.hasDetails()) { + try { + client.getCache().refreshProjectDetails(project.getId(), monitor); + } catch (JiraException e) { + final IStatus status = JiraCorePlugin.toStatus(repository, e); + trace(status); + throw new CoreException(status); + } + } + + try { + initializeTaskData(repository, data, client, project, monitor); + } catch (JiraException e) { + final IStatus status = JiraCorePlugin.toStatus(repository, e); + trace(status); + throw new CoreException(status); + } return true; } @@ -1166,7 +1194,7 @@ } Project project = client.getCache().getProjectById(projectAttribute.getValue()); - initializeTaskData(taskData, client, project); + initializeTaskData(repository, taskData, client, project, monitor); new JiraTaskMapper(taskData).merge(new JiraTaskMapper(parentTaskData)); taskData.getRoot().getAttribute(JiraAttribute.PROJECT.id()).setValue(project.getId()); Index: src/org/eclipse/mylyn/internal/jira/core/JiraAttributeMapper.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.jira.core/src/org/eclipse/mylyn/internal/jira/core/JiraAttributeMapper.java,v retrieving revision 1.25 diff -u -r1.25 JiraAttributeMapper.java --- src/org/eclipse/mylyn/internal/jira/core/JiraAttributeMapper.java 24 Jul 2009 12:04:22 -0000 1.25 +++ src/org/eclipse/mylyn/internal/jira/core/JiraAttributeMapper.java 2 Oct 2009 09:40:04 -0000 @@ -128,7 +128,7 @@ JiraAttribute.PROJECT.id()); if (projectAttribute != null) { Project project = client.getCache().getProjectById(projectAttribute.getValue()); - if (project != null) { + if (project != null && project.hasDetails()) { if (JiraAttribute.COMPONENTS.id().equals(attribute.getId())) { for (Component component : project.getComponents()) { options.put(component.getId(), component.getName()); #P org.eclipse.mylyn.jira.ui Index: src/org/eclipse/mylyn/internal/jira/ui/wizards/messages.properties =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.jira.ui/src/org/eclipse/mylyn/internal/jira/ui/wizards/messages.properties,v retrieving revision 1.5 diff -u -r1.5 messages.properties --- src/org/eclipse/mylyn/internal/jira/ui/wizards/messages.properties 17 Sep 2009 02:16:07 -0000 1.5 +++ src/org/eclipse/mylyn/internal/jira/ui/wizards/messages.properties 2 Oct 2009 09:40:09 -0000 @@ -67,6 +67,7 @@ JiraProjectPage_Pick_a_project_to_open_the_new_bug_editor=Pick a project to open the new bug editor.\n\ Press the Update button if the project is not in the list. JiraProjectPage_Update_Projects_from_Repository=Update Projects from Repository +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 JiraRepositorySettingsPage_Advanced_Configuration=Advanced &Configuration JiraRepositorySettingsPage_Authentication_credentials_are_valid_character_encodeing=Authentication credentials are valid. Note: The character encoding could not be determined, verify 'Additional Settings'. Index: src/org/eclipse/mylyn/internal/jira/ui/wizards/Messages.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.jira.ui/src/org/eclipse/mylyn/internal/jira/ui/wizards/Messages.java,v retrieving revision 1.5 diff -u -r1.5 Messages.java --- src/org/eclipse/mylyn/internal/jira/ui/wizards/Messages.java 17 Sep 2009 02:16:07 -0000 1.5 +++ src/org/eclipse/mylyn/internal/jira/ui/wizards/Messages.java 2 Oct 2009 09:40:09 -0000 @@ -194,4 +194,6 @@ public static String JiraRepositorySettingsPage_working_hours_per_day; public static String JiraRepositorySettingsPage_Validate_server_settings; + + public static String JiraProjectPage_This_project_has_details_missing; } Index: src/org/eclipse/mylyn/internal/jira/ui/wizards/JiraFilterDefinitionPage.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.jira.ui/src/org/eclipse/mylyn/internal/jira/ui/wizards/JiraFilterDefinitionPage.java,v retrieving revision 1.11 diff -u -r1.11 JiraFilterDefinitionPage.java --- src/org/eclipse/mylyn/internal/jira/ui/wizards/JiraFilterDefinitionPage.java 18 Sep 2009 01:07:55 -0000 1.11 +++ src/org/eclipse/mylyn/internal/jira/ui/wizards/JiraFilterDefinitionPage.java 2 Oct 2009 09:40:09 -0000 @@ -25,6 +25,7 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.OperationCanceledException; +import org.eclipse.core.runtime.SubMonitor; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.operation.IRunnableWithProgress; @@ -189,6 +190,10 @@ private static final Project[] NO_PROJECTS = new Project[0]; + private static final int HEIGHT_HINT = 50; + + private static final int WIDTH_HINT = 150; + final Placeholder ALL_PROJECTS = new Placeholder(Messages.JiraFilterDefinitionPage_All_Projects); final Placeholder ANY_ASSIGNEE = new Placeholder(Messages.JiraFilterDefinitionPage_Any); @@ -626,8 +631,8 @@ private void createComponentsViewer(Composite c) { components = new ListViewer(c, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL); GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); - gridData.heightHint = 50; - gridData.widthHint = 90; + gridData.heightHint = HEIGHT_HINT; + gridData.widthHint = WIDTH_HINT; components.getControl().setLayoutData(gridData); components.setContentProvider(new IStructuredContentProvider() { @@ -642,14 +647,14 @@ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { Project[] projects = (Project[]) newInput; - if (projects == null || projects.length == 0) { + if (projects == null || projects.length == 0 || projects.length > 1) { currentElements = new Object[] { ANY_COMPONENT }; } else { Set elements = new LinkedHashSet(); elements.add(ANY_COMPONENT); elements.add(NO_COMPONENT); for (Project project : projects) { - if (project != null) { + if (project != null && project.hasDetails()) { elements.addAll(Arrays.asList(project.getComponents())); } } @@ -740,12 +745,6 @@ { SashForm cc = new SashForm(sashForm, SWT.NONE); - ISelectionChangedListener selectionChangeListener = new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - // validatePage(); - } - }; - { Composite comp = new Composite(cc, SWT.NONE); GridLayout gridLayout = new GridLayout(); @@ -757,26 +756,7 @@ typeLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false)); typeLabel.setText(Messages.JiraFilterDefinitionPage_Type); - issueType = new ListViewer(comp, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL); - GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); - gridData.heightHint = 50; - gridData.widthHint = 90; - issueType.getList().setLayoutData(gridData); - - issueType.setLabelProvider(new LabelProvider() { - - @Override - public String getText(Object element) { - if (element instanceof Placeholder) { - return ((Placeholder) element).getText(); - } - - return ((IssueType) element).getName(); - } - - }); - - issueType.addSelectionChangedListener(selectionChangeListener); + createIssueTypesViewer(comp); } { @@ -792,8 +772,8 @@ status = new ListViewer(comp, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL); GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); - gridData.heightHint = 50; - gridData.widthHint = 90; + gridData.heightHint = HEIGHT_HINT; + gridData.widthHint = WIDTH_HINT; status.getList().setLayoutData(gridData); status.setLabelProvider(new LabelProvider() { @@ -808,8 +788,6 @@ } }); - - status.addSelectionChangedListener(selectionChangeListener); } { @@ -825,8 +803,8 @@ resolution = new ListViewer(comp, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL); GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); - gridData.heightHint = 50; - gridData.widthHint = 90; + gridData.heightHint = HEIGHT_HINT; + gridData.widthHint = WIDTH_HINT; resolution.getList().setLayoutData(gridData); resolution.setLabelProvider(new LabelProvider() { @@ -841,8 +819,6 @@ } }); - - resolution.addSelectionChangedListener(selectionChangeListener); } { @@ -858,8 +834,8 @@ priority = new ListViewer(comp, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL); GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); - gridData.heightHint = 50; - gridData.widthHint = 90; + gridData.heightHint = HEIGHT_HINT; + gridData.widthHint = WIDTH_HINT; priority.getList().setLayoutData(gridData); priority.setLabelProvider(new LabelProvider() { @@ -874,7 +850,6 @@ } }); - priority.addSelectionChangedListener(selectionChangeListener); } cc.setWeights(new int[] { 1, 1, 1, 1 }); @@ -1118,6 +1093,58 @@ Dialog.applyDialogFont(parent); } + private void createIssueTypesViewer(Composite comp) { + issueType = new ListViewer(comp, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL); + GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); + gridData.heightHint = HEIGHT_HINT; + gridData.widthHint = WIDTH_HINT; + issueType.getList().setLayoutData(gridData); + + issueType.setContentProvider(new IStructuredContentProvider() { + private Object[] currentElements; + + public Object[] getElements(Object inputElement) { + return currentElements; + } + + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + final Project[] projects = (Project[]) newInput; + IssueType[] types = null; + + if (projects == null || projects.length == 0 || projects.length > 1) { + types = client.getCache().getIssueTypes(); + } else if (projects[0].hasDetails()) { + types = projects[0].getIssueTypes(); + } + + if (types != null) { + Object[] elements = new Object[types.length + 1]; + System.arraycopy(types, 0, elements, 1, types.length); + elements[0] = ANY_ISSUE_TYPE; + currentElements = elements; + } + } + + public void dispose() { + } + }); + + issueType.setLabelProvider(new LabelProvider() { + + @Override + public String getText(Object element) { + if (element instanceof Placeholder) { + return ((Placeholder) element).getText(); + } + + return ((IssueType) element).getName(); + } + + }); + + issueType.setInput(NO_PROJECTS); + } + // @Override // public boolean isPageComplete() { // // XXX workaround for bad implementation of AbstractRepositoryQueryPage.isPageComplete() @@ -1142,8 +1169,8 @@ private void createFixForViewer(Composite c) { fixFor = new ListViewer(c, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL); GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); - gridData.heightHint = 50; - gridData.widthHint = 90; + gridData.heightHint = HEIGHT_HINT; + gridData.widthHint = WIDTH_HINT; fixFor.getControl().setLayoutData(gridData); fixFor.setContentProvider(new IStructuredContentProvider() { @@ -1158,7 +1185,7 @@ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { Project[] projects = (Project[]) newInput; - if (projects == null || projects.length == 0) { + if (projects == null || projects.length == 0 || projects.length > 1) { currentElements = new Object[] { ANY_FIX_VERSION }; } else { List elements = new ArrayList(); @@ -1169,7 +1196,7 @@ Set unreleasedVersions = new LinkedHashSet(); for (Project project : projects) { - if (project != null) { + if (project != null && project.hasDetails()) { releasedVersions.addAll(Arrays.asList(project.getReleasedVersions())); unreleasedVersions.addAll(Arrays.asList(project.getUnreleasedVersions())); } @@ -1191,8 +1218,8 @@ private void createProjectsViewer(Composite c) { project = new ListViewer(c, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL); GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); - gridData.heightHint = 50; - gridData.widthHint = 90; + gridData.heightHint = HEIGHT_HINT; + gridData.widthHint = WIDTH_HINT; project.getControl().setLayoutData(gridData); project.setLabelProvider(new LabelProvider() { @@ -1226,8 +1253,8 @@ private void createReportedInViewer(Composite c) { reportedIn = new ListViewer(c, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL); GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); - gridData.heightHint = 50; - gridData.widthHint = 90; + gridData.heightHint = HEIGHT_HINT; + gridData.widthHint = WIDTH_HINT; reportedIn.getControl().setLayoutData(gridData); reportedIn.setContentProvider(new IStructuredContentProvider() { @@ -1242,7 +1269,7 @@ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { Project[] projects = (Project[]) newInput; - if (projects == null || projects.length == 0) { + if (projects == null || projects.length == 0 || projects.length > 1) { currentElements = new Object[] { ANY_REPORTED_VERSION }; } else { List elements = new ArrayList(); @@ -1253,7 +1280,7 @@ Set unreleasedVersions = new LinkedHashSet(); for (Project project : projects) { - if (project != null) { + if (project != null && project.hasDetails()) { releasedVersions.addAll(Arrays.asList(project.getReleasedVersions())); unreleasedVersions.addAll(Arrays.asList(project.getUnreleasedVersions())); } @@ -1330,26 +1357,6 @@ }); project.setInput(client); - issueType.setContentProvider(new IStructuredContentProvider() { - - public void dispose() { - } - - public Object[] getElements(Object inputElement) { - JiraClient server = (JiraClient) inputElement; - Object[] elements = new Object[server.getCache().getIssueTypes().length + 1]; - elements[0] = ANY_ISSUE_TYPE; - System.arraycopy(server.getCache().getIssueTypes(), 0, elements, 1, - server.getCache().getIssueTypes().length); - - return elements; - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - }); - issueType.setInput(client); - status.setContentProvider(new IStructuredContentProvider() { public void dispose() { @@ -1698,9 +1705,51 @@ initializeContentProviders(); } - void updateCurrentProjects(Project[] projects) { + void updateCurrentProjects(final Project[] projects) { + if (projects != null) { + IRunnableWithProgress updateProjectDetails = new IRunnableWithProgress() { + public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { + SubMonitor submonitor = SubMonitor.convert(monitor, + Messages.JiraFilterDefinitionPage_Update_Attributes_from_Repository, projects.length); + + for (final Project project : projects) { + if (project.hasDetails()) { + continue; + } + try { + client.getCache().refreshProjectDetails(project.getId(), + submonitor.newChild(1, SubMonitor.SUPPRESS_NONE)); + } catch (final JiraException e) { + Display.getDefault().asyncExec(new Runnable() { + public void run() { + JiraFilterDefinitionPage.this.setErrorMessage(NLS.bind( + Messages.JiraFilterDefinitionPage_Error_updating_attributes_X, + e.getMessage())); + } + }); + } + } + } + }; + + try { + if (getContainer() != null) { + getContainer().run(true, true, updateProjectDetails); + } else if (getSearchContainer() != null) { + getSearchContainer().getRunnableContext().run(true, true, updateProjectDetails); + } else { + IProgressService service = PlatformUI.getWorkbench().getProgressService(); + service.busyCursorWhile(updateProjectDetails); + } + } catch (Exception e) { + JiraFilterDefinitionPage.this.setErrorMessage(NLS.bind( + Messages.JiraFilterDefinitionPage_Error_updating_attributes_X, e.getMessage())); + } + } + this.fixFor.setInput(projects); this.components.setInput(projects); this.reportedIn.setInput(projects); + this.issueType.setInput(projects); } } Index: src/org/eclipse/mylyn/internal/jira/ui/wizards/JiraProjectPage.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.jira.ui/src/org/eclipse/mylyn/internal/jira/ui/wizards/JiraProjectPage.java,v retrieving revision 1.43 diff -u -r1.43 JiraProjectPage.java --- src/org/eclipse/mylyn/internal/jira/ui/wizards/JiraProjectPage.java 20 Aug 2009 21:39:45 -0000 1.43 +++ src/org/eclipse/mylyn/internal/jira/ui/wizards/JiraProjectPage.java 2 Oct 2009 09:40:09 -0000 @@ -44,6 +44,7 @@ import org.eclipse.mylyn.internal.jira.core.service.JiraException; import org.eclipse.mylyn.internal.jira.core.util.JiraUtil; import org.eclipse.mylyn.internal.jira.ui.JiraUiPlugin; +import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages; import org.eclipse.mylyn.internal.provisional.commons.ui.CommonUiUtil; import org.eclipse.mylyn.internal.provisional.commons.ui.EnhancedFilteredTree; import org.eclipse.mylyn.internal.provisional.commons.ui.ICoreRunnable; @@ -57,6 +58,7 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; @@ -127,6 +129,17 @@ } return ""; //$NON-NLS-1$ } + + @Override + public Image getImage(Object element) { + if (element instanceof Project) { + Project project = (Project) element; + if (!project.hasDetails()) { + return CommonImages.getImage(CommonImages.REFRESH); + } + } + return super.getImage(element); + } }); projectTreeViewer.setContentProvider(new ITreeContentProvider() { @@ -181,8 +194,11 @@ public void selectionChanged(SelectionChangedEvent event) { if (getSelectedProject() == null) { setErrorMessage(Messages.JiraProjectPage_You_must_select_a_project); + } else if (!getSelectedProject().hasDetails()) { + setMessage(Messages.JiraProjectPage_This_project_has_details_missing); } else { setErrorMessage(null); + setMessage(null); } getWizard().getContainer().updateButtons(); }