Package com.dianping.cat.consumer.matrix

Source Code of com.dianping.cat.consumer.matrix.MatrixReportFilter

package com.dianping.cat.consumer.matrix;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;

import com.dianping.cat.consumer.matrix.model.entity.Matrix;
import com.dianping.cat.consumer.matrix.model.entity.MatrixReport;
import com.dianping.cat.consumer.matrix.model.transform.DefaultXmlBuilder;

public class MatrixReportFilter extends DefaultXmlBuilder {

  private int m_maxSize = 200;

  private static final String OTHERS = "OTHERS";

  public void setMaxSize(int maxSize) {
    m_maxSize = maxSize;
  }

  @Override
  public void visitMatrixReport(MatrixReport matrixReport) {
    Map<String, Matrix> matrixs = matrixReport.getMatrixs();
    Collection<Matrix> matrix = matrixs.values();
    int size = matrix.size();

    if (size > m_maxSize) {
      List<Matrix> matrixList = new ArrayList<Matrix>(matrix);
      Collections.sort(matrixList, new MeatricCompartor());

      matrixs.clear();
      for (int i = 0; i < m_maxSize; i++) {
        Matrix temp = matrixList.get(i);
        matrixs.put(temp.getName(), temp);
      }

      Matrix value = new Matrix(OTHERS);
      for (int i = m_maxSize; i < size; i++) {
        Matrix item = matrixList.get(i);

        value.setType(item.getType());
        value.setCount(item.getCount() + value.getCount());
      }
      matrixs.put(OTHERS, value);
    }

    super.visitMatrixReport(matrixReport);
  }

  public static class MeatricCompartor implements Comparator<Matrix> {

    @Override
    public int compare(Matrix o1, Matrix o2) {
      return o2.getCount() - o1.getCount();
    }
  }

}
TOP

Related Classes of com.dianping.cat.consumer.matrix.MatrixReportFilter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.