Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * This software is licensed under the Apache License, Version 2.0
   * (the "License") agreement; 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.force66.beantester.valuegens;
 
 import java.util.Map;
 
Will determine an appropriate ValueGenerator for a specific class.

Author(s):
D. Ashmore
 
 public class ValueGeneratorFactory {
 	
 	private static final ValueGenerator<?>[] STOCK_GENERATORS = new ValueGenerator<?>[]{
 		,new PrimitiveValueGenerator(Long.classnew Object[]{Long.valueOf(0)})
 		,new PrimitiveValueGenerator(Integer.class"int"new Object[]{Integer.valueOf(0)})
 		,new PrimitiveValueGenerator(Double.classnew Object[]{Double.valueOf(0)})
 		,new PrimitiveValueGenerator(Float.classnew Object[]{Float.valueOf(0)})
 		,new PrimitiveValueGenerator(Short.classnew Object[]{ Short.valueOf("0")})
 		,new PrimitiveValueGenerator(Character.class"char"new Object[]{ 'A'})
 		,new GenericValueGenerator(new Object[]{InstantiationUtils.newXMLGregorianCalendar()})
 	};
 	
 	
 	public void registerGenerator(Class<?> klass,ValueGenerator<?> generator) {
 		Validate.notNull(klass"Null class not allowed");
 		Validate.notNull(generator"Null generator not allowed");
 		.put(klassgenerator);
 	}
 	
 	public ValueGenerator<?> forClass(Class<?> targetClass) {
 		Validate.notNull(targetClass"Null class not allowed");
 		ValueGenerator<?> generator = .get(targetClass);
 		if (generator == null) {
 			for (ValueGenerator<?> gen) {
 				if (gen.canGenerate(targetClass)) {
 					.put(targetClassgen);
 					return gen;
 				}
 			}
 		}
 		else {
 			return generator;
 		}
 		
 		
 		if (targetClass.isInterface()) {
         	InterfaceValueGenerator gen = new InterfaceValueGenerator(targetClass);
         	this.registerGenerator(targetClassgen);
         	return gen;
         }
 		else if (Modifier.isAbstract(targetClass.getModifiers())) {
 			return null;  // generator not possible on abstract classes
 		}
         else if (targetClass.isEnum()) {
         	return registerGenericGenerator(targetClasstargetClass.getEnumConstants());
         }
         else if (targetClass.isArray()) {
         	ArrayValueGenerator gen = new ArrayValueGenerator(targetClassthis);
         	this.registerGenerator(targetClassgen);
         	return gen;
         }
         else if (Class.class.equals(targetClass)) {
         	return registerGenericGenerator(targetClassnew Object[]{Object.class});
          }
         else {
         	return registerGenericGenerator(targetClassnew Object[]{InstantiationUtils.safeNewInstance(thistargetClass)});
         }
 
 	}
 
 	protected ValueGenerator<?> registerGenericGenerator(Class<?> targetClassObject[] objValues) {
 		GenericValueGenerator gen = new GenericValueGenerator(objValues);
 		this.registerGenerator(targetClassgen);
 		return gen;
 	}
New to GrepCode? Check out our FAQ X