/******************************************************************************* * Copyright (c) 2007, 2008 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.ltk.ui.refactoring.resource; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.ui.model.BaseWorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.ui.model.WorkbenchViewerComparator; import org.eclipse.ltk.core.refactoring.RefactoringStatus; import org.eclipse.ltk.core.refactoring.participants.MoveRefactoring; import org.eclipse.ltk.internal.core.refactoring.Messages; import org.eclipse.ltk.internal.core.refactoring.resource.MoveResourcesProcessor; import org.eclipse.ltk.internal.ui.refactoring.RefactoringUIMessages; import org.eclipse.ltk.ui.refactoring.RefactoringWizard; import org.eclipse.ltk.ui.refactoring.UserInputWizardPage; /** * A wizard for the move resources refactoring. * * @since 3.4 */ public class MoveResourcesWizard extends RefactoringWizard { /** * Creates a {@link MoveResourcesWizard}. * * @param resources * the resources to move. The resources must exist. */ public MoveResourcesWizard(IResource[] resources) { super(new MoveRefactoring(new MoveResourcesProcessor(resources)), DIALOG_BASED_USER_INTERFACE); setDefaultPageTitle(RefactoringUIMessages.MoveResourcesWizard_page_title); setWindowTitle(RefactoringUIMessages.MoveResourcesWizard_window_title); } /* (non-Javadoc) * @see org.eclipse.ltk.ui.refactoring.RefactoringWizard#addUserInputPages() */ protected void addUserInputPages() { MoveResourcesProcessor processor= (MoveResourcesProcessor) getRefactoring().getAdapter(MoveResourcesProcessor.class); addPage(new MoveResourcesRefactoringConfigurationPage(processor)); } private static class MoveResourcesRefactoringConfigurationPage extends UserInputWizardPage { private final MoveResourcesProcessor fRefactoringProcessor; private TreeViewer fDestinationField; public MoveResourcesRefactoringConfigurationPage(MoveResourcesProcessor processor) { super("MoveResourcesRefactoringConfigurationPage"); //$NON-NLS-1$ fRefactoringProcessor= processor; } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) */ public void createControl(Composite parent) { initializeDialogUnits(parent); Composite composite= new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(2, false)); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); composite.setFont(parent.getFont()); Label label= new Label(composite, SWT.NONE); IResource[] resourcesToMove= fRefactoringProcessor.getResourcesToMove(); if (resourcesToMove.length == 1) { label.setText(Messages.format(RefactoringUIMessages.MoveResourcesWizard_description_single, resourcesToMove[0].getName())); } else { label.setText(Messages.format(RefactoringUIMessages.MoveResourcesWizard_description_multiple, new Integer(resourcesToMove.length))); } label.setLayoutData(new GridData()); fDestinationField= new TreeViewer(composite, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); GridData gd= new GridData(GridData.FILL, GridData.FILL, true, true, 2, 1); gd.widthHint= convertWidthInCharsToPixels(40); gd.heightHint= convertHeightInCharsToPixels(15); fDestinationField.getTree().setLayoutData(gd); fDestinationField.setLabelProvider(new WorkbenchLabelProvider()); fDestinationField.setContentProvider(new BaseWorkbenchContentProvider()); fDestinationField.setComparator(new WorkbenchViewerComparator()); fDestinationField.setInput(ResourcesPlugin.getWorkspace()); fDestinationField.addFilter(new ViewerFilter() { public boolean select(Viewer viewer, Object parentElement, Object element) { if (element instanceof IProject) { IProject project= (IProject) element; return project.isAccessible(); } else if (element instanceof IFolder) { return true; } return false; } }); fDestinationField.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { validatePage(); } }); if (resourcesToMove.length > 0) { fDestinationField.setSelection(new StructuredSelection(resourcesToMove[0].getParent())); } setPageComplete(false); setControl(composite); } public void setVisible(boolean visible) { if (visible) { fDestinationField.getTree().setFocus(); if (getErrorMessage() != null) { setErrorMessage(null); // no error messages until user interacts } } super.setVisible(visible); } private final void validatePage() { RefactoringStatus status; IStructuredSelection selection= (IStructuredSelection) fDestinationField.getSelection(); Object firstElement= selection.getFirstElement(); if (firstElement instanceof IContainer) { status= fRefactoringProcessor.validateDestination((IContainer) firstElement); } else { status= new RefactoringStatus(); status.addError(RefactoringUIMessages.MoveResourcesWizard_error_no_selection); } setPageComplete(status); } /* (non-Javadoc) * @see org.eclipse.ltk.ui.refactoring.UserInputWizardPage#performFinish() */ protected boolean performFinish() { initializeRefactoring(); storeSettings(); return super.performFinish(); } /* (non-Javadoc) * @see org.eclipse.ltk.ui.refactoring.UserInputWizardPage#getNextPage() */ public IWizardPage getNextPage() { initializeRefactoring(); storeSettings(); return super.getNextPage(); } private void storeSettings() { } private void initializeRefactoring() { IContainer container= (IContainer) ((IStructuredSelection) fDestinationField.getSelection()).getFirstElement(); fRefactoringProcessor.setDestination(container); } } }