initial quantum version
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / actions / ExportQueryAction.java
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/actions/ExportQueryAction.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/actions/ExportQueryAction.java
new file mode 100644 (file)
index 0000000..081897e
--- /dev/null
@@ -0,0 +1,83 @@
+package com.quantum.actions;
+
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.StringTokenizer;
+
+import com.quantum.Messages;
+import com.quantum.util.StringUtil;
+import com.quantum.view.LogProxy;
+import com.quantum.view.SQLLogView;
+import com.quantum.view.SQLQueryView;
+import com.quantum.view.ViewHelper;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+
+public class ExportQueryAction extends Action implements IViewActionDelegate  {
+       SQLQueryView view;
+       
+       /**
+        * @see org.eclipse.ui.IViewActionDelegate#init(IViewPart)
+        */
+       public void init(IViewPart view) {
+               this.view = (SQLQueryView) view;                
+       }
+
+       /**
+        * @see org.eclipse.ui.IActionDelegate#run(IAction)
+        */
+       public void run(IAction action) {
+               run();
+       }
+
+       public void run() {
+               FileOutputStream out = ViewHelper.askSaveFile("exportquery", view.getSite().getShell(), 
+                                                                                                               new String[]{"*.sql", "*.ddl", "*.*"},
+                                                                                                               new String[]{
+                                                                                                                                       Messages.getString("filedialog.sqlFiles"),
+                                                                                                                                       Messages.getString("filedialog.ddlFiles"),
+                                                                                                                                       Messages.getString("filedialog.allfiles")
+                                                                                                               });
+               if (out == null)
+                       return;
+                       
+               try {
+                       FileWriter fileWriter = new FileWriter(out.getFD());
+                       PrintWriter writer = new PrintWriter(fileWriter);
+                       String output = view.getQuery();
+                       output = StringUtil.substituteString(output, "\r", "");
+                       StringTokenizer tokenizer = new StringTokenizer(output, "\n", true); //$NON-NLS-1$
+                       String prevToken = "";
+                       while (tokenizer.hasMoreElements()) {
+                               String token = (String) tokenizer.nextElement();
+                               // If it's a normal line end, we won't write it, because the println() will
+                               // adapting it to the OS (have to test that). But if it's a line end after
+                               // another, then it's a blank line.
+                               if (token.equals("\n"))
+                                       if (prevToken.equals("\n"))
+                                               writer.println(); // Two consecutives "\n", means a separate line
+                               else
+                                       ; // Do nothing, the end of line is already written 
+                               else
+                                       writer.println(token); //Normal line
+                               prevToken = token;
+                       }
+                       writer.close();
+               } catch (IOException e) {
+                       LogProxy.getInstance().addText(SQLLogView.ERROR, e.toString());
+                       e.printStackTrace();
+               }
+       }
+
+       /**
+        * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection)
+        */
+       public void selectionChanged(IAction action, ISelection selection) {
+       }
+}