| 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); |
| } |
| |
| } |
| } |