package org.eclipse.ui.views.pdf.refactoring;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceVisitor;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.views.file.FileView;
import org.eclipse.ui.views.file.IFileViewType;
import org.eclipse.ui.views.pdf.Activator;
import org.eclipse.ui.views.pdf.PdfViewType;
import org.eclipse.util.UiUtils;
public class PdfViewPageCloser {
private PdfViewPageCloser() {}
public static void releaseOpenedFiles(Object fileOrFolder) {
List<IFile> filesToRelease = getFilesToRelease(fileOrFolder);
if(!filesToRelease.isEmpty()){
IViewReference[] views = UiUtils.getWorkbenchPage().getViewReferences();
for (IViewReference ref : views) {
IViewPart view = ref.getView(false);
if (view instanceof FileView) {
FileView fileView = (FileView)view;
IFileViewType<?> fileViewType = fileView.getType();
if (fileViewType instanceof PdfViewType) {
PdfViewType pdfViewType = (PdfViewType)fileViewType;
Display.getDefault().syncExec(new Runnable(){
@Override
public void run() {
for (IFile fileToRelease : filesToRelease) {
pdfViewType.release(fileToRelease);
}
}
});
}
}
}
}
}
private static List<IFile> getFilesToRelease(Object element){
final List<IFile> result=new ArrayList<IFile>();
if(element instanceof IFile){
IFile file = (IFile)element;
if(isPdf(file)){
result.add(file);
}
}else if(element instanceof IFolder){
try {
((IFolder)element).accept(new IResourceVisitor() {
@Override
public boolean visit(IResource resource) {
if (resource instanceof IFile) {
IFile file = (IFile)resource;
if(isPdf(file)){
result.add(file);
}
}
return true;
}
});
} catch (CoreException e) {
Activator.logError("error traversing folder to delete", e);
}
}
return result;
}
private static boolean isPdf(IFile file){
return file.getFileExtension().equals(PdfViewType.EXTENSION);
}
}