    001/*
    002 * Copyright (c) 2016 Chris K Wensel <chris@wensel.net>. All Rights Reserved.
    003 * Copyright (c) 2007-2017 Xplenty, Inc. All Rights Reserved.
    004 *
    005 * Project and contact information: http://www.cascading.org/
    006 *
    007 * This file is part of the Cascading project.
    008 *
    009 * Licensed under the Apache License, Version 2.0 (the "License");
    010 * you may not use this file except in compliance with the License.
    011 * You may obtain a copy of the License at
    012 *
    013 *     http://www.apache.org/licenses/LICENSE-2.0
    014 *
    015 * Unless required by applicable law or agreed to in writing, software
    016 * distributed under the License is distributed on an "AS IS" BASIS,
    017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    018 * See the License for the specific language governing permissions and
    019 * limitations under the License.
    020 */
    021
    022package cascading.flow.planner.rule.partitioner;
    023
    024import cascading.flow.planner.iso.ElementAnnotation;
    025import cascading.flow.planner.iso.expression.ExpressionGraph;
    026import cascading.flow.planner.iso.subgraph.GraphPartitioner;
    027import cascading.flow.planner.iso.subgraph.partitioner.ExpressionGraphPartitioner;
    028import cascading.flow.planner.iso.subgraph.partitioner.UniquePathGraphPartitioner;
    029import cascading.flow.planner.rule.PlanPhase;
    030import cascading.flow.planner.rule.RuleExpression;
    031import cascading.flow.planner.rule.util.LogLevel;
    032
    033/**
    034 * Class UniquePathRulePartitioner relies on a {@link cascading.flow.planner.rule.RuleExpression} to identify
    035 * sub-graphs as initial partitions, then will partition the resulting graph into a unique sub-graph for each
    036 * unique path between the head and tail of the graph.
    037 * <p/>
    038 * This partitioner currently requires the matched sub-graph (per the RuleExpression) to have a single head and single
    039 * tail. All paths will between the matched head and tail.
    040 * <p>
    041 * Any remaining elements from the original graph will be included in the final path sub-graph.
    042 */
    043public class UniquePathRulePartitioner extends ExpressionRulePartitioner
    044  {
    045  public UniquePathRulePartitioner( PlanPhase phase, RuleExpression ruleExpression )
    046    {
    047    super( phase, ruleExpression );
    048    }
    049
    050  public UniquePathRulePartitioner( PlanPhase phase, RuleExpression ruleExpression, ElementAnnotation... annotations )
    051    {
    052    super( phase, ruleExpression, annotations );
    053    }
    054
    055  public UniquePathRulePartitioner( PlanPhase phase, RuleExpression ruleExpression, Enum... annotationExcludes )
    056    {
    057    super( phase, ruleExpression, annotationExcludes );
    058    }
    059
    060  public UniquePathRulePartitioner( PlanPhase phase, PartitionSource partitionSource, RuleExpression ruleExpression )
    061    {
    062    super( phase, partitionSource, ruleExpression );
    063    }
    064
    065  public UniquePathRulePartitioner( PlanPhase phase, PartitionSource partitionSource, RuleExpression ruleExpression, ElementAnnotation... annotations )
    066    {
    067    super( phase, partitionSource, ruleExpression, annotations );
    068    }
    069
    070  public UniquePathRulePartitioner( PlanPhase phase, PartitionSource partitionSource, RuleExpression ruleExpression, Enum... annotationExcludes )
    071    {
    072    super( phase, partitionSource, ruleExpression, annotationExcludes );
    073    }
    074
    075  public UniquePathRulePartitioner( LogLevel logLevel, PlanPhase phase, RuleExpression ruleExpression )
    076    {
    077    super( logLevel, phase, ruleExpression );
    078    }
    079
    080  public UniquePathRulePartitioner( LogLevel logLevel, PlanPhase phase, RuleExpression ruleExpression, ElementAnnotation... annotations )
    081    {
    082    super( logLevel, phase, ruleExpression, annotations );
    083    }
    084
    085  public UniquePathRulePartitioner( LogLevel logLevel, PlanPhase phase, RuleExpression ruleExpression, Enum... annotationExcludes )
    086    {
    087    super( logLevel, phase, ruleExpression, annotationExcludes );
    088    }
    089
    090  public UniquePathRulePartitioner( LogLevel logLevel, PlanPhase phase, PartitionSource partitionSource, RuleExpression ruleExpression )
    091    {
    092    super( logLevel, phase, partitionSource, ruleExpression );
    093    }
    094
    095  public UniquePathRulePartitioner( LogLevel logLevel, PlanPhase phase, PartitionSource partitionSource, RuleExpression ruleExpression, ElementAnnotation... annotations )
    096    {
    097    super( logLevel, phase, partitionSource, ruleExpression, annotations );
    098    }
    099
    100  public UniquePathRulePartitioner( LogLevel logLevel, PlanPhase phase, PartitionSource partitionSource, RuleExpression ruleExpression, Enum... annotationExcludes )
    101    {
    102    super( logLevel, phase, partitionSource, ruleExpression, annotationExcludes );
    103    }
    104
    105  protected UniquePathRulePartitioner( PlanPhase phase, GraphPartitioner graphPartitioner )
    106    {
    107    super( phase, graphPartitioner );
    108    }
    109
    110  protected UniquePathRulePartitioner( LogLevel logLevel, PlanPhase phase, GraphPartitioner graphPartitioner )
    111    {
    112    super( logLevel, phase, graphPartitioner );
    113    }
    114
    115  protected UniquePathRulePartitioner( PlanPhase phase )
    116    {
    117    super( phase );
    118    }
    119
    120  protected UniquePathRulePartitioner()
    121    {
    122    }
    123
    124  @Override
    125  protected ExpressionGraphPartitioner createExpressionGraphPartitioner( ExpressionGraph contractionGraph, ExpressionGraph expressionGraph, ElementAnnotation[] annotations )
    126    {
    127    // include remainders by default
    128    return new UniquePathGraphPartitioner( contractionGraph, expressionGraph, true, annotations );
    129    }
    130  }