-
-
{{ 'ABOUT.SOURCE_CODE.TITLE' | translate }}
-
- {{application}}
- {{ 'ABOUT.VERSION' | translate }}: {{ version }}
+ {{ 'ABOUT.SOURCE_CODE.TITLE' | translate }}
+
+ {{application}}
+ {{ 'ABOUT.VERSION' | translate }}: {{ version }}
-
-
{{ 'ABOUT.SOURCE_CODE.DESCRIPTION' | translate }}
-
+
+
{{ 'ABOUT.SOURCE_CODE.DESCRIPTION' | translate }}
+
-
-
+
+
diff --git a/lib/core/about/about-license-list/about-license-list.component.html b/lib/core/about/about-license-list/about-license-list.component.html
new file mode 100644
index 0000000000..f58a2cf6fa
--- /dev/null
+++ b/lib/core/about/about-license-list/about-license-list.component.html
@@ -0,0 +1,11 @@
+
+
+
+ {{ column.header | translate }}
+
+ {{ column.cell(row) }}
+
+
+
+
+
diff --git a/lib/core/about/about-license-list/about-license-list.component.ts b/lib/core/about/about-license-list/about-license-list.component.ts
new file mode 100644
index 0000000000..30133f2ab9
--- /dev/null
+++ b/lib/core/about/about-license-list/about-license-list.component.ts
@@ -0,0 +1,45 @@
+/*!
+ * @license
+ * Copyright 2019 Alfresco Software, Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input } from '@angular/core';
+import { LicenseData } from '../interfaces';
+
+@Component({
+ selector: 'adf-about-license-list',
+ templateUrl: './about-license-list.component.html',
+ encapsulation: ViewEncapsulation.None,
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class AboutLicenseListComponent {
+ columns = [
+ {
+ columnDef: 'property',
+ header: 'ABOUT.LICENSE.PROPERTY',
+ cell: (row: LicenseData) => `${row.property}`
+ },
+ {
+ columnDef: 'value',
+ header: 'ABOUT.LICENSE.VALUE',
+ cell: (row: LicenseData) => `${row.value}`
+ }
+ ];
+
+ displayedColumns = this.columns.map((x) => x.columnDef);
+
+ @Input()
+ data: LicenseData[] = [];
+}
diff --git a/lib/core/about/about-module-list/module-list.component.html b/lib/core/about/about-module-list/module-list.component.html
new file mode 100644
index 0000000000..f58a2cf6fa
--- /dev/null
+++ b/lib/core/about/about-module-list/module-list.component.html
@@ -0,0 +1,11 @@
+
+
+
+ {{ column.header | translate }}
+
+ {{ column.cell(row) }}
+
+
+
+
+
diff --git a/lib/core/about/about-module-list/module-list.component.ts b/lib/core/about/about-module-list/module-list.component.ts
new file mode 100644
index 0000000000..1afe3e9970
--- /dev/null
+++ b/lib/core/about/about-module-list/module-list.component.ts
@@ -0,0 +1,45 @@
+/*!
+ * @license
+ * Copyright 2019 Alfresco Software, Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input } from '@angular/core';
+import { ModuleInfo } from '@alfresco/js-api';
+
+@Component({
+ selector: 'adf-about-module-list',
+ templateUrl: './module-list.component.html',
+ encapsulation: ViewEncapsulation.None,
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class ModuleListComponent {
+ columns = [
+ {
+ columnDef: 'title',
+ header: 'ABOUT.MODULES.NAME',
+ cell: (row: ModuleInfo) => `${row.title}`
+ },
+ {
+ columnDef: 'version',
+ header: 'ABOUT.MODULES.VERSION',
+ cell: (row: ModuleInfo) => `${row.version}`
+ }
+ ];
+
+ displayedColumns = this.columns.map((x) => x.columnDef);
+
+ @Input()
+ data: Array
= [];
+}
diff --git a/lib/core/about/about-package/package-list.component.html b/lib/core/about/about-package/package-list.component.html
new file mode 100644
index 0000000000..f58a2cf6fa
--- /dev/null
+++ b/lib/core/about/about-package/package-list.component.html
@@ -0,0 +1,11 @@
+
+
+
+ {{ column.header | translate }}
+
+ {{ column.cell(row) }}
+
+
+
+
+
diff --git a/lib/core/about/about-package/package-list.component.ts b/lib/core/about/about-package/package-list.component.ts
new file mode 100644
index 0000000000..524f3dca2a
--- /dev/null
+++ b/lib/core/about/about-package/package-list.component.ts
@@ -0,0 +1,45 @@
+/*!
+ * @license
+ * Copyright 2019 Alfresco Software, Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input } from '@angular/core';
+import { PackageInfo } from '../interfaces';
+
+@Component({
+ selector: 'adf-about-package-list',
+ templateUrl: './package-list.component.html',
+ encapsulation: ViewEncapsulation.None,
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class PackageListComponent {
+ columns = [
+ {
+ columnDef: 'title',
+ header: 'ABOUT.PACKAGES.NAME',
+ cell: (row: PackageInfo) => `${row.name}`
+ },
+ {
+ columnDef: 'version',
+ header: 'ABOUT.PACKAGES.VERSION',
+ cell: (row: PackageInfo) => `${row.version}`
+ }
+ ];
+
+ displayedColumns = this.columns.map((x) => x.columnDef);
+
+ @Input()
+ data: Array = [];
+}
diff --git a/lib/core/about/about-platform-version/about-platform-version.component.html b/lib/core/about/about-platform-version/about-platform-version.component.html
new file mode 100644
index 0000000000..d318181fb1
--- /dev/null
+++ b/lib/core/about/about-platform-version/about-platform-version.component.html
@@ -0,0 +1,67 @@
+{{ 'ABOUT.VERSIONS.TITLE' | translate }}
+
+
+
+
+ {{ 'ABOUT.VERSIONS.PROCESS_SERVICE' | translate }}
+
+ {{ 'ABOUT.VERSIONS.LABELS.VERSION' | translate }}: {{ process.majorVersion }}.{{
+ process.minorVersion }}.{{ process.revisionVersion }}
+
+
+
+
+
+
+ {{ 'ABOUT.VERSIONS.CONTENT_SERVICE' | translate }}
+
+ {{ 'ABOUT.VERSIONS.LABELS.EDITION' | translate }}: {{ repository.edition }}
+
+
+ {{ 'ABOUT.VERSIONS.LABELS.VERSION' | translate }}: {{ repository.version.display }}
+
+
+
+
+
+
+ {{ 'ABOUT.VERSIONS.MODELING_SERVICE' | translate }}
+
+ {{ 'ABOUT.VERSIONS.LABELS.VERSION' | translate }}: {{ modeling.version }}
+
+
+
+
+
+
+ {{ 'ABOUT.VERSIONS.DEPLOYMENT_SERVICE' | translate }}
+
+ {{ 'ABOUT.VERSIONS.LABELS.VERSION' | translate }}: {{ deployment.version }}
+
+
+
+
+
+
+ {{ 'ABOUT.VERSIONS.RB' | translate }}
+
+ {{ 'ABOUT.VERSIONS.LABELS.EDITION' | translate }}: {{ rb.artifact }}
+
+
+ {{ 'ABOUT.VERSIONS.LABELS.VERSION' | translate }}: {{ rb.version }}
+
+
+
+
+
+
+ {{ 'ABOUT.VERSIONS.QUERY_SERVICE' | translate }}
+
+ {{ 'ABOUT.VERSIONS.LABELS.VERSION' | translate }}: {{ query.version }}
+
+
+
+
+
+
+
diff --git a/lib/core/about/about-platform-version/about-platform-version.component.ts b/lib/core/about/about-platform-version/about-platform-version.component.ts
new file mode 100644
index 0000000000..b0ad8a763d
--- /dev/null
+++ b/lib/core/about/about-platform-version/about-platform-version.component.ts
@@ -0,0 +1,67 @@
+/*!
+ * @license
+ * Copyright 2019 Alfresco Software, Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { Component, Input, ViewEncapsulation } from '@angular/core';
+import { RepositoryInfo } from '@alfresco/js-api';
+import { Observable } from 'rxjs';
+
+import { BpmProductVersionModel } from '../../models/product-version.model';
+import { AaeInfoService, ActivitiDependencyInfo } from '../services/aae-info.service';
+import { AppConfigService } from '../../app-config/app-config.service';
+
+@Component({
+ selector: 'adf-about-platform-version',
+ templateUrl: './about-platform-version.component.html',
+ encapsulation: ViewEncapsulation.None
+})
+export class AboutPlatformVersionComponent {
+
+ /** repository info. */
+ @Input()
+ repository: RepositoryInfo = null;
+
+ /** process info. */
+ @Input()
+ process: BpmProductVersionModel = null;
+
+ modeling$: Observable;
+ deployment$: Observable;
+ rb$: Observable;
+ query$: Observable;
+
+ constructor(private aaeInfoService: AaeInfoService, private appConfigService: AppConfigService) {
+ this.modelingInfo();
+ this.deploymentInfo();
+ this.rbInfo();
+ }
+
+ modelingInfo() {
+ this.modeling$ = this.aaeInfoService.getServiceVersion('modeling-service');
+ }
+
+ deploymentInfo() {
+ this.deployment$ = this.aaeInfoService.getServiceVersion('deployment-service');
+ }
+
+ rbInfo() {
+ this.rb$ = this.aaeInfoService.getServiceVersion(`${this.appConfigService.get('oauth2.clientId')}/rb`);
+ }
+
+ queryInfo() {
+ this.query$ = this.aaeInfoService.getServiceVersion(`${this.appConfigService.get('oauth2.clientId')}/query`);
+ }
+}
diff --git a/lib/core/about/about-product-version/about-product-version.component.html b/lib/core/about/about-product-version/about-product-version.component.html
deleted file mode 100644
index 110442f13f..0000000000
--- a/lib/core/about/about-product-version/about-product-version.component.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
{{ 'ABOUT.VERSIONS.TITLE' | translate }}
-
-
-
{{ 'ABOUT.VERSIONS.PROCESS_SERVICE' | translate }}
-
- {{ 'ABOUT.VERSIONS.LABELS.EDITION' | translate }}: {{ bpmVersion.edition }}
-
-
- {{ 'ABOUT.VERSIONS.LABELS.VERSION' | translate }}: {{ bpmVersion.majorVersion }}.{{
- bpmVersion.minorVersion }}.{{ bpmVersion.revisionVersion }}
-
-
-
-
{{ 'ABOUT.VERSIONS.CONTENT_SERVICE' | translate }}
-
- {{ 'ABOUT.VERSIONS.LABELS.EDITION' | translate }}: {{ ecmVersion.edition }}
-
-
- {{ 'ABOUT.VERSIONS.LABELS.VERSION' | translate }}: {{ ecmVersion.version.display }}
-
-
-
-
-
{{ 'ABOUT.VERSIONS.LABELS.LICENSE' | translate }}
-
-
{{ 'ABOUT.VERSIONS.LABELS.STATUS' | translate }}
-
-
{{ 'ABOUT.VERSIONS.LABELS.MODULES' | translate }}
-
-
-
-
-
-
diff --git a/lib/core/about/about-product-version/about-product-version.component.scss b/lib/core/about/about-product-version/about-product-version.component.scss
deleted file mode 100644
index a0cb918f86..0000000000
--- a/lib/core/about/about-product-version/about-product-version.component.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-.adf-about-product-version-container {
- padding: 10px;
-}
diff --git a/lib/core/about/about-product-version/about-product-version.component.spec.ts b/lib/core/about/about-product-version/about-product-version.component.spec.ts
deleted file mode 100644
index 6bd606397f..0000000000
--- a/lib/core/about/about-product-version/about-product-version.component.spec.ts
+++ /dev/null
@@ -1,116 +0,0 @@
-/*!
- * @license
- * Copyright 2019 Alfresco Software, Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { CoreTestingModule } from '../../testing/core.testing.module';
-import { setupTestBed } from '../../testing/setup-test-bed';
-import { AboutProductVersionComponent } from './about-product-version.component';
-import { DiscoveryApiService } from '../../services/discovery-api.service';
-import { AuthenticationService } from '../../services/authentication.service';
-import { of } from 'rxjs';
-import { aboutAPSMockDetails, mockModules } from '../about.mock';
-import { TranslateModule } from '@ngx-translate/core';
-
-describe('AboutProductVersionComponent', () => {
- let fixture: ComponentFixture;
- let authenticationService: AuthenticationService;
- let discoveryApiService: DiscoveryApiService;
-
- setupTestBed({
- imports: [
- TranslateModule.forRoot(),
- CoreTestingModule
- ]
- });
-
- beforeEach(() => {
- fixture = TestBed.createComponent(AboutProductVersionComponent);
- authenticationService = TestBed.inject(AuthenticationService);
- discoveryApiService = TestBed.inject(DiscoveryApiService);
- spyOn(discoveryApiService, 'getEcmProductInfo').and.returnValue(of(mockModules));
- spyOn(authenticationService, 'isBpmLoggedIn').and.returnValue(true);
- spyOn(authenticationService, 'isEcmLoggedIn').and.returnValue(true);
- spyOn(discoveryApiService, 'getBpmProductInfo').and.returnValue(of(aboutAPSMockDetails));
- fixture.detectChanges();
- });
-
- afterEach(() => {
- fixture.destroy();
- });
-
- it('Should display title', () => {
- const titleElement = fixture.nativeElement.querySelector('[data-automation-id="adf-about-product-version-title"]');
- expect(titleElement === null).toBeFalsy();
- expect(titleElement.innerText).toBe('ABOUT.VERSIONS.TITLE');
- });
-
- it('should display bpm details', async() => {
- fixture.detectChanges();
- await fixture.whenStable();
- const version = fixture.nativeElement.querySelector('[data-automation-id="adf-about-bpm-version"]');
- expect(version.innerText).toEqual('ABOUT.VERSIONS.LABELS.VERSION: 1.10.0');
- });
-
- it('should display ecm details', async() => {
- fixture.detectChanges();
- await fixture.whenStable();
- const version = fixture.nativeElement.querySelector('[data-automation-id="adf-about-ecm-version"]');
- expect(version.innerText).toEqual('ABOUT.VERSIONS.LABELS.VERSION: 6.2.0.0');
- });
-
- it('should display both bpm & ecm details', async() => {
- fixture.detectChanges();
- await fixture.whenStable();
- const bpmVersion = fixture.nativeElement.querySelector('[data-automation-id="adf-about-bpm-version"]');
- const ecmVersion = fixture.nativeElement.querySelector('[data-automation-id="adf-about-ecm-version"]');
- expect(bpmVersion.innerText).toEqual('ABOUT.VERSIONS.LABELS.VERSION: 1.10.0');
- expect(ecmVersion.innerText).toEqual('ABOUT.VERSIONS.LABELS.VERSION: 6.2.0.0');
- });
-
- it('should display license details', async() => {
- fixture.detectChanges();
- await fixture.whenStable();
- const dataTable = fixture.nativeElement.querySelector('.adf-datatable');
- const issueAt = fixture.nativeElement.querySelector('[data-automation-id="text_2018-12-20T12:07:31.276+0000"]');
- const expiresAt = fixture.nativeElement.querySelector('[data-automation-id="text_2019-05-31T23:00:00.000+0000"]');
- expect(dataTable).not.toBeNull();
- expect(issueAt.innerText).toEqual('2018-12-20T12:07:31.276+0000');
- expect(expiresAt.innerText).toEqual('2019-05-31T23:00:00.000+0000');
- });
-
- it('should display status details', async() => {
- fixture.detectChanges();
- await fixture.whenStable();
- const dataTable = fixture.nativeElement.querySelector('.adf-datatable');
- const readOnly = fixture.nativeElement.querySelector('[data-automation-id="text_false"]');
- const isAuditEnabled = fixture.nativeElement.querySelector('[data-automation-id="text_true"]');
- expect(dataTable).not.toBeNull();
- expect(readOnly.innerText).toEqual('false');
- expect(isAuditEnabled.innerText).toEqual('true');
- });
-
- it('should display module details', async() => {
- fixture.detectChanges();
- await fixture.whenStable();
- const dataTable = fixture.nativeElement.querySelector('.adf-datatable');
- const moduleTitle = fixture.nativeElement.querySelector('[data-automation-id="text_ABC Repo"]');
- const moduleTitleTwo = fixture.nativeElement.querySelector('[data-automation-id="text_AOFS Module"]');
- expect(dataTable).not.toBeNull();
- expect(moduleTitle.innerText).toEqual('ABC Repo');
- expect(moduleTitleTwo.innerText).toEqual('AOFS Module');
- });
-});
diff --git a/lib/core/about/about-product-version/about-product-version.component.ts b/lib/core/about/about-product-version/about-product-version.component.ts
deleted file mode 100644
index ed49bf67eb..0000000000
--- a/lib/core/about/about-product-version/about-product-version.component.ts
+++ /dev/null
@@ -1,139 +0,0 @@
-/*!
- * @license
- * Copyright 2019 Alfresco Software, Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Component, OnInit, ViewEncapsulation } from '@angular/core';
-import { BpmProductVersionModel, EcmProductVersionModel } from '../../models/product-version.model';
-import { ObjectDataTableAdapter } from '../../datatable/data/object-datatable-adapter';
-import { AuthenticationService } from '../../services/authentication.service';
-import { DiscoveryApiService } from '../../services/discovery-api.service';
-
-@Component({
- selector: 'adf-about-product-version',
- templateUrl: './about-product-version.component.html',
- encapsulation: ViewEncapsulation.None
-})
-export class AboutProductVersionComponent implements OnInit {
-
- ecmVersion: EcmProductVersionModel = null;
- bpmVersion: BpmProductVersionModel = null;
-
- status: ObjectDataTableAdapter;
- license: ObjectDataTableAdapter;
- modules: ObjectDataTableAdapter;
-
- constructor(private authService: AuthenticationService,
- private discovery: DiscoveryApiService) {}
-
- ngOnInit() {
- if (this.authService.isEcmLoggedIn()) {
- this.setECMInfo();
- }
-
- if (this.authService.isBpmLoggedIn()) {
- this.setBPMInfo();
- }
- }
-
- setECMInfo() {
- this.discovery.getEcmProductInfo().subscribe((ecmVers) => {
- this.ecmVersion = ecmVers;
-
- this.modules = new ObjectDataTableAdapter(this.ecmVersion.modules, [
- { type: 'text', key: 'id', title: 'ABOUT.TABLE_HEADERS.MODULES.ID', sortable: true },
- { type: 'text', key: 'title', title: 'ABOUT.TABLE_HEADERS.MODULES.TITLE', sortable: true },
- { type: 'text', key: 'version', title: 'ABOUT.TABLE_HEADERS.MODULES.DESCRIPTION', sortable: true },
- {
- type: 'text',
- key: 'installDate',
- title: 'ABOUT.TABLE_HEADERS.MODULES.INSTALL_DATE',
- sortable: true
- },
- {
- type: 'text',
- key: 'installState',
- title: 'ABOUT.TABLE_HEADERS.MODULES.INSTALL_STATE',
- sortable: true
- },
- {
- type: 'text',
- key: 'versionMin',
- title: 'ABOUT.TABLE_HEADERS.MODULES.VERSION_MIN',
- sortable: true
- },
- {
- type: 'text',
- key: 'versionMax',
- title: 'ABOUT.TABLE_HEADERS.MODULES.VERSION_MAX',
- sortable: true
- }
- ]);
-
- this.status = new ObjectDataTableAdapter([this.ecmVersion.status], [
- { type: 'text', key: 'isReadOnly', title: 'ABOUT.TABLE_HEADERS.STATUS.READ_ONLY', sortable: true },
- {
- type: 'text',
- key: 'isAuditEnabled',
- title: 'ABOUT.TABLE_HEADERS.STATUS.AUDIT_ENABLED',
- sortable: true
- },
- {
- type: 'text',
- key: 'isQuickShareEnabled',
- title: 'ABOUT.TABLE_HEADERS.STATUS.QUICK_SHARE_ENABLED',
- sortable: true
- },
- {
- type: 'text',
- key: 'isThumbnailGenerationEnabled',
- title: 'ABOUT.TABLE_HEADERS.STATUS.THUMBNAIL_ENABLED',
- sortable: true
- }
- ]);
-
- this.license = new ObjectDataTableAdapter([this.ecmVersion.license], [
- { type: 'text', key: 'issuedAt', title: 'ABOUT.TABLE_HEADERS.LICENSE.ISSUES_AT', sortable: true },
- { type: 'text', key: 'expiresAt', title: 'ABOUT.TABLE_HEADERS.LICENSE.EXPIRES_AT', sortable: true },
- {
- type: 'text',
- key: 'remainingDays',
- title: 'ABOUT.TABLE_HEADERS.LICENSE.REMAINING_DAYS',
- sortable: true
- },
- { type: 'text', key: 'holder', title: 'ABOUT.TABLE_HEADERS.LICENSE.HOLDER', sortable: true },
- { type: 'text', key: 'mode', title: 'ABOUT.TABLE_HEADERS.LICENSE.MODE', sortable: true },
- {
- type: 'text',
- key: 'isClusterEnabled',
- title: 'ABOUT.TABLE_HEADERS.LICENSE.CLUSTER_ENABLED',
- sortable: true
- },
- {
- type: 'text',
- key: 'isCryptodocEnabled',
- title: 'ABOUT.TABLE_HEADERS.LICENSE.CRYPTODOC_ENABLED',
- sortable: true
- }
- ]);
- });
- }
-
- setBPMInfo() {
- this.discovery.getBpmProductInfo().subscribe((bpmVersion) => {
- this.bpmVersion = bpmVersion;
- });
- }
-}
diff --git a/lib/core/about/about-server-settings/about-server-settings.component.html b/lib/core/about/about-server-settings/about-server-settings.component.html
index 80707575e0..343d65a6e0 100644
--- a/lib/core/about/about-server-settings/about-server-settings.component.html
+++ b/lib/core/about/about-server-settings/about-server-settings.component.html
@@ -1,7 +1,6 @@
-
{{ 'ABOUT.SERVER_SETTINGS.TITLE' | translate }}
-
{{ 'ABOUT.SERVER_SETTINGS.DESCRIPTION' | translate }}
-
+ {{ 'ABOUT.SERVER_SETTINGS.TITLE' | translate }}
+
{{ 'ABOUT.SERVER_SETTINGS.PROCESS_SERVICE_HOST' | translate: {value: bpmHost} }}
diff --git a/lib/core/about/about-status-list/about-status-list.component.html b/lib/core/about/about-status-list/about-status-list.component.html
new file mode 100644
index 0000000000..f58a2cf6fa
--- /dev/null
+++ b/lib/core/about/about-status-list/about-status-list.component.html
@@ -0,0 +1,11 @@
+
+
+
+ {{ column.header | translate }}
+
+ {{ column.cell(row) }}
+
+
+
+
+
diff --git a/lib/core/about/about-status-list/about-status-list.component.ts b/lib/core/about/about-status-list/about-status-list.component.ts
new file mode 100644
index 0000000000..15267ae1f8
--- /dev/null
+++ b/lib/core/about/about-status-list/about-status-list.component.ts
@@ -0,0 +1,45 @@
+/*!
+ * @license
+ * Copyright 2019 Alfresco Software, Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input } from '@angular/core';
+import { StatusData } from '../interfaces';
+
+@Component({
+ selector: 'adf-about-status-list',
+ templateUrl: './about-status-list.component.html',
+ encapsulation: ViewEncapsulation.None,
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class AboutStatusListComponent {
+ columns = [
+ {
+ columnDef: 'property',
+ header: 'ABOUT.STATUS.PROPERTY',
+ cell: (row: StatusData) => `${row.property}`
+ },
+ {
+ columnDef: 'value',
+ header: 'ABOUT.STATUS.VALUE',
+ cell: (row: StatusData) => `${row.value}`
+ }
+ ];
+
+ displayedColumns = this.columns.map((x) => x.columnDef);
+
+ @Input()
+ data: StatusData[] = [];
+}
diff --git a/lib/core/about/about.component.html b/lib/core/about/about.component.html
new file mode 100644
index 0000000000..30a8d24bc7
--- /dev/null
+++ b/lib/core/about/about.component.html
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ 'ABOUT.LICENSE.TITLE' | translate }}
+
+
+
+
+ {{ 'ABOUT.STATUS.TITLE' | translate }}
+
+
+
+
+ {{ 'ABOUT.MODULES.TITLE' | translate }}
+
+
+
+
+
+ {{ 'ABOUT.PACKAGES.TITLE' | translate }}
+
+
+
+
+ 0">
+ {{ 'ABOUT.PLUGINS.TITLE' | translate }}
+
+
+
+
+
diff --git a/lib/core/about/about.component.scss b/lib/core/about/about.component.scss
new file mode 100644
index 0000000000..f134eb7381
--- /dev/null
+++ b/lib/core/about/about.component.scss
@@ -0,0 +1,12 @@
+adf-about {
+
+ .adf-about-container {
+ margin: 10px 0 5px 2px;
+ }
+
+ header {
+ margin: 5px;
+ }
+
+}
+
diff --git a/lib/core/about/about.component.stories.ts b/lib/core/about/about.component.stories.ts
new file mode 100644
index 0000000000..eeb2713959
--- /dev/null
+++ b/lib/core/about/about.component.stories.ts
@@ -0,0 +1,67 @@
+/*!
+ * @license
+ * Copyright 2019 Alfresco Software, Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { Meta, moduleMetadata, Story } from '@storybook/angular';
+import { AboutComponent } from './about.component';
+import { AboutModule } from './about.module';
+import { AuthenticationService, DiscoveryApiService } from '../services';
+import { AppConfigServiceMock, AuthenticationMock } from '../mock';
+import { DiscoveryApiServiceMock } from '../mock/discovery-api.service.mock';
+import { AppExtensionService, AppExtensionServiceMock } from '@alfresco/adf-extensions';
+import { AppConfigService } from '../app-config/app-config.service';
+import { CoreStoryModule } from '../testing/core.story.module';
+
+export default {
+ component: AboutComponent,
+ title: 'Core/Components/About',
+ decorators: [
+ moduleMetadata({
+ imports: [CoreStoryModule, AboutModule],
+ providers: [
+ { provide: AuthenticationService, useClass: AuthenticationMock },
+ { provide: DiscoveryApiService, useClass: DiscoveryApiServiceMock },
+ { provide: AppExtensionService, useClass: AppExtensionServiceMock },
+ { provide: AppConfigService, useClass: AppConfigServiceMock }
+ ]
+ })
+ ]
+} as Meta;
+
+const template: Story = (args: AboutComponent) => ({
+ props: args
+});
+
+export const devAbout = template.bind({});
+
+devAbout.args = {
+ dev: true,
+ pkg: {
+ name: 'My Storybook App', commit: 'my-commit-value', version: '1.0.0', dependencies: {
+ '@alfresco/adf-content-services': '4.7.0',
+ '@alfresco/adf-core': '4.7.0',
+ '@alfresco/adf-extensions': '4.7.0',
+ '@alfresco/adf-process-services': '4.7.0',
+ '@alfresco/adf-process-services-cloud': '4.7.0',
+ '@alfresco/js-api': '4.7.0-3976'
+ }
+ }
+};
+
+export const prodAbout = template.bind({});
+prodAbout.args = {
+ dev: false
+};
diff --git a/lib/core/about/about.component.ts b/lib/core/about/about.component.ts
new file mode 100644
index 0000000000..766ae82721
--- /dev/null
+++ b/lib/core/about/about.component.ts
@@ -0,0 +1,124 @@
+/*!
+ * @license
+ * Copyright 2019 Alfresco Software, Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core';
+import { AppExtensionService, ExtensionRef } from '@alfresco/adf-extensions';
+import { Observable } from 'rxjs';
+import { AppConfigService } from '../app-config/app-config.service';
+import { RepositoryInfo } from '@alfresco/js-api';
+
+import { BpmProductVersionModel } from '../models/product-version.model';
+import { AuthenticationService } from '../services/authentication.service';
+import { DiscoveryApiService } from '../services/discovery-api.service';
+import { LicenseData, PackageInfo, StatusData } from './interfaces';
+
+@Component({
+ selector: 'adf-about',
+ templateUrl: './about.component.html',
+ styleUrls: ['./about.component.scss'],
+ encapsulation: ViewEncapsulation.None
+})
+export class AboutComponent implements OnInit {
+
+ repository: RepositoryInfo = null;
+ bpmVersion: BpmProductVersionModel = null;
+
+ statusEntries: StatusData[];
+ licenseEntries: LicenseData[];
+
+ dependencyEntries: PackageInfo[] = [];
+ url: string;
+ version: string;
+ dependencies: string;
+ application: string;
+
+ /** If active show more information about the app and the platform useful in debug. */
+ @Input() dev: boolean = false;
+
+ /** pkg json. */
+ @Input() pkg: any;
+
+ /** Regular expression for filtering dependencies packages. */
+ @Input() regexp = '^(@alfresco)';
+
+ extensions$: Observable;
+
+ constructor(private authService: AuthenticationService,
+ private discovery: DiscoveryApiService,
+ private appExtensions: AppExtensionService,
+ private appConfigService: AppConfigService) {
+ this.extensions$ = this.appExtensions.references$;
+ this.application = this.appConfigService.get(
+ 'application.name'
+ );
+ }
+
+ ngOnInit() {
+ this.url = `https://github.com/Alfresco/${this.pkg?.name}/commits/${this.pkg?.commit}`;
+ this.version = this.pkg?.version;
+ this.dependencies = this.pkg?.dependencies;
+
+ if (this.dependencies) {
+ const alfrescoPackages = Object.keys(this.dependencies).filter((val) => {
+ return new RegExp(this.regexp).test(val);
+ });
+
+ alfrescoPackages.forEach((val) => {
+ this.dependencyEntries.push({
+ name: val,
+ version: (this.dependencies[val])
+ });
+ });
+ }
+ if (this.authService.isEcmLoggedIn()) {
+ this.setECMInfo();
+ }
+
+ if (this.authService.isBpmLoggedIn()) {
+ this.setBPMInfo();
+ }
+ }
+
+ setECMInfo() {
+ this.discovery.getEcmProductInfo().subscribe((repository) => {
+ this.repository = repository;
+
+ this.statusEntries = Object.keys(repository.status).map((key) => {
+ return {
+ property: key,
+ value: repository.status[key]
+ };
+ });
+
+ if (repository.license) {
+ this.licenseEntries = Object.keys(repository.license).map((key) => {
+ return {
+ property: key,
+ value: repository.license[key]
+ };
+ });
+ }
+ });
+ }
+
+ setBPMInfo() {
+ this.discovery.getBpmProductInfo().subscribe((bpmVersion) => {
+ this.bpmVersion = bpmVersion;
+ });
+ }
+
+}
diff --git a/lib/core/about/about.module.ts b/lib/core/about/about.module.ts
index 04406362e1..108a0dbe00 100644
--- a/lib/core/about/about.module.ts
+++ b/lib/core/about/about.module.ts
@@ -19,30 +19,44 @@ import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { TranslateModule } from '@ngx-translate/core';
import { MaterialModule } from '../material.module';
-import { DataTableModule } from '../datatable/datatable.module';
-import { AboutApplicationModulesComponent } from './about-application-modules/about-application-modules.component';
-import { AboutProductVersionComponent } from './about-product-version/about-product-version.component';
+
import { AboutGithubLinkComponent } from './about-github-link/about-github-link.component';
import { AboutServerSettingsComponent } from './about-server-settings/about-server-settings.component';
+import { AboutExtensionListComponent } from './about-extension-list/about-extension-list.component';
+import { AboutLicenseListComponent } from './about-license-list/about-license-list.component';
+import { PackageListComponent } from './about-package/package-list.component';
+import { AboutStatusListComponent } from './about-status-list/about-status-list.component';
+import { ModuleListComponent } from './about-module-list/module-list.component';
+import { AboutPlatformVersionComponent } from './about-platform-version/about-platform-version.component';
+import { AboutComponent } from './about.component';
@NgModule({
imports: [
CommonModule,
MaterialModule,
- TranslateModule,
- DataTableModule
+ TranslateModule
],
declarations: [
- AboutApplicationModulesComponent,
- AboutProductVersionComponent,
+ AboutComponent,
+ AboutPlatformVersionComponent,
AboutGithubLinkComponent,
- AboutServerSettingsComponent
+ AboutServerSettingsComponent,
+ AboutExtensionListComponent,
+ AboutLicenseListComponent,
+ PackageListComponent,
+ AboutStatusListComponent,
+ ModuleListComponent
],
exports: [
- AboutApplicationModulesComponent,
- AboutProductVersionComponent,
+ AboutComponent,
+ AboutPlatformVersionComponent,
AboutGithubLinkComponent,
- AboutServerSettingsComponent
+ AboutServerSettingsComponent,
+ AboutExtensionListComponent,
+ AboutLicenseListComponent,
+ PackageListComponent,
+ AboutStatusListComponent,
+ ModuleListComponent
]
})
export class AboutModule {}
diff --git a/lib/core/about/interfaces.ts b/lib/core/about/interfaces.ts
new file mode 100644
index 0000000000..335714804a
--- /dev/null
+++ b/lib/core/about/interfaces.ts
@@ -0,0 +1,31 @@
+/*!
+ * @license
+ * Copyright 2019 Alfresco Software, Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export interface PackageInfo {
+ name: string;
+ version: string;
+}
+
+export interface StatusData {
+ property: string;
+ value: string;
+}
+
+export interface LicenseData {
+ property: string;
+ value: string;
+}
diff --git a/lib/core/about/public-api.ts b/lib/core/about/public-api.ts
index 5aa4f1202f..d0da8a26d4 100644
--- a/lib/core/about/public-api.ts
+++ b/lib/core/about/public-api.ts
@@ -15,9 +15,14 @@
* limitations under the License.
*/
+export * from './about-extension-list/about-extension-list.component';
export * from './about-github-link/about-github-link.component';
-export * from './about-product-version/about-product-version.component';
-export * from './about-application-modules/about-application-modules.component';
+export * from './about-license-list/about-license-list.component';
+export * from './about-module-list/module-list.component';
+export * from './about-package/package-list.component';
+export * from './about-platform-version/about-platform-version.component';
export * from './about-server-settings/about-server-settings.component';
+export * from './about-status-list/about-status-list.component';
+export * from './about.component';
export * from './about.module';
diff --git a/lib/core/about/services/aae-info.service.ts b/lib/core/about/services/aae-info.service.ts
new file mode 100644
index 0000000000..a3745aacc8
--- /dev/null
+++ b/lib/core/about/services/aae-info.service.ts
@@ -0,0 +1,55 @@
+/*!
+ * @license
+ * Copyright 2019 Alfresco Software, Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { Injectable } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import { map } from 'rxjs/operators';
+import { Observable } from 'rxjs';
+import { AppConfigService } from '../../app-config/app-config.service';
+
+export interface ActivitiDependencyInfo {
+ artifact: string;
+ version: string;
+ activiti: string;
+}
+
+@Injectable({
+ providedIn: 'root'
+})
+export class AaeInfoService {
+ contextRoot = '';
+
+ constructor(protected httpClient: HttpClient, protected appConfigService: AppConfigService) {
+ this.contextRoot = appConfigService.get('bpmHost', '');
+ }
+
+ getServiceVersion(serviceName: string): Observable {
+ return this.httpClient.get(`${this.contextRoot}/${serviceName}/actuator/info`).pipe(
+ map((response: any) => {
+ let activitiVersion = 'N/A';
+ if (response.build.activiti) {
+ activitiVersion = response.build.activiti.version;
+ }
+ return {
+ artifact: response.build.artifact,
+ version: response.build.version,
+ activiti: activitiVersion
+ };
+ })
+ );
+ }
+}
diff --git a/lib/core/card-view/components/card-view-textitem/card-view-textitem.component.spec.ts b/lib/core/card-view/components/card-view-textitem/card-view-textitem.component.spec.ts
index 6f2fd93119..77739e086b 100644
--- a/lib/core/card-view/components/card-view-textitem/card-view-textitem.component.spec.ts
+++ b/lib/core/card-view/components/card-view-textitem/card-view-textitem.component.spec.ts
@@ -22,7 +22,10 @@ import { CardViewUpdateService } from '../../services/card-view-update.service';
import { CardViewTextItemComponent } from './card-view-textitem.component';
import { setupTestBed } from '../../../testing/setup-test-bed';
import { CoreTestingModule } from '../../../testing/core.testing.module';
-import { CardViewItemFloatValidator, CardViewItemIntValidator, CardViewIntItemModel, CardViewFloatItemModel } from '@alfresco/adf-core';
+import { CardViewItemFloatValidator } from '../../validators/card-view-item-float.validator';
+import { CardViewItemIntValidator } from '../../validators/card-view-item-int.validator';
+import { CardViewIntItemModel } from '../../models/card-view-intitem.model';
+import { CardViewFloatItemModel } from '../../models/card-view-floatitem.model';
import { MatChipsModule } from '@angular/material/chips';
import { ClipboardService } from '../../../clipboard/clipboard.service';
import { DebugElement, SimpleChange } from '@angular/core';
diff --git a/lib/core/datatable/components/datatable-cell/datatable-cell.component.spec.ts b/lib/core/datatable/components/datatable-cell/datatable-cell.component.spec.ts
index 9ce65ccee3..6d68b43e48 100644
--- a/lib/core/datatable/components/datatable-cell/datatable-cell.component.spec.ts
+++ b/lib/core/datatable/components/datatable-cell/datatable-cell.component.spec.ts
@@ -17,7 +17,7 @@
import { DateCellComponent } from '../date-cell/date-cell.component';
import { Subject } from 'rxjs';
-import { AppConfigService } from '@alfresco/adf-core';
+import { AppConfigService } from '../../../app-config/app-config.service';
import { Node } from '@alfresco/js-api';
import { TestBed } from '@angular/core/testing';
import { CoreTestingModule } from '../../../testing';
diff --git a/lib/core/directives/logout.directive.spec.ts b/lib/core/directives/logout.directive.spec.ts
index 12ba34dc88..b9730613a1 100644
--- a/lib/core/directives/logout.directive.spec.ts
+++ b/lib/core/directives/logout.directive.spec.ts
@@ -20,7 +20,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
import { Router } from '@angular/router';
import { of, throwError } from 'rxjs';
import { AuthenticationService } from '../services';
-import { AppConfigService } from '../app-config';
+import { AppConfigService } from '../app-config/app-config.service';
import { setupTestBed } from '../testing/setup-test-bed';
import { LogoutDirective } from './logout.directive';
import { CoreTestingModule } from '../testing/core.testing.module';
diff --git a/lib/core/directives/version-compatibility.directive.spec.ts b/lib/core/directives/version-compatibility.directive.spec.ts
index 7cd3c7dc55..26968154d6 100644
--- a/lib/core/directives/version-compatibility.directive.spec.ts
+++ b/lib/core/directives/version-compatibility.directive.spec.ts
@@ -22,7 +22,7 @@ import { TestBed, ComponentFixture } from '@angular/core/testing';
import { setupTestBed } from '../testing/setup-test-bed';
import { CoreTestingModule } from '../testing/core.testing.module';
import { VersionCompatibilityService } from '../services/version-compatibility.service';
-import { VersionModel } from '../models/product-version.model';
+import { VersionInfo } from '@alfresco/js-api';
@Component({
template: `
@@ -52,7 +52,7 @@ describe('VersionCompatibilityDirective', () => {
let fixture: ComponentFixture;
let versionCompatibilityService: VersionCompatibilityService;
- const acsResponceMock = new VersionModel({
+ const acsResponceMock = new VersionInfo({
display: '7.0.1',
major: '7',
minor: '0',
diff --git a/lib/core/i18n/en.json b/lib/core/i18n/en.json
index 3452a1161f..87e00282b3 100644
--- a/lib/core/i18n/en.json
+++ b/lib/core/i18n/en.json
@@ -44,7 +44,7 @@
"REQUIRED": "*Required",
"FILE_NAME": "File Name",
"DEPENDS_ON": "Depends on: {{widgetId}}",
- "NO_FILE_ATTACHED" : "No file attached",
+ "NO_FILE_ATTACHED": "No file attached",
"VALIDATOR": {
"INVALID_NUMBER": "Use a different number format",
"INVALID_DATE": "Use a different date format",
@@ -55,7 +55,7 @@
"NO_LONGER_THAN": "Enter no more than {{ maxLength }} characters"
},
"FILE_ALREADY_UPLOADED": "A file with the same name is already uploaded.",
- "ATTACH":"Attach"
+ "ATTACH": "Attach"
},
"FORM_RENDERER": {
"NAMELESS_TASK": "Nameless task"
@@ -186,7 +186,7 @@
"SILENT": "Silent Login",
"SCOPE": "Scope",
"CLIENT": "Client ID",
- "PUBLIC_URLS" : "Public urls silent Login"
+ "PUBLIC_URLS": "Public urls silent Login"
},
"CARDVIEW": {
"KEYVALUEPAIRS": {
@@ -220,15 +220,15 @@
"CONTENT_TYPE": "Content Type"
},
"CONTENT_TYPE": {
- "DIALOG" :{
- "TITLE" : "Change content type",
+ "DIALOG": {
+ "TITLE": "Change content type",
"DESCRIPTION": "Making this change to the content type will permanently add some properties and stored metadata to the document.",
"CONFIRM": "Are you sure you want to change the content type?",
"CANCEL": "CANCEL",
"APPLY": "Save Changes",
"VIEW_DETAILS": "View details",
- "PROPERTY" :{
- "NAME" : "Name",
+ "PROPERTY": {
+ "NAME": "Name",
"DESCRIPTION": "Description",
"DATA_TYPE": "Data type"
}
@@ -493,14 +493,17 @@
"VERSION": "Version",
"SERVER_SETTINGS": {
"TITLE": "Server settings",
- "DESCRIPTION": "The values below are taken from the AppConfigService",
"CONTENT_SERVICE_HOST": "Alfresco Content Services URL: {{ value }}",
"PROCESS_SERVICE_HOST": "Alfresco Process Services URL: {{ value }}"
},
"VERSIONS": {
"TITLE": "Product Versions",
- "CONTENT_SERVICE": "ECM",
- "PROCESS_SERVICE": "BPM",
+ "CONTENT_SERVICE": "Content Services",
+ "PROCESS_SERVICE": "Process Services",
+ "MODELING_SERVICE": "Modeling Services",
+ "DEPLOYMENT_SERVICE": "Deployment Services",
+ "QUERY_SERVICE": "Deployment Services",
+ "RB": "Runtime",
"LABELS": {
"EDITION": "Edition",
"VERSION": "Version",
@@ -515,33 +518,8 @@
},
"PACKAGES": {
"TITLE": "Packages",
- "DESCRIPTION": "Current project is using the following ADF libraries:"
- },
- "TABLE_HEADERS": {
- "MODULES": {
- "ID": "ID",
- "TITLE": "Title",
- "DESCRIPTION": "Description",
- "INSTALL_DATE": "Install Date",
- "INSTALL_STATE": "Install State",
- "VERSION_MIN": "Version Minor",
- "VERSION_MAX": "Version Max"
- },
- "STATUS": {
- "READ_ONLY": "ReadOnly",
- "AUDIT_ENABLED": "Is Audit Enabled",
- "QUICK_SHARE_ENABLED": "Is Quick Shared Enabled",
- "THUMBNAIL_ENABLED": "Thumbnail Generation"
- },
- "LICENSE": {
- "ISSUES_AT": "Issued At",
- "EXPIRES_AT": "Expires At",
- "REMAINING_DAYS": "Remaining Days",
- "HOLDER": "Holder",
- "MODE": "Mode",
- "CLUSTER_ENABLED": "Is Cluster Enabled",
- "CRYPTODOC_ENABLED": "Is Cryptodoc Enabled"
- }
+ "NAME": "Name",
+ "VERSION": "Version"
},
"EXTENSIONS": {
"TITLE": "Plugins",
@@ -554,6 +532,26 @@
"RUNTIME": "Runtime",
"DESCRIPTION": "Description"
}
+ },
+ "LICENSE": {
+ "TITLE": "License",
+ "PROPERTY": "Property",
+ "VALUE": "Value"
+ },
+ "STATUS": {
+ "TITLE": "Status",
+ "PROPERTY": "Property",
+ "VALUE": "Value"
+ },
+ "MODULES": {
+ "TITLE": "Modules",
+ "NAME": "Name",
+ "VERSION": "Version"
+ },
+ "PLUGINS": {
+ "TITLE": "Plugins",
+ "NAME": "Name",
+ "VERSION": "Version"
}
},
"CLIPBOARD": {
diff --git a/lib/core/layout/components/sidenav-layout/sidenav-layout.component.spec.ts b/lib/core/layout/components/sidenav-layout/sidenav-layout.component.spec.ts
index 7f77e0a40e..c04756f341 100644
--- a/lib/core/layout/components/sidenav-layout/sidenav-layout.component.spec.ts
+++ b/lib/core/layout/components/sidenav-layout/sidenav-layout.component.spec.ts
@@ -31,7 +31,7 @@ import { UserPreferencesService } from '../../../services/user-preferences.servi
import { CommonModule } from '@angular/common';
import { Direction } from '@angular/cdk/bidi';
import { of } from 'rxjs';
-import { setupTestBed } from '@alfresco/adf-core';
+import { setupTestBed } from '../../../testing/setup-test-bed';
@Component({
selector: 'adf-layout-container',
diff --git a/lib/core/mock/authentication.service.mock.ts b/lib/core/mock/authentication.service.mock.ts
index 0ec665ce09..1cb41d2ddc 100644
--- a/lib/core/mock/authentication.service.mock.ts
+++ b/lib/core/mock/authentication.service.mock.ts
@@ -18,22 +18,29 @@
import { Observable, of, throwError } from 'rxjs';
import { RedirectionModel } from '../models/redirection.model';
-// TODO: should be extending AuthenticationService
-export class AuthenticationMock /*extends AuthenticationService*/ {
+export class AuthenticationMock {
private redirectUrl: RedirectionModel = null;
setRedirectUrl(url: RedirectionModel) {
this.redirectUrl = url;
}
- getRedirectUrl(): string|null {
+ isEcmLoggedIn(): boolean {
+ return true;
+ }
+
+ isBpmLoggedIn(): boolean {
+ return true;
+ }
+
+ getRedirectUrl(): string | null {
return this.redirectUrl ? this.redirectUrl.url : null;
}
// TODO: real auth service returns Observable
login(username: string, password: string): Observable<{ type: string, ticket: any }> {
if (username === 'fake-username' && password === 'fake-password') {
- return of({ type: 'type', ticket: 'ticket'});
+ return of({ type: 'type', ticket: 'ticket' });
}
if (username === 'fake-username-CORS-error' && password === 'fake-password') {
@@ -46,11 +53,14 @@ export class AuthenticationMock /*extends AuthenticationService*/ {
}
if (username === 'fake-username-CSRF-error' && password === 'fake-password') {
- return throwError({message: 'ERROR: Invalid CSRF-token', status: 403});
+ return throwError({ message: 'ERROR: Invalid CSRF-token', status: 403 });
}
if (username === 'fake-username-ECM-access-error' && password === 'fake-password') {
- return throwError({message: 'ERROR: 00170728 Access Denied. The system is currently in read-only mode', status: 403});
+ return throwError({
+ message: 'ERROR: 00170728 Access Denied. The system is currently in read-only mode',
+ status: 403
+ });
}
return throwError('Fake server error');
diff --git a/lib/core/mock/discovery-api.service.mock.ts b/lib/core/mock/discovery-api.service.mock.ts
new file mode 100644
index 0000000000..62fdbd2d9d
--- /dev/null
+++ b/lib/core/mock/discovery-api.service.mock.ts
@@ -0,0 +1,117 @@
+/*!
+ * @license
+ * Copyright 2019 Alfresco Software, Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* tslint:disable */
+import { Injectable } from '@angular/core';
+import { Observable, Subject, of } from 'rxjs';
+import { BpmProductVersionModel } from '../models/product-version.model';
+import {
+ RepositoryInfo,
+ SystemPropertiesRepresentation
+} from '@alfresco/js-api';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class DiscoveryApiServiceMock {
+
+ /**
+ * Gets product information for Content Services.
+ */
+ ecmProductInfo$ = new Subject();
+
+ public getEcmProductInfo(): Observable {
+ return of({
+ edition: 'Enterprise',
+ version: {
+ major: '7',
+ minor: '2',
+ patch: '0',
+ hotfix: '0',
+ schema: 16000,
+ label: 'rde8705d0-blocal',
+ display: '7.2.0.0 (rde8705d0-blocal) schema 16000'
+ },
+ license: {
+ issuedAt: '2021-11-10T23:30:30.234+0000',
+ expiresAt: '2021-11-12T00:00:00.000+0000',
+ remainingDays: 1,
+ holder: 'Trial User',
+ mode: 'ENTERPRISE',
+ entitlements: { isClusterEnabled: true, isCryptodocEnabled: false }
+ },
+ status: {
+ isReadOnly: false,
+ isAuditEnabled: true,
+ isQuickShareEnabled: true,
+ isThumbnailGenerationEnabled: true,
+ isDirectAccessUrlEnabled: true
+ },
+ modules: [{
+ id: 'org_alfresco_module_rm',
+ title: 'AGS Repo',
+ description: 'Alfresco Governance Services Repository Extension',
+ version: '14.26',
+ installState: 'UNKNOWN',
+ versionMin: '7.0.0',
+ versionMax: '999'
+ }, {
+ id: 'org_alfresco_integrations_S3Connector',
+ title: 'S3 Connector',
+ description: 'Provides Amazon S3 content storage for the contentstore and deleted contentstore',
+ version: '5.0.0-A1',
+ installDate: '2021-11-10T23:29:19.560+0000',
+ installState: 'INSTALLED',
+ versionMin: '7.2',
+ versionMax: '999'
+ }, {
+ id: 'alfresco-trashcan-cleaner',
+ title: 'alfresco-trashcan-cleaner project',
+ description: 'The Alfresco Trashcan Cleaner (Alfresco Module)',
+ version: '2.4.1',
+ installState: 'UNKNOWN',
+ versionMin: '0',
+ versionMax: '999'
+ }, {
+ id: 'alfresco-content-connector-for-salesforce-repo',
+ title: 'Alfresco Content Connector for Salesforce Repository AMP',
+ description: 'Alfresco Repository artifacts needed for the Alfresco Content Connector for Salesforce Repository Amp',
+ version: '2.3.0.3',
+ installDate: '2021-11-10T23:29:18.918+0000',
+ installState: 'INSTALLED',
+ versionMin: '6.2.0',
+ versionMax: '999'
+ }]
+ });
+ }
+
+ public getBpmProductInfo(): Observable {
+ return of({
+ revisionVersion: '0-RC1',
+ edition: 'Alfresco Process Services (powered by Activiti)',
+ type: 'bpmSuite',
+ majorVersion: '2',
+ minorVersion: '1'
+ });
+ }
+
+ public getBPMSystemProperties(): Observable {
+ return of({});
+ }
+}
+
+/* tslint:enable */
diff --git a/lib/core/models/product-version.model.ts b/lib/core/models/product-version.model.ts
index c9365e470f..f3ac52b29b 100644
--- a/lib/core/models/product-version.model.ts
+++ b/lib/core/models/product-version.model.ts
@@ -32,110 +32,3 @@ export class BpmProductVersionModel {
}
}
}
-
-export class VersionModel {
- major: string;
- minor: string;
- patch: string;
- hotfix: string;
- schema: number;
- label: string;
- display: string;
-
- constructor(obj?: any) {
- if (obj) {
- this.major = obj.major || null;
- this.minor = obj.minor || null;
- this.patch = obj.patch || null;
- this.hotfix = obj.hotfix || null;
- this.schema = obj.schema || null;
- this.label = obj.label || null;
- this.display = obj.display || null;
- }
- }
-}
-
-export class LicenseModel {
- issuedAt: string;
- expiresAt: string;
- remainingDays: number;
- holder: string;
- mode: string;
- isClusterEnabled: boolean;
- isCryptodocEnabled: boolean;
-
- constructor(obj?: any) {
- if (obj) {
- this.issuedAt = obj.issuedAt || null;
- this.expiresAt = obj.expiresAt || null;
- this.remainingDays = obj.remainingDays || null;
- this.holder = obj.holder || null;
- this.mode = obj.mode || null;
- this.isClusterEnabled = !!obj.isClusterEnabled;
- this.isCryptodocEnabled = !!obj.isCryptodocEnabled;
- }
- }
-}
-
-export class VersionStatusModel {
- isReadOnly: boolean;
- isAuditEnabled: boolean;
- isQuickShareEnabled: boolean;
- isThumbnailGenerationEnabled: boolean;
-
- constructor(obj?: any) {
- if (obj) {
- this.isReadOnly = !!obj.isReadOnly;
- this.isAuditEnabled = !!obj.isAuditEnabled;
- this.isQuickShareEnabled = !!obj.isQuickShareEnabled;
- this.isThumbnailGenerationEnabled = !!obj.isThumbnailGenerationEnabled;
- }
- }
-}
-
-export class VersionModuleModel {
- id: string;
- title: string;
- description: string;
- version: string;
- installDate: string;
- installState: string;
- versionMin: string;
- versionMax: string;
-
- constructor(obj?: any) {
- if (obj) {
- this.id = obj.id || null;
- this.title = obj.title || null;
- this.description = obj.description || null;
- this.version = obj.version || null;
- this.installDate = obj.installDate || null;
- this.installState = obj.installState || null;
- this.versionMin = obj.versionMin || null;
- this.versionMax = obj.versionMax || null;
- }
- }
-}
-
-export class EcmProductVersionModel {
- edition: string;
- version: VersionModel;
- license: LicenseModel;
- status: VersionStatusModel;
- modules: VersionModuleModel[] = [];
-
- constructor(obj?: any) {
- if (obj && obj.entry && obj.entry.repository) {
- this.edition = obj.entry.repository.edition || null;
- this.version = new VersionModel(obj.entry.repository.version);
- this.license = new LicenseModel(obj.entry.repository.license);
- this.status = new VersionStatusModel(obj.entry.repository.status);
- if (obj.entry.repository.modules) {
- obj.entry.repository.modules.forEach((module) => {
- this.modules.push(new VersionModuleModel(module));
- });
- }
- }
- }
-
-}
diff --git a/lib/core/services/discovery-api.service.ts b/lib/core/services/discovery-api.service.ts
index d738bddad0..8259f246ab 100644
--- a/lib/core/services/discovery-api.service.ts
+++ b/lib/core/services/discovery-api.service.ts
@@ -17,10 +17,11 @@
import { Injectable } from '@angular/core';
import { from, Observable, throwError, Subject } from 'rxjs';
-import { BpmProductVersionModel, EcmProductVersionModel } from '../models/product-version.model';
-import { AlfrescoApiService } from './alfresco-api.service';
import { catchError, map, switchMap, filter, take } from 'rxjs/operators';
-import { AboutApi, DiscoveryApi, SystemPropertiesApi, SystemPropertiesRepresentation } from '@alfresco/js-api';
+import { AboutApi, DiscoveryApi, RepositoryInfo, SystemPropertiesApi, SystemPropertiesRepresentation } from '@alfresco/js-api';
+
+import { BpmProductVersionModel } from '../models/product-version.model';
+import { AlfrescoApiService } from './alfresco-api.service';
import { AuthenticationService } from './authentication.service';
@Injectable({
@@ -31,7 +32,7 @@ export class DiscoveryApiService {
/**
* Gets product information for Content Services.
*/
- ecmProductInfo$ = new Subject();
+ ecmProductInfo$ = new Subject();
constructor(
private apiService: AlfrescoApiService,
@@ -50,12 +51,12 @@ export class DiscoveryApiService {
* Gets product information for Content Services.
* @returns ProductVersionModel containing product details
*/
- public getEcmProductInfo(): Observable {
+ public getEcmProductInfo(): Observable {
const discoveryApi = new DiscoveryApi(this.apiService.getInstance());
return from(discoveryApi.getRepositoryInformation())
.pipe(
- map((res) => new EcmProductVersionModel(res)),
+ map((res) => res.entry.repository),
catchError((err) => throwError(err))
);
}
diff --git a/lib/core/services/identity-group.service.spec.ts b/lib/core/services/identity-group.service.spec.ts
index 82837e0788..a712c00f28 100644
--- a/lib/core/services/identity-group.service.spec.ts
+++ b/lib/core/services/identity-group.service.spec.ts
@@ -16,7 +16,11 @@
*/
import { fakeAsync, TestBed } from '@angular/core/testing';
-import { setupTestBed, AlfrescoApiService, IdentityGroupService, IdentityGroupSearchParam } from '@alfresco/adf-core';
+import { setupTestBed } from '../testing/setup-test-bed';
+import { AlfrescoApiService } from './alfresco-api.service';
+import { IdentityGroupService } from './identity-group.service';
+import { IdentityGroupSearchParam } from '../models/identity-group.model';
+
import { HttpErrorResponse } from '@angular/common/http';
import { throwError, of } from 'rxjs';
import {
diff --git a/lib/core/services/identity-role.service.spec.ts b/lib/core/services/identity-role.service.spec.ts
index 01af1ed581..38e2c4b2a3 100644
--- a/lib/core/services/identity-role.service.spec.ts
+++ b/lib/core/services/identity-role.service.spec.ts
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-import { setupTestBed } from '@alfresco/adf-core';
+import { setupTestBed } from '../testing/setup-test-bed';
import { HttpClientModule, HttpErrorResponse, HttpResponse } from '@angular/common/http';
import { TestBed } from '@angular/core/testing';
import { of, throwError } from 'rxjs';
diff --git a/lib/core/services/upload.service.spec.ts b/lib/core/services/upload.service.spec.ts
index e2b4bcbec7..40d53c6c4b 100644
--- a/lib/core/services/upload.service.spec.ts
+++ b/lib/core/services/upload.service.spec.ts
@@ -24,11 +24,10 @@ import { AppConfigService } from '../app-config/app-config.service';
import { setupTestBed } from '../testing/setup-test-bed';
import { CoreTestingModule } from '../testing/core.testing.module';
-import { AssocChildBody, AssociationBody } from '@alfresco/js-api';
+import { AssocChildBody, AssociationBody, RepositoryInfo } from '@alfresco/js-api';
import { TranslateModule } from '@ngx-translate/core';
import { DiscoveryApiService } from './discovery-api.service';
import { BehaviorSubject } from 'rxjs';
-import { EcmProductVersionModel } from '../models';
declare let jasmine: any;
@@ -37,7 +36,7 @@ describe('UploadService', () => {
let appConfigService: AppConfigService;
let uploadFileSpy: jasmine.Spy;
- const mockProductInfo = new BehaviorSubject(null);
+ const mockProductInfo = new BehaviorSubject(null);
setupTestBed({
imports: [
@@ -82,7 +81,7 @@ describe('UploadService', () => {
uploadFileSpy = spyOn(service.uploadApi, 'uploadFile').and.callThrough();
jasmine.Ajax.install();
- mockProductInfo.next({ status: { isThumbnailGenerationEnabled: true } } as EcmProductVersionModel);
+ mockProductInfo.next({ status: { isThumbnailGenerationEnabled: true } } as RepositoryInfo);
});
afterEach(() => {
@@ -539,7 +538,7 @@ describe('UploadService', () => {
});
it('Should not pass rendition if it is disabled', () => {
- mockProductInfo.next({ status: { isThumbnailGenerationEnabled: false } } as EcmProductVersionModel);
+ mockProductInfo.next({ status: { isThumbnailGenerationEnabled: false } } as RepositoryInfo);
const filesFake = new FileModel(
{ name: 'fake-name', size: 10 },
diff --git a/lib/core/services/version-compatibility.service.spec.ts b/lib/core/services/version-compatibility.service.spec.ts
index b2616b9082..3c44a05dd7 100644
--- a/lib/core/services/version-compatibility.service.spec.ts
+++ b/lib/core/services/version-compatibility.service.spec.ts
@@ -22,12 +22,12 @@ import { CoreTestingModule } from '../testing/core.testing.module';
import { VersionCompatibilityService } from './version-compatibility.service';
import { BehaviorSubject } from 'rxjs';
import { TranslateModule } from '@ngx-translate/core';
-import { EcmProductVersionModel } from './../models/product-version.model';
+import { RepositoryInfo } from '@alfresco/js-api';
describe('VersionCompatibilityService', () => {
let versionCompatibilityService: VersionCompatibilityService;
let discoveryApiService: DiscoveryApiService;
- const mockProductInfo = new BehaviorSubject(null);
+ const mockProductInfo = new BehaviorSubject(null);
const acsResponceMock = {
version: {
@@ -56,7 +56,7 @@ describe('VersionCompatibilityService', () => {
beforeEach(async () => {
discoveryApiService = TestBed.inject(DiscoveryApiService);
versionCompatibilityService = TestBed.inject(VersionCompatibilityService);
- mockProductInfo.next(acsResponceMock as EcmProductVersionModel);
+ mockProductInfo.next(acsResponceMock as RepositoryInfo);
versionCompatibilityService = new VersionCompatibilityService(discoveryApiService);
});
diff --git a/lib/core/services/version-compatibility.service.ts b/lib/core/services/version-compatibility.service.ts
index 542107091d..dd61ec1226 100644
--- a/lib/core/services/version-compatibility.service.ts
+++ b/lib/core/services/version-compatibility.service.ts
@@ -16,31 +16,31 @@
*/
import { Injectable } from '@angular/core';
-import { DiscoveryApiService } from './discovery-api.service';
-import { VersionModel, EcmProductVersionModel } from '../models/product-version.model';
import { filter } from 'rxjs/operators';
import { ReplaySubject } from 'rxjs';
+import { VersionInfo, RepositoryInfo } from '@alfresco/js-api';
+import { DiscoveryApiService } from './discovery-api.service';
@Injectable({
providedIn: 'root'
})
export class VersionCompatibilityService {
- private acsVersion: VersionModel;
+ private acsVersion: VersionInfo;
acsVersionInitialized$ = new ReplaySubject();
constructor(private discoveryApiService: DiscoveryApiService) {
this.discoveryApiService.ecmProductInfo$
.pipe(filter(acsInfo => !!acsInfo))
- .subscribe((acsInfo: EcmProductVersionModel) => this.initializeAcsVersion(acsInfo.version));
+ .subscribe((acsInfo: RepositoryInfo) => this.initializeAcsVersion(acsInfo.version));
}
- private initializeAcsVersion(acsVersion: VersionModel) {
+ private initializeAcsVersion(acsVersion: VersionInfo) {
this.acsVersion = acsVersion;
this.acsVersionInitialized$.next();
}
- getAcsVersion(): VersionModel {
+ getAcsVersion(): VersionInfo {
return this.acsVersion;
}
@@ -66,7 +66,7 @@ export class VersionCompatibilityService {
return versionSupported;
}
- private parseVersion(version: string): VersionModel {
+ private parseVersion(version: string): VersionInfo {
const major = version.split('.')[0];
const minor = version.split('.')[1] || '0';
const patch = version.split('.')[2] || '0';
@@ -75,6 +75,6 @@ export class VersionCompatibilityService {
major: major,
minor: minor,
patch: patch
- } as VersionModel;
+ } as VersionInfo;
}
}
diff --git a/lib/core/templates/empty-content/empty-content.component.spec.ts b/lib/core/templates/empty-content/empty-content.component.spec.ts
index 8452da96fe..5366437c65 100644
--- a/lib/core/templates/empty-content/empty-content.component.spec.ts
+++ b/lib/core/templates/empty-content/empty-content.component.spec.ts
@@ -18,7 +18,7 @@
import { Component } from '@angular/core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
-import { setupTestBed } from '@alfresco/adf-core';
+import { setupTestBed } from '../../testing/setup-test-bed';
import { TranslateService, TranslateModule } from '@ngx-translate/core';
import { of } from 'rxjs';
import { CoreTestingModule } from '../../testing/core.testing.module';
diff --git a/lib/core/testing/core.story.module.ts b/lib/core/testing/core.story.module.ts
index 0b96b4ff9b..ce00c96b8a 100644
--- a/lib/core/testing/core.story.module.ts
+++ b/lib/core/testing/core.story.module.ts
@@ -19,12 +19,23 @@ import { NgModule } from '@angular/core';
import { CoreModule } from '../core.module';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { TranslateModule } from '@ngx-translate/core';
+import { TRANSLATION_PROVIDER } from '../services/translation.service';
@NgModule({
imports: [
TranslateModule.forRoot(),
CoreModule.forRoot(),
BrowserAnimationsModule
+ ],
+ providers: [
+ {
+ provide: TRANSLATION_PROVIDER,
+ multi: true,
+ useValue: {
+ name: 'adf-core',
+ source: 'assets/adf-core'
+ }
+ }
]
})
export class CoreStoryModule { }
diff --git a/lib/core/viewer/components/img-viewer.component.spec.ts b/lib/core/viewer/components/img-viewer.component.spec.ts
index 15d74ee931..29f5ebef24 100644
--- a/lib/core/viewer/components/img-viewer.component.spec.ts
+++ b/lib/core/viewer/components/img-viewer.component.spec.ts
@@ -20,7 +20,7 @@ import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testin
import { ContentService } from '../../services/content.service';
import { ImgViewerComponent } from './img-viewer.component';
import { setupTestBed, CoreTestingModule } from '../../testing';
-import { AppConfigService } from '@alfresco/adf-core';
+import { AppConfigService } from '../../app-config/app-config.service';
import { TranslateModule } from '@ngx-translate/core';
import { By } from '@angular/platform-browser';
diff --git a/lib/core/viewer/components/pdf-viewer.component.spec.ts b/lib/core/viewer/components/pdf-viewer.component.spec.ts
index ed0e8de860..8920473dd6 100644
--- a/lib/core/viewer/components/pdf-viewer.component.spec.ts
+++ b/lib/core/viewer/components/pdf-viewer.component.spec.ts
@@ -25,7 +25,7 @@ import { MatDialog } from '@angular/material/dialog';
import { of } from 'rxjs';
import { setupTestBed } from '../../testing/setup-test-bed';
import { take } from 'rxjs/operators';
-import { AppConfigService } from '@alfresco/adf-core';
+import { AppConfigService } from '../../app-config/app-config.service';
import { CoreTestingModule } from '../../testing/core.testing.module';
import { TranslateModule } from '@ngx-translate/core';
diff --git a/lib/extensions/src/lib/mock/app-extension.service.mock.ts b/lib/extensions/src/lib/mock/app-extension.service.mock.ts
new file mode 100644
index 0000000000..7e54ebd008
--- /dev/null
+++ b/lib/extensions/src/lib/mock/app-extension.service.mock.ts
@@ -0,0 +1,39 @@
+/*!
+ * @license
+ * Copyright 2019 Alfresco Software, Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { Injectable } from '@angular/core';
+import { ExtensionRef } from '../config/extension.config';
+import { Observable, BehaviorSubject } from 'rxjs';
+import { ViewerExtensionRef } from '../config/viewer.extensions';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class AppExtensionServiceMock {
+ private _references = new BehaviorSubject([]);
+
+ references$: Observable;
+
+ constructor() {
+ this.references$ = this._references.asObservable();
+ }
+
+ getViewerExtensions(): ViewerExtensionRef[] {
+ return [];
+ }
+
+}
diff --git a/lib/extensions/src/lib/mock/public-api.ts b/lib/extensions/src/lib/mock/public-api.ts
new file mode 100644
index 0000000000..7d2c2a8f63
--- /dev/null
+++ b/lib/extensions/src/lib/mock/public-api.ts
@@ -0,0 +1,18 @@
+/*!
+ * @license
+ * Copyright 2019 Alfresco Software, Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export * from './app-extension.service.mock';
diff --git a/lib/extensions/src/public-api.ts b/lib/extensions/src/public-api.ts
index fbb2634d67..87b67a83ec 100644
--- a/lib/extensions/src/public-api.ts
+++ b/lib/extensions/src/public-api.ts
@@ -41,3 +41,5 @@ export * from './lib/store/states/repository.state';
export * from './lib/components/public-api';
export * from './lib/extensions.module';
+
+export * from './lib/mock/public-api';
diff --git a/lib/process-services-cloud/src/lib/form/public-api.ts b/lib/process-services-cloud/src/lib/form/public-api.ts
index f2e5533509..eca5f4f9fc 100644
--- a/lib/process-services-cloud/src/lib/form/public-api.ts
+++ b/lib/process-services-cloud/src/lib/form/public-api.ts
@@ -29,6 +29,7 @@ export * from './components/widgets/dropdown/dropdown-cloud.widget';
export * from './components/widgets/group/group-cloud.widget';
export * from './components/widgets/people/people-cloud.widget';
export * from './components/widgets/properties-viewer/properties-viewer.widget';
+export * from './components/widgets/radio-buttons/radio-buttons-cloud.widget';
export * from './services/content-cloud-node-selector.service';
export * from './services/form-cloud.service';