package org.objectstyle.wolips.wodclipse.core.refactoring;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.text.IDocument;
import org.eclipse.ui.editors.text.TextFileDocumentProvider;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.objectstyle.wolips.locate.LocateException;
import org.objectstyle.wolips.wodclipse.core.completion.WodParserCache;
import org.objectstyle.wolips.wodclipse.core.document.WodFileDocumentProvider;
public class TemplateRefactoring {
public static void processHtmlAndWod(IRunnableWithProgress runnable, WodParserCache cache, IProgressMonitor progressMonitor) throws InvocationTargetException, InterruptedException, CoreException {
IDocument htmlDocument = cache.getHtmlEntry().getDocument();
FileEditorInput htmlInput = null;
IDocumentProvider htmlProvider = null;
if (htmlDocument == null) {
IFile htmlFile = cache.getHtmlEntry().getFile();
if (htmlFile != null) {
htmlInput = new FileEditorInput(cache.getHtmlEntry().getFile());
htmlProvider = new TextFileDocumentProvider();
htmlProvider.connect(htmlInput);
htmlDocument = htmlProvider.getDocument(htmlInput);
cache.getHtmlEntry().setDocument(htmlDocument);
}
}
try {
IDocument wodDocument = cache.getWodEntry().getDocument();
IDocumentProvider wodProvider = null;
FileEditorInput wodInput = null;
if (wodDocument == null) {
IFile wodFile = cache.getWodEntry().getFile();
if (wodFile != null) {
wodInput = new FileEditorInput(cache.getWodEntry().getFile());
wodProvider = new WodFileDocumentProvider();
wodProvider.connect(wodInput);
wodDocument = wodProvider.getDocument(wodInput);
cache.getWodEntry().setDocument(wodDocument);
}
}
try {
runnable.run(progressMonitor);
}
finally {
if (wodProvider != null) {
wodProvider.saveDocument(progressMonitor, wodInput, wodDocument, true);
wodProvider.disconnect(wodInput);
cache.getWodEntry().setDocument(null);
}
}
}
finally {
if (htmlProvider != null) {
htmlProvider.saveDocument(progressMonitor, htmlInput, htmlDocument, true);
htmlProvider.disconnect(htmlInput);
cache.getHtmlEntry().setDocument(null);
}
}
try {
cache.clearCache();
}
catch (LocateException e) {
e.printStackTrace();
}
}
}