/***************************************************************************************************
 * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
 * accompanying materials are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors: IBM Corporation - initial API and implementation
 **************************************************************************************************/
package org.eclipse.wst.common.internal.emf.utilities;



public class ArrayUtil {

	public static Object[] concat(Object[] array1, Object[] array2) {
		Class componentType = null;
		if (array1.getClass().getComponentType() == array2.getClass().getComponentType())
			componentType = array1.getClass().getComponentType();
		else
			componentType = Object.class;

		return concat(array1, array2, componentType);
	}

	public static Object[] concat(Object[] array1, Object[] array2, Class componentType) {
		Object[] result = (Object[]) java.lang.reflect.Array.newInstance(componentType, array1.length + array2.length);
		System.arraycopy(array1, 0, result, 0, array1.length);
		System.arraycopy(array2, 0, result, array1.length, array2.length);
		return result;
	}

	public static Object[] concatAll(java.util.List arrays, Class componentType) {
		int resultLength = 0;
		for (int i = 0; i < arrays.size(); i++) {
			resultLength += ((Object[]) arrays.get(i)).length;
		}
		Object[] result = (Object[]) java.lang.reflect.Array.newInstance(componentType, resultLength);
		int pos = 0;
		for (int i = 0; i < arrays.size(); i++) {
			Object[] array = (Object[]) arrays.get(i);
			System.arraycopy(array, 0, result, pos, array.length);
			pos += array.length;
		}
		return result;
	}
}