Package com.asakusafw.vocabulary.flow.graph

Examples of com.asakusafw.vocabulary.flow.graph.OperatorDescription


public class CoGroupFlowProcessor extends RendezvousProcessor {

    @Override
    public void emitRendezvous(Context context) {
        ModelFactory f = context.getModelFactory();
        OperatorDescription desc = context.getOperatorDescription();
        InputBuffer bufferKind = desc.getAttribute(InputBuffer.class);
        assert bufferKind != null;

        List<Expression> arguments = Lists.create();
        List<ListBufferMirror> buffers = Lists.create();
        for (FlowElementPortDescription input : desc.getInputPorts()) {
            ListBufferMirror list = context.createListBuffer(input.getDataType(), bufferKind);
            buffers.add(list);

            context.addBegin(list.createBegin());

            Expression proc = context.getProcessInput(input);
            context.addProcess(input, list.createAdvance(proc));

            context.addEnd(list.createEnd());

            arguments.add(list.get());
        }
        for (FlowElementPortDescription output : desc.getOutputPorts()) {
            arguments.add(context.getOutput(output).get());
        }
        for (OperatorDescription.Parameter param : desc.getParameters()) {
            arguments.add(Models.toLiteral(f, param.getValue()));
        }

        Expression impl = context.createImplementation();
        context.addEnd(new ExpressionBuilder(f, impl)
            .method(desc.getDeclaration().getName(), arguments)
            .toStatement());

        for (ListBufferMirror list : buffers) {
            context.addEnd(list.createShrink());
        }
View Full Code Here


    @Override
    public void emitRendezvous(Context context) {
        MasterKindFlowAnalyzer masterAnalyzer = new MasterKindFlowAnalyzer(context);
        ModelFactory f = context.getModelFactory();
        OperatorDescription desc = context.getOperatorDescription();

        FlowElementPortDescription tx = context.getInputPort(MasterJoinUpdate.ID_INPUT_TRANSACTION);

        FlowElementPortDescription updatedPort = context.getOutputPort(MasterJoinUpdate.ID_OUTPUT_UPDATED);
        FlowElementPortDescription missedPort = context.getOutputPort(MasterJoinUpdate.ID_OUTPUT_MISSED);
        ResultMirror updated = context.getOutput(updatedPort);
        ResultMirror missed = context.getOutput(missedPort);

        Expression impl = context.createImplementation();
        List<Expression> arguments = Lists.create();
        arguments.add(masterAnalyzer.getGetRawMasterExpression());
        arguments.add(context.getProcessInput(tx));
        for (OperatorDescription.Parameter param : desc.getParameters()) {
            arguments.add(Models.toLiteral(f, param.getValue()));
        }

        context.addProcess(tx, f.newIfStatement(
                masterAnalyzer.getHasMasterExpresion(),
                f.newBlock(new Statement[] {
                        new ExpressionBuilder(f, impl)
                            .method(desc.getDeclaration().getName(), arguments)
                            .toStatement(),
                        updated.createAdd(context.getProcessInput(tx))
                }),
                f.newBlock(missed.createAdd(context.getProcessInput(tx)))));
    }
View Full Code Here

    @Override
    public void emitLineEnd(Context context) {
        ModelFactory f = context.getModelFactory();
        Expression input = context.getInput();
        Expression impl = context.createImplementation();
        OperatorDescription desc = context.getOperatorDescription();

        List<Expression> arguments = Lists.create();
        arguments.add(input);
        for (FlowElementPortDescription output : desc.getOutputPorts()) {
            arguments.add(context.getOutput(output).get());
        }
        for (OperatorDescription.Parameter param : desc.getParameters()) {
            arguments.add(Models.toLiteral(f, param.getValue()));
        }
        context.add(new ExpressionBuilder(f, impl)
            .method(desc.getDeclaration().getName(), arguments)
            .toStatement());
    }
View Full Code Here

    @Override
    public void emitLinePart(Context context) {
        ModelFactory f = context.getModelFactory();
        Expression input = context.getInput();
        Expression impl = context.createImplementation();
        OperatorDescription desc = context.getOperatorDescription();

        List<Expression> arguments = Lists.create();
        arguments.add(input);
        for (OperatorDescription.Parameter param : desc.getParameters()) {
            arguments.add(Models.toLiteral(f, param.getValue()));
        }

        context.add(new ExpressionBuilder(f, impl)
            .method(desc.getDeclaration().getName(), arguments)
            .toStatement());

        context.setOutput(input);
    }
View Full Code Here

    @Override
    public void emitLineEnd(Context context) {
        ModelFactory f = context.getModelFactory();
        Expression input = context.getInput();
        Expression impl = context.createImplementation();
        OperatorDescription desc = context.getOperatorDescription();

        Method method = desc.getDeclaration().toMethod();
        assert method != null : desc.getDeclaration();
        Class<?> enumType = method.getReturnType();

        List<Expression> arguments = Lists.create();
        arguments.add(input);
        for (OperatorDescription.Parameter param : desc.getParameters()) {
            arguments.add(Models.toLiteral(f, param.getValue()));
        }
        Expression result = context.createLocalVariable(
                enumType,
                new ExpressionBuilder(f, impl)
                    .method(desc.getDeclaration().getName(), arguments)
                    .toExpression());
        List<Tuple2<Enum<?>, FlowElementPortDescription>> constants =
            EnumUtil.extractConstants(enumType, desc.getOutputPorts());

        List<Statement> cases = Lists.create();
        for (Tuple2<Enum<?>, FlowElementPortDescription> tuple : constants) {
            Enum<?> constant = tuple.first;
            FlowElementPortDescription port = tuple.second;
View Full Code Here

            FlowElementDescription desc = factor.getElement().getDescription();
            if ((desc instanceof OperatorDescription) == false) {
                throw new IllegalArgumentException(desc.toString());
            }
            OperatorDescription description = (OperatorDescription) desc;
            Map<FlowElementPortDescription, Expression> inputs = Maps.create();
            for (FlowElementInput port : factor.getElement().getInputPorts()) {
                inputs.put(port.getDescription(), argument);
            }
            return new RendezvousProcessor.Context(
View Full Code Here

    private boolean rewriteOperator(InputDescription source, FlowElementInput input) {
        assert source != null;
        assert input != null;
        FlowElement element = input.getOwner();
        assert element.getDescription().getKind() == FlowElementKind.OPERATOR;
        OperatorDescription desc = (OperatorDescription) element.getDescription();
        Class<? extends Annotation> annotationType = desc.getDeclaration().getAnnotationType();
        Class<? extends Annotation> sideDataType;
        FlowElementInput master;
        FlowElementInput tx;
        if (annotationType == MasterJoin.class) {
            sideDataType = SideDataJoin.class;
View Full Code Here

            return context.getInput();
        }

        private LinePartProcessor.Context createPartConext(Expression input) {
            assert input != null;
            OperatorDescription description = new OperatorDescription.Builder(Identity.class)
                .declare(Void.class, Void.class, "")
                .addInput("input", Object.class)
                .addOutput("output", Object.class)
                .toDescription();
            return new LinePartProcessor.Context(
View Full Code Here

    @Override
    public void emitLineEnd(Context context) {
        ModelFactory f = context.getModelFactory();
        Expression input = context.getInput();
        Expression impl = context.createImplementation();
        OperatorDescription desc = context.getOperatorDescription();

        FlowElementPortDescription converted = context.getOutputPort(Convert.ID_OUTPUT_CONVERTED);
        FlowElementPortDescription original = context.getOutputPort(Convert.ID_OUTPUT_ORIGINAL);

        List<Expression> arguments = Lists.create();
        arguments.add(input);
        for (OperatorDescription.Parameter param : desc.getParameters()) {
            arguments.add(Models.toLiteral(f, param.getValue()));
        }
        Expression result = context.createLocalVariable(
                converted.getDataType(),
                new ExpressionBuilder(f, impl)
                    .method(desc.getDeclaration().getName(), arguments)
                    .toExpression());

        context.add(context.getOutput(original).createAdd(input));
        context.add(context.getOutput(converted).createAdd(result));
    }
View Full Code Here

        FlowResourceDescription resource = context.getResourceDescription(SideDataBranch.ID_RESOURCE_MASTER);
        SideDataKindFlowAnalyzer helper = new SideDataKindFlowAnalyzer(
                context,
                (JoinResourceDescription) resource);

        OperatorDescription desc = context.getOperatorDescription();
        List<Expression> arguments = Lists.create();
        arguments.add(helper.getGetCheckedMasterExpression());
        arguments.add(context.getInput());
        for (OperatorDescription.Parameter param : desc.getParameters()) {
            arguments.add(Models.toLiteral(f, param.getValue()));
        }

        Method method = desc.getDeclaration().toMethod();
        assert method != null : desc.getDeclaration();
        Class<?> enumType = method.getReturnType();
        List<Tuple2<Enum<?>, FlowElementPortDescription>> constants =
            EnumUtil.extractConstants(enumType, desc.getOutputPorts());

        Expression impl = context.createImplementation();
        Expression branch = context.createLocalVariable(
                context.convert(enumType),
                new ExpressionBuilder(f, impl)
                    .method(desc.getDeclaration().getName(), arguments)
                    .toExpression());

        List<Statement> cases = Lists.create();
        for (Tuple2<Enum<?>, FlowElementPortDescription> tuple : constants) {
            Enum<?> constant = tuple.first;
View Full Code Here

TOP

Related Classes of com.asakusafw.vocabulary.flow.graph.OperatorDescription

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.