/*
* ====================================================================
*
* The ObjectStyle Group Software License, Version 1.0
*
* Copyright (c) 2005 The ObjectStyle Group and individual authors of the
* software. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowlegement: "This product includes software
* developed by the ObjectStyle Group (http://objectstyle.org/)." Alternately,
* this acknowlegement may appear in the software itself, if and wherever such
* third-party acknowlegements normally appear.
*
* 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse
* or promote products derived from this software without prior written
* permission. For written permission, please contact andrus@objectstyle.org.
*
* 5. Products derived from this software may not be called "ObjectStyle" nor
* may "ObjectStyle" appear in their names without prior written permission of
* the ObjectStyle Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* OBJECTSTYLE GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the ObjectStyle Group. For more information on the ObjectStyle
* Group, please see <http://objectstyle.org/>.
*
*/
package org.objectstyle.wolips.baseforuiplugins;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.ITextEditor;
import org.osgi.framework.BundleContext;
public abstract class AbstractBaseUIActivator extends AbstractUIPlugin {
// Resource bundle.
private ResourceBundle resourceBundle;
// The shared instance.
private static AbstractBaseUIActivator Plugin;
private boolean debug = true;
private String bundleID;
/**
* The constructor.
*/
public AbstractBaseUIActivator() {
super();
AbstractBaseUIActivator.Plugin = this;
}
public final String getBundleID() {
if (bundleID == null) {
bundleID = this.getClass().getName() + "Resources";
}
return bundleID;
}
/**
* This method is called when the plug-in is stopped
*/
public void stop(BundleContext context) throws Exception {
super.stop(context);
this.resourceBundle = null;
}
/**
* Returns the string from the plugin's resource bundle, or 'key' if not
* found.
*/
public final static String getResourceString(String key) {
ResourceBundle bundle = AbstractBaseUIActivator.Plugin.getResourceBundle();
try {
return (bundle != null) ? bundle.getString(key) : key;
} catch (MissingResourceException e) {
return key;
}
}
/**
* Returns the plugin's resource bundle,
*/
public final ResourceBundle getResourceBundle() {
try {
if (this.resourceBundle == null)
this.resourceBundle = ResourceBundle.getBundle(this.getBundleID());
} catch (MissingResourceException x) {
this.resourceBundle = null;
}
return this.resourceBundle;
}
/**
* Prints an IStatus.
*
* @param status
*/
public void log(IStatus status) {
this.getLog().log(status);
}
/**
* Prints a message.
*
* @param message
*/
public void log(Object message) {
this.log(new Status(IStatus.ERROR, this.getBundleID(), IStatus.ERROR, "" + message, null));
}
/**
* Prints a Throwable.
*
* @param e
*/
public void log(Throwable e) {
this.log(new Status(IStatus.ERROR, this.getBundleID(), IStatus.ERROR, "Internal Error", e)); //$NON-NLS-1$
}
/**
* Prints a Throwable.
*
* @param message
* @param e
*/
public void log(Object message, Throwable e) {
this.log(new Status(IStatus.ERROR, this.getBundleID(), IStatus.ERROR, "" + message, e)); //$NON-NLS-1$
}
/**
* If debug is true this method prints an Exception to the log.
*
* @param aThrowable
*/
public void debug(Throwable aThrowable) {
if (this.debug) {
this.log(new Status(IStatus.WARNING, this.getBundleID(), IStatus.WARNING, aThrowable.getMessage(), aThrowable)); //$NON-NLS-1$
}
}
/**
* @param message
* @param t
*/
public void debug(Object message, Throwable t) {
if (this.debug) {
this.log(new Status(IStatus.WARNING, this.getBundleID(), IStatus.WARNING, "" + message, t)); //$NON-NLS-1$
}
}
/**
* @param message
*/
public void debug(Object message) {
if (this.debug) {
this.log(new Status(IStatus.WARNING, this.getBundleID(), IStatus.WARNING, "" + message, null)); //$NON-NLS-1$
}
}
public void publicSaveDialogSettings() {
saveDialogSettings();
}
public final void selectAndReveal(final IFile file) {
this.selectAndReveal(file, null, IEditorTarget.TARGET_UNDEFINED);
}
public final void selectAndReveal(final IFile file, final String string, final int targetEditorID) {
IWorkbenchWindow[] workbenchWindows = PlatformUI.getWorkbench().getWorkbenchWindows();
for (int i = 0; i < workbenchWindows.length; i++) {
final IWorkbenchPage workbenchPage = workbenchWindows[i].getActivePage();
if (workbenchPage != null) {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
runSelectAndReveal(workbenchPage, file, string, targetEditorID);
}
});
}
}
}
protected void runSelectAndReveal(IWorkbenchPage workbenchPage, IFile file, String string, int targetEditorID) {
try {
IEditorPart editorPart = IDE.openEditor(workbenchPage, file, true);
if (string != null && string.length() > 0 && editorPart != null && editorPart instanceof ITextEditor) {
if (editorPart instanceof IEditorTarget) {
IEditorTarget editorTarget = (IEditorTarget) editorPart;
editorPart = editorTarget.switchTo(targetEditorID);
}
ITextEditor textEditor = (ITextEditor) editorPart;
IDocumentProvider documentProvider = textEditor.getDocumentProvider();
IDocument document = documentProvider.getDocument(textEditor.getEditorInput());
// it's deprecated but the sse does not provide a
// FindReplaceDocumentAdapter
int offset = document.search(0, string, true, true, false);
if (offset >= 0) {
textEditor.selectAndReveal(offset, string.length());
}
// if (document instanceof IAdaptable) {
// IAdaptable adaptable = (IAdaptable) document;
// FindReplaceDocumentAdapter findReplaceDocumentAdapter =
// (FindReplaceDocumentAdapter)
// adaptable.getAdapter(FindReplaceDocumentAdapter.class);
// if (findReplaceDocumentAdapter != null) {
// IRegion region = findReplaceDocumentAdapter.find(0, string,
// true, true, false, false);
// if (region != null) {
// textEditor.selectAndReveal(region.getOffset(),
// region.getLength());
// }
// }
// }
}
} catch (BadLocationException e) {
this.log(e);
} catch (PartInitException e) {
this.log(e);
}
}
}