public static <T> SingleServiceListener<T> createIdServiceListener( Class<T> clazz, BundleContext context, String idPropertyName, String idString, String filter){ if(context == null || idPropertyName == null || idString == null){ throw new NullPointerException(); } filter = createIdFilter(idPropertyName, idString, filter); return new SingleServiceListener<T>(clazz, context, filter); }
public static <Conf,Param> SingleServiceListener<ConfigurationWriter<Conf,Param>> createWriterServiceListener(BundleContext context, Class<Conf> configClass, Class<Param> paramClass, VersionProperty configFormat, String serviceFilter){ Properties props = new Properties(); props.put(Constants.CONFIG_FORMAT_VERSION, configFormat.toString()); props.put(Constants.CONFIG_CLASS, configClass.getName()); props.put(Constants.CONFIG_PARAM_CLASS, paramClass.getName()); String writerFilter = OSGiUtils.createServiceFilter(props); if(serviceFilter != null && !serviceFilter.isEmpty()){ writerFilter = "(&"+writerFilter+"("+serviceFilter+"))"; } return new SingleServiceListener( ConfigurationWriter.class, context, serviceFilter); } }
/** * Returns a global RobotManager. The RobotManager is retrieved from the * OSGi Service Registry. * @param context BundleContext for OSGi * @return global RobotManager */ public static RobotManager getRobotManager(BundleContext context){ if(context == null){ throw new NullPointerException(); } if(theManagerTracker == null){ theManagerTracker = new SingleServiceListener( RobotManager.class, context, null); theManagerTracker.start(); } RobotManager manager = theManagerTracker.getService(); if(manager == null){ RobotManager tmp = new RobotManager(context); context.registerService(RobotManager.class.getName(), tmp, null); manager = theManagerTracker.getService(); } if(manager == null){ throw new NullPointerException( "Unknown error registering and tracking RobotManager."); } return manager; } }
new SingleServiceListener(clazz, myContext, filterString); ssl.addPropertyChangeListener(new RequirementListener(dependencyName)); myDependencyTrackers.put(dependencyName, ssl);
public DynamixelTracker(final OpenServoControlLoop osLoop){ BundleContext context = OSGiUtils.getBundleContext(ServoController.class); myTracker = new SingleServiceListener<ServoController>( ServoController.class, context, OSGiUtils.createFilter(ServoController.PROP_VERSION, DynamixelController.VERSION.toString())); myTracker.addPropertyChangeListener(SingleServiceListener.PROP_SERVICE_TRACKED, new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { DynamixelController controller = (DynamixelController)evt.getNewValue(); if(controller == null){ throw new IllegalArgumentException(); } DynamixelControlLoop loop = controller.getControlLoop(); if(loop == null){ throw new IllegalArgumentException(); } loop.setOpenServoLoop(osLoop); } }); myTracker.start(); }