/**
* <copyright>
*
* Copyright (c) 2009, 2010 Springsite BV (The Netherlands) and others
* 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
*
* Contributors:
* Martin Taal - Initial API and implementation
*
* </copyright>
*
* $Id: EAttributeDataGenerator.java,v 1.10 2011/08/25 12:33:42 mtaal Exp $
*/
package org.eclipse.emf.texo.datagenerator;
import java.util.List;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EObject;
/**
* Generates a value for a specific EAttribute and sets it in an EObject. Uses an {@link EDataTypeDataGenerator}
* internally to create the data.
*
* @author <a href="mailto:mtaal@elver.org">Martin Taal</a>
* @version $Revision: 1.10 $
*/
public class EAttributeDataGenerator extends EStructuralFeatureDataGenerator {
private EAttribute eAttribute;
private EDataTypeDataGenerator eDataTypeDataGenerator;
/**
* Creates the data for one {@link EAttribute) and sets it in the passed {@link EObject}.
*
* @param eObject
* the EObject in which a value is set
* @param depth
* is ignored, only relevant for EReferences
*/
@Override
public void setData(final EObject eObject) {
if (eAttribute.isMany()) {
@SuppressWarnings("unchecked")
final List<Object> localValues = (List<Object>) eObject.eGet(eAttribute);
for (int i = 0; i < getModelDataGenerator().getCollectionSize(); i++) {
final Object value = eDataTypeDataGenerator.createValue();
if (value != null) {
localValues.add(value);
}
}
} else {
eObject.eSet(eAttribute, eDataTypeDataGenerator.createValue());
}
}
@Override
public Object createValue(EObject eObject) {
return eDataTypeDataGenerator.createValue();
}
public EAttribute getEAttribute() {
return eAttribute;
}
public void setEAttribute(final EAttribute attribute) {
eAttribute = attribute;
eDataTypeDataGenerator = getModelDataGenerator().getEDataTypeDataGenerator(eAttribute.getEAttributeType(),
attribute);
super.setEStructuralFeature(attribute);
}
}