/** * Runs a JPA query and returns the results. * * @param em The entity manager to use to retrieve the beans. * @param query The JPA query. * @param t The bean type. */ protected <T> List<T> query(EntityManager em, String query, Class<T> t, SearchArgs searchArgs) { TypedQuery<T> q = em.createQuery(query, t); if (searchArgs != null) { q.setMaxResults(searchArgs.getLimit() == 0 ? 100 : searchArgs.getLimit()); q.setFirstResult(searchArgs.getPosition()); } return em.createQuery(query, t).getResultList(); }
/** * Construct the {@link SearchArgs} object. * * <p> * This method can be called multiple times to construct new objects. * * @return A new {@link SearchArgs} object initialized with values in this builder. */ public SearchArgs build() { return new SearchArgs(this); } }
CollectionFilter filter = new CollectionFilter(args.getSearch(), args.isIgnoreCase()); filter.doQuery(l); Map<String,Boolean> sort = args.getSort(); List<String> view = args.getView(); int pos = args.getPosition(); int limit = args.getLimit(); if (pos != 0 || limit != 0) { int end = (limit == 0 || limit+pos >= l.size()) ? l.size() : limit + pos;
@Test public void testFilterCollectionIntSearchOneLevel() throws Exception { BeanSession session = BeanContext.DEFAULT.createSession(); SearchArgs sa; List results; List<C> in = new AList<C>() .append(new C(1)) .append(new C(2)) .append(new C(3)) ; PojoQuery q = new PojoQuery(in, session); sa = SearchArgs.builder().search("f=1").build(); results = q.filter(sa); assertObjectEquals("[{f:1}]", results); sa = SearchArgs.builder().search("f>1").build(); results = q.filter(sa); assertObjectEquals("[{f:2},{f:3}]", results); sa = SearchArgs.builder().search("f>=2").build(); results = q.filter(sa); assertObjectEquals("[{f:2},{f:3}]", results); sa = SearchArgs.builder().search("f<=2").build(); results = q.filter(sa); assertObjectEquals("[{f:1},{f:2}]", results); sa = SearchArgs.builder().search("f<2").build(); results = q.filter(sa); assertObjectEquals("[{f:1}]", results); sa = SearchArgs.builder().search("f=1 3").build(); results = q.filter(sa); assertObjectEquals("[{f:1},{f:3}]", results); }
CollectionFilter filter = new CollectionFilter(args.getSearch(), args.isIgnoreCase()); filter.doQuery(l); Map<String,Boolean> sort = args.getSort(); List<String> view = args.getView(); int pos = args.getPosition(); int limit = args.getLimit(); if (pos != 0 || limit != 0) { int end = (limit == 0 || limit+pos >= l.size()) ? l.size() : limit + pos;
@Test public void testFilterCollectionViewOneLevel() throws Exception { BeanSession session = BeanContext.DEFAULT.createSession(); SearchArgs sa; List results; List<E> in = new AList<E>() .append(new E("foo", 1, true)) .append(new E("bar", 2, false)) .append(new E("baz", 3, true)) ; PojoQuery q = new PojoQuery(in, session); sa = SearchArgs.builder().view("f1").build(); results = q.filter(sa); assertObjectEquals("[{f1:'foo'},{f1:'bar'},{f1:'baz'}]", results); sa = SearchArgs.builder().view("f2").build(); results = q.filter(sa); assertObjectEquals("[{f2:1},{f2:2},{f2:3}]", results); sa = SearchArgs.builder().view("f3").build(); results = q.filter(sa); assertObjectEquals("[{f3:true},{f3:false},{f3:true}]", results); sa = SearchArgs.builder().view("f3,f2,f1").build(); results = q.filter(sa); assertObjectEquals("[{f3:true,f2:1,f1:'foo'},{f3:false,f2:2,f1:'bar'},{f3:true,f2:3,f1:'baz'}]", results); }
CollectionFilter filter = new CollectionFilter(args.getSearch(), args.isIgnoreCase()); filter.doQuery(l); Map<String,Boolean> sort = args.getSort(); List<String> view = args.getView(); int pos = args.getPosition(); int limit = args.getLimit(); if (pos != 0 || limit != 0) { int end = (limit == 0 || limit+pos >= l.size()) ? l.size() : limit + pos;
/** * Runs a JPA query and returns the results. * * @param em The entity manager to use to retrieve the beans. * @param query The JPA query. * @param t The bean type. */ protected <T> List<T> query(EntityManager em, String query, Class<T> t, SearchArgs searchArgs) { TypedQuery<T> q = em.createQuery(query, t); if (searchArgs != null) { q.setMaxResults(searchArgs.getLimit() == 0 ? 100 : searchArgs.getLimit()); q.setFirstResult(searchArgs.getPosition()); } return em.createQuery(query, t).getResultList(); }
/** * Construct the {@link SearchArgs} object. * * <p> * This method can be called multiple times to construct new objects. * * @return A new {@link SearchArgs} object initialized with values in this builder. */ public SearchArgs build() { return new SearchArgs(this); } }
@Test public void testFilterCollectionStringSearchOneLevel() throws Exception { SearchArgs sa; List results; List<A> in = new AList<A>() .append(new A("foo")) .append(new A("bar")) .append(new A("baz")) ; PojoQuery q = new PojoQuery(in, BeanContext.DEFAULT.createSession()); sa = SearchArgs.builder().search("f=foo").build(); results = q.filter(sa); assertObjectEquals("[{f:'foo'}]", results); sa = SearchArgs.builder().search("f=fo*").build(); results = q.filter(sa); assertObjectEquals("[{f:'foo'}]", results); sa = SearchArgs.builder().search("f=*ar").build(); results = q.filter(sa); assertObjectEquals("[{f:'bar'}]", results); sa = SearchArgs.builder().search("f=foo bar").build(); results = q.filter(sa); assertObjectEquals("[{f:'foo'},{f:'bar'}]", results); }
/** * Construct the {@link SearchArgs} object. * * <p> * This method can be called multiple times to construct new objects. * * @return A new {@link SearchArgs} object initialized with values in this builder. */ public SearchArgs build() { return new SearchArgs(this); } }
sa = SearchArgs.builder().sort("f2").view("f1, f2").build(); results = q.filter(sa); assertEquals("[{f1:2,f2:'bar'},{f1:3,f2:'baz'},{f1:1,f2:'foo'}]", s.serialize(results)); sa = SearchArgs.builder().sort("f2-").view("f1,f2").build(); results = q.filter(sa); assertEquals("[{f1:1,f2:'foo'},{f1:3,f2:'baz'},{f1:2,f2:'bar'}]", s.serialize(results)); sa = SearchArgs.builder().sort("f3").view("f1,f3").build(); results = q.filter(sa); assertEquals("[{f1:2,f3:false},{f1:1,f3:true},{f1:3,f3:true}]", s.serialize(results)); sa = SearchArgs.builder().sort("f3,f1+").view("f1,f3").build(); results = q.filter(sa); assertEquals("[{f1:2,f3:false},{f1:1,f3:true},{f1:3,f3:true}]", s.serialize(results)); sa = SearchArgs.builder().sort("f3,f1-").view("f1,f3").build(); results = q.filter(sa); assertEquals("[{f1:2,f3:false},{f1:3,f3:true},{f1:1,f3:true}]", s.serialize(results)); sa = SearchArgs.builder().sort("f1").view("f1").limit(1).position(0).build(); results = q.filter(sa); assertEquals("[{f1:1}]", s.serialize(results)); sa = SearchArgs.builder().sort("f1").view("f1").limit(3).position(0).build(); results = q.filter(sa); assertEquals("[{f1:1},{f1:2},{f1:3}]", s.serialize(results)); sa = SearchArgs.builder().sort("f1").view("f1").limit(1).position(2).build();
sa = SearchArgs.builder().search("f=2011").build(); results = q.filter(sa); assertEquals("[{f:'2011/01/01 00:00:00'},{f:'2011/01/31 00:00:00'}]", s.serialize(results)); sa = SearchArgs.builder().search("f=2011.01").build(); results = q.filter(sa); assertEquals("[{f:'2011/01/01 00:00:00'},{f:'2011/01/31 00:00:00'}]", s.serialize(results)); sa = SearchArgs.builder().search("f=2011.01.01").build(); results = q.filter(sa); assertEquals("[{f:'2011/01/01 00:00:00'}]", s.serialize(results)); sa = SearchArgs.builder().search("f=2011.01.01.12").build(); results = q.filter(sa); assertEquals("[{f:'2011/01/01 12:00:00'},{f:'2011/01/01 12:59:59'}]", s.serialize(results)); }; q = new PojoQuery(in, session); sa = SearchArgs.builder().search("f=2011.01.01.12.30").build(); results = q.filter(sa); assertEquals("[{f:'2011/01/01 12:30:00'},{f:'2011/01/01 12:30:59'}]", s.serialize(results)); }; q = new PojoQuery(in, session); sa = SearchArgs.builder().search("f=2011.01.01.12.30.30").build(); results = q.filter(sa); assertEquals("[{f:'2011/01/01 12:30:30'}]", s.serialize(results)); sa = SearchArgs.builder().search("f>2000").build();