@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 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<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; }