SimpleName o2 = factory.newSimpleName("o2");
List<Statement> statements = Lists.create();
SimpleName segmentId1 = factory.newSimpleName("segmentId1");
SimpleName segmentId2 = factory.newSimpleName("segmentId2");
statements.add(new ExpressionBuilder(factory, o1)
.method(SegmentedWritable.ID_GETTER)
.toLocalVariableDeclaration(t(int.class), segmentId1));
statements.add(new ExpressionBuilder(factory, o2)
.method(SegmentedWritable.ID_GETTER)
.toLocalVariableDeclaration(t(int.class), segmentId2));
SimpleName diff = factory.newSimpleName("diff");
statements.add(new ExpressionBuilder(factory, factory.newThis())
.method(ShuffleEmiterUtil.COMPARE_INT,
new ExpressionBuilder(factory, factory.newThis())
.method(ShuffleEmiterUtil.PORT_TO_ELEMENT, segmentId1)
.toExpression(),
new ExpressionBuilder(factory, factory.newThis())
.method(ShuffleEmiterUtil.PORT_TO_ELEMENT, segmentId2)
.toExpression())
.toLocalVariableDeclaration(t(int.class), diff));
statements.add(createDiff(diff));
List<Statement> cases = Lists.create();
for (List<Segment> segments : ShuffleEmiterUtil.groupByElement(model)) {
for (Segment segment : segments) {
cases.add(factory.newSwitchCaseLabel(v(segment.getPortId())));
}
Segment segment = segments.get(0);
for (Term term : segment.getTerms()) {
if (term.getArrangement() != Arrangement.GROUPING) {
continue;
}
String name = ShuffleEmiterUtil.getPropertyName(segment, term);
Expression rhs = term.getSource().createValueDiff(
new ExpressionBuilder(factory, o1)
.field(name)
.toExpression(),
new ExpressionBuilder(factory, o2)
.field(name)
.toExpression());
cases.add(new ExpressionBuilder(factory, diff)
.assignFrom(rhs)
.toStatement());
cases.add(createDiff(diff));
}
cases.add(factory.newBreakStatement());
}
cases.add(factory.newSwitchDefaultLabel());
cases.add(createAssertionError());
statements.add(factory.newSwitchStatement(segmentId1, cases));
statements.add(new ExpressionBuilder(factory, diff)
.assignFrom(new ExpressionBuilder(factory, factory.newThis())
.method(ShuffleEmiterUtil.COMPARE_INT,
segmentId1,
segmentId2)
.toExpression())
.toStatement());
statements.add(createDiff(diff));
cases = Lists.create();
for (Segment segment : model.getSegments()) {
cases.add(factory.newSwitchCaseLabel(v(segment.getPortId())));
for (Term term : segment.getTerms()) {
if (term.getArrangement() == Arrangement.GROUPING) {
continue;
}
String name = ShuffleEmiterUtil.getPropertyName(segment, term);
Expression rhs = term.getSource().createValueDiff(
new ExpressionBuilder(factory, o1)
.field(name)
.toExpression(),
new ExpressionBuilder(factory, o2)
.field(name)
.toExpression());
cases.add(new ExpressionBuilder(factory, diff)
.assignFrom(rhs)
.toStatement());
cases.add(createDiff(diff, term.getArrangement() == Arrangement.DESCENDING));
}
cases.add(factory.newBreakStatement());
}
cases.add(factory.newSwitchDefaultLabel());
cases.add(createAssertionError());
statements.add(factory.newSwitchStatement(segmentId1, cases));
statements.add(new ExpressionBuilder(factory, v(0))
.toReturnStatement());
return factory.newMethodDeclaration(
null,
new AttributeBuilder(factory)