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