Coverage Report - uk.co.badgersinfoil.asxsd.UnmarshalBuilder
 
Classes in this File Line Coverage Branch Coverage Complexity
UnmarshalBuilder
92% 
100% 
1.625
 
 1  
 /*
 2  
  * Copyright (c) 2006-2007 David Holroyd
 3  
  */
 4  
 
 5  
 package uk.co.badgersinfoil.asxsd;
 6  
 
 7  
 import java.util.HashMap;
 8  
 import java.util.Iterator;
 9  
 import java.util.List;
 10  
 import java.util.Map;
 11  
 import org.eclipse.xsd.XSDComplexTypeDefinition;
 12  
 import org.eclipse.xsd.XSDSchema;
 13  
 import org.eclipse.xsd.XSDTypeDefinition;
 14  
 import uk.co.badgersinfoil.metaas.ActionScriptProject;
 15  
 import uk.co.badgersinfoil.metaas.ActionScriptFactory;
 16  
 import uk.co.badgersinfoil.metaas.dom.ASClassType;
 17  
 import uk.co.badgersinfoil.metaas.dom.ASCompilationUnit;
 18  
 import uk.co.badgersinfoil.metaas.dom.ASField;
 19  
 import uk.co.badgersinfoil.metaas.dom.Visibility;
 20  
 
 21  
 
 22  
 public class UnmarshalBuilder {
 23  
 
 24  
         static final String KEY_UNMARSHAL_CURRENT_METHOD_CODE = "uk.co.badgersinfoil.asxsd.unmarshal.currentMethod.code";
 25  
         static final String KEY_UNMARSHAL_CURRENT_SOURCE_EXPR = "uk.co.badgersinfoil.asxsd.unmarshal.currentSource.expr";
 26  15
         private Map converterClassesByNamespace = new HashMap();
 27  
         private ActionScriptProject project;
 28  
 
 29  
         private CodegenContext context;
 30  
 
 31  15
         public UnmarshalBuilder(ActionScriptProject project, CodegenContext context) {
 32  15
                 this.project = project;
 33  15
                 this.context = context;
 34  15
         }
 35  
 
 36  
         public void processSchema(XSDSchema schema) {
 37  15
                 List types = schema.getTypeDefinitions();
 38  15
                 context.pushAttrScope();
 39  15
                 context.setCurrentRole(CodegenRole.UNMARSHAL);
 40  15
                 for (Iterator i = types.iterator(); i.hasNext(); ) {
 41  19
                         XSDTypeDefinition typeDef = (XSDTypeDefinition)i.next();
 42  19
                         if (typeDef instanceof XSDComplexTypeDefinition) {
 43  17
                                 XSDComplexTypeDefinition ctype = (XSDComplexTypeDefinition)typeDef;
 44  17
                                 context.functionFor(ctype);
 45  
                         }
 46  19
                 }
 47  
 //                List elements = schema.getElementDeclarations();
 48  
 //                for (Iterator i = elements.iterator(); i.hasNext(); ) {
 49  
 //                        XSDElementDeclaration elementDecl = (XSDElementDeclaration)i.next();
 50  
 //                        conversionMethodFor(elementDecl);
 51  
 //                }
 52  15
                 context.popAttrScope();
 53  15
         }
 54  
 
 55  
         public ASCompilationUnit getClassForNamespace(String namespace) {
 56  162
                 ASCompilationUnit result = (ASCompilationUnit)converterClassesByNamespace.get(namespace);
 57  162
                 if (result == null) {
 58  26
                         result = createClassForNamespace(namespace);
 59  26
                         converterClassesByNamespace.put(namespace, result);
 60  
                 }
 61  162
                 return result;
 62  
         }
 63  
 
 64  
         private ASCompilationUnit createClassForNamespace(String namespace) {
 65  26
                 ASCompilationUnit cu = project.newClass(converterClassNameForNamespace(namespace));
 66  26
                 ASClassType clazz = (ASClassType)cu.getType();
 67  26
                 clazz.setDescription("Automatically generated functions for turning XML into Objects");
 68  26
                 ASField ns = clazz.newField("NAMESPACE", Visibility.PUBLIC, "Namespace");
 69  26
                 ns.setConst(true);
 70  26
                 ns.setStatic(true);
 71  26
                 ns.setInitializer("new Namespace("+ActionScriptFactory.str(namespace)+")");
 72  26
                 return cu;
 73  
         }
 74  
 
 75  
         public static String getCurrentSourceExpr(CodegenContext context) {
 76  90
                 String result = (String)context.getAttribute(KEY_UNMARSHAL_CURRENT_SOURCE_EXPR);
 77  90
                 if (result == null) {
 78  0
                         throw new IllegalStateException("no expression is defined");
 79  
                 }
 80  90
                 return result;
 81  
         }
 82  
         public static void setCurrentSourceExpr(CodegenContext context, String expr) {
 83  97
                 context.setAttribute(KEY_UNMARSHAL_CURRENT_SOURCE_EXPR, expr);
 84  97
         }
 85  
 
 86  
         public static void warn(String msg) {
 87  0
                 System.err.println(msg);
 88  0
         }
 89  
 
 90  
         public String converterClassNameForNamespace(String uri) {
 91  26
                 return StringUtils.toPackageName(uri)+".Unmarshaler";
 92  
         }
 93  
 }