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