1ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistpackage com.android.hotspot2.pps;
2ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
3ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport com.android.hotspot2.Utils;
4ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport com.android.hotspot2.omadm.MOManager;
5ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport com.android.hotspot2.omadm.OMAException;
6ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport com.android.hotspot2.omadm.OMANode;
7ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
8ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.util.ArrayList;
9ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.util.List;
10ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
11ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport static com.android.hotspot2.omadm.MOManager.TAG_CreationDate;
12ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport static com.android.hotspot2.omadm.MOManager.TAG_DataLimit;
13ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport static com.android.hotspot2.omadm.MOManager.TAG_ExpirationDate;
14ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport static com.android.hotspot2.omadm.MOManager.TAG_StartDate;
15ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport static com.android.hotspot2.omadm.MOManager.TAG_TimeLimit;
16ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport static com.android.hotspot2.omadm.MOManager.TAG_TypeOfSubscription;
17ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport static com.android.hotspot2.omadm.MOManager.TAG_UsageLimits;
18ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport static com.android.hotspot2.omadm.MOManager.TAG_UsageTimePeriod;
19ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
20ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistpublic class SubscriptionParameters {
21ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    private final long mCDate;
22ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    private final long mXDate;
23ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    private final String mType;
24ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    private final List<Limit> mLimits;
25ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
26ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public SubscriptionParameters(OMANode node) throws OMAException {
27ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        mCDate = MOManager.getTime(node.getChild(TAG_CreationDate));
28ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        mXDate = MOManager.getTime(node.getChild(TAG_ExpirationDate));
29ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        mType = MOManager.getString(node.getChild(TAG_TypeOfSubscription));
30ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
31ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        OMANode ulNode = node.getChild(TAG_UsageLimits);
32ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        if (ulNode == null) {
33ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist            mLimits = null;
34ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        } else {
35ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist            mLimits = new ArrayList<>(ulNode.getChildren().size());
36ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist            for (OMANode instance : ulNode.getChildren()) {
37ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                if (instance.isLeaf()) {
38ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                    throw new OMAException("Not expecting leaf node in " +
39ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                            TAG_UsageLimits);
40ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                }
41ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                mLimits.add(new Limit(instance));
42ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist            }
43ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        }
44ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
45ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    }
46ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
47ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    private static class Limit {
48ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        private final long mDataLimit;
49ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        private final long mStartDate;
50ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        private final long mTimeLimit;
51ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        private final long mUsageTimePeriod;
52ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
53ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        private Limit(OMANode node) throws OMAException {
54ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist            mDataLimit = MOManager.getLong(node, TAG_DataLimit, Long.MAX_VALUE);
55ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist            mStartDate = MOManager.getTime(node.getChild(TAG_StartDate));
56ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist            mTimeLimit = MOManager.getLong(node, TAG_TimeLimit, Long.MAX_VALUE) *
57ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                    MOManager.IntervalFactor;
58ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist            mUsageTimePeriod = MOManager.getLong(node, TAG_UsageTimePeriod, null);
59ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        }
60ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
61ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        @Override
62ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        public String toString() {
63ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist            return "Limit{" +
64ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                    "dataLimit=" + mDataLimit +
65ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                    ", startDate=" + Utils.toUTCString(mStartDate) +
66ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                    ", timeLimit=" + mTimeLimit +
67ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                    ", usageTimePeriod=" + mUsageTimePeriod +
68ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                    '}';
69ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        }
70ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    }
71ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
72ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    @Override
73ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public String toString() {
74ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        return "SubscriptionParameters{" +
75ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                "cDate=" + Utils.toUTCString(mCDate) +
76ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                ", xDate=" + Utils.toUTCString(mXDate) +
77ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                ", type='" + mType + '\'' +
78ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                ", limits=" + mLimits +
79ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                '}';
80ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    }
81ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist}
82