11d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvistpackage com.android.server.wifi.hotspot2.pps;
21d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
31d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvistimport com.android.server.wifi.hotspot2.Utils;
41d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvistimport com.android.server.wifi.hotspot2.omadm.OMAException;
51d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvistimport com.android.server.wifi.hotspot2.omadm.OMANode;
62e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport com.android.server.wifi.hotspot2.omadm.PasspointManagementObjectManager;
71d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
81d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvistimport java.util.ArrayList;
91d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvistimport java.util.List;
101d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
112e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport static com.android.server.wifi.hotspot2.omadm.PasspointManagementObjectManager.TAG_CreationDate;
122e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport static com.android.server.wifi.hotspot2.omadm.PasspointManagementObjectManager.TAG_DataLimit;
132e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport static com.android.server.wifi.hotspot2.omadm.PasspointManagementObjectManager.TAG_ExpirationDate;
142e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport static com.android.server.wifi.hotspot2.omadm.PasspointManagementObjectManager.TAG_StartDate;
152e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport static com.android.server.wifi.hotspot2.omadm.PasspointManagementObjectManager.TAG_TimeLimit;
162e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport static com.android.server.wifi.hotspot2.omadm.PasspointManagementObjectManager.TAG_TypeOfSubscription;
172e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport static com.android.server.wifi.hotspot2.omadm.PasspointManagementObjectManager.TAG_UsageLimits;
182e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport static com.android.server.wifi.hotspot2.omadm.PasspointManagementObjectManager.TAG_UsageTimePeriod;
191d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
201d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvistpublic class SubscriptionParameters {
211d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    private final long mCDate;
221d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    private final long mXDate;
231d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    private final String mType;
241d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    private final List<Limit> mLimits;
251d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
261d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    public SubscriptionParameters(OMANode node) throws OMAException {
272e814680f4dd27a5f825afab189843582235cedcJan Nordqvist        mCDate = PasspointManagementObjectManager.getTime(node.getChild(TAG_CreationDate));
282e814680f4dd27a5f825afab189843582235cedcJan Nordqvist        mXDate = PasspointManagementObjectManager.getTime(node.getChild(TAG_ExpirationDate));
292e814680f4dd27a5f825afab189843582235cedcJan Nordqvist        mType = PasspointManagementObjectManager.getString(node.getChild(TAG_TypeOfSubscription));
301d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
311d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        OMANode ulNode = node.getChild(TAG_UsageLimits);
321d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        if (ulNode == null) {
331d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist            mLimits = null;
341d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        }
351d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        else {
361d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist            mLimits = new ArrayList<>(ulNode.getChildren().size());
371d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist            for (OMANode instance : ulNode.getChildren()) {
381d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                if (instance.isLeaf()) {
391d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                    throw new OMAException("Not expecting leaf node in " +
401d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                            TAG_UsageLimits);
411d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                }
421d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                mLimits.add(new Limit(instance));
431d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist            }
441d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        }
451d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
461d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    }
471d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
481d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    private static class Limit {
491d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        private final long mDataLimit;
501d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        private final long mStartDate;
511d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        private final long mTimeLimit;
521d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        private final long mUsageTimePeriod;
531d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
541d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        private Limit(OMANode node) throws OMAException {
552e814680f4dd27a5f825afab189843582235cedcJan Nordqvist            mDataLimit = PasspointManagementObjectManager
562e814680f4dd27a5f825afab189843582235cedcJan Nordqvist                    .getLong(node, TAG_DataLimit, Long.MAX_VALUE);
572e814680f4dd27a5f825afab189843582235cedcJan Nordqvist            mStartDate = PasspointManagementObjectManager
582e814680f4dd27a5f825afab189843582235cedcJan Nordqvist                    .getTime(node.getChild(TAG_StartDate));
592e814680f4dd27a5f825afab189843582235cedcJan Nordqvist            mTimeLimit = PasspointManagementObjectManager
602e814680f4dd27a5f825afab189843582235cedcJan Nordqvist                    .getLong(node, TAG_TimeLimit, Long.MAX_VALUE)
612e814680f4dd27a5f825afab189843582235cedcJan Nordqvist                    * PasspointManagementObjectManager.IntervalFactor;
622e814680f4dd27a5f825afab189843582235cedcJan Nordqvist            mUsageTimePeriod = PasspointManagementObjectManager
632e814680f4dd27a5f825afab189843582235cedcJan Nordqvist                    .getLong(node, TAG_UsageTimePeriod, null);
641d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        }
651d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
661d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        @Override
671d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        public String toString() {
681d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist            return "Limit{" +
691d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                    "dataLimit=" + mDataLimit +
701d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                    ", startDate=" + Utils.toUTCString(mStartDate) +
711d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                    ", timeLimit=" + mTimeLimit +
721d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                    ", usageTimePeriod=" + mUsageTimePeriod +
731d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                    '}';
741d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        }
751d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    }
761d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
771d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    @Override
781d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    public String toString() {
791d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        return "SubscriptionParameters{" +
801d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                "cDate=" + Utils.toUTCString(mCDate) +
811d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                ", xDate=" + Utils.toUTCString(mXDate) +
821d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                ", type='" + mType + '\'' +
831d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                ", limits=" + mLimits +
841d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                '}';
851d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    }
861d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist}
87