blob: 04e2d05d26812391502bd05703fdaa6ee5cd94e9 [file] [log] [blame]
/*******************************************************************************
* 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;
}
}