1 package net.sourceforge.phpeclipse.wiki.editor;
3 import java.io.IOException;
4 import java.net.MalformedURLException;
6 import java.sql.SQLException;
7 import java.text.MessageFormat;
8 import java.util.Hashtable;
10 import java.util.MissingResourceException;
11 import java.util.ResourceBundle;
13 import net.sourceforge.phpeclipse.wiki.internal.ConfigurationManager;
14 import net.sourceforge.phpeclipse.wiki.internal.IConfigurationWorkingCopy;
15 import net.sourceforge.phpeclipse.wiki.sql.WikipediaDB;
17 import org.eclipse.core.runtime.CoreException;
18 import org.eclipse.core.runtime.IExtension;
19 import org.eclipse.core.runtime.IPluginDescriptor;
20 import org.eclipse.core.runtime.IStatus;
21 import org.eclipse.core.runtime.Platform;
22 import org.eclipse.core.runtime.Status;
23 import org.eclipse.jface.dialogs.MessageDialog;
24 import org.eclipse.jface.preference.IPreferenceStore;
25 import org.eclipse.jface.resource.ImageDescriptor;
26 import org.eclipse.jface.text.templates.ContextTypeRegistry;
27 import org.eclipse.jface.text.templates.persistence.TemplateStore;
28 import org.eclipse.swt.graphics.Image;
29 import org.eclipse.swt.widgets.Display;
30 import org.eclipse.swt.widgets.Shell;
31 import org.eclipse.ui.IWorkbenchPage;
32 import org.eclipse.ui.IWorkbenchWindow;
33 import org.eclipse.ui.PlatformUI;
34 import org.eclipse.ui.editors.text.templates.ContributionContextTypeRegistry;
35 import org.eclipse.ui.editors.text.templates.ContributionTemplateStore;
36 import org.eclipse.ui.plugin.AbstractUIPlugin;
38 public class WikiEditorPlugin extends AbstractUIPlugin {
40 private static WikiEditorPlugin fgPlugin;
42 public static final String HTTP_QUERY = "HTTP Query";
44 public static final String WIKIPEDIA_GET_TEXT = "Wikipedia-Load Text";
46 public static final String WIKIPEDIA_SET_TEXT = "Wikipedia-Store Text";
48 public static final String WIKIPEDIA_SQL = "Wikipedia SQL access";
50 public static final String BLOG_A_WIKI = "Blog as Wiki Text";
52 public static final String BLOG_A_HTML = "Blog as HTML Text";
54 public static final String[] CONFIGURATION_TYPES = { HTTP_QUERY, WIKIPEDIA_GET_TEXT, WIKIPEDIA_SET_TEXT, WIKIPEDIA_SQL, BLOG_A_WIKI, BLOG_A_HTML };
57 public static final String ICON_PATH = "icons/full/"; //$NON-NLS-1$
59 public final static String PLUGIN_ID = "net.sourceforge.phpeclipse.wiki";
61 public final static String HTML_OUTPUT_PATH = "__static_wiki_folder";
63 public final static String WIKI_TEXTS_BASE_PATH = "__wiki_texts_base_path";
65 public final static String LOCAL_TEMPLATE_FILE_NAME = "__local_template_file_name";
67 public final static String EXPORT_TEMPLATE_FILE_NAME = "__export_template_file_name";
69 public final static String LOCAL_CSS_URL = "__local_css_url";
71 public final static String EXPORT_CSS_URL = "__export_css_url";
73 public final static String PREF_STRING_CONFIGURATIONS = "__configurations1";
75 public final static String CONFIG_MEMENTO = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
77 + "<config name=\"Google Search\" type-id=\"HTTP Query\" url=\"http://www.google.com/search?q=$text.selection\"/>"
78 + "<config name=\"Koders.com Search\" type-id=\"HTTP Query\" url=\"http://koders.com/?s=$text.selection\"/>"
79 + "<config name=\"Leo.org Translation\" type-id=\"HTTP Query\" url=\"http://dict.leo.org/?search=$text.selection\"/>"
80 + "<config name=\"Wikipedia-en\" type-id=\"Wikipedia-Load Text\" url=\"http://en.wikipedia.org/w/index.php?title=$text.wikiname&action=raw\"/>"
81 + "<config name=\"Wikibooks-en\" type-id=\"Wikipedia-Load Text\" url=\"http://en.wikibooks.org/w/index.php?title=$text.wikiname&action=raw\"/>"
82 + "<config name=\"Wikipedia-SQL\" type-id=\"Wikipedia SQL access\" user=\"root\" url=\"jdbc:mysql://localhost/wikidb\"/>"
83 + "</configurations>";
85 public static WikipediaDB fWikiDB = null;
87 private static ConfigurationManager manager;
90 // public static final String IMG_MONITOR_ON = "monitorOn";
92 // public static final String IMG_MONITOR_OFF = "monitorOff";
95 * Creates an image and places it in the image registry.
98 * the identifier for the image
100 * the base URL for the image
102 protected static void createImageDescriptor(WikiEditorPlugin plugin, String id, URL baseURL) {
103 // Delegate to the plugin instance to avoid concurrent class loading problems
104 plugin.privateCreateImageDescriptor(id, baseURL);
107 public static WikiEditorPlugin getDefault() {
112 * Returns the image descriptor for the given image ID. Returns null if there is no such image.
115 * the identifier for the image to retrieve
116 * @return the image associated with the given ID
118 public static ImageDescriptor getImageDescriptor(String id) {
119 // Delegate to the plugin instance to avoid concurrent class loading problems
120 return getDefault().privateGetImageDescriptor(id);
124 * Convenience method to get an image descriptor for an extension
127 * the extension declaring the image
128 * @param subdirectoryAndFilename
129 * the path to the image
132 public static ImageDescriptor getImageDescriptorFromExtension(IExtension extension, String subdirectoryAndFilename) {
133 IPluginDescriptor pluginDescriptor = extension.getDeclaringPluginDescriptor();
134 URL path = pluginDescriptor.getInstallURL();
135 URL fullPathString = null;
137 fullPathString = new URL(path, subdirectoryAndFilename);
138 return ImageDescriptor.createFromURL(fullPathString);
139 } catch (MalformedURLException e) {
144 public static String getResourceString(String key) {
145 ResourceBundle bundle = WikiEditorPlugin.getDefault().getResourceBundle();
147 return (bundle != null) ? bundle.getString(key) : key;
148 } catch (MissingResourceException e) {
154 * Returns the standard display to be used. The method first checks, if the thread calling this method has an associated display.
155 * If so, this display is returned. Otherwise the method returns the default display.
157 public static Display getStandardDisplay() {
158 Display display = Display.getCurrent();
159 if (display == null) {
160 display = Display.getDefault();
165 private ContributionContextTypeRegistry fContextTypeRegistry;
167 private ResourceBundle fResourceBundle;
169 private ContributionTemplateStore fTemplateStore;
171 private Hashtable imageDescriptors = new Hashtable(20);
173 public WikiEditorPlugin(IPluginDescriptor descriptor) {
177 manager = ConfigurationManager.getInstance();
179 fResourceBundle = ResourceBundle.getBundle("net.sourceforge.phpeclipse.wiki.editor.WikiEditorMessages");
180 } catch (MissingResourceException x) {
181 fResourceBundle = null;
186 * Creates an image and places it in the image registry.
188 protected void createImageDescriptor(String id, URL baseURL) {
191 url = new URL(baseURL, ICON_PATH + id);
192 } catch (MalformedURLException e) {
194 ImageDescriptor desc = ImageDescriptor.createFromURL(url);
195 imageDescriptors.put(id, desc);
198 public IWorkbenchPage getActivePage() {
199 IWorkbenchWindow window = getWorkbench().getActiveWorkbenchWindow();
201 return window.getActivePage();
205 public ContextTypeRegistry getContextTypeRegistry() {
206 if (fContextTypeRegistry == null) {
207 fContextTypeRegistry = new ContributionContextTypeRegistry();
208 fContextTypeRegistry.addContextType("net.sourceforge.phpeclipse.wiki.editor.templates");
210 return fContextTypeRegistry;
213 public Image getImage(String key) {
214 Image image = getImageRegistry().get(key);
216 ImageDescriptor d = getImageDescriptor(key);
217 image = d.createImage();
218 getImageRegistry().put(key, image);
223 public ResourceBundle getResourceBundle() {
224 return fResourceBundle;
227 public TemplateStore getTemplateStore() {
228 if (fTemplateStore == null) {
229 fTemplateStore = new ContributionTemplateStore(getContextTypeRegistry(), getDefault().getPreferenceStore(), "templates");
231 fTemplateStore.load();
232 } catch (IOException e) {
237 return fTemplateStore;
243 * @see org.eclipse.ui.plugin.AbstractUIPlugin#initializeDefaultPreferences(org.eclipse.jface.preference.IPreferenceStore)
245 protected void initializeDefaultPreferences(IPreferenceStore store) {
246 store.setDefault(PREF_STRING_CONFIGURATIONS, CONFIG_MEMENTO);
250 * Initializes the table of images used in this plugin. The plugin is provided because this method is called before the plugin
251 * staic variable has been set. See the comment on the getPlugin() method for a description of why this is required.
253 private void initializeImages() {
254 URL baseURL = getDescriptor().getInstallURL();
257 createImageDescriptor("glyphs/glyph1.gif", baseURL); //$NON-NLS-1$
258 createImageDescriptor("glyphs/glyph2.gif", baseURL); //$NON-NLS-1$
259 createImageDescriptor("glyphs/glyph3.gif", baseURL); //$NON-NLS-1$
260 createImageDescriptor("glyphs/glyph4.gif", baseURL); //$NON-NLS-1$
261 createImageDescriptor("glyphs/glyph5.gif", baseURL); //$NON-NLS-1$
262 createImageDescriptor("glyphs/glyph6.gif", baseURL); //$NON-NLS-1$
263 createImageDescriptor("glyphs/glyph7.gif", baseURL); //$NON-NLS-1$
264 createImageDescriptor("glyphs/glyph8.gif", baseURL); //$NON-NLS-1$
268 public void log(String message) {
269 getDefault().getLog().log(new Status(IStatus.OK, PLUGIN_ID, IStatus.OK, message, null));
272 public void log(String message, Exception e) {
273 getDefault().getLog().log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.OK, "Caught exception", e));
276 public void logAndReport(String title, String message, Exception e) {
278 reportError(title, message);
281 private void privateCreateImageDescriptor(String id, URL baseURL) {
284 url = new URL(baseURL, ICON_PATH + id);
285 } catch (MalformedURLException e) {
287 ImageDescriptor desc = ImageDescriptor.createFromURL(url);
288 imageDescriptors.put(id, desc);
291 private ImageDescriptor privateGetImageDescriptor(String id) {
292 if (!imageDescriptors.containsKey(id)) {
293 URL baseURL = WikiEditorPlugin.getDefault().getDescriptor().getInstallURL();
294 createImageDescriptor(getDefault(), id, baseURL);
296 return (ImageDescriptor) imageDescriptors.get(id);
299 public void reportError(String title, String message) {
301 Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
302 MessageDialog.openError(shell, title, message);
303 } catch (RuntimeException e) {
304 log(e.getLocalizedMessage(), e);
308 public void startup() throws CoreException {
313 * Returns the translated String found with the given key.
315 * @return java.lang.String
319 public static String getResource(String key) {
321 return Platform.getResourceString(getDefault().getBundle(), key);
322 } catch (Exception e) {
328 * Returns the translated String found with the given key, and formatted with the given object.
334 * @return java.lang.String
336 public static String getResource(String key, Object[] obj) {
338 return MessageFormat.format(getResource(key), obj);
339 } catch (Exception e) {
345 * Returns the translated String found with the given key, and formatted with the given object.
351 * @return java.lang.String
353 public static String getResource(String key, String s) {
355 return MessageFormat.format(getResource(key), new String[] { s });
356 } catch (Exception e) {
362 * Return a list of all the existing configurations.
364 * @return java.util.List
366 public static List getConfigurations() {
367 return manager.getConfigurations();
371 * Create a new monitor.
373 * @return working copy
375 public static IConfigurationWorkingCopy createConfiguration() {
376 return manager.createConfiguration();
379 public static String[] getTypes() {
380 return CONFIGURATION_TYPES;
386 * @see org.eclipse.core.runtime.Plugin#shutdown()
388 public void shutdown() throws CoreException {
389 if (fWikiDB != null) {
392 } catch (SQLException e) {
398 public static void log(int severity, String message) {
399 Status status = new Status(severity, PLUGIN_ID, IStatus.OK, message, null);
403 public static void log(IStatus status) {
404 getDefault().getLog().log(status);
407 public static void log(Throwable e) {
408 log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, "PHPeclipsePlugin.internalErrorOccurred", e)); //$NON-NLS-1$