KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > jdt > internal > corext > refactoring > reorg > ReadOnlyResourceFinder


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.reorg;
12
13 import org.eclipse.core.runtime.Assert;
14 import org.eclipse.core.runtime.CoreException;
15
16 import org.eclipse.core.resources.IContainer;
17 import org.eclipse.core.resources.IFile;
18 import org.eclipse.core.resources.IResource;
19
20 import org.eclipse.jdt.core.IClassFile;
21 import org.eclipse.jdt.core.IJavaElement;
22 import org.eclipse.jdt.core.IPackageFragment;
23 import org.eclipse.jdt.core.IPackageFragmentRoot;
24
25 import org.eclipse.jdt.internal.corext.refactoring.RefactoringCoreMessages;
26 import org.eclipse.jdt.internal.corext.util.Resources;
27
28
29 class ReadOnlyResourceFinder{
30     private ReadOnlyResourceFinder(){
31     }
32
33     static boolean confirmDeleteOfReadOnlyElements(IJavaElement[] javaElements, IResource[] resources, IReorgQueries queries) throws CoreException {
34         String JavaDoc queryTitle= RefactoringCoreMessages.ReadOnlyResourceFinder_0;
35         String JavaDoc question= RefactoringCoreMessages.ReadOnlyResourceFinder_1;
36         return ReadOnlyResourceFinder.confirmOperationOnReadOnlyElements(queryTitle, question, javaElements, resources, queries);
37     }
38
39     static boolean confirmMoveOfReadOnlyElements(IJavaElement[] javaElements, IResource[] resources, IReorgQueries queries) throws CoreException {
40         String JavaDoc queryTitle= RefactoringCoreMessages.ReadOnlyResourceFinder_2;
41         String JavaDoc question= RefactoringCoreMessages.ReadOnlyResourceFinder_3;
42         return ReadOnlyResourceFinder.confirmOperationOnReadOnlyElements(queryTitle, question, javaElements, resources, queries);
43     }
44
45     private static boolean confirmOperationOnReadOnlyElements(String JavaDoc queryTitle, String JavaDoc question, IJavaElement[] javaElements, IResource[] resources, IReorgQueries queries) throws CoreException {
46         boolean hasReadOnlyResources= ReadOnlyResourceFinder.hasReadOnlyResourcesAndSubResources(javaElements, resources);
47         if (hasReadOnlyResources) {
48             IConfirmQuery query= queries.createYesNoQuery(queryTitle, false, IReorgQueries.CONFIRM_READ_ONLY_ELEMENTS);
49             return query.confirm(question);
50         }
51         return true;
52     }
53
54     private static boolean hasReadOnlyResourcesAndSubResources(IJavaElement[] javaElements, IResource[] resources) throws CoreException {
55         return (hasReadOnlyResourcesAndSubResources(resources)||
56                   hasReadOnlyResourcesAndSubResources(javaElements));
57     }
58
59     private static boolean hasReadOnlyResourcesAndSubResources(IJavaElement[] javaElements) throws CoreException {
60         for (int i= 0; i < javaElements.length; i++) {
61             if (hasReadOnlyResourcesAndSubResources(javaElements[i]))
62                 return true;
63         }
64         return false;
65     }
66
67     private static boolean hasReadOnlyResourcesAndSubResources(IJavaElement javaElement) throws CoreException {
68         switch(javaElement.getElementType()){
69             case IJavaElement.CLASS_FILE:
70                 //if this assert fails, it means that a precondition is missing
71
Assert.isTrue(((IClassFile)javaElement).getResource() instanceof IFile);
72                 //fall thru
73
case IJavaElement.COMPILATION_UNIT:
74                 IResource resource= ReorgUtils.getResource(javaElement);
75                 return (resource != null && Resources.isReadOnly(resource));
76             case IJavaElement.PACKAGE_FRAGMENT:
77                 IResource packResource= ReorgUtils.getResource(javaElement);
78                 if (packResource == null)
79                     return false;
80                 IPackageFragment pack= (IPackageFragment)javaElement;
81                 if (Resources.isReadOnly(packResource))
82                     return true;
83                 Object JavaDoc[] nonJava= pack.getNonJavaResources();
84                 for (int i= 0; i < nonJava.length; i++) {
85                     Object JavaDoc object= nonJava[i];
86                     if (object instanceof IResource && hasReadOnlyResourcesAndSubResources((IResource)object))
87                         return true;
88                 }
89                 return hasReadOnlyResourcesAndSubResources(pack.getChildren());
90             case IJavaElement.PACKAGE_FRAGMENT_ROOT:
91                 IPackageFragmentRoot root= (IPackageFragmentRoot) javaElement;
92                 if (root.isArchive())
93                     return false;
94                 IResource pfrResource= ReorgUtils.getResource(javaElement);
95                 if (pfrResource == null)
96                     return false;
97                 if (Resources.isReadOnly(pfrResource))
98                     return true;
99                 Object JavaDoc[] nonJava1= root.getNonJavaResources();
100                 for (int i= 0; i < nonJava1.length; i++) {
101                     Object JavaDoc object= nonJava1[i];
102                     if (object instanceof IResource && hasReadOnlyResourcesAndSubResources((IResource)object))
103                         return true;
104                 }
105                 return hasReadOnlyResourcesAndSubResources(root.getChildren());
106
107             case IJavaElement.FIELD:
108             case IJavaElement.IMPORT_CONTAINER:
109             case IJavaElement.IMPORT_DECLARATION:
110             case IJavaElement.INITIALIZER:
111             case IJavaElement.METHOD:
112             case IJavaElement.PACKAGE_DECLARATION:
113             case IJavaElement.TYPE:
114                 return false;
115             default:
116                 Assert.isTrue(false);//not handled here
117
return false;
118         }
119     }
120
121     private static boolean hasReadOnlyResourcesAndSubResources(IResource[] resources) throws CoreException {
122         for (int i= 0; i < resources.length; i++) {
123             if (hasReadOnlyResourcesAndSubResources(resources[i]))
124                 return true;
125         }
126         return false;
127     }
128
129     private static boolean hasReadOnlyResourcesAndSubResources(IResource resource) throws CoreException {
130         if (resource.isLinked()) //we don't want to count these because we never actually delete linked resources
131
return false;
132         if (Resources.isReadOnly(resource))
133             return true;
134         if (resource instanceof IContainer)
135             return hasReadOnlyResourcesAndSubResources(((IContainer)resource).members());
136         return false;
137     }
138 }
139
Popular Tags