99 lines
5.4 KiB
Java
99 lines
5.4 KiB
Java
package com.google.maps.android.data.kml;
|
|
|
|
import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import org.xmlpull.v1.XmlPullParser;
|
|
import org.xmlpull.v1.XmlPullParserException;
|
|
|
|
/* JADX INFO: loaded from: classes2.dex */
|
|
class KmlContainerParser {
|
|
private static final String CONTAINER_REGEX = "Folder|Document";
|
|
private static final String EXTENDED_DATA = "ExtendedData";
|
|
private static final String GROUND_OVERLAY = "GroundOverlay";
|
|
private static final String PLACEMARK = "Placemark";
|
|
private static final String PROPERTY_REGEX = "name|description|visibility|open|address|phoneNumber";
|
|
private static final String STYLE = "Style";
|
|
private static final String STYLE_MAP = "StyleMap";
|
|
private static final String UNSUPPORTED_REGEX = "altitude|altitudeModeGroup|altitudeMode|begin|bottomFov|cookie|displayName|displayMode|end|expires|extrude|flyToView|gridOrigin|httpQuery|leftFov|linkDescription|linkName|linkSnippet|listItemType|maxSnippetLines|maxSessionLength|message|minAltitude|minFadeExtent|minLodPixels|minRefreshPeriod|maxAltitude|maxFadeExtent|maxLodPixels|maxHeight|maxWidth|near|overlayXY|range|refreshMode|refreshInterval|refreshVisibility|rightFov|roll|rotationXY|screenXY|shape|sourceHref|state|targetHref|tessellate|tileSize|topFov|viewBoundScale|viewFormat|viewRefreshMode|viewRefreshTime|when";
|
|
|
|
KmlContainerParser() {
|
|
}
|
|
|
|
static KmlContainer createContainer(XmlPullParser xmlPullParser) throws XmlPullParserException, IOException {
|
|
return assignPropertiesToContainer(xmlPullParser);
|
|
}
|
|
|
|
private static KmlContainer assignPropertiesToContainer(XmlPullParser xmlPullParser) throws XmlPullParserException, IOException {
|
|
String name = xmlPullParser.getName();
|
|
HashMap map = new HashMap();
|
|
HashMap map2 = new HashMap();
|
|
HashMap map3 = new HashMap();
|
|
ArrayList arrayList = new ArrayList();
|
|
HashMap map4 = new HashMap();
|
|
HashMap map5 = new HashMap();
|
|
String attributeValue = xmlPullParser.getAttributeValue(null, "id") != null ? xmlPullParser.getAttributeValue(null, "id") : null;
|
|
xmlPullParser.next();
|
|
int eventType = xmlPullParser.getEventType();
|
|
while (true) {
|
|
if (eventType != 3 || !xmlPullParser.getName().equals(name)) {
|
|
if (eventType == 2) {
|
|
if (xmlPullParser.getName().matches(UNSUPPORTED_REGEX)) {
|
|
KmlParser.skip(xmlPullParser);
|
|
} else if (xmlPullParser.getName().matches(CONTAINER_REGEX)) {
|
|
arrayList.add(assignPropertiesToContainer(xmlPullParser));
|
|
} else if (xmlPullParser.getName().matches(PROPERTY_REGEX)) {
|
|
map.put(xmlPullParser.getName(), xmlPullParser.nextText());
|
|
} else if (xmlPullParser.getName().equals(STYLE_MAP)) {
|
|
setContainerStyleMap(xmlPullParser, map4);
|
|
} else if (xmlPullParser.getName().equals(STYLE)) {
|
|
setContainerStyle(xmlPullParser, map2);
|
|
} else if (xmlPullParser.getName().equals(PLACEMARK)) {
|
|
setContainerPlacemark(xmlPullParser, map3);
|
|
} else if (xmlPullParser.getName().equals(EXTENDED_DATA)) {
|
|
setExtendedDataProperties(xmlPullParser, map);
|
|
} else if (xmlPullParser.getName().equals(GROUND_OVERLAY)) {
|
|
map5.put(KmlFeatureParser.createGroundOverlay(xmlPullParser), null);
|
|
}
|
|
}
|
|
eventType = xmlPullParser.next();
|
|
} else {
|
|
return new KmlContainer(map, map2, map3, map4, arrayList, map5, attributeValue);
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void setContainerStyleMap(XmlPullParser xmlPullParser, HashMap<String, String> map) throws XmlPullParserException, IOException {
|
|
map.putAll(KmlStyleParser.createStyleMap(xmlPullParser));
|
|
}
|
|
|
|
private static void setExtendedDataProperties(XmlPullParser xmlPullParser, HashMap<String, String> map) throws XmlPullParserException, IOException {
|
|
int eventType = xmlPullParser.getEventType();
|
|
String attributeValue = null;
|
|
while (true) {
|
|
if (eventType == 3 && xmlPullParser.getName().equals(EXTENDED_DATA)) {
|
|
return;
|
|
}
|
|
if (eventType == 2) {
|
|
if (xmlPullParser.getName().equals("Data")) {
|
|
attributeValue = xmlPullParser.getAttributeValue(null, "name");
|
|
} else if (xmlPullParser.getName().equals("value") && attributeValue != null) {
|
|
map.put(attributeValue, xmlPullParser.nextText());
|
|
attributeValue = null;
|
|
}
|
|
}
|
|
eventType = xmlPullParser.next();
|
|
}
|
|
}
|
|
|
|
private static void setContainerStyle(XmlPullParser xmlPullParser, HashMap<String, KmlStyle> map) throws XmlPullParserException, IOException {
|
|
if (xmlPullParser.getAttributeValue(null, "id") != null) {
|
|
KmlStyle kmlStyleCreateStyle = KmlStyleParser.createStyle(xmlPullParser);
|
|
map.put(kmlStyleCreateStyle.getStyleId(), kmlStyleCreateStyle);
|
|
}
|
|
}
|
|
|
|
private static void setContainerPlacemark(XmlPullParser xmlPullParser, HashMap<KmlPlacemark, Object> map) throws XmlPullParserException, IOException {
|
|
map.put(KmlFeatureParser.createPlacemark(xmlPullParser), null);
|
|
}
|
|
} |