/******************************************************************************* * Copyright (c) 2007, 2015 Zend Technologies 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: * Zend Technologies - initial API and implementation *******************************************************************************/ package org.eclipse.php.refactoring.ui.wizard; import java.lang.reflect.Array; import org.eclipse.core.resources.*; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.viewers.*; import org.eclipse.ltk.core.refactoring.RefactoringStatus; import org.eclipse.ltk.ui.refactoring.UserInputWizardPage; import org.eclipse.php.internal.core.Logger; import org.eclipse.php.refactoring.core.move.PHPMoveProcessor; import org.eclipse.php.refactoring.ui.PHPRefactoringUIMessages; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.model.BaseWorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.ui.model.WorkbenchViewerComparator; /** * Move wizard page. Responsible for the creation of the wizard content. * * @author Eden K., 2007 * */ public class RefactoringMoveWizardPage extends UserInputWizardPage { private TreeViewer fViewer; private Button fReferenceCheckbox; public RefactoringMoveWizardPage() { super(PHPRefactoringUIMessages.getString("RefactoringMoveWizardPage.0")); //$NON-NLS-1$ } /* * (non-Javadoc) * * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt. * widgets .Composite) */ public void createControl(Composite parent) { initializeDialogUnits(parent); Composite result = new Composite(parent, SWT.NONE); setControl(result); result.setLayout(new GridLayout()); IResource[] initialSelections = new IResource[] { getPHPMoveProcessor().getDestination() }; verifyDestination(initialSelections, true); addLabel(result); fViewer = createViewer(result); IResource target = initialSelections[0]; if (target instanceof IFile) { target = target.getParent(); } if (target != null) { fViewer.setSelection(new StructuredSelection(target), true); } fViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { viewerSelectionChanged(event); } }); addUpdateReferenceComponent(result); // TODO add fully qualified names checkbox (? enhancement) Dialog.applyDialogFont(result); } private Control addLabel(Composite parent) { Label label = new Label(parent, SWT.NONE); String text = PHPRefactoringUIMessages.getString("RefactoringMoveWizardPage.1"); //$NON-NLS-1$ label.setText(text); label.setLayoutData(new GridData(SWT.BEGINNING, SWT.END, false, false)); return label; } private TreeViewer createViewer(Composite parent) { TreeViewer treeViewer = new TreeViewer(parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); GridData gd = new GridData(GridData.FILL_BOTH); gd.widthHint = convertWidthInCharsToPixels(40); gd.heightHint = convertHeightInCharsToPixels(15); treeViewer.getTree().setLayoutData(gd); treeViewer.getTree().setLayoutData(gd); treeViewer.setLabelProvider(new WorkbenchLabelProvider()); treeViewer.setContentProvider(new BaseWorkbenchContentProvider()); treeViewer.setComparator(new WorkbenchViewerComparator()); treeViewer.setInput(ResourcesPlugin.getWorkspace()); treeViewer.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; } }); // treeViewer.addSelectionChangedListener(new // ISelectionChangedListener() { // public void selectionChanged(SelectionChangedEvent event) { // validatePage(); // } // }); // if (resourcesToMove.length > 0) { // fDestinationField.setSelection(new // StructuredSelection(resourcesToMove[0].getParent())); // } // treeViewer.setLabelProvider(new // PHPElementLabelProvider(PHPElementLabelProvider.SHOW_SMALL_ICONS)); // treeViewer.setContentProvider(new ContainerContentProvider()); // treeViewer.setSorter(new PHPElementSorter()); // treeViewer.setInput(PHPWorkspaceModelManager.getInstance()); return treeViewer; } public TreeViewer getTreeViewer() { return fViewer; } private void viewerSelectionChanged(SelectionChangedEvent event) { ISelection selection = event.getSelection(); if (!(selection instanceof IStructuredSelection)) return; IStructuredSelection ss = (IStructuredSelection) selection; verifyDestination(ss.getFirstElement(), false); } private final void verifyDestination(Object selected, boolean initialVerification) { try { RefactoringStatus status = verifyDestination(selected); if (initialVerification) setPageComplete(status.isOK()); else setPageComplete(status); } catch (Exception e) { Logger.logException(e); setPageComplete(false); } } protected RefactoringStatus verifyDestination(Object selected) throws Exception { PHPMoveProcessor processor = getPHPMoveProcessor(); final RefactoringStatus refactoringStatus; if (selected.getClass().isArray() && Array.getLength(selected) == 1) { try { selected = Array.get(selected, 0); } catch (Exception e) { } } if (selected instanceof IContainer) refactoringStatus = processor.setDestination((IContainer) selected); else refactoringStatus = RefactoringStatus .createFatalErrorStatus(PHPRefactoringUIMessages.getString("RefactoringMoveWizardPage.2")); //$NON-NLS-1$ return refactoringStatus; } private PHPMoveProcessor getPHPMoveProcessor() { return (PHPMoveProcessor) getRefactoring().getAdapter(PHPMoveProcessor.class); } private void addUpdateReferenceComponent(Composite result) { final PHPMoveProcessor processor = getPHPMoveProcessor(); fReferenceCheckbox = new Button(result, SWT.CHECK); fReferenceCheckbox.setText(PHPRefactoringUIMessages.getString("RefactoringMoveWizardPage.3")); //$NON-NLS-1$ fReferenceCheckbox.setSelection(processor.getUpdateReferences()); fReferenceCheckbox.setEnabled(true); fReferenceCheckbox.setSelection(true); processor.setUpdateReferences(true); getRefactoringWizard().setForcePreviewReview(true); fReferenceCheckbox.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { processor.setUpdateReferences(((Button) e.widget).getSelection()); getRefactoringWizard().setForcePreviewReview(processor.getUpdateReferences()); } }); } }