package com.common.methods;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import android.content.res.AssetManager;
import android.util.Log;
public class XmlParser{
String fname;
String fpath;
Document doc ;
XMLDOMParser parser = new XMLDOMParser();
AssetManager asset_manager;
static Map <String,String> hm = new HashMap<String,String>();
ArrayList<String> retList = new ArrayList<String>();
// XML node names
static final String NODE_FILE = "file";
static final String NODE_NAME = "name";
static final String NODE_PATH = "path";
static File xmlPath;
public XmlParser(File file){
xmlPath = file;
File xmlFile = new File(xmlPath,"list.xml");
InputStream stream;
try {
if (xmlFile.createNewFile()){
// xmlFile.
FileWriter fw = new FileWriter(xmlFile.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><list><file><name>some.mp3</name></file></list>");
bw.close();
stream = new FileInputStream(xmlFile);
doc = parser.getDocument(stream);
}
else{
stream = new FileInputStream(xmlFile);
doc = parser.getDocument(stream);
NodeList nodeList = doc.getElementsByTagName(NODE_FILE);
for (int i = 0; i < nodeList.getLength(); i++) {
Element e = (Element) nodeList.item(i);
fname= parser.getValue(e, NODE_NAME).toString();
fpath = parser.getValue(e, NODE_PATH).toString();
hm.put(fname,fpath);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public ArrayList<String> fileList(){
// Get elements by name file
NodeList nodeList = doc.getElementsByTagName(NODE_FILE);
for (int i = 0; i < nodeList.getLength(); i++) {
Element e = (Element) nodeList.item(i);
fname= parser.getValue(e, NODE_NAME).toString();
fpath = parser.getValue(e, NODE_PATH).toString();
hm.put(fname,fpath);
retList.add(fname);
Log.d("msg","hello");
}
return retList;
}
static public String getFilePath(String name)
{
return hm.get(name);
}
public void addFile(String fname,String fpath)
{
NodeList rootList = doc.getElementsByTagName("list");
Node root = rootList.item(0);
Element newFile = doc.createElement("file");
Element newFname = doc.createElement("name");
Element newFpath = doc.createElement("path");
newFile.appendChild(newFname);
newFname.appendChild(doc.createTextNode(fname));
newFile.appendChild(newFpath);
newFpath.appendChild(doc.createTextNode(fpath));
root.appendChild(newFile);
try {
Transformer tFormer = TransformerFactory.newInstance().newTransformer();
tFormer.setOutputProperty(OutputKeys.METHOD, "xml");
Source source = new DOMSource(doc);
Log.d("source",source.toString());
File xfl= new File(xmlPath,"list.xml");
Result result = new StreamResult(xfl);
tFormer.transform(source, result);
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
hm.put(fname, fpath);
}
static public Map<String,String> getFileMap()
{
return hm;
}
static public void checkXml(File fpath,String fname)
{
File xfl= new File(fpath,fname);
if(!(xfl.exists()))
{
try{
xfl.createNewFile();
FileWriter fw = new FileWriter(xfl.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><list></list>");
bw.close();
}
catch(IOException e1){
e1.printStackTrace();
}
}
}
}