001    /*
002     * Copyright (c) 2007-2014 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    
021    package cascading.operation.aggregator;
022    
023    import java.beans.ConstructorProperties;
024    
025    import cascading.tuple.Fields;
026    
027    /**
028     * Class MaxValue is an {@link cascading.operation.Aggregator} that returns the maximum value encountered in the
029     * current group.
030     * <p/>
031     * As opposed to the {@link Max} class, values are expected to be {@link Comparable} types vs numeric representations and
032     * the {@link Comparable#compareTo(Object)} result is use for max comparison.
033     */
034    public class MaxValue extends ExtremaValueBase
035      {
036      /** Field FIELD_NAME */
037      public static final String FIELD_NAME = "max";
038    
039      /** Constructs a new instance that returns the maximum value encountered in the field name "max". */
040      public MaxValue()
041        {
042        super( 1, new Fields( FIELD_NAME ) );
043        }
044    
045      /**
046       * Constructs a new instance that returns the maximum value encountered in the given fieldDeclaration field name.
047       *
048       * @param fieldDeclaration of type Fields
049       */
050      @ConstructorProperties({"fieldDeclaration"})
051      public MaxValue( Fields fieldDeclaration )
052        {
053        super( 1, fieldDeclaration );
054        }
055    
056      /**
057       * Constructs a new instance that returns the maximum value encountered in the given fieldDeclaration field name.
058       * Any argument matching an ignoredValue won't be compared.
059       *
060       * @param fieldDeclaration of type Fields
061       * @param ignoreValues     of type Object...
062       */
063      @ConstructorProperties({"fieldDeclaration", "ignoreValues"})
064      public MaxValue( Fields fieldDeclaration, Object... ignoreValues )
065        {
066        super( fieldDeclaration, ignoreValues );
067        }
068    
069      @Override
070      protected boolean compare( Comparable lhs, Comparable rhs )
071        {
072        return lhs.compareTo( rhs ) < 0;
073        }
074      }