125c1cde8Sopenharmony_ci/*
225c1cde8Sopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
325c1cde8Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
425c1cde8Sopenharmony_ci * you may not use this file except in compliance with the License.
525c1cde8Sopenharmony_ci * You may obtain a copy of the License at
625c1cde8Sopenharmony_ci *
725c1cde8Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
825c1cde8Sopenharmony_ci *
925c1cde8Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1025c1cde8Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1125c1cde8Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1225c1cde8Sopenharmony_ci * See the License for the specific language governing permissions and
1325c1cde8Sopenharmony_ci * limitations under the License.
1425c1cde8Sopenharmony_ci */
1525c1cde8Sopenharmony_ci
1625c1cde8Sopenharmony_ci#ifndef DATA_STORAGE_PDP_PROFILE_ABILITY_H
1725c1cde8Sopenharmony_ci#define DATA_STORAGE_PDP_PROFILE_ABILITY_H
1825c1cde8Sopenharmony_ci
1925c1cde8Sopenharmony_ci#include <functional>
2025c1cde8Sopenharmony_ci
2125c1cde8Sopenharmony_ci#include "__mutex_base"
2225c1cde8Sopenharmony_ci#include "ability.h"
2325c1cde8Sopenharmony_ci#include "ability_lifecycle.h"
2425c1cde8Sopenharmony_ci#include "abs_shared_result_set.h"
2525c1cde8Sopenharmony_ci#include "datashare_ext_ability.h"
2625c1cde8Sopenharmony_ci#include "datashare_ext_ability_context.h"
2725c1cde8Sopenharmony_ci#include "datashare_values_bucket.h"
2825c1cde8Sopenharmony_ci#include "iosfwd"
2925c1cde8Sopenharmony_ci#include "map"
3025c1cde8Sopenharmony_ci#include "memory"
3125c1cde8Sopenharmony_ci#include "rdb_pdp_profile_helper.h"
3225c1cde8Sopenharmony_ci#include "rdb_predicates.h"
3325c1cde8Sopenharmony_ci#include "string"
3425c1cde8Sopenharmony_ci#include "vector"
3525c1cde8Sopenharmony_ci#include "want.h"
3625c1cde8Sopenharmony_ci
3725c1cde8Sopenharmony_cinamespace OHOS {
3825c1cde8Sopenharmony_ciclass Uri;
3925c1cde8Sopenharmony_cinamespace NativeRdb {
4025c1cde8Sopenharmony_ciclass AbsRdbPredicates;
4125c1cde8Sopenharmony_ciclass ResultSet;
4225c1cde8Sopenharmony_ciclass DataAbilityPredicates;
4325c1cde8Sopenharmony_ciclass ValuesBucket;
4425c1cde8Sopenharmony_ci}
4525c1cde8Sopenharmony_cinamespace Telephony {
4625c1cde8Sopenharmony_cienum class PdpProfileUriType {
4725c1cde8Sopenharmony_ci    UNKNOW,
4825c1cde8Sopenharmony_ci    PDP_PROFILE,
4925c1cde8Sopenharmony_ci    INIT,
5025c1cde8Sopenharmony_ci    RESET,
5125c1cde8Sopenharmony_ci    PREFER_APN,
5225c1cde8Sopenharmony_ci};
5325c1cde8Sopenharmony_ciclass PdpProfileAbility : public DataShare::DataShareExtAbility {
5425c1cde8Sopenharmony_cipublic:
5525c1cde8Sopenharmony_ci    PdpProfileAbility();
5625c1cde8Sopenharmony_ci    virtual ~PdpProfileAbility() override;
5725c1cde8Sopenharmony_ci    static PdpProfileAbility* Create();
5825c1cde8Sopenharmony_ci    void DoInit();
5925c1cde8Sopenharmony_ci    sptr<IRemoteObject> OnConnect(const AAFwk::Want &want) override;
6025c1cde8Sopenharmony_ci    virtual void OnStart(const AppExecFwk::Want &want) override;
6125c1cde8Sopenharmony_ci    virtual int Insert(const Uri &uri, const DataShare::DataShareValuesBucket &value) override;
6225c1cde8Sopenharmony_ci    virtual int BatchInsert(const Uri &uri, const std::vector<DataShare::DataShareValuesBucket> &values) override;
6325c1cde8Sopenharmony_ci    virtual std::shared_ptr<DataShare::DataShareResultSet> Query(const Uri &uri,
6425c1cde8Sopenharmony_ci        const DataShare::DataSharePredicates &predicates, std::vector<std::string> &columns,
6525c1cde8Sopenharmony_ci        DataShare::DatashareBusinessError &businessError) override;
6625c1cde8Sopenharmony_ci    virtual int Update(const Uri &uri, const DataShare::DataSharePredicates &predicates,
6725c1cde8Sopenharmony_ci        const DataShare::DataShareValuesBucket &value) override;
6825c1cde8Sopenharmony_ci    virtual int Delete(const Uri &uri, const DataShare::DataSharePredicates &predicates) override;
6925c1cde8Sopenharmony_ci    virtual std::string GetType(const Uri &uri) override;
7025c1cde8Sopenharmony_ci    virtual int OpenFile(const Uri &uri, const std::string &mode) override;
7125c1cde8Sopenharmony_ci
7225c1cde8Sopenharmony_ciprivate:
7325c1cde8Sopenharmony_ci    /**
7425c1cde8Sopenharmony_ci     * Parse Uri Type
7525c1cde8Sopenharmony_ci     *
7625c1cde8Sopenharmony_ci     * @param uri Resource address
7725c1cde8Sopenharmony_ci     * @return return PdpProfileUriType
7825c1cde8Sopenharmony_ci     */
7925c1cde8Sopenharmony_ci    PdpProfileUriType ParseUriType(Uri &uri);
8025c1cde8Sopenharmony_ci
8125c1cde8Sopenharmony_ci    /**
8225c1cde8Sopenharmony_ci     * Convert DataSharePredicates to RdbPredicates
8325c1cde8Sopenharmony_ci     *
8425c1cde8Sopenharmony_ci     * @param tableName table name of the predicates
8525c1cde8Sopenharmony_ci     * @param predicates DataSharePredicates
8625c1cde8Sopenharmony_ci     */
8725c1cde8Sopenharmony_ci    OHOS::NativeRdb::RdbPredicates ConvertPredicates(
8825c1cde8Sopenharmony_ci        const std::string &tableName, const DataShare::DataSharePredicates &predicates);
8925c1cde8Sopenharmony_ci
9025c1cde8Sopenharmony_ci    /**
9125c1cde8Sopenharmony_ci     * Check whether the initialization succeeds
9225c1cde8Sopenharmony_ci     *
9325c1cde8Sopenharmony_ci     * @return true : succeed ,false : failed
9425c1cde8Sopenharmony_ci     */
9525c1cde8Sopenharmony_ci    bool IsInitOk();
9625c1cde8Sopenharmony_ci    int UpdatePreferApn(const DataShare::DataShareValuesBucket &value);
9725c1cde8Sopenharmony_ci    int SetPreferApn(int simId, int profileId);
9825c1cde8Sopenharmony_ci    int GetPreferApn(const std::string &queryString);
9925c1cde8Sopenharmony_ci    std::string GetQueryKey(const std::string &queryString, const std::string &key);
10025c1cde8Sopenharmony_ci    bool HasColumnValue(
10125c1cde8Sopenharmony_ci        const OHOS::NativeRdb::ValuesBucket &value, const char *columnName, NativeRdb::ValueObject &valueObject);
10225c1cde8Sopenharmony_ci
10325c1cde8Sopenharmony_ciprivate:
10425c1cde8Sopenharmony_ci    RdbPdpProfileHelper helper_;
10525c1cde8Sopenharmony_ci    std::mutex lock_;
10625c1cde8Sopenharmony_ci    bool initDatabaseDir = false;
10725c1cde8Sopenharmony_ci    bool initRdbStore = false;
10825c1cde8Sopenharmony_ci    void GetTargetOpkey(int slotId, std::string &opkey);
10925c1cde8Sopenharmony_ci    int ResetApn(const DataShare::DataShareValuesBucket &bucket);
11025c1cde8Sopenharmony_ci    int GetIntFromValuesBucket(OHOS::NativeRdb::ValuesBucket &bucket, const char *key, int &value);
11125c1cde8Sopenharmony_ci    std::shared_ptr<NativeRdb::ResultSet> QueryPdpProfile(Uri &uri, const std::string &tableName,
11225c1cde8Sopenharmony_ci        const DataShare::DataSharePredicates &predicates, std::vector<std::string> &columns);
11325c1cde8Sopenharmony_ci};
11425c1cde8Sopenharmony_ci} // namespace Telephony
11525c1cde8Sopenharmony_ci} // namespace OHOS
11625c1cde8Sopenharmony_ci#endif // DATA_STORAGE_PDP_PROFILE_ABILITY_H
117