package eu.swiec.bearballin.model;
import java.text.Format;
import java.util.ArrayList;
import java.util.List;
import eu.swiec.bearballin.model.exceptions.EntityExistanceException;
public class TestDataCollector implements ITestData {
final String processName;
public List<TestDataEntity> testDataEntitiesList = new ArrayList<TestDataEntity>();
public TestDataCollector(String processName) {
this.processName = processName;
}
public class TestDataEntity {
final public String stepId;
final public String stepName;
final public String dataName;
final public Object data;
final boolean isDefaultValue;
public TestDataEntity(String stepId, String stepName, String dataName, Object data) {
this(stepId, stepName, dataName, data, false);
}
public String getProcessName() {
return processName;
}
/**
* @param stepId
* @param stepName
* @param dataName
* @param data
* @param isDefault - is default means, it is constant (not taken from html)
*/
public TestDataEntity(String stepId, String stepName, String dataName, Object data, boolean isDefault) {
this.stepId = stepId;
this.dataName = dataName;
this.stepName = stepName;
this.data = data;
this.isDefaultValue = isDefault;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof TestDataEntity) {
TestDataEntity tdeObj = (TestDataEntity) obj;
return (dataName == tdeObj.dataName);
}
return obj.toString().equals(dataName) || super.equals(obj);
}
@Override
public String toString() {
return dataName;
}
}
public TestDataEntity getTestDataEntity(String dataName) {
return getTestDataEntity(null, null, dataName);
}
public Object getTestEntityDataObject(String dataName) {
return getTestDataEntity(null, null, dataName).data;
}
public TestDataEntity getTestDataEntity(String stepId, String dataName) {
return getTestDataEntity(stepId, null, dataName);
}
public TestDataEntity getTestDataEntity(String stepId, String stepName, String dataName) {
TestDataEntity searchedEntity = new TestDataEntity(stepId, stepName, dataName, new Object());
if (testDataEntitiesList.contains(searchedEntity)) {
return testDataEntitiesList.get(testDataEntitiesList.lastIndexOf(searchedEntity));
} else
return null;
}
public List<String> getStepsNames() {
List<String> names = new ArrayList<String>();
for (TestDataEntity tde : testDataEntitiesList) {
names.add(tde.stepName);
}
return names;
}
public List<String> get(String attName) throws SecurityException, NoSuchFieldException {
List<String> names = new ArrayList<String>();
for (TestDataEntity tde : testDataEntitiesList) {
names.add(tde.getClass().getField(attName).toString());
}
return names;
}
public List<String> getDataNames() {
List<String> names = new ArrayList<String>();
for (TestDataEntity tde : testDataEntitiesList) {
names.add(tde.stepName);
}
return names;
}
public List<String> getStepsIds() {
List<String> names = new ArrayList<String>();
for (TestDataEntity tde : testDataEntitiesList) {
names.add(tde.stepId);
}
return names;
}
public void collect(String stepId, String stepName, String dataName, Object data) {
collect(stepId, stepName, dataName, data, null);
}
public void collect(String stepId, String stepName, String dataName, Object data, Format f) {
if (f != null && data != null) {
addValue(stepId, stepName, dataName, f.format(data), false);
} else {
addValue(stepId, stepName, dataName, data, false);
}
}
public TestDataCollector addDefaultValue(String dataName, Object data) {
return addValue("", "", dataName, data, true);
}
private TestDataCollector addValue(String stepId, String stepName, String dataName, Object data, boolean isDefaultValue) {
TestDataEntity entity = new TestDataEntity(stepId, stepName, dataName, data);
if (testDataEntitiesList.contains(entity)) {
throw new EntityExistanceException("Test data entity already exists");
} else {
testDataEntitiesList.add(entity);
return this;
}
}
}