/******************************************************************************* * Copyright (c) 2005, 2010 IBM Corporation 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.equinox.internal.event.mapper; import java.util.Map; import org.osgi.framework.Bundle; import org.osgi.framework.ServiceReference; import org.osgi.service.event.Event; import org.osgi.service.event.EventAdmin; /** * @version $Revision: 1.4 $ */ public abstract class EventAdapter { final EventAdmin eventAdmin; /** * @param eventAdmin */ public EventAdapter(EventAdmin eventAdmin) { this.eventAdmin = eventAdmin; } /** * @return event */ public abstract Event convert(); public void redeliver() { Event converted = convert(); if (converted != null) { redeliverInternal(converted); } } /** * subclasses should override this method if it wants to use sendEvent() * instead. */ protected void redeliverInternal(Event converted) { eventAdmin.postEvent(converted); } public void putBundleProperties(Map<String, Object> properties, Bundle bundle) { // assertion bundle != null properties.put(Constants.BUNDLE_ID, Long.valueOf(bundle.getBundleId())); String symbolicName = bundle.getSymbolicName(); if (symbolicName != null) { properties.put(Constants.BUNDLE_SYMBOLICNAME, symbolicName); } properties.put(Constants.BUNDLE, bundle); } public void putExceptionProperties(Map<String, Object> properties, Throwable t) { // assertion t != null properties.put(Constants.EXCEPTION, t); properties.put(Constants.EXCEPTION_CLASS, t.getClass().getName()); String message = t.getMessage(); if (message != null) { properties.put(Constants.EXCEPTION_MESSAGE, t.getMessage()); } } public void putServiceReferenceProperties(Map<String, Object> properties, ServiceReference<?> ref) { // assertion ref != null properties.put(Constants.SERVICE, ref); properties.put(Constants.SERVICE_ID, ref.getProperty(org.osgi.framework.Constants.SERVICE_ID)); Object o = ref.getProperty(org.osgi.framework.Constants.SERVICE_PID); if ((o != null) && (o instanceof String)) { properties.put(Constants.SERVICE_PID, o); } Object o2 = ref.getProperty(org.osgi.framework.Constants.OBJECTCLASS); if ((o2 != null) && (o2 instanceof String[])) { properties.put(Constants.SERVICE_OBJECTCLASS, o2); } } /* * Utility function for converting classes into strings */ public String[] classes2strings(Class<?>[] classes) { if ((classes == null) || (classes.length == 0)) return null; String[] strings = new String[classes.length]; for (int i = 0; i < classes.length; i++) { strings[i] = classes[i].getName(); } return strings; } }