From e7c339f55394ad3c183ad0ce79db65c077d0983d Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Mon, 24 Sep 2018 09:22:44 -0700 Subject: [PATCH] SHIBUI-812 Integrated attribute release into backend --- backend/src/main/resources/application.yml | 24 ++++++------ .../resources/i18n/messages_en.properties | 15 +++++++- .../resources/i18n/messages_es.properties | 13 +++++++ .../attribute-release-form.component.html | 6 +-- .../model/properties/release-attribute.ts | 4 ++ .../domain/service/attributes.service.ts | 38 +++++++++++++++++++ 6 files changed, 84 insertions(+), 16 deletions(-) create mode 100644 ui/src/app/metadata/domain/model/properties/release-attribute.ts create mode 100644 ui/src/app/metadata/domain/service/attributes.service.ts diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml index b7ee1eabd..563d01073 100644 --- a/backend/src/main/resources/application.yml +++ b/backend/src/main/resources/application.yml @@ -2,27 +2,27 @@ custom: attributes: # Default attributes - name: eduPersonPrincipalName - displayName: eduPersonPrincipalName (EPPN) + displayName: label.attribute-eduPersonPrincipalName - name: uid - displayName: uid + displayName: label.attribute-uid - name: mail - displayName: mail + displayName: label.attribute-mail - name: surname - displayName: surname + displayName: label.attribute-surname - name: givenName - displayName: givenName + displayName: label.attribute-givenName - name: eduPersonAffiliation - displayName: eduPersonAffiliation + displayName: label.attribute-eduPersonAffiliation - name: eduPersonScopedAffiliation - displayName: eduPersonScopedAffiliation + displayName: label.attribute-eduPersonScopedAffiliation - name: eduPersonPrimaryAffiliation - displayName: eduPersonPrimaryAffiliation + displayName: label.attribute-eduPersonPrimaryAffiliation - name: eduPersonEntitlement - displayName: eduPersonEntitlement + displayName: label.attribute-eduPersonEntitlement - name: eduPersonAssurance - displayName: eduPersonAssurance + displayName: label.attribute-eduPersonAssurance - name: eduPersonUniqueId - displayName: eduPersonUniqueId + displayName: label.attribute-eduPersonUniqueId - name: employeeNumber - displayName: employeeNumber + displayName: label.attribute-employeeNumber # Custom attributes diff --git a/backend/src/main/resources/i18n/messages_en.properties b/backend/src/main/resources/i18n/messages_en.properties index 2c6a755ab..607e2a38b 100644 --- a/backend/src/main/resources/i18n/messages_en.properties +++ b/backend/src/main/resources/i18n/messages_en.properties @@ -8,7 +8,7 @@ action.clear=Clear action.delete=Delete action.remove=Remove action.save=Save -action.toggle=Toggle { label } +action.toggle=Toggle action.add-contact=Add Contact action.add-contacts=Add Contacts action.use-mine=Use My Changes @@ -284,6 +284,19 @@ label.retained-roles=Retained Roles label.remove-roleless-entity-descriptors=Remove Roleless Entity Descriptors? label.remove-empty-entities-descriptors=Remove Empty Entities Descriptors? +label.attribute-eduPersonPrincipalName=eduPersonPrincipalName (EPPN) +label.attribute-uid=uid +label.attribute-mail=mail +label.attribute-surname=surname +label.attribute-givenName=givenName +label.attribute-eduPersonAffiliation=eduPersonAffiliation +label.attribute-eduPersonScopedAffiliation=eduPersonScopedAffiliation +label.attribute-eduPersonPrimaryAffiliation=eduPersonPrimaryAffiliation +label.attribute-eduPersonEntitlement=eduPersonEntitlement +label.attribute-eduPersonAssurance=eduPersonAssurance +label.attribute-eduPersonUniqueId=eduPersonUniqueId +label.attribute-employeeNumber=employeeNumber + message.must-be-unique=Must be unique. message.conflict=Conflict diff --git a/backend/src/main/resources/i18n/messages_es.properties b/backend/src/main/resources/i18n/messages_es.properties index f90cad6a4..9fa3c547e 100644 --- a/backend/src/main/resources/i18n/messages_es.properties +++ b/backend/src/main/resources/i18n/messages_es.properties @@ -284,6 +284,19 @@ label.retained-roles=(es) Retained Roles label.remove-roleless-entity-descriptors=(es) Remove Roleless Entity Descriptors? label.remove-empty-entities-descriptors=(es) Remove Empty Entities Descriptors? +label.attribute-eduPersonPrincipalName=(es) eduPersonPrincipalName (EPPN) +label.attribute-uid=(es) uid +label.attribute-mail=(es) mail +label.attribute-surname=(es) surname +label.attribute-givenName=(es) givenName +label.attribute-eduPersonAffiliation=(es) eduPersonAffiliation +label.attribute-eduPersonScopedAffiliation=(es) eduPersonScopedAffiliation +label.attribute-eduPersonPrimaryAffiliation=(es) eduPersonPrimaryAffiliation +label.attribute-eduPersonEntitlement=(es) eduPersonEntitlement +label.attribute-eduPersonAssurance=(es) eduPersonAssurance +label.attribute-eduPersonUniqueId=(es) eduPersonUniqueId +label.attribute-employeeNumber=(es) employeeNumber + message.must-be-unique=(es) Must be unique. message.conflict=(es) Conflict diff --git a/ui/src/app/metadata/domain/component/forms/attribute-release-form.component.html b/ui/src/app/metadata/domain/component/forms/attribute-release-form.component.html index f6e70f5c2..9ee740517 100644 --- a/ui/src/app/metadata/domain/component/forms/attribute-release-form.component.html +++ b/ui/src/app/metadata/domain/component/forms/attribute-release-form.component.html @@ -10,7 +10,7 @@ - {{ attr.label }} + {{ attr.label }}
@@ -19,8 +19,8 @@ (change)="onCheck($event, attr.key)" [checked]="isChecked(attr.key)" id="input-{{ i }}" - [attr.name]="attr.label" - [attr.aria-label]="attr.label" + [attr.name]="attr.label | translate" + [attr.aria-label]="attr.label | translate" role="checkbox" aria-checked="false"/> diff --git a/ui/src/app/metadata/domain/model/properties/release-attribute.ts b/ui/src/app/metadata/domain/model/properties/release-attribute.ts new file mode 100644 index 000000000..7edc37b6a --- /dev/null +++ b/ui/src/app/metadata/domain/model/properties/release-attribute.ts @@ -0,0 +1,4 @@ +export interface ReleaseAttribute { + key: string; + label: string; +} diff --git a/ui/src/app/metadata/domain/service/attributes.service.ts b/ui/src/app/metadata/domain/service/attributes.service.ts new file mode 100644 index 000000000..c6b671e01 --- /dev/null +++ b/ui/src/app/metadata/domain/service/attributes.service.ts @@ -0,0 +1,38 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable, throwError } from 'rxjs'; +import { catchError, shareReplay, map } from 'rxjs/operators'; +import { ReleaseAttribute } from '../model/properties/release-attribute'; + +const CACHE_SIZE = 1; + +@Injectable() +export class AttributesService { + + readonly endpoint = '/customAttributes'; + readonly base = '/api'; + + private cache$: Observable; + + constructor( + private http: HttpClient + ) { } + + query(path: string = this.endpoint): Observable { + if (!this.cache$) { + this.cache$ = this.requestAttributes(path).pipe( + shareReplay(CACHE_SIZE) + ); + } + + return this.cache$; + } + + requestAttributes(path: string): Observable { + return this.http.get(`${this.base}${path}`, {}) + .pipe( + map(attrs => attrs.map((attr: any) => ({ key: attr.name, label: attr.displayName }))), + catchError(err => throwError([])) + ); + } +}