package tk.eclipse.plugin.jspeditor.editors;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import org.eclipse.ui.IFileEditorInput;
import tk.eclipse.plugin.htmleditor.HTMLPlugin;
import tk.eclipse.plugin.htmleditor.editors.HTMLConfiguration;
import tk.eclipse.plugin.htmleditor.editors.HTMLEditor;
import tk.eclipse.plugin.htmleditor.editors.HTMLEditorPart;
import tk.eclipse.plugin.htmleditor.editors.HTMLSourceEditor;
/**
* JSP editor.
*/
public class JSPEditor extends HTMLEditor {
private JSPConfiguration configuration;
public JSPEditor() {
super();
}
@Override
protected HTMLSourceEditor createHTMLSourceEditor(HTMLConfiguration config) {
return new JSPSourceEditor(config);
}
@Override
protected HTMLConfiguration getSourceViewerConfiguration() {
if(configuration==null){
configuration = new JSPConfiguration(HTMLPlugin.getDefault().getColorProvider());
}
return configuration;
}
/**
* Update preview.
*/
@Override
public void updatePreview(){
if(!(_editor instanceof HTMLEditorPart)){
return;
}
try {
if(!((HTMLEditorPart)_editor).isFileEditorInput()){
return;
}
// write to temporary file
HTMLEditorPart editor = (HTMLEditorPart)this._editor;
IFileEditorInput input = (IFileEditorInput)this._editor.getEditorInput();
String charset = input.getFile().getCharset();
String html = editor.getSourceEditor().getDocumentProvider().getDocument(input).get();
// replace JSP parts
html = JSPPreviewConverter.convertJSP((IFileEditorInput)getEditorInput(),html);
File tmpFile = editor.getSourceEditor().getTempFile();
FileOutputStream out = new FileOutputStream(tmpFile);
PrintWriter pw = new PrintWriter(new OutputStreamWriter(out, charset), true);
pw.write(html);
pw.close();
if(_prevTempFile!=null && _prevTempFile.equals(tmpFile)){
editor.getBrowser().refresh();
} else {
if(_prevTempFile!=null){
_prevTempFile.delete();
}
_prevTempFile = tmpFile;
editor.getBrowser().setUrl("file://" + tmpFile.getAbsolutePath()); //$NON-NLS-1$
}
} catch(Exception ex){
HTMLPlugin.logException(ex);
//ex.printStackTrace();
}
}
}