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; 31 std::string mediaType; 32 bool hasMargin; PreferenceSetting()33 PreferenceSetting() {}; PreferenceSetting(std::string pagesizeId,std::string orientation,std::string duplex,std::string quality,std::string mediaType,bool hasMargin)34 PreferenceSetting(std::string pagesizeId, std::string orientation, std::string duplex, std::string quality, 35 std::string mediaType, bool hasMargin) 36 : pagesizeId(pagesizeId), orientation(orientation), duplex(duplex), quality(quality), 37 mediaType(mediaType), hasMargin(hasMargin) {} 38 BuildPreferenceSettingFromJson(const json & printerAttr)39 static PreferenceSetting BuildPreferenceSettingFromJson(const json& printerAttr) 40 { 41 PreferenceSetting preferenceSetting; 42 if (printerAttr.contains("pagesizeId") && printerAttr["pagesizeId"].is_string()) { 43 preferenceSetting.pagesizeId = printerAttr.at("pagesizeId").get<std::string>(); 44 } 45 if (printerAttr.contains("orientation") && printerAttr["orientation"].is_string()) { 46 preferenceSetting.orientation = printerAttr.at("orientation").get<std::string>(); 47 } 48 if (printerAttr.contains("duplex") && printerAttr["duplex"].is_string()) { 49 preferenceSetting.duplex = printerAttr.at("duplex").get<std::string>(); 50 } 51 if (printerAttr.contains("quality") && printerAttr["quality"].is_string()) { 52 preferenceSetting.quality = printerAttr.at("quality").get<std::string>(); 53 } 54 if (printerAttr.contains("mediaType") && printerAttr["mediaType"].is_string()) { 55 preferenceSetting.mediaType = printerAttr.at("mediaType").get<std::string>(); 56 } 57 if (printerAttr.contains("hasMargin") && printerAttr["hasMargin"].is_boolean()) { 58 preferenceSetting.hasMargin = printerAttr.at("hasMargin").get<bool>(); 59 } 60 return preferenceSetting; 61 } 62 BuildPreferenceSettingJson()63 json BuildPreferenceSettingJson() const 64 { 65 return json{ 66 {"pagesizeId", pagesizeId}, 67 {"orientation", orientation}, 68 {"duplex", duplex}, 69 {"quality", quality}, 70 {"mediaType", mediaType}, 71 {"hasMargin", hasMargin} 72 }; 73 } ~PreferenceSetting()74 ~PreferenceSetting() {}; 75 }; 76 77 class PrinterPreference { 78 public: 79 std::vector<std::string> pagesizeId; 80 std::vector<std::string> orientation; 81 std::vector<std::string> duplex; 82 std::vector<std::string> quality; 83 std::vector<std::string> mediaType; 84 PreferenceSetting defaultSetting; 85 PreferenceSetting setting; PrinterPreference()86 PrinterPreference() {}; PrinterPreference(std::vector<std::string> pagesizeId,std::vector<std::string> orientation,std::vector<std::string> duplex,std::vector<std::string> quality,std::vector<std::string> mediaType,PreferenceSetting defaultSetting,PreferenceSetting setting)87 PrinterPreference(std::vector<std::string> pagesizeId, std::vector<std::string> orientation, 88 std::vector<std::string> duplex, std::vector<std::string> quality, std::vector<std::string> mediaType, 89 PreferenceSetting defaultSetting, PreferenceSetting setting) 90 : pagesizeId(pagesizeId), orientation(orientation), duplex(duplex), quality(quality), 91 mediaType(mediaType), defaultSetting(defaultSetting), setting(setting) {} 92 GetArrayFromJson(const json & value,std::vector<std::string> & target,const std::string & key)93 static void GetArrayFromJson(const json& value, std::vector<std::string> &target, const std::string& key) 94 { 95 if (value.contains(key) && value.is_object()) { 96 const json& jsonValue = value.at(key); 97 for (auto &element : jsonValue.items()) { 98 nlohmann::json item = element.value(); 99 if (!item.is_string()) { 100 PRINT_HILOGW("this item in preference is not string"); 101 continue; 102 } 103 target.emplace_back(item.get<std::string>()); 104 } 105 } else { 106 PRINT_HILOGW("can not find target array in preference, key: %{public}s", key.c_str()); 107 } 108 } 109 BuildPrinterPreferenceFromJson(const json & printerAttrs)110 static PrinterPreference BuildPrinterPreferenceFromJson(const json& printerAttrs) 111 { 112 PrinterPreference printerPreference; 113 GetArrayFromJson(printerAttrs, printerPreference.pagesizeId, "pagesizeId"); 114 GetArrayFromJson(printerAttrs, printerPreference.orientation, "orientation"); 115 GetArrayFromJson(printerAttrs, printerPreference.duplex, "duplex"); 116 GetArrayFromJson(printerAttrs, printerPreference.quality, "quality"); 117 GetArrayFromJson(printerAttrs, printerPreference.mediaType, "mediaType"); 118 if (printerAttrs.contains("defaultSetting") && printerAttrs["defaultSetting"].is_object()) { 119 printerPreference.defaultSetting = 120 PreferenceSetting::BuildPreferenceSettingFromJson(printerAttrs.at("defaultSetting")); 121 } 122 if (printerAttrs.contains("setting") && printerAttrs["setting"].is_object()) { 123 printerPreference.setting = PreferenceSetting::BuildPreferenceSettingFromJson(printerAttrs.at("setting")); 124 } 125 return printerPreference; 126 } 127 BuildPrinterPreferenceJson()128 json BuildPrinterPreferenceJson() const 129 { 130 return json{ 131 {"pagesizeId", pagesizeId}, 132 {"orientation", orientation}, 133 {"duplex", duplex}, 134 {"quality", quality}, 135 {"mediaType", mediaType}, 136 {"defaultSetting", defaultSetting.BuildPreferenceSettingJson()}, 137 {"setting", setting.BuildPreferenceSettingJson()} 138 }; 139 } ~PrinterPreference()140 ~PrinterPreference() {}; 141 }; 142 } 143 #endif