public ArrayList<Long> getSubFiltered(ArrayList<Long> processed, FilterBaseDTO next_filter) { // TODO just rewritten from appengine variant. Here we can optimize on multiple filters in one // sql statement!!!! ArrayList<Long> ids = processed; // if(next_filter instanceof FilterDiapasonDTO) // { // for(FilterBaseDTO dto_sub:((FilterDiapasonDTO) // next_filter).getMulti_dto_proxy().getFilters()) // { // //here we suppose that multifilter is AND-filter (for diapa) // ids = getSubFiltered(processed, dto_sub); // } // }else if (next_filter instanceof FilterMultiDTO) { ArrayList<Long> or_ids = new ArrayList<Long>(); for (FilterBaseDTO dto_sub : ((FilterMultiDTO) next_filter).getFilters()) { // here we suppose that multifilter is OR-filter ArrayList<Long> curr_ids = getSubFiltered(processed, dto_sub); or_ids = union(or_ids, curr_ids); } if (((FilterMultiDTO) next_filter).getFilters().size() > 0) ids = or_ids; } else { String filt = next_filter.getFilter(); if (filt != null && !filt.equals("")) { // Query q = pm.newQuery(SocioResearch.class); String q_str = "SELECT x FROM SocioResearch AS x WHERE "; if (next_filter.getTarget_class_name().equals("SocioResearch")) { q_str += filt; // q.setFilter(filt); } TypedQuery<SocioResearch> tq = em.createQuery(q_str, SocioResearch.class); ArrayList<Long> current_ids = new ArrayList<Long>(); List<SocioResearch> res = tq.getResultList(); for (SocioResearch research : res) { current_ids.add(research.getID()); } ids = intersection(ids, current_ids); } } return ids; }