fix #763.
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.sql / src / net / sourceforge / phpdt / sql / PHPEclipseSQLPlugin.java
1 package net.sourceforge.phpdt.sql;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileNotFoundException;
6 import java.io.FileOutputStream;
7 import java.io.IOException;
8 import java.net.URL;
9
10 import javax.xml.parsers.DocumentBuilder;
11 import javax.xml.parsers.DocumentBuilderFactory;
12 import javax.xml.parsers.ParserConfigurationException;
13
14 import org.apache.crimson.tree.XmlDocument;
15 import org.eclipse.core.resources.ISaveContext;
16 import org.eclipse.core.resources.ISaveParticipant;
17 import org.eclipse.core.resources.ISavedState;
18 import org.eclipse.core.resources.ResourcesPlugin;
19 import org.eclipse.core.runtime.CoreException;
20 import org.eclipse.core.runtime.IPath;
21 import org.eclipse.core.runtime.IPluginDescriptor;
22 import org.eclipse.core.runtime.Path;
23 import org.eclipse.jface.preference.IPreferenceStore;
24 import org.eclipse.jface.preference.PreferenceConverter;
25 import org.eclipse.jface.resource.ImageDescriptor;
26 import org.eclipse.swt.graphics.FontData;
27 import org.eclipse.swt.graphics.Image;
28 import org.eclipse.swt.graphics.RGB;
29 import org.eclipse.ui.IViewPart;
30 import org.eclipse.ui.IWorkbench;
31 import org.eclipse.ui.IWorkbenchPage;
32 import org.eclipse.ui.IWorkbenchWindow;
33 import org.eclipse.ui.PartInitException;
34 import org.eclipse.ui.plugin.AbstractUIPlugin;
35 import org.w3c.dom.Element;
36 import org.xml.sax.SAXException;
37
38 import net.sourceforge.phpdt.sql.view.bookmark.BookmarkContentProvider;
39 import net.sourceforge.phpdt.sql.view.bookmark.SubsetContentProvider;
40
41 /**
42  * @author 
43  */
44 public class PHPEclipseSQLPlugin extends AbstractUIPlugin implements IConstants {
45
46   private static PHPEclipseSQLPlugin plugin;
47   public final static String PLUGIN_ID = "net.sourceforge.phpeclipse.sql";
48
49   public PHPEclipseSQLPlugin(IPluginDescriptor descriptor) {
50     super(descriptor);
51     plugin = this;
52   }
53
54   public static PHPEclipseSQLPlugin getDefault() {
55     return plugin;
56   }
57   /**
58    * Reads the PHPEclipseSQL Plugin state from a file. The file has been created with writeImportantState
59    * @param target
60    */
61   protected void readStateFrom(File target) {
62     String fileName = target.getName();
63     //          if (!fileName.endsWith("ext")) { //$NON-NLS-1$
64     //                  // It's the 2.0 format for preferences
65     //                  BookmarkContentProvider.getInstance().load(target);
66     //          } else {
67     //It's the 2.1 format for preferences and subsets
68     XmlDocument doc = new XmlDocument();
69     FileInputStream source = null;
70     try {
71       source = new FileInputStream(target);
72     } catch (FileNotFoundException e1) {
73       e1.printStackTrace();
74       return;
75     }
76     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
77     DocumentBuilder parser;
78     try {
79       parser = factory.newDocumentBuilder();
80       doc = (XmlDocument) parser.parse(source);
81     } catch (ParserConfigurationException e) {
82       e.printStackTrace();
83       return;
84     } catch (SAXException e) {
85       e.printStackTrace();
86       return;
87     } catch (IOException e) {
88       e.printStackTrace();
89       return;
90     }
91     Element root = doc.getDocumentElement();
92     BookmarkContentProvider.getInstance().importXML(root);
93     SubsetContentProvider.getInstance().importXML(root);
94     //          }
95   }
96
97   public void startup() throws CoreException {
98     super.startup();
99     ISaveParticipant saveParticipant = new PHPSQLSaveParticipant();
100     ISavedState lastState = ResourcesPlugin.getWorkspace().addSaveParticipant(this, saveParticipant);
101     if (lastState == null)
102       return;
103     IPath location = lastState.lookup(new Path("save"));
104     if (location == null)
105       return;
106     // the plugin instance should read any important state from the file. 
107     File f = getStateLocation().append(location).toFile();
108     readStateFrom(f);
109   }
110
111   protected void writeImportantState(File target) {
112     XmlDocument doc = new XmlDocument();
113     FileOutputStream out = null;
114     try {
115       out = new FileOutputStream(target);
116     } catch (FileNotFoundException e1) {
117       e1.printStackTrace();
118       return;
119     }
120     Element root = (Element) doc.appendChild(doc.createElement(Messages.getString("ExportXMLAction.SavedData"))); //$NON-NLS-1$
121
122     BookmarkContentProvider.getInstance().exportXML(root);
123     SubsetContentProvider.getInstance().exportXML(root);
124
125     try {
126       doc.write(out);
127       out.close();
128     } catch (IOException e) {
129       e.printStackTrace();
130     }
131
132   }
133
134   /**
135    *  Gets an image descriptof from a file in the icons directory 
136    * @param name of the file to get
137    * @return ImageDescriptor or null if not found
138    */
139   public static ImageDescriptor getImageDescriptor(String name) {
140     ImageDescriptor descriptor = null;
141     try {
142       URL installURL = PHPEclipseSQLPlugin.getDefault().getDescriptor().getInstallURL();
143       URL url = new URL(installURL, "icons/" + name);
144       descriptor = ImageDescriptor.createFromURL(url);
145     } catch (Exception e) {
146       e.printStackTrace();
147     }
148     return descriptor;
149   }
150   public static Image getImage(String name) {
151     return getImageDescriptor(name).createImage();
152   }
153
154   public void dispose() throws CoreException {
155   }
156
157   protected void initializeDefaultPluginPreferences() {
158     RGB BACKGROUND = new RGB(255, 255, 255);
159     RGB COMMENT = new RGB(88, 148, 64);
160     RGB KEYWORD = new RGB(126, 0, 75);
161     RGB STRING = new RGB(0, 0, 255);
162     RGB NUMERIC = new RGB(255, 0, 0);
163     RGB DEFAULT = new RGB(0, 0, 0);
164     IPreferenceStore store = getPreferenceStore();
165     PreferenceConverter.setDefault(store, "phpeclipse.sql.background.color", BACKGROUND);
166     PreferenceConverter.setDefault(store, "phpeclipse.sql.text.color", DEFAULT);
167     PreferenceConverter.setDefault(store, "phpeclipse.sql.keyword.color", KEYWORD);
168     PreferenceConverter.setDefault(store, "phpeclipse.sql.comment.color", COMMENT);
169     PreferenceConverter.setDefault(store, "phpeclipse.sql.string.color", STRING);
170     PreferenceConverter.setDefault(store, "phpeclipse.sql.numeric.color", NUMERIC);
171     getPreferenceStore().setDefault("phpeclipse.sql.text.bold", false);
172     getPreferenceStore().setDefault("phpeclipse.sql.keyword.bold", true);
173     getPreferenceStore().setDefault("phpeclipse.sql.string.bold", false);
174     getPreferenceStore().setDefault("phpeclipse.sql.comment.bold", false);
175     getPreferenceStore().setDefault("phpeclipse.sql.numeric.bold", false);
176     PreferenceConverter.setDefault(getPreferenceStore(), "phpeclipsesql.font", (FontData) null); //$NON-NLS-1$
177     getPreferenceStore().setDefault(
178       "phpeclipse.sql.select.template",
179       "$results = mysql_query(\"SELECT {0} FROM {1} WHERE {2} \");");
180
181     getPreferenceStore().setDefault(
182       "phpeclipse.sql.insert.template",
183       "$results = mysql_query(\"INSERT INTO {0} ({1}) VALUES {2} \");");
184
185     getPreferenceStore().setDefault("phpeclipse.sql.update.template", "$results = mysql_query(\"UPDATE {0} SET {1} WHERE {2} \");");
186
187     getPreferenceStore().setDefault("phpeclipse.sql.delete.template", "$results = mysql_query(\"DELETE FROM {0} WHERE {1} \");");
188
189     getPreferenceStore().setDefault("phpeclipse.sql.username.connect", "root");
190
191     getPreferenceStore().setDefault("phpeclipse.sql.connect.connect", "jdbc:mysql://localhost/mysql");
192
193     getPreferenceStore().setDefault("phpeclipse.sql.driver.connect", "com.mysql.jdbc.Driver");
194
195     getPreferenceStore().setDefault("phpeclipse.sql.type.connect", "MySQL");
196
197     getPreferenceStore().setDefault(
198       "phpeclipse.sql.filename.connect",
199       "C:\\wampp2\\mysql\\lib\\mysql-connector.jar");
200   }
201
202   public boolean showView(String view) {
203     IWorkbench workbench = getWorkbench();
204     IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
205     IWorkbenchPage page = window.getActivePage();
206     IViewPart viewPart = null;
207     try {
208       viewPart = page.showView(view);
209     } catch (PartInitException e) {
210       e.printStackTrace();
211       return false;
212     }
213
214     PreferenceConverter.setDefault(getPreferenceStore(), "phpeclipse.sql.font", (FontData) null);
215     return (viewPart != null);
216   }
217
218 }
219 class PHPSQLSaveParticipant implements ISaveParticipant, IConstants {
220   /**
221    * @see org.eclipse.core.resources.ISaveParticipant#doneSaving(ISaveContext)
222    */
223   public void doneSaving(ISaveContext context) {
224   }
225
226   /**
227    * @see org.eclipse.core.resources.ISaveParticipant#prepareToSave(ISaveContext)
228    */
229   public void prepareToSave(ISaveContext context) throws CoreException {
230   }
231
232   /**
233    * @see org.eclipse.core.resources.ISaveParticipant#rollback(ISaveContext)
234    */
235   public void rollback(ISaveContext context) {
236   }
237
238   /**
239    * @see org.eclipse.core.resources.ISaveParticipant#saving(ISaveContext)
240    */
241   public void saving(ISaveContext context) throws CoreException {
242     switch (context.getKind()) {
243       case ISaveContext.FULL_SAVE :
244         PHPEclipseSQLPlugin sqlPluginInstance = PHPEclipseSQLPlugin.getDefault();
245         // save the plug in state 
246         if (BookmarkContentProvider.getInstance().hasChanged()) {
247           int saveNumber = context.getSaveNumber();
248           String saveFileName = "save " + Integer.toString(saveNumber);
249           File f = sqlPluginInstance.getStateLocation().append(saveFileName).toFile();
250           // if we fail to write, an exception is thrown and we do not update the path 
251           sqlPluginInstance.writeImportantState(f);
252           context.map(new Path("save"), new Path(saveFileName));
253           context.needSaveNumber();
254         } else {
255           if (DEBUG) {
256             System.out.println("Not saving unchanged bookmarks");
257           }
258         }
259         break;
260       case ISaveContext.PROJECT_SAVE :
261         // get the project related to this save operation 
262         //IProject project = context.getProject(); 
263         // save its information, if necessary 
264         break;
265       case ISaveContext.SNAPSHOT :
266         // This operation needs to be really fast because 
267         // snapshots can be requested frequently by the 
268         // workspace. 
269         break;
270     }
271   }
272 }