1 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 queryTitle= RefactoringCoreMessages.ReadOnlyResourceFinder_0; 35 String 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 queryTitle= RefactoringCoreMessages.ReadOnlyResourceFinder_2; 41 String question= RefactoringCoreMessages.ReadOnlyResourceFinder_3; 42 return ReadOnlyResourceFinder.confirmOperationOnReadOnlyElements(queryTitle, question, javaElements, resources, queries); 43 } 44 45 private static boolean confirmOperationOnReadOnlyElements(String queryTitle, String 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 Assert.isTrue(((IClassFile)javaElement).getResource() instanceof IFile); 72 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 [] nonJava= pack.getNonJavaResources(); 84 for (int i= 0; i < nonJava.length; i++) { 85 Object 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 [] nonJava1= root.getNonJavaResources(); 100 for (int i= 0; i < nonJava1.length; i++) { 101 Object 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); 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()) 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 |