fixed a bug with the variable suffixes parsing
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.sql / src / net / sourceforge / phpdt / sql / PHPEclipseSQLPlugin.java
index 5b66482..7d3cbec 100644 (file)
@@ -1,9 +1,17 @@
 package net.sourceforge.phpdt.sql;
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
 import java.net.URL;
-import java.util.ResourceBundle;
 
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.crimson.tree.XmlDocument;
 import org.eclipse.core.resources.ISaveContext;
 import org.eclipse.core.resources.ISaveParticipant;
 import org.eclipse.core.resources.ISavedState;
@@ -18,155 +26,295 @@ import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.graphics.FontData;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.RGB;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.w3c.dom.Element;
+import org.xml.sax.SAXException;
 
-import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
 import net.sourceforge.phpdt.sql.view.bookmark.BookmarkContentProvider;
+import net.sourceforge.phpdt.sql.view.bookmark.SubsetContentProvider;
 
 /**
  * @author 
  */
-public class PHPEclipseSQLPlugin extends AbstractUIPlugin {
-  private static final String BUNDLE_NAME =
-    "net.sourceforge.phpdt.sql.PHPEclipseSQLResources";
-  private static final ResourceBundle RESOURCE_BUNDLE =
-    ResourceBundle.getBundle(BUNDLE_NAME);
-
-  private static PHPEclipseSQLPlugin plugin;
-  public final static String PLUGIN_ID = "net.sourceforge.phpeclipse.sql";
-
-  public PHPEclipseSQLPlugin(IPluginDescriptor descriptor) {
-    super(descriptor);
-    plugin = this;
-  }
-
-  public static PHPEclipseSQLPlugin getDefault() {
-    return plugin;
-  }
-  protected void readStateFrom(File target) {
-    BookmarkContentProvider.getInstance().load(target);
-  }
-
-  public void startup() throws CoreException {
-    super.startup();
-    ISaveParticipant saveParticipant = new QuantumSaveParticipant();
-    ISavedState lastState =
-      ResourcesPlugin.getWorkspace().addSaveParticipant(this, saveParticipant);
-    if (lastState == null)
-      return;
-    IPath location = lastState.lookup(new Path("save"));
-    if (location == null)
-      return;
-    // the plugin instance should read any important state from the file. 
-    File f = getStateLocation().append(location).toFile();
-    readStateFrom(f);
-  }
-  protected void writeImportantState(File target) {
-    BookmarkContentProvider.getInstance().save(target);
-  }
-  public static ImageDescriptor getImageDescriptor(String name) {
-    ImageDescriptor descriptor = null;
-    try {
-      URL installURL =
-        PHPEclipseSQLPlugin.getDefault().getDescriptor().getInstallURL();
-      URL url = new URL(installURL, "icons/" + name);
-      descriptor = ImageDescriptor.createFromURL(url);
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
-    return descriptor;
-  }
-  public static Image getImage(String name) {
-    return getImageDescriptor(name).createImage();
-  }
-
-  public void dispose() throws CoreException {
-    MultiSQLServer.getInstance().shutdown();
-  }
-
-  protected void initializeDefaultPluginPreferences() {
-    RGB BACKGROUND = new RGB(255, 255, 255);
-    RGB COMMENT = new RGB(88, 148, 64);
-    RGB IDENTIFIER = new RGB(0, 0, 0);
-    RGB KEYWORD = new RGB(126, 0, 75);
-    RGB STRING = new RGB(0, 0, 255);
-    RGB NUMERIC = new RGB(255, 0, 0);
-    RGB DEFAULT = new RGB(0, 0, 0);
-    IPreferenceStore store = getPreferenceStore();
-    PreferenceConverter.setDefault(
-      store,
-      "quantum.background.color",
-      BACKGROUND);
-    PreferenceConverter.setDefault(store, "quantum.text.color", DEFAULT);
-    PreferenceConverter.setDefault(store, "quantum.keyword.color", KEYWORD);
-    PreferenceConverter.setDefault(store, "quantum.comment.color", COMMENT);
-    PreferenceConverter.setDefault(store, "quantum.string.color", STRING);
-    PreferenceConverter.setDefault(store, "quantum.numeric.color", NUMERIC);
-    getPreferenceStore().setDefault("quantum.text.bold", false);
-    getPreferenceStore().setDefault("quantum.keyword.bold", true);
-    getPreferenceStore().setDefault("quantum.string.bold", false);
-    getPreferenceStore().setDefault("quantum.comment.bold", false);
-    getPreferenceStore().setDefault("quantum.numeric.bold", false);
-    PreferenceConverter.setDefault(
-      getPreferenceStore(),
-      "quantum.font",
-      (FontData) null);
-  }
+public class PHPEclipseSQLPlugin
+extends AbstractUIPlugin
+implements IConstants {
+
+       private static PHPEclipseSQLPlugin plugin;
+       public final static String PLUGIN_ID = "net.sourceforge.phpeclipse.sql";
+
+       public PHPEclipseSQLPlugin(IPluginDescriptor descriptor) {
+               super(descriptor);
+               plugin = this;
+       }
+
+       public static PHPEclipseSQLPlugin getDefault() {
+               return plugin;
+       }
+       /**
+        * Reads the PHPEclipseSQL Plugin state from a file. The file has been created with writeImportantState
+        * @param target
+        */
+       protected void readStateFrom(File target) {
+               String fileName = target.getName();
+               if (!fileName.endsWith("ext")) { //$NON-NLS-1$
+                       // It's the 2.0 format for preferences
+                       BookmarkContentProvider.getInstance().load(target);
+               } else {
+                       //It's the 2.1 format for preferences and subsets
+                       XmlDocument doc = new XmlDocument();
+                       FileInputStream source = null;
+                       try {
+                               source = new FileInputStream(target);
+                       } catch (FileNotFoundException e1) {
+                               e1.printStackTrace();
+                               return;
+                       }
+                       DocumentBuilderFactory factory =
+                       DocumentBuilderFactory.newInstance();
+                       DocumentBuilder parser;
+                       try {
+                               parser = factory.newDocumentBuilder();
+                               doc = (XmlDocument) parser.parse(source);
+                       } catch (ParserConfigurationException e) {
+                               e.printStackTrace();
+                               return;
+                       } catch (SAXException e) {
+                               e.printStackTrace();
+                               return;
+                       } catch (IOException e) {
+                               e.printStackTrace();
+                               return;
+                       }
+                       Element root = doc.getDocumentElement();
+                       BookmarkContentProvider.getInstance().importXML(root);
+                       SubsetContentProvider.getInstance().importXML(root);
+               }
+       }
+
+       public void startup() throws CoreException {
+               super.startup();
+               ISaveParticipant saveParticipant = new PHPSQLSaveParticipant();
+               ISavedState lastState =
+               ResourcesPlugin.getWorkspace().addSaveParticipant(
+                                                                                                                this,
+                                                                                                                saveParticipant);
+               if (lastState == null)
+                       return;
+               IPath location = lastState.lookup(new Path("save"));
+               if (location == null)
+                       return;
+               // the plugin instance should read any important state from the file. 
+               File f = getStateLocation().append(location).toFile();
+               readStateFrom(f);
+       }
+
+       protected void writeImportantState(File target) {
+               XmlDocument doc = new XmlDocument();
+               FileOutputStream out = null;
+               try {
+                       out = new FileOutputStream(target);
+               } catch (FileNotFoundException e1) {
+                       e1.printStackTrace();
+                       return;
+               }
+               Element root = (Element) doc.appendChild(doc.createElement(Messages.getString("ExportXMLAction.SavedData"))); //$NON-NLS-1$
+
+               BookmarkContentProvider.getInstance().exportXML(root);
+               SubsetContentProvider.getInstance().exportXML(root);
+
+               try {
+                       doc.write(out);
+                       out.close();
+               } catch (IOException e) {
+                       e.printStackTrace();
+               }
+
+       }
+
+       /**
+        *  Gets an image descriptof from a file in the icons directory 
+        * @param name of the file to get
+        * @return ImageDescriptor or null if not found
+        */
+       public static ImageDescriptor getImageDescriptor(String name) {
+               ImageDescriptor descriptor = null;
+               try {
+                       URL installURL =
+                       PHPEclipseSQLPlugin
+                       .getDefault()
+                       .getDescriptor()
+                       .getInstallURL();
+                       URL url = new URL(installURL, "icons/" + name);
+                       descriptor = ImageDescriptor.createFromURL(url);
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+               return descriptor;
+       }
+       public static Image getImage(String name) {
+               return getImageDescriptor(name).createImage();
+       }
+
+       public void dispose() throws CoreException {
+       }
+
+       protected void initializeDefaultPluginPreferences() {
+               RGB BACKGROUND = new RGB(255, 255, 255);
+               RGB COMMENT = new RGB(88, 148, 64);
+               RGB KEYWORD = new RGB(126, 0, 75);
+               RGB STRING = new RGB(0, 0, 255);
+               RGB NUMERIC = new RGB(255, 0, 0);
+               RGB DEFAULT = new RGB(0, 0, 0);
+               IPreferenceStore store = getPreferenceStore();
+               PreferenceConverter.setDefault(
+                                                                         store,
+                                                                         "phpeclipse.sql.background.color",
+                                                                         BACKGROUND);
+               PreferenceConverter.setDefault(
+                                                                         store,
+                                                                         "phpeclipse.sql.text.color",
+                                                                         DEFAULT);
+               PreferenceConverter.setDefault(
+                                                                         store,
+                                                                         "phpeclipse.sql.keyword.color",
+                                                                         KEYWORD);
+               PreferenceConverter.setDefault(
+                                                                         store,
+                                                                         "phpeclipse.sql.comment.color",
+                                                                         COMMENT);
+               PreferenceConverter.setDefault(
+                                                                         store,
+                                                                         "phpeclipse.sql.string.color",
+                                                                         STRING);
+               PreferenceConverter.setDefault(
+                                                                         store,
+                                                                         "phpeclipse.sql.numeric.color",
+                                                                         NUMERIC);
+               getPreferenceStore().setDefault("phpeclipse.sql.text.bold", false);
+               getPreferenceStore().setDefault("phpeclipse.sql.keyword.bold", true);
+               getPreferenceStore().setDefault("phpeclipse.sql.string.bold", false);
+               getPreferenceStore().setDefault("phpeclipse.sql.comment.bold", false);
+               getPreferenceStore().setDefault("phpeclipse.sql.numeric.bold", false);
+               PreferenceConverter.setDefault(getPreferenceStore(), "phpeclipsesql.font", (FontData) null); //$NON-NLS-1$
+       }
+
+       public boolean showView(String view) {
+               IWorkbench workbench = getWorkbench();
+               IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
+               IWorkbenchPage page = window.getActivePage();
+               IViewPart viewPart = null;
+               try {
+                       viewPart = page.showView(view);
+               } catch (PartInitException e) {
+                       e.printStackTrace();
+                       return false;
+               }
+
+               getPreferenceStore().setDefault(
+                                                                          "phpeclipse.sql.select.template",
+                                                                          "$results = mysql_query(\"SELECT {0} FROM {1} WHERE {2} \");");
+
+               getPreferenceStore().setDefault(
+                                                                          "phpeclipse.sql.insert.template",
+                                                                          "$results = mysql_query(\"INSERT INTO {0} ({1}) VALUES {2} \");");
+
+               getPreferenceStore().setDefault(
+                                                                          "phpeclipse.sql.update.template",
+                                                                          "$results = mysql_query(\"UPDATE {0} SET {1} WHERE {2} \");");
+
+               getPreferenceStore().setDefault(
+                                                                          "phpeclipse.sql.delete.template",
+                                                                          "$results = mysql_query(\"DELETE FROM {0} WHERE {1} \");");
+
+               getPreferenceStore().setDefault(
+                                                                          "phpeclipse.sql.username.connect",
+                                                                          "root");
+
+               getPreferenceStore().setDefault(
+                                                                          "phpeclipse.sql.connect.connect",
+                                                                          "jdbc:mysql://localhost/test");
+
+               getPreferenceStore().setDefault(
+                                                                          "phpeclipse.sql.driver.connect",
+                                                                          "com.mysql.jdbc.Driver");
+
+               getPreferenceStore().setDefault("phpeclipse.sql.type.connect", "MySQL");
+
+               getPreferenceStore().setDefault(
+                                                                          "phpeclipse.sql.filename.connect",
+                                                                          "C:\\apache\\mysql\\lib\\mysql-connector-java-2.0.14-bin.jar");
+
+               PreferenceConverter.setDefault(
+                                                                         getPreferenceStore(),
+                                                                         "phpeclipse.sql.font",
+                                                                         (FontData) null);
+               return(viewPart != null);
+       }
 
 }
-class QuantumSaveParticipant implements ISaveParticipant {
-  /**
-   * @see org.eclipse.core.resources.ISaveParticipant#doneSaving(ISaveContext)
-   */
-  public void doneSaving(ISaveContext context) {
-  }
-
-  /**
-   * @see org.eclipse.core.resources.ISaveParticipant#prepareToSave(ISaveContext)
-   */
-  public void prepareToSave(ISaveContext context) throws CoreException {
-  }
-
-  /**
-   * @see org.eclipse.core.resources.ISaveParticipant#rollback(ISaveContext)
-   */
-  public void rollback(ISaveContext context) {
-  }
-
-  /**
-   * @see org.eclipse.core.resources.ISaveParticipant#saving(ISaveContext)
-   */
-  public void saving(ISaveContext context) throws CoreException {
-    switch (context.getKind()) {
-      case ISaveContext.FULL_SAVE :
-        PHPEclipseSQLPlugin quantumPluginInstance = PHPEclipseSQLPlugin.getDefault();
-        // save the plug in state 
-        if (BookmarkContentProvider.getInstance().hasChanged()) {
-          int saveNumber = context.getSaveNumber();
-          String saveFileName = "save " + Integer.toString(saveNumber);
-          File f =
-            quantumPluginInstance
-              .getStateLocation()
-              .append(saveFileName)
-              .toFile();
-          // if we fail to write, an exception is thrown and we do not update the path 
-          quantumPluginInstance.writeImportantState(f);
-          context.map(new Path("save"), new Path(saveFileName));
-          context.needSaveNumber();
-        } else {
-          System.out.println("Not saving unchanged bookmarks");
-        }
-        break;
-      case ISaveContext.PROJECT_SAVE :
-        // get the project related to this save operation 
-        //IProject project = context.getProject(); 
-        // save its information, if necessary 
-        break;
-      case ISaveContext.SNAPSHOT :
-        // This operation needs to be really fast because 
-        // snapshots can be requested frequently by the 
-        // workspace. 
-        break;
-    }
-  }
+class PHPSQLSaveParticipant implements ISaveParticipant, IConstants {
+       /**
+        * @see org.eclipse.core.resources.ISaveParticipant#doneSaving(ISaveContext)
+        */
+       public void doneSaving(ISaveContext context) {
+       }
+
+       /**
+        * @see org.eclipse.core.resources.ISaveParticipant#prepareToSave(ISaveContext)
+        */
+       public void prepareToSave(ISaveContext context) throws CoreException {
+       }
+
+       /**
+        * @see org.eclipse.core.resources.ISaveParticipant#rollback(ISaveContext)
+        */
+       public void rollback(ISaveContext context) {
+       }
+
+       /**
+        * @see org.eclipse.core.resources.ISaveParticipant#saving(ISaveContext)
+        */
+       public void saving(ISaveContext context) throws CoreException {
+               switch (context.getKind()) {
+               case ISaveContext.FULL_SAVE :
+                       PHPEclipseSQLPlugin sqlPluginInstance =
+                       PHPEclipseSQLPlugin.getDefault();
+                       // save the plug in state 
+                       if (BookmarkContentProvider.getInstance().hasChanged()) {
+                               int saveNumber = context.getSaveNumber();
+                               String saveFileName =
+                               "save " + Integer.toString(saveNumber);
+                               File f =
+                               sqlPluginInstance
+                               .getStateLocation()
+                               .append(saveFileName)
+                               .toFile();
+                               // if we fail to write, an exception is thrown and we do not update the path 
+                               sqlPluginInstance.writeImportantState(f);
+                               context.map(new Path("save"), new Path(saveFileName));
+                               context.needSaveNumber();
+                       } else {
+                               if (DEBUG) {
+                                       System.out.println("Not saving unchanged bookmarks");
+                               }
+                       }
+                       break;
+               case ISaveContext.PROJECT_SAVE :
+                       // get the project related to this save operation 
+                       //IProject project = context.getProject(); 
+                       // save its information, if necessary 
+                       break;
+               case ISaveContext.SNAPSHOT :
+                       // This operation needs to be really fast because 
+                       // snapshots can be requested frequently by the 
+                       // workspace. 
+                       break;
+               }
+       }
 }