001    package org.mesopotamia.lang.java;
002    
003    import org.mesopotamia.MesopotamiaException;
004    import org.mesopotamia.NodeData;
005    import org.mesopotamia.RepositoryLanguage;
006    import org.mesopotamia.Scan;
007    import org.mesopotamia.lang.java.ref.MethodInfo;
008    import org.mesopotamia.lang.java.ref.Scope;
009    import org.mesopotamia.lang.java.ref.TypeInfo;
010    import org.mesopotamia.lang.java.ref.VariableInfo;
011    import org.w3c.dom.Element;
012    
013    import biz.hammurapi.util.Visitable;
014    import biz.hammurapi.util.Visitor;
015    
016    public class Handler extends JavaLanguageElement implements Scope {
017    
018            public Handler(NodeData xData, Class<?> context, Scan scan,
019                            RepositoryLanguage language, Object environment) throws MesopotamiaException {
020                    super(xData, context, scan, language, environment);
021    
022                    // Select attributes
023                    ParameterDefinition = selectSingleElement(ParameterDefinition.class,
024                                    "PARAMETER_DEF");
025                    CompoundStatement = selectSingleElement(CompoundStatement.class, "SLIST");
026    
027            }
028    
029            public void toDom(Element holder) {
030                    super.toDom(holder);
031    
032                    // Serialize attributes
033                    setElement(holder, "ParameterDefinition", ParameterDefinition);
034                    setElement(holder, "CompoundStatement", CompoundStatement);
035            }
036    
037            // Attributes
038            private ParameterDefinition ParameterDefinition;
039    
040            private CompoundStatement CompoundStatement;
041    
042            // Accessors
043            public ParameterDefinition getParameterDefinition() {
044                    return ParameterDefinition;
045            }
046    
047            public CompoundStatement getCompoundStatement() {
048                    return CompoundStatement;
049            }
050    
051            protected void acceptChildren(Visitor visitor) {
052                    super.acceptChildren(visitor);
053                    // Visiting non-text attributes
054                    if (ParameterDefinition instanceof Visitable) {
055                            ((Visitable) ParameterDefinition).accept(visitor);
056                    }
057                    if (CompoundStatement instanceof Visitable) {
058                            ((Visitable) CompoundStatement).accept(visitor);
059                    }
060            }
061    
062            public MethodInfo findMethod(String name, String[] parameterTypes) {
063                    Scope ec = findParent(Scope.class);
064                    return ec == null ? null : ec.findMethod(name, parameterTypes);
065            }
066    
067            public TypeInfo findType(String name) {
068                    Scope ec = findParent(Scope.class);
069                    return ec == null ? null : ec.findType(name);
070            }
071    
072            public VariableInfo findVariable(String name) {
073                    if (name.equals(ParameterDefinition.getName())) {
074                            return ParameterDefinition;
075                    }
076                    
077                    Scope ec = findParent(Scope.class);
078                    return ec == null ? null : ec.findVariable(name);
079            }
080    
081    }