    001    /*
    002     * Copyright (c) 2007-2014 Concurrent, Inc. All Rights Reserved.
    003     *
    004     * Project and contact information: http://www.cascading.org/
    005     *
    006     * This file is part of the Cascading project.
    007     *
    008     * Licensed under the Apache License, Version 2.0 (the "License");
    009     * you may not use this file except in compliance with the License.
    010     * You may obtain a copy of the License at
    011     *
    012     *     http://www.apache.org/licenses/LICENSE-2.0
    013     *
    014     * Unless required by applicable law or agreed to in writing, software
    015     * distributed under the License is distributed on an "AS IS" BASIS,
    016     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    017     * See the License for the specific language governing permissions and
    018     * limitations under the License.
    019     */
    020
    021    package cascading.flow.local.planner;
    022
    023    import java.util.Map;
    024
    025    import cascading.flow.FlowStep;
    026    import cascading.flow.local.LocalFlowStep;
    027    import cascading.flow.planner.ElementGraph;
    028    import cascading.flow.planner.FlowStepGraph;
    029    import cascading.tap.Tap;
    030    import org.jgrapht.Graphs;
    031
    032    /**
    033     *
    034     */
    035    public class LocalStepGraph extends FlowStepGraph
    036      {
    037      public LocalStepGraph( String flowName, ElementGraph elementGraph )
    038        {
    039        super( flowName, elementGraph );
    040        }
    041
    042      @Override
    043      protected FlowStep createFlowStep( String stepName, int stepNum )
    044        {
    045        return new LocalFlowStep( stepName, stepNum );
    046        }
    047
    048      protected void makeStepGraph( String flowName, ElementGraph elementGraph )
    049        {
    050        LocalFlowStep step = (LocalFlowStep) createFlowStep( "local", 1 );
    051
    052        addVertex( step );
    053
    054        for( Map.Entry<String, Tap> entry : elementGraph.getSourceMap().entrySet() )
    055          step.addSource( entry.getKey(), entry.getValue() );
    056
    057        for( Map.Entry<String, Tap> entry : elementGraph.getSinkMap().entrySet() )
    058          step.addSink( entry.getKey(), entry.getValue() );
    059
    060        step.getTrapMap().putAll( elementGraph.getTrapMap() );
    061
    062        Graphs.addGraph( step.getGraph(), elementGraph );
    063
    064        // remove the extents
    065        step.getGraph().removeVertex( ElementGraph.head );
    066        step.getGraph().removeVertex( ElementGraph.tail );
    067
    068        step.getGroups().addAll( elementGraph.findAllGroups() );
    069        }
    070      }