AbstractGenericCollectionGenerator.java

/*
 * Copyright 2000-2014 Namics AG. All rights reserved.
 */

package com.namics.commons.random.generator.basic;

import com.namics.commons.random.RandomData;
import com.namics.commons.random.generator.InformedRandomGenerator;
import com.namics.commons.random.generator.RandomGenerator;
import com.namics.commons.random.support.Utils;

import java.lang.reflect.Type;
import java.util.Collection;

/**
 * AbstractGenericCollectionGenerator.
 *
 * @author aschaefer, Namics AG
 * @since 20.08.14 15:18
 */
public abstract class AbstractGenericCollectionGenerator<T extends Collection> implements RandomGenerator, InformedRandomGenerator {
	@Override
	public abstract T random();

	@Override
	public T random(Object... information) {
		T result = random();

		Type[] generics = Utils.objectsOfType(Type.class, information);
		String[] fields = Utils.objectsOfType(String.class, information);

		if (generics.length == 1) {
			Type clazz =  generics[0];
			for (int count = 0; count < RandomData.randomInteger(1, 10); count++) {
				result.add(RandomData.random(clazz, fields));
			}
		}
		return result;
	}

	@Override
	public abstract Iterable<Class> supportedTypes();
}