@Override public TupleRule<?, ?> deepCopy() { checkClassToCopy(SequenceTupleRule.class); SequenceTupleRule copy = new SequenceTupleRule(getName(), itemType, getNodeRuleFactory()); copy.setHandler(getHandler()); copy.setRequired(isRequired()); return copy; }
@Override public NodeRule<?> getItemRule() { if (itemType instanceof Class<?>) { //TODO add it to a list to invoke onRuleEnd on all the rules created if (!ReflectionUtils.isPojo((Class) itemType)) { return getScalarRule(); } return new PojoTupleRule("", (Class<?>) itemType, getNodeRuleFactory()); } if (itemType instanceof ParameterizedType) { ParameterizedType pItemType = (ParameterizedType) itemType; if (Map.class.isAssignableFrom((Class<?>) pItemType.getRawType())) { //sequence of maps return new MapTupleRule((Class<?>) pItemType.getActualTypeArguments()[1], getNodeRuleFactory()); } } throw new IllegalArgumentException("Sequence item type not supported: " + itemType); }
private TupleRule<?, ?> createSequenceRule(Field declaredField, Sequence sequence) { TupleRule<?, ?> tupleRule = null; if (List.class.isAssignableFrom(declaredField.getType())) { Type type = declaredField.getGenericType(); if (type instanceof ParameterizedType) { ParameterizedType pType = (ParameterizedType) type; Type itemType = pType.getActualTypeArguments()[0]; if (sequence.rule() != TupleRule.class) { tupleRule = createInstanceOfTupleRule(sequence.rule(), declaredField.getName(), itemType); } else { tupleRule = new SequenceTupleRule(declaredField.getName(), itemType); } } } else { throw new RuntimeException("Only List can be sequence. Error on field " + declaredField.getName()); } return tupleRule; }
protected DefaultTupleRule getScalarRule() { return new SimpleRule(getName(), (Class<?>) itemType); }
@Override public NodeRule<?> getItemRule() { if (itemType instanceof Class<?>) { //TODO add it to a list to invoke onRuleEnd on all the rules created if (!ReflectionUtils.isPojo((Class) itemType)) { return getScalarRule(); } return new PojoTupleRule("", (Class<?>) itemType, getNodeRuleFactory()); } if (itemType instanceof ParameterizedType) { ParameterizedType pItemType = (ParameterizedType) itemType; if (Map.class.isAssignableFrom((Class<?>) pItemType.getRawType())) { //sequence of maps return new MapTupleRule((Class<?>) pItemType.getActualTypeArguments()[1], getNodeRuleFactory()); } } throw new IllegalArgumentException("Sequence item type not supported: " + itemType); }
private TupleRule<?, ?> createSequenceRule(Field declaredField, Sequence sequence) { TupleRule<?, ?> tupleRule = null; if (List.class.isAssignableFrom(declaredField.getType())) { Type type = declaredField.getGenericType(); if (type instanceof ParameterizedType) { ParameterizedType pType = (ParameterizedType) type; Type itemType = pType.getActualTypeArguments()[0]; if (sequence.rule() != TupleRule.class) { tupleRule = createInstanceOfTupleRule(sequence.rule(), declaredField.getName(), itemType); } else { tupleRule = new SequenceTupleRule(declaredField.getName(), itemType); } } } else { throw new RuntimeException("Only List can be sequence. Error on field " + declaredField.getName()); } return tupleRule; }
protected DefaultTupleRule getScalarRule() { return new SimpleRule(getName(), (Class<?>) itemType); }
@Override public TupleRule<?, ?> deepCopy() { checkClassToCopy(SequenceTupleRule.class); SequenceTupleRule copy = new SequenceTupleRule(getName(), itemType, getNodeRuleFactory()); copy.setHandler(getHandler()); copy.setRequired(isRequired()); return copy; }
@Override public TupleRule<?, ?> getRuleForTuple(NodeTuple nodeTuple) { if (nodeTuple.getValueNode().getNodeId() == NodeId.sequence) { return new SequenceTupleRule(fieldName, valueType, getNodeRuleFactory()); } else { //TODO add it to a list to invoke onRuleEnd on all the rules created if (ReflectionUtils.isPojo(valueType)) { return new PojoTupleRule(fieldName, valueType, getNodeRuleFactory()); } return new SimpleRule(fieldName, valueType); } }
@Override public TupleRule<?, ?> getRuleForTuple(NodeTuple nodeTuple) { if (nodeTuple.getValueNode().getNodeId() == NodeId.sequence) { return new SequenceTupleRule(fieldName, valueType, getNodeRuleFactory()); } else { //TODO add it to a list to invoke onRuleEnd on all the rules created if (ReflectionUtils.isPojo(valueType)) { return new PojoTupleRule(fieldName, valueType, getNodeRuleFactory()); } return new SimpleRule(fieldName, valueType); } }