1 /*
2  * Copyright (c) 2024 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 #ifndef PRINT_ATTRIBUTR_PREFERENCE_H
17 #define PRINT_ATTRIBUTR_PREFERENCE_H
18 
19 #include <string>
20 #include <vector>
21 #include <nlohmann/json.hpp>
22 
23 using json = nlohmann::json;
24 namespace OHOS::Print {
25 class PreferenceSetting {
26 public:
27     std::string pagesizeId;
28     std::string orientation;
29     std::string duplex;
30     std::string quality;
PreferenceSetting()31     PreferenceSetting() {};
PreferenceSetting(std::string pagesizeId, std::string orientation, std::string duplex, std::string quality)32     PreferenceSetting(std::string pagesizeId, std::string orientation, std::string duplex, std::string quality)
33         : pagesizeId(pagesizeId), orientation(orientation), duplex(duplex), quality(quality) {}
34 
BuildPreferenceSettingFromJson(const json& printerAttr)35     static PreferenceSetting BuildPreferenceSettingFromJson(const json& printerAttr)
36     {
37         PreferenceSetting preferenceSetting;
38         if (printerAttr.contains("pagesizeId")) {
39             preferenceSetting.pagesizeId = printerAttr.at("pagesizeId").get<std::string>();
40         }
41         if (printerAttr.contains("orientation")) {
42             preferenceSetting.orientation = printerAttr.at("orientation").get<std::string>();
43         }
44         if (printerAttr.contains("duplex")) {
45             preferenceSetting.duplex = printerAttr.at("duplex").get<std::string>();
46         }
47         if (printerAttr.contains("quality")) {
48             preferenceSetting.quality = printerAttr.at("quality").get<std::string>();
49         }
50         return preferenceSetting;
51     }
52 
BuildPreferenceSettingJson() const53     json BuildPreferenceSettingJson() const
54     {
55         return json{{"pagesizeId", pagesizeId}, {"orientation", orientation},
56             {"duplex", duplex}, {"quality", quality}};
57     }
~PreferenceSetting()58     ~PreferenceSetting() {};
59 };
60 
61 class PrinterPreference {
62 public:
63     std::vector<std::string> pagesizeId;
64     std::vector<std::string> orientation;
65     std::vector<std::string> duplex;
66     std::vector<std::string> quality;
67     PreferenceSetting defaultSetting;
68     PreferenceSetting setting;
PrinterPreference()69     PrinterPreference() {};
PrinterPreference(std::vector<std::string> pagesizeId, std::vector<std::string> orientation, std::vector<std::string> duplex, std::vector<std::string> quality, PreferenceSetting defaultSetting, PreferenceSetting setting)70     PrinterPreference(std::vector<std::string> pagesizeId, std::vector<std::string> orientation,
71         std::vector<std::string> duplex, std::vector<std::string> quality,
72         PreferenceSetting defaultSetting, PreferenceSetting setting)
73         : pagesizeId(pagesizeId), orientation(orientation), duplex(duplex), quality(quality),
74           defaultSetting(defaultSetting), setting(setting) {}
75 
BuildPrinterPreferenceFromJson(const json& printerAttrs)76     static PrinterPreference BuildPrinterPreferenceFromJson(const json& printerAttrs)
77     {
78         PrinterPreference printerPreference;
79         if (printerAttrs.contains("pagesizeId")) {
80             printerPreference.pagesizeId = printerAttrs.at("pagesizeId").get<std::vector<std::string>>();
81         }
82         if (printerAttrs.contains("orientation")) {
83             printerPreference.orientation = printerAttrs.at("orientation").get<std::vector<std::string>>();
84         }
85         if (printerAttrs.contains("duplex")) {
86             printerPreference.duplex = printerAttrs.at("duplex").get<std::vector<std::string>>();
87         }
88         if (printerAttrs.contains("quality")) {
89             printerPreference.quality = printerAttrs.at("quality").get<std::vector<std::string>>();
90         }
91         if (printerAttrs.contains("defaultSetting")) {
92             printerPreference.defaultSetting =
93                 PreferenceSetting::BuildPreferenceSettingFromJson(printerAttrs.at("defaultSetting"));
94         }
95         if (printerAttrs.contains("setting")) {
96             printerPreference.setting = PreferenceSetting::BuildPreferenceSettingFromJson(printerAttrs.at("setting"));
97         }
98         return printerPreference;
99     }
100 
BuildPrinterPreferenceJson() const101     json BuildPrinterPreferenceJson() const
102     {
103         return json{
104             {"pagesizeId", pagesizeId},
105             {"orientation", orientation},
106             {"duplex", duplex},
107             {"quality", quality},
108             {"defaultSetting", defaultSetting.BuildPreferenceSettingJson()},
109             {"setting", setting.BuildPreferenceSettingJson()}
110         };
111     }
~PrinterPreference()112     ~PrinterPreference() {};
113 };
114 }
115 #endif