package de.twenty11.skysail.server.ext.osgimonitor.domain; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.persistence.Transient; import org.osgi.framework.Bundle; import org.osgi.framework.ServiceReference; import org.restlet.data.Reference; import de.twenty11.skysail.common.ext.osgimonitor.domain.BundleDescriptor; public class ServiceDescriptor implements Comparable<ServiceDescriptor> { private static final String SERVICE_ID_IDENTIFIER = "service.id"; private Long serviceId = -1L; private Map<String, Object> properties = new HashMap<String, Object>(); // private de.twenty11.skysail.common.navigation.Reference providingBundle; @Transient private Map<String, String> links; @Transient private List<BundleDescriptor> usingBundles = new ArrayList<BundleDescriptor>(); @Transient private Reference reference; /** * Default constructor, needed for // TODO */ public ServiceDescriptor() { } public ServiceDescriptor(ServiceReference sr, Reference reference) { // providingBundle = new de.twenty11.skysail.common.navigation.Reference(null);// new // BundleDescriptor(sr.getBundle())); this.reference = reference; handleUsingBundles(sr, reference); handlePropertyKeys(sr); } public Map<String, Object> getProperties() { return properties; } public void setProperties(Map<String, Object> properties) { this.properties = properties; } @Override public int compareTo(ServiceDescriptor other) { return serviceId.compareTo(other.getServiceId()); } public Long getServiceId() { return serviceId; } // public String getProvidingBundle() { // return providingBundle.toHtmlLink(); // } @Override public String toString() { return serviceId + " [" + ((Object[]) properties.get("objectClass"))[0] + "]"; } private void handleUsingBundles(ServiceReference sr, Reference reference) { if (sr.getUsingBundles() != null) { for (Bundle usingBundle : sr.getUsingBundles()) { usingBundles.add(null);// new BundleDescriptor(usingBundle)); } } } private void handlePropertyKeys(ServiceReference sr) { String[] propertyKeys = sr.getPropertyKeys(); for (String key : propertyKeys) { if (SERVICE_ID_IDENTIFIER.equals(key)) { serviceId = (Long) sr.getProperty(SERVICE_ID_IDENTIFIER); } else { properties.put(key, sr.getProperty(key)); } } } }