// Copyright (c) 2003-2005 by Leif Frenzel - see http://leiffrenzel.de package net.sf.eclipsefp.haskell.core.builder; import net.sf.eclipsefp.haskell.buildwrapper.BWFacade; import net.sf.eclipsefp.haskell.core.internal.util.CoreTexts; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceProxy; import org.eclipse.core.resources.IResourceProxyVisitor; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; /** <p>Operation for cleaning output and binary folders of a Haskell * project.</p> * * @author Leif Frenzel */ class CleanOutFoldersOperation implements IWorkspaceRunnable { private static IResourceProxyVisitor folderCleaner = new FolderCleaner(); private final IProject project; CleanOutFoldersOperation( final IProject project ) { this.project = project; } @Override public void run( final IProgressMonitor mon ) throws CoreException { mon.beginTask( CoreTexts.cleanOutFoldersOperation_cleaning, 12 ); try { //deleteExe( mon ); // (3) shrubOutFolder( mon ); // (12) } finally { mon.done(); } } // helping methods ////////////////// private void shrubOutFolder( final IProgressMonitor mon ) throws CoreException { mon.subTask( CoreTexts.cleanOutFoldersOperation_shrubbingOut ); IContainer outFolder = project.getFolder( BWFacade.DIST_FOLDER ); //ResourceUtil.getOutFolder( project ); if( outFolder != null && !outFolder.equals( project ) ) { outFolder.accept( folderCleaner, IContainer.INCLUDE_PHANTOMS ); } mon.worked( 12 ); } // private void deleteExe( final IProgressMonitor mon ) throws CoreException { // mon.subTask( CoreTexts.cleanOutFoldersOperation_removingExes ); // IFile[] files = ResourceUtil.getProjectExecutables( project ); // for( IFile file: files ) { // if( file != null && file.isAccessible() ) { // file.delete( true, new SubProgressMonitor( mon, 3 ) ); // } // } // } // inner classes //////////////// private static class FolderCleaner implements IResourceProxyVisitor { @Override public boolean visit( final IResourceProxy proxy ) throws CoreException { if( proxy.getType() == IResource.FILE ) { IResource resource = proxy.requestResource(); // TODO need more general approach here String name = resource.getName(); if( !name.equals( ".project" ) ) { //$NON-NLS-1$ resource.delete( IResource.FORCE, null ); } } return true; } } }