TextLocator.java :  » UnTagged » android-daisy-epub-reader » com » ader » smil » Android Open Source

Android Open Source » UnTagged » android daisy epub reader 
android daisy epub reader » com » ader » smil » TextLocator.java
package com.ader.smil;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.logging.Logger;

import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

import com.ader.DummyDtdResolver;

/**
 * Utility for retrieving the text for TextElement
 * Currently it only works with local files.
 */
public class TextLocator extends DefaultHandler {
    
    private File baseDirectory;
    private String targetId;
    private String result;
    private int depth = 0;
    private Logger log = Logger.getAnonymousLogger();
    
    public TextLocator(File baseDirectory) {
        this.baseDirectory = baseDirectory;
    }
    
    public String getText(String src) throws IOException {
        if (src.contains("#")) {
            targetId = src.substring(src.indexOf("#") + 1);
            File file = new File(baseDirectory, src.substring(0, src.indexOf("#")));
            SAXParserFactory factory = SAXParserFactory.newInstance();
            try {
              org.xml.sax.InputSource input = new InputSource(new FileInputStream(file));
              XMLReader saxParser = factory.newSAXParser().getXMLReader();
              saxParser.setEntityResolver(new DummyDtdResolver());
              saxParser.setContentHandler(this);
              saxParser.parse(input);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        } else {
            File file = new File(baseDirectory, src); 
            long len = file.length();
            FileInputStream fis = new FileInputStream(file);
            byte buf[] = new byte[(int) len];
            fis.read(buf);
            fis.close();
            result = new String(buf);
        }
        return result;
    }
    
    @Override
    public void startElement(String uri, String localName, String name,
            Attributes attributes) throws SAXException {
        String id = attributes.getValue("id");
        log.info(name + ": " + id);
        if (id != null && id.equals(targetId)) {
            depth++;
        }
    }

    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        if (depth > 0) {
            result = new String(ch, start, length);
            log.info("found " + result);
        }
    }
    
    @Override
    public void endElement(String uri, String localName, String name) {
      if (depth > 0) {
        depth--;
      }
    }
    
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.