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); }
@Override public void serviceChanged(ServiceEvent se) { ServiceReference ref = se.getServiceReference(); switch(se.getType()){ case ServiceEvent.REGISTERED: addService(ref); break; case ServiceEvent.MODIFIED_ENDMATCH: case ServiceEvent.UNREGISTERING: removeService(ref); break; case ServiceEvent.MODIFIED: modified(ref); break; } }
/** * Releases the service, stops listening to the Serivce Registry, and * removes all PropertyChangeListeners. */ public void dispose(){ stop(); clearAllListeners(); }
/** * Starts listening for the desired services. * @return true is successful, false if it failed */ public boolean start(){ if(myContext == null){ return false; }else if(myStartFlag){ return true; } myStartFlag = startListening() && collectServiceReferences(); return myStartFlag; }
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(); }
/** * 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; } }
/** * Start tracking dependencies. */ public void start(){ myListeningFlag = true; myRequiredCount = 0; for(DependencyDescriptor desc : myDependencyDescMap.values()){ if(DependencyType.REQUIRED == desc.getDependencyType()){ myRequiredCount++; } } for(SingleServiceListener ssl : myDependencyTrackers.values()){ ssl.start(); } }
@Override public RXTXSerialPort getValue() { if(myTracker == null){ return null; } DynamixelController c = (DynamixelController)myTracker.getService(); if(c == null){ return null; } return c.getPort(); } }
private boolean collectServiceReferences(){ ServiceReference[] refs; try{ refs = myContext.getServiceReferences(myClass.getName(),myFilter); }catch(InvalidSyntaxException ex){ theLogger.log(Level.SEVERE, "There was an error fetching service references.", ex); return false; } if(refs == null){ return true; } for(ServiceReference ref : refs){ if(!myReferences.contains(ref)){ addService(ref); } } return true; }
new SingleServiceListener(clazz, myContext, filterString); ssl.addPropertyChangeListener(new RequirementListener(dependencyName)); myDependencyTrackers.put(dependencyName, ssl); myDependencyDescMap.put(dependencyName, dependencyName, clazz, filterString, type)); if(isRunning()){ return ssl.start();
public DefaultAddOnDriver(BundleContext context, VersionProperty serviceVersion, VersionProperty configFormat, ConfigurationAdapter<AddOn, Config> configAdapter){ if(context == null || serviceVersion == null || configFormat == null || configAdapter == null){ throw new NullPointerException(); } myContext = context; myServiceVersion = serviceVersion; myConfigFormat = configFormat; myConfigAdapter = configAdapter; myAddOnClass = myConfigAdapter.getSerivceClass(); myWriterTracker = ServiceUtils.createWriterServiceListener(context, myConfigAdapter.getConfigurationClass(), File.class, configFormat, null); myWriterTracker.start(); }
@Override public boolean writeServiceConfig(AddOn addon, File file) throws Exception { Config config = myConfigAdapter.createConfig(addon); ConfigurationWriter<Config,File> writer = myWriterTracker.getService(); if(writer == null){ return false; } return writer.writeConfiguration(config, file); }
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); } }