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