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; 022 023 import java.util.List; 024 import java.util.Map; 025 import java.util.Set; 026 027 import cascading.pipe.Group; 028 import cascading.pipe.HashJoin; 029 import cascading.stats.FlowStepStats; 030 import cascading.tap.Tap; 031 032 /** 033 * Class FlowStep is an internal representation of a given "job" possibly to be executed on a remote cluster. During 034 * planning, pipe assemblies are broken down into "steps" and encapsulated in this class. 035 * <p/> 036 * FlowSteps are submitted in order of dependency. If two or more steps do not share the same dependencies and all 037 * can be scheduled simultaneously, the {@link #getSubmitPriority()} value determines the order in which 038 * all steps will be submitted for execution. The default submit priority is 5. 039 */ 040 public interface FlowStep<Config> 041 { 042 String CASCADING_FLOW_STEP_ID = "cascading.flow.step.id"; 043 044 /** 045 * Method getId returns the id of this FlowStep object. 046 * 047 * @return the id (type int) of this FlowStep object. 048 */ 049 String getID(); 050 051 int getStepNum(); 052 053 /** 054 * Method getName returns the name of this FlowStep object. 055 * 056 * @return the name (type String) of this FlowStep object. 057 */ 058 String getName(); 059 060 Flow<Config> getFlow(); 061 062 String getFlowID(); 063 064 /** 065 * Method getParentFlowName returns the parentFlowName of this FlowStep object. 066 * 067 * @return the parentFlowName (type Flow) of this FlowStep object. 068 */ 069 String getFlowName(); 070 071 /** 072 * Method getConfig returns the current initialized configuration. 073 * <p/> 074 * The returned configuration is mutable and may be changed prior to this step being started 075 * or submitted. 076 * 077 * @return the current initialized configuration 078 */ 079 Config getConfig(); 080 081 /** 082 * Method getStepDisplayName returns the stepDisplayName of this FlowStep object. 083 * 084 * @return the stepName (type String) of this FlowStep object. 085 */ 086 String getStepDisplayName(); 087 088 /** 089 * Method getSubmitPriority returns the submitPriority of this FlowStep object. 090 * <p/> 091 * 10 is lowest, 1 is the highest, 5 is the default. 092 * 093 * @return the submitPriority (type int) of this FlowStep object. 094 */ 095 int getSubmitPriority(); 096 097 /** 098 * Method setSubmitPriority sets the submitPriority of this FlowStep object. 099 * <p/> 100 * 10 is lowest, 1 is the highest, 5 is the default. 101 * 102 * @param submitPriority the submitPriority of this FlowStep object. 103 */ 104 void setSubmitPriority( int submitPriority ); 105 106 Group getGroup(); 107 108 List<Group> getGroups(); 109 110 Map<HashJoin, Tap> getStreamedSourceByJoin(); 111 112 Set<Tap> getAllAccumulatedSources(); 113 114 Set<Tap> getSources(); 115 116 Set<Tap> getSinks(); 117 118 Tap getSink(); 119 120 Set<String> getSourceName( Tap source ); 121 122 Set<String> getSinkName( Tap sink ); 123 124 Tap getSourceWith( String identifier ); 125 126 Tap getSinkWith( String identifier ); 127 128 Set<Tap> getTraps(); 129 130 Tap getTrap( String name ); 131 132 /** 133 * Returns true if this FlowStep contains a pipe/branch with the given name. 134 * 135 * @param pipeName the name of the Pipe 136 * @return a boolean 137 */ 138 boolean containsPipeNamed( String pipeName ); 139 140 FlowStepStats getFlowStepStats(); 141 142 /** 143 * Method hasListeners returns true if {@link FlowStepListener} instances have been registered. 144 * 145 * @return boolean 146 */ 147 boolean hasListeners(); 148 149 /** 150 * Method addListener registers the given {@link FlowStepListener} with this instance. 151 * 152 * @param flowStepListener of type flowStepListener 153 */ 154 void addListener( FlowStepListener flowStepListener ); 155 156 /** 157 * Method removeListener removes the given flowStepListener from this instance. 158 * 159 * @param flowStepListener of type FlowStepListener 160 * @return true if the listener was removed 161 */ 162 boolean removeListener( FlowStepListener flowStepListener ); 163 }