package com.talent.allshare.util; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.cybergarage.upnp.Argument; import org.cybergarage.util.CommonLog; import org.cybergarage.util.LogFactory; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import android.R.integer; import com.talent.allshare.network.Item; public class ParseUtil { private static final CommonLog log = LogFactory.createLog(); public static List<Item> parseResult(Argument result) { List<Item> list = new ArrayList<Item>(); DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder; try { documentBuilder = dfactory.newDocumentBuilder(); InputStream is = new ByteArrayInputStream(result.getValue() .getBytes("UTF-8")); Document doc = documentBuilder.parse(is); NodeList containers = doc.getElementsByTagName("container"); for (int j = 0; j < containers.getLength(); ++j) { Node container = containers.item(j); String childCountString = ""; Node childcountNodes = container.getAttributes().getNamedItem("childCount"); if (childcountNodes != null){ childCountString = childcountNodes.getNodeValue(); } String title = null; String objectClass = null; int id = 0; String stringid =""; String date = ""; NodeList childNodes = container.getChildNodes(); for (int l = 0; l < childNodes.getLength(); ++l) { Node childNode = childNodes.item(l); if (childNode.getNodeName().equals("dc:title")) { title = childNode.getFirstChild().getNodeValue(); //id = Integer.parseInt(container.getAttributes() // .getNamedItem("id").getNodeValue()); stringid = container.getAttributes().getNamedItem("id").getNodeValue(); } else if (childNode.getNodeName().equals("upnp:class")) { objectClass = childNode.getFirstChild().getNodeValue(); } if (childNode.getNodeName().equals("dc:date")) { Node dateNode = childNode.getFirstChild(); if (dateNode != null){ date = dateNode.getNodeValue(); } } } //Item i = new Item(id, title, null, null, objectClass); Item i = new Item(stringid, title, null, null, objectClass); i.setchildCount(childCountString); i.setDate(formatTimeString(date)); list.add(i); } NodeList items = doc.getElementsByTagName("item"); for (int j = 0; j < items.getLength(); ++j) { Node item = items.item(j); //int id = 0; String stringid; String title = null; String artist = null; String album = null; String objectClass = null; String res = null; String duration = null; String albumUri = null; String size = null; String date = null; boolean resRead = false; //id = Integer.parseInt(item.getAttributes().getNamedItem("id").getNodeValue()); stringid = item.getAttributes().getNamedItem("id").getNodeValue(); NodeList childNodes = item.getChildNodes(); for (int l = 0; l < childNodes.getLength(); ++l) { Node childNode = childNodes.item(l); if (childNode.getNodeName().equals("dc:title")) { title = childNode.getFirstChild().getNodeValue(); }else if (childNode.getNodeName().equals("dc:date")) { Node dateNode = childNode.getFirstChild(); if (dateNode != null){ date = dateNode.getNodeValue(); } } else if (childNode.getNodeName().equals("upnp:artist")) { artist = childNode.getFirstChild().getNodeValue(); } else if (childNode.getNodeName().equals("upnp:album")) { album = childNode.getFirstChild().getNodeValue(); } else if (childNode.getNodeName().equals("upnp:class")) { objectClass = childNode.getFirstChild().getNodeValue(); } else if (childNode.getNodeName().equals("res")) { if (!resRead){ res = childNode.getFirstChild().getNodeValue(); if (childNode.getAttributes().getNamedItem("duration")!=null) { duration = childNode.getAttributes().getNamedItem("duration").getNodeValue(); } Node SizeNode = childNode.getAttributes().getNamedItem("size"); if(SizeNode!=null) { size = SizeNode.getNodeValue(); } resRead = true; } }else if (childNode.getNodeName().equals("upnp:albumArtURI") || childNode.getNodeName().equals("upnp:icon")){ albumUri = childNode.getFirstChild().getNodeValue(); } } //Item i = new Item(id, title, artist, album, objectClass); Item i = new Item(stringid, title, artist, album, objectClass); i.setRes(res); i.setDuration(formatDurationString(duration)); i.setAlbumUri(albumUri); i.setSize(formatSizeString(size)); i.setDate(formatTimeString(date)); // if ("object.item.audioItem.musicTrack".equals(objectClass) || // "object.item.videoItem".equals(objectClass) || // "object.item.imageItem.photo".equals(objectClass)) { // i.setRes(res); // i.setDuration(duration); // } list.add(i); } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return list; } public static int formatSizeString(String sizeString){ int size = 0; if (sizeString == null || sizeString.length() < 1){ return size; } try { size =Integer.parseInt(sizeString); } catch (Exception e) { e.printStackTrace(); } return size; } // 2000-2-3 public static long formatTimeString(String timeString){ long time = 0; if (timeString == null || timeString.length() < 1){ return time; } try { log.e("formatTimeString time = " + timeString); String []array = timeString.split("-"); int year = Integer.valueOf(array[0]); int month = Integer.valueOf(array[1]); int day = Integer.valueOf(array[2]); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, month); calendar.set(Calendar.DAY_OF_MONTH, day); time = calendar.getTimeInMillis(); } catch (Exception e) { e.printStackTrace(); } return time; } public static int formatDurationString(String durationString){ int duration = 0; if (durationString == null || durationString.length() == 0){ return duration; } double a = 3.2; int b = (int) a; try { String sArray[] = durationString.split(":"); double hour = Double.valueOf(sArray[0]); double minute = Double.valueOf(sArray[1]); double second = Double.valueOf(sArray[2]); return (int) (((hour * 60 + minute) * 60 + second) * 1000); } catch (Exception e) { e.printStackTrace(); } return duration; } }