1 11 package org.eclipse.jdt.internal.corext.refactoring.nls.changes; 12 import java.io.BufferedReader ; 13 import java.io.IOException ; 14 import java.io.InputStream ; 15 import java.io.InputStreamReader ; 16 17 import org.eclipse.core.runtime.Assert; 18 import org.eclipse.core.runtime.CoreException; 19 import org.eclipse.core.runtime.IPath; 20 import org.eclipse.core.runtime.IProgressMonitor; 21 22 import org.eclipse.core.resources.IFile; 23 import org.eclipse.core.resources.ResourcesPlugin; 24 25 import org.eclipse.jdt.core.IJavaModelStatusConstants; 26 import org.eclipse.jdt.core.JavaModelException; 27 28 import org.eclipse.jdt.internal.corext.refactoring.base.JDTChange; 29 import org.eclipse.jdt.internal.corext.util.IOCloser; 30 import org.eclipse.ltk.core.refactoring.Change; 31 import org.eclipse.ltk.core.refactoring.RefactoringStatus; 32 33 public class DeleteFileChange extends JDTChange { 34 35 private IPath fPath; 36 private String fSource; 37 38 public DeleteFileChange(IFile file){ 39 Assert.isNotNull(file, "file"); fPath= file.getFullPath().removeFirstSegments(ResourcesPlugin.getWorkspace().getRoot().getFullPath().segmentCount()); 41 } 42 43 public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException { 44 return isValid(pm, READ_ONLY | DIRTY); 45 } 46 47 public Change perform(IProgressMonitor pm) throws CoreException { 48 try { 49 pm.beginTask(NLSChangesMessages.deleteFile_deleting_resource, 1); 50 IFile file= ResourcesPlugin.getWorkspace().getRoot().getFile(fPath); 51 Assert.isNotNull(file); 52 Assert.isTrue(file.exists()); 53 Assert.isTrue(!file.isReadOnly()); 54 fSource= getSource(file); 55 CreateFileChange undo= createUndoChange(file, fPath, file.getModificationStamp(), fSource); 56 file.delete(true, true, pm); 57 return undo; 58 } finally { 59 pm.done(); 60 } 61 } 62 63 private String getSource(IFile file) throws CoreException { 64 String encoding= null; 65 try { 66 encoding= file.getCharset(); 67 } catch (CoreException ex) { 68 } 70 71 StringBuffer sb= new StringBuffer (); 72 BufferedReader br= null; 73 InputStream in= null; 74 try { 75 in= file.getContents(); 76 if (encoding != null) 77 br= new BufferedReader (new InputStreamReader (in, encoding)); 78 else 79 br= new BufferedReader (new InputStreamReader (in)); 80 int read= 0; 81 while ((read= br.read()) != -1) 82 sb.append((char) read); 83 } catch (IOException e){ 84 throw new JavaModelException(e, IJavaModelStatusConstants.IO_EXCEPTION); 85 } finally { 86 try{ 87 IOCloser.rethrows(br, in); 88 } catch (IOException e){ 89 throw new JavaModelException(e, IJavaModelStatusConstants.IO_EXCEPTION); 90 } 91 } 92 return sb.toString(); 93 } 94 95 private static CreateFileChange createUndoChange(IFile file, IPath path, long stampToRestore, String source) { 96 String encoding; 97 try { 98 encoding= file.getCharset(false); 99 } catch (CoreException e) { 100 encoding= null; 101 } 102 return new CreateFileChange(path, source, encoding, stampToRestore); 103 } 104 105 public String getName() { 106 return NLSChangesMessages.deleteFile_Delete_File; 107 } 108 109 public Object getModifiedElement() { 110 return ResourcesPlugin.getWorkspace().getRoot().getFile(fPath); 111 } 112 } 113 114 | Popular Tags |