All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bbottema.loremipsumobjects.LoremIpsumObjectCreator Maven / Gradle / Ivy

There is a newer version: 4.2.0
Show newest version
/*
 * Copyright (C) 2019 Benny Bottema ([email protected])
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.bbottema.loremipsumobjects;

import org.bbottema.loremipsumobjects.typefactories.ClassBasedFactory;

import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;

/**
 * Tool to create populated dummy objects of a given class. This tool will recursively run through its setters and try to come up with newly
 * populated objects for those fields.
 * 

* To avoid recursive infinite loops, this tool keeps track of previously populated instances of a certain type and reuse that instead. *

* For numbers being generated a random number is being using, for strings a lorem ipsum generated is being used. * * @see #createLoremIpsumObject(Class) */ public class LoremIpsumObjectCreator { /** * A map that contains deferred class types for a given type. With this you can defer the creation of a dummy instance to another type. * This is useful if you need to instance dummy objects for an interface or abstract class. * * @see ClassBindings */ private final ClassBindings classBindings; /** * Default constructor: configures the Dummy Creator with vanilla new bindings and caches. */ public LoremIpsumObjectCreator() { this(new ClassBindings()); } /** * Constructor: configures the Dummy Creator with a given {@link ClassBindings} instance and new caches. */ public LoremIpsumObjectCreator(final ClassBindings classBindings) { this.classBindings = classBindings; } /** * Main method, creates a dummy object of a given type (using {@link ClassBasedFactory#createLoremIpsumObject(Type[], Map, ClassBindings, List)}). *

* Provide your own {@link ClassBindings} in {@link #LoremIpsumObjectCreator(ClassBindings)} to control how objects are created for specific types * (such as the abstract List class). This is the main-method used to create a dummy of a certain class. It's called with the needed * class. e.g. Integer i = createLoremIpsumObjectOfClass(Integer.class) * * @param The type to be created and returned (returned type can be a sub type of T). * @param clazz The type that should be created * @return The instantiated and populated object (can be a sub type, depending how the {@link ClassBindings} are configured!). * @throws IllegalArgumentException Thrown if an abstract type or interface was given for which no binding could be found in the * provided {@link ClassBindings}. */ public T createLoremIpsumObject(final Class clazz) { return new ClassBasedFactory<>(clazz).createLoremIpsumObject(classBindings); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy