/** * <copyright> Copyright (c) 2008-2009 Jonas Helming, Maximilian Koegel. All rights reserved. This program and the * accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this * distribution, and is available at http://www.eclipse.org/legal/epl-v10.html </copyright> */ package fr.inria.diverse.k3.benchVM.synthesis.generic.common.attribute; import java.util.LinkedHashMap; import java.util.Map; import java.util.Random; import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EEnum; import org.eclipse.emf.ecore.EcorePackage; /** * Class that grants access to the attribute setters in order to generate * new attributes when generating or changing an Ecore model. These setters * can be accessed by {@link #getAttributeSetters()}. * * @see IAttributeSetter */ public final class AttributeHandler { /** * The Random-object corresponding to the current map of AttributeSetters. * * @see #setRandom(Random) */ private Random random; /** * Map that maps every attributeType to an AttributeSetter. * * @see #getAttributeSetters() */ private Map<EClassifier, IAttributeSetter<?>> attributeSetters; /** * Returns a map containing an AttributeSetter-instance for each * attribute type, granting access to all AttributeSetters. * * @return the map that maps every attribute type to its attribute setter * @see AttributeSetter */ public Map<EClassifier, IAttributeSetter<?>> getAttributeSetters() { if(attributeSetters != null) { return attributeSetters; } EcorePackage ecoreInstance = EcorePackage.eINSTANCE; attributeSetters = new LinkedHashMap<EClassifier, IAttributeSetter<?>>(); IAttributeSetter<?> oAttributeSetter; oAttributeSetter = new AttributeSetterEBoolean(random); attributeSetters.put(ecoreInstance.getEBoolean(), oAttributeSetter); attributeSetters.put(ecoreInstance.getEBooleanObject(), oAttributeSetter); attributeSetters.put(ecoreInstance.getEByteArray(), new AttributeSetterEByteArray(random, 100)); attributeSetters.put(ecoreInstance.getEString(), new AttributSetterEString(random)); oAttributeSetter = new AttributeSetterEInt(random); attributeSetters.put(ecoreInstance.getEInt(), oAttributeSetter); attributeSetters.put(ecoreInstance.getEIntegerObject(), oAttributeSetter); attributeSetters.put(ecoreInstance.getEDate(), new AttributeSetterEDate(random)); oAttributeSetter = new AttributeSetterELong(random); attributeSetters.put(ecoreInstance.getELong(), oAttributeSetter); attributeSetters.put(ecoreInstance.getELongObject(), oAttributeSetter); oAttributeSetter = new AttributeSetterEByte(random); attributeSetters.put(ecoreInstance.getEByte(), oAttributeSetter); attributeSetters.put(ecoreInstance.getEByteObject(), oAttributeSetter); oAttributeSetter = new AttributeSetterEChar(random); attributeSetters.put(ecoreInstance.getEChar(), oAttributeSetter); attributeSetters.put(ecoreInstance.getECharacterObject(), oAttributeSetter); oAttributeSetter = new AttributeSetterEDouble(random); attributeSetters.put(ecoreInstance.getEDouble(), oAttributeSetter); attributeSetters.put(ecoreInstance.getEDoubleObject(), oAttributeSetter); oAttributeSetter = new AttributeSetterEFloat(random); attributeSetters.put(ecoreInstance.getEFloat(), oAttributeSetter); attributeSetters.put(ecoreInstance.getEFloatObject(), oAttributeSetter); oAttributeSetter = new AttributeSetterEShort(random); attributeSetters.put(ecoreInstance.getEShort(), oAttributeSetter); attributeSetters.put(ecoreInstance.getEShortObject(), oAttributeSetter); attributeSetters.put(ecoreInstance.getEBigInteger(),new AttributeSetterEBigInteger(random)); attributeSetters.put(ecoreInstance.getEBigDecimal(),new AttributeSetterEBigDecimal(random)); return attributeSetters; } /** * Sets the current Random-object to <code>newRandom</code>. * The {@link #attributeSetters}-map is set to <code>null</code>, * as new AttributeSetters have to be created for the new random value. * * @param newRandom the new value for <code>this.random</code> */ public void setRandom(Random newRandom) { attributeSetters = null; random = newRandom; } /** * Returns an instance of the EEnum AttributeSetter belonging to the * EEnum specified by eEnum. * * @param eEnum the EEnum to create the AttributeSetter for * @return a new AttributeSetterEEnum instance */ public AttributeSetterEEnum getEEnumSetter(EEnum eEnum) { return new AttributeSetterEEnum(eEnum, random); } }