package com.predic8.plugin.membrane.views.util; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import com.predic8.membrane.core.http.Message; public class MessageSaver { private String latestSavePath; private String getFileName(Message message) { FileDialog fd = new FileDialog(Display.getCurrent().getActiveShell(), SWT.SAVE); fd.setText("Save Message"); if (latestSavePath != null && !latestSavePath.equals("")) { fd.setFilterPath(latestSavePath); } else { fd.setFilterPath("C:/"); } fd.setFilterExtensions(new String[] { "*." + getExtension(message) }); return fd.open(); } private String getExtension(Message message) { if (message.getHeader().getContentType() == null) return "txt"; if (message.isCSS()) { return "css"; } else if (message.isHTML()) { return "html"; } else if (message.isJavaScript()) { return "js"; } else if (message.isXML()) { return "xml"; } else if (message.isImage()) { String contentType = message.getHeader().getContentType(); if (contentType.contains("jpeg")) { return "jpg"; } else if (contentType.contains("gif")) { return "gif"; } else if (contentType.contains("png")) { return "png"; } else if (contentType.contains("bmp")) { return "bmp"; } else { return "bmp"; } } return "txt"; } public void saveMessage(Message message) throws Exception { String selected = getFileName(message); if (selected == null || selected.equals("")) return; OutputStream os = null; try { File file = new File(selected); if (!file.exists()) { file.createNewFile(); } latestSavePath = file.getParent(); os = new FileOutputStream(file); if (message.isBodyEmpty()) { PrintWriter printer = new PrintWriter(os); printer.write(message.getHeader().toString()); printer.flush(); printer.close(); } else { os.write(message.getBody().getContent()); os.flush(); } } finally { if (os != null) { try { os.close(); } catch (IOException e) { throw e; } } } } }