/* ********************************************************************** **
** Copyright notice **
** **
** (c) 2005-2009 RSSOwl Development Team **
** http://www.rssowl.org/ **
** **
** All rights reserved **
** **
** This program and the accompanying materials are made available under **
** the terms of the Eclipse Public License v1.0 which accompanies this **
** distribution, and is available at: **
** http://www.rssowl.org/legal/epl-v10.html **
** **
** A copy is found in the file epl-v10.html and important notices to the **
** license from the team is found in the textfile LICENSE.txt distributed **
** in this package. **
** **
** This copyright notice MUST APPEAR in all copies of the file! **
** **
** Contributors: **
** RSSOwl Development Team - initial API and implementation **
** **
** ********************************************************************** */
package org.rssowl.core.internal;
import org.eclipse.core.net.proxy.IProxyService;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.core.runtime.SafeRunner;
import org.eclipse.core.runtime.Status;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.rssowl.core.Owl;
import org.rssowl.core.util.CoreUtils;
import org.rssowl.core.util.LoggingSafeRunnable;
import org.rssowl.core.util.StringUtils;
/**
* The main plugin class to be used in the desktop.
*/
public class Activator extends Plugin {
private static final String CORE_NET_BUNDLE = "org.eclipse.core.net"; //$NON-NLS-1$
private static Activator fgPlugin;
private BundleContext fContext;
private String fVersion;
private IProxyService fProxyService;
private String fNl;
/**
* The constructor.
*/
public Activator() {
fgPlugin = this;
}
/**
* This method is called upon plug-in activation
*/
@Override
public void start(BundleContext context) throws Exception {
super.start(context);
fContext = context;
fVersion = (String) fgPlugin.getBundle().getHeaders().get("Bundle-Version"); //$NON-NLS-1$
fNl= System.getProperty("line.separator"); //$NON-NLS-1$
if (!StringUtils.isSet(fNl))
fNl= "\n"; //$NON-NLS-1$
/* Use the LogBridge as Logger (RCP Only) */
if (!InternalOwl.IS_ECLIPSE)
System.setProperty("org.apache.commons.logging.Log", "org.rssowl.core.internal.LogBridge"); //$NON-NLS-1$ //$NON-NLS-2$
/* Load the Proxy Service */
SafeRunner.run(new LoggingSafeRunnable() {
public void run() throws Exception {
fProxyService = loadProxyService();
}
});
}
private IProxyService loadProxyService() {
Bundle bundle = Platform.getBundle(CORE_NET_BUNDLE);
if (bundle != null) {
ServiceReference ref = bundle.getBundleContext().getServiceReference(IProxyService.class.getName());
if (ref != null)
return (IProxyService) bundle.getBundleContext().getService(ref);
}
if (fProxyService == null)
logError("Proxy service could not be found.", null); //$NON-NLS-1$
return null;
}
/**
* @return Returns the <code>IProxyService</code> providing access to proxy
* related settings.
*/
public IProxyService getProxyService() {
return fProxyService;
}
/**
* This method is called when the plug-in is stopped
*/
@Override
public void stop(BundleContext context) throws Exception {
/* Stop Internal Owl */
SafeRunner.run(new LoggingSafeRunnable() {
public void run() throws Exception {
Owl.shutdown(false);
}
});
/* Check for Log Message from Core */
String logMessages = CoreUtils.getAndFlushLogMessages();
if (logMessages != null && logMessages.length() > 0)
safeLogError(logMessages, null);
/* Log Shutdown Info */
logInfo("RSSOwl Shutting Down (normal)" + fNl); //$NON-NLS-1$
/* Proceed */
super.stop(context);
fContext = null;
fgPlugin = null;
}
/**
* Returns the shared instance.
*
* @return the shared instance
*/
public static Activator getDefault() {
return fgPlugin;
}
/**
* Get this Plugins BundleContext.
*
* @return this Plugins BundleContext.
*/
public BundleContext getContext() {
return fContext;
}
/**
* Returns this Bundles Version Number.
*
* @return this Bundles Version Number.
*/
public String getVersion() {
return fVersion;
}
/**
* Log an Error Message.
*
* @param msg The message to log as Error.
* @param e The occuring Exception to log.
*/
public static void safeLogError(String msg, Throwable e) {
if (fgPlugin != null)
fgPlugin.logError(msg, e);
}
/**
* Log an Info Message.
*
* @param msg The message to log as Info.
*/
public static void safeLogInfo(String msg) {
if (fgPlugin != null)
fgPlugin.logInfo(msg);
}
/**
* Log an Error Message.
*
* @param msg The message to log as Error.
* @param e The occuring Exception to log.
*/
public void logError(String msg, Throwable e) {
if (msg == null)
msg = ""; //$NON-NLS-1$
getLog().log(new Status(IStatus.ERROR, getBundle().getSymbolicName(), IStatus.ERROR, msg, e));
}
/**
* Log an Info Message.
*
* @param msg The message to log as Info.
*/
public void logInfo(String msg) {
if (msg == null)
msg = ""; //$NON-NLS-1$
getLog().log(new Status(IStatus.INFO, getBundle().getSymbolicName(), IStatus.OK, msg, null));
}
/**
* Create a IStatus out of the given message and exception.
*
* @param msg The message describing the information.
* @param e The Exception that occured.
* @return An IStatus out of the given message and exception.
*/
public IStatus createInfoStatus(String msg, Exception e) {
return new Status(IStatus.INFO, Activator.getDefault().getBundle().getSymbolicName(), IStatus.INFO, msg, e);
}
/**
* Create a Warning IStatus out of the given message and exception.
*
* @param msg The message describing the error.
* @param e The Exception that occured.
* @return An IStatus out of the given message and exception.
*/
public IStatus createWarningStatus(String msg, Exception e) {
return new Status(IStatus.WARNING, getBundle().getSymbolicName(), IStatus.WARNING, msg, e);
}
/**
* Create a Error IStatus out of the given message and exception.
*
* @param msg The message describing the error.
* @param e The Exception that occurred.
* @return An IStatus out of the given message and exception.
*/
public IStatus createErrorStatus(String msg, Throwable e) {
return new Status(IStatus.ERROR, getBundle().getSymbolicName(), IStatus.ERROR, msg, e);
}
}