Commit 7df79060 authored by Philip Makedonski's avatar Philip Makedonski
Browse files

+ use constraints in addition to annotations, add support for enums

parent 413ec61f
Loading
Loading
Loading
Loading
+22 −3
Original line number Diff line number Diff line
@@ -8,9 +8,13 @@ import java.nio.file.Paths;
import org.etsi.mts.tdl.Annotation;
import org.etsi.mts.tdl.AnnotationType;
import org.etsi.mts.tdl.CollectionDataType;
import org.etsi.mts.tdl.Constraint;
import org.etsi.mts.tdl.ConstraintType;
import org.etsi.mts.tdl.DataType;
import org.etsi.mts.tdl.EnumDataType;
import org.etsi.mts.tdl.Member;
import org.etsi.mts.tdl.Package;
import org.etsi.mts.tdl.SimpleDataInstance;
import org.etsi.mts.tdl.StructuredDataType;
import org.etsi.mts.tdl.tdlFactory;
import org.etsi.mts.tdl.tdlPackage;
@@ -27,6 +31,7 @@ import com.beanit.asn1bean.compiler.model.AsnEnum;
import com.beanit.asn1bean.compiler.model.AsnInteger;
import com.beanit.asn1bean.compiler.model.AsnModel;
import com.beanit.asn1bean.compiler.model.AsnModule;
import com.beanit.asn1bean.compiler.model.AsnNamedNumber;
import com.beanit.asn1bean.compiler.model.AsnNull;
import com.beanit.asn1bean.compiler.model.AsnObjectIdentifier;
import com.beanit.asn1bean.compiler.model.AsnOctetString;
@@ -97,7 +102,7 @@ public class ASN2TDLTranslator extends AbstractTranslator {
			generatedType = getStructuredDataTypeFor(type.name);

			if (!flat) {
				//TODO: change to union constraint
				constrainWith(generatedType, "union");
				annotateWith(generatedType, "CHOICE");
				for (AsnElementType c : ((AsnChoice) type).componentTypes) {
					translateMember((StructuredDataType)generatedType, c);						
@@ -160,10 +165,15 @@ public class ASN2TDLTranslator extends AbstractTranslator {
			//TODO: handle somehow?
			generatedType = getSimpleDataTypeFor(type.name);
		} else if (type instanceof AsnEnum) {
			//TODO: change to enum
			//TODO: add enum values from ((AsnEnum)type).namedNumberList.namedNumbers
			generatedType = getSimpleDataTypeFor(type.name);
			generatedType = getEnumDataTypeFor(type.name);
			annotateWith(generatedType, "ENUM");
			for (AsnNamedNumber literal : ((AsnEnum)type).namedNumberList.namedNumbers) {
				SimpleDataInstance enumLiteral = tdlFactory.eINSTANCE.createSimpleDataInstance();
				enumLiteral.setName(literal.name);
				enumLiteral.setDataType(generatedType);
				((EnumDataType)generatedType).getValue().add(enumLiteral);
			}
		} else if (type instanceof AsnCharacterString) {
			String typeName = type.name;
			if (typeName.isEmpty()) {
@@ -221,6 +231,15 @@ public class ASN2TDLTranslator extends AbstractTranslator {
		}
	}

	private void constrainWith(final DataType generatedType, String constraintName) {
		ConstraintType constraintType = getTypeFor(cleanName(constraintName), tdlPackage.Literals.CONSTRAINT_TYPE);
		if (!generatedType.getConstraint().stream().anyMatch(a->a.getType()==constraintType)) {
			Constraint constraint = tdlFactory.eINSTANCE.createConstraint();
			constraint.setType(constraintType);
			generatedType.getConstraint().add(constraint);
		}
	}
	
	private DataType translateTagged(AsnType type, boolean flat) {
		final DataType generatedType;
		AsnTaggedType taggedType = ((AsnTaggedType) type);