001/*
002 * Copyright (c) 2007-2017 Xplenty, 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
021package cascading.flow.planner.rule;
022
023/**
024 *
025 */
026public enum PlanPhase
027  {
028    // Flow element graph rules
029    PreBalanceAssembly( ProcessLevel.Assembly, RuleMode.Mutate, ExecAction.Rule ),
030    BalanceAssembly( ProcessLevel.Assembly, RuleMode.Mutate, ExecAction.Rule ),
031    PostBalanceAssembly( ProcessLevel.Assembly, RuleMode.Mutate, ExecAction.Rule ),
032
033    PreResolveAssembly( ProcessLevel.Assembly, RuleMode.Mutate, ExecAction.Rule ),
034    ResolveAssembly( ProcessLevel.Assembly, RuleMode.Mutate, ExecAction.Resolve ), // force assembly resolution
035    PostResolveAssembly( ProcessLevel.Assembly, RuleMode.Mutate, ExecAction.Rule ),
036
037    // Flow step sub-graph partition rules
038    PartitionSteps( ProcessLevel.Step, RuleMode.Partition, ExecAction.Rule ),
039    PostSteps( ProcessLevel.Step, RuleMode.Mutate, ExecAction.Rule ),
040
041    // Flow node sub-graph partition rules
042    PartitionNodes( ProcessLevel.Node, RuleMode.Partition, ExecAction.Rule ),
043    PostNodes( ProcessLevel.Node, RuleMode.Mutate, ExecAction.Rule ),
044
045    // Flow node pipeline sub-graph partition rules
046    PartitionPipelines( ProcessLevel.Pipeline, RuleMode.Partition, ExecAction.Rule ),
047    PostPipelines( ProcessLevel.Pipeline, RuleMode.Mutate, ExecAction.Rule );
048
049  ProcessLevel level;
050  ExecAction action;
051  RuleMode mode;
052
053  PlanPhase( ProcessLevel level, RuleMode mode, ExecAction action )
054    {
055    this.level = level;
056    this.action = action;
057    this.mode = mode;
058    }
059
060  public ProcessLevel getLevel()
061    {
062    return level;
063    }
064
065  public ExecAction getAction()
066    {
067    return action;
068    }
069
070  public RuleMode getMode()
071    {
072    return mode;
073    }
074  }