001/*
002 * Copyright (c) 2007-2015 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.operation.assertion;
022
023import java.beans.ConstructorProperties;
024
025import cascading.management.annotation.Property;
026import cascading.management.annotation.PropertyDescription;
027import cascading.management.annotation.Visibility;
028
029/**
030 * Class AssertGroupSizeEquals is an {@link cascading.operation.GroupAssertion} that asserts the number of items in the current group
031 * is less than the given size.
032 * </p>
033 * If a patternString is given, only grouping keys that match the regular expression will have this assertion applied.
034 * Note multiple key values will be delimited by a tab character.
035 */
036public class AssertGroupSizeLessThan extends AssertGroupBase
037  {
038
039  /**
040   * Constructor AssertGroupSizeLessThan creates a new AssertGroupSizeLessThan instance.
041   *
042   * @param size of type long
043   */
044  @ConstructorProperties({"size"})
045  public AssertGroupSizeLessThan( long size )
046    {
047    super( "group size: %s, is more than or equal to: %s, in group %s: %s", size );
048    }
049
050  /**
051   * Constructor AssertGroupSizeLessThan creates a new AssertGroupSizeLessThan instance.
052   *
053   * @param patternString of type String
054   * @param size          of type long
055   */
056  @ConstructorProperties({"patternString", "size"})
057  public AssertGroupSizeLessThan( String patternString, long size )
058    {
059    super( "group matching '%s' with size: %s, is more than or equal to: %s, in group %s: %s", patternString, size );
060    }
061
062  @Property(name = "size", visibility = Visibility.PRIVATE)
063  @PropertyDescription("The maximum group size.")
064  @Override
065  public long getSize()
066    {
067    return super.getSize();
068    }
069
070  @Override
071  protected boolean assertFails( Long groupSize )
072    {
073    return groupSize >= size;
074    }
075  }