/********************************************************************************
 * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
 *
 * See the NOTICE file(s) distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 ********************************************************************************/

package org.eclipse.mdm.businessobjects.utils;

import io.vavr.collection.HashMap;
import io.vavr.collection.Map;

/**
 * Utility class for method reflection
 * 
 * @author Johannes Stamm, Peak Solution GmbH Nuernberg
 *
 */
public class ReflectUtil {

	private static final Map<Class<?>, Class<?>> TYPE_MAP = HashMap.of(boolean.class, Boolean.class, byte.class,
			Byte.class, char.class, Character.class, double.class, Double.class, float.class, Float.class, int.class,
			Integer.class, long.class, Long.class, short.class, Short.class);

	/**
	 * This function returns same value as to.isAssignableFrom(from), except for
	 * wrapper classes.
	 * 
	 * to.isAssignableFrom(from) returns false for wrapper class <-> primitive This
	 * function returns true in that case.
	 * 
	 * @param from class to assign from
	 * @param to   class to assign to
	 * @return true if assigning is possible (respecting auto boxing/unboxing) false
	 *         otherwise
	 */
	public static boolean isAssignable(Class<?> from, Class<?> to) {
		return to.isAssignableFrom(from) || isPrimitiveWrapperOf(to, from) || isPrimitiveWrapperOf(from, to);
	}

	/**
	 * Checks if wrapperClazz is wrapper class of primitiveClazz.
	 * 
	 * @param wrapperClazz   the wrapper class
	 * @param primitiveClazz the primitive class
	 * @return True if wrapperClazz is wrapper class of primitiveClazz, false
	 *         otherwise.
	 */
	private static boolean isPrimitiveWrapperOf(Class<?> wrapperClazz, Class<?> primitiveClazz) {
		return TYPE_MAP.get(primitiveClazz).map(c -> c == wrapperClazz).getOrElse(false);
	}

}
