nuxeo-development-framework 2.0.9 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/bundles/nuxeo-development-framework.umd.js +8683 -454
  2. package/bundles/nuxeo-development-framework.umd.js.map +1 -1
  3. package/esm2015/lib/components/activities-log/activities-log/activities-log.component.js +84 -0
  4. package/esm2015/lib/components/activities-log/activities-log/activities-log.service.js +35 -0
  5. package/esm2015/lib/components/activities-log/activities-log.module.js +30 -0
  6. package/esm2015/lib/components/attachment-item/attachment-item/attachment-item.component.js +54 -0
  7. package/esm2015/lib/components/attachment-item/attachment-item.module.js +44 -0
  8. package/esm2015/lib/components/attachment-modal/attachment-modal.module.js +40 -0
  9. package/esm2015/lib/components/attachment-modal/attachments/attachments.component.js +157 -0
  10. package/esm2015/lib/components/confirmation-dialog/confirmation-dialog/confirmation-dialog.component.js +30 -0
  11. package/esm2015/lib/components/confirmation-dialog/confirmation-dialog.module.js +30 -0
  12. package/esm2015/lib/components/display-suitable-icon/display-suitable-icon/display-suitable-icon.component.js +44 -0
  13. package/esm2015/lib/components/display-suitable-icon/display-suitable-icon/icon.service.js +140 -0
  14. package/esm2015/lib/components/display-suitable-icon/display-suitable-icon.module.js +24 -0
  15. package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.js +177 -0
  16. package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.js +43 -0
  17. package/esm2015/lib/components/dynamic-tabs/dynamic-tabs/dynamic-tabs.component.js +39 -0
  18. package/esm2015/lib/components/dynamic-tabs/dynamic-tabs.module.js +34 -0
  19. package/esm2015/lib/components/file-manger/components/add-to-collection/add-to-collection.component.js +132 -0
  20. package/esm2015/lib/components/file-manger/components/clipboard/clipboard.component.js +264 -0
  21. package/esm2015/lib/components/file-manger/components/copy/copy.component.js +119 -0
  22. package/esm2015/lib/components/file-manger/components/create-directory/create-directory.component.js +91 -0
  23. package/esm2015/lib/components/file-manger/components/create-modal/create-modal.component.js +455 -0
  24. package/esm2015/lib/components/file-manger/components/creation-type/creation-type.component.js +26 -0
  25. package/esm2015/lib/components/file-manger/components/delete/delete.component.js +77 -0
  26. package/esm2015/lib/components/file-manger/components/folder-modal/folder-modal.component.js +114 -0
  27. package/esm2015/lib/components/file-manger/components/loan-request/loan-request.component.js +80 -0
  28. package/esm2015/lib/components/file-manger/components/move/move.component.js +108 -0
  29. package/esm2015/lib/components/file-manger/components/publish-dialog/publish-dialog.component.js +111 -0
  30. package/esm2015/lib/components/file-manger/components/rename/rename.component.js +86 -0
  31. package/esm2015/lib/components/file-manger/components/scan-modal/scan-modal.component.js +314 -0
  32. package/esm2015/lib/components/file-manger/components/share-dialog/share-dialog.component.js +294 -0
  33. package/esm2015/lib/components/file-manger/components/sidepanel/sidepanel.component.js +257 -0
  34. package/esm2015/lib/components/file-manger/components/template-modal/template-modal.component.js +64 -0
  35. package/esm2015/lib/components/file-manger/components/transfer-doc/transfer-doc.component.js +71 -0
  36. package/esm2015/lib/components/file-manger/components/update-modal/update-modal.component.js +358 -0
  37. package/esm2015/lib/components/file-manger/file-manager.abstract.js +1031 -0
  38. package/esm2015/lib/components/file-manger/file-manger.module.js +295 -0
  39. package/esm2015/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.js +51 -0
  40. package/esm2015/lib/components/mutiple-dynamic-form-viewer/mutiple-dynamic-form-viewer.module.js +30 -0
  41. package/esm2015/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.js +177 -0
  42. package/esm2015/lib/components/permissions/permission.service.js +118 -0
  43. package/esm2015/lib/components/permissions/permissions/permissions.component.js +232 -0
  44. package/esm2015/lib/components/permissions/permissions-template/permissions-template.component.js +117 -0
  45. package/esm2015/lib/components/permissions/permissions.module.js +71 -0
  46. package/esm2015/lib/components/select-users-by-department/select-users-by-department.module.js +47 -0
  47. package/esm2015/lib/components/select-users-by-department/select-users-by-departments/department-management.service.js +27 -0
  48. package/esm2015/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.js +116 -0
  49. package/esm2015/lib/components/user/user/user.component.js +29 -0
  50. package/esm2015/lib/components/user/user.module.js +30 -0
  51. package/esm2015/lib/directive/directive.module.js +9 -4
  52. package/esm2015/lib/directive/drag-and-drop/drag-and-drop.directive.js +46 -0
  53. package/esm2015/lib/shared/libraryShared.module.js +1 -4
  54. package/esm2015/lib/shared-services/dialog-mangment.service.js +61 -0
  55. package/esm2015/lib/shared-services/dynamic-form.service.js +241 -0
  56. package/esm2015/lib/shared-services/file-manager.adapter.js +74 -0
  57. package/esm2015/lib/shared-services/file-manager.service.js +793 -0
  58. package/esm2015/lib/shared-services/global-pdftron.service.js +46 -0
  59. package/esm2015/lib/shared-services/mainfolder.service.js +160 -0
  60. package/esm2015/lib/shared-services/publishing-document.service.js +202 -0
  61. package/esm2015/lib/shared-services/recently-viewed.service.js +57 -0
  62. package/esm2015/lib/shared-services/shared-docs.service.js +135 -0
  63. package/esm2015/lib/shared-services/shared-services.module.js +20 -0
  64. package/esm2015/lib/shared-services/upload-file.service.js +29 -0
  65. package/esm2015/lib/shared-services/upload-managment.service.js +151 -0
  66. package/esm2015/lib/shared-services/user.service.js +54 -0
  67. package/esm2015/public-api.js +65 -1
  68. package/fesm2015/nuxeo-development-framework.js +7969 -154
  69. package/fesm2015/nuxeo-development-framework.js.map +1 -1
  70. package/lib/components/activities-log/activities-log/activities-log.component.d.ts +23 -0
  71. package/lib/components/activities-log/activities-log/activities-log.service.d.ts +9 -0
  72. package/lib/components/activities-log/activities-log.module.d.ts +10 -0
  73. package/lib/components/attachment-item/attachment-item/attachment-item.component.d.ts +21 -0
  74. package/lib/components/attachment-item/attachment-item.module.d.ts +13 -0
  75. package/lib/components/attachment-modal/attachment-modal.module.d.ts +12 -0
  76. package/lib/components/attachment-modal/attachments/attachments.component.d.ts +50 -0
  77. package/lib/components/confirmation-dialog/confirmation-dialog/confirmation-dialog.component.d.ts +12 -0
  78. package/lib/components/confirmation-dialog/confirmation-dialog.module.d.ts +10 -0
  79. package/lib/components/display-suitable-icon/display-suitable-icon/display-suitable-icon.component.d.ts +17 -0
  80. package/lib/components/display-suitable-icon/display-suitable-icon/icon.service.d.ts +8 -0
  81. package/lib/components/display-suitable-icon/display-suitable-icon.module.d.ts +8 -0
  82. package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.d.ts +137 -0
  83. package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.d.ts +12 -0
  84. package/lib/components/dynamic-tabs/dynamic-tabs/dynamic-tabs.component.d.ts +13 -0
  85. package/lib/components/dynamic-tabs/dynamic-tabs.module.d.ts +11 -0
  86. package/lib/components/file-manger/components/add-to-collection/add-to-collection.component.d.ts +31 -0
  87. package/lib/components/file-manger/components/clipboard/clipboard.component.d.ts +41 -0
  88. package/lib/components/file-manger/components/copy/copy.component.d.ts +32 -0
  89. package/lib/components/file-manger/components/create-directory/create-directory.component.d.ts +24 -0
  90. package/lib/components/file-manger/components/create-modal/create-modal.component.d.ts +108 -0
  91. package/lib/components/file-manger/components/creation-type/creation-type.component.d.ts +11 -0
  92. package/lib/components/file-manger/components/delete/delete.component.d.ts +30 -0
  93. package/lib/components/file-manger/components/folder-modal/folder-modal.component.d.ts +56 -0
  94. package/lib/components/file-manger/components/loan-request/loan-request.component.d.ts +23 -0
  95. package/lib/components/file-manger/components/move/move.component.d.ts +32 -0
  96. package/lib/components/file-manger/components/publish-dialog/publish-dialog.component.d.ts +32 -0
  97. package/lib/components/file-manger/components/rename/rename.component.d.ts +25 -0
  98. package/lib/components/file-manger/components/scan-modal/scan-modal.component.d.ts +95 -0
  99. package/lib/components/file-manger/components/share-dialog/share-dialog.component.d.ts +58 -0
  100. package/lib/components/file-manger/components/sidepanel/sidepanel.component.d.ts +62 -0
  101. package/lib/components/file-manger/components/template-modal/template-modal.component.d.ts +34 -0
  102. package/lib/components/file-manger/components/transfer-doc/transfer-doc.component.d.ts +24 -0
  103. package/lib/components/file-manger/components/update-modal/update-modal.component.d.ts +194 -0
  104. package/lib/components/file-manger/file-manager.abstract.d.ts +173 -0
  105. package/lib/components/file-manger/file-manger.module.d.ts +59 -0
  106. package/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.d.ts +17 -0
  107. package/lib/components/mutiple-dynamic-form-viewer/mutiple-dynamic-form-viewer.module.d.ts +10 -0
  108. package/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.d.ts +44 -0
  109. package/lib/components/permissions/permission.service.d.ts +21 -0
  110. package/lib/components/permissions/permissions/permissions.component.d.ts +48 -0
  111. package/lib/components/permissions/permissions-template/permissions-template.component.d.ts +22 -0
  112. package/lib/components/permissions/permissions.module.d.ts +21 -0
  113. package/lib/components/select-users-by-department/select-users-by-department.module.d.ts +13 -0
  114. package/lib/components/select-users-by-department/select-users-by-departments/department-management.service.d.ts +10 -0
  115. package/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.d.ts +33 -0
  116. package/lib/components/user/user/user.component.d.ts +12 -0
  117. package/lib/components/user/user.module.d.ts +10 -0
  118. package/lib/directive/directive.module.d.ts +3 -2
  119. package/lib/directive/drag-and-drop/drag-and-drop.directive.d.ts +11 -0
  120. package/lib/shared/libraryShared.module.d.ts +1 -1
  121. package/lib/shared-services/dialog-mangment.service.d.ts +15 -0
  122. package/lib/shared-services/dynamic-form.service.d.ts +24 -0
  123. package/lib/shared-services/file-manager.adapter.d.ts +48 -0
  124. package/lib/shared-services/file-manager.service.d.ts +94 -0
  125. package/lib/shared-services/global-pdftron.service.d.ts +10 -0
  126. package/lib/shared-services/mainfolder.service.d.ts +32 -0
  127. package/lib/shared-services/publishing-document.service.d.ts +25 -0
  128. package/lib/shared-services/recently-viewed.service.d.ts +17 -0
  129. package/lib/shared-services/shared-docs.service.d.ts +21 -0
  130. package/lib/shared-services/shared-services.module.d.ts +7 -0
  131. package/lib/shared-services/upload-file.service.d.ts +10 -0
  132. package/lib/shared-services/upload-managment.service.d.ts +72 -0
  133. package/lib/shared-services/user.service.d.ts +12 -0
  134. package/package.json +7 -6
  135. package/public-api.d.ts +62 -0
@@ -0,0 +1,241 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { from } from 'rxjs';
3
+ import { catchError, map } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../Core/services/nuxeo/nuxeo.service";
6
+ import * as i2 from "../configuration/app-config.service";
7
+ export class DynamicFormService {
8
+ constructor(nuxeoService, environment, configService) {
9
+ this.nuxeoService = nuxeoService;
10
+ this.environment = environment;
11
+ this.configService = configService;
12
+ this.myPrefix = {};
13
+ this.excludedSchemas = ["generaldocument", "file_schema", "dublincore", "facetedTag", "common", "uid", "file", "files", "relatedtext"];
14
+ this.controlsTypes = ['string', 'boolean', 'string[]', 'long', 'date', 'double'];
15
+ this.dynamicFieldsOperations = this.configService.myConfiguration.dynamicForms.operations;
16
+ }
17
+ getSchemaComponents(type) {
18
+ return from(this.nuxeoService.nuxeoClient.request(`config/types/${type}`)
19
+ .get({
20
+ headers: {
21
+ 'fetch.schema': 'fields'
22
+ }
23
+ })).pipe(map((data) => {
24
+ let fields = {};
25
+ let filteredSchemas = [];
26
+ if (data.schemas) {
27
+ // exclude some schemas from the returned schemas
28
+ data.schemas.filter(item => {
29
+ if (this.excludedSchemas.indexOf(item.name) === -1) {
30
+ filteredSchemas.push(item);
31
+ }
32
+ });
33
+ filteredSchemas.map(item => {
34
+ if (item.fields) {
35
+ Object.keys(item.fields).map(key => {
36
+ //control type is exist in my provided controls types
37
+ if (this.controlsTypes.indexOf(item.fields[key]['type']) > -1) {
38
+ fields[key] = Object.assign({}, item.fields[key]);
39
+ this.myPrefix[key] = item.prefix ? item.prefix : '';
40
+ }
41
+ });
42
+ }
43
+ });
44
+ }
45
+ return this.adapt(fields);
46
+ }));
47
+ }
48
+ getSchemaComponentsFromFacets(schemaId) {
49
+ return from(this.nuxeoService.nuxeoClient.request(`config/facets/${schemaId}`)
50
+ .get({
51
+ headers: {
52
+ 'fetch.schema': 'fields'
53
+ }
54
+ })).pipe(map((data) => {
55
+ let fields = {};
56
+ let filteredSchemas = [];
57
+ if (data.schemas) {
58
+ // exclude some schemas from the returned schemas
59
+ data.schemas.filter(item => {
60
+ if (this.excludedSchemas.indexOf(item.name) === -1) {
61
+ filteredSchemas.push(item);
62
+ }
63
+ });
64
+ filteredSchemas.map(item => {
65
+ if (item.fields) {
66
+ Object.keys(item.fields).map(key => {
67
+ //control type is exist in my provided controls types
68
+ if (this.controlsTypes.indexOf(item.fields[key]['type']) > -1) {
69
+ fields[key] = Object.assign({}, item.fields[key]);
70
+ this.myPrefix[key] = item.prefix ? item.prefix : '';
71
+ }
72
+ });
73
+ }
74
+ });
75
+ }
76
+ return this.adapt(fields);
77
+ }));
78
+ }
79
+ getDynamicForm(type) {
80
+ return from(this.nuxeoService.nuxeoClient
81
+ .operation(this.dynamicFieldsOperations.getFormJson, {
82
+ url: `${this.environment.nuxeo}${this.environment.customAutomation}`,
83
+ })
84
+ .context({
85
+ "schema": type
86
+ })
87
+ .execute({
88
+ headers: {
89
+ properties: '*',
90
+ },
91
+ })).pipe(map((res) => {
92
+ if (res.entries.length > 0) {
93
+ let myData = JSON.parse(res['entries'][0]['properties']['note:note']);
94
+ this.myPrefix = myData.prefix;
95
+ return myData;
96
+ }
97
+ else {
98
+ return '';
99
+ }
100
+ }), catchError((err) => {
101
+ //console.log(err);
102
+ throw err;
103
+ }));
104
+ }
105
+ createFormJson(type, jsonObject) {
106
+ jsonObject['prefix'] = this.myPrefix;
107
+ return from(this.nuxeoService.nuxeoClient
108
+ .operation('AC_UA_DMS_DynamicForm_Create', {
109
+ url: `${this.environment.nuxeo}${this.environment.customAutomation}`,
110
+ })
111
+ .context({
112
+ "schema": type,
113
+ "json": jsonObject
114
+ })
115
+ .execute()).pipe(catchError((err) => {
116
+ //console.log(err);
117
+ throw err;
118
+ }));
119
+ }
120
+ adapt(fields) {
121
+ const builderComponents = {};
122
+ fields = Object.keys(fields).map(fieldKey => {
123
+ const adaptedField = {
124
+ title: fieldKey,
125
+ icon: 'terminal',
126
+ prefix: fields[fieldKey]['prefix'],
127
+ schema: {
128
+ // 'validate.required': constraints.filter(item => item.name === 'NotNullConstraint').length > 0,
129
+ label: fieldKey,
130
+ type: '',
131
+ fixedKey: fieldKey,
132
+ input: true
133
+ }
134
+ };
135
+ switch (fields[fieldKey].type) {
136
+ case 'string':
137
+ adaptedField.schema.type = 'textfield';
138
+ const field = fields[fieldKey];
139
+ const constraints = field.constraints ? field.constraints : [];
140
+ const vocabularySearch = constraints.filter(item => item.name === 'directoryResolver');
141
+ const vocabulary = vocabularySearch.length ? vocabularySearch[0].parameters.directory : null;
142
+ const userSelector = constraints.filter(item => item.name === 'userManagerResolver');
143
+ if (vocabulary) {
144
+ adaptedField.schema.type = 'vocabulary';
145
+ adaptedField.schema['customOptions.vocId'] = vocabulary;
146
+ }
147
+ else if (userSelector.length > 0) {
148
+ adaptedField.schema.type = 'userSelector';
149
+ // adaptedField.schema['customOptions.multipleMode'] = true;
150
+ }
151
+ break;
152
+ case 'boolean':
153
+ adaptedField.schema.type = 'toggle';
154
+ break;
155
+ case 'string[]':
156
+ adaptedField.schema.type = 'textfield';
157
+ // tslint:disable-next-line:no-string-literal
158
+ // adaptedField.schema['multiple'] = true;
159
+ const field1 = fields[fieldKey];
160
+ const itemConstraints = field1.itemConstraints ? field1.itemConstraints : [];
161
+ const multipleUserSelector = itemConstraints.filter(item => item.name === 'userManagerResolver');
162
+ if (multipleUserSelector.length > 0) {
163
+ adaptedField.schema.type = 'userSelector';
164
+ adaptedField.schema['customOptions.multipleMode'] = true;
165
+ }
166
+ break;
167
+ case 'long':
168
+ adaptedField.schema.type = 'number';
169
+ break;
170
+ case 'double':
171
+ adaptedField.schema.type = 'number';
172
+ break;
173
+ case 'date':
174
+ adaptedField.schema.type = 'customdate';
175
+ }
176
+ return adaptedField;
177
+ });
178
+ fields.forEach(field => {
179
+ builderComponents[field.schema.fixedKey] = field;
180
+ });
181
+ return builderComponents;
182
+ }
183
+ constructDynamicFormPayload(data, dynamicForm) {
184
+ let updatedDynamicValues = {};
185
+ Object.keys(data).map(key => {
186
+ let updatedKey = key.replace(':', '');
187
+ let prefix = dynamicForm.prefix[updatedKey];
188
+ if (prefix) {
189
+ // check if component is user selector to map its data from object to username or id only
190
+ if (data[key] && data[key]['userSelector'] && data[key]['userSelector'] === true) {
191
+ updatedDynamicValues[prefix + ':' + updatedKey] = this.getUserSelectorValue(data[key]['value']);
192
+ }
193
+ else {
194
+ updatedDynamicValues[prefix + ':' + updatedKey] = data[key];
195
+ }
196
+ }
197
+ else {
198
+ if (data[key]['userSelector'] && data[key]['userSelector'] === true) {
199
+ updatedDynamicValues[updatedKey] = this.getUserSelectorValue(data[key]['value']);
200
+ ;
201
+ }
202
+ else {
203
+ updatedDynamicValues[updatedKey] = data[key];
204
+ }
205
+ }
206
+ });
207
+ this.removeNullValues(updatedDynamicValues);
208
+ return updatedDynamicValues;
209
+ }
210
+ getUserSelectorValue(value) {
211
+ if (!Array.isArray(value)) {
212
+ return value.id ? value.id : value.properties.username;
213
+ }
214
+ else {
215
+ let usersNames = [];
216
+ value.map(item => {
217
+ usersNames.push((item.id ? item.id : item.properties.username));
218
+ });
219
+ return usersNames;
220
+ }
221
+ }
222
+ removeNullValues(data) {
223
+ Object.keys(data).map(key => {
224
+ if (data[key] === null) {
225
+ delete data[key];
226
+ }
227
+ });
228
+ }
229
+ }
230
+ DynamicFormService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: DynamicFormService, deps: [{ token: i1.NuxeoService }, { token: 'environment' }, { token: i2.AppConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
231
+ DynamicFormService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: DynamicFormService, providedIn: 'root' });
232
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: DynamicFormService, decorators: [{
233
+ type: Injectable,
234
+ args: [{
235
+ providedIn: 'root'
236
+ }]
237
+ }], ctorParameters: function () { return [{ type: i1.NuxeoService }, { type: undefined, decorators: [{
238
+ type: Inject,
239
+ args: ['environment']
240
+ }] }, { type: i2.AppConfigService }]; } });
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9zaGFyZWQtc2VydmljZXMvZHluYW1pYy1mb3JtLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLElBQUksRUFBa0IsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFHLFVBQVUsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQVFqRCxNQUFNLE9BQU8sa0JBQWtCO0lBSzdCLFlBQW9CLFlBQTJCLEVBQ2QsV0FBVyxFQUNsQyxhQUFnQztRQUZ0QixpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUNkLGdCQUFXLEdBQVgsV0FBVyxDQUFBO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFtQjtRQU4xQyxhQUFRLEdBQUUsRUFBRSxDQUFDO1FBRWIsb0JBQWUsR0FBRyxDQUFDLGlCQUFpQixFQUFHLGFBQWEsRUFBRyxZQUFZLEVBQUcsWUFBWSxFQUFFLFFBQVEsRUFBQyxLQUFLLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxhQUFhLENBQUMsQ0FBQztRQUNsSSxrQkFBYSxHQUFHLENBQUMsUUFBUSxFQUFHLFNBQVMsRUFBRyxVQUFVLEVBQUcsTUFBTSxFQUFHLE1BQU0sRUFBRyxRQUFRLENBQUMsQ0FBQztRQUs5RSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztJQUUxRixDQUFDO0lBRUgsbUJBQW1CLENBQUMsSUFBSTtRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsZ0JBQWdC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QUMsR0FBRyxDQUFDLENBQUM7YUFDbEI7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7OytHQS9PVSxrQkFBa0IsOENBTW5CLGFBQWE7bUhBTlosa0JBQWtCLGNBSGpCLE1BQU07MkZBR1Asa0JBQWtCO2tCQUo5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBUUksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGtleXMgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyAgY2F0Y2hFcnJvciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE51eGVvU2VydmljZSB9IGZyb20gJy4uL0NvcmUvc2VydmljZXMvbnV4ZW8vbnV4ZW8uc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9jb25maWd1cmF0aW9uL2FwcC1jb25maWcuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgRHluYW1pY0Zvcm1TZXJ2aWNlIHtcclxuICBteVByZWZpeCA9e307XHJcbiAgZHluYW1pY0ZpZWxkc09wZXJhdGlvbnM7XHJcbiAgZXhjbHVkZWRTY2hlbWFzID0gW1wiZ2VuZXJhbGRvY3VtZW50XCIgLCBcImZpbGVfc2NoZW1hXCIgLCBcImR1YmxpbmNvcmVcIiAsIFwiZmFjZXRlZFRhZ1wiICxcImNvbW1vblwiLFwidWlkXCIsXCJmaWxlXCIsXCJmaWxlc1wiLFwicmVsYXRlZHRleHRcIl07XHJcbiBjb250cm9sc1R5cGVzID0gWydzdHJpbmcnICwgJ2Jvb2xlYW4nICwgJ3N0cmluZ1tdJyAsICdsb25nJyAsICdkYXRlJyAsICdkb3VibGUnXTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG51eGVvU2VydmljZSA6IE51eGVvU2VydmljZSAsXHJcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByaXZhdGUgZW52aXJvbm1lbnQsXHJcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2UgOiBBcHBDb25maWdTZXJ2aWNlXHJcbiAgICApIHsgXHJcbiAgICB0aGlzLmR5bmFtaWNGaWVsZHNPcGVyYXRpb25zID0gdGhpcy5jb25maWdTZXJ2aWNlLm15Q29uZmlndXJhdGlvbi5keW5hbWljRm9ybXMub3BlcmF0aW9ucztcclxuXHJcbiAgICB9XHJcblxyXG4gIGdldFNjaGVtYUNvbXBvbmVudHModHlwZSl7XHJcbiAgICByZXR1cm4gZnJvbSh0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudC5yZXF1ZXN0KGBjb25maWcvdHlwZXMvJHt0eXBlfWApXHJcbiAgICAuZ2V0KHtcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAnZmV0Y2guc2NoZW1hJzogJ2ZpZWxkcydcclxuICAgIH1cclxuICAgIH0pKS5waXBlKG1hcCgoZGF0YSA6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBmaWVsZHMgPSB7fTtcclxuICAgICAgICBsZXQgZmlsdGVyZWRTY2hlbWFzID0gW107XHJcbiAgICAgICAgaWYoZGF0YS5zY2hlbWFzKXtcclxuICAgICAgICAgIC8vIGV4Y2x1ZGUgc29tZSBzY2hlbWFzIGZyb20gdGhlIHJldHVybmVkIHNjaGVtYXNcclxuICAgICAgICAgICBkYXRhLnNjaGVtYXMuZmlsdGVyKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZih0aGlzLmV4Y2x1ZGVkU2NoZW1hcy5pbmRleE9mKGl0ZW0ubmFtZSkgPT09IC0xKXtcclxuICAgICAgICAgICAgICBmaWx0ZXJlZFNjaGVtYXMucHVzaChpdGVtKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgZmlsdGVyZWRTY2hlbWFzLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYoaXRlbS5maWVsZHMpe1xyXG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKGl0ZW0uZmllbGRzKS5tYXAoa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgIC8vY29udHJvbCB0eXBlIGlzIGV4aXN0IGluIG15IHByb3ZpZGVkIGNvbnRyb2xzIHR5cGVzXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLmNvbnRyb2xzVHlwZXMuaW5kZXhPZihpdGVtLmZpZWxkc1trZXldWyd0eXBlJ10pID4gLTEpeyBcclxuICAgICAgICAgICAgICAgICAgZmllbGRzW2tleV0gPSB7Li4uaXRlbS5maWVsZHNba2V5XSB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubXlQcmVmaXhba2V5XSA9IGl0ZW0ucHJlZml4ID8gaXRlbS5wcmVmaXggOiAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRhcHQoZmllbGRzKTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGdldFNjaGVtYUNvbXBvbmVudHNGcm9tRmFjZXRzKHNjaGVtYUlkKXtcclxuICAgIHJldHVybiBmcm9tKHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50LnJlcXVlc3QoYGNvbmZpZy9mYWNldHMvJHtzY2hlbWFJZH1gKVxyXG4gICAgLmdldCh7XHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgJ2ZldGNoLnNjaGVtYSc6ICdmaWVsZHMnXHJcbiAgICB9XHJcbiAgICB9KSkucGlwZShtYXAoKGRhdGEgOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgZmllbGRzID0ge307XHJcbiAgICAgICAgbGV0IGZpbHRlcmVkU2NoZW1hcyA9IFtdO1xyXG4gICAgICAgIGlmKGRhdGEuc2NoZW1hcyl7XHJcbiAgICAgICAgICAvLyBleGNsdWRlIHNvbWUgc2NoZW1hcyBmcm9tIHRoZSByZXR1cm5lZCBzY2hlbWFzXHJcbiAgICAgICAgICAgZGF0YS5zY2hlbWFzLmZpbHRlcihpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYodGhpcy5leGNsdWRlZFNjaGVtYXMuaW5kZXhPZihpdGVtLm5hbWUpID09PSAtMSl7XHJcbiAgICAgICAgICAgICAgZmlsdGVyZWRTY2hlbWFzLnB1c2goaXRlbSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGZpbHRlcmVkU2NoZW1hcy5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGlmKGl0ZW0uZmllbGRzKXtcclxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhpdGVtLmZpZWxkcykubWFwKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnRyb2wgdHlwZSBpcyBleGlzdCBpbiBteSBwcm92aWRlZCBjb250cm9scyB0eXBlc1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5jb250cm9sc1R5cGVzLmluZGV4T2YoaXRlbS5maWVsZHNba2V5XVsndHlwZSddKSA+IC0xKXsgXHJcbiAgICAgICAgICAgICAgICAgIGZpZWxkc1trZXldID0gey4uLml0ZW0uZmllbGRzW2tleV0gfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLm15UHJlZml4W2tleV0gPSBpdGVtLnByZWZpeCA/IGl0ZW0ucHJlZml4IDogJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmFkYXB0KGZpZWxkcyk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBnZXREeW5hbWljRm9ybSh0eXBlKSA6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgdGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnRcclxuICAgICAgICAub3BlcmF0aW9uKHRoaXMuZHluYW1pY0ZpZWxkc09wZXJhdGlvbnMuZ2V0Rm9ybUpzb24sIHtcclxuICAgICAgICAgIHVybDogYCR7dGhpcy5lbnZpcm9ubWVudC5udXhlb30ke3RoaXMuZW52aXJvbm1lbnQuY3VzdG9tQXV0b21hdGlvbn1gLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNvbnRleHQoe1xyXG4gICAgICAgICAgXCJzY2hlbWFcIjogdHlwZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmV4ZWN1dGUoe1xyXG4gICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiAnKicsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIG1hcCgocmVzIDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYocmVzLmVudHJpZXMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICBsZXQgbXlEYXRhID0gIEpTT04ucGFyc2UocmVzWydlbnRyaWVzJ11bMF1bJ3Byb3BlcnRpZXMnXVsnbm90ZTpub3RlJ10pO1xyXG4gICAgICAgICAgdGhpcy5teVByZWZpeCA9IG15RGF0YS5wcmVmaXg7XHJcbiAgICAgICAgICByZXR1cm4gbXlEYXRhO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgcmV0dXJuICcnXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRocm93IGVycjtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gIH1cclxuXHJcbiAgY3JlYXRlRm9ybUpzb24odHlwZSAsIGpzb25PYmplY3Qpe1xyXG4gICAganNvbk9iamVjdFsncHJlZml4J109dGhpcy5teVByZWZpeDtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICB0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudFxyXG4gICAgICAgIC5vcGVyYXRpb24oJ0FDX1VBX0RNU19EeW5hbWljRm9ybV9DcmVhdGUnLCB7XHJcbiAgICAgICAgICB1cmw6IGAke3RoaXMuZW52aXJvbm1lbnQubnV4ZW99JHt0aGlzLmVudmlyb25tZW50LmN1c3RvbUF1dG9tYXRpb259YCxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5jb250ZXh0KHtcclxuICAgICAgICAgIFwic2NoZW1hXCI6dHlwZSxcclxuICAgICAgICAgIFwianNvblwiOmpzb25PYmplY3RcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5leGVjdXRlKClcclxuICAgICkucGlwZShcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRocm93IGVycjtcclxuICAgICAgfSkpXHJcbiAgXHJcbn1cclxuIFxyXG4gIGFkYXB0KGZpZWxkcyk6IGFueSB7XHJcbiAgICBjb25zdCBidWlsZGVyQ29tcG9uZW50cyA9IHt9O1xyXG4gICAgZmllbGRzID0gT2JqZWN0LmtleXMoZmllbGRzKS5tYXAoZmllbGRLZXkgPT4ge1xyXG5cclxuICAgICAgY29uc3QgYWRhcHRlZEZpZWxkID0ge1xyXG4gICAgICAgIHRpdGxlOiBmaWVsZEtleSxcclxuICAgICAgICBpY29uOiAndGVybWluYWwnLFxyXG4gICAgICAgIHByZWZpeDogZmllbGRzW2ZpZWxkS2V5XVsncHJlZml4J10sXHJcbiAgICAgICAgc2NoZW1hOiB7XHJcbiAgICAgICAgICAvLyAndmFsaWRhdGUucmVxdWlyZWQnOiBjb25zdHJhaW50cy5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hbWUgPT09ICdOb3ROdWxsQ29uc3RyYWludCcpLmxlbmd0aCA+IDAsXHJcbiAgICAgICAgICBsYWJlbDogZmllbGRLZXksXHJcbiAgICAgICAgICB0eXBlOiAnJyxcclxuICAgICAgICAgIGZpeGVkS2V5OiBmaWVsZEtleSxcclxuICAgICAgICAgIGlucHV0OiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgc3dpdGNoIChmaWVsZHNbZmllbGRLZXldLnR5cGUpIHtcclxuICAgICAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICAgICAgYWRhcHRlZEZpZWxkLnNjaGVtYS50eXBlID0gJ3RleHRmaWVsZCc7XHJcbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkc1tmaWVsZEtleV07XHJcbiAgICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IGZpZWxkLmNvbnN0cmFpbnRzID8gZmllbGQuY29uc3RyYWludHMgOiBbXTtcclxuICAgICAgICAgIGNvbnN0IHZvY2FidWxhcnlTZWFyY2ggPSBjb25zdHJhaW50cy5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hbWUgPT09ICdkaXJlY3RvcnlSZXNvbHZlcicpO1xyXG4gICAgICAgICAgY29uc3Qgdm9jYWJ1bGFyeSA9IHZvY2FidWxhcnlTZWFyY2gubGVuZ3RoID8gdm9jYWJ1bGFyeVNlYXJjaFswXS5wYXJhbWV0ZXJzLmRpcmVjdG9yeSA6IG51bGw7XHJcbiAgICAgICAgICBjb25zdCB1c2VyU2VsZWN0b3IgPSBjb25zdHJhaW50cy5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hbWUgPT09ICd1c2VyTWFuYWdlclJlc29sdmVyJyk7XHJcbiAgICAgICAgICBpZiAodm9jYWJ1bGFyeSkge1xyXG4gICAgICAgICAgICBhZGFwdGVkRmllbGQuc2NoZW1hLnR5cGUgPSAndm9jYWJ1bGFyeSc7XHJcbiAgICAgICAgICAgIGFkYXB0ZWRGaWVsZC5zY2hlbWFbJ2N1c3RvbU9wdGlvbnMudm9jSWQnXSA9IHZvY2FidWxhcnk7XHJcbiAgICAgICAgICB9ZWxzZSBpZih1c2VyU2VsZWN0b3IubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIGFkYXB0ZWRGaWVsZC5zY2hlbWEudHlwZSA9ICd1c2VyU2VsZWN0b3InO1xyXG4gICAgICAgICAgICAvLyBhZGFwdGVkRmllbGQuc2NoZW1hWydjdXN0b21PcHRpb25zLm11bHRpcGxlTW9kZSddID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxyXG4gICAgICAgICAgYWRhcHRlZEZpZWxkLnNjaGVtYS50eXBlID0gJ3RvZ2dsZSc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdzdHJpbmdbXSc6XHJcbiAgICAgICAgICBhZGFwdGVkRmllbGQuc2NoZW1hLnR5cGUgPSAndGV4dGZpZWxkJztcclxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1zdHJpbmctbGl0ZXJhbFxyXG4gICAgICAgICAgLy8gYWRhcHRlZEZpZWxkLnNjaGVtYVsnbXVsdGlwbGUnXSA9IHRydWU7XHJcbiAgICAgICAgICBjb25zdCBmaWVsZDEgPSBmaWVsZHNbZmllbGRLZXldO1xyXG4gICAgICAgICAgY29uc3QgaXRlbUNvbnN0cmFpbnRzID0gZmllbGQxLml0ZW1Db25zdHJhaW50cyA/IGZpZWxkMS5pdGVtQ29uc3RyYWludHMgOiBbXTtcclxuICAgICAgICAgIGNvbnN0IG11bHRpcGxlVXNlclNlbGVjdG9yID0gaXRlbUNvbnN0cmFpbnRzLmZpbHRlcihpdGVtID0+IGl0ZW0ubmFtZSA9PT0gJ3VzZXJNYW5hZ2VyUmVzb2x2ZXInKTtcclxuICAgICAgICAgIGlmKG11bHRpcGxlVXNlclNlbGVjdG9yLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICBhZGFwdGVkRmllbGQuc2NoZW1hLnR5cGUgPSAndXNlclNlbGVjdG9yJztcclxuICAgICAgICAgICAgYWRhcHRlZEZpZWxkLnNjaGVtYVsnY3VzdG9tT3B0aW9ucy5tdWx0aXBsZU1vZGUnXSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdsb25nJzpcclxuICAgICAgICAgIGFkYXB0ZWRGaWVsZC5zY2hlbWEudHlwZSA9ICdudW1iZXInO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnZG91YmxlJzpcclxuICAgICAgICAgICAgYWRhcHRlZEZpZWxkLnNjaGVtYS50eXBlID0gJ251bWJlcic7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgICAgYWRhcHRlZEZpZWxkLnNjaGVtYS50eXBlID0gJ2N1c3RvbWRhdGUnO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhZGFwdGVkRmllbGQ7XHJcbiAgICB9KTtcclxuICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgYnVpbGRlckNvbXBvbmVudHNbZmllbGQuc2NoZW1hLmZpeGVkS2V5XSA9IGZpZWxkO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYnVpbGRlckNvbXBvbmVudHM7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3REeW5hbWljRm9ybVBheWxvYWQoZGF0YSAsIGR5bmFtaWNGb3JtKXtcclxuICAgIGxldCB1cGRhdGVkRHluYW1pY1ZhbHVlcyA9IHt9XHJcbiAgICBPYmplY3Qua2V5cyhkYXRhKS5tYXAoa2V5ID0+IHtcclxuICAgICAgbGV0IHVwZGF0ZWRLZXkgPSBrZXkucmVwbGFjZSgnOicsJycpO1xyXG4gICAgICBsZXQgcHJlZml4ID0gZHluYW1pY0Zvcm0ucHJlZml4W3VwZGF0ZWRLZXldO1xyXG4gICAgICBpZiAocHJlZml4KSB7XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgY29tcG9uZW50IGlzIHVzZXIgc2VsZWN0b3IgdG8gbWFwIGl0cyBkYXRhIGZyb20gb2JqZWN0IHRvIHVzZXJuYW1lIG9yIGlkIG9ubHkgXHJcbiAgICAgICAgaWYoZGF0YVtrZXldICYmIGRhdGFba2V5XVsndXNlclNlbGVjdG9yJ10gJiYgZGF0YVtrZXldWyd1c2VyU2VsZWN0b3InXSA9PT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgdXBkYXRlZER5bmFtaWNWYWx1ZXNbcHJlZml4ICsgJzonICsgdXBkYXRlZEtleV0gPSB0aGlzLmdldFVzZXJTZWxlY3RvclZhbHVlKGRhdGFba2V5XVsndmFsdWUnXSk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgdXBkYXRlZER5bmFtaWNWYWx1ZXNbcHJlZml4ICsgJzonICsgdXBkYXRlZEtleV0gPSBkYXRhW2tleV1cclxuICAgICAgICB9XHJcbiAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZihkYXRhW2tleV1bJ3VzZXJTZWxlY3RvciddICYmIGRhdGFba2V5XVsndXNlclNlbGVjdG9yJ10gPT09IHRydWUpe1xyXG4gICAgICAgICAgIHVwZGF0ZWREeW5hbWljVmFsdWVzW3VwZGF0ZWRLZXldID0gdGhpcy5nZXRVc2VyU2VsZWN0b3JWYWx1ZShkYXRhW2tleV1bJ3ZhbHVlJ10pOztcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICB1cGRhdGVkRHluYW1pY1ZhbHVlc1t1cGRhdGVkS2V5XSA9IGRhdGFba2V5XVxyXG4gICAgICAgIH1cclxuICAgICB9XHJcbiAgICB9KSAgXHJcbiAgICB0aGlzLnJlbW92ZU51bGxWYWx1ZXModXBkYXRlZER5bmFtaWNWYWx1ZXMpO1xyXG4gICAgcmV0dXJuIHVwZGF0ZWREeW5hbWljVmFsdWVzO1xyXG4gIH1cclxuICBcclxuICBnZXRVc2VyU2VsZWN0b3JWYWx1ZSh2YWx1ZSl7XHJcbiAgICBpZighQXJyYXkuaXNBcnJheSh2YWx1ZSkpe1xyXG4gICAgICByZXR1cm4gdmFsdWUuaWQgPyB2YWx1ZS5pZCA6IHZhbHVlLnByb3BlcnRpZXMudXNlcm5hbWU7XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIGxldCB1c2Vyc05hbWVzID0gW107XHJcbiAgICAgIHZhbHVlLm1hcChpdGVtID0+IHtcclxuICAgICAgICB1c2Vyc05hbWVzLnB1c2goKGl0ZW0uaWQgPyBpdGVtLmlkIDogaXRlbS5wcm9wZXJ0aWVzLnVzZXJuYW1lKSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIHJldHVybiB1c2Vyc05hbWVzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTnVsbFZhbHVlcyhkYXRhKXtcclxuICAgIE9iamVjdC5rZXlzKGRhdGEpLm1hcChrZXkgPT4ge1xyXG4gICAgICBpZihkYXRhW2tleV0gPT09IG51bGwpe1xyXG4gICAgICAgIGRlbGV0ZSBkYXRhW2tleV07XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,74 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ import * as i2 from "../components/display-suitable-icon/display-suitable-icon/icon.service";
5
+ export class FileManagerAdapter {
6
+ constructor(datePipe, iconService) {
7
+ this.datePipe = datePipe;
8
+ this.iconService = iconService;
9
+ }
10
+ adapt(item) {
11
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
12
+ return {
13
+ id: item === null || item === void 0 ? void 0 : item.uid,
14
+ name: item === null || item === void 0 ? void 0 : item.title,
15
+ isFavorite: (_b = (_a = item === null || item === void 0 ? void 0 : item.contextParameters) === null || _a === void 0 ? void 0 : _a.favorites) === null || _b === void 0 ? void 0 : _b.isFavorite,
16
+ extension: (item === null || item === void 0 ? void 0 : item.properties) && ((_c = item === null || item === void 0 ? void 0 : item.properties) === null || _c === void 0 ? void 0 : _c['file:content']) ? (_d = item === null || item === void 0 ? void 0 : item.properties) === null || _d === void 0 ? void 0 : _d['file:content']['mime-type'] : '',
17
+ isDirectory: ((_e = item === null || item === void 0 ? void 0 : item.facets) === null || _e === void 0 ? void 0 : _e.indexOf('Folderish')) > -1 ? true : false,
18
+ size: item && (item === null || item === void 0 ? void 0 : item.properties) ? (_f = item === null || item === void 0 ? void 0 : item.properties['file:content']) === null || _f === void 0 ? void 0 : _f.length : '',
19
+ creator: item && (item === null || item === void 0 ? void 0 : item.properties) && ((_h = (_g = item === null || item === void 0 ? void 0 : item.properties['creator']) === null || _g === void 0 ? void 0 : _g.properties) === null || _h === void 0 ? void 0 : _h.firstName) !== undefined && ((_k = (_j = item === null || item === void 0 ? void 0 : item.properties['creator']) === null || _j === void 0 ? void 0 : _j.properties) === null || _k === void 0 ? void 0 : _k.firstName) !== null ? `${(_l = item === null || item === void 0 ? void 0 : item.properties['creator'].properties) === null || _l === void 0 ? void 0 : _l.firstName} ${(_m = item === null || item === void 0 ? void 0 : item.properties['creator'].properties) === null || _m === void 0 ? void 0 : _m.lastName}` : '-',
20
+ modified: item && (item === null || item === void 0 ? void 0 : item.properties) ? this.datePipe.transform(item === null || item === void 0 ? void 0 : item.properties['modified'], 'dd-MM-yyyy') : '',
21
+ lastContributor: item && (item === null || item === void 0 ? void 0 : item.properties) && ((_p = (_o = item === null || item === void 0 ? void 0 : item.properties['lastContributor']) === null || _o === void 0 ? void 0 : _o.properties) === null || _p === void 0 ? void 0 : _p.firstName) !== undefined && ((_q = item === null || item === void 0 ? void 0 : item.properties['lastContributor'].properties) === null || _q === void 0 ? void 0 : _q.firstName) !== null ? `${(_r = item === null || item === void 0 ? void 0 : item.properties['lastContributor'].properties) === null || _r === void 0 ? void 0 : _r.firstName} ${(_s = item === null || item === void 0 ? void 0 : item.properties['lastContributor'].properties) === null || _s === void 0 ? void 0 : _s.lastName}` : '-',
22
+ items: ((_t = item === null || item === void 0 ? void 0 : item.contextParameters) === null || _t === void 0 ? void 0 : _t.hasFolderishChild) ? false : [],
23
+ entity: item,
24
+ };
25
+ }
26
+ treeViewAdapt(item, parent = true) {
27
+ var _a;
28
+ return {
29
+ id: item === null || item === void 0 ? void 0 : item.uid,
30
+ name: item === null || item === void 0 ? void 0 : item.title,
31
+ parentId: parent ? item === null || item === void 0 ? void 0 : item.parentRef : 'root',
32
+ icon: 'folder',
33
+ isExpanded: (_a = item === null || item === void 0 ? void 0 : item.contextParameters) === null || _a === void 0 ? void 0 : _a.hasFolderishChild,
34
+ entity: item
35
+ };
36
+ }
37
+ dropDownTreeViewAdapt(item, parent = true) {
38
+ var _a;
39
+ return {
40
+ id: item === null || item === void 0 ? void 0 : item.uid,
41
+ name: item === null || item === void 0 ? void 0 : item.title,
42
+ parentId: parent ? item === null || item === void 0 ? void 0 : item.parentRef : 'root',
43
+ icon: 'folder',
44
+ isExpanded: (_a = item === null || item === void 0 ? void 0 : item.contextParameters) === null || _a === void 0 ? void 0 : _a.hasFolderishChild,
45
+ entity: item
46
+ };
47
+ }
48
+ fulltreeViewAdapt(item, parent = true) {
49
+ return {
50
+ id: item === null || item === void 0 ? void 0 : item.uid,
51
+ name: item === null || item === void 0 ? void 0 : item.title,
52
+ parentId: parent ? item === null || item === void 0 ? void 0 : item.parentRef : 'root',
53
+ icon: this.iconService.getFileIcon(item, 'document'),
54
+ isExpanded: this.checkIfExpanded(item),
55
+ entity: item
56
+ };
57
+ }
58
+ checkIfExpanded(document) {
59
+ // if it is file then it is not expandable
60
+ if (!(document.facets) || (document.facets.length > 0 && document.facets.indexOf('Folderish') === -1)) {
61
+ return false;
62
+ }
63
+ else {
64
+ return true;
65
+ }
66
+ }
67
+ }
68
+ FileManagerAdapter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: FileManagerAdapter, deps: [{ token: i1.DatePipe }, { token: i2.IconService }], target: i0.ɵɵFactoryTarget.Injectable });
69
+ FileManagerAdapter.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: FileManagerAdapter, providedIn: 'root' });
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: FileManagerAdapter, decorators: [{
71
+ type: Injectable,
72
+ args: [{ providedIn: 'root' }]
73
+ }], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i2.IconService }]; } });
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tYW5hZ2VyLmFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9zaGFyZWQtc2VydmljZXMvZmlsZS1tYW5hZ2VyLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQUkzQyxNQUFNLE9BQU8sa0JBQWtCO0lBQzNCLFlBQ1csUUFBa0IsRUFDakIsV0FBeUI7UUFEMUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNqQixnQkFBVyxHQUFYLFdBQVcsQ0FBYztJQUVqQyxDQUFDO0lBQ0wsS0FBSyxDQUFDLElBQUk7O1FBQ04sT0FBTztZQUNILEVBQUUsRUFBRSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsR0FBRztZQUNiLElBQUksRUFBRSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsS0FBSztZQUNqQixVQUFVLEVBQUUsTUFBQSxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxpQkFBaUIsMENBQUUsU0FBUywwQ0FBRSxVQUFVO1lBQzFELFNBQVMsRUFBRSxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxVQUFVLE1BQUksTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsVUFBVSwwQ0FBRyxjQUFjLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxVQUFVLDBDQUFHLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4SCxXQUFXLEVBQUUsQ0FBQSxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxNQUFNLDBDQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBRyxDQUFD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LElBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDO1lBQ25HLE9BQU8sS0FBSyxDQUFBO1NBQ2I7YUFBSTtZQUNILE9BQU8sSUFBSSxDQUFBO1NBQ1o7SUFDSCxDQUFDOzsrR0E5RE0sa0JBQWtCO21IQUFsQixrQkFBa0IsY0FETCxNQUFNOzJGQUNuQixrQkFBa0I7a0JBRDlCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEljb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9kaXNwbGF5LXN1aXRhYmxlLWljb24vZGlzcGxheS1zdWl0YWJsZS1pY29uL2ljb24uc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgRmlsZU1hbmFnZXJBZGFwdGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcbiAgICAgICAgcHJpdmF0ZSBpY29uU2VydmljZSA6IEljb25TZXJ2aWNlXHJcblxyXG4gICAgKSB7IH1cclxuICAgIGFkYXB0KGl0ZW0pIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpZDogaXRlbT8udWlkLFxyXG4gICAgICAgICAgICBuYW1lOiBpdGVtPy50aXRsZSxcclxuICAgICAgICAgICAgaXNGYXZvcml0ZTogaXRlbT8uY29udGV4dFBhcmFtZXRlcnM/LmZhdm9yaXRlcz8uaXNGYXZvcml0ZSxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBpdGVtPy5wcm9wZXJ0aWVzICYmIGl0ZW0/LnByb3BlcnRpZXM/LlsnZmlsZTpjb250ZW50J10gPyBpdGVtPy5wcm9wZXJ0aWVzPy5bJ2ZpbGU6Y29udGVudCddWydtaW1lLXR5cGUnXSA6ICcnLFxyXG4gICAgICAgICAgICBpc0RpcmVjdG9yeTogaXRlbT8uZmFjZXRzPy5pbmRleE9mKCdGb2xkZXJpc2gnKSA+IC0xID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICBzaXplOiBpdGVtICYmIGl0ZW0/LnByb3BlcnRpZXMgPyBpdGVtPy5wcm9wZXJ0aWVzWydmaWxlOmNvbnRlbnQnXT8ubGVuZ3RoIDogJycsXHJcbiAgICAgICAgICAgIGNyZWF0b3I6IGl0ZW0gJiYgaXRlbT8ucHJvcGVydGllcyAmJiBpdGVtPy5wcm9wZXJ0aWVzWydjcmVhdG9yJ10/LnByb3BlcnRpZXM/LmZpcnN0TmFtZSAhPT0gdW5kZWZpbmVkICYmIGl0ZW0/LnByb3BlcnRpZXNbJ2NyZWF0b3InXT8ucHJvcGVydGllcz8uZmlyc3ROYW1lICE9PSBudWxsID8gYCR7aXRlbT8ucHJvcGVydGllc1snY3JlYXRvciddLnByb3BlcnRpZXM/LmZpcnN0TmFtZX0gJHtpdGVtPy5wcm9wZXJ0aWVzWydjcmVhdG9yJ10ucHJvcGVydGllcz8ubGFzdE5hbWV9YCA6ICctJyxcclxuICAgICAgICAgICAgbW9kaWZpZWQ6IGl0ZW0gJiYgaXRlbT8ucHJvcGVydGllcyA/IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGl0ZW0/LnByb3BlcnRpZXNbJ21vZGlmaWVkJ10sICdkZC1NTS15eXl5JykgOiAnJyxcclxuICAgICAgICAgICAgbGFzdENvbnRyaWJ1dG9yOiBpdGVtICYmIGl0ZW0/LnByb3BlcnRpZXMgJiYgaXRlbT8ucHJvcGVydGllc1snbGFzdENvbnRyaWJ1dG9yJ10/LnByb3BlcnRpZXM/LmZpcnN0TmFtZSAhPT0gdW5kZWZpbmVkICYmIGl0ZW0/LnByb3BlcnRpZXNbJ2xhc3RDb250cmlidXRvciddLnByb3BlcnRpZXM/LmZpcnN0TmFtZSAhPT0gbnVsbCA/IGAke2l0ZW0/LnByb3BlcnRpZXNbJ2xhc3RDb250cmlidXRvciddLnByb3BlcnRpZXM/LmZpcnN0TmFtZX0gJHtpdGVtPy5wcm9wZXJ0aWVzWydsYXN0Q29udHJpYnV0b3InXS5wcm9wZXJ0aWVzPy5sYXN0TmFtZX1gIDogJy0nLFxyXG4gICAgICAgICAgICBpdGVtczogaXRlbT8uY29udGV4dFBhcmFtZXRlcnM/Lmhhc0ZvbGRlcmlzaENoaWxkID8gZmFsc2UgOiBbXSxcclxuICAgICAgICAgICAgZW50aXR5OiBpdGVtLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgdHJlZVZpZXdBZGFwdChpdGVtLCBwYXJlbnQgPSB0cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IGl0ZW0/LnVpZCxcclxuICAgICAgICAgICAgbmFtZTogaXRlbT8udGl0bGUsXHJcbiAgICAgICAgICAgIHBhcmVudElkOiBwYXJlbnQgPyBpdGVtPy5wYXJlbnRSZWYgOiAncm9vdCcsXHJcbiAgICAgICAgICAgIGljb246ICdmb2xkZXInLFxyXG4gICAgICAgICAgICBpc0V4cGFuZGVkOiBpdGVtPy5jb250ZXh0UGFyYW1ldGVycz8uaGFzRm9sZGVyaXNoQ2hpbGQsXHJcbiAgICAgICAgICAgIGVudGl0eTogaXRlbVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGRyb3BEb3duVHJlZVZpZXdBZGFwdChpdGVtLCBwYXJlbnQgPSB0cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IGl0ZW0/LnVpZCxcclxuICAgICAgICAgICAgbmFtZTogaXRlbT8udGl0bGUsXHJcbiAgICAgICAgICAgIHBhcmVudElkOiBwYXJlbnQgPyBpdGVtPy5wYXJlbnRSZWYgOiAncm9vdCcsXHJcbiAgICAgICAgICAgIGljb246ICdmb2xkZXInLFxyXG4gICAgICAgICAgICBpc0V4cGFuZGVkOiBpdGVtPy5jb250ZXh0UGFyYW1ldGVycz8uaGFzRm9sZGVyaXNoQ2hpbGQsXHJcbiAgICAgICAgICAgIGVudGl0eTogaXRlbVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZnVsbHRyZWVWaWV3QWRhcHQoaXRlbSwgcGFyZW50ID0gdHJ1ZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiBpdGVtPy51aWQsXHJcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0/LnRpdGxlLFxyXG4gICAgICAgICAgICBwYXJlbnRJZDogcGFyZW50ID8gaXRlbT8ucGFyZW50UmVmIDogJ3Jvb3QnLFxyXG4gICAgICAgICAgICBpY29uOiB0aGlzLmljb25TZXJ2aWNlLmdldEZpbGVJY29uKGl0ZW0sICdkb2N1bWVudCcpLFxyXG4gICAgICAgICAgICBpc0V4cGFuZGVkOiB0aGlzLmNoZWNrSWZFeHBhbmRlZChpdGVtKSxcclxuICAgICAgICAgICAgZW50aXR5OiBpdGVtXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lmRXhwYW5kZWQoZG9jdW1lbnQpe1xyXG4gICAgICAgIC8vIGlmIGl0IGlzIGZpbGUgdGhlbiBpdCBpcyBub3QgZXhwYW5kYWJsZVxyXG4gICAgICAgIGlmKCEoZG9jdW1lbnQuZmFjZXRzKSB8fCAoZG9jdW1lbnQuZmFjZXRzLmxlbmd0aCA+IDAgJiYgZG9jdW1lbnQuZmFjZXRzLmluZGV4T2YoJ0ZvbGRlcmlzaCcpID09PSAtMSkpe1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgIH0gXHJcbiAgICAgIH1cclxufSJdfQ==