/** * Create a Bean populating projection for the given type and bindings * * @param <T> type of projection * @param type type of the projection * @param bindings property bindings * @return factory expression */ public static <T> QBean<T> bean(Class<? extends T> type, Map<String, ? extends Expression<?>> bindings) { return new QBean<T>(type, bindings); }
/** * Create a field access based Bean populating projection for the given type and bindings * * @param <T> type of projection * @param type type of the projection * @param bindings field bindings * @return factory expression */ public static <T> QBean<T> fields(Class<? extends T> type, Map<String, ? extends Expression<?>> bindings) { return new QBean<T>(type, true, bindings); }
/** * Create a Bean populating projection for the given type and bindings * * @param <T> type of projection * @param type type of the projection * @param bindings property bindings * @return factory expression */ public static <T> QBean<T> bean(Path<? extends T> type, Map<String, ? extends Expression<?>> bindings) { return new QBean<T>(type.getType(), bindings); }
/** * Create a field access based Bean populating projection for the given type and bindings * * @param <T> type of projection * @param type type of the projection * @param bindings field bindings * @return factory expression */ public static <T> QBean<T> fields(Path<? extends T> type, Map<String, ? extends Expression<?>> bindings) { return new QBean<T>(type.getType(), true, bindings); }
/** * Create a field access based Bean populating projection for the given type and expressions * * @param <T> type of projection * @param type type of the projection * @param exprs arguments for the projection * @return factory expression */ public static <T> QBean<T> fields(Path<? extends T> type, Expression<?>... exprs) { return new QBean<T>(type.getType(), true, exprs); }
@Test public void with_class_and_map_using_fields() { Map<String,Expression<?>> bindings = new LinkedHashMap<String,Expression<?>>(); bindings.put("name", name); bindings.put("age", age); bindings.put("married", married); QBean<Entity> beanProjection = new QBean<Entity>(Entity.class, true, bindings); Entity bean = beanProjection.newInstance("Fritz", 30, true); assertEquals("Fritz", bean.name); assertEquals(30, bean.age); assertEquals(true, bean.married); }
@Test public void with_nested_factoryExpression() { Map<String,Expression<?>> bindings = new LinkedHashMap<String,Expression<?>>(); bindings.put("age", age); bindings.put("name", new Concatenation(name, name2)); QBean<Entity> beanProjection = new QBean<Entity>(Entity.class, true, bindings); FactoryExpression<Entity> wrappedProjection = FactoryExpressionUtils.wrap(beanProjection); Entity bean = wrappedProjection.newInstance(30, "Fri","tz"); assertEquals("Fritz", bean.name); } }
@Test public void with_nested_factoryExpression() { Map<String,Expression<?>> bindings = new LinkedHashMap<String,Expression<?>>(); bindings.put("age", age); bindings.put("name", new Concatenation(name, name2)); QBean<Entity> beanProjection = new QBean<Entity>(Entity.class, bindings); FactoryExpression<Entity> wrappedProjection = FactoryExpressionUtils.wrap(beanProjection); Entity bean = wrappedProjection.newInstance(30, "Fri","tz"); assertEquals("Fritz", bean.getName()); }
@Test public void with_class_and_map() { Map<String,Expression<?>> bindings = new LinkedHashMap<String,Expression<?>>(); bindings.put("name", name); bindings.put("age", age); bindings.put("married", married); QBean<Entity> beanProjection = new QBean<Entity>(Entity.class, bindings); Entity bean = beanProjection.newInstance("Fritz", 30, true); assertEquals("Fritz", bean.getName()); assertEquals(30, bean.getAge()); assertEquals(true, bean.isMarried()); }
@Test public void alias() { QBean<Entity> beanProjection = new QBean<Entity>(Entity.class, name.as("name2")); assertEquals(name.as("name2"), beanProjection.getArgs().get(0)); }
@Test public void deep_population_via_qBean() { StringPath name = Expressions.stringPath("name"); StringPath id = Expressions.stringPath("id"); QBean<Entity2> entity2Bean = new QBean<Entity2>(Entity2.class, name, id); QBean<Entity1> entity1Bean = new QBean<Entity1>(Entity1.class, Collections.singletonMap("entity2", entity2Bean)); Entity1 entity1 = FactoryExpressionUtils.wrap(entity1Bean).newInstance("nameX","idX"); assertEquals("nameX", entity1.getEntity2().getName()); assertEquals("idX", entity1.getEntity2().getId()); }
@Test public void property_access() { PathBuilder<Entity> entity = new PathBuilder<Entity>(Entity.class, "entity"); QBean<Entity> beanProjection = new QBean<Entity>(Entity.class, entity.getNumber("cId",Integer.class), entity.getNumber("eId", Integer.class)); Entity bean = beanProjection.newInstance(1,2); assertEquals(Integer.valueOf(1), bean.getcId()); assertEquals(Integer.valueOf(2), bean.geteId()); }
@Test public void with_class_and_exprs_using_fields() { QBean<Entity> beanProjection = new QBean<Entity>(Entity.class, true, name, age, married); Entity bean = beanProjection.newInstance("Fritz", 30, true); assertEquals("Fritz", bean.name); assertEquals(30, bean.age); assertEquals(true, bean.married); }
@Test public void field_access() { PathBuilder<Entity> entity = new PathBuilder<Entity>(Entity.class, "entity"); QBean<Entity> beanProjection = new QBean<Entity>(Entity.class, true, entity.getNumber("cId",Integer.class), entity.getNumber("eId", Integer.class)); Entity bean = beanProjection.newInstance(1,2); assertEquals(Integer.valueOf(1), bean.getcId()); assertEquals(Integer.valueOf(2), bean.geteId()); }
@Test public void with_nested_factoryExpression2() { QBean<Entity> beanProjection = new QBean<Entity>(Entity.class, age, ExpressionUtils.as(new Concatenation(name, name2), "name")); FactoryExpression<Entity> wrappedProjection = FactoryExpressionUtils.wrap(beanProjection); Entity bean = wrappedProjection.newInstance(30, "Fri","tz"); assertEquals("Fritz", bean.getName()); }
@Test public void supertype_population() { QBean<SubEntity> beanProjection = new QBean<SubEntity>(SubEntity.class, true, name, age, married); SubEntity bean = beanProjection.newInstance("Fritz", 30, true); assertEquals("Fritz", bean.getName()); assertEquals(30, bean.getAge()); assertEquals(true, bean.isMarried()); }
@Test public void with_class_and_exprs() { QBean<Entity> beanProjection = new QBean<Entity>(Entity.class, name, age, married); Entity bean = beanProjection.newInstance("Fritz", 30, true); assertEquals("Fritz", bean.getName()); assertEquals(30, bean.getAge()); assertEquals(true, bean.isMarried()); }
@Test public void with_class_and_alias_using_fields() { StringPath name2 = Expressions.stringPath("name2"); QBean<Entity> beanProjection = new QBean<Entity>(Entity.class, true, name.as(name2), age, married); Entity bean = beanProjection.newInstance("Fritz", 30, true); assertNull(bean.name); assertEquals("Fritz", bean.name2); assertEquals(30, bean.age); assertEquals(true, bean.married); }
@Test public void deep_population_via_qTuple() { StringPath name = Expressions.stringPath("name"); StringPath id = Expressions.stringPath("id"); QBean<Entity2> entity2Bean = new QBean<Entity2>(Entity2.class, name, id); QTuple tupleExpr = new QTuple(entity2Bean); Tuple tuple = FactoryExpressionUtils.wrap(tupleExpr).newInstance("nameX","idX"); assertEquals("nameX", tuple.get(entity2Bean).getName()); assertEquals("idX", tuple.get(entity2Bean).getId()); }
@Test public void with_class_and_alias() { StringPath name2 = Expressions.stringPath("name2"); QBean<Entity> beanProjection = new QBean<Entity>(Entity.class, name.as(name2), age, married); Entity bean = beanProjection.newInstance("Fritz", 30, true); assertNull(bean.getName()); assertEquals("Fritz", bean.getName2()); assertEquals(30, bean.getAge()); assertEquals(true, bean.isMarried()); }