001    package org.mesopotamia.lang.java;
002    
003    import java.util.List;
004    
005    import org.mesopotamia.MesopotamiaException;
006    import org.mesopotamia.NodeData;
007    import org.mesopotamia.RepositoryLanguage;
008    import org.mesopotamia.Scan;
009    import org.w3c.dom.Element;
010    
011    import biz.hammurapi.util.CollectionVisitable;
012    import biz.hammurapi.util.Visitor;
013    
014    public class CompilationUnit extends JavaLanguageElement {
015    
016            public CompilationUnit(NodeData xData, Class<?> context, Scan scan,
017                            RepositoryLanguage language, Object environment) throws MesopotamiaException {
018                    super(xData, context, scan, language, environment);
019    
020                    // Select attributes
021                    PackageName = selectSingleElementText(PackageDefinition.class, "PACKAGE_DEF");
022                    Imports = selectText(ImportDefinition.class, "IMPORT|STATIC_IMPORT");
023                    Types = select(TypeDefinition.class, "#org.mesopotamia.lang.java.TypeDefinition");
024    
025            }
026    
027            public void toDom(Element holder) {
028                    super.toDom(holder);
029    
030                    // Serialize attributes
031                    setAttribute(holder, "PackageName", PackageName);
032                    setElement(holder, "Imports", Imports);
033                    setElement(holder, "Types", Types);
034            }
035    
036            // Attributes
037            private String PackageName;
038    
039            private List<String> Imports;
040    
041            private List<TypeDefinition> Types;
042    
043            // Accessors
044            public String getPackageName() {
045                    return PackageName;
046            }
047    
048            public List<String> getImports() {
049                    return Imports;
050            }
051    
052            public List<TypeDefinition> getTypes() {
053                    return Types;
054            }
055    
056            protected void acceptChildren(Visitor visitor) {
057                    super.acceptChildren(visitor);
058                    // Visiting non-text attributes
059                    new CollectionVisitable(Types, false).accept(visitor);
060            }
061    
062    }