Coverage Report - uk.co.badgersinfoil.asxsd.components.SimpleContentComponent
 
Classes in this File Line Coverage Branch Coverage Complexity
SimpleContentComponent
97% 
100% 
2.333
 
 1  
 package uk.co.badgersinfoil.asxsd.components;
 2  
 
 3  
 import org.eclipse.xsd.XSDComplexTypeDefinition;
 4  
 import org.eclipse.xsd.XSDConcreteComponent;
 5  
 import org.eclipse.xsd.XSDElementDeclaration;
 6  
 import org.eclipse.xsd.XSDSimpleTypeDefinition;
 7  
 import uk.co.badgersinfoil.asxsd.CodegenContext;
 8  
 import uk.co.badgersinfoil.asxsd.CodegenRole;
 9  
 import uk.co.badgersinfoil.asxsd.MarshalBuilder;
 10  
 import uk.co.badgersinfoil.asxsd.StringUtils;
 11  
 import uk.co.badgersinfoil.asxsd.TypeBuilder;
 12  
 import uk.co.badgersinfoil.asxsd.UnmarshalBuilder;
 13  
 import uk.co.badgersinfoil.asxsd.XSDUtils;
 14  
 import uk.co.badgersinfoil.metaas.dom.ASClassType;
 15  
 import uk.co.badgersinfoil.metaas.dom.ASField;
 16  
 import uk.co.badgersinfoil.metaas.dom.StatementContainer;
 17  
 import uk.co.badgersinfoil.metaas.dom.Visibility;
 18  
 
 19  15
 public class SimpleContentComponent extends AbstractMappingComponent {
 20  
 
 21  
         
 22  
         public void generateCode(CodegenContext context,
 23  
                                  XSDConcreteComponent component)
 24  
         {
 25  6
                 CodegenRole role = context.getCurrentRole();
 26  6
                 XSDSimpleTypeDefinition simpleType = (XSDSimpleTypeDefinition)component;
 27  6
                 if (role == CodegenRole.UNMARSHAL) {
 28  2
                         StatementContainer code = context.getCurrentMethodCode();
 29  2
                         String sourceExpr = UnmarshalBuilder.getCurrentSourceExpr(context);
 30  2
                         String attrAccessExpr = sourceExpr+".text()";
 31  
 //                        MappingFunction function = context.functionFor(component);
 32  
 //                        String converted = function.appliedTo(attrAccessExpr);
 33  2
                         String converted = attrAccessExpr;
 34  2
                         code.addStmt("_result."+context.variableNameFor(simpleType)+" = "+converted);
 35  2
                 } else if (role == CodegenRole.MARSHAL) {
 36  2
                         StatementContainer code = context.getCurrentMethodCode();
 37  2
                         String sourceExpr = MarshalBuilder.getCurrentSourceExpr(context);
 38  2
                         String propertyNameExpr = sourceExpr+"."+context.variableNameFor(simpleType);
 39  
 //                        MappingFunction function = context.functionFor(component);
 40  
 //                        String converted = function.appliedTo(propertyNameExpr);
 41  2
                         String converted = propertyNameExpr;
 42  2
                         code.addStmt("_result.append("+converted+")");
 43  2
                 } else if (role == CodegenRole.TYPE) {
 44  2
                         ASClassType clazz = TypeBuilder.getCurrentType(context);
 45  
                         // TODO: how to derive the correct type?
 46  2
                         String asType = "String";
 47  2
                         String fieldName = context.variableNameFor(component);
 48  
 //                        String fieldName = context.createTypeNameFor(elementDecl) + "Value";
 49  2
                         ASField field = clazz.newField(fieldName, Visibility.PUBLIC, asType);
 50  2
                         field.setDescription("The value of the element body");
 51  2
                 } else {
 52  0
                         super.generateCode(context, component);
 53  
                 }
 54  6
         }
 55  
         
 56  
         
 57  
 
 58  
         public String variableNameFor(CodegenContext context,
 59  
                                       XSDConcreteComponent component)
 60  
         {
 61  6
                 XSDComplexTypeDefinition containingType = (XSDComplexTypeDefinition)component.getContainer();
 62  
                 String name;
 63  6
                 if (XSDUtils.isAnonymous(containingType)) {
 64  3
                         XSDElementDeclaration elementDecl = (XSDElementDeclaration)containingType.getContainer();
 65  3
                         name = elementDecl.getName();
 66  3
                 } else {
 67  3
                         name = containingType.getName();
 68  
                 }
 69  6
                 return StringUtils.sanitize(name) + "Value";
 70  
         }
 71  
 
 72  
 
 73  
 
 74  
         public boolean willAccept(XSDConcreteComponent component) {
 75  1492
                 return component instanceof XSDSimpleTypeDefinition && component.getContainer() instanceof XSDComplexTypeDefinition;
 76  
         }
 77  
 
 78  
 }