18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package build.tools.cldrconverter;
27
28 import java.io.File;
29 import java.io.IOException;
30 import java.util.*;
31 import java.util.stream.*;
32
33 import org.xml.sax.Attributes;
34 import org.xml.sax.InputSource;
35 import org.xml.sax.SAXException;
36
37 class MetaZonesParseHandler extends AbstractLDMLHandler<String> {
38 private String tzid, metazone;
39
40 // for java.time.format.ZoneNames.java
41 private List<String> mzoneMapEntryList = new ArrayList<>();
42 private Map<String, String> zones = new HashMap<>();
43
44 MetaZonesParseHandler() {
45 }
46
47 @Override
48 public InputSource resolveEntity(String publicID, String systemID) throws IOException, SAXException {
49 // avoid HTTP traffic to unicode.org
50 if (systemID.startsWith(CLDRConverter.SPPL_LDML_DTD_SYSTEM_ID)) {
51 return new InputSource((new File(CLDRConverter.LOCAL_SPPL_LDML_DTD)).toURI().toString());
52 }
53 return null;
54 }
55
56 // metaZone: ID -> metazone
57 // per locale: ID -> names, metazone -> names
84 pushIgnoredContainer(qName);
85 break;
86
87 case "version":
88 case "generation":
89 pushIgnoredContainer(qName);
90 break;
91
92 default:
93 // treat anything else as a container
94 pushContainer(qName, attributes);
95 break;
96 }
97 }
98
99 @Override
100 public void endElement(String uri, String localName, String qName) throws SAXException {
101 assert qName.equals(currentContainer.getqName()) : "current=" + currentContainer.getqName() + ", param=" + qName;
102 switch (qName) {
103 case "timezone":
104 if (tzid == null || metazone == null) {
105 throw new InternalError();
106 }
107 put(tzid, metazone);
108 break;
109 }
110 currentContainer = currentContainer.getParent();
111 }
112
113 public Map<String, String> zidMap() {
114 return zones;
115 }
116
117 public Stream<String> mzoneMapEntry() {
118 return mzoneMapEntryList.stream();
119 }
120 }
|
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package build.tools.cldrconverter;
27
28 import java.io.File;
29 import java.io.IOException;
30 import java.util.*;
31 import java.util.stream.*;
32
33 import org.xml.sax.Attributes;
34 import org.xml.sax.InputSource;
35 import org.xml.sax.SAXException;
36
37 class MetaZonesParseHandler extends AbstractLDMLHandler<String> {
38 final static String NO_METAZONE_KEY = "no.metazone.defined";
39
40 private String tzid, metazone;
41
42 // for java.time.format.ZoneNames.java
43 private List<String> mzoneMapEntryList = new ArrayList<>();
44 private Map<String, String> zones = new HashMap<>();
45
46 MetaZonesParseHandler() {
47 }
48
49 @Override
50 public InputSource resolveEntity(String publicID, String systemID) throws IOException, SAXException {
51 // avoid HTTP traffic to unicode.org
52 if (systemID.startsWith(CLDRConverter.SPPL_LDML_DTD_SYSTEM_ID)) {
53 return new InputSource((new File(CLDRConverter.LOCAL_SPPL_LDML_DTD)).toURI().toString());
54 }
55 return null;
56 }
57
58 // metaZone: ID -> metazone
59 // per locale: ID -> names, metazone -> names
86 pushIgnoredContainer(qName);
87 break;
88
89 case "version":
90 case "generation":
91 pushIgnoredContainer(qName);
92 break;
93
94 default:
95 // treat anything else as a container
96 pushContainer(qName, attributes);
97 break;
98 }
99 }
100
101 @Override
102 public void endElement(String uri, String localName, String qName) throws SAXException {
103 assert qName.equals(currentContainer.getqName()) : "current=" + currentContainer.getqName() + ", param=" + qName;
104 switch (qName) {
105 case "timezone":
106 if (tzid == null) {
107 throw new InternalError();
108 } else if (metazone == null) {
109 String no_meta = get(NO_METAZONE_KEY);
110 put(NO_METAZONE_KEY, no_meta == null ? tzid : no_meta + " " + tzid);
111 CLDRConverter.info("No metazone defined for %s%n", tzid);
112 } else {
113 put(tzid, metazone);
114 }
115 tzid = null;
116 metazone = null;
117 break;
118 }
119 currentContainer = currentContainer.getParent();
120 }
121
122 public Map<String, String> zidMap() {
123 return zones;
124 }
125
126 public Stream<String> mzoneMapEntry() {
127 return mzoneMapEntryList.stream();
128 }
129 }
|