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