OSDN Git Service

androidx対応。
[gokigen/A01d.git] / app / src / main / java / net / osdn / gokigen / a01d / camera / utils / XmlElement.java
1 package net.osdn.gokigen.a01d.camera.utils;
2
3 import android.util.Log;
4 import android.util.Xml;
5
6 import org.xmlpull.v1.XmlPullParser;
7 import java.io.StringReader;
8 import java.util.ArrayList;
9 import java.util.HashMap;
10 import java.util.LinkedList;
11 import java.util.List;
12 import java.util.Map;
13
14 import androidx.annotation.NonNull;
15
16 public class XmlElement
17 {
18     private static final String TAG = XmlElement.class.getSimpleName();
19     private static final XmlElement NULL_ELEMENT = new XmlElement();
20
21     private String tagName = "";
22     private String tagValue;
23
24     private LinkedList<XmlElement> childElements;
25     private Map<String, String> attributes;
26     private XmlElement parentElement;
27
28     private XmlElement()
29     {
30         //Log.v(TAG, "XmlElement()");
31         parentElement = null;
32         childElements = new LinkedList<>();
33         attributes = new HashMap<>();
34         tagValue = "";
35     }
36
37     public XmlElement getParent()
38     {
39         return (parentElement);
40     }
41     public String getTagName()
42     {
43         //Log.v(TAG, "XmlElement Tag [" + tagName + "]");
44         return (tagName);
45     }
46
47     private void setTagName(String name)
48     {
49         tagName = name;
50     }
51
52     public String getValue()
53     {
54         //Log.v(TAG, "XmlElement Value [" + tagValue + "]");
55         return (tagValue);
56     }
57     private void setValue(String value)
58     {
59         tagValue = value;
60     }
61
62     private void putChild(XmlElement childItem)
63     {
64         childElements.add(childItem);
65         childItem.setParent(this);
66     }
67
68     public XmlElement findChild(String name)
69     {
70         for (final XmlElement child : childElements)
71         {
72             if (child.getTagName().equals(name))
73             {
74                 return (child);
75             }
76         }
77         return (new XmlElement());
78     }
79
80     public List<XmlElement> findChildren(String name)
81     {
82         final List<XmlElement> tagItemList = new ArrayList<>();
83         for (final XmlElement child : childElements)
84         {
85             if (child.getTagName().equals(name))
86             {
87                 tagItemList.add(child);
88             }
89         }
90         return (tagItemList);
91     }
92
93     private void setParent(XmlElement parent)
94     {
95         parentElement = parent;
96     }
97
98     private void putAttribute(String name, String value)
99     {
100         attributes.put(name, value);
101     }
102
103     public String getAttribute(String name, String defaultValue)
104     {
105         String ret = attributes.get(name);
106         if (ret == null)
107         {
108             ret = defaultValue;
109         }
110         return (ret);
111     }
112
113     private static XmlElement parse(XmlPullParser xmlPullParser)
114     {
115         XmlElement rootElement = XmlElement.NULL_ELEMENT;
116         try
117         {
118             XmlElement parsingElement = XmlElement.NULL_ELEMENT;
119             MAINLOOP:
120             while (true)
121             {
122                 switch (xmlPullParser.next())
123                 {
124                     case XmlPullParser.START_DOCUMENT:
125                         Log.v(TAG, "------- START DOCUMENT -----");
126                         break;
127                     case XmlPullParser.START_TAG:
128                         final XmlElement childItem = new XmlElement();
129                         childItem.setTagName(xmlPullParser.getName());
130                         if (parsingElement == XmlElement.NULL_ELEMENT) {
131                             rootElement = childItem;
132                         } else {
133                             parsingElement.putChild(childItem);
134                         }
135                         parsingElement = childItem;
136
137                         // Set Attribute
138                         for (int i = 0; i < xmlPullParser.getAttributeCount(); i++)
139                         {
140                             parsingElement.putAttribute(xmlPullParser.getAttributeName(i), xmlPullParser.getAttributeValue(i));
141                         }
142                         break;
143
144                     case XmlPullParser.TEXT:
145                         parsingElement.setValue(xmlPullParser.getText());
146                         break;
147
148                     case XmlPullParser.END_TAG:
149                         parsingElement = parsingElement.getParent();
150                         break;
151
152                     case XmlPullParser.END_DOCUMENT:
153                         Log.v(TAG, "------- END DOCUMENT -------");
154                         break MAINLOOP;
155
156                     default:
157                         break MAINLOOP;
158                 }
159             }
160         }
161         catch (Exception e)
162         {
163             e.printStackTrace();
164             rootElement = XmlElement.NULL_ELEMENT;
165         }
166         return (rootElement);
167     }
168
169     public static XmlElement parse(@NonNull String xmlStr)
170     {
171         try
172         {
173             XmlPullParser xmlPullParser = Xml.newPullParser();
174             xmlPullParser.setInput(new StringReader(xmlStr));
175             return parse(xmlPullParser);
176         }
177         catch (Exception e)
178         {
179             e.printStackTrace();
180         }
181         return (new XmlElement());
182     }
183 }