@Override public T newInstance(Object... args) { return expr.newInstance(args); } }
@Nullable @Override public T newInstance(Object... args) { if (args != null) { for (Object arg : args) { if (arg != null) { return expr.newInstance(args); } } } return null; }
@Nullable @Override public T newInstance(Object... args) { Object[] expanded = new Object[template.length]; System.arraycopy(template, 0, expanded, 0, template.length); int j = 0; for (int i = 0; i < expanded.length; i++) { if (expanded[i] == null) { expanded[i] = args[j++]; } } return expr.newInstance(expanded); }
@Override protected V transform(Group group) { // XXX Isn't group.toArray() suitable here? List<Object> args = new ArrayList<Object>(groupExpressions.size() - 1); for (int i = 1; i < groupExpressions.size(); i++) { args.add(group.getGroup(groupExpressions.get(i))); } return transformation.newInstance(args.toArray()); } };
@SuppressWarnings("unchecked") protected V transform(Group group) { // XXX Isn't group.toArray() suitable here? List<Object> args = new ArrayList<Object>(groupExpressions.size() - 1); for (int i = 1; i < groupExpressions.size(); i++) { args.add(group.getGroup(groupExpressions.get(i))); } return (V) transformation.newInstance(args.toArray()); }
@Override protected V transform(Group group) { // XXX Isn't group.toArray() suitable here? List<Object> args = new ArrayList<Object>(groupExpressions.size() - 1); for (int i = 1; i < groupExpressions.size(); i++) { args.add(group.getGroup(groupExpressions.get(i))); } return transformation.newInstance(args.toArray()); } };
@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 wrapped_projection_compresses_projection() { FactoryExpression<String> wrapped = FactoryExpressionUtils.wrap(concat1); assertEquals("123", wrapped.newInstance("1","2","3")); }
@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 nestedProjection_newInstance2() { QMap expr = new QMap(str1, str2, concat); assertEquals("1234", FactoryExpressionUtils.wrap(expr).newInstance("1", "2", "12", "34").get(concat)); }
@Test public void deeply_wrapped_projection_compresses_projection() { FactoryExpression<String> wrapped = FactoryExpressionUtils.wrap(concat2); assertEquals("1234", wrapped.newInstance("1","2","3","4")); }
@Test public void nestedProjection_newInstance() { QMap expr = new QMap(concat); assertEquals("1234", FactoryExpressionUtils.wrap(expr).newInstance("12", "34").get(concat)); }
@SuppressWarnings("unchecked") @Test public void array() { FactoryExpression<String[]> expr = Projections.array(String[].class, ExpressionUtils.path(String.class, "p1"), ExpressionUtils.path(String.class, "p2")); assertEquals(String[].class, expr.newInstance("1", "2").getClass()); }
@Test public void factoryExpression_newInstance() { FactoryExpression<ProjectionExample> constructor = Projections.constructor(ProjectionExample.class, concat); constructor = FactoryExpressionUtils.wrap(constructor); ProjectionExample projection = constructor.newInstance("12", "34"); assertEquals("1234", projection.text); }
@Test public void nestedProjection_newInstance() { QTuple expr = new QTuple(concat); assertEquals("1234", FactoryExpressionUtils.wrap(expr).newInstance("12", "34").get(concat)); }
@Test public void nestedProjection_newInstance2() { QTuple expr = new QTuple(str1, str2, concat); assertEquals("1234", FactoryExpressionUtils.wrap(expr).newInstance("1", "2", "12", "34").get(concat)); }
@Test public void newInstance() { assertNotNull(new QTuple(str1, str1).newInstance(null, null)); assertNull(new QTuple(str1, str1).skipNulls().newInstance(null, null)); } }
@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 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 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()); }