View Javadoc

1   /*******************************************************************************
2    * Copyright 2013 André Rouél and Dominik Seichter
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * 
8    *   http://www.apache.org/licenses/LICENSE-2.0
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   ******************************************************************************/
16  package net.sf.qualitytest.blueprint.strategy.creation;
17  
18  import java.util.Random;
19  
20  import net.sf.qualitycheck.Check;
21  import net.sf.qualitycheck.Throws;
22  import net.sf.qualitycheck.exception.IllegalNullArgumentException;
23  import net.sf.qualitycheck.exception.IllegalStateOfArgumentException;
24  
25  /**
26   * Creation strategy which creates a random enum constant during construction of a blueprint.
27   * 
28   * @author Dominik Seichter
29   */
30  public class RandomEnumCreationStrategy extends ValueCreationStrategy<Enum<?>> {
31  
32  	private final Random random = new Random();
33  
34  	/**
35  	 * Blueprint an enum value using the default configuration.
36  	 * <p>
37  	 * This method returns the a randomly selected value of a given enumeration.
38  	 * 
39  	 * @param expectedClazz
40  	 *            the class of an enumeration
41  	 * @return a valid enum value
42  	 */
43  	@Override
44  	@Throws({ IllegalNullArgumentException.class, IllegalStateOfArgumentException.class })
45  	public Enum<?> createValue(final Class<?> expectedClazz) {
46  		Check.notNull(expectedClazz, "expectedClazz");
47  		Check.stateIsTrue(expectedClazz.isEnum(), "Argument 'expectedClazz' must be an enum.");
48  		@SuppressWarnings("unchecked")
49  		final Class<? extends Enum<?>> enumClazz = (Class<? extends Enum<?>>) expectedClazz;
50  		final Enum<?>[] enumConstants = enumClazz.getEnumConstants();
51  		final int index = enumConstants.length > 0 ? random.nextInt(enumConstants.length) : -1;
52  		return enumConstants.length > 0 ? enumConstants[index] : null;
53  	}
54  
55  }