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.iso.expression; 023 024import java.util.Arrays; 025 026import cascading.flow.FlowElement; 027import cascading.flow.planner.PlannerContext; 028import cascading.flow.planner.graph.ElementGraph; 029 030/** 031 * 032 */ 033public class AndElementExpression extends ElementExpression 034 { 035 public static ElementExpression and( String name, ElementExpression... elementMatchers ) 036 { 037 return new AndElementExpression( name, elementMatchers ); 038 } 039 040 public static ElementExpression and( String name, ElementCapture capture, ElementExpression... elementMatchers ) 041 { 042 return new AndElementExpression( name, capture, elementMatchers ); 043 } 044 045 public static ElementExpression and( ElementExpression... elementMatchers ) 046 { 047 return new AndElementExpression( elementMatchers ); 048 } 049 050 public static ElementExpression and( ElementCapture capture, ElementExpression... elementMatchers ) 051 { 052 return new AndElementExpression( capture, elementMatchers ); 053 } 054 055 String name; 056 ElementExpression[] matchers; 057 058 public AndElementExpression( String name, ElementExpression... matchers ) 059 { 060 this.matchers = matchers; 061 } 062 063 public AndElementExpression( String name, ElementCapture capture, ElementExpression... matchers ) 064 { 065 super( capture ); 066 this.matchers = matchers; 067 } 068 069 public AndElementExpression( ElementExpression... matchers ) 070 { 071 this.matchers = matchers; 072 } 073 074 public AndElementExpression( ElementCapture capture, ElementExpression... matchers ) 075 { 076 super( capture ); 077 this.matchers = matchers; 078 } 079 080 @Override 081 public boolean applies( PlannerContext plannerContext, ElementGraph elementGraph, FlowElement flowElement ) 082 { 083 for( ElementExpression matcher : matchers ) 084 { 085 if( !matcher.applies( plannerContext, elementGraph, flowElement ) ) 086 return false; 087 } 088 089 return true; 090 } 091 092 @Override 093 public String toString() 094 { 095 if( name != null ) 096 return name; 097 098 final StringBuilder sb = new StringBuilder( "And{" ); 099 sb.append( Arrays.toString( matchers ) ); 100 sb.append( '}' ); 101 return sb.toString(); 102 } 103 }