/** * Copyright (c) 2009 Bestsolution.at and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * Tom Schindl<tom.schindl@bestsolution.at> - Initial API and implementation */ package org.eclipse.emf.example.databinding.project.ui.rcp; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.eclipse.emf.examples.databinding.project.core.IModelLoadingService; import org.eclipse.emf.examples.databinding.project.core.IModelResource; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceEvent; import org.osgi.framework.ServiceListener; import org.osgi.framework.ServiceReference; import org.osgi.util.tracker.ServiceTracker; /** * The activator class controls the plug-in life cycle */ public class Activator extends AbstractUIPlugin implements ServiceListener { /** * The plug-in ID */ public static final String PLUGIN_ID = "org.eclipse.emf.examples.databinding.project.ui.rcp"; // The shared instance private static Activator plugin; @SuppressWarnings("rawtypes") private ServiceTracker tracker; private IModelLoadingService loadingService; private BundleContext context; /** * The constructor */ public Activator() { } @Override @SuppressWarnings({ "unchecked", "rawtypes" }) public void start(BundleContext context) throws Exception { super.start(context); this.context = context; plugin = this; tracker = new ServiceTracker(context, IModelLoadingService.class.getName(), null); tracker.open(); loadingService = (IModelLoadingService)tracker.getService(); context.addServiceListener(this, "(objectclass=" + IModelLoadingService.class.getName() + ")"); } @Override public void stop(BundleContext context) throws Exception { plugin = null; tracker.close(); tracker = null; super.stop(context); } /** * Returns the shared instance * * @return the shared instance */ public static Activator getDefault() { return plugin; } /** * Returns an image descriptor for the image file at the given * plug-in relative path * * @param path the path * @return the image descriptor */ public static ImageDescriptor getImageDescriptor(String path) { return imageDescriptorFromPlugin(PLUGIN_ID, path); } /** * Load the model resource * @param uri the uri * @return the resource */ public IModelResource loadResource(String uri) { if (loadingService != null) { return loadingService.findAndLoadResource(uri); } else { getDefault().getLog().log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Model loading service not available")); } return null; } @SuppressWarnings({ "rawtypes", "unchecked" }) public void serviceChanged(ServiceEvent event) { ServiceReference sr = event.getServiceReference(); switch (event.getType()) { case ServiceEvent.REGISTERED: { loadingService = (IModelLoadingService)context.getService(sr); } break; case ServiceEvent.UNREGISTERING: { loadingService = null; } break; } } public void log(Throwable throwable) { String message = throwable.getLocalizedMessage(); if (message == null) { message = ""; } getLog().log(new Status(IStatus.WARNING, getBundle().getSymbolicName(), 0, message, throwable)); } }