private void processModule(SmiMib mib, ASNModule m, SmiModule sm) { for (ASNAssignment a : m.getAssignments()) { final IdToken idToken = a.getIdToken(); if (a instanceof ASNTypeAssignment) { ASNTypeAssignment typeAssignment = (ASNTypeAssignment) a; ASNType asnType = typeAssignment.getEntityType(); SmiPrimitiveType pt = convertToPrimitiveType(asnType); if (pt != null) { SmiType st = sm.createType(idToken); st.setPrimitiveType(pt); convertType(asnType, st); } else if (asnType instanceof SMITextualConventionMacro) { // System.out.println("TC: " + m.getName() + ": " + idToken); SMITextualConventionMacro atc = (SMITextualConventionMacro) asnType; SmiTextualConvention stc = sm.createTextualConvention(idToken); ASNType at = atc.getSyntax(); // System.out.println(" is " + at.getClass().getName()); convertType(at, stc); if (!atc.getSyntaxNamedBits().isEmpty()) { for (SMINamedBit nb : atc.getSyntaxNamedBits()) { stc.addEnumValue(nb.getName(), BigInteger.valueOf(nb.getNumber())); } } } } else if (a instanceof ASNValueAssignment) { ASNValueAssignment va = (ASNValueAssignment) a; ASNType asnType = va.getEntityType(); if (asnType instanceof SMIObjectTypeMacro) { // System.out.println("ObjectType macro: " + idToken); SMIObjectTypeMacro otm = (SMIObjectTypeMacro) asnType; if (otm.getSyntax().getType() != SMIType.Enum.SEQUENCE && otm.getSyntax().getType() != SMIType.Enum.SEQUENCEOF) { // System.out.println(" is not SEQ(OF)"); if (!otm.getNamedBits().isEmpty()) { SmiType type = sm.createType(SmiUtil.ucFirst(idToken)); // System.out.println("Create attr type " + type.getId()); for (SMINamedBit nb : otm.getNamedBits()) { type.addEnumValue(nb.getName(), BigInteger.valueOf(nb.getNumber())); } } } } } } }
private void convertType(ASNType asnType, SmiType st) { if (asnType instanceof ASNNamedNumberType) { ASNNamedNumberType nnt = (ASNNamedNumberType) asnType; if (!nnt.getNamedNumbers().isEmpty()) { for (ASNNamedNumber ann : nnt.getNamedNumbers()) { ASNLiteralValue lv = (ASNLiteralValue) ann.getIntValue(); st.addEnumValue(ann.getName(), lv.getNumberValue()); } } } }