• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "data_ability_operation_builder.h"
17 #include "data_ability_predicates.h"
18 #include "hilog_wrapper.h"
19 #include "values_bucket.h"
20 
21 namespace OHOS {
22 namespace AppExecFwk {
DataAbilityOperationBuilder(const int type,const std::shared_ptr<Uri> & uri)23 DataAbilityOperationBuilder::DataAbilityOperationBuilder(const int type, const std::shared_ptr<Uri> &uri)
24 {
25     type_ = type;
26     uri_ = uri;
27     expectedCount_ = 0;
28     interrupted_ = false;
29     valuesBucket_ = nullptr;
30     dataAbilityPredicates_ = nullptr;
31     valuesBucketReferences_ = nullptr;
32     dataAbilityPredicatesBackReferences_.clear();
33 }
~DataAbilityOperationBuilder()34 DataAbilityOperationBuilder::~DataAbilityOperationBuilder()
35 {
36     dataAbilityPredicatesBackReferences_.clear();
37 }
38 
Build()39 std::shared_ptr<DataAbilityOperation> DataAbilityOperationBuilder::Build()
40 {
41     HILOG_DEBUG("DataAbilityOperationBuilder::Build start");
42     if (type_ != DataAbilityOperation::TYPE_UPDATE || (valuesBucket_ != nullptr && !valuesBucket_->IsEmpty())) {
43         std::shared_ptr<DataAbilityOperation> operation = std::make_shared<DataAbilityOperation>(shared_from_this());
44         HILOG_DEBUG("DataAbilityOperationBuilder::Build end");
45         return operation;
46     }
47     HILOG_ERROR("DataAbilityOperationBuilder::Build return nullptr");
48     return nullptr;
49 }
WithValuesBucket(std::shared_ptr<NativeRdb::ValuesBucket> & values)50 std::shared_ptr<DataAbilityOperationBuilder> DataAbilityOperationBuilder::WithValuesBucket(
51     std::shared_ptr<NativeRdb::ValuesBucket> &values)
52 {
53     HILOG_DEBUG("DataAbilityOperationBuilder::WithValuesBucket start");
54     if (type_ != DataAbilityOperation::TYPE_INSERT && type_ != DataAbilityOperation::TYPE_UPDATE &&
55         type_ != DataAbilityOperation::TYPE_ASSERT) {
56         HILOG_ERROR(
57             "DataAbilityOperationBuilder::WithValuesBucket only inserts, updates can have values, type=%{public}d",
58             type_);
59         return nullptr;
60     }
61 
62     std::map<std::string, NativeRdb::ValueObject> valuesMap;
63     values->GetAll(valuesMap);
64 
65     valuesBucket_.reset(new (std::nothrow) NativeRdb::ValuesBucket(valuesMap));
66     HILOG_DEBUG("DataAbilityOperationBuilder::WithValuesBucket end");
67     return shared_from_this();
68 }
69 
WithPredicates(std::shared_ptr<NativeRdb::DataAbilityPredicates> & predicates)70 std::shared_ptr<DataAbilityOperationBuilder> DataAbilityOperationBuilder::WithPredicates(
71     std::shared_ptr<NativeRdb::DataAbilityPredicates> &predicates)
72 {
73     HILOG_DEBUG("DataAbilityOperationBuilder::WithPredicates start");
74     if (type_ != DataAbilityOperation::TYPE_DELETE && type_ != DataAbilityOperation::TYPE_UPDATE &&
75         type_ != DataAbilityOperation::TYPE_ASSERT) {
76         HILOG_ERROR(
77             "DataAbilityOperationBuilder::withPredicates only deletes and updates can have selections, type=%{public}d",
78             type_);
79         return nullptr;
80     }
81     dataAbilityPredicates_ = predicates;
82     HILOG_DEBUG("DataAbilityOperationBuilder::WithPredicates end");
83     return shared_from_this();
84 }
WithExpectedCount(int count)85 std::shared_ptr<DataAbilityOperationBuilder> DataAbilityOperationBuilder::WithExpectedCount(int count)
86 {
87     HILOG_DEBUG("DataAbilityOperationBuilder::WithExpectedCount start");
88     HILOG_INFO("DataAbilityOperationBuilder::WithExpectedCount expectedCount:%{public}d", count);
89     if (type_ != DataAbilityOperation::TYPE_UPDATE && type_ != DataAbilityOperation::TYPE_DELETE &&
90         type_ != DataAbilityOperation::TYPE_ASSERT) {
91         HILOG_ERROR("DataAbilityOperationBuilder::withExpectedCount only updates, deletes can have expected counts, "
92             "type=%{public}d",
93             type_);
94         return nullptr;
95     }
96     expectedCount_ = count;
97     HILOG_DEBUG("DataAbilityOperationBuilder::WithExpectedCount end");
98     return shared_from_this();
99 }
WithPredicatesBackReference(int requestArgIndex,int previousResult)100 std::shared_ptr<DataAbilityOperationBuilder> DataAbilityOperationBuilder::WithPredicatesBackReference(
101     int requestArgIndex, int previousResult)
102 {
103     HILOG_DEBUG("DataAbilityOperationBuilder::WithPredicatesBackReference start");
104     HILOG_INFO("DataAbilityOperationBuilder::WithPredicatesBackReference requestArgIndex:%{public}d, "
105         "previousResult:%{public}d",
106         requestArgIndex,
107         previousResult);
108     if (type_ != DataAbilityOperation::TYPE_UPDATE && type_ != DataAbilityOperation::TYPE_DELETE &&
109         type_ != DataAbilityOperation::TYPE_ASSERT) {
110         HILOG_ERROR(
111             "DataAbilityOperationBuilder::withPredicatesBackReference only updates, deletes, and asserts can have "
112             "select back-references, type=%{public}d",
113             type_);
114         return nullptr;
115     }
116     dataAbilityPredicatesBackReferences_.insert(std::make_pair(requestArgIndex, previousResult));
117     HILOG_DEBUG("DataAbilityOperationBuilder::WithPredicatesBackReference end");
118     return shared_from_this();
119 }
WithValueBackReferences(std::shared_ptr<NativeRdb::ValuesBucket> & backReferences)120 std::shared_ptr<DataAbilityOperationBuilder> DataAbilityOperationBuilder::WithValueBackReferences(
121     std::shared_ptr<NativeRdb::ValuesBucket> &backReferences)
122 {
123     HILOG_DEBUG("DataAbilityOperationBuilder::WithValueBackReferences start");
124     if (type_ != DataAbilityOperation::TYPE_INSERT && type_ != DataAbilityOperation::TYPE_UPDATE &&
125         type_ != DataAbilityOperation::TYPE_ASSERT) {
126         HILOG_ERROR("DataAbilityOperationBuilder::withValueBackReferences only inserts, updates, and asserts can have "
127             "value back-references, type=%{public}d",
128             type_);
129         return nullptr;
130     }
131     valuesBucketReferences_ = backReferences;
132     HILOG_DEBUG("DataAbilityOperationBuilder::WithValueBackReferences end");
133     return shared_from_this();
134 }
WithInterruptionAllowed(bool interrupted)135 std::shared_ptr<DataAbilityOperationBuilder> DataAbilityOperationBuilder::WithInterruptionAllowed(bool interrupted)
136 {
137     HILOG_DEBUG("DataAbilityOperationBuilder::WithInterruptionAllowed start");
138     HILOG_INFO("DataAbilityOperationBuilder::WithInterruptionAllowed  interrupted=%{public}d", interrupted);
139     if (type_ != DataAbilityOperation::TYPE_INSERT && type_ != DataAbilityOperation::TYPE_UPDATE &&
140         type_ != DataAbilityOperation::TYPE_ASSERT && type_ != DataAbilityOperation::TYPE_DELETE) {
141         HILOG_ERROR(
142             "DataAbilityOperationBuilder::withInterruptionAllowed only inserts, updates, delete, and asserts can "
143             "have value back-references, type=%{public}d",
144             type_);
145         return nullptr;
146     }
147     interrupted_ = interrupted;
148     HILOG_DEBUG("DataAbilityOperationBuilder::WithInterruptionAllowed end");
149     return shared_from_this();
150 }
151 }  // namespace AppExecFwk
152 }  // namespace OHOS
153