@Override protected Class<? extends Operation> getType( FlowElement flowElement ) { if( !( flowElement instanceof Operator ) ) return null; return ( (Operator) flowElement ).getOperation().getClass(); } }
private static int hash( FlowElement flowElement ) { int lhs = flowElement.getClass().getName().hashCode(); int rhs = 0; if( flowElement instanceof Operator && ( (Operator) flowElement ).getOperation() != null ) rhs = ( (Operator) flowElement ).getOperation().getClass().getName().hashCode(); else if( flowElement instanceof Tap && ( (Tap) flowElement ).getScheme() != null ) rhs = ( (Tap) flowElement ).getScheme().getClass().getName().hashCode(); else if( flowElement instanceof Splice ) rhs = ( (Splice) flowElement ).getJoiner().getClass().getName().hashCode() + 31 * ( (Splice) flowElement ).getNumSelfJoins(); return pair( lhs, rhs ); }
public Collection<Operation> getAllOperations() { Set<FlowElement> vertices = getElementGraph().vertexSet(); List<Operation> operations = new ArrayList<Operation>(); // operations impl equals, so two instance may be the same for( FlowElement vertex : vertices ) { if( vertex instanceof Operator ) operations.add( ( (Operator) vertex ).getOperation() ); } return operations; }
@Override public boolean applies( PlannerContext flowPlanner, ElementGraph elementGraph, FlowElement flowElement ) { boolean applies = super.applies( flowPlanner, elementGraph, flowElement ); return applies && !( (Operator) flowElement ).getOperation().isSafe(); } }
private void verifyAllOperationsAreSerializable(ElementGraph elementGraph) { for (FlowElement flowElement : elementGraph.vertexSet()) { if (flowElement instanceof Operator) { Operator operator = (Operator) flowElement; verifySingleOperationIsSerializable(operator.getOperation()); } } }
@Override public void complete( Duct previous ) { try { ( (Operator) getFlowElement() ).getOperation().flush( flowProcess, operationCall ); } finally { super.complete( previous ); } }
@Override public void prepare() { super.prepare(); // if fails, skip the this prepare ( (Operator) getFlowElement() ).getOperation().prepare( flowProcess, operationCall ); }
@Override public void cleanup() { if( !retainCollector ) // see comments for RETAIN_COLLECTOR operationCall.setOutputCollector( null ); try { ( (Operator) getFlowElement() ).getOperation().cleanup( flowProcess, operationCall ); } finally { super.cleanup(); // guarantee this happens } } }
@Override public boolean applies( PlannerContext plannerContext, ElementGraph elementGraph, FlowElement flowElement ) { if( !( flowElement instanceof Operator ) ) return false; Operator operator = (Operator) flowElement; if( !operator.hasPlannerLevel() ) return false; PlannerLevel plannerLevel = plannerContext.getPlannerLevelFor( plannerLevelClass ); if( plannerLevel == null ) return false; if( !( (PlannedOperation) operator.getOperation() ).supportsPlannerLevel( plannerLevel ) ) return false; return operator.getPlannerLevel().isStricterThan( plannerLevel ); } }