    001/*
    002 * Copyright (c) 2007-2016 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
    021package cascading.flow.planner.iso.expression;
    022
    023import java.util.Arrays;
    024
    025import cascading.flow.FlowElement;
    026import cascading.flow.planner.PlannerContext;
    027import cascading.flow.planner.graph.ElementGraph;
    028
    029/**
    030 *
    031 */
    032public class AndElementExpression extends ElementExpression
    033  {
    034  public static ElementExpression and( ElementExpression... elementMatchers )
    035    {
    036    return new AndElementExpression( elementMatchers );
    037    }
    038
    039  public static ElementExpression and( ElementCapture capture, ElementExpression... elementMatchers )
    040    {
    041    return new AndElementExpression( capture, elementMatchers );
    042    }
    043
    044  ElementExpression[] matchers;
    045
    046  public AndElementExpression( ElementExpression... matchers )
    047    {
    048    this.matchers = matchers;
    049    }
    050
    051  public AndElementExpression( ElementCapture capture, ElementExpression... matchers )
    052    {
    053    super( capture );
    054    this.matchers = matchers;
    055    }
    056
    057  @Override
    058  public boolean applies( PlannerContext plannerContext, ElementGraph elementGraph, FlowElement flowElement )
    059    {
    060    for( ElementExpression matcher : matchers )
    061      {
    062      if( !matcher.applies( plannerContext, elementGraph, flowElement ) )
    063        return false;
    064      }
    065
    066    return true;
    067    }
    068
    069  @Override
    070  public String toString()
    071    {
    072    final StringBuilder sb = new StringBuilder( "And{" );
    073    sb.append( Arrays.toString( matchers ) );
    074    sb.append( '}' );
    075    return sb.toString();
    076    }
    077  }