/net.sf.eclipsefp.haskell.ui/src/net/sf/eclipsefp/haskell/ui/internal/refactoring/participants/RenameFolderParticipant.java
https://github.com/thiagoarrais/eclipsefp · Java · 95 lines · 70 code · 11 blank · 14 comment · 5 complexity · 9b4f7e0031fa160f980303d7eafa4b66 MD5 · raw file
- /**
- * (c) 2011, Alejandro Serrano
- * Released under the terms of the EPL.
- */
- package net.sf.eclipsefp.haskell.ui.internal.refactoring.participants;
- import java.util.ArrayList;
- import java.util.Set;
- import net.sf.eclipsefp.haskell.ui.internal.util.UITexts;
- import net.sf.eclipsefp.haskell.util.FileUtil;
- import org.eclipse.core.resources.IFile;
- import org.eclipse.core.resources.IFolder;
- import org.eclipse.core.resources.IResource;
- import org.eclipse.core.resources.IResourceVisitor;
- import org.eclipse.core.runtime.IPath;
- import org.eclipse.core.runtime.IProgressMonitor;
- import org.eclipse.core.runtime.OperationCanceledException;
- import org.eclipse.core.runtime.Status;
- import org.eclipse.ltk.core.refactoring.Change;
- import org.eclipse.ltk.core.refactoring.RefactoringStatus;
- import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
- import org.eclipse.ltk.core.refactoring.participants.RenameParticipant;
- /**
- * Manages the renaming of a Haskell source folder.
- * @author Alejandro Serrano
- *
- */
- public class RenameFolderParticipant extends RenameParticipant {
- IFolder folder;
- ArrayList<IFile> haskellFiles;
- public RenameFolderParticipant() {
- // Do nothing
- }
- @Override
- protected boolean initialize( final Object element ) {
- if( element instanceof IFolder ) {
- this.folder = (IFolder)element;
- // Precompute files to be changed
- this.haskellFiles = new ArrayList<IFile>();
- try {
- folder.accept( new IResourceVisitor() {
- public boolean visit( final IResource resource ) {
- if (resource instanceof IFile && FileUtil.hasHaskellExtension( resource )) {
- haskellFiles.add( (IFile )resource ); // Found a Haskell file
- }
- return true;
- }
- } );
- } catch (Exception e) {
- this.haskellFiles.clear();
- }
- return this.haskellFiles.size() > 0;
- }
- return false;
- }
- @Override
- public String getName() {
- return UITexts.renameFolderParticipant_title;
- }
- @Override
- public RefactoringStatus checkConditions( final IProgressMonitor pm,
- final CheckConditionsContext context ) throws OperationCanceledException {
- return RefactoringStatus.create( Status.OK_STATUS );
- }
- @Override
- public Change createPreChange( final IProgressMonitor pm ) throws OperationCanceledException {
- // Get arguments
- String newName = getArguments().getNewName();
- IPath oldPath = folder.getProjectRelativePath();
- IPath newPath = oldPath.removeLastSegments( 1 ).append( newName );
- // Check if it is one of the source folders
- Set<IPath> sourcePaths = Util.getPaths( folder.getProject() );
- if (sourcePaths.contains( oldPath )) {
- return ChangeCreator.createRenameMoveFolderCabalChange( folder.getProject(), oldPath, newPath );
- } else {
- // Create Haskell file change
- return ChangeCreator.createRenameMoveFolderChange( haskellFiles, folder.getProjectRelativePath(),
- newPath, getArguments().getUpdateReferences(), UITexts.renameFolderParticipant_title, UITexts.renameParticipant_title );
- }
- }
- @Override
- public Change createChange( final IProgressMonitor pm ) throws OperationCanceledException {
- return null;
- }
- }