package org.apache.tika.parser.xml;

import java.io.IOException;
import java.io.InputStream;
import java.util.Collections;
import java.util.Set;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.mime.MediaType;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;

public class AndroidContactParser implements Parser {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private static final Set<MediaType> SUPPORTED_TYPES = Collections.singleton(MediaType.application("android-contact+xml"));
    public static final String MIME_TYPE = "application/android-contact+xml";
	
    @Override
	public Set<MediaType> getSupportedTypes(ParseContext context) {
    	return SUPPORTED_TYPES;
	}
    
	@Override
	public void parse(InputStream stream, ContentHandler handler, Metadata metadata, ParseContext context) throws IOException, SAXException, TikaException {
		
		System.out.println("MY PARSER CALLED!");
		
		metadata.set(Metadata.CONTENT_TYPE, MIME_TYPE);
		
		ContactHandler ch = new ContactHandler(handler, metadata);
		
		
		try {
			
			SAXParserFactory spf = SAXParserFactory.newInstance();
		    SAXParser saxParser = spf.newSAXParser();
		    
		    XMLReader xmlReader = saxParser.getXMLReader();
		    xmlReader.setContentHandler(ch);
		    //xmlReader.setErrorHandler(new ParserErrorHandler());
		    
		    InputSource is = new InputSource(stream);
		    xmlReader.parse(is);
			
		} catch (Exception e) {
			//logger.error("Can't parse Nodes",e);
			e.printStackTrace();
		} finally {
			try {
				//reader.close();
			} catch (Exception ignore) {}
		}
		
	}
	
	
	
	/*metadata.set(Metadata.CONTENT_TYPE, MIME_TYPE);
	return new ContactHandler(handler, metadata);*/


	
	
}
