KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > jdt > internal > corext > refactoring > nls > changes > DeleteFileChange


1 /*******************************************************************************
2  * Copyright (c) 2000, 2006 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.jdt.internal.corext.refactoring.nls.changes;
12 import java.io.BufferedReader JavaDoc;
13 import java.io.IOException JavaDoc;
14 import java.io.InputStream JavaDoc;
15 import java.io.InputStreamReader JavaDoc;
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 JavaDoc fSource;
37     
38     public DeleteFileChange(IFile file){
39         Assert.isNotNull(file, "file"); //$NON-NLS-1$
40
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 JavaDoc getSource(IFile file) throws CoreException {
64         String JavaDoc encoding= null;
65         try {
66             encoding= file.getCharset();
67         } catch (CoreException ex) {
68             // fall through. Take default encoding.
69
}
70         
71         StringBuffer JavaDoc sb= new StringBuffer JavaDoc();
72         BufferedReader JavaDoc br= null;
73         InputStream JavaDoc in= null;
74         try {
75             in= file.getContents();
76             if (encoding != null)
77                 br= new BufferedReader JavaDoc(new InputStreamReader JavaDoc(in, encoding));
78             else
79                 br= new BufferedReader JavaDoc(new InputStreamReader JavaDoc(in));
80             int read= 0;
81             while ((read= br.read()) != -1)
82                 sb.append((char) read);
83         } catch (IOException JavaDoc e){
84             throw new JavaModelException(e, IJavaModelStatusConstants.IO_EXCEPTION);
85         } finally {
86             try{
87                 IOCloser.rethrows(br, in);
88             } catch (IOException JavaDoc 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 JavaDoc source) {
96         String JavaDoc 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 JavaDoc getName() {
106         return NLSChangesMessages.deleteFile_Delete_File;
107     }
108
109     public Object JavaDoc getModifiedElement() {
110         return ResourcesPlugin.getWorkspace().getRoot().getFile(fPath);
111     }
112 }
113
114
Popular Tags