Search in sources :

Example 6 with RootElement

use of android.sax.RootElement in project android_frameworks_base by ResurrectionRemix.

the class SafeSaxTest method testMissingRequiredChild.

@SmallTest
public void testMissingRequiredChild() throws Exception {
    String xml = "<feed></feed>";
    RootElement root = new RootElement("feed");
    root.requireChild("entry");
    try {
        Xml.parse(xml, root.getContentHandler());
        fail("expected exception not thrown");
    } catch (SAXException e) {
    // Expected.
    }
}
Also used : RootElement(android.sax.RootElement) SAXException(org.xml.sax.SAXException) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Example 7 with RootElement

use of android.sax.RootElement in project android_frameworks_base by ResurrectionRemix.

the class SafeSaxTest method testListener.

@SmallTest
public void testListener() throws Exception {
    String xml = "<feed xmlns='http://www.w3.org/2005/Atom'>\n" + "<entry>\n" + "<id>a</id>\n" + "</entry>\n" + "<entry>\n" + "<id>b</id>\n" + "</entry>\n" + "</feed>\n";
    RootElement root = new RootElement(ATOM_NAMESPACE, "feed");
    Element entry = root.requireChild(ATOM_NAMESPACE, "entry");
    Element id = entry.requireChild(ATOM_NAMESPACE, "id");
    ElementCounter rootCounter = new ElementCounter();
    ElementCounter entryCounter = new ElementCounter();
    TextElementCounter idCounter = new TextElementCounter();
    root.setElementListener(rootCounter);
    entry.setElementListener(entryCounter);
    id.setTextElementListener(idCounter);
    Xml.parse(xml, root.getContentHandler());
    assertEquals(1, rootCounter.starts);
    assertEquals(1, rootCounter.ends);
    assertEquals(2, entryCounter.starts);
    assertEquals(2, entryCounter.ends);
    assertEquals(2, idCounter.starts);
    assertEquals("ab", idCounter.bodies);
}
Also used : RootElement(android.sax.RootElement) Element(android.sax.Element) RootElement(android.sax.RootElement) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Example 8 with RootElement

use of android.sax.RootElement in project android_frameworks_base by crdroidandroid.

the class SafeSaxTest method testMixedContent.

@SmallTest
public void testMixedContent() throws Exception {
    String xml = "<feed><entry></entry></feed>";
    RootElement root = new RootElement("feed");
    root.setEndTextElementListener(new EndTextElementListener() {

        public void end(String body) {
        }
    });
    try {
        Xml.parse(xml, root.getContentHandler());
        fail("expected exception not thrown");
    } catch (SAXException e) {
    // Expected.
    }
}
Also used : RootElement(android.sax.RootElement) EndTextElementListener(android.sax.EndTextElementListener) SAXException(org.xml.sax.SAXException) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Example 9 with RootElement

use of android.sax.RootElement in project c-geo by just-radovan.

the class cgGPXParser method parse.

public long parse(File file, int version, Handler handlerIn) {
    handler = handlerIn;
    if (file == null) {
        return 0l;
    }
    if (version == 11) {
        // GPX 1.1
        ns = "http://www.topografix.com/GPX/1/1";
    } else {
        // GPX 1.0
        ns = "http://www.topografix.com/GPX/1/0";
    }
    final RootElement root = new RootElement(ns, "gpx");
    final Element waypoint = root.getChild(ns, "wpt");
    // waypoint - attributes
    waypoint.setStartElementListener(new StartElementListener() {

        public void start(Attributes attrs) {
            try {
                if (attrs.getIndex("lat") > -1) {
                    cache.latitude = new Double(attrs.getValue("lat"));
                }
                if (attrs.getIndex("lon") > -1) {
                    cache.longitude = new Double(attrs.getValue("lon"));
                }
            } catch (Exception e) {
                Log.w(cgSettings.tag, "Failed to parse waypoint's latitude and/or longitude.");
            }
        }
    });
    // waypoint
    waypoint.setEndElementListener(new EndElementListener() {

        public void end() {
            if (cache.geocode == null || cache.geocode.length() == 0) {
                // try to find geocode somewhere else
                String geocode = null;
                Matcher matcherGeocode = null;
                if (name != null && geocode == null) {
                    matcherGeocode = patternGeocode.matcher(name);
                    while (matcherGeocode.find()) {
                        if (matcherGeocode.groupCount() > 0) {
                            geocode = matcherGeocode.group(1);
                        }
                    }
                }
                if (desc != null && geocode == null) {
                    matcherGeocode = patternGeocode.matcher(desc);
                    while (matcherGeocode.find()) {
                        if (matcherGeocode.groupCount() > 0) {
                            geocode = matcherGeocode.group(1);
                        }
                    }
                }
                if (cmt != null && geocode == null) {
                    matcherGeocode = patternGeocode.matcher(cmt);
                    while (matcherGeocode.find()) {
                        if (matcherGeocode.groupCount() > 0) {
                            geocode = matcherGeocode.group(1);
                        }
                    }
                }
                if (geocode != null && geocode.length() > 0) {
                    cache.geocode = geocode;
                }
                geocode = null;
                matcherGeocode = null;
            }
            if (cache.geocode != null && cache.geocode.length() > 0 && cache.latitude != null && cache.longitude != null && ((type == null && sym == null) || (type != null && type.indexOf("geocache") > -1) || (sym != null && sym.indexOf("geocache") > -1))) {
                cache.latitudeString = base.formatCoordinate(cache.latitude, "lat", true);
                cache.longitudeString = base.formatCoordinate(cache.longitude, "lon", true);
                if (cache.inventory != null) {
                    cache.inventoryItems = cache.inventory.size();
                } else {
                    cache.inventoryItems = 0;
                }
                cache.reason = listId;
                cache.updated = new Date().getTime();
                cache.detailedUpdate = new Date().getTime();
                cache.detailed = true;
                app.addCacheToSearch(search, cache);
            }
            if (handler != null) {
                final Message msg = new Message();
                msg.obj = search.getCount();
                handler.sendMessage(msg);
            }
            htmlShort = true;
            htmlLong = true;
            type = null;
            sym = null;
            name = null;
            desc = null;
            cmt = null;
            cache = null;
            cache = new cgCache();
        }
    });
    // waypoint.time
    waypoint.getChild(ns, "time").setEndTextElementListener(new EndTextElementListener() {

        public void end(String body) {
            try {
                cache.hidden = cgBase.dateGPXIn.parse(body.trim());
            } catch (Exception e) {
                Log.w(cgSettings.tag, "Failed to parse cache date: " + e.toString());
            }
        }
    });
    // waypoint.name
    waypoint.getChild(ns, "name").setEndTextElementListener(new EndTextElementListener() {

        public void end(String body) {
            name = body;
            final String content = Html.fromHtml(body).toString().trim();
            cache.name = content;
            if (cache.name.length() > 2 && cache.name.substring(0, 2).equalsIgnoreCase("GC") == true) {
                cache.geocode = cache.name.toUpperCase();
            }
        }
    });
    // waypoint.desc
    waypoint.getChild(ns, "desc").setEndTextElementListener(new EndTextElementListener() {

        public void end(String body) {
            desc = body;
            final String content = Html.fromHtml(body).toString().trim();
            cache.shortdesc = content;
        }
    });
    // waypoint.cmt
    waypoint.getChild(ns, "cmt").setEndTextElementListener(new EndTextElementListener() {

        public void end(String body) {
            cmt = body;
            final String content = Html.fromHtml(body).toString().trim();
            cache.description = content;
        }
    });
    // waypoint.type
    waypoint.getChild(ns, "type").setEndTextElementListener(new EndTextElementListener() {

        public void end(String body) {
            final String[] content = body.split("\\|");
            if (content.length > 0) {
                type = content[0].toLowerCase().trim();
            }
        }
    });
    // waypoint.sym
    waypoint.getChild(ns, "sym").setEndTextElementListener(new EndTextElementListener() {

        public void end(String body) {
            body = body.toLowerCase();
            sym = body;
            if (body.indexOf("geocache") != -1 && body.indexOf("found") != -1) {
                cache.found = true;
            }
        }
    });
    for (String nsGC : nsGCList) {
        // waypoints.cache
        final Element gcCache = waypoint.getChild(nsGC, "cache");
        gcCache.setStartElementListener(new StartElementListener() {

            public void start(Attributes attrs) {
                try {
                    if (attrs.getIndex("id") > -1) {
                        cache.cacheid = attrs.getValue("id");
                    }
                    if (attrs.getIndex("archived") > -1) {
                        final String at = attrs.getValue("archived").toLowerCase();
                        if (at.equals("true")) {
                            cache.archived = true;
                        } else {
                            cache.archived = false;
                        }
                    }
                    if (attrs.getIndex("available") > -1) {
                        final String at = attrs.getValue("available").toLowerCase();
                        if (at.equals("true")) {
                            cache.disabled = false;
                        } else {
                            cache.disabled = true;
                        }
                    }
                } catch (Exception e) {
                    Log.w(cgSettings.tag, "Failed to parse cache attributes.");
                }
            }
        });
        // waypoint.cache.name
        gcCache.getChild(nsGC, "name").setEndTextElementListener(new EndTextElementListener() {

            public void end(String body) {
                final String content = Html.fromHtml(body).toString().trim();
                cache.name = content;
            }
        });
        // waypoint.cache.owner
        gcCache.getChild(nsGC, "owner").setEndTextElementListener(new EndTextElementListener() {

            public void end(String body) {
                final String content = Html.fromHtml(body).toString().trim();
                cache.owner = content;
            }
        });
        // waypoint.cache.type
        gcCache.getChild(nsGC, "type").setEndTextElementListener(new EndTextElementListener() {

            public void end(String body) {
                final String content = cgBase.cacheTypes.get(body.toLowerCase());
                cache.type = content;
            }
        });
        // waypoint.cache.container
        gcCache.getChild(nsGC, "container").setEndTextElementListener(new EndTextElementListener() {

            public void end(String body) {
                final String content = body.toLowerCase();
                cache.size = content;
            }
        });
        // waypoint.cache.difficulty
        gcCache.getChild(nsGC, "difficulty").setEndTextElementListener(new EndTextElementListener() {

            public void end(String body) {
                try {
                    cache.difficulty = new Float(body);
                } catch (Exception e) {
                    Log.w(cgSettings.tag, "Failed to parse difficulty: " + e.toString());
                }
            }
        });
        // waypoint.cache.terrain
        gcCache.getChild(nsGC, "terrain").setEndTextElementListener(new EndTextElementListener() {

            public void end(String body) {
                try {
                    cache.terrain = new Float(body);
                } catch (Exception e) {
                    Log.w(cgSettings.tag, "Failed to parse terrain: " + e.toString());
                }
            }
        });
        // waypoint.cache.country
        gcCache.getChild(nsGC, "country").setEndTextElementListener(new EndTextElementListener() {

            public void end(String body) {
                if (cache.location == null || cache.location.length() == 0) {
                    cache.location = body.trim();
                } else {
                    cache.location = cache.location + ", " + body.trim();
                }
            }
        });
        // waypoint.cache.state
        gcCache.getChild(nsGC, "state").setEndTextElementListener(new EndTextElementListener() {

            public void end(String body) {
                if (cache.location == null || cache.location.length() == 0) {
                    cache.location = body.trim();
                } else {
                    cache.location = body.trim() + ", " + cache.location;
                }
            }
        });
        // waypoint.cache.encoded_hints
        gcCache.getChild(nsGC, "encoded_hints").setEndTextElementListener(new EndTextElementListener() {

            public void end(String body) {
                cache.hint = body.trim();
            }
        });
        // waypoint.cache.short_description
        gcCache.getChild(nsGC, "short_description").setStartElementListener(new StartElementListener() {

            public void start(Attributes attrs) {
                try {
                    if (attrs.getIndex("html") > -1) {
                        final String at = attrs.getValue("html").toLowerCase();
                        if (at.equals("false")) {
                            htmlShort = false;
                        }
                    }
                } catch (Exception e) {
                // nothing
                }
            }
        });
        gcCache.getChild(nsGC, "short_description").setEndTextElementListener(new EndTextElementListener() {

            public void end(String body) {
                if (htmlShort == false) {
                    cache.shortdesc = Html.fromHtml(body).toString();
                } else {
                    cache.shortdesc = body;
                }
            }
        });
        // waypoint.cache.long_description
        gcCache.getChild(nsGC, "long_description").setStartElementListener(new StartElementListener() {

            public void start(Attributes attrs) {
                try {
                    if (attrs.getIndex("html") > -1) {
                        final String at = attrs.getValue("html").toLowerCase();
                        if (at.equals("false")) {
                            htmlLong = false;
                        }
                    }
                } catch (Exception e) {
                // nothing
                }
            }
        });
        gcCache.getChild(nsGC, "long_description").setEndTextElementListener(new EndTextElementListener() {

            public void end(String body) {
                if (htmlLong == false) {
                    cache.description = Html.fromHtml(body).toString().trim();
                } else {
                    cache.description = body;
                }
            }
        });
        // waypoint.cache.travelbugs
        final Element gcTBs = gcCache.getChild(nsGC, "travelbugs");
        // waypoint.cache.travelbugs.travelbug
        gcTBs.getChild(nsGC, "travelbug").setStartElementListener(new StartElementListener() {

            public void start(Attributes attrs) {
                trackable = new cgTrackable();
                try {
                    if (attrs.getIndex("ref") > -1) {
                        trackable.geocode = attrs.getValue("ref").toUpperCase();
                    }
                } catch (Exception e) {
                // nothing
                }
            }
        });
        // waypoint.cache.travelbug
        final Element gcTB = gcTBs.getChild(nsGC, "travelbug");
        gcTB.setEndElementListener(new EndElementListener() {

            public void end() {
                if (trackable.geocode != null && trackable.geocode.length() > 0 && trackable.name != null && trackable.name.length() > 0) {
                    if (cache.inventory == null)
                        cache.inventory = new ArrayList<cgTrackable>();
                    cache.inventory.add(trackable);
                }
            }
        });
        // waypoint.cache.travelbugs.travelbug.name
        gcTB.getChild(nsGC, "name").setEndTextElementListener(new EndTextElementListener() {

            public void end(String body) {
                String content = Html.fromHtml(body).toString();
                trackable.name = content;
            }
        });
        // waypoint.cache.logs
        final Element gcLogs = gcCache.getChild(nsGC, "logs");
        // waypoint.cache.log
        final Element gcLog = gcLogs.getChild(nsGC, "log");
        gcLog.setStartElementListener(new StartElementListener() {

            public void start(Attributes attrs) {
                log = new cgLog();
                try {
                    if (attrs.getIndex("id") > -1) {
                        log.id = Integer.parseInt(attrs.getValue("id"));
                    }
                } catch (Exception e) {
                // nothing
                }
            }
        });
        gcLog.setEndElementListener(new EndElementListener() {

            public void end() {
                if (log.log != null && log.log.length() > 0) {
                    if (cache.logs == null)
                        cache.logs = new ArrayList<cgLog>();
                    cache.logs.add(log);
                }
            }
        });
        // waypoint.cache.logs.log.date
        gcLog.getChild(nsGC, "date").setEndTextElementListener(new EndTextElementListener() {

            public void end(String body) {
                try {
                    log.date = cgBase.dateGPXIn.parse(body.trim()).getTime();
                } catch (Exception e) {
                    Log.w(cgSettings.tag, "Failed to parse log date: " + e.toString());
                }
            }
        });
        // waypoint.cache.logs.log.type
        gcLog.getChild(nsGC, "type").setEndTextElementListener(new EndTextElementListener() {

            public void end(String body) {
                final String content = body.trim().toLowerCase();
                if (cgBase.logTypes0.containsKey(content) == true) {
                    log.type = cgBase.logTypes0.get(content);
                } else {
                    log.type = 4;
                }
            }
        });
        // waypoint.cache.logs.log.finder
        gcLog.getChild(nsGC, "finder").setEndTextElementListener(new EndTextElementListener() {

            public void end(String body) {
                String content = Html.fromHtml(body).toString();
                log.author = content;
            }
        });
        // waypoint.cache.logs.log.finder
        gcLog.getChild(nsGC, "text").setEndTextElementListener(new EndTextElementListener() {

            public void end(String body) {
                String content = Html.fromHtml(body).toString();
                log.log = content;
            }
        });
    }
    try {
        Xml.parse(new FileInputStream(file), Xml.Encoding.UTF_8, root.getContentHandler());
        return search.getCurrentId();
    } catch (Exception e) {
        Log.e(cgSettings.tag, "Cannot parse .gpx file " + file.getAbsolutePath() + " as GPX " + version + ": " + e.toString());
    }
    return 0l;
}
Also used : EndElementListener(android.sax.EndElementListener) Message(android.os.Message) Matcher(java.util.regex.Matcher) Element(android.sax.Element) RootElement(android.sax.RootElement) Attributes(org.xml.sax.Attributes) Date(java.util.Date) FileInputStream(java.io.FileInputStream) RootElement(android.sax.RootElement) StartElementListener(android.sax.StartElementListener) EndTextElementListener(android.sax.EndTextElementListener)

Example 10 with RootElement

use of android.sax.RootElement in project platform_frameworks_base by android.

the class SafeSaxTest method testMissingRequiredChild.

@SmallTest
public void testMissingRequiredChild() throws Exception {
    String xml = "<feed></feed>";
    RootElement root = new RootElement("feed");
    root.requireChild("entry");
    try {
        Xml.parse(xml, root.getContentHandler());
        fail("expected exception not thrown");
    } catch (SAXException e) {
    // Expected.
    }
}
Also used : RootElement(android.sax.RootElement) SAXException(org.xml.sax.SAXException) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Aggregations

RootElement (android.sax.RootElement)21 SmallTest (android.test.suitebuilder.annotation.SmallTest)18 SAXException (org.xml.sax.SAXException)12 Element (android.sax.Element)9 EndTextElementListener (android.sax.EndTextElementListener)9 EndElementListener (android.sax.EndElementListener)3 ArrayList (java.util.ArrayList)2 ContentValues (android.content.ContentValues)1 Message (android.os.Message)1 StartElementListener (android.sax.StartElementListener)1 SearchResult (com.battlelancer.seriesguide.items.SearchResult)1 FileInputStream (java.io.FileInputStream)1 UnsupportedEncodingException (java.io.UnsupportedEncodingException)1 Date (java.util.Date)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 Matcher (java.util.regex.Matcher)1 Nonnull (javax.annotation.Nonnull)1 DateTimeZone (org.joda.time.DateTimeZone)1 LocalTime (org.joda.time.LocalTime)1