001/**
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements.  See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership.  The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License.  You may obtain a copy of the License at
009 *
010 *     http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018
019package org.apache.hadoop.mapreduce.lib.aggregate;
020
021import java.util.ArrayList;
022
023import org.apache.hadoop.classification.InterfaceAudience;
024import org.apache.hadoop.classification.InterfaceStability;
025
026/**
027 * This class implements a value aggregator that maintain the maximum of 
028 * a sequence of long values.
029 * 
030 */
031@InterfaceAudience.Public
032@InterfaceStability.Stable
033public class LongValueMax implements ValueAggregator<String> {
034
035  long maxVal = Long.MIN_VALUE;
036    
037  /**
038   *  the default constructor
039   *
040   */
041  public LongValueMax() {
042    reset();
043  }
044
045  /**
046   * add a value to the aggregator
047   * 
048   * @param val
049   *          an object whose string representation represents a long value.
050   * 
051   */
052  public void addNextValue(Object val) {
053    long newVal = Long.parseLong(val.toString());
054    if (this.maxVal < newVal) {
055      this.maxVal = newVal;
056    }
057  }
058    
059  /**
060   * add a value to the aggregator
061   * 
062   * @param newVal
063   *          a long value.
064   * 
065   */
066  public void addNextValue(long newVal) {
067    if (this.maxVal < newVal) {
068      this.maxVal = newVal;
069    };
070  }
071    
072  /**
073   * @return the aggregated value
074   */
075  public long getVal() {
076    return this.maxVal;
077  }
078    
079  /**
080   * @return the string representation of the aggregated value
081   */
082  public String getReport() {
083    return ""+maxVal;
084  }
085
086  /**
087   * reset the aggregator
088   */
089  public void reset() {
090    maxVal = Long.MIN_VALUE;
091  }
092
093  /**
094   * @return return an array of one element. The element is a string
095   *         representation of the aggregated value. The return value is
096   *         expected to be used by the a combiner.
097   */
098  public ArrayList<String> getCombinerOutput() {
099    ArrayList<String> retv = new ArrayList<String>(1);;
100    retv.add("" + maxVal);
101    return retv;
102  }
103}