/*
* Created on Dec 20, 2012
* Created by Paul Gardner
*
* Copyright 2012 Vuze, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License only.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*/
package com.aelitis.net.upnpms.impl;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.gudy.azureus2.plugins.utils.xml.simpleparser.SimpleXMLParserDocumentAttribute;
import org.gudy.azureus2.plugins.utils.xml.simpleparser.SimpleXMLParserDocumentNode;
import com.aelitis.net.upnpms.UPNPMSContainer;
import com.aelitis.net.upnpms.UPNPMSItem;
import com.aelitis.net.upnpms.UPNPMSNode;
import com.aelitis.net.upnpms.UPnPMSException;
public class
UPNPMSContainerImpl
implements UPNPMSContainer
{
private UPNPMSBrowserImpl browser;
private String id;
private String title;
private List<UPNPMSNode> children;
protected
UPNPMSContainerImpl(
UPNPMSBrowserImpl _browser,
String _id,
String _title )
{
browser = _browser;
id = _id;
title = _title;
}
public String
getID()
{
return( id );
}
public String
getTitle()
{
return( title );
}
private void
populate()
throws UPnPMSException
{
synchronized( this ){
if ( children == null ){
children = new ArrayList<UPNPMSNode>();
List<SimpleXMLParserDocumentNode> results = browser.getContainerContents( id );
for ( SimpleXMLParserDocumentNode result: results ){
// result.print();
SimpleXMLParserDocumentNode[] kids = result.getChildren();
for ( SimpleXMLParserDocumentNode kid: kids ){
String name = kid.getName();
if ( name.equalsIgnoreCase( "container" )){
String id = kid.getAttribute( "id" ).getValue();
String title = kid.getChild( "title" ).getValue();
children.add( new UPNPMSContainerImpl( browser, id, title ));
}else if ( name.equalsIgnoreCase( "item" )){
String id = kid.getAttribute( "id" ).getValue();
String title = kid.getChild( "title" ).getValue();
String cla = kid.getChild( "class" ).getValue();
String item_class;
if ( cla.contains( ".imageItem" )){
item_class = UPNPMSItem.IC_IMAGE;
}else if ( cla.contains( ".audioItem" )){
item_class = UPNPMSItem.IC_AUDIO;
}else if ( cla.contains( ".videoItem" )){
item_class = UPNPMSItem.IC_VIDEO;
}else{
item_class = UPNPMSItem.IC_OTHER;
}
URL url = null;
long size = 0;
SimpleXMLParserDocumentNode[] sub = kid.getChildren();
for ( SimpleXMLParserDocumentNode x: sub ){
if ( x.getName().equalsIgnoreCase( "res" )){
SimpleXMLParserDocumentAttribute a_size = x.getAttribute( "size" );
long this_size = 0;
if ( a_size != null ){
try{
this_size = Long.parseLong( a_size.getValue().trim());
}catch( Throwable e ){
}
}
SimpleXMLParserDocumentAttribute pi = x.getAttribute( "protocolInfo" );
if ( pi != null ){
String pi_str = pi.getValue().trim();
if ( pi_str.toLowerCase().startsWith( "http-get" )){
try{
if ( size == 0 || this_size > size ){
url = new URL( x.getValue().trim());
size = this_size;
}
}catch( Throwable e ){
}
}
}
}
}
if ( url != null ){
children.add( new UPNPMSItemImpl( id, title, item_class, size, url ));
}
}
}
}
}
}
}
public List<UPNPMSNode>
getChildren()
throws UPnPMSException
{
populate();
return( children );
}
}