/*******************************************************************************
* Copyright (c) 2011, 2012 AGETO Service GmbH and others.
* 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.eclipse.org/legal/epl-v10.html.
*
* Contributors:
* Gunnar Wagenknecht - initial API and implementation
*******************************************************************************/
package org.eclipse.gyrex.admin.ui.jobs.internal;
import java.lang.reflect.Field;
import java.net.URL;
import org.eclipse.gyrex.common.runtime.BaseBundleActivator;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.rap.rwt.RWT;
import org.eclipse.swt.widgets.Display;
import org.osgi.framework.BundleContext;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class JobsUiActivator extends BaseBundleActivator {
/** SYMBOLIC_NAME */
public static final String SYMBOLIC_NAME = "org.eclipse.gyrex.admin.ui.jobs";
private static volatile JobsUiActivator instance;
private static final String IMAGE_REGISTRY = JobsUiActivator.class.getName() + "#imageRegistry";
private static final Logger LOG = LoggerFactory.getLogger(JobsUiActivator.class);
/**
* Returns the instance.
*
* @return the instance
*/
public static JobsUiActivator getInstance() {
final JobsUiActivator activator = instance;
if (null == activator)
throw new IllegalArgumentException("inactive");
return activator;
}
/**
* Creates a new instance.
*/
public JobsUiActivator() {
super(SYMBOLIC_NAME);
}
private void createImageDescriptor(final String id, final ImageRegistry reg) {
final URL url = FileLocator.find(getBundle(), new Path(JobsUiImages.ICON_PATH + id), null);
final ImageDescriptor desc = ImageDescriptor.createFromURL(url);
reg.put(id, desc);
}
@Override
protected void doStart(final BundleContext context) throws Exception {
instance = this;
}
@Override
protected void doStop(final BundleContext context) throws Exception {
instance = null;
}
public ImageRegistry getImageRegistry() {
// ImageRegistry must be session scoped in RAP
ImageRegistry imageRegistry = (ImageRegistry) RWT.getUISession().getAttribute(IMAGE_REGISTRY);
if (imageRegistry == null) {
imageRegistry = new ImageRegistry(Display.getCurrent());
initializeImageRegistry(imageRegistry);
RWT.getUISession().setAttribute(IMAGE_REGISTRY, imageRegistry);
}
return imageRegistry;
}
private void initializeImageRegistry(final ImageRegistry reg) {
final Field[] fields = JobsUiImages.class.getFields();
for (final Field field : fields) {
if (field.getName().startsWith("IMG_")) {
try {
createImageDescriptor((String) field.get(null), reg);
} catch (final Exception e) {
LOG.warn("Unable to initialize image ({}) in bundle {}. {}", field.getName(), SYMBOLIC_NAME, ExceptionUtils.getRootCauseMessage(e), e);
}
}
}
}
}