A lot of bug fixed
[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.net.URL;
5 import java.util.ResourceBundle;
6
7 import org.eclipse.core.resources.ISaveContext;
8 import org.eclipse.core.resources.ISaveParticipant;
9 import org.eclipse.core.resources.ISavedState;
10 import org.eclipse.core.resources.ResourcesPlugin;
11 import org.eclipse.core.runtime.CoreException;
12 import org.eclipse.core.runtime.IPath;
13 import org.eclipse.core.runtime.IPluginDescriptor;
14 import org.eclipse.core.runtime.Path;
15 import org.eclipse.jface.preference.IPreferenceStore;
16 import org.eclipse.jface.preference.PreferenceConverter;
17 import org.eclipse.jface.resource.ImageDescriptor;
18 import org.eclipse.swt.graphics.FontData;
19 import org.eclipse.swt.graphics.Image;
20 import org.eclipse.swt.graphics.RGB;
21 import org.eclipse.ui.plugin.AbstractUIPlugin;
22
23 import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
24 import net.sourceforge.phpdt.sql.view.bookmark.BookmarkContentProvider;
25
26 /**
27  * @author 
28  */
29 public class PHPEclipseSQLPlugin
30   extends AbstractUIPlugin
31   implements IConstants {
32
33   private static final String BUNDLE_NAME =
34     "net.sourceforge.phpdt.sql.PHPEclipseSQLResources";
35   private static final ResourceBundle RESOURCE_BUNDLE =
36     ResourceBundle.getBundle(BUNDLE_NAME);
37
38   private static PHPEclipseSQLPlugin plugin;
39   public final static String PLUGIN_ID = "net.sourceforge.phpeclipse.sql";
40
41   public PHPEclipseSQLPlugin(IPluginDescriptor descriptor) {
42     super(descriptor);
43     plugin = this;
44   }
45
46   public static PHPEclipseSQLPlugin getDefault() {
47     return plugin;
48   }
49   protected void readStateFrom(File target) {
50     BookmarkContentProvider.getInstance().load(target);
51   }
52
53   public void startup() throws CoreException {
54     super.startup();
55     ISaveParticipant saveParticipant = new PHPSQLSaveParticipant();
56     ISavedState lastState =
57       ResourcesPlugin.getWorkspace().addSaveParticipant(this, saveParticipant);
58     if (lastState == null)
59       return;
60     IPath location = lastState.lookup(new Path("save"));
61     if (location == null)
62       return;
63     // the plugin instance should read any important state from the file. 
64     File f = getStateLocation().append(location).toFile();
65     readStateFrom(f);
66   }
67   protected void writeImportantState(File target) {
68     BookmarkContentProvider.getInstance().save(target);
69   }
70   public static ImageDescriptor getImageDescriptor(String name) {
71     ImageDescriptor descriptor = null;
72     try {
73       URL installURL =
74         PHPEclipseSQLPlugin.getDefault().getDescriptor().getInstallURL();
75       URL url = new URL(installURL, "icons/" + name);
76       descriptor = ImageDescriptor.createFromURL(url);
77     } catch (Exception e) {
78       e.printStackTrace();
79     }
80     return descriptor;
81   }
82   public static Image getImage(String name) {
83     return getImageDescriptor(name).createImage();
84   }
85
86   public void dispose() throws CoreException {
87     MultiSQLServer.getInstance().shutdown();
88   }
89
90   protected void initializeDefaultPluginPreferences() {
91     RGB BACKGROUND = new RGB(255, 255, 255);
92     RGB COMMENT = new RGB(88, 148, 64);
93     RGB IDENTIFIER = new RGB(0, 0, 0);
94     RGB KEYWORD = new RGB(126, 0, 75);
95     RGB STRING = new RGB(0, 0, 255);
96     RGB NUMERIC = new RGB(255, 0, 0);
97     RGB DEFAULT = new RGB(0, 0, 0);
98     IPreferenceStore store = getPreferenceStore();
99     PreferenceConverter.setDefault(
100       store,
101       "phpeclipse.sql.background.color",
102       BACKGROUND);
103     PreferenceConverter.setDefault(store, "phpeclipse.sql.text.color", DEFAULT);
104     PreferenceConverter.setDefault(
105       store,
106       "phpeclipse.sql.keyword.color",
107       KEYWORD);
108     PreferenceConverter.setDefault(
109       store,
110       "phpeclipse.sql.comment.color",
111       COMMENT);
112     PreferenceConverter.setDefault(
113       store,
114       "phpeclipse.sql.string.color",
115       STRING);
116     PreferenceConverter.setDefault(
117       store,
118       "phpeclipse.sql.numeric.color",
119       NUMERIC);
120     getPreferenceStore().setDefault("phpeclipse.sql.text.bold", false);
121     getPreferenceStore().setDefault("phpeclipse.sql.keyword.bold", true);
122     getPreferenceStore().setDefault("phpeclipse.sql.string.bold", false);
123     getPreferenceStore().setDefault("phpeclipse.sql.comment.bold", false);
124     getPreferenceStore().setDefault("phpeclipse.sql.numeric.bold", false);
125
126     getPreferenceStore().setDefault(
127       "phpeclipse.sql.select.template",
128       "$results = mysql_query(\"SELECT {0} FROM {1} WHERE {2} \");");
129
130     getPreferenceStore().setDefault(
131       "phpeclipse.sql.insert.template",
132       "$results = mysql_query(\"INSERT INTO {0} ({1}) VALUES {2} \");");
133
134     getPreferenceStore().setDefault(
135       "phpeclipse.sql.update.template",
136       "$results = mysql_query(\"UPDATE {0} SET {1} WHERE {2} \");");
137
138     getPreferenceStore().setDefault(
139       "phpeclipse.sql.delete.template",
140       "$results = mysql_query(\"DELETE FROM {0} WHERE {1} \");");
141
142     getPreferenceStore().setDefault("phpeclipse.sql.username.connect", "root");
143
144     getPreferenceStore().setDefault(
145       "phpeclipse.sql.connect.connect",
146       "jdbc:mysql://localhost/test");
147
148     getPreferenceStore().setDefault(
149       "phpeclipse.sql.driver.connect",
150       "com.mysql.jdbc.Driver");
151
152     getPreferenceStore().setDefault("phpeclipse.sql.type.connect", "MySQL");
153
154     getPreferenceStore().setDefault(
155       "phpeclipse.sql.filename.connect",
156       "C:\\apache\\mysql\\lib\\mysql-connector-java-2.0.14-bin.jar");
157
158     PreferenceConverter.setDefault(
159       getPreferenceStore(),
160       "phpeclipse.sql.font",
161       (FontData) null);
162   }
163
164 }
165 class PHPSQLSaveParticipant implements ISaveParticipant, IConstants {
166   /**
167    * @see org.eclipse.core.resources.ISaveParticipant#doneSaving(ISaveContext)
168    */
169   public void doneSaving(ISaveContext context) {
170   }
171
172   /**
173    * @see org.eclipse.core.resources.ISaveParticipant#prepareToSave(ISaveContext)
174    */
175   public void prepareToSave(ISaveContext context) throws CoreException {
176   }
177
178   /**
179    * @see org.eclipse.core.resources.ISaveParticipant#rollback(ISaveContext)
180    */
181   public void rollback(ISaveContext context) {
182   }
183
184   /**
185    * @see org.eclipse.core.resources.ISaveParticipant#saving(ISaveContext)
186    */
187   public void saving(ISaveContext context) throws CoreException {
188     switch (context.getKind()) {
189       case ISaveContext.FULL_SAVE :
190         PHPEclipseSQLPlugin sqlPluginInstance =
191           PHPEclipseSQLPlugin.getDefault();
192         // save the plug in state 
193         if (BookmarkContentProvider.getInstance().hasChanged()) {
194           int saveNumber = context.getSaveNumber();
195           String saveFileName = "save " + Integer.toString(saveNumber);
196           File f =
197             sqlPluginInstance.getStateLocation().append(saveFileName).toFile();
198           // if we fail to write, an exception is thrown and we do not update the path 
199           sqlPluginInstance.writeImportantState(f);
200           context.map(new Path("save"), new Path(saveFileName));
201           context.needSaveNumber();
202         } else {
203           if (DEBUG) {
204             System.out.println("Not saving unchanged bookmarks");
205           }
206         }
207         break;
208       case ISaveContext.PROJECT_SAVE :
209         // get the project related to this save operation 
210         //IProject project = context.getProject(); 
211         // save its information, if necessary 
212         break;
213       case ISaveContext.SNAPSHOT :
214         // This operation needs to be really fast because 
215         // snapshots can be requested frequently by the 
216         // workspace. 
217         break;
218     }
219   }
220 }