in upnp/basedriver/src/main/java/org/apache/felix/upnp/basedriver/util/Converter.java [132:216]
public static Object parseString(String value,String upnpType) throws Exception{
if (value ==null && upnpType.equals("string"))
value = "";
if((value==null)||(upnpType==null))
throw new NullPointerException("Must be specified a valid value and upnpType");
if (upnpType.equals("ui1") || upnpType.equals("ui2")
|| upnpType.equals("i1") || upnpType.equals("i2")
|| upnpType.equals("i4") || upnpType.equals("int")) {
return new Integer(value);
} else if (upnpType.equals("ui4")){
return new Long(value);
} else if(upnpType.equals("time")){
String[] timeFormats=new String[]{"HH:mm:ss"};
Date d=getDateValue(value,timeFormats,timeFormats);
Calendar c = Calendar.getInstance();
c.setTime(d);
return new Long(
c.get(Calendar.HOUR_OF_DAY)*3600000
+c.get(Calendar.MINUTE)*60000
+c.get(Calendar.SECOND)*1000
);
} else if(upnpType.equals("time.tz")) {
String[] timeFormats=new String[]{"HH:mm:ssZ","HH:mm:ss"};
Date d=getDateValue(value,timeFormats,timeFormats);
TimeZone tz = TimeZone.getDefault();
Calendar c = Calendar.getInstance(tz);
c.setTime(d);
if(timeFormats[0].equals("HH:mm:ssZ")&&(tz.inDaylightTime(d)))
c.add(Calendar.MILLISECOND,3600000);
return new Long(
c.get(Calendar.HOUR_OF_DAY)*3600000
+c.get(Calendar.MINUTE)*60000
+c.get(Calendar.SECOND)*1000
);
} else if (upnpType.equals("r4") || upnpType.equals("float")) {
return new Float(value);
} else if (upnpType.equals("r8") || upnpType.equals("number")
|| upnpType.equals("fixed.14.4")){
return new Double(value);
} else if (upnpType.equals("char")) {
return new Character(value.charAt(0));
} else if (upnpType.equals("string") || upnpType.equals("uri")
|| upnpType.equals("uuid")) {
return value;
} else if (upnpType.equals("date")) {
String[] timeFormats=new String[]{"yyyy-MM-dd"};
Date d=getDateValue(value,timeFormats,timeFormats);
return d;
} else if (upnpType.equals("dateTime")) {
String[] timeFormats=new String[]{
"yyyy-MM-dd",
"yyyy-MM-dd'T'HH:mm:ss"
};
Date d=getDateValue(value,timeFormats,timeFormats);
return d;
} else if (upnpType.equals("dateTime.tz")) {
String[] timeFormats=new String[]{
"yyyy-MM-dd",
"yyyy-MM-dd'T'HH:mm:ss",
"yyyy-MM-dd'T'HH:mm:ssZ"
};
Date d=getDateValue(value,timeFormats,timeFormats);
return d;
} else if (upnpType.equals("boolean")) {
if(value.equalsIgnoreCase("yes") || value.equalsIgnoreCase("true")
|| value.equalsIgnoreCase("1"))
return Boolean.TRUE;
else
return Boolean.FALSE;
} else if (upnpType.equals("bin.base64")) {
return Base64.decode(value);
} else if (upnpType.equals("bin.hex")) {
return HexBin.decode(value);
}
throw new IllegalArgumentException("Invalid Binding");
}