/** * Method to call the visitor for the supplied {@link Operation} and recursively calls itself, if the * {@link Operation} is a {@link CompositeOperation}. */ private void visit(Operation operation, Visitor<Operation> visitor) { visitor.visit(operation); if (operation instanceof CompositeOperation) { if (((CompositeOperation) operation).getOperations() != null) { for (Operation child : ((CompositeOperation) operation).getOperations()) { visit(child, visitor); } } } }
/** * Method to call the visitor for the supplied {@link Operation} and recursively calls itself, if the * {@link Operation} is a {@link CompositeOperation}. */ private void visit(Operation operation, Visitor<Operation> visitor) { visitor.visit(operation); if (operation instanceof CompositeOperation) { if (((CompositeOperation) operation).getOperations() != null) { for (Operation child : ((CompositeOperation) operation).getOperations()) { visit(child, visitor); } } } }
private boolean requiresIteration(Operation operation) { if (operation instanceof Iteration) { return false; } if (operation instanceof AbstractIterationOperation) return true; if (operation instanceof CompositeOperation) { List<Operation> operations = ((CompositeOperation) operation).getOperations(); for (Operation op : operations) { if (op instanceof AbstractIterationOperation) return true; else if (!(op instanceof Iteration) && requiresIteration(op)) return true; } } return false; }
/** * Indicates whether or not the provided {@link Operation} is or contains any {@link Operation}s of the specified type. This will recursively * check all of the suboperations on {@link CompositeOperation}s as well. */ public static boolean hasOperationType(Operation operation, Class<? extends Operation> operationType) { if (operation == null) return false; if (operationType.isAssignableFrom(operation.getClass())) return true; if (operation instanceof CompositeOperation) { List<Operation> operations = ((CompositeOperation) operation).getOperations(); for (Operation childOperation : operations) { if (hasOperationType(childOperation, operationType)) return true; } } return false; }
/** * Indicates whether or not the provided {@link Operation} is or contains any {@link Operation}s of the specified type. This will recursively * check all of the suboperations on {@link CompositeOperation}s as well. */ public static boolean hasOperationType(Operation operation, Class<? extends Operation> operationType) { if (operation == null) return false; if (operationType.isAssignableFrom(operation.getClass())) return true; if (operation instanceof CompositeOperation) { List<Operation> operations = ((CompositeOperation) operation).getOperations(); for (Operation childOperation : operations) { if (hasOperationType(childOperation, operationType)) return true; } } return false; }
private boolean requiresIteration(Operation operation) { if (operation instanceof Iteration) { return false; } if (operation instanceof AbstractIterationOperation) return true; if (operation instanceof CompositeOperation) { List<Operation> operations = ((CompositeOperation) operation).getOperations(); for (Operation op : operations) { if (op instanceof AbstractIterationOperation) return true; else if (!(op instanceof Iteration) && requiresIteration(op)) return true; } } return false; }