Package com.tinkerpop.pipes.transform

Source Code of com.tinkerpop.pipes.transform.SelectPipe

package com.tinkerpop.pipes.transform;

import com.tinkerpop.pipes.AbstractPipe;
import com.tinkerpop.pipes.PipeFunction;
import com.tinkerpop.pipes.util.AsPipe;
import com.tinkerpop.pipes.util.PipeHelper;
import com.tinkerpop.pipes.util.structures.Row;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
* SelectPipe will emit a List of the objects that are at the respective 'as'-steps (i.e. partition steps) in the Pipeline.
* In this way, it is possible to isolate particular parts of the Pipeline for emission.
* If stepNames are provided the only those partition steps are emitted.
* If stepFunctions are provided then each object of the step is processed by the function prior to emission.
*
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public class SelectPipe<S> extends AbstractPipe<S, Row> implements TransformPipe<S, Row> {

    private final PipeFunction[] stepFunctions;
    private final boolean doFunctions;
    private int currentFunction;
    private final List<AsPipe> asPipes = new ArrayList<AsPipe>();
    private final List<String> columnNames;
    private final Collection<String> stepNames;

    public SelectPipe(final Collection<String> stepNames, final List<AsPipe> allPreviousAsPipes, final PipeFunction... stepFunctions) {
        this.stepFunctions = stepFunctions;
        this.stepNames = stepNames;

        if (this.doFunctions = this.stepFunctions.length > 0)
            currentFunction = 0;

        final List<String> tempNames = new ArrayList<String>();
        for (final AsPipe asPipe : allPreviousAsPipes) {
            final String columnName = asPipe.getName();
            if (null == this.stepNames || this.stepNames.contains(columnName)) {
                tempNames.add(columnName);
                this.asPipes.add(asPipe);
            }
        }

        if (tempNames.size() > 0)
            this.columnNames = tempNames;
        else
            this.columnNames = null;

    }

    public Row processNextStart() {
        this.starts.next();
        final Row row;
        if (null == columnNames)
            row = new Row();
        else
            row = new Row(columnNames);

        for (final AsPipe asPipe : this.asPipes) {
            if (doFunctions) {
                row.add(this.stepFunctions[currentFunction++ % stepFunctions.length].compute(asPipe.getCurrentEnd()));
            } else {
                row.add(asPipe.getCurrentEnd());
            }
        }
        return row;
    }

    public void reset() {
        this.currentFunction = 0;
        super.reset();
    }

    public String toString() {
        if (null == this.stepNames)
            return PipeHelper.makePipeString(this);
        else
            return PipeHelper.makePipeString(this, this.stepNames.toArray());
    }

}
TOP

Related Classes of com.tinkerpop.pipes.transform.SelectPipe

TOP
Copyright © 2018 www.massapi.com. 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.