package net.timbusproject.extractors.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import net.timbusproject.extractors.modules.tavernaextractor.TavernaExtractor;
import net.timbusproject.extractors.modules.tavernaextractor.utils.ArchiUtils;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import uk.ac.bolton.archimate.model.IAccessRelationship;
import uk.ac.bolton.archimate.model.IArchimateElement;
import uk.ac.bolton.archimate.model.IBusinessObject;
import uk.ac.bolton.archimate.model.IBusinessProcess;
import uk.ac.bolton.archimate.model.IRelationship;
import uk.ac.bolton.archimate.model.ITriggeringRelationship;
public class ArchiUtilsTest {
/*
* Following constants are related to the matchbox.archi file found in the resource folder
*/
final int RELATIONS_COUNT = 168;
final int TRIGGERING_RELATIONS_COUNT = 11;
private static List<IRelationship> ALL_RELATIONS;
private static List<IArchimateElement> ALL_PROCESSES;
private static List<IArchimateElement> ALL_BUSINESSOBJECTS;
private static TavernaExtractor matchboxExtractor;
private static TavernaExtractor wsdlActivityExtractor;
private static TavernaExtractor beanshellActivityExtractor;
private static TavernaExtractor loopingExtractor;
@BeforeClass
public static void customInit() throws Exception {
matchboxExtractor = new TavernaExtractor(true);
matchboxExtractor.setArchimateOutputPath(Paths.get("test", "resources", "matchbox.archi"));
matchboxExtractor.setInputFileName(Paths.get("test", "resources", "matchbox.t2flow"));
matchboxExtractor.process(false);
ALL_RELATIONS = matchboxExtractor.getRelations();
ALL_PROCESSES = matchboxExtractor.getBusinessProcesses();
ALL_BUSINESSOBJECTS = matchboxExtractor.getBusinessObjects();
}
@Test
@Ignore
public void test_Looping() throws Exception {
loopingExtractor = new TavernaExtractor(true);
loopingExtractor.setArchimateOutputPath(Paths.get("test", "resources", "looping.archimate"));
loopingExtractor.setInputFileName(Paths.get("test", "resources", "looping.t2flow"));
loopingExtractor.process(false);
}
@Test
@Ignore
public void test_processWSDLActivity() throws Exception {
wsdlActivityExtractor = new TavernaExtractor(true);
wsdlActivityExtractor.setArchimateOutputPath(Paths.get("test", "resources", "WSDLActivity.archimate"));
wsdlActivityExtractor.setInputFileName(Paths.get("test", "resources", "WSDLActivity.t2flow"));
wsdlActivityExtractor.process(false);
}
@Test
@Ignore
public void test_processLocalToolActivity() throws Exception {
wsdlActivityExtractor = new TavernaExtractor(true);
wsdlActivityExtractor.setArchimateOutputPath(Paths.get("test", "resources", "localTool.archimate"));
wsdlActivityExtractor.setInputFileName(Paths.get("test", "resources", "localTool.t2flow"));
wsdlActivityExtractor.process(false);
}
@Test
@Ignore
public void test_processSSHToolActivity() throws Exception {
wsdlActivityExtractor = new TavernaExtractor(true);
wsdlActivityExtractor.setArchimateOutputPath(Paths.get("test", "resources", "sshTool.archimate"));
wsdlActivityExtractor.setInputFileName(Paths.get("test", "resources", "sshTool.t2flow"));
wsdlActivityExtractor.process(false);
}
@Test
@Ignore
public void test_processBeanshellActivity() throws Exception {
beanshellActivityExtractor = new TavernaExtractor(true);
beanshellActivityExtractor.setArchimateOutputPath(Paths.get("test", "resources", "beanshellLActivity.archimate"));
beanshellActivityExtractor.setInputFileName(Paths.get("test", "resources", "beanshellLActivity.t2flow"));
beanshellActivityExtractor.process(false);
}
@Test
@Ignore("Grouping already implemented!")
public void test_getAllRelations() {
assertNotNull(ALL_RELATIONS);
assertEquals(ALL_RELATIONS.size(), RELATIONS_COUNT);
}
@Test
@Ignore("Grouping already implemented!")
public void test_getTriggeringSubset() {
assertNotNull(ALL_RELATIONS);
assertEquals(TRIGGERING_RELATIONS_COUNT, ArchiUtils.ofClass(ALL_RELATIONS, ITriggeringRelationship.class)
.size());
}
@Test
@Ignore("Grouping already implemented!")
public void test_getTriggeringSubsetForElement() {
List<IArchimateElement> businessProcesses = matchboxExtractor.getBusinessProcesses();
IBusinessProcess source = (IBusinessProcess) ArchiUtils.getElementsByname("matchbox_evaluate",
businessProcesses).get(0);
assertNotNull(ALL_RELATIONS);
assertEquals(3, ArchiUtils.ofClass(ALL_RELATIONS, ITriggeringRelationship.class, source).size());
}
@Test
@Ignore("Grouping already implemented!")
public void test_getAllOutgoingAccessRelations() {
List<IArchimateElement> businessProcesses = matchboxExtractor.getBusinessProcesses();
IBusinessProcess source = (IBusinessProcess) ArchiUtils.getElementsByname("matchbox_evaluate",
businessProcesses).get(0);
int numberOfOutgoingAccessRelations = ArchiUtils
.ofClass(ALL_RELATIONS, IAccessRelationship.class, source, true).size();
assertEquals(7, numberOfOutgoingAccessRelations);
}
@Test
@Ignore("Grouping already implemented!")
public void test_getAllIngoingAccessRelations() {
List<IArchimateElement> businessProcesses = matchboxExtractor.getBusinessProcesses();
IBusinessProcess source = (IBusinessProcess) ArchiUtils.getElementsByname("matchbox_evaluate",
businessProcesses).get(0);
int numberOfOutgoingAccessRelations = ArchiUtils.ofClass(ALL_RELATIONS, IAccessRelationship.class, source,
false).size();
assertEquals(2, numberOfOutgoingAccessRelations);
}
@Test
@Ignore("Grouping already implemented!")
public void test_getElementsInBetween() {
IBusinessProcess source = (IBusinessProcess) ArchiUtils.getElementsByname("matchbox_evaluate", ALL_PROCESSES)
.get(0);
IBusinessProcess target = (IBusinessProcess) ArchiUtils.getElementsByname("report", ALL_PROCESSES).get(0);
List<IArchimateElement> elements = ArchiUtils.getElementsInBetween(source, target, ALL_RELATIONS);
assertNotNull(elements);
int numberOfElements = elements.size();
assertEquals(6, numberOfElements);
// dirty - check if each item is of type IBusinessObject and if
// the list contains the correct elements via their names
List<String> list = new ArrayList<>();
for (IArchimateElement element : elements) {
assertTrue(element instanceof IBusinessObject);
list.add(element.getName());
}
ArrayList<String> expected_list = new ArrayList<String>() {
{
add("cid");
add("fm");
add("iid");
add("rec");
add("md");
add("prec");
}
};
assertTrue(list.containsAll(expected_list));
}
@Test
@Ignore("Grouping already implemented!")
public void test_isListComplete() {
IBusinessProcess source = (IBusinessProcess) ArchiUtils.getElementsByname("matchbox_evaluate", ALL_PROCESSES)
.get(0);
IBusinessProcess target = (IBusinessProcess) ArchiUtils.getElementsByname("report", ALL_PROCESSES).get(0);
List<IArchimateElement> completeList = ArchiUtils.getElementsInBetween(source, target, ALL_RELATIONS);
// testlist - get each element by name
List<IArchimateElement> testList = new ArrayList<>();
testList.add(ArchiUtils.getElementsByname("cid", ALL_BUSINESSOBJECTS).get(0));
testList.add(ArchiUtils.getElementsByname("fm", ALL_BUSINESSOBJECTS).get(0));
testList.add(ArchiUtils.getElementsByname("iid", ALL_BUSINESSOBJECTS).get(0));
testList.add(ArchiUtils.getElementsByname("md", ALL_BUSINESSOBJECTS).get(0));
testList.add(ArchiUtils.getElementsByname("prec", ALL_BUSINESSOBJECTS).get(0));
testList.add(ArchiUtils.getElementsByname("rec", ALL_BUSINESSOBJECTS).get(0));
assertTrue(ArchiUtils.isListComplete(testList, completeList));
}
}