/**
 * Copyright (c) 2003-2004 System Integrator Corporation.
 *                 All Rights Reserved.
 */
package jp.co.sint.tools;

import java.util.*;
import org.apache.log4j.Category;
import jp.co.sint.config.*;

/**
 * @version $Id: SIArrayUtil.java,v 1.0 2003/07/25 Exp $
 * @author     : Jinwang Chen
 * <br>Description: オブジェクトの配列のutilities
 * <p>History</p>
 * <p>Author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reason</p>
 * ============&nbsp;&nbsp;&nbsp;==========&nbsp;&nbsp;===========================<br>
 * J.W.Chen       2003/07/28  Original
 */

public class SIArrayUtil{
  //ログ用のインスタンスの生成
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);

  /**
   * <b>SIArrayUtil</b>
   * コンストラクタ
   * @param  なし
   * @return なし
   * @throws なし
   */
  private SIArrayUtil(){}

  /**
   * 指定の配列にもう一つエレメントを追加します。
   * @param array 元の配列
   * @param element 追加したい要素
   * @return 追加後の配列
   * @throws NullPointerException array==nullの場合
   */
  public static Object[] add(Object[] array, Object element)throws NullPointerException{
    if (array==null){
      throw new NullPointerException("array");
    }

    int size = array.length;

    Object[] new_array = (Object[])java.lang.reflect.Array.newInstance(array.getClass().getComponentType(), size+1);

    System.arraycopy(array, 0, new_array, 0, size);

    new_array[size]=element;

    return(new_array);
  }

  /**
   * 配列の中身をソートして返します。
   * @param array 対象の配列
   * @param comparator 比較クラス
   */
  public static void sort(Object[] array, Comparator comparator){
    if (array!=null && array.length>1){
      ArrayList list = new ArrayList();
      for(int i=0;i<array.length;i++){
        list.add(array[i]);
      }
      if (comparator==null){
        Collections.sort(list);
      }else{
        Collections.sort(list,comparator);
      }
      for(int i=0;i<array.length;i++){
        array[i] = list.get(i);
      }
    }
  }
}