package com.quantum; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.eclipse.core.resources.ISavedState; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IPluginDescriptor; import org.eclipse.core.runtime.Path; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferenceConverter; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.swt.dnd.Clipboard; 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.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xml.sax.SAXException; import com.quantum.model.BookmarkCollection; import com.quantum.util.xml.XMLHelper; import com.quantum.view.subset.SubsetContentProvider; /** * Main class of the quantum plugin, sets defaults, saves and recovers state. * @author root */ public class QuantumPlugin extends AbstractUIPlugin { public final static String PLUGIN_ID = "net.sourceforge.phpeclipse.quantum.sql"; private static QuantumPlugin plugin; private Clipboard sysClip; /** * * TODO: BCH - this constructor has changed in Eclipse 3.0. This * old version of the constructor is still necessary for running under * Eclipse 2.x. * * @param descriptor */ public QuantumPlugin(IPluginDescriptor descriptor) { super(descriptor); plugin = this; } public static QuantumPlugin getDefault() { return plugin; } /** * Reads the Quantum 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(Messages.getString("QuantumPlugin.saveFileExtension"))){ //$NON-NLS-1$ try { // It's the 2.0 format for preferences BookmarkCollection.getInstance().load(target); } catch (IOException e) { e.printStackTrace(); } } else { //It's the 2.1 format for preferences and subsets FileInputStream source = null; try { source = new FileInputStream(target); } catch (FileNotFoundException e1) { e1.printStackTrace(); return; } DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder parser; try { parser = factory.newDocumentBuilder(); Document doc = parser.parse(source); Element root = doc.getDocumentElement(); BookmarkCollection.getInstance().importXML(root); BookmarkCollection.getInstance().setChanged(false); SubsetContentProvider.getInstance().importXML(root); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } /* (non-Javadoc) * @see org.eclipse.core.runtime.Plugin#startup() */ public void startup() throws CoreException { super.startup(); ISavedState lastState = ResourcesPlugin.getWorkspace().addSaveParticipant( this, new QuantumSaveParticipant()); if (lastState != null) { IPath location = lastState.lookup(new Path(Messages.getString("QuantumPlugin.saveDir"))); //$NON-NLS-1$ if (location != null) { // the plugin instance should read any important state from the file. File f = getStateLocation().append(location).toFile(); readStateFrom(f); } } sysClip = new Clipboard(null); } /* (non-Javadoc) * @see org.eclipse.core.runtime.Plugin#shutdown() */ public void shutdown() throws CoreException { // if (!sysClip.isDisposed()) { // sysClip.dispose(); // } super.shutdown(); } /** * Write the bookmarks and subsets to a file, saving them for next use of the quantum plugin * @param target */ protected void writeImportantState(File target) { try { Document document = XMLHelper.createEmptyDocument(); Element root = (Element) document.appendChild( document.createElement(Messages.getString("ExportXMLAction.SavedData"))); //$NON-NLS-1$ BookmarkCollection.getInstance().exportXML(root); SubsetContentProvider.getInstance().exportXML(root); FileWriter writer = new FileWriter(target); try { XMLHelper.write(writer, document); } finally { writer.close(); } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } // public static Image getImage(String name) { // ImageDescriptor imageDescriptor = getImageDescriptor(name); // return imageDescriptor == null ? null : imageDescriptor.createImage(); // } 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, "quantum.background.color", BACKGROUND); //$NON-NLS-1$ PreferenceConverter.setDefault(store, "quantum.text.color", DEFAULT); //$NON-NLS-1$ PreferenceConverter.setDefault(store, "quantum.keyword.color", KEYWORD); //$NON-NLS-1$ PreferenceConverter.setDefault(store, "quantum.comment.color", COMMENT); //$NON-NLS-1$ PreferenceConverter.setDefault(store, "quantum.string.color", STRING); //$NON-NLS-1$ PreferenceConverter.setDefault(store, "quantum.numeric.color", NUMERIC); //$NON-NLS-1$ getPreferenceStore().setDefault("quantum.text.bold", false); //$NON-NLS-1$ getPreferenceStore().setDefault("quantum.keyword.bold", true); //$NON-NLS-1$ getPreferenceStore().setDefault("quantum.string.bold", false); //$NON-NLS-1$ getPreferenceStore().setDefault("quantum.comment.bold", false); //$NON-NLS-1$ getPreferenceStore().setDefault("quantum.numeric.bold", false); //$NON-NLS-1$ PreferenceConverter.setDefault(getPreferenceStore(), "quantum.font", (FontData) null); //$NON-NLS-1$ getPreferenceStore().setDefault("com.quantum.model.Bookmark.queryHistorySize", 20); //$NON-NLS-1$ 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/mysql"); getPreferenceStore().setDefault("phpeclipse.sql.driver.connect", "com.mysql.jdbc.Driver"); getPreferenceStore().setDefault("phpeclipse.sql.type.connect", "MySQL"); getPreferenceStore().setDefault( "phpeclipse.sql.filename.connect", "C:\\wampp2\\mysql\\lib\\mysql-connector.jar"); } // Returns the active page public IWorkbenchPage getActivePage() { IWorkbench workbench = getWorkbench(); IWorkbenchWindow window = workbench.getActiveWorkbenchWindow(); if (window == null) return null; IWorkbenchPage page = window.getActivePage(); return page; } /** * returns a view in the active page, creating it if needed * @param view, the name of the view (e.g com.quantum.view.tableview) * @return true if successful, false if not */ public IViewPart getView(String view) { IViewPart tableView = null; try { IWorkbenchPage page = QuantumPlugin.getDefault().getActivePage(); tableView = page.findView(view); if (tableView == null){ // showView will give focus to the created view, we don't want that // so we save the active part IWorkbenchPart part = page.getActivePart(); tableView = page.showView(view); // and return the focus to it page.activate(part); } } catch (PartInitException e) { e.printStackTrace(); } return tableView; } /** * @return */ public Clipboard getSysClip() { return sysClip; } protected void initializeImageRegistry(ImageRegistry registry) { super.initializeImageRegistry(registry); try { ImageStore.initialize(registry, getIconLocation()); } catch (MalformedURLException e) { // this should never happen, but if it does, we don't get images. } } /** * @return * @throws MalformedURLException */ URL getIconLocation() throws MalformedURLException { URL installURL = QuantumPlugin.getDefault().getDescriptor().getInstallURL(); return new URL(installURL, "icons/"); } }