package org.applause.lang.ui.builder; import java.io.File; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.xpand2.output.FileHandle; import org.eclipse.xpand2.output.Outlet; import org.eclipse.xtext.util.StringInputStream; public class EclipseBasedFileHandle implements FileHandle { private Outlet outlet; private CharSequence buffer = new StringBuilder(); private IFile file; public EclipseBasedFileHandle(IFile file, Outlet outlet) { this.file = file; this.outlet = outlet; } public Outlet getOutlet() { return outlet; } public CharSequence getBuffer() { return buffer; } public void setBuffer(CharSequence buffer) { this.buffer = buffer; } @Deprecated public File getTargetFile() { throw new UnsupportedOperationException(); } public String getAbsolutePath() { return file.getFullPath().toString(); } public boolean isAppend() { return false; } public boolean isOverwrite() { return false; } public String getFileEncoding() { try { return file.getCharset(); } catch (CoreException e) { return "UTF-8"; } } public void writeAndClose() { try { outlet.beforeWriteAndClose(this); if (file.exists()) { file.setContents(new StringInputStream(getBuffer().toString()), true, true, new NullProgressMonitor()); } else { ensureExists(file.getParent()); file.create(new StringInputStream(getBuffer().toString()), true, new NullProgressMonitor()); } } catch (CoreException e) { e.printStackTrace(); } } protected void ensureExists(IContainer parent) { if (parent instanceof IFolder && !parent.exists()) { ensureExists(parent.getParent()); try { ((IFolder)parent).create(true, true, null); } catch (CoreException e) { throw new RuntimeException(e); } } } }