blob: 12e710ca922ded281079e87ae60db7bce7cdff3f [file] [log] [blame]
package org.eclipse.bpel.validator;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import org.eclipse.bpel.fnmeta.model.FMPackage;
import org.eclipse.bpel.model.BPELPackage;
import org.eclipse.bpel.model.adapters.AdapterRegistry;
import org.eclipse.bpel.validator.factory.BPELValidatorAdapterFactory;
import org.eclipse.bpel.validator.factory.FunctionMetaValidatorAdapterFactory;
import org.eclipse.bpel.validator.helpers.ModelQueryImpl;
import org.eclipse.bpel.validator.model.IFactory;
import org.eclipse.bpel.validator.model.IModelQuery;
import org.eclipse.bpel.validator.model.RuleFactory;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*/
@SuppressWarnings("nls")
public class Activator extends Plugin {
/** The plug-in ID */
public static final String PLUGIN_ID = "org.eclipse.bpel.validator"; //$NON-NLS-1$
/** The shared instance */
static Activator plugin;
/**
* The constructor
*/
public Activator() {
// nothing
}
/**
* (non-Javadoc)
* @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext)
*/
@Override
public void start (BundleContext context) throws Exception {
super.start(context);
plugin = this;
// hook up Java logging to the Eclipse error log
Logger logger = Logger.getLogger( PLUGIN_ID );
Handler handler = new LogHandler();
logger.addHandler( handler );
initializeAndTime();
}
void initialize () {
// factories
String epName = "factories";
IExtensionPoint ep = Platform.getExtensionRegistry().getExtensionPoint(PLUGIN_ID,epName);
if (ep != null) {
for(IExtension e : ep.getExtensions() ) {
for(IConfigurationElement ce : e.getConfigurationElements() ) {
Object obj = null;
try {
obj = ce.createExecutableExtension("class");
} catch (CoreException e1) {
log(e1);
}
if (obj != null && obj instanceof IFactory) {
RuleFactory.INSTANCE.registerFactory( (IFactory) obj);
}
}
}
} else {
String name = PLUGIN_ID + "." + epName;
log(null,IStatus.ERROR,"Extension point " + name + " is not avaialble.");
}
// modelQuery
epName = "modelQuery";
ep = Platform.getExtensionRegistry().getExtensionPoint(PLUGIN_ID,epName);
if (ep != null) {
for(IExtension e : ep.getExtensions() ) {
for(IConfigurationElement ce : e.getConfigurationElements() ) {
Object obj = null;
try {
obj = ce.createExecutableExtension("class");
} catch (CoreException e1) {
log(e1);
}
if (obj != null && obj instanceof IModelQuery) {
ModelQueryImpl.register( (IModelQuery) obj);
}
}
}
} else {
String name = PLUGIN_ID + "." + epName;
log(null,IStatus.ERROR,"Extension point " + name + " is not avaialble.");
}
// Register our adapter providers
AdapterRegistry.INSTANCE.registerAdapterFactory(
FMPackage.eINSTANCE, FunctionMetaValidatorAdapterFactory.INSTANCE );
AdapterRegistry.INSTANCE.registerAdapterFactory(
BPELPackage.eINSTANCE, BPELValidatorAdapterFactory.INSTANCE );
}
IStatus initializeAndTime () {
long start = System.currentTimeMillis();
initialize ();
long end = System.currentTimeMillis();
IStatus status = new Status(IStatus.INFO, PLUGIN_ID, 0,
"Validator Startup " + (end - start) + "ms"
,null);
return status;
}
void initializeAsync ( ) {
Job job = new Job ("Registering Validator factories ...") {
@Override
protected IStatus run (IProgressMonitor monitor) {
IStatus status = initializeAndTime();
monitor.done();
done(Job.ASYNC_FINISH);
return status;
}
};
job.setPriority(Job.SHORT);
job.schedule();
}
/**
* (non-Javadoc)
* @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
*/
@Override
public void stop(BundleContext context) throws Exception {
plugin = null;
AdapterRegistry.INSTANCE.unregisterAdapterFactory(
FMPackage.eINSTANCE, FunctionMetaValidatorAdapterFactory.INSTANCE );
AdapterRegistry.INSTANCE.registerAdapterFactory(
BPELPackage.eINSTANCE, BPELValidatorAdapterFactory.INSTANCE );
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static Activator getDefault() {
return plugin;
}
/**
* Utility methods for logging exceptions.
* @param e exception to log
* @param severity the severity to log the exception as.
* @param message
*/
public static void log (Exception e, int severity, String message ) {
IStatus status = null;
if (e instanceof CoreException) {
status = ((CoreException)e).getStatus();
} else {
String m = message;
if (m == null) {
e.getMessage();
}
status = new Status(severity, PLUGIN_ID, 0, m==null? "<no message>" : m, e); //$NON-NLS-1$
}
plugin.getLog().log(status);
}
/**
* Log an exception.
* @param e exception the log
*/
public static void log(Exception e) {
log(e, IStatus.ERROR,null);
}
class LogHandler extends Handler {
/** (non-Javadoc)
* @see java.util.logging.Handler#close()
*/
@Override
public void close() throws SecurityException {
}
/** (non-Javadoc)
* @see java.util.logging.Handler#flush()
*/
@Override
public void flush() {
}
/** (non-Javadoc)
* @see java.util.logging.Handler#publish(java.util.logging.LogRecord)
*/
@SuppressWarnings("nls")
@Override
public void publish (LogRecord record) {
StringBuilder sb = new StringBuilder();
sb.append(record.getThreadID());
sb.append(":");
sb.append(record.getLoggerName());
sb.append(":");
sb.append(record.getMessage());
Throwable t = record.getThrown();
int severity = IStatus.INFO;
if (record.getLevel() == Level.SEVERE) {
severity = IStatus.ERROR;
} else if (record.getLevel() == Level.WARNING) {
severity = IStatus.WARNING;
}
IStatus status = new Status(severity, PLUGIN_ID, 0,sb.toString() , t); //$NON-NLS-1$
plugin.getLog().log(status);
}
}
}