13d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* 23d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Copyright (C) 2014 The Android Open Source Project 33d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 43d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Licensed under the Apache License, Version 2.0 (the "License"); 53d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * you may not use this file except in compliance with the License. 63d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * You may obtain a copy of the License at 73d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 83d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * http://www.apache.org/licenses/LICENSE-2.0 93d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Unless required by applicable law or agreed to in writing, software 113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * distributed under the License is distributed on an "AS IS" BASIS, 123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * See the License for the specific language governing permissions and 143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * limitations under the License. 153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambypackage com.android.omadm.plugin; 183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.os.Parcel; 203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.os.Parcelable; 213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.text.TextUtils; 223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.util.Log; 233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport java.util.Arrays; 253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport java.util.Collections; 26708090a634e09da10765c29fda03ae7806d9af7dDawn Liuimport java.util.LinkedHashMap; 27622b57345917dbcffd099917339dba2a150dbb92Jake Hambyimport java.util.Map; 283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/** 303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * DmtData encapsulates various DMT node data formats. 313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * <pre> 333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Data formats includes: 343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * NULL 353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * String 363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Integer 373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Boolean 383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Binary 393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Date 403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Time 413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Float 423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * NODE 433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * </pre> 443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambypublic class DmtData implements Parcelable { 463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private static final String TAG = "DmtData"; 473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * NULL Data type. 503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public static final int NULL = 0; 523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Undefined. 553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public static final int UNDEFINED = NULL; 573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * String Data 603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public static final int STRING = 1; 623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Integer Data 653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public static final int INT = 2; 673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Boolean Data 703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public static final int BOOL = 3; 723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Binary Data 753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public static final int BIN = 4; 773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 79622b57345917dbcffd099917339dba2a150dbb92Jake Hamby * Interior Node 803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 81622b57345917dbcffd099917339dba2a150dbb92Jake Hamby public static final int NODE = 5; 823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 84622b57345917dbcffd099917339dba2a150dbb92Jake Hamby * Base 64 Node 853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 86622b57345917dbcffd099917339dba2a150dbb92Jake Hamby public static final int B64 = 6; 873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 89622b57345917dbcffd099917339dba2a150dbb92Jake Hamby * XML Node 903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 91622b57345917dbcffd099917339dba2a150dbb92Jake Hamby public static final int XML = 7; 923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 94622b57345917dbcffd099917339dba2a150dbb92Jake Hamby * Date data 95622b57345917dbcffd099917339dba2a150dbb92Jake Hamby */ 96622b57345917dbcffd099917339dba2a150dbb92Jake Hamby public static final int DATE = 8; 97622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 98622b57345917dbcffd099917339dba2a150dbb92Jake Hamby /** 99622b57345917dbcffd099917339dba2a150dbb92Jake Hamby * Time data 100622b57345917dbcffd099917339dba2a150dbb92Jake Hamby */ 101622b57345917dbcffd099917339dba2a150dbb92Jake Hamby public static final int TIME = 10; 102622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 103622b57345917dbcffd099917339dba2a150dbb92Jake Hamby /** 104622b57345917dbcffd099917339dba2a150dbb92Jake Hamby * Float data 1053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 106622b57345917dbcffd099917339dba2a150dbb92Jake Hamby public static final int FLOAT = 11; 1073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /* 1093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Used to create a DmtData((String)null) 1103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 1113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public static final String NULLVALUE = null; 1123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private int type; 1143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private String stringValue; 1163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private int intValue; 1183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private boolean boolValue; 1203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private byte[] binValue; 1223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private String dateValue; 1243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private String timeValue; 1263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private float floatValue; 1283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 129708090a634e09da10765c29fda03ae7806d9af7dDawn Liu private final LinkedHashMap<String, DmtData> childNodes = new LinkedHashMap<String, DmtData>(); 1303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 1323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Data represent a default value, it is only used for setting default value 1333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * to a node. if the node does not have a default value, a null value is 1343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * used instead. 1353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 1363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public DmtData() { 1373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public DmtData(String str, int dataType) { 1403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby init(str, dataType); 1413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private void init(String str, int dataType) { 1443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby type = dataType; 1453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (str == null) { 1463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return; 1473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby switch (dataType) { 1493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case NULL: 1503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 1513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case STRING: 1523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby stringValue = str; 1533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 1543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case INT: 1553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby try { 1563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby intValue = Integer.parseInt(str); 1573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } catch (NumberFormatException e) { 1583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.e(TAG, "can't parse init value as integer", e); 1593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 1613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case BOOL: 1623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby boolValue = Boolean.parseBoolean(str); 1633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 1643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case BIN: 1653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby binValue = str.getBytes(); 1663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 1673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case DATE: 1683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby dateValue = str; 1693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 1703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case TIME: 1713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby timeValue = str; 1723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 1733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case FLOAT: 1743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby try { 1753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby floatValue = Float.parseFloat(str); 1763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } catch (NumberFormatException e) { 1773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.e(TAG, "can't parse init value as float", e); 1783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 1803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case NODE: 181622b57345917dbcffd099917339dba2a150dbb92Jake Hamby childNodes.clear(); 1823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String[] strArray = str.split("\\|"); 1833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby int cnt = strArray.length; 1843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (cnt > 0 && !strArray[0].isEmpty()) { 185622b57345917dbcffd099917339dba2a150dbb92Jake Hamby for (String name : strArray) { 186622b57345917dbcffd099917339dba2a150dbb92Jake Hamby childNodes.put(name, new DmtData()); 187622b57345917dbcffd099917339dba2a150dbb92Jake Hamby } 1883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 1903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby default: 1913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby type = UNDEFINED; 1923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 1933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 1973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Data represent an String type. 1983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 1993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * @param str String type data. The size may be restricted by MDF. 2003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 2013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public DmtData(String str) { 2023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby stringValue = str; 2033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby type = STRING; 2043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 2073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Data represent an integer type Data range may be restricted by MDF 2083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 2093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public DmtData(int integer) { 2103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby intValue = integer; 2113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby type = INT; 2123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 2153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Data represent a boolean type 2163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 2173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public DmtData(boolean bool) { 2183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby boolValue = bool; 2193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby type = BOOL; 2203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 2233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Data represent a binary type Data size may be restricted by MDF. Data may 2243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * be null. 2253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 2263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public DmtData(byte[] bin) { 2273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby binValue = bin; 2283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby type = BIN; 2293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public DmtData(float value) { 2323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby floatValue = value; 2333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby type = FLOAT; 2343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby @Override 2373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public String toString() { 2383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return getString(); 2393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 2423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Get string representation of the value. It will automatically convert to 2433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * string value from other types. for NULL value, return empty String. for 2443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Default value, return null. 2453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 2463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public String getString() { 2473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby switch (type) { 2483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case NULL: 2493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return ""; 2503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case STRING: 2513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return stringValue; 2523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case INT: 2533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return String.valueOf(intValue); 2543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case BOOL: 2553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return String.valueOf(boolValue); 2563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case BIN: 2573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return (binValue == null) ? null : (new String(binValue)); 2583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case DATE: 2593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return dateValue; 2603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case TIME: 2613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return timeValue; 2623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case FLOAT: 2633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return String.valueOf(floatValue); 2643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case NODE: 265622b57345917dbcffd099917339dba2a150dbb92Jake Hamby StringBuilder tmpValue = new StringBuilder(); 2663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby try { 267622b57345917dbcffd099917339dba2a150dbb92Jake Hamby for (String node : childNodes.keySet()) { 2683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby tmpValue.append(node).append('|'); 2693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 270622b57345917dbcffd099917339dba2a150dbb92Jake Hamby if (tmpValue.length() != 0) { 271622b57345917dbcffd099917339dba2a150dbb92Jake Hamby tmpValue.deleteCharAt(tmpValue.length() - 1); 272622b57345917dbcffd099917339dba2a150dbb92Jake Hamby } 2733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } catch (Exception e) { 2743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.e(TAG, "getString() failed for node object", e); 2753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return tmpValue.toString(); 2773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby default: 2783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return null; 2793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 2833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Get Boolean value. 2843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 2853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * @return boolean value. 2863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 2873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public boolean getBoolean() throws DmtException { 2883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (type != BOOL) { 2893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby throw new DmtException(ErrorCodes.SYNCML_DM_INVALID_PARAMETER, 2903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby "The value requested is not boolean"); 2913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return boolValue; 2933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 2963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Get Integer value. 2973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 2983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * @return integer value 2993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 3003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public int getInt() throws DmtException { 3013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (type != INT) { 3023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby throw new DmtException(ErrorCodes.SYNCML_DM_INVALID_PARAMETER, 3033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby "The value requested is not integer"); 3043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return intValue; 3063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 3093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Get binary value. 3103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 3113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * @return binary value in byte[]. 3123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 3133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public byte[] getBinary() throws DmtException { 3143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (type != BIN) { 3153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby throw new DmtException(ErrorCodes.SYNCML_DM_INVALID_PARAMETER, 3163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby "The value requested is not binary"); 3173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return binValue; 3193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 321622b57345917dbcffd099917339dba2a150dbb92Jake Hamby /** 322622b57345917dbcffd099917339dba2a150dbb92Jake Hamby * Adds the specified child node to this interior node. 323622b57345917dbcffd099917339dba2a150dbb92Jake Hamby * @param name the name of the node to add 324622b57345917dbcffd099917339dba2a150dbb92Jake Hamby * @param child the node data to add 325622b57345917dbcffd099917339dba2a150dbb92Jake Hamby * @throws DmtException if this is not an interior node 326622b57345917dbcffd099917339dba2a150dbb92Jake Hamby */ 327622b57345917dbcffd099917339dba2a150dbb92Jake Hamby public void addChildNode(String name, DmtData child) throws DmtException { 328622b57345917dbcffd099917339dba2a150dbb92Jake Hamby if (type != NODE) { 329622b57345917dbcffd099917339dba2a150dbb92Jake Hamby throw new DmtException(ErrorCodes.SYNCML_DM_INVALID_PARAMETER, 330622b57345917dbcffd099917339dba2a150dbb92Jake Hamby "can't add children to leaf node"); 331622b57345917dbcffd099917339dba2a150dbb92Jake Hamby } 332622b57345917dbcffd099917339dba2a150dbb92Jake Hamby childNodes.put(name, child); 333622b57345917dbcffd099917339dba2a150dbb92Jake Hamby } 334622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 335622b57345917dbcffd099917339dba2a150dbb92Jake Hamby public void removeChildNode(String name) throws DmtException { 336622b57345917dbcffd099917339dba2a150dbb92Jake Hamby if (type != NODE) { 337622b57345917dbcffd099917339dba2a150dbb92Jake Hamby throw new DmtException(ErrorCodes.SYNCML_DM_INVALID_PARAMETER, 338622b57345917dbcffd099917339dba2a150dbb92Jake Hamby "can't add children to leaf node"); 339622b57345917dbcffd099917339dba2a150dbb92Jake Hamby } 340622b57345917dbcffd099917339dba2a150dbb92Jake Hamby childNodes.remove(name); 341622b57345917dbcffd099917339dba2a150dbb92Jake Hamby } 342622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 343622b57345917dbcffd099917339dba2a150dbb92Jake Hamby /** 344622b57345917dbcffd099917339dba2a150dbb92Jake Hamby * Returns the specified child of this interior node. 345622b57345917dbcffd099917339dba2a150dbb92Jake Hamby * @return the specified node data, or null if not found 346622b57345917dbcffd099917339dba2a150dbb92Jake Hamby * @throws DmtException if this is not an interior node 347622b57345917dbcffd099917339dba2a150dbb92Jake Hamby */ 348622b57345917dbcffd099917339dba2a150dbb92Jake Hamby public DmtData getChild(String name) throws DmtException { 349622b57345917dbcffd099917339dba2a150dbb92Jake Hamby if (type != NODE) { 350622b57345917dbcffd099917339dba2a150dbb92Jake Hamby throw new DmtException(ErrorCodes.SYNCML_DM_INVALID_PARAMETER, 351622b57345917dbcffd099917339dba2a150dbb92Jake Hamby "can't get children of leaf node"); 352622b57345917dbcffd099917339dba2a150dbb92Jake Hamby } 353622b57345917dbcffd099917339dba2a150dbb92Jake Hamby return childNodes.get(name); 354622b57345917dbcffd099917339dba2a150dbb92Jake Hamby } 355622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 356622b57345917dbcffd099917339dba2a150dbb92Jake Hamby /** 357622b57345917dbcffd099917339dba2a150dbb92Jake Hamby * Returns all children of this interior node. 358622b57345917dbcffd099917339dba2a150dbb92Jake Hamby * @return a map from node names to node data 359622b57345917dbcffd099917339dba2a150dbb92Jake Hamby * @throws DmtException if this is not an interior node 360622b57345917dbcffd099917339dba2a150dbb92Jake Hamby */ 361622b57345917dbcffd099917339dba2a150dbb92Jake Hamby public Map<String, DmtData> getChildNodeMap() throws DmtException { 362622b57345917dbcffd099917339dba2a150dbb92Jake Hamby if (type != NODE) { 363622b57345917dbcffd099917339dba2a150dbb92Jake Hamby throw new DmtException(ErrorCodes.SYNCML_DM_INVALID_PARAMETER, 364622b57345917dbcffd099917339dba2a150dbb92Jake Hamby "can't get children of leaf node"); 365622b57345917dbcffd099917339dba2a150dbb92Jake Hamby } 366622b57345917dbcffd099917339dba2a150dbb92Jake Hamby return Collections.unmodifiableMap(childNodes); 3673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby @Override 3703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public boolean equals(Object obj) { 3713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!(obj instanceof DmtData)) { 3723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return false; 3733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtData data = (DmtData) obj; 3753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (getType() != data.getType()) { 3773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return false; 3783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby try { 3813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby switch (getType()) { 3823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case NULL: 3833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return true; 3843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case DATE: 3863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case TIME: 3873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case FLOAT: 3883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case STRING: 3893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case NODE: 3903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String str1 = getString(); 3913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String str2 = data.getString(); 3923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return TextUtils.equals(str1, str2); 3933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case INT: 3953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return getInt() == data.getInt(); 3963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case BOOL: 3983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return getBoolean() == data.getBoolean(); 3993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case BIN: 4013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby byte[] bytes1 = getBinary(); 4023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby byte[] bytes2 = data.getBinary(); 4033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return Arrays.equals(bytes1, bytes2); 4043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby default: 4063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return false; 4073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } catch (DmtException e) { 4093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return false; 4103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 4143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Return the Type associated with the data This information is to be used 4153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * by the persistence layer. Persistence does NOT need to use meta info to 4163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * get the data 4173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 4183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public int getType() { 4193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return type; 4203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby @Override 4233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public void writeToParcel(Parcel out, int flags) { 4243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby out.writeInt(type); 425622b57345917dbcffd099917339dba2a150dbb92Jake Hamby switch (type) { 426622b57345917dbcffd099917339dba2a150dbb92Jake Hamby case NULL: 427622b57345917dbcffd099917339dba2a150dbb92Jake Hamby break; 428622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 429622b57345917dbcffd099917339dba2a150dbb92Jake Hamby case STRING: 430622b57345917dbcffd099917339dba2a150dbb92Jake Hamby out.writeString(stringValue); 431622b57345917dbcffd099917339dba2a150dbb92Jake Hamby break; 432622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 433622b57345917dbcffd099917339dba2a150dbb92Jake Hamby case INT: 434622b57345917dbcffd099917339dba2a150dbb92Jake Hamby out.writeInt(intValue); 435622b57345917dbcffd099917339dba2a150dbb92Jake Hamby break; 436622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 437622b57345917dbcffd099917339dba2a150dbb92Jake Hamby case BOOL: 438622b57345917dbcffd099917339dba2a150dbb92Jake Hamby out.writeInt(boolValue ? 1 : 0); 439622b57345917dbcffd099917339dba2a150dbb92Jake Hamby break; 440622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 441622b57345917dbcffd099917339dba2a150dbb92Jake Hamby case BIN: 442622b57345917dbcffd099917339dba2a150dbb92Jake Hamby if (binValue == null || binValue.length == 0) { 443622b57345917dbcffd099917339dba2a150dbb92Jake Hamby out.writeInt(0); 444622b57345917dbcffd099917339dba2a150dbb92Jake Hamby } else { 445622b57345917dbcffd099917339dba2a150dbb92Jake Hamby out.writeInt(binValue.length); 446622b57345917dbcffd099917339dba2a150dbb92Jake Hamby out.writeByteArray(binValue); 447622b57345917dbcffd099917339dba2a150dbb92Jake Hamby } 448622b57345917dbcffd099917339dba2a150dbb92Jake Hamby break; 449622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 450622b57345917dbcffd099917339dba2a150dbb92Jake Hamby case DATE: 451622b57345917dbcffd099917339dba2a150dbb92Jake Hamby out.writeString(dateValue); 452622b57345917dbcffd099917339dba2a150dbb92Jake Hamby break; 453622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 454622b57345917dbcffd099917339dba2a150dbb92Jake Hamby case TIME: 455622b57345917dbcffd099917339dba2a150dbb92Jake Hamby out.writeString(timeValue); 456622b57345917dbcffd099917339dba2a150dbb92Jake Hamby break; 457622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 458622b57345917dbcffd099917339dba2a150dbb92Jake Hamby case FLOAT: 459622b57345917dbcffd099917339dba2a150dbb92Jake Hamby out.writeFloat(floatValue); 460622b57345917dbcffd099917339dba2a150dbb92Jake Hamby break; 461622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 462622b57345917dbcffd099917339dba2a150dbb92Jake Hamby case NODE: 463622b57345917dbcffd099917339dba2a150dbb92Jake Hamby out.writeInt(childNodes.size()); 464622b57345917dbcffd099917339dba2a150dbb92Jake Hamby for (Map.Entry<String, DmtData> entry : childNodes.entrySet()) { 465622b57345917dbcffd099917339dba2a150dbb92Jake Hamby out.writeString(entry.getKey()); 466622b57345917dbcffd099917339dba2a150dbb92Jake Hamby entry.getValue().writeToParcel(out, flags); 467622b57345917dbcffd099917339dba2a150dbb92Jake Hamby } 468622b57345917dbcffd099917339dba2a150dbb92Jake Hamby break; 469622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 470622b57345917dbcffd099917339dba2a150dbb92Jake Hamby default: 471622b57345917dbcffd099917339dba2a150dbb92Jake Hamby break; 472622b57345917dbcffd099917339dba2a150dbb92Jake Hamby } 4733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby @Override 4763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public int describeContents() { 4773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return 0; 4783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public static final Creator<DmtData> CREATOR = new Creator<DmtData>() { 4813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby @Override 4823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public DmtData createFromParcel(Parcel in) { 4833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return new DmtData(in); 4843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby @Override 4873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public DmtData[] newArray(int size) { 4883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return new DmtData[size]; 4893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby }; 4913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtData(Parcel in) { 4933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby type = in.readInt(); 494622b57345917dbcffd099917339dba2a150dbb92Jake Hamby switch (type) { 495622b57345917dbcffd099917339dba2a150dbb92Jake Hamby case NULL: 496622b57345917dbcffd099917339dba2a150dbb92Jake Hamby break; 497622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 498622b57345917dbcffd099917339dba2a150dbb92Jake Hamby case STRING: 499622b57345917dbcffd099917339dba2a150dbb92Jake Hamby stringValue = in.readString(); 500622b57345917dbcffd099917339dba2a150dbb92Jake Hamby break; 501622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 502622b57345917dbcffd099917339dba2a150dbb92Jake Hamby case INT: 503622b57345917dbcffd099917339dba2a150dbb92Jake Hamby intValue = in.readInt(); 504622b57345917dbcffd099917339dba2a150dbb92Jake Hamby break; 505622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 506622b57345917dbcffd099917339dba2a150dbb92Jake Hamby case BOOL: 507622b57345917dbcffd099917339dba2a150dbb92Jake Hamby boolValue = (in.readInt() != 0); 508622b57345917dbcffd099917339dba2a150dbb92Jake Hamby break; 509622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 510622b57345917dbcffd099917339dba2a150dbb92Jake Hamby case BIN: 511622b57345917dbcffd099917339dba2a150dbb92Jake Hamby int length = in.readInt(); 512622b57345917dbcffd099917339dba2a150dbb92Jake Hamby if (length == 0) { 513622b57345917dbcffd099917339dba2a150dbb92Jake Hamby binValue = null; 514622b57345917dbcffd099917339dba2a150dbb92Jake Hamby } else { 515622b57345917dbcffd099917339dba2a150dbb92Jake Hamby binValue = new byte[length]; 516622b57345917dbcffd099917339dba2a150dbb92Jake Hamby in.readByteArray(binValue); 517622b57345917dbcffd099917339dba2a150dbb92Jake Hamby } 518622b57345917dbcffd099917339dba2a150dbb92Jake Hamby break; 519622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 520622b57345917dbcffd099917339dba2a150dbb92Jake Hamby case DATE: 521622b57345917dbcffd099917339dba2a150dbb92Jake Hamby dateValue = in.readString(); 522622b57345917dbcffd099917339dba2a150dbb92Jake Hamby break; 523622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 524622b57345917dbcffd099917339dba2a150dbb92Jake Hamby case TIME: 525622b57345917dbcffd099917339dba2a150dbb92Jake Hamby timeValue = in.readString(); 526622b57345917dbcffd099917339dba2a150dbb92Jake Hamby break; 527622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 528622b57345917dbcffd099917339dba2a150dbb92Jake Hamby case FLOAT: 529622b57345917dbcffd099917339dba2a150dbb92Jake Hamby floatValue = in.readFloat(); 530622b57345917dbcffd099917339dba2a150dbb92Jake Hamby break; 531622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 532622b57345917dbcffd099917339dba2a150dbb92Jake Hamby case NODE: 533622b57345917dbcffd099917339dba2a150dbb92Jake Hamby childNodes.clear(); 534622b57345917dbcffd099917339dba2a150dbb92Jake Hamby int childNodeCount = in.readInt(); 5354ab95dce83ebf049546962838b625a19f0f2cd4ca for (int i = 0; i < childNodeCount; i++) { 536622b57345917dbcffd099917339dba2a150dbb92Jake Hamby String name = in.readString(); 537622b57345917dbcffd099917339dba2a150dbb92Jake Hamby DmtData value = new DmtData(in); 538622b57345917dbcffd099917339dba2a150dbb92Jake Hamby childNodes.put(name, value); 539622b57345917dbcffd099917339dba2a150dbb92Jake Hamby } 540622b57345917dbcffd099917339dba2a150dbb92Jake Hamby break; 541622b57345917dbcffd099917339dba2a150dbb92Jake Hamby 542622b57345917dbcffd099917339dba2a150dbb92Jake Hamby default: 543622b57345917dbcffd099917339dba2a150dbb92Jake Hamby break; 5443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 5453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 5463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 547