/** * Validates the arguments before calling <code>handleChange</code>. * If the service is null and the dependencies are satisfied, a service is * created and <code>handleChange</code> is not called. * @param dependencyName name of the dependency changed * @param dependency new dependency * @param dependencies all available dependencies */ @Override public synchronized void dependencyChanged( String dependencyName, Object dependency, Map<String,Object> dependencies) { if(dependencyName == null){ throw new NullPointerException(); } if(!validate(dependencyName, dependency)){ return; } myStaisfiedFlag = Validator.validateServices(myDescriptors, dependencies); if(myService == null && isSatisfied()){ myService = create(dependencies); return; } handleChange(dependencyName, dependency, dependencies); } /**
@Override public String[] getServiceClassNames(){ if(myServiceClassNames == null){ myServiceClassNames = new String[]{getServiceClass().getName()}; } return myServiceClassNames; }
/** * Removes a dependency after the lifecycle is initialized. * If the dependency was not added after initialization, it will not be * removed. * @param desc dependency to remove * @return true if successful, false if the dependency name is not found, or * does not belong to a runtime dependency. */ protected boolean removeRuntimeDependency(String depName){ if(depName == null){ throw new NullPointerException(); } if(myRuntimeDescriptors == null){ return false; } DependencyDescriptor desc = getRuntimeDescriptor(depName); if(desc == null){ theLogger.log(Level.WARNING, "Could not find optional runtime depenedency {0}", depName); return false; } theLogger.log(Level.INFO, "Removing optional runtime depenedency {0}", depName); myRuntimeDescriptors.remove(desc); myDescriptors.remove(desc); firePropertyChange(PROP_DEPENDENCY_REMOVED, null, desc); return true; }
throw new NullPointerException(); for(DependencyDescriptor d : getDependencyDescriptors()){ if(desc.getDependencyName().equals(d.getDependencyName())){ theLogger.log(Level.WARNING, myDescriptors.add(desc); myRuntimeDescriptors.add(desc); firePropertyChange(PROP_DEPENDENCY_ADDED, null, desc); return true;
@Override public synchronized T getService() { if(!isSatisfied()){ return null; } return myService; }
@Override public synchronized void start(Map<String, Object> dependencies) { if(!Validator.validateServices(myDescriptors, dependencies)){ throw new IllegalArgumentException( "Invalid Dependency set for factory."); } myService = create(dependencies); myStaisfiedFlag = true; }
@Override public synchronized void stop() { cleanupService(myService); super.stop(); }
private boolean validate(String id, Object req){ List<DependencyDescriptor> reqs = getDependencyDescriptors(); if(req != null){ if(Validator.validateService(reqs, id, req)){ return true; } theLogger.log(Level.WARNING, "Invalid service or id. id: {0}, service: {1}", new Object[]{id, req}); return false; } if(Validator.validateServiceId(reqs, id)){ return true; } theLogger.log(Level.WARNING, "Invalid service id: {0}.", id); return false; }