| /******************************************************************************* |
| * Copyright (c) 2010 IBM Corporation 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: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.egit.internal.relengtools; |
| |
| import java.lang.reflect.InvocationTargetException; |
| import java.util.ArrayList; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.SubProgressMonitor; |
| import org.eclipse.egit.core.op.TagOperation; |
| import org.eclipse.egit.core.project.RepositoryMapping; |
| import org.eclipse.jface.dialogs.Dialog; |
| import org.eclipse.jface.dialogs.DialogSettings; |
| import org.eclipse.jface.dialogs.IDialogSettings; |
| import org.eclipse.jface.operation.IRunnableWithProgress; |
| import org.eclipse.jface.window.Window; |
| import org.eclipse.jface.wizard.IWizardPage; |
| import org.eclipse.jface.wizard.Wizard; |
| import org.eclipse.jface.wizard.WizardDialog; |
| import org.eclipse.jgit.lib.Constants; |
| import org.eclipse.jgit.lib.PersonIdent; |
| import org.eclipse.jgit.lib.Repository; |
| import org.eclipse.jgit.lib.TagBuilder; |
| import org.eclipse.jgit.revwalk.RevObject; |
| import org.eclipse.jgit.revwalk.RevWalk; |
| import org.eclipse.swt.widgets.Shell; |
| |
| public class ReleaseWizard extends Wizard { |
| |
| private Dialog parentDialog; |
| |
| private ArrayList<IProject> preSelectedProjects; |
| |
| private final IDialogSettings section = new DialogSettings("Section"); |
| |
| private MapProject mapProject; |
| |
| private MapProjectSelectionPage mapSelectionPage; |
| |
| private ProjectSelectionPage projectSelectionPage; |
| |
| private IProject[] selectedProjects; |
| |
| private TagPage tagPage; |
| |
| private BuildNotesPage buildNotesPage; |
| |
| private MapFileComparePage mapComparePage; |
| |
| @Override |
| public boolean performFinish() { |
| if (!isProjectSelected()) |
| return false; |
| try { |
| getContainer().run(true, true, new IRunnableWithProgress() { |
| @Override |
| public void run(IProgressMonitor monitor) |
| throws InvocationTargetException, InterruptedException { |
| |
| monitor.beginTask("Processing", |
| 2 * (1 + selectedProjects.length)); |
| monitor.worked(1); |
| for (final IProject project : selectedProjects) { |
| try { |
| tagProject(project, monitor); |
| monitor.worked(1); |
| } catch (final Exception e) { |
| throw new InvocationTargetException(e); |
| } |
| } |
| monitor.beginTask("Processing", 1 + selectedProjects.length); |
| monitor.worked(1); |
| final String tag = tagPage.getTagString(); |
| System.out.println("Processing tag: " + tag); |
| for (final IProject proj : selectedProjects) { |
| monitor.worked(1); |
| System.out.println("processing: " + proj); |
| try { |
| mapProject.updateFile(proj, tag); |
| } catch (final CoreException e) { |
| e.printStackTrace(); |
| } |
| } |
| monitor.done(); |
| } |
| }); |
| return true; |
| } catch (final InvocationTargetException e) { |
| // TODO Auto-generated catch block |
| e.printStackTrace(); |
| } catch (final InterruptedException e) { |
| // TODO Auto-generated catch block |
| e.printStackTrace(); |
| } |
| return false; |
| } |
| |
| private void tagProject(IProject project, IProgressMonitor monitor) |
| throws Exception { |
| monitor = new SubProgressMonitor(monitor, 1); |
| monitor.beginTask("Tagging " + project.getName(), 1); |
| |
| final boolean shouldMoveTag = tagPage.isMoveButtonSelected(); |
| final RepositoryMapping rm = RepositoryMapping.getMapping(project); |
| final Repository repository = rm.getRepository(); |
| |
| final RevWalk rw = new RevWalk(repository); |
| final RevObject target = rw |
| .parseAny(repository.resolve(Constants.HEAD)); |
| |
| final PersonIdent personIdent = new PersonIdent(repository); |
| final String tagName = tagPage.getTagString(); |
| final TagBuilder tag = new TagBuilder(); |
| tag.setTag(tagName); |
| tag.setTagger(personIdent); |
| tag.setObjectId(target); |
| |
| final TagOperation operation = new TagOperation(repository, tag, |
| shouldMoveTag); |
| |
| operation.execute(monitor); |
| monitor.done(); |
| } |
| |
| private boolean isProjectSelected() { |
| if (selectedProjects == null || selectedProjects.length == 0) { |
| return false; |
| } |
| return true; |
| } |
| |
| public void setPreSelection(ArrayList<IProject> selection) { |
| preSelectedProjects = selection; |
| } |
| |
| public boolean execute(Shell shell) { |
| setNeedsProgressMonitor(true); |
| final WizardDialog dialog = new WizardDialog(shell, this); |
| setParentDialog(dialog); |
| return (dialog.open() == Window.OK); |
| } |
| |
| public void setParentDialog(Dialog p) { |
| this.parentDialog = p; |
| } |
| |
| @Override |
| public void addPages() { |
| addMapSelectionPage(); |
| } |
| |
| private void addMapSelectionPage() { |
| mapSelectionPage = new MapProjectSelectionPage( |
| "MapProjectSelectionPage", "Map Project Selection", section, |
| null); |
| mapSelectionPage.setDescription("Map Project Selection"); //$NON-NLS-1$ |
| addPage(mapSelectionPage); |
| |
| projectSelectionPage = new ProjectSelectionPage("ProjectSelectionPage", //$NON-NLS-1$ |
| Messages.getString("ReleaseWizard.6"), //$NON-NLS-1$ |
| section, null); |
| projectSelectionPage.setDescription(Messages |
| .getString("ReleaseWizard.7")); //$NON-NLS-1$ |
| addPage(projectSelectionPage); |
| |
| tagPage = new TagPage("TagPage", //$NON-NLS-1$ |
| Messages.getString("ReleaseWizard.9"), //$NON-NLS-1$ |
| section, null); |
| tagPage.setDescription(Messages.getString("ReleaseWizard.10")); //$NON-NLS-1$ |
| addPage(tagPage); |
| |
| buildNotesPage = new BuildNotesPage("Build Notes Page", //$NON-NLS-1$ |
| Messages.getString("ReleaseWizard.1"), //$NON-NLS-1$ |
| section, null); |
| buildNotesPage.setDescription(Messages.getString("ReleaseWizard.0")); //$NON-NLS-1$ |
| addPage(buildNotesPage); |
| |
| mapComparePage = new MapFileComparePage("MapComparePage", //$NON-NLS-1$ |
| Messages.getString("ReleaseWizard.15"), //$NON-NLS-1$ |
| null); |
| mapComparePage.setDescription(Messages.getString("ReleaseWizard.16")); //$NON-NLS-1$ |
| addPage(mapComparePage); |
| } |
| |
| @Override |
| public IWizardPage getNextPage(IWizardPage page) { |
| if (page == mapSelectionPage) { |
| // if (selectedProjects == null && preSelectedProjectsArr != null) { |
| // projectSelectionPage.setSelection(preSelectedProjectsARrr); |
| // selectedProjects= preSelectedProjects; |
| // } |
| return projectSelectionPage; |
| } |
| if (page == projectSelectionPage) { |
| final IProject[] projects = projectSelectionPage |
| .getCheckedProjects(); |
| if (projects != null && projects.length > 0) { |
| selectedProjects = projects; |
| } |
| |
| if (projectSelectionPage.isCompareButtonChecked()) { |
| return buildNotesPage; |
| } else |
| return tagPage; |
| } |
| if (page == buildNotesPage) { |
| return tagPage; |
| } |
| |
| if (page == tagPage) { |
| if (tagPage.compareButtonSelected()) { |
| mapComparePage.setTag(tagPage.getTagString()); |
| return mapComparePage; |
| } |
| // if (tagPage.commitButtonSelected()) |
| // return commentPage; |
| } |
| return null; |
| } |
| |
| public MapProject getMapProject() { |
| return mapProject; |
| } |
| |
| public void broadcastMapProjectChange(MapProject m) { |
| mapProject = m; |
| projectSelectionPage.updateMapProject(m); |
| // projectComparePage.updateMapProject(m); |
| mapComparePage.updateMapProject(m); |
| } |
| |
| public IProject[] getPreSelectedProjects() { |
| return preSelectedProjects.toArray(new IProject[preSelectedProjects |
| .size()]); |
| } |
| |
| // the update will happen when (1)from project selection page to compare |
| // project page or (2)from |
| // project selection page to Enter Tag page. It calls shouldRemove() to |
| // determine the projects to keep |
| public void updateSelectedProject() { |
| selectedProjects = projectSelectionPage.getCheckedProjects(); |
| // selectedProjects = performPrompting(selectedProjects); |
| projectSelectionPage.setSelection(selectedProjects); |
| } |
| |
| public void setSelectedProjects(IResource[] projects) { |
| if (projects == null) |
| selectedProjects = null; |
| else { |
| selectedProjects = new IProject[projects.length]; |
| for (int i = 0; i < projects.length; i++) { |
| selectedProjects[i] = (IProject) projects[i]; |
| } |
| } |
| } |
| |
| protected ProjectSelectionPage getProjectSelectionPage() { |
| return projectSelectionPage; |
| } |
| |
| public IProject[] getSelectedProjects() { |
| return selectedProjects; |
| } |
| } |