/* * Copyright (c) 2009-2013 Panxiaobo * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package pxb.android.axml; import java.util.ArrayList; import java.util.List; public class Axml extends AxmlVisitor { public static class Node extends NodeVisitor { public static class Attr { public String ns, name; public int resourceId, type; public Object value; public void accept(NodeVisitor nodeVisitor) { nodeVisitor.attr(ns, name, resourceId, type, value); } } public static class Text { public int ln; public String text; public void accept(NodeVisitor nodeVisitor) { nodeVisitor.text(ln, text); } } public List<Attr> attrs = new ArrayList<Attr>(); public List<Node> children = new ArrayList<Node>(); public Integer ln; public String ns, name; public Text text; public void accept(NodeVisitor nodeVisitor) { NodeVisitor nodeVisitor2 = nodeVisitor.child(ns, name); acceptB(nodeVisitor2); nodeVisitor2.end(); } public void acceptB(NodeVisitor nodeVisitor) { if (text != null) { text.accept(nodeVisitor); } for (Attr a : attrs) { a.accept(nodeVisitor); } if (ln != null) { nodeVisitor.line(ln); } for (Node c : children) { c.accept(nodeVisitor); } } @Override public void attr(String ns, String name, int resourceId, int type, Object obj) { Attr attr = new Attr(); attr.name = name; attr.ns = ns; attr.resourceId = resourceId; attr.type = type; attr.value = obj; attrs.add(attr); } @Override public NodeVisitor child(String ns, String name) { Node node = new Node(); node.name = name; node.ns = ns; children.add(node); return node; } @Override public void line(int ln) { this.ln = ln; } @Override public void text(int lineNumber, String value) { Text text = new Text(); text.ln = lineNumber; text.text = value; this.text = text; } } public static class Ns { public int ln; public String prefix, uri; public void accept(AxmlVisitor visitor) { visitor.ns(prefix, uri, ln); } } public List<Node> firsts = new ArrayList<Node>(); public List<Ns> nses = new ArrayList<Ns>(); public void accept(final AxmlVisitor visitor) { for (Ns ns : nses) { ns.accept(visitor); } for (Node first : firsts) { first.accept(visitor); } } @Override public NodeVisitor child(String ns, String name) { Node node = new Node(); node.name = name; node.ns = ns; firsts.add(node); return node; } @Override public void ns(String prefix, String uri, int ln) { Ns ns = new Ns(); ns.prefix = prefix; ns.uri = uri; ns.ln = ln; nses.add(ns); } }