Loading plugins/org.etsi.mts.tdl.asn2tdl/src/org/etsi/mts/tdl/asn2tdl/ASN2TDLTranslator.java +15 −20 Original line number Diff line number Diff line package org.etsi.mts.tdl.asn2tdl; import java.io.BufferedInputStream; import java.io.File; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Paths; Loading @@ -10,6 +11,7 @@ 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.DataElementMapping; import org.etsi.mts.tdl.DataType; import org.etsi.mts.tdl.EnumDataType; import org.etsi.mts.tdl.Member; Loading Loading @@ -47,6 +49,8 @@ public class ASN2TDLTranslator extends AbstractTranslator { public void translate(String filename) throws Exception { AsnModel model = getAsnModelFromAsn1File(filename); drm = getTypeFor("SOURCE_MAPPING", tdlPackage.Literals.DATA_RESOURCE_MAPPING); drm.setResourceURI("\""+new File(filename).getName()+"\""); for (String moduleName : model.modulesByName.keySet()) { //TODO: handle multiple modules? Loading Loading @@ -86,6 +90,15 @@ public class ASN2TDLTranslator extends AbstractTranslator { translateType(type, "", false); } //Third pass for (String e : module.typesByName.keySet()) { DataType dataType = getTypeFor(e, tdlPackage.Literals.DATA_TYPE); DataElementMapping mapping = getTypeFor(e+"_MAPPING", tdlPackage.Literals.DATA_ELEMENT_MAPPING); mapping.setMappableDataElement(dataType); mapping.setElementURI("\""+e+"\""); mapping.setDataResourceMapping(drm); } } } Loading Loading @@ -167,10 +180,10 @@ public class ASN2TDLTranslator extends AbstractTranslator { } else if (type instanceof AsnEnum) { //TODO: add enum values from ((AsnEnum)type).namedNumberList.namedNumbers generatedType = getEnumDataTypeFor(type.name); annotateWith(generatedType, "ENUM"); // annotateWith(generatedType, "ENUM"); for (AsnNamedNumber literal : ((AsnEnum)type).namedNumberList.namedNumbers) { SimpleDataInstance enumLiteral = tdlFactory.eINSTANCE.createSimpleDataInstance(); enumLiteral.setName(literal.name); enumLiteral.setName(cleanName(literal.name)); enumLiteral.setDataType(generatedType); ((EnumDataType)generatedType).getValue().add(enumLiteral); } Loading Loading @@ -222,24 +235,6 @@ public class ASN2TDLTranslator extends AbstractTranslator { return generatedType; } private void annotateWith(final DataType generatedType, String annotationName) { AnnotationType annotationType = getTypeFor(cleanName(annotationName), tdlPackage.Literals.ANNOTATION_TYPE); if (!generatedType.getAnnotation().stream().anyMatch(a->a.getKey()==annotationType)) { Annotation annotation = tdlFactory.eINSTANCE.createAnnotation(); annotation.setKey(annotationType); generatedType.getAnnotation().add(annotation); } } 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); Loading plugins/org.etsi.mts.tdl.common/src/org/etsi/mts/tdl/transform/AbstractTranslator.java +56 −3 Original line number Diff line number Diff line Loading @@ -5,6 +5,12 @@ import java.util.function.Predicate; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.resource.Resource; import org.etsi.mts.tdl.Annotation; import org.etsi.mts.tdl.AnnotationType; import org.etsi.mts.tdl.Constraint; import org.etsi.mts.tdl.ConstraintType; import org.etsi.mts.tdl.DataResourceMapping; import org.etsi.mts.tdl.DataType; import org.etsi.mts.tdl.Element; import org.etsi.mts.tdl.ElementImport; import org.etsi.mts.tdl.EnumDataType; Loading @@ -17,6 +23,7 @@ import org.etsi.mts.tdl.tdlFactory; import org.etsi.mts.tdl.tdlPackage; public abstract class AbstractTranslator { protected DataResourceMapping drm; private Package generatedPackage; protected SimpleDataType stringType; private Resource targetResource; Loading Loading @@ -56,7 +63,7 @@ public abstract class AbstractTranslator { public String cleanName(String name) { //TODO: use keywords filter? if (name.equals("Message") || name.equals("Time") || name.equals("type") || name.equals("name") ) { if (name.equals("Message") || name.equals("Time") || name.equals("type") || name.equals("name") || name.equals("instance") ) { name = "^"+name; } name = name.replaceAll("-", "_") Loading Loading @@ -90,8 +97,35 @@ public abstract class AbstractTranslator { } return generatedType; } @SuppressWarnings("unchecked") protected <T extends NamedElement> Optional<T> getContentWithName(String name, NamedElement container, Class<T> type) { protected <T extends NamedElement> T findContentWithName(String name, NamedElement container, EClass targetType) { Optional<T> optional = container.eContents().stream() .filter(e->targetType.isInstance(e)) .map(e->(T) e) .filter(e -> e.getName().equals(name)) .findFirst(); T content = null; if (optional.isPresent()) { content = (T) optional.get(); } return content; } @SuppressWarnings("unchecked") protected <T extends NamedElement> T getContentWithName(String name, NamedElement container, EClass targetType) { String cleanName = cleanName(name); T content = findContentWithName(name, container, targetType); if (content == null) { content = (T) tdlFactory.eINSTANCE.create(targetType); content.setName(cleanName); } return content; } @SuppressWarnings("unchecked") protected <T extends Element> Optional<T> getContentWithName(String name, NamedElement container, Class<T> type) { Optional<T> optional = container.eContents().stream() .filter(e->type.isInstance(e)) .map(e->(T) e) Loading @@ -110,6 +144,25 @@ public abstract class AbstractTranslator { return optional; } protected void annotateWith(final DataType generatedType, String annotationName) { AnnotationType annotationType = getTypeFor(cleanName(annotationName), tdlPackage.Literals.ANNOTATION_TYPE); if (!generatedType.getAnnotation().stream().anyMatch(a->a.getKey()==annotationType)) { Annotation annotation = tdlFactory.eINSTANCE.createAnnotation(); annotation.setKey(annotationType); generatedType.getAnnotation().add(annotation); } } protected 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); } } public Resource getTargetResource() { return targetResource; } Loading Loading
plugins/org.etsi.mts.tdl.asn2tdl/src/org/etsi/mts/tdl/asn2tdl/ASN2TDLTranslator.java +15 −20 Original line number Diff line number Diff line package org.etsi.mts.tdl.asn2tdl; import java.io.BufferedInputStream; import java.io.File; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Paths; Loading @@ -10,6 +11,7 @@ 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.DataElementMapping; import org.etsi.mts.tdl.DataType; import org.etsi.mts.tdl.EnumDataType; import org.etsi.mts.tdl.Member; Loading Loading @@ -47,6 +49,8 @@ public class ASN2TDLTranslator extends AbstractTranslator { public void translate(String filename) throws Exception { AsnModel model = getAsnModelFromAsn1File(filename); drm = getTypeFor("SOURCE_MAPPING", tdlPackage.Literals.DATA_RESOURCE_MAPPING); drm.setResourceURI("\""+new File(filename).getName()+"\""); for (String moduleName : model.modulesByName.keySet()) { //TODO: handle multiple modules? Loading Loading @@ -86,6 +90,15 @@ public class ASN2TDLTranslator extends AbstractTranslator { translateType(type, "", false); } //Third pass for (String e : module.typesByName.keySet()) { DataType dataType = getTypeFor(e, tdlPackage.Literals.DATA_TYPE); DataElementMapping mapping = getTypeFor(e+"_MAPPING", tdlPackage.Literals.DATA_ELEMENT_MAPPING); mapping.setMappableDataElement(dataType); mapping.setElementURI("\""+e+"\""); mapping.setDataResourceMapping(drm); } } } Loading Loading @@ -167,10 +180,10 @@ public class ASN2TDLTranslator extends AbstractTranslator { } else if (type instanceof AsnEnum) { //TODO: add enum values from ((AsnEnum)type).namedNumberList.namedNumbers generatedType = getEnumDataTypeFor(type.name); annotateWith(generatedType, "ENUM"); // annotateWith(generatedType, "ENUM"); for (AsnNamedNumber literal : ((AsnEnum)type).namedNumberList.namedNumbers) { SimpleDataInstance enumLiteral = tdlFactory.eINSTANCE.createSimpleDataInstance(); enumLiteral.setName(literal.name); enumLiteral.setName(cleanName(literal.name)); enumLiteral.setDataType(generatedType); ((EnumDataType)generatedType).getValue().add(enumLiteral); } Loading Loading @@ -222,24 +235,6 @@ public class ASN2TDLTranslator extends AbstractTranslator { return generatedType; } private void annotateWith(final DataType generatedType, String annotationName) { AnnotationType annotationType = getTypeFor(cleanName(annotationName), tdlPackage.Literals.ANNOTATION_TYPE); if (!generatedType.getAnnotation().stream().anyMatch(a->a.getKey()==annotationType)) { Annotation annotation = tdlFactory.eINSTANCE.createAnnotation(); annotation.setKey(annotationType); generatedType.getAnnotation().add(annotation); } } 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); Loading
plugins/org.etsi.mts.tdl.common/src/org/etsi/mts/tdl/transform/AbstractTranslator.java +56 −3 Original line number Diff line number Diff line Loading @@ -5,6 +5,12 @@ import java.util.function.Predicate; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.resource.Resource; import org.etsi.mts.tdl.Annotation; import org.etsi.mts.tdl.AnnotationType; import org.etsi.mts.tdl.Constraint; import org.etsi.mts.tdl.ConstraintType; import org.etsi.mts.tdl.DataResourceMapping; import org.etsi.mts.tdl.DataType; import org.etsi.mts.tdl.Element; import org.etsi.mts.tdl.ElementImport; import org.etsi.mts.tdl.EnumDataType; Loading @@ -17,6 +23,7 @@ import org.etsi.mts.tdl.tdlFactory; import org.etsi.mts.tdl.tdlPackage; public abstract class AbstractTranslator { protected DataResourceMapping drm; private Package generatedPackage; protected SimpleDataType stringType; private Resource targetResource; Loading Loading @@ -56,7 +63,7 @@ public abstract class AbstractTranslator { public String cleanName(String name) { //TODO: use keywords filter? if (name.equals("Message") || name.equals("Time") || name.equals("type") || name.equals("name") ) { if (name.equals("Message") || name.equals("Time") || name.equals("type") || name.equals("name") || name.equals("instance") ) { name = "^"+name; } name = name.replaceAll("-", "_") Loading Loading @@ -90,8 +97,35 @@ public abstract class AbstractTranslator { } return generatedType; } @SuppressWarnings("unchecked") protected <T extends NamedElement> Optional<T> getContentWithName(String name, NamedElement container, Class<T> type) { protected <T extends NamedElement> T findContentWithName(String name, NamedElement container, EClass targetType) { Optional<T> optional = container.eContents().stream() .filter(e->targetType.isInstance(e)) .map(e->(T) e) .filter(e -> e.getName().equals(name)) .findFirst(); T content = null; if (optional.isPresent()) { content = (T) optional.get(); } return content; } @SuppressWarnings("unchecked") protected <T extends NamedElement> T getContentWithName(String name, NamedElement container, EClass targetType) { String cleanName = cleanName(name); T content = findContentWithName(name, container, targetType); if (content == null) { content = (T) tdlFactory.eINSTANCE.create(targetType); content.setName(cleanName); } return content; } @SuppressWarnings("unchecked") protected <T extends Element> Optional<T> getContentWithName(String name, NamedElement container, Class<T> type) { Optional<T> optional = container.eContents().stream() .filter(e->type.isInstance(e)) .map(e->(T) e) Loading @@ -110,6 +144,25 @@ public abstract class AbstractTranslator { return optional; } protected void annotateWith(final DataType generatedType, String annotationName) { AnnotationType annotationType = getTypeFor(cleanName(annotationName), tdlPackage.Literals.ANNOTATION_TYPE); if (!generatedType.getAnnotation().stream().anyMatch(a->a.getKey()==annotationType)) { Annotation annotation = tdlFactory.eINSTANCE.createAnnotation(); annotation.setKey(annotationType); generatedType.getAnnotation().add(annotation); } } protected 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); } } public Resource getTargetResource() { return targetResource; } Loading