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_SQL = "Wikipedia SQL access";
 
  48   public static final String BLOG_A_WIKI = "Blog as Wiki Text";
 
  50   public static final String BLOG_A_HTML = "Blog as HTML Text";
 
  52   public static final String[] CONFIGURATION_TYPES = { HTTP_QUERY, WIKIPEDIA_GET_TEXT, WIKIPEDIA_SQL, BLOG_A_WIKI, BLOG_A_HTML };
 
  55   public static final String ICON_PATH = "icons/full/"; //$NON-NLS-1$
 
  57   public final static String PLUGIN_ID = "net.sourceforge.phpeclipse.wiki";
 
  59   public final static String HTML_OUTPUT_PATH = "__static_wiki_folder";
 
  61   public final static String WIKI_TEXTS_BASE_PATH = "__wiki_texts_base_path";
 
  63   public final static String LOCAL_TEMPLATE_FILE_NAME = "__local_template_file_name";
 
  65   public final static String EXPORT_TEMPLATE_FILE_NAME = "__export_template_file_name";
 
  67   public final static String LOCAL_CSS_URL = "__local_css_url";
 
  69   public final static String EXPORT_CSS_URL = "__export_css_url";
 
  71   public final static String PREF_STRING_CONFIGURATIONS = "configurations";
 
  73   public final static String CONFIG_MEMENTO = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
 
  75       + "<config name=\"Google Search\" type-id=\"HTTP Query\" url=\"http://www.google.com/search?q=$text.selection\"/>"
 
  76       + "<config name=\"Koders.com Search\" type-id=\"HTTP Query\" url=\"http://koders.com/?s=$text.selection\"/>"
 
  77       + "<config name=\"Leo.org Translation\" type-id=\"HTTP Query\" url=\"http://dict.leo.org/?search=$text.selection\"/>"
 
  78       + "<config name=\"Wikipedia-en\" type-id=\"Wikipedia-Load Text\" url=\"http://en.wikipedia.org/w/wiki.phtml?title=$text.wikiname&action=edit\"/>"
 
  79       + "<config name=\"Wikibooks-en\" type-id=\"Wikipedia-Load Text\" url=\"http://en.wikibooks.org/w/index.php?title=$text.wikiname&action=edit\"/>"
 
  80       + "<config name=\"Wikipedia-SQL\" type-id=\"Wikipedia SQL access\" user=\"root\" url=\"jdbc:mysql://localhost/wikidb\"/>"
 
  81       + "</configurations>";
 
  83   public static WikipediaDB fWikiDB = null;
 
  85   private static ConfigurationManager manager;
 
  88   //  public static final String IMG_MONITOR_ON = "monitorOn";
 
  90   //  public static final String IMG_MONITOR_OFF = "monitorOff";
 
  93    * Creates an image and places it in the image registry.
 
  96    *          the identifier for the image
 
  98    *          the base URL for the image
 
 100   protected static void createImageDescriptor(WikiEditorPlugin plugin, String id, URL baseURL) {
 
 101     // Delegate to the plugin instance to avoid concurrent class loading problems
 
 102     plugin.privateCreateImageDescriptor(id, baseURL);
 
 105   public static WikiEditorPlugin getDefault() {
 
 110    * Returns the image descriptor for the given image ID. Returns null if there is no such image.
 
 113    *          the identifier for the image to retrieve
 
 114    * @return the image associated with the given ID
 
 116   public static ImageDescriptor getImageDescriptor(String id) {
 
 117     // Delegate to the plugin instance to avoid concurrent class loading problems
 
 118     return getDefault().privateGetImageDescriptor(id);
 
 122    * Convenience method to get an image descriptor for an extension
 
 125    *          the extension declaring the image
 
 126    * @param subdirectoryAndFilename
 
 127    *          the path to the image
 
 130   public static ImageDescriptor getImageDescriptorFromExtension(IExtension extension, String subdirectoryAndFilename) {
 
 131     IPluginDescriptor pluginDescriptor = extension.getDeclaringPluginDescriptor();
 
 132     URL path = pluginDescriptor.getInstallURL();
 
 133     URL fullPathString = null;
 
 135       fullPathString = new URL(path, subdirectoryAndFilename);
 
 136       return ImageDescriptor.createFromURL(fullPathString);
 
 137     } catch (MalformedURLException e) {
 
 142   public static String getResourceString(String key) {
 
 143     ResourceBundle bundle = WikiEditorPlugin.getDefault().getResourceBundle();
 
 145       return (bundle != null) ? bundle.getString(key) : key;
 
 146     } catch (MissingResourceException e) {
 
 152    * Returns the standard display to be used. The method first checks, if the thread calling this method has an associated display.
 
 153    * If so, this display is returned. Otherwise the method returns the default display.
 
 155   public static Display getStandardDisplay() {
 
 156     Display display = Display.getCurrent();
 
 157     if (display == null) {
 
 158       display = Display.getDefault();
 
 163   private ContributionContextTypeRegistry fContextTypeRegistry;
 
 165   private ResourceBundle fResourceBundle;
 
 167   private ContributionTemplateStore fTemplateStore;
 
 169   private Hashtable imageDescriptors = new Hashtable(20);
 
 171   public WikiEditorPlugin(IPluginDescriptor descriptor) {
 
 175     manager = ConfigurationManager.getInstance();
 
 177       fResourceBundle = ResourceBundle.getBundle("net.sourceforge.phpeclipse.wiki.editor.WikiEditorMessages");
 
 178     } catch (MissingResourceException x) {
 
 179       fResourceBundle = null;
 
 184    * Creates an image and places it in the image registry.
 
 186   protected void createImageDescriptor(String id, URL baseURL) {
 
 189       url = new URL(baseURL, ICON_PATH + id);
 
 190     } catch (MalformedURLException e) {
 
 192     ImageDescriptor desc = ImageDescriptor.createFromURL(url);
 
 193     imageDescriptors.put(id, desc);
 
 196   public IWorkbenchPage getActivePage() {
 
 197     IWorkbenchWindow window = getWorkbench().getActiveWorkbenchWindow();
 
 199       return window.getActivePage();
 
 203   public ContextTypeRegistry getContextTypeRegistry() {
 
 204     if (fContextTypeRegistry == null) {
 
 205       fContextTypeRegistry = new ContributionContextTypeRegistry();
 
 206       fContextTypeRegistry.addContextType("net.sourceforge.phpeclipse.wiki.editor.templates");
 
 208     return fContextTypeRegistry;
 
 211   public Image getImage(String key) {
 
 212     Image image = getImageRegistry().get(key);
 
 214       ImageDescriptor d = getImageDescriptor(key);
 
 215       image = d.createImage();
 
 216       getImageRegistry().put(key, image);
 
 221   public ResourceBundle getResourceBundle() {
 
 222     return fResourceBundle;
 
 225   public TemplateStore getTemplateStore() {
 
 226     if (fTemplateStore == null) {
 
 227       fTemplateStore = new ContributionTemplateStore(getContextTypeRegistry(), getDefault().getPreferenceStore(), "templates");
 
 229         fTemplateStore.load();
 
 230       } catch (IOException e) {
 
 235     return fTemplateStore;
 
 241    * @see org.eclipse.ui.plugin.AbstractUIPlugin#initializeDefaultPreferences(org.eclipse.jface.preference.IPreferenceStore)
 
 243   protected void initializeDefaultPreferences(IPreferenceStore store) {
 
 244     store.setDefault(PREF_STRING_CONFIGURATIONS, CONFIG_MEMENTO);
 
 248    * Initializes the table of images used in this plugin. The plugin is provided because this method is called before the plugin
 
 249    * staic variable has been set. See the comment on the getPlugin() method for a description of why this is required.
 
 251   private void initializeImages() {
 
 252     URL baseURL = getDescriptor().getInstallURL();
 
 255     createImageDescriptor("glyphs/glyph1.gif", baseURL); //$NON-NLS-1$
 
 256     createImageDescriptor("glyphs/glyph2.gif", baseURL); //$NON-NLS-1$
 
 257     createImageDescriptor("glyphs/glyph3.gif", baseURL); //$NON-NLS-1$
 
 258     createImageDescriptor("glyphs/glyph4.gif", baseURL); //$NON-NLS-1$
 
 259     createImageDescriptor("glyphs/glyph5.gif", baseURL); //$NON-NLS-1$
 
 260     createImageDescriptor("glyphs/glyph6.gif", baseURL); //$NON-NLS-1$
 
 261     createImageDescriptor("glyphs/glyph7.gif", baseURL); //$NON-NLS-1$
 
 262     createImageDescriptor("glyphs/glyph8.gif", baseURL); //$NON-NLS-1$
 
 266   public void log(String message) {
 
 267     getDefault().getLog().log(new Status(IStatus.OK, PLUGIN_ID, IStatus.OK, message, null));
 
 270   public void log(String message, Exception e) {
 
 271     getDefault().getLog().log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.OK, "Caught exception", e));
 
 274   public void logAndReport(String title, String message, Exception e) {
 
 276     reportError(title, message);
 
 279   private void privateCreateImageDescriptor(String id, URL baseURL) {
 
 282       url = new URL(baseURL, ICON_PATH + id);
 
 283     } catch (MalformedURLException e) {
 
 285     ImageDescriptor desc = ImageDescriptor.createFromURL(url);
 
 286     imageDescriptors.put(id, desc);
 
 289   private ImageDescriptor privateGetImageDescriptor(String id) {
 
 290     if (!imageDescriptors.containsKey(id)) {
 
 291       URL baseURL = WikiEditorPlugin.getDefault().getDescriptor().getInstallURL();
 
 292       createImageDescriptor(getDefault(), id, baseURL);
 
 294     return (ImageDescriptor) imageDescriptors.get(id);
 
 297   public void reportError(String title, String message) {
 
 299       Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
 
 300       MessageDialog.openError(shell, title, message);
 
 301     } catch (RuntimeException e) {
 
 302       log(e.getLocalizedMessage(), e);
 
 306   public void startup() throws CoreException {
 
 311    * Returns the translated String found with the given key.
 
 313    * @return java.lang.String
 
 317   public static String getResource(String key) {
 
 319       return Platform.getResourceString(getDefault().getBundle(), key);
 
 320     } catch (Exception e) {
 
 326    * Returns the translated String found with the given key, and formatted with the given object.
 
 332    * @return java.lang.String
 
 334   public static String getResource(String key, Object[] obj) {
 
 336       return MessageFormat.format(getResource(key), obj);
 
 337     } catch (Exception e) {
 
 343    * Returns the translated String found with the given key, and formatted with the given object.
 
 349    * @return java.lang.String
 
 351   public static String getResource(String key, String s) {
 
 353       return MessageFormat.format(getResource(key), new String[] { s });
 
 354     } catch (Exception e) {
 
 360    * Return a list of all the existing configurations.
 
 362    * @return java.util.List
 
 364   public static List getConfigurations() {
 
 365     return manager.getConfigurations();
 
 369    * Create a new monitor.
 
 371    * @return working copy
 
 373   public static IConfigurationWorkingCopy createConfiguration() {
 
 374     return manager.createConfiguration();
 
 377   public static String[] getTypes() {
 
 378     return CONFIGURATION_TYPES;
 
 384    * @see org.eclipse.core.runtime.Plugin#shutdown()
 
 386   public void shutdown() throws CoreException {
 
 387     if (fWikiDB != null) {
 
 390       } catch (SQLException e) {
 
 396   public static void log(int severity, String message) {
 
 397     Status status = new Status(severity, PLUGIN_ID, IStatus.OK, message, null);
 
 401   public static void log(IStatus status) {
 
 402     getDefault().getLog().log(status);
 
 405   public static void log(Throwable e) {
 
 406     log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, "PHPeclipsePlugin.internalErrorOccurred", e)); //$NON-NLS-1$