1/**
2 * Copyright (c) 2021-2022 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
16import { AppItemInfo } from './AppItemInfo';
17import GridLayoutInfoColumns from './GridLayoutInfoColumns';
18import GridLayoutItemInfo from './GridLayoutItemInfo';
19import { CheckEmptyUtils } from '../utils/CheckEmptyUtils';
20
21/**
22 * Item info of GridLayoutInfo item.
23 */
24export default class GridLayoutItemBuilder {
25    /**
26     * GridLayoutItemInfo: id
27     */
28    readonly id: number | undefined;
29
30    /**
31     * GridLayoutItemInfo: cardId
32     */
33    cardId: number | undefined;
34
35    /**
36     * GridLayoutItemInfo: ID of the bigfolder.
37     */
38    folderId: string | undefined;
39
40    /**
41     * GridLayoutItemInfo: bigfolder id
42     * Not in bigfolder: - 100
43     * In a bigfolder: ID of the bigfolder.
44     */
45    container: number | undefined;
46
47    /**
48     * GridLayoutItemInfo: bigfolder Name
49     */
50    folderName: string | undefined;
51
52    /**
53     * GridLayoutItemInfo: badgeNumber
54     */
55    badgeNumber: number | undefined;
56
57    /**
58     * GridLayoutItemInfo: type  0:app  1:card  3:bigfolder
59     */
60    typeId: number | undefined;
61
62    /**
63     * GridLayoutItemInfo: area
64     */
65    area: number[] | undefined;
66
67    /**
68     * GridLayoutItemInfo: page
69     */
70    page: number | undefined;
71
72    /**
73     * GridLayoutItemInfo: column of positons
74     */
75    column: number | undefined;
76
77    /**
78     * GridLayoutItemInfo: row of positons
79     */
80    row: number | undefined;
81
82    /**
83     * GridLayoutItemInfo: bigfolder apps info
84     */
85    layoutInfo: AppItemInfo[] | undefined;
86
87    /**
88     * Indicates bundleName.
89     */
90    bundleName: string | undefined;
91
92    /**
93     * Indicates abilityName.
94     */
95    abilityName: string | undefined;
96
97    moduleName: string | undefined;
98
99    /**
100     * Indicates keyName.
101     */
102    keyName: string | undefined;
103
104    /**
105     * GridLayoutItemInfo: extend1
106     */
107    extend1: string | undefined;
108
109    /**
110     * GridLayoutItemInfo: extend2
111     */
112    extend2: string | undefined;
113
114    /**
115     * GridLayoutItemInfo: extend3
116     */
117    extend3: number | undefined;
118
119    constructor(id: number) {
120        this.id = id;
121    }
122
123    static fromResultSet(resultSet: any): GridLayoutItemBuilder {
124        let gridlayoutItemBuilder = new GridLayoutItemBuilder(resultSet.getLong(resultSet.getColumnIndex(GridLayoutInfoColumns.ID)));
125        gridlayoutItemBuilder.setCardId(resultSet.getLong(resultSet.getColumnIndex(GridLayoutInfoColumns.CARD_ID)));
126        gridlayoutItemBuilder.setFolderId(resultSet.getString(resultSet.getColumnIndex(GridLayoutInfoColumns.FOLDER_ID)));
127        gridlayoutItemBuilder.setContainer(resultSet.getLong(resultSet.getColumnIndex(GridLayoutInfoColumns.CONTAINER)));
128        gridlayoutItemBuilder.setFolderName(resultSet.getString(resultSet.getColumnIndex(GridLayoutInfoColumns.FOLDER_NAME)));
129        gridlayoutItemBuilder.setBadgeNumber(resultSet.getLong(resultSet.getColumnIndex(GridLayoutInfoColumns.BADGE_NUMBER)));
130        gridlayoutItemBuilder.setTypeId(resultSet.getLong(resultSet.getColumnIndex(GridLayoutInfoColumns.TYPE_ID)));
131        gridlayoutItemBuilder.setArea(resultSet.getString(resultSet.getColumnIndex(GridLayoutInfoColumns.AREA)));
132        gridlayoutItemBuilder.setPage(resultSet.getLong(resultSet.getColumnIndex(GridLayoutInfoColumns.PAGE)));
133        gridlayoutItemBuilder.setColumn(resultSet.getLong(resultSet.getColumnIndex(GridLayoutInfoColumns.COLUMN)));
134        gridlayoutItemBuilder.setRow(resultSet.getLong(resultSet.getColumnIndex(GridLayoutInfoColumns.ROW)));
135        gridlayoutItemBuilder.setBundleName(resultSet.getString(resultSet.getColumnIndex(GridLayoutInfoColumns.BUNDLE_NAME)));
136        gridlayoutItemBuilder.setAbilityName(resultSet.getString(resultSet.getColumnIndex(GridLayoutInfoColumns.ABILITY_NAME)));
137        gridlayoutItemBuilder.setModuleName(resultSet.getString(resultSet.getColumnIndex(GridLayoutInfoColumns.MODULE_NAME)));
138        gridlayoutItemBuilder.setKeyName(resultSet.getString(resultSet.getColumnIndex(GridLayoutInfoColumns.KEY_NAME)));
139        gridlayoutItemBuilder.setExtend1(resultSet.getString(resultSet.getColumnIndex(GridLayoutInfoColumns.EXTEND1)));
140        gridlayoutItemBuilder.setExtend2(resultSet.getString(resultSet.getColumnIndex(GridLayoutInfoColumns.EXTEND2)));
141        gridlayoutItemBuilder.setExtend3(resultSet.getLong(resultSet.getColumnIndex(GridLayoutInfoColumns.EXTEND3)));
142        return gridlayoutItemBuilder;
143    }
144
145    static buildLayout(resultSet: any): AppItemInfo {
146        let appItemInfo = new AppItemInfo();
147        appItemInfo.appName = resultSet.getString(resultSet.getColumnIndex(GridLayoutInfoColumns.APP_NAME));
148        appItemInfo.isSystemApp = resultSet.getLong(resultSet.getColumnIndex(GridLayoutInfoColumns.IS_SYSTEM_APP)) > 0 ? true :false;
149        appItemInfo.isUninstallAble = resultSet.getLong(resultSet.getColumnIndex(GridLayoutInfoColumns.IS_UNINSTALLABLE)) > 0 ? true :false;
150        appItemInfo.appIconId = resultSet.getLong(resultSet.getColumnIndex(GridLayoutInfoColumns.APPICON_ID));
151        appItemInfo.appLabelId = resultSet.getLong(resultSet.getColumnIndex(GridLayoutInfoColumns.APPLABEL_ID));
152        appItemInfo.bundleName = resultSet.getString(resultSet.getColumnIndex(GridLayoutInfoColumns.BUNDLE_NAME));
153        appItemInfo.abilityName = resultSet.getString(resultSet.getColumnIndex(GridLayoutInfoColumns.ABILITY_NAME));
154        appItemInfo.moduleName = resultSet.getString(resultSet.getColumnIndex(GridLayoutInfoColumns.MODULE_NAME));
155        appItemInfo.keyName = resultSet.getString(resultSet.getColumnIndex(GridLayoutInfoColumns.KEY_NAME));
156        appItemInfo.installTime = resultSet.getString(resultSet.getColumnIndex(GridLayoutInfoColumns.INSTALL_TIME));
157        appItemInfo.typeId = resultSet.getLong(resultSet.getColumnIndex(GridLayoutInfoColumns.TYPE_ID));
158        appItemInfo.area = this.getArea(resultSet.getString(resultSet.getColumnIndex(GridLayoutInfoColumns.AREA)));
159        appItemInfo.page = resultSet.getLong(resultSet.getColumnIndex(GridLayoutInfoColumns.PAGE));
160        appItemInfo.column = resultSet.getLong(resultSet.getColumnIndex(GridLayoutInfoColumns.COLUMN));
161        appItemInfo.row = resultSet.getLong(resultSet.getColumnIndex(GridLayoutInfoColumns.ROW));
162        return appItemInfo;
163    }
164
165    private setCardId(cardId: number) {
166        this.cardId = cardId;
167        return this;
168    }
169
170    private setFolderId(folderId: string) {
171        this.folderId = folderId;
172        return this;
173    }
174
175    private setContainer(container: number) {
176        this.container = container;
177        return this;
178    }
179
180    private setFolderName(folderName: string) {
181        this.folderName = folderName;
182        return this;
183    }
184
185    private setBadgeNumber(badgeNumber: number) {
186        this.badgeNumber = badgeNumber;
187        return this;
188    }
189
190    private setTypeId(typeId: number) {
191        this.typeId = typeId;
192        return this;
193    }
194
195    private setArea(area: string) {
196        let areaArray:number[] = [];
197        let temp = area.split(",");
198        if (!CheckEmptyUtils.isEmptyArr(temp) && temp.length === 2) {
199            areaArray[0] = Number(temp[0]);
200            areaArray[1] = Number(temp[1]);
201        }
202        this.area = areaArray;
203        return this;
204    }
205
206    static getArea(area: string): number[] {
207        let areaArray:number[] = [];
208        let temp = area.split(",");
209        if (!CheckEmptyUtils.isEmptyArr(temp) && temp.length === 2) {
210            areaArray[0] = Number(temp[0]);
211            areaArray[1] = Number(temp[1]);
212        }
213        return areaArray;
214    }
215
216    private setPage(page: number) {
217        this.page = page;
218        return this;
219    }
220
221    private setColumn(column: number) {
222        this.column = column;
223        return this;
224    }
225
226    private setRow(row: number) {
227        this.row = row;
228        return this;
229    }
230
231    private setBundleName(bundleName: string) {
232        this.bundleName = bundleName;
233        return this;
234    }
235
236    private setAbilityName(abilityName: string) {
237        this.abilityName = abilityName;
238        return this;
239    }
240
241    private setModuleName(moduleName: string) {
242        this.moduleName = moduleName;
243        return this;
244    }
245
246    private setKeyName(keyName: string) {
247        this.keyName = keyName;
248        return this;
249    }
250
251    setLayoutInfo(appItemInfos : AppItemInfo[]) {
252        this.layoutInfo = appItemInfos;
253        return this;
254    }
255
256    private setExtend1(extend1: string) {
257        this.extend1 = extend1;
258        return this;
259    }
260
261    private setExtend2(extend2: string) {
262        this.extend2 = extend2;
263        return this;
264    }
265
266    private setExtend3(extend3: number) {
267        this.extend3 = extend3;
268        return this;
269    }
270
271    buildGridLayoutItem(): GridLayoutItemInfo {
272        return new GridLayoutItemInfo(this);
273    }
274}