Commit 765fe021 authored by Philip Makedonski's avatar Philip Makedonski
Browse files

+ added word export support for TPD variants, #23

parent 202f4170
Loading
Loading
Loading
Loading
Loading
+52 −2
Original line number Diff line number Diff line
@@ -32,16 +32,21 @@ import org.eclipse.xtext.TerminalRule;
import org.eclipse.xtext.XtextPackage;
import org.eclipse.xtext.nodemodel.ICompositeNode;
import org.eclipse.xtext.nodemodel.util.NodeModelUtils;
import org.etsi.mts.tdl.Annotation;
import org.etsi.mts.tdl.Behaviour;
import org.etsi.mts.tdl.Block;
import org.etsi.mts.tdl.CombinedBehaviour;
import org.etsi.mts.tdl.CompoundBehaviour;
import org.etsi.mts.tdl.ConditionalBehaviour;
import org.etsi.mts.tdl.Element;
import org.etsi.mts.tdl.LocalExpression;
import org.etsi.mts.tdl.Package;
import org.etsi.mts.tdl.ParameterBinding;
import org.etsi.mts.tdl.SingleCombinedBehaviour;
import org.etsi.mts.tdl.TestConfiguration;
import org.etsi.mts.tdl.TestDescription;
import org.etsi.mts.tdl.TestDescriptionReference;
import org.etsi.mts.tdl.TestObjective;
import org.etsi.mts.tdl.resources.ResourceHandler;
import org.etsi.mts.tdl.structuredobjectives.StructuredTestObjective;
import org.etsi.mts.tdl.structuredobjectives.TestObjectiveVariant;
@@ -141,8 +146,9 @@ public class Generator {
				LinkedHashMap<String, String> map = getTPDReplacementMap(tpd);
				generateTable(document, sectionTitle, map, prefix, i);
				//TODO: variants? reuse?
	//			LinkedHashMap<String, LinkedHashMap<String,String>> variants = getSTOVariantsMap(sto);
				LinkedHashMap<String, LinkedHashMap<String,String>> variants = getTPDVariantsMap(tpd);
//				generateVariants(document, variants);
				generateVariants(document, variants, sectionTitle, prefix, i);
				i++;
			}
		}
@@ -454,6 +460,50 @@ public class Generator {
		return variants;
	}

	private LinkedHashMap<String, LinkedHashMap<String, String>> getTPDVariantsMap(TestDescription tpd) {
		LinkedHashMap<String, LinkedHashMap<String, String>> variants = new LinkedHashMap<>();
		//TODO: cache
		List<TestDescription> tds = EcoreUtil2.getAllContentsOfType(tpd.eResource(), TestDescription.class);
		for (TestDescription td : tds) {
			boolean isVariant = false;
			for (Annotation a : td.getAnnotation()) {
				if (a.getKey().getName().equals("Variant")) {
					isVariant = true;
					break;
				}
			}
			if (isVariant) {
				TestDescriptionReference tdr = EcoreUtil2.getAllContentsOfType(td, TestDescriptionReference.class).getFirst();
				if (tdr.getTestDescription() == tpd) {
					variants.put(td.getName(), new LinkedHashMap<>());
					if (!td.getTestObjective().isEmpty()) {
						//TODO: multiple?
						TestObjective to = td.getTestObjective().getFirst();
						//check if identical?
						if (!tpd.getTestObjective().contains(to)) {
							variants.get(td.getName()).put("Description", to.getDescription()
									.replaceAll("\"", "")
									.replaceAll("\\s*\n\\s+", " ")
									);
							variants.get(td.getName()).put("Reference", String.join("\n",to.getObjectiveURI()));
						}
					}
					Block b = (Block)tdr.container();
					if (!b.getGuard().isEmpty()) {
						String pics = NodeModelUtils.getNode(b.getGuard().getFirst().getExpression()).getText().trim();
						variants.get(td.getName()).put("PICS", pics);
					}
					for (ParameterBinding pb : tdr.getArgument()) {
						String value = pb.getParameter().getName();
						String boundTo = NodeModelUtils.getNode(pb.getDataUse()).getText();
						variants.get(td.getName()).put(value, boundTo);
					}
				}
			}
		}
		return variants;
	}


	private LinkedHashMap<String, String> getTPDReplacementMap(TestDescription tpd) {
		//map