1 11 package org.eclipse.ltk.core.refactoring; 12 13 import org.eclipse.core.runtime.Assert; 14 import org.eclipse.core.runtime.CoreException; 15 import org.eclipse.core.runtime.IProgressMonitor; 16 import org.eclipse.core.runtime.SubProgressMonitor; 17 18 import org.eclipse.core.resources.IWorkspaceRunnable; 19 import org.eclipse.core.resources.ResourcesPlugin; 20 21 import org.eclipse.ltk.core.refactoring.history.IRefactoringHistoryService; 22 import org.eclipse.ltk.core.refactoring.history.RefactoringHistory; 23 24 import org.eclipse.ltk.internal.core.refactoring.RefactoringCoreMessages; 25 import org.eclipse.ltk.internal.core.refactoring.history.RefactoringHistoryService; 26 27 46 public class PerformRefactoringHistoryOperation implements IWorkspaceRunnable { 47 48 49 private RefactoringStatus fExecutionStatus= new RefactoringStatus(); 50 51 52 private final RefactoringHistory fRefactoringHistory; 53 54 60 public PerformRefactoringHistoryOperation(final RefactoringHistory history) { 61 Assert.isNotNull(history); 62 fRefactoringHistory= history; 63 } 64 65 77 protected RefactoringStatus aboutToPerformRefactoring(final Refactoring refactoring, final RefactoringDescriptor descriptor, final IProgressMonitor monitor) { 78 Assert.isNotNull(refactoring); 79 Assert.isNotNull(descriptor); 80 return new RefactoringStatus(); 81 } 82 83 101 protected Refactoring createRefactoring(final RefactoringDescriptor descriptor, final RefactoringStatus status) throws CoreException { 102 Assert.isNotNull(descriptor); 103 return descriptor.createRefactoring(status); 104 } 105 106 111 public final RefactoringStatus getExecutionStatus() { 112 return fExecutionStatus; 113 } 114 115 124 protected void refactoringPerformed(final Refactoring refactoring, final IProgressMonitor monitor) { 125 Assert.isNotNull(refactoring); 126 Assert.isNotNull(monitor); 127 128 } 130 131 134 public void run(final IProgressMonitor monitor) throws CoreException { 135 fExecutionStatus= new RefactoringStatus(); 136 final RefactoringDescriptorProxy[] proxies= fRefactoringHistory.getDescriptors(); 137 monitor.beginTask(RefactoringCoreMessages.PerformRefactoringHistoryOperation_perform_refactorings, 160 * proxies.length); 138 final IRefactoringHistoryService service= RefactoringHistoryService.getInstance(); 139 try { 140 service.connect(); 141 for (int index= 0; index < proxies.length; index++) { 142 final RefactoringDescriptor descriptor= proxies[index].requestDescriptor(new SubProgressMonitor(monitor, 10, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL)); 143 if (descriptor != null) { 144 Refactoring refactoring= null; 145 RefactoringStatus status= new RefactoringStatus(); 146 try { 147 try { 148 refactoring= createRefactoring(descriptor, status); 149 } catch (CoreException exception) { 150 status.merge(RefactoringStatus.create(exception.getStatus())); 151 } 152 if (refactoring != null && !status.hasFatalError()) { 153 final PerformRefactoringOperation operation= new PerformRefactoringOperation(refactoring, CheckConditionsOperation.ALL_CONDITIONS); 154 try { 155 status.merge(aboutToPerformRefactoring(refactoring, descriptor, new SubProgressMonitor(monitor, 50, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL))); 156 if (!status.hasFatalError()) { 157 ResourcesPlugin.getWorkspace().run(operation, new SubProgressMonitor(monitor, 90, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL)); 158 status.merge(operation.getConditionStatus()); 159 if (!status.hasFatalError()) 160 status.merge(operation.getValidationStatus()); 161 } 162 } finally { 163 refactoringPerformed(refactoring, new SubProgressMonitor(monitor, 10, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL)); 164 } 165 } 166 } finally { 167 fExecutionStatus.merge(status); 168 } 169 } 170 } 171 } finally { 172 service.disconnect(); 173 monitor.done(); 174 } 175 } 176 } 177 | Popular Tags |