use of org.eclipse.ui.ide.undo.ResourceDescription in project che by eclipse.
the class DeletePackageFragmentRootChange method doDelete.
@Override
protected Change doDelete(IProgressMonitor pm) throws CoreException {
if (!confirmDeleteIfReferenced())
return new NullChange();
int resourceUpdateFlags = IResource.KEEP_HISTORY;
int jCoreUpdateFlags = IPackageFragmentRoot.ORIGINATING_PROJECT_CLASSPATH | IPackageFragmentRoot.OTHER_REFERRING_PROJECTS_CLASSPATH;
//$NON-NLS-1$
pm.beginTask("", 2);
IPackageFragmentRoot root = getRoot();
IResource rootResource = root.getResource();
CompositeChange result = new CompositeChange(getName());
ResourceDescription rootDescription = ResourceDescription.fromResource(rootResource);
IJavaProject[] referencingProjects = JavaElementUtil.getReferencingProjects(root);
HashMap<IFile, String> classpathFilesContents = new HashMap<IFile, String>();
for (int i = 0; i < referencingProjects.length; i++) {
IJavaProject javaProject = referencingProjects[i];
//$NON-NLS-1$
IFile classpathFile = javaProject.getProject().getFile(".classpath");
if (classpathFile.exists()) {
classpathFilesContents.put(classpathFile, getFileContents(classpathFile));
}
}
root.delete(resourceUpdateFlags, jCoreUpdateFlags, new SubProgressMonitor(pm, 1));
rootDescription.recordStateFromHistory(rootResource, new SubProgressMonitor(pm, 1));
for (Iterator<Entry<IFile, String>> iterator = classpathFilesContents.entrySet().iterator(); iterator.hasNext(); ) {
Entry<IFile, String> entry = iterator.next();
IFile file = entry.getKey();
String contents = entry.getValue();
//Restore time stamps? This should probably be some sort of UndoTextFileChange.
TextFileChange classpathUndo = new TextFileChange(Messages.format(RefactoringCoreMessages.DeletePackageFragmentRootChange_restore_file, BasicElementLabels.getPathLabel(file.getFullPath(), true)), file);
classpathUndo.setEdit(new ReplaceEdit(0, getFileLength(file), contents));
result.add(classpathUndo);
}
result.add(new UndoDeleteResourceChange(rootDescription));
pm.done();
return result;
}
use of org.eclipse.ui.ide.undo.ResourceDescription in project che by eclipse.
the class DeleteSourceManipulationChange method doDelete.
/*
* @see DeleteChange#doDelete(IProgressMonitor)
*/
@Override
protected Change doDelete(IProgressMonitor pm) throws CoreException {
ISourceManipulation element = getSourceManipulation();
// since the primary working copy still exists.
if (element instanceof ICompilationUnit) {
//$NON-NLS-1$
pm.beginTask("", 2);
ICompilationUnit unit = (ICompilationUnit) element;
saveCUnitIfNeeded(unit, new SubProgressMonitor(pm, 1));
IResource resource = unit.getResource();
ResourceDescription resourceDescription = ResourceDescription.fromResource(resource);
element.delete(false, new SubProgressMonitor(pm, 1));
resourceDescription.recordStateFromHistory(resource, new SubProgressMonitor(pm, 1));
return new UndoDeleteResourceChange(resourceDescription);
} else if (element instanceof IPackageFragment) {
ICompilationUnit[] units = ((IPackageFragment) element).getCompilationUnits();
//$NON-NLS-1$
pm.beginTask("", units.length + 1);
for (int i = 0; i < units.length; i++) {
// fix https://bugs.eclipse.org/bugs/show_bug.cgi?id=66835
saveCUnitIfNeeded(units[i], new SubProgressMonitor(pm, 1));
}
element.delete(false, new SubProgressMonitor(pm, 1));
// caveat: real undo implemented by UndoablePackageDeleteChange
return new NullChange();
} else {
element.delete(false, pm);
//should not happen
return null;
}
}
use of org.eclipse.ui.ide.undo.ResourceDescription in project che by eclipse.
the class UndoablePackageDeleteChange method perform.
@Override
public Change perform(IProgressMonitor pm) throws CoreException {
int count = fPackageDeletes.size();
//$NON-NLS-1$
pm.beginTask("", count * 3);
ResourceDescription[] packageDeleteDescriptions = new ResourceDescription[fPackageDeletes.size()];
for (int i = 0; i < fPackageDeletes.size(); i++) {
IResource resource = fPackageDeletes.get(i);
packageDeleteDescriptions[i] = ResourceDescription.fromResource(resource);
pm.worked(1);
}
DynamicValidationStateChange result = (DynamicValidationStateChange) super.perform(new SubProgressMonitor(pm, count));
for (int i = 0; i < fPackageDeletes.size(); i++) {
IResource resource = fPackageDeletes.get(i);
ResourceDescription resourceDescription = packageDeleteDescriptions[i];
resourceDescription.recordStateFromHistory(resource, new SubProgressMonitor(pm, 1));
result.add(new UndoDeleteResourceChange(resourceDescription));
}
return result;
}
Aggregations