private StatDetails detailsForRange(String id, TimeRange range) { StatDetails result; if( canSearch(range) ){ result = getStorage().loadDetails(id, range.getFromDate(), range.getToDate(), range.getInstance(), range.getType()); if( inMemoryInRange(range) ){ StatDetails current = detailsInMemory(id); if( current != null ){ //we don't want to merge not set stats as it would reset min value to 0 result.getMerged().merge(current.getMerged(), true); } result.setInfo("Added in-memory data. Original info: " + result.getInfo()); } } else { result = detailsInMemory(id); result.setInfo("in-memory data only. Original info: " + result.getInfo()); } return (result != null) ? result : new StatDetails(id, Stat.emptyStat()); }