public IProducerRegistryAPI createProducerRegistryAPIForUnitTest(){ return new ProducerRegistryAPIImpl(); }
@Override public List<IntervalInfo> getPresentIntervals() { if (_cachedIntervalInfos==null) createIntervalList(); return _cachedIntervalInfos; }
@Override public List<IStatsProducer> getAllProducers() { if (_cachedProducerList==null) buildProducerCacheFromScratch(); List<IStatsProducer> ret = new ArrayList<>(); for (ProducerReference pr : _cachedProducerList){ if (pr.get()!=null) ret.add(pr.get()); } return ret; }
@Override public List<String> getSubsystems() { List<String> ret = new ArrayList<>(); List<IStatsProducer> producers = getAllProducers(); for (IStatsProducer p : producers){ if (! (ret.contains(p.getSubsystem()))) ret.add(p.getSubsystem()); } Collections.sort(ret); return ret; } }
@Override public List<IStatsProducer> getAllProducersByCategory(String category) { return getProducers(new CategoryFilter(category)); }
/** * Rebuilds the caches upon change. */ private void buildProducerCacheFromScratch(){ log.debug("rebuilding producer cache"); synchronized(cacheLock){ if (_cachedProducerList!=null) return; rebuildProducerCache(registry.getProducers()); } }
@Override public IStatsProducer getProducer(String producerId) { if (_cachedProducerList==null) buildProducerCacheFromScratch(); synchronized(cacheLock){ ProducerReference ref = _cachedProducerMap.get(producerId); if (ref==null) throw new NoSuchProducerException(producerId); return ref.get(); } }
@Override public List<String> getCategories() { List<String> ret = new ArrayList<>(); List<IStatsProducer> producers = getAllProducers(); for (IStatsProducer p : producers){ if (! (ret.contains(p.getCategory()))) ret.add(p.getCategory()); } Collections.sort(ret); return ret; }
@Override public List<IStatsProducer> getAllProducersBySubsystem(String subsystem) { return getProducers(new SubsystemFilter(subsystem)); }
@Override public List<IStatsProducer> getProducers(IProducerFilter... filters) { if (_cachedProducerList==null) buildProducerCacheFromScratch(); List <IStatsProducer> ret = new ArrayList<>(); @SuppressWarnings("unchecked") List<ProducerReference> workCopy = (List<ProducerReference>)((ArrayList<ProducerReference>)_cachedProducerList).clone(); for (ProducerReference p : workCopy){ IStatsProducer pp = p.get(); boolean fit = true; if (pp==null) continue; for(IProducerFilter filter: filters) if (!filter.doesFit(pp)){ fit = false; break; } if(fit) ret.add(pp); } return ret; }
public static void resetForUnitTest() { ProducerRegistryAPIFactoryHolder.instance = new ProducerRegistryAPIImpl(); }