From 1b6b86c5162d3f9b08fa5100c55b7f43abcb718c Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Wed, 13 Jun 2018 12:48:23 -0700 Subject: [PATCH 01/16] SHIBUI-598 Reorganizing code --- ui/src/app/app.component.html | 22 +++--- ui/src/app/dashboard/action/search.action.ts | 2 +- .../component/entity-item.component.spec.ts | 2 +- .../container/dashboard.component.spec.ts | 6 +- .../container/dashboard.component.ts | 2 +- ui/src/app/dashboard/effect/search.effects.ts | 4 +- .../reducer/dashboard.reducer.spec.ts | 2 +- ui/src/app/domain/domain.type.ts | 14 ---- ui/src/app/domain/model/metadata-base.ts | 20 ------ ui/src/app/domain/model/metadata-provider.ts | 36 ---------- .../container/provider.component.spec.ts | 2 +- .../reducer/editor.reducer.spec.ts | 2 +- .../metadata-provider/action/copy.action.ts | 16 ++--- .../metadata-provider/action/search.action.ts | 6 +- .../descriptor-info-form.component.spec.ts | 4 +- .../forms/finish-form.component.spec.ts | 4 +- .../forms/key-info-form.component.spec.ts | 4 +- .../forms/logout-form.component.spec.ts | 6 +- .../forms/metadata-ui-form.component.spec.ts | 4 +- .../provider-form-fragment.component.spec.ts | 2 +- .../relying-party-form.component.spec.ts | 4 +- .../blank-provider.component.spec.ts | 2 +- .../container/blank-provider.component.ts | 4 +- .../container/copy-provider.component.spec.ts | 2 +- .../container/copy-provider.component.ts | 2 +- .../container/new-provider.component.spec.ts | 2 +- .../upload-provider.component.spec.ts | 2 +- .../metadata-provider/effect/copy.effect.ts | 4 +- .../reducer/copy.reducer.spec.ts | 16 ++--- .../reducer/search.reducer.spec.ts | 2 +- .../domain/action/draft-collection.action.ts | 2 +- .../domain/action/entity.action.ts | 0 .../domain/action/filter-collection.action.ts | 0 .../action/provider-collection.action.ts | 42 +++++------ .../domain/component/i18n-text.component.html | 0 .../domain/component/i18n-text.component.ts | 0 .../{ => metadata}/domain/domain.module.ts | 0 ui/src/app/metadata/domain/domain.type.ts | 16 +++++ .../effect/draft-collection.effect.spec.ts | 16 ++--- .../domain/effect/draft-collection.effects.ts | 2 +- .../domain/effect/entity.effect.spec.ts | 0 .../domain/effect/entity.effect.ts | 0 .../effect/filter-collection.effect.spec.ts | 0 .../domain/effect/filter-collection.effect.ts | 0 .../effect/provider-collection.effect.spec.ts | 20 +++--- .../effect/provider-collection.effects.ts | 8 +-- .../domain/guard/filter-exists.guard.ts | 0 .../domain/model/filter.entity.ts} | 11 +-- ui/src/app/metadata/domain/model/index.ts | 19 +++++ .../metadata/domain/model/metadata-base.ts | 6 ++ .../metadata/domain/model/metadata-entity.ts | 7 ++ .../domain/model/metadata-filter.ts | 10 +-- .../domain/model/metadata-provider.ts | 25 +++++++ .../domain/model/metadata-resolver.ts | 26 +++++++ .../domain/model/properties}/certificate.ts | 2 +- .../domain/model/properties}/contact.ts | 2 +- .../domain/model/properties}/filter-target.ts | 0 .../model/properties}/logout-endpoint.ts | 2 +- .../domain/model/properties}/mdui.ts | 0 .../domain/model/properties}/organization.ts | 0 .../properties}/relying-party-overrides.ts | 0 .../domain/model/properties}/security-info.ts | 0 .../model/properties}/sso-descriptor.ts | 0 .../domain/model/properties}/sso-service.ts | 0 .../domain/model/provider.entity.spec.ts} | 7 +- .../domain/model/provider.entity.ts} | 9 +-- .../metadata/domain/model/resolver.entity.ts | 70 +++++++++++++++++++ .../reducer/draft-collection.reducer.spec.ts | 8 +-- .../reducer/draft-collection.reducer.ts | 2 +- .../reducer/filter-collection.reducer.spec.ts | 0 .../reducer/filter-collection.reducer.ts | 0 .../{ => metadata}/domain/reducer/index.ts | 4 +- .../provider-collection.reducer.spec.ts | 12 ++-- .../reducer/provider-collection.reducer.ts | 2 +- .../service/entity-descriptor.service.spec.ts | 0 .../service/entity-descriptor.service.ts | 2 +- .../service/entity-draft.service.spec.ts | 6 +- .../domain/service/entity-draft.service.ts | 2 +- .../domain/service/entity-id.service.spec.ts | 0 .../domain/service/entity-id.service.ts | 0 .../service/entity-validators.service.spec.ts | 0 .../service/entity-validators.service.ts | 0 .../service/list-values.service.spec.ts | 0 .../domain/service/list-values.service.ts | 0 .../service/metadata-resolver.service.spec.ts | 0 .../service/metadata-resolver.service.ts | 0 .../provider-change-emitter.service.spec.ts | 2 +- .../provider-change-emitter.service.ts | 0 .../filter}/action/filter.action.spec.ts | 0 .../filter}/action/filter.action.ts | 0 .../filter}/action/search.action.spec.ts | 0 .../filter}/action/search.action.ts | 0 .../component/search-dialog.component.html | 0 .../component/search-dialog.component.scss | 0 .../component/search-dialog.component.spec.ts | 0 .../component/search-dialog.component.ts | 0 .../container/edit-filter.component.html | 0 .../container/edit-filter.component.spec.ts | 0 .../container/edit-filter.component.ts | 0 .../filter}/container/filter.component.html | 0 .../filter}/container/filter.component.scss | 0 .../container/filter.component.spec.ts | 0 .../filter}/container/filter.component.ts | 0 .../container/new-filter.component.html | 0 .../container/new-filter.component.spec.ts | 0 .../filter}/container/new-filter.component.ts | 0 .../filter}/effect/filter.effect.ts | 0 .../filter}/effect/search.effect.ts | 2 +- .../filter}/filter.module.ts | 0 .../filter}/reducer/filter.reducer.spec.ts | 0 .../filter}/reducer/filter.reducer.ts | 0 .../filter}/reducer/index.ts | 0 .../filter}/reducer/search.reducer.spec.ts | 0 .../filter}/reducer/search.reducer.ts | 0 ui/src/app/metadata/metadata.module.ts | 0 .../app/metadata/provider/provider.module.ts | 0 .../app/metadata/resolver/resolver.module.ts | 0 117 files changed, 319 insertions(+), 225 deletions(-) delete mode 100644 ui/src/app/domain/domain.type.ts delete mode 100644 ui/src/app/domain/model/metadata-base.ts delete mode 100644 ui/src/app/domain/model/metadata-provider.ts rename ui/src/app/{ => metadata}/domain/action/draft-collection.action.ts (98%) rename ui/src/app/{ => metadata}/domain/action/entity.action.ts (100%) rename ui/src/app/{ => metadata}/domain/action/filter-collection.action.ts (100%) rename ui/src/app/{ => metadata}/domain/action/provider-collection.action.ts (74%) rename ui/src/app/{ => metadata}/domain/component/i18n-text.component.html (100%) rename ui/src/app/{ => metadata}/domain/component/i18n-text.component.ts (100%) rename ui/src/app/{ => metadata}/domain/domain.module.ts (100%) create mode 100644 ui/src/app/metadata/domain/domain.type.ts rename ui/src/app/{ => metadata}/domain/effect/draft-collection.effect.spec.ts (73%) rename ui/src/app/{ => metadata}/domain/effect/draft-collection.effects.ts (98%) rename ui/src/app/{ => metadata}/domain/effect/entity.effect.spec.ts (100%) rename ui/src/app/{ => metadata}/domain/effect/entity.effect.ts (100%) rename ui/src/app/{ => metadata}/domain/effect/filter-collection.effect.spec.ts (100%) rename ui/src/app/{ => metadata}/domain/effect/filter-collection.effect.ts (100%) rename ui/src/app/{ => metadata}/domain/effect/provider-collection.effect.spec.ts (64%) rename ui/src/app/{ => metadata}/domain/effect/provider-collection.effects.ts (94%) rename ui/src/app/{ => metadata}/domain/guard/filter-exists.guard.ts (100%) rename ui/src/app/{domain/entity/filter.ts => metadata/domain/model/filter.entity.ts} (79%) create mode 100644 ui/src/app/metadata/domain/model/index.ts create mode 100644 ui/src/app/metadata/domain/model/metadata-base.ts create mode 100644 ui/src/app/metadata/domain/model/metadata-entity.ts rename ui/src/app/{ => metadata}/domain/model/metadata-filter.ts (56%) create mode 100644 ui/src/app/metadata/domain/model/metadata-provider.ts create mode 100644 ui/src/app/metadata/domain/model/metadata-resolver.ts rename ui/src/app/{domain/model => metadata/domain/model/properties}/certificate.ts (97%) rename ui/src/app/{domain/model => metadata/domain/model/properties}/contact.ts (97%) rename ui/src/app/{domain/model => metadata/domain/model/properties}/filter-target.ts (100%) rename ui/src/app/{domain/model => metadata/domain/model/properties}/logout-endpoint.ts (97%) rename ui/src/app/{domain/model => metadata/domain/model/properties}/mdui.ts (100%) rename ui/src/app/{domain/model => metadata/domain/model/properties}/organization.ts (100%) rename ui/src/app/{domain/model => metadata/domain/model/properties}/relying-party-overrides.ts (100%) rename ui/src/app/{domain/model => metadata/domain/model/properties}/security-info.ts (100%) rename ui/src/app/{domain/model => metadata/domain/model/properties}/sso-descriptor.ts (100%) rename ui/src/app/{domain/model => metadata/domain/model/properties}/sso-service.ts (100%) rename ui/src/app/{domain/entity/provider.spec.ts => metadata/domain/model/provider.entity.spec.ts} (92%) rename ui/src/app/{domain/entity/provider.ts => metadata/domain/model/provider.entity.ts} (87%) create mode 100644 ui/src/app/metadata/domain/model/resolver.entity.ts rename ui/src/app/{ => metadata}/domain/reducer/draft-collection.reducer.spec.ts (96%) rename ui/src/app/{ => metadata}/domain/reducer/draft-collection.reducer.ts (96%) rename ui/src/app/{ => metadata}/domain/reducer/filter-collection.reducer.spec.ts (100%) rename ui/src/app/{ => metadata}/domain/reducer/filter-collection.reducer.ts (100%) rename ui/src/app/{ => metadata}/domain/reducer/index.ts (97%) rename ui/src/app/{ => metadata}/domain/reducer/provider-collection.reducer.spec.ts (93%) rename ui/src/app/{ => metadata}/domain/reducer/provider-collection.reducer.ts (96%) rename ui/src/app/{ => metadata}/domain/service/entity-descriptor.service.spec.ts (100%) rename ui/src/app/{ => metadata}/domain/service/entity-descriptor.service.ts (97%) rename ui/src/app/{ => metadata}/domain/service/entity-draft.service.spec.ts (90%) rename ui/src/app/{ => metadata}/domain/service/entity-draft.service.ts (95%) rename ui/src/app/{ => metadata}/domain/service/entity-id.service.spec.ts (100%) rename ui/src/app/{ => metadata}/domain/service/entity-id.service.ts (100%) rename ui/src/app/{ => metadata}/domain/service/entity-validators.service.spec.ts (100%) rename ui/src/app/{ => metadata}/domain/service/entity-validators.service.ts (100%) rename ui/src/app/{ => metadata}/domain/service/list-values.service.spec.ts (100%) rename ui/src/app/{ => metadata}/domain/service/list-values.service.ts (100%) rename ui/src/app/{ => metadata}/domain/service/metadata-resolver.service.spec.ts (100%) rename ui/src/app/{ => metadata}/domain/service/metadata-resolver.service.ts (100%) rename ui/src/app/{ => metadata}/domain/service/provider-change-emitter.service.spec.ts (96%) rename ui/src/app/{ => metadata}/domain/service/provider-change-emitter.service.ts (100%) rename ui/src/app/{metadata-filter => metadata/filter}/action/filter.action.spec.ts (100%) rename ui/src/app/{metadata-filter => metadata/filter}/action/filter.action.ts (100%) rename ui/src/app/{metadata-filter => metadata/filter}/action/search.action.spec.ts (100%) rename ui/src/app/{metadata-filter => metadata/filter}/action/search.action.ts (100%) rename ui/src/app/{metadata-filter => metadata/filter}/component/search-dialog.component.html (100%) rename ui/src/app/{metadata-filter => metadata/filter}/component/search-dialog.component.scss (100%) rename ui/src/app/{metadata-filter => metadata/filter}/component/search-dialog.component.spec.ts (100%) rename ui/src/app/{metadata-filter => metadata/filter}/component/search-dialog.component.ts (100%) rename ui/src/app/{metadata-filter => metadata/filter}/container/edit-filter.component.html (100%) rename ui/src/app/{metadata-filter => metadata/filter}/container/edit-filter.component.spec.ts (100%) rename ui/src/app/{metadata-filter => metadata/filter}/container/edit-filter.component.ts (100%) rename ui/src/app/{metadata-filter => metadata/filter}/container/filter.component.html (100%) rename ui/src/app/{metadata-filter => metadata/filter}/container/filter.component.scss (100%) rename ui/src/app/{metadata-filter => metadata/filter}/container/filter.component.spec.ts (100%) rename ui/src/app/{metadata-filter => metadata/filter}/container/filter.component.ts (100%) rename ui/src/app/{metadata-filter => metadata/filter}/container/new-filter.component.html (100%) rename ui/src/app/{metadata-filter => metadata/filter}/container/new-filter.component.spec.ts (100%) rename ui/src/app/{metadata-filter => metadata/filter}/container/new-filter.component.ts (100%) rename ui/src/app/{metadata-filter => metadata/filter}/effect/filter.effect.ts (100%) rename ui/src/app/{metadata-filter => metadata/filter}/effect/search.effect.ts (96%) rename ui/src/app/{metadata-filter => metadata/filter}/filter.module.ts (100%) rename ui/src/app/{metadata-filter => metadata/filter}/reducer/filter.reducer.spec.ts (100%) rename ui/src/app/{metadata-filter => metadata/filter}/reducer/filter.reducer.ts (100%) rename ui/src/app/{metadata-filter => metadata/filter}/reducer/index.ts (100%) rename ui/src/app/{metadata-filter => metadata/filter}/reducer/search.reducer.spec.ts (100%) rename ui/src/app/{metadata-filter => metadata/filter}/reducer/search.reducer.ts (100%) create mode 100644 ui/src/app/metadata/metadata.module.ts create mode 100644 ui/src/app/metadata/provider/provider.module.ts create mode 100644 ui/src/app/metadata/resolver/resolver.module.ts diff --git a/ui/src/app/app.component.html b/ui/src/app/app.component.html index 7ee5acda8..0033b2cee 100644 --- a/ui/src/app/app.component.html +++ b/ui/src/app/app.component.html @@ -4,7 +4,7 @@ Shibboleth Logo - Click to be directed to www.shibboleth.net Shibboleth - Metadata Source Management + Source Management
- +   - Filter + Metadata Provider - +   - Metadata Source + Metadata Source
  • diff --git a/ui/src/app/dashboard/action/search.action.ts b/ui/src/app/dashboard/action/search.action.ts index 11df79fc4..09461388e 100644 --- a/ui/src/app/dashboard/action/search.action.ts +++ b/ui/src/app/dashboard/action/search.action.ts @@ -7,7 +7,7 @@ export const ENTITY_FILTER = '[Metadata Entity Filter] Entity Filter'; export const ENTITY_SEARCH_COMPLETE = '[Metadata Entity Search] Entity Search COMPLETE'; /** - * Add Provider to Collection Actions + * Add Resolver to Collection Actions */ export class SearchAction implements Action { readonly type = ENTITY_SEARCH; diff --git a/ui/src/app/dashboard/component/entity-item.component.spec.ts b/ui/src/app/dashboard/component/entity-item.component.spec.ts index 4a1f3e4d9..66c43dd65 100644 --- a/ui/src/app/dashboard/component/entity-item.component.spec.ts +++ b/ui/src/app/dashboard/component/entity-item.component.spec.ts @@ -3,7 +3,7 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { EntityItemComponent } from './entity-item.component'; import { MetadataProvider } from '../../domain/model/metadata-provider'; -describe('Provider List item', () => { +describe('Resolver List item', () => { let fixture: ComponentFixture; let instance: EntityItemComponent; diff --git a/ui/src/app/dashboard/container/dashboard.component.spec.ts b/ui/src/app/dashboard/container/dashboard.component.spec.ts index 1c6a064bc..faa8342c9 100644 --- a/ui/src/app/dashboard/container/dashboard.component.spec.ts +++ b/ui/src/app/dashboard/container/dashboard.component.spec.ts @@ -13,7 +13,7 @@ import { DeleteDialogComponent } from '../component/delete-dialog.component'; import { RouterStub } from '../../../testing/router.stub'; import { NgbModalStub } from '../../../testing/modal.stub'; import { MetadataProvider } from '../../domain/model/metadata-provider'; -import { Provider } from '../../domain/entity/provider'; +import { Resolver } from '../../domain/entity/provider'; describe('Dashboard Page', () => { @@ -23,11 +23,11 @@ describe('Dashboard Page', () => { let modal: NgbModal; let instance: DashboardComponent; - let draft = new Provider({ + let draft = new Resolver({ entityId: 'foo', serviceProviderName: 'bar' }), - provider = new Provider({ + provider = new Resolver({ ...draft, id: '1' }); diff --git a/ui/src/app/dashboard/container/dashboard.component.ts b/ui/src/app/dashboard/container/dashboard.component.ts index 434ab7206..95d8a7537 100644 --- a/ui/src/app/dashboard/container/dashboard.component.ts +++ b/ui/src/app/dashboard/container/dashboard.component.ts @@ -7,7 +7,7 @@ import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { MetadataEntity, MetadataProvider, DomainTypes } from '../../domain/domain.type'; -import { Provider } from '../../domain/entity/provider'; +import { Resolver } from '../../domain/entity/provider'; import * as searchActions from '../action/search.action'; import * as providerActions from '../../domain/action/provider-collection.action'; import * as draftActions from '../../domain/action/draft-collection.action'; diff --git a/ui/src/app/dashboard/effect/search.effects.ts b/ui/src/app/dashboard/effect/search.effects.ts index 809ef523b..be844554e 100644 --- a/ui/src/app/dashboard/effect/search.effects.ts +++ b/ui/src/app/dashboard/effect/search.effects.ts @@ -9,7 +9,7 @@ import * as fromCollections from '../../domain/reducer'; import * as fromDashboard from '../reducer'; import { MetadataProvider } from '../../domain/model/metadata-provider'; import { EntityDescriptorService } from '../../domain/service/entity-descriptor.service'; -import { Provider } from '../../domain/entity/provider'; +import { Resolver } from '../../domain/entity/provider'; import { Filter } from '../../domain/entity/filter'; import { MetadataEntity, DomainTypes, MetadataFilter } from '../../domain/domain.type'; @@ -45,7 +45,7 @@ export class SearchEffects { (o: any[], p: MetadataProvider[], f: MetadataFilter[]): Array => { return o.concat( f.map(filter => new Filter(filter)), - p.map(provider => new Provider(provider)) + p.map(provider => new Resolver(provider)) ); } ), diff --git a/ui/src/app/dashboard/reducer/dashboard.reducer.spec.ts b/ui/src/app/dashboard/reducer/dashboard.reducer.spec.ts index 93662e652..969671c65 100644 --- a/ui/src/app/dashboard/reducer/dashboard.reducer.spec.ts +++ b/ui/src/app/dashboard/reducer/dashboard.reducer.spec.ts @@ -15,7 +15,7 @@ describe('Dashboard Reducer', () => { }); }); - describe('Toggle Provider Display', () => { + describe('Toggle Resolver Display', () => { it('should toggle the selected providers open state', () => { const id = 'foo'; const action = new ToggleEntityDisplay(id); diff --git a/ui/src/app/domain/domain.type.ts b/ui/src/app/domain/domain.type.ts deleted file mode 100644 index 3b6a9c489..000000000 --- a/ui/src/app/domain/domain.type.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { MetadataFilter } from './model/metadata-filter'; -import { MetadataProvider } from './model/metadata-provider'; - -export * from './model/metadata-provider'; -export * from './model/metadata-filter'; - -export enum DomainTypes { - filter = 'filter', - provider = 'provider' -} - -export type MetadataEntity = - | MetadataFilter - | MetadataProvider; diff --git a/ui/src/app/domain/model/metadata-base.ts b/ui/src/app/domain/model/metadata-base.ts deleted file mode 100644 index 6a523f16a..000000000 --- a/ui/src/app/domain/model/metadata-base.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Organization } from './organization'; -import { MDUI } from './mdui'; -import { Contact } from './contact'; -import { SecurityInfo } from './security-info'; -import { SsoService, LogoutEndpoint } from '../../domain/model/metadata-provider'; -import { IdpSsoDescriptor } from './sso-descriptor'; -import { RelyingPartyOverrides } from './relying-party-overrides'; - -export interface MetadataBase { - id?: string; - createdDate?: string; - modifiedDate?: string; - version: string; - - name: string; - enabled: boolean; - type: string; - - serialize(): any; -} diff --git a/ui/src/app/domain/model/metadata-provider.ts b/ui/src/app/domain/model/metadata-provider.ts deleted file mode 100644 index c01b9ce3a..000000000 --- a/ui/src/app/domain/model/metadata-provider.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Organization } from './organization'; -import { MDUI } from './mdui'; -import { Contact } from './contact'; -import { SecurityInfo } from './security-info'; -import { SsoService } from './sso-service'; -import { LogoutEndpoint } from './logout-endpoint'; -import { IdpSsoDescriptor } from './sso-descriptor'; -import { RelyingPartyOverrides } from './relying-party-overrides'; -import { Certificate } from './certificate'; - -import { MetadataBase } from './metadata-base'; - -export interface MetadataProvider extends MetadataBase { - entityId: string; - serviceProviderName: string; - organization?: Organization; - contacts?: Contact[]; - mdui?: MDUI; - securityInfo?: SecurityInfo; - assertionConsumerServices?: SsoService[]; - serviceProviderSsoDescriptor?: IdpSsoDescriptor; - logoutEndpoints?: LogoutEndpoint[]; - serviceEnabled?: boolean; - relyingPartyOverrides: RelyingPartyOverrides; - attributeRelease: string[]; -} - -export * from './organization'; -export * from './mdui'; -export * from './contact'; -export * from './security-info'; -export * from './sso-service'; -export * from './logout-endpoint'; -export * from './sso-descriptor'; -export * from './relying-party-overrides'; -export * from './certificate'; diff --git a/ui/src/app/edit-provider/container/provider.component.spec.ts b/ui/src/app/edit-provider/container/provider.component.spec.ts index a86a52c43..45464e307 100644 --- a/ui/src/app/edit-provider/container/provider.component.spec.ts +++ b/ui/src/app/edit-provider/container/provider.component.spec.ts @@ -9,7 +9,7 @@ import * as fromCollections from '../../domain/reducer'; import { ActivatedRouteStub } from '../../../testing/activated-route.stub'; import { routes } from '../editor.module'; -describe('Provider Select (Editor) Page', () => { +describe('Resolver Select (Editor) Page', () => { let fixture: ComponentFixture; let store: Store; let instance: ProviderComponent; diff --git a/ui/src/app/edit-provider/reducer/editor.reducer.spec.ts b/ui/src/app/edit-provider/reducer/editor.reducer.spec.ts index 81934837b..d3013c83a 100644 --- a/ui/src/app/edit-provider/reducer/editor.reducer.spec.ts +++ b/ui/src/app/edit-provider/reducer/editor.reducer.spec.ts @@ -23,7 +23,7 @@ describe('Editor Reducer', () => { }); }); - describe('Editor Add Provider', () => { + describe('Editor Add Resolver', () => { it('should update the status when a provider is saved', () => { const action = new collectionActions.AddProviderRequest(changes); const result = reducer(initialState, action); diff --git a/ui/src/app/metadata-provider/action/copy.action.ts b/ui/src/app/metadata-provider/action/copy.action.ts index 1343aa9d1..a0e424374 100644 --- a/ui/src/app/metadata-provider/action/copy.action.ts +++ b/ui/src/app/metadata-provider/action/copy.action.ts @@ -2,17 +2,17 @@ import { Action } from '@ngrx/store'; import { MetadataProvider } from '../../domain/model/metadata-provider'; export enum CopySourceActionTypes { - CREATE_PROVIDER_COPY_REQUEST = '[Copy Provider] Create Provider Copy Request', - CREATE_PROVIDER_COPY_SUCCESS = '[Copy Provider] Create Provider Copy Success', - CREATE_PROVIDER_COPY_ERROR = '[Copy Provider] Create Provider Copy Error', + CREATE_PROVIDER_COPY_REQUEST = '[Copy Resolver] Create Resolver Copy Request', + CREATE_PROVIDER_COPY_SUCCESS = '[Copy Resolver] Create Resolver Copy Success', + CREATE_PROVIDER_COPY_ERROR = '[Copy Resolver] Create Resolver Copy Error', - UPDATE_PROVIDER_COPY = '[Copy Provider] Update Provider Copy Request', + UPDATE_PROVIDER_COPY = '[Copy Resolver] Update Resolver Copy Request', - UPDATE_PROVIDER_COPY_SECTIONS = '[Copy Provider] Update Provider Sections', + UPDATE_PROVIDER_COPY_SECTIONS = '[Copy Resolver] Update Resolver Sections', - SAVE_PROVIDER_COPY_REQUEST = '[Copy Provider] Save Provider Copy Request', - SAVE_PROVIDER_COPY_SUCCESS = '[Copy Provider] Save Provider Copy Request', - SAVE_PROVIDER_COPY_ERROR = '[Copy Provider] Save Provider Copy Request', + SAVE_PROVIDER_COPY_REQUEST = '[Copy Resolver] Save Resolver Copy Request', + SAVE_PROVIDER_COPY_SUCCESS = '[Copy Resolver] Save Resolver Copy Request', + SAVE_PROVIDER_COPY_ERROR = '[Copy Resolver] Save Resolver Copy Request', } export class CreateProviderCopyRequest implements Action { diff --git a/ui/src/app/metadata-provider/action/search.action.ts b/ui/src/app/metadata-provider/action/search.action.ts index e4623c8c9..9265f512e 100644 --- a/ui/src/app/metadata-provider/action/search.action.ts +++ b/ui/src/app/metadata-provider/action/search.action.ts @@ -2,9 +2,9 @@ import { Action } from '@ngrx/store'; import { MetadataProvider } from '../../domain/model/metadata-provider'; export enum SearchActionTypes { - SEARCH_IDS = '[Search Provider Ids] Request', - SEARCH_IDS_SUCCESS = '[Search Provider Ids] Success', - SEARCH_IDS_ERROR = '[Search Provider Ids] Error' + SEARCH_IDS = '[Search Resolver Ids] Request', + SEARCH_IDS_SUCCESS = '[Search Resolver Ids] Success', + SEARCH_IDS_ERROR = '[Search Resolver Ids] Error' } export class SearchIds implements Action { diff --git a/ui/src/app/metadata-provider/component/forms/descriptor-info-form.component.spec.ts b/ui/src/app/metadata-provider/component/forms/descriptor-info-form.component.spec.ts index 5f814a6a2..98baad840 100644 --- a/ui/src/app/metadata-provider/component/forms/descriptor-info-form.component.spec.ts +++ b/ui/src/app/metadata-provider/component/forms/descriptor-info-form.component.spec.ts @@ -7,7 +7,7 @@ import { ProviderValueEmitter, ProviderStatusEmitter } from '../../../domain/ser import * as fromCollections from '../../../domain/reducer'; import { NgbPopoverModule, NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap/popover/popover.module'; import { ListValuesService } from '../../../domain/service/list-values.service'; -import { Provider } from '../../../domain/entity/provider'; +import { Resolver } from '../../../domain/entity/provider'; import { DescriptorInfoFormComponent } from './descriptor-info-form.component'; import * as stubs from '../../../../testing/provider.stub'; @@ -17,7 +17,7 @@ import { SharedModule } from '../../../shared/shared.module'; template: `` }) class TestHostComponent { - provider = new Provider({ + provider = new Resolver({ ...stubs.provider, serviceProviderSsoDescriptor: { protocolSupportEnum: 'foo', diff --git a/ui/src/app/metadata-provider/component/forms/finish-form.component.spec.ts b/ui/src/app/metadata-provider/component/forms/finish-form.component.spec.ts index 2936c0832..ffd903c16 100644 --- a/ui/src/app/metadata-provider/component/forms/finish-form.component.spec.ts +++ b/ui/src/app/metadata-provider/component/forms/finish-form.component.spec.ts @@ -15,13 +15,13 @@ import { ActivatedRouteStub } from '../../../../testing/activated-route.stub'; import * as stubs from '../../../../testing/provider.stub'; import { InputDefaultsDirective } from '../../directive/input-defaults.directive'; import { I18nTextComponent } from '../../../domain/component/i18n-text.component'; -import { Provider } from '../../../domain/entity/provider'; +import { Resolver } from '../../../domain/entity/provider'; @Component({ template: `` }) class TestHostComponent { - provider = new Provider({ + provider = new Resolver({ ...stubs.provider }); diff --git a/ui/src/app/metadata-provider/component/forms/key-info-form.component.spec.ts b/ui/src/app/metadata-provider/component/forms/key-info-form.component.spec.ts index 3be72cbdd..b05300916 100644 --- a/ui/src/app/metadata-provider/component/forms/key-info-form.component.spec.ts +++ b/ui/src/app/metadata-provider/component/forms/key-info-form.component.spec.ts @@ -12,13 +12,13 @@ import { InputDefaultsDirective } from '../../directive/input-defaults.directive import * as stubs from '../../../../testing/provider.stub'; import { I18nTextComponent } from '../../../domain/component/i18n-text.component'; -import { Provider } from '../../../domain/entity/provider'; +import { Resolver } from '../../../domain/entity/provider'; @Component({ template: `` }) class TestHostComponent { - provider = new Provider({ + provider = new Resolver({ ...stubs.provider, securityInfo: { ...stubs.secInfo, diff --git a/ui/src/app/metadata-provider/component/forms/logout-form.component.spec.ts b/ui/src/app/metadata-provider/component/forms/logout-form.component.spec.ts index c841cd668..42d627f75 100644 --- a/ui/src/app/metadata-provider/component/forms/logout-form.component.spec.ts +++ b/ui/src/app/metadata-provider/component/forms/logout-form.component.spec.ts @@ -12,13 +12,13 @@ import { LogoutFormComponent } from './logout-form.component'; import * as stubs from '../../../../testing/provider.stub'; import { InputDefaultsDirective } from '../../directive/input-defaults.directive'; import { I18nTextComponent } from '../../../domain/component/i18n-text.component'; -import { Provider } from '../../../domain/entity/provider'; +import { Resolver } from '../../../domain/entity/provider'; @Component({ template: `` }) class TestHostComponent { - provider = new Provider({ + provider = new Resolver({ ...stubs.provider, logoutEndpoints: [stubs.logoutEndpoint] }); @@ -85,7 +85,7 @@ describe('Logout Endpoints Form Component', () => { describe('ngOnChanges method', () => { it('should add endpoints if provided', () => { - instance.provider = new Provider({ + instance.provider = new Resolver({ ...stubs.provider }); fixture.detectChanges(); diff --git a/ui/src/app/metadata-provider/component/forms/metadata-ui-form.component.spec.ts b/ui/src/app/metadata-provider/component/forms/metadata-ui-form.component.spec.ts index 961311ac4..9057d5ada 100644 --- a/ui/src/app/metadata-provider/component/forms/metadata-ui-form.component.spec.ts +++ b/ui/src/app/metadata-provider/component/forms/metadata-ui-form.component.spec.ts @@ -7,7 +7,7 @@ import { ProviderValueEmitter, ProviderStatusEmitter } from '../../../domain/ser import * as fromCollections from '../../../domain/reducer'; import { NgbPopoverModule, NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap/popover/popover.module'; import { ListValuesService } from '../../../domain/service/list-values.service'; -import { Provider } from '../../../domain/entity/provider'; +import { Resolver } from '../../../domain/entity/provider'; import { MetadataUiFormComponent } from './metadata-ui-form.component'; import * as stubs from '../../../../testing/provider.stub'; @@ -18,7 +18,7 @@ import { I18nTextComponent } from '../../../domain/component/i18n-text.component template: `` }) class TestHostComponent { - provider = new Provider({ + provider = new Resolver({ ...stubs.provider }); diff --git a/ui/src/app/metadata-provider/component/forms/provider-form-fragment.component.spec.ts b/ui/src/app/metadata-provider/component/forms/provider-form-fragment.component.spec.ts index 168004a41..290acaeaa 100644 --- a/ui/src/app/metadata-provider/component/forms/provider-form-fragment.component.spec.ts +++ b/ui/src/app/metadata-provider/component/forms/provider-form-fragment.component.spec.ts @@ -5,7 +5,7 @@ import { ProviderFormFragmentComponent } from './provider-form-fragment.componen import { ProviderValueEmitter, ProviderStatusEmitter } from '../../../domain/service/provider-change-emitter.service'; -describe('Provider Form Fragment Component', () => { +describe('Resolver Form Fragment Component', () => { let fixture: ComponentFixture; let instance: ProviderFormFragmentComponent; diff --git a/ui/src/app/metadata-provider/component/forms/relying-party-form.component.spec.ts b/ui/src/app/metadata-provider/component/forms/relying-party-form.component.spec.ts index 170699ec4..828e47314 100644 --- a/ui/src/app/metadata-provider/component/forms/relying-party-form.component.spec.ts +++ b/ui/src/app/metadata-provider/component/forms/relying-party-form.component.spec.ts @@ -8,7 +8,7 @@ import * as fromCollections from '../../../domain/reducer'; import { NgbPopoverModule, NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap/popover/popover.module'; import { ListValuesService } from '../../../domain/service/list-values.service'; import { RelyingPartyFormComponent } from './relying-party-form.component'; -import { Provider } from '../../../domain/entity/provider'; +import { Resolver } from '../../../domain/entity/provider'; import * as stubs from '../../../../testing/provider.stub'; import { SharedModule } from '../../../shared/shared.module'; @@ -17,7 +17,7 @@ import { SharedModule } from '../../../shared/shared.module'; template: `` }) class TestHostComponent { - provider = new Provider({ + provider = new Resolver({ ...stubs.provider, relyingPartyOverrides: { nameIdFormats: [], diff --git a/ui/src/app/metadata-provider/container/blank-provider.component.spec.ts b/ui/src/app/metadata-provider/container/blank-provider.component.spec.ts index e6f1e2eec..0faafb48a 100644 --- a/ui/src/app/metadata-provider/container/blank-provider.component.spec.ts +++ b/ui/src/app/metadata-provider/container/blank-provider.component.spec.ts @@ -7,7 +7,7 @@ import * as fromCollections from '../../domain/reducer'; import { BlankProviderComponent } from './blank-provider.component'; import { UploadProviderComponent } from './upload-provider.component'; -describe('Blank Provider Page', () => { +describe('Blank Resolver Page', () => { let fixture: ComponentFixture; let store: Store; let instance: BlankProviderComponent; diff --git a/ui/src/app/metadata-provider/container/blank-provider.component.ts b/ui/src/app/metadata-provider/container/blank-provider.component.ts index 8d4fef304..b104ae129 100644 --- a/ui/src/app/metadata-provider/container/blank-provider.component.ts +++ b/ui/src/app/metadata-provider/container/blank-provider.component.ts @@ -13,7 +13,7 @@ import { AddProviderRequest, UploadProviderRequest } from '../../domain/action/p import * as fromCollections from '../../domain/reducer'; import { EntityValidators } from '../../domain/service/entity-validators.service'; import { MetadataProvider } from '../../domain/domain.type'; -import { Provider } from '../../domain/entity/provider'; +import { Resolver } from '../../domain/entity/provider'; @Component({ selector: 'blank-provider-form', @@ -40,7 +40,7 @@ export class BlankProviderComponent implements OnInit { } next(): void { - const val: MetadataProvider = new Provider({ + const val: MetadataProvider = new Resolver({ entityId: this.providerForm.get('entityId').value, serviceProviderName: this.providerForm.get('serviceProviderName').value }); diff --git a/ui/src/app/metadata-provider/container/copy-provider.component.spec.ts b/ui/src/app/metadata-provider/container/copy-provider.component.spec.ts index 1a1b3b406..7f6a29d88 100644 --- a/ui/src/app/metadata-provider/container/copy-provider.component.spec.ts +++ b/ui/src/app/metadata-provider/container/copy-provider.component.spec.ts @@ -22,7 +22,7 @@ class TestHostComponent { onSave(event: any): void {} } -describe('Copy Provider Page', () => { +describe('Copy Resolver Page', () => { let fixture: ComponentFixture; let store: Store; let instance: CopyProviderComponent; diff --git a/ui/src/app/metadata-provider/container/copy-provider.component.ts b/ui/src/app/metadata-provider/container/copy-provider.component.ts index c7b59b141..8f83feae1 100644 --- a/ui/src/app/metadata-provider/container/copy-provider.component.ts +++ b/ui/src/app/metadata-provider/container/copy-provider.component.ts @@ -16,7 +16,7 @@ import * as fromCollections from '../../domain/reducer'; import { EntityValidators } from '../../domain/service/entity-validators.service'; import { SearchIds } from '../action/search.action'; import * as fromProvider from '../reducer'; -import { Provider } from '../../domain/entity/provider'; +import { Resolver } from '../../domain/entity/provider'; import { CreateProviderCopyRequest, UpdateProviderCopySections} from '../action/copy.action'; diff --git a/ui/src/app/metadata-provider/container/new-provider.component.spec.ts b/ui/src/app/metadata-provider/container/new-provider.component.spec.ts index 4c320fa21..0626788e0 100644 --- a/ui/src/app/metadata-provider/container/new-provider.component.spec.ts +++ b/ui/src/app/metadata-provider/container/new-provider.component.spec.ts @@ -18,7 +18,7 @@ import { RouterStub } from '../../../testing/router.stub'; import { ActivatedRouteStub } from '../../../testing/activated-route.stub'; import { I18nTextComponent } from '../../domain/component/i18n-text.component'; -describe('New Provider Page', () => { +describe('New Resolver Page', () => { let fixture: ComponentFixture; let store: Store; let instance: NewProviderComponent; diff --git a/ui/src/app/metadata-provider/container/upload-provider.component.spec.ts b/ui/src/app/metadata-provider/container/upload-provider.component.spec.ts index afcba83c2..e81105b52 100644 --- a/ui/src/app/metadata-provider/container/upload-provider.component.spec.ts +++ b/ui/src/app/metadata-provider/container/upload-provider.component.spec.ts @@ -30,7 +30,7 @@ const getFakeFile = (str: string) => { return blob; }; -describe('Upload Provider Page', () => { +describe('Upload Resolver Page', () => { let fixture: ComponentFixture; let instance: TestHostComponent; let form: UploadProviderComponent; diff --git a/ui/src/app/metadata-provider/effect/copy.effect.ts b/ui/src/app/metadata-provider/effect/copy.effect.ts index f3b5473d1..14160a3f0 100644 --- a/ui/src/app/metadata-provider/effect/copy.effect.ts +++ b/ui/src/app/metadata-provider/effect/copy.effect.ts @@ -15,7 +15,7 @@ import { CreateProviderCopySuccess, CreateProviderCopyError } from '../action/copy.action'; -import { Provider } from '../../domain/entity/provider'; +import { Resolver } from '../../domain/entity/provider'; @Injectable() @@ -34,7 +34,7 @@ export class CopyProviderEffects { const provider = providers.find(p => p.entityId === attrs.target); const copied = sections.reduce((c, section) => ({ ...c, ...{[section]: provider[section] } }), {}); const action = provider ? - new CreateProviderCopySuccess(new Provider({ + new CreateProviderCopySuccess(new Resolver({ serviceProviderName, entityId, ...copied diff --git a/ui/src/app/metadata-provider/reducer/copy.reducer.spec.ts b/ui/src/app/metadata-provider/reducer/copy.reducer.spec.ts index 34b69b258..82a4e0e3a 100644 --- a/ui/src/app/metadata-provider/reducer/copy.reducer.spec.ts +++ b/ui/src/app/metadata-provider/reducer/copy.reducer.spec.ts @@ -3,11 +3,11 @@ import * as fromProviderCopy from './copy.reducer'; import * as actions from '../action/copy.action'; import * as fromCollection from '../../domain/action/provider-collection.action'; import { CopySourceActionTypes, CopySourceActionUnion, CreateProviderCopyRequest } from '../action/copy.action'; -import { Provider } from '../../domain/entity/provider'; +import { Resolver } from '../../domain/entity/provider'; const snapshot: fromProviderCopy.CopyState = { ...fromProviderCopy.initialState }; -describe('Provider -> Copy Reducer', () => { +describe('Resolver -> Copy Reducer', () => { describe('undefined action', () => { it('should return the default state', () => { const result = reducer(snapshot, {} as any); @@ -26,7 +26,7 @@ describe('Provider -> Copy Reducer', () => { describe(`${CopySourceActionTypes.CREATE_PROVIDER_COPY_SUCCESS} action`, () => { it('should set properties on the state', () => { - const p = new Provider({}); + const p = new Resolver({}); const obj = { ...snapshot }; const result = reducer(snapshot, new actions.CreateProviderCopySuccess(p)); @@ -36,7 +36,7 @@ describe('Provider -> Copy Reducer', () => { describe(`${CopySourceActionTypes.CREATE_PROVIDER_COPY_ERROR} action`, () => { it('should set properties on the state', () => { - const p = new Provider({}); + const p = new Resolver({}); const obj = { ...snapshot }; const result = reducer(snapshot, new actions.CreateProviderCopyError(new Error())); @@ -46,7 +46,7 @@ describe('Provider -> Copy Reducer', () => { describe(`${CopySourceActionTypes.UPDATE_PROVIDER_COPY} action`, () => { it('should set properties on the state', () => { - const obj = { ...snapshot, provider: new Provider({}) }; + const obj = { ...snapshot, provider: new Resolver({}) }; const result = reducer(snapshot, new actions.UpdateProviderCopy({id: 'foo'})); expect(result.provider.id).toBe('foo'); @@ -55,7 +55,7 @@ describe('Provider -> Copy Reducer', () => { describe(`${ fromCollection.ProviderCollectionActionTypes.ADD_PROVIDER } action`, () => { it('should set properties on the state', () => { - const p = new Provider({}); + const p = new Resolver({}); const obj = { ...snapshot, provider: p }; const result = reducer(snapshot, new fromCollection.AddProviderRequest(p)); @@ -65,7 +65,7 @@ describe('Provider -> Copy Reducer', () => { describe(`${fromCollection.ProviderCollectionActionTypes.ADD_PROVIDER_SUCCESS} action`, () => { it('should set properties on the state', () => { - const p = new Provider({}); + const p = new Resolver({}); const obj = { ...snapshot, provider: p }; const result = reducer(snapshot, new fromCollection.AddProviderSuccess(p)); @@ -75,7 +75,7 @@ describe('Provider -> Copy Reducer', () => { describe(`${fromCollection.ProviderCollectionActionTypes.ADD_PROVIDER_FAIL} action`, () => { it('should set properties on the state', () => { - const p = new Provider({}); + const p = new Resolver({}); const obj = { ...snapshot, provider: p }; const result = reducer(snapshot, new fromCollection.AddProviderFail(p)); diff --git a/ui/src/app/metadata-provider/reducer/search.reducer.spec.ts b/ui/src/app/metadata-provider/reducer/search.reducer.spec.ts index a1155b2b5..2eb5d6262 100644 --- a/ui/src/app/metadata-provider/reducer/search.reducer.spec.ts +++ b/ui/src/app/metadata-provider/reducer/search.reducer.spec.ts @@ -8,7 +8,7 @@ const snapshot: fromProviderSearch.SearchState = { searching: false }; -describe('Provider -> Search Reducer', () => { +describe('Resolver -> Search Reducer', () => { describe('undefined action', () => { it('should return the default state', () => { const result = reducer(snapshot, {} as any); diff --git a/ui/src/app/domain/action/draft-collection.action.ts b/ui/src/app/metadata/domain/action/draft-collection.action.ts similarity index 98% rename from ui/src/app/domain/action/draft-collection.action.ts rename to ui/src/app/metadata/domain/action/draft-collection.action.ts index 39a631b2c..a5aef8dd3 100644 --- a/ui/src/app/domain/action/draft-collection.action.ts +++ b/ui/src/app/metadata/domain/action/draft-collection.action.ts @@ -1,6 +1,6 @@ import { Action } from '@ngrx/store'; import { Update } from '@ngrx/entity/entity'; -import { MetadataProvider } from '../model/metadata-provider'; +import { MetadataProvider } from '../model/provider'; export enum DraftCollectionActionTypes { FIND = '[Metadata Draft] Find', diff --git a/ui/src/app/domain/action/entity.action.ts b/ui/src/app/metadata/domain/action/entity.action.ts similarity index 100% rename from ui/src/app/domain/action/entity.action.ts rename to ui/src/app/metadata/domain/action/entity.action.ts diff --git a/ui/src/app/domain/action/filter-collection.action.ts b/ui/src/app/metadata/domain/action/filter-collection.action.ts similarity index 100% rename from ui/src/app/domain/action/filter-collection.action.ts rename to ui/src/app/metadata/domain/action/filter-collection.action.ts diff --git a/ui/src/app/domain/action/provider-collection.action.ts b/ui/src/app/metadata/domain/action/provider-collection.action.ts similarity index 74% rename from ui/src/app/domain/action/provider-collection.action.ts rename to ui/src/app/metadata/domain/action/provider-collection.action.ts index 0d890aad4..1f60e26c9 100644 --- a/ui/src/app/domain/action/provider-collection.action.ts +++ b/ui/src/app/metadata/domain/action/provider-collection.action.ts @@ -1,28 +1,28 @@ import { Action } from '@ngrx/store'; -import { MetadataProvider } from '../model/metadata-provider'; +import { MetadataProvider } from '../model/provider'; import { Update } from '@ngrx/entity'; export enum ProviderCollectionActionTypes { - FIND = '[Metadata Provider] Find', - SELECT = '[Metadata Provider] Select', - SELECT_SUCCESS = '[Metadata Provider] Select Success', - - UPDATE_PROVIDER_REQUEST = '[Metadata Provider] Update Request', - UPDATE_PROVIDER_SUCCESS = '[Metadata Provider] Update Success', - UPDATE_PROVIDER_FAIL = '[Metadata Provider] Update Fail', - - LOAD_PROVIDER_REQUEST = '[Metadata Provider Collection] Provider REQUEST', - LOAD_PROVIDER_SUCCESS = '[Metadata Provider Collection] Provider SUCCESS', - LOAD_PROVIDER_ERROR = '[Metadata Provider Collection] Provider ERROR', - ADD_PROVIDER = '[Metadata Provider Collection] Add Provider', - ADD_PROVIDER_SUCCESS = '[Metadata Provider Collection] Add Provider Success', - ADD_PROVIDER_FAIL = '[Metadata Provider Collection] Add Provider Fail', - REMOVE_PROVIDER = '[Metadata Provider Collection] Remove Provider', - REMOVE_PROVIDER_SUCCESS = '[Metadata Provider Collection] Remove Provider Success', - REMOVE_PROVIDER_FAIL = '[Metadata Provider Collection] Remove Provider Fail', - - UPLOAD_PROVIDER_REQUEST = '[Metadata Provider Collection] Upload Provider Request', - CREATE_PROVIDER_FROM_URL_REQUEST = '[Metadata Provider Collection] Create Provider From URL Request', + FIND = '[Metadata Resolver] Find', + SELECT = '[Metadata Resolver] Select', + SELECT_SUCCESS = '[Metadata Resolver] Select Success', + + UPDATE_PROVIDER_REQUEST = '[Metadata Resolver] Update Request', + UPDATE_PROVIDER_SUCCESS = '[Metadata Resolver] Update Success', + UPDATE_PROVIDER_FAIL = '[Metadata Resolver] Update Fail', + + LOAD_PROVIDER_REQUEST = '[Metadata Resolver Collection] Resolver REQUEST', + LOAD_PROVIDER_SUCCESS = '[Metadata Resolver Collection] Resolver SUCCESS', + LOAD_PROVIDER_ERROR = '[Metadata Resolver Collection] Resolver ERROR', + ADD_PROVIDER = '[Metadata Resolver Collection] Add Resolver', + ADD_PROVIDER_SUCCESS = '[Metadata Resolver Collection] Add Resolver Success', + ADD_PROVIDER_FAIL = '[Metadata Resolver Collection] Add Resolver Fail', + REMOVE_PROVIDER = '[Metadata Resolver Collection] Remove Resolver', + REMOVE_PROVIDER_SUCCESS = '[Metadata Resolver Collection] Remove Resolver Success', + REMOVE_PROVIDER_FAIL = '[Metadata Resolver Collection] Remove Resolver Fail', + + UPLOAD_PROVIDER_REQUEST = '[Metadata Resolver Collection] Upload Resolver Request', + CREATE_PROVIDER_FROM_URL_REQUEST = '[Metadata Resolver Collection] Create Resolver From URL Request', } export class FindProvider implements Action { diff --git a/ui/src/app/domain/component/i18n-text.component.html b/ui/src/app/metadata/domain/component/i18n-text.component.html similarity index 100% rename from ui/src/app/domain/component/i18n-text.component.html rename to ui/src/app/metadata/domain/component/i18n-text.component.html diff --git a/ui/src/app/domain/component/i18n-text.component.ts b/ui/src/app/metadata/domain/component/i18n-text.component.ts similarity index 100% rename from ui/src/app/domain/component/i18n-text.component.ts rename to ui/src/app/metadata/domain/component/i18n-text.component.ts diff --git a/ui/src/app/domain/domain.module.ts b/ui/src/app/metadata/domain/domain.module.ts similarity index 100% rename from ui/src/app/domain/domain.module.ts rename to ui/src/app/metadata/domain/domain.module.ts diff --git a/ui/src/app/metadata/domain/domain.type.ts b/ui/src/app/metadata/domain/domain.type.ts new file mode 100644 index 000000000..71a8194ed --- /dev/null +++ b/ui/src/app/metadata/domain/domain.type.ts @@ -0,0 +1,16 @@ +import { + MetadataProvider, + MetadataResolver, + MetadataFilter +} from './model'; + +export enum MetadataTypes { + FILTER = '[Type] Metadata Filter', + PROVIDER = '[Type] Metadata Provider', + RESOLVER = '[Type] Metadata Resolver' +} + +export type Metadata = + | MetadataProvider + | MetadataResolver + | MetadataFilter; diff --git a/ui/src/app/domain/effect/draft-collection.effect.spec.ts b/ui/src/app/metadata/domain/effect/draft-collection.effect.spec.ts similarity index 73% rename from ui/src/app/domain/effect/draft-collection.effect.spec.ts rename to ui/src/app/metadata/domain/effect/draft-collection.effect.spec.ts index cb12586de..1dc4c8851 100644 --- a/ui/src/app/domain/effect/draft-collection.effect.spec.ts +++ b/ui/src/app/metadata/domain/effect/draft-collection.effect.spec.ts @@ -1,16 +1,14 @@ -import { TestBed, tick, fakeAsync } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { Actions } from '@ngrx/effects'; -import { cold, getTestScheduler, hot } from 'jasmine-marbles'; -import { empty, Observable, of } from 'rxjs'; -import { TestActions, getActions } from '../../../testing/effect.util'; +import { TestActions, getActions } from '../../../../testing/effect.util'; import { DraftCollectionEffects, getPayload } from './draft-collection.effects'; import { EntityDraftService } from '../service/entity-draft.service'; -import { MetadataProvider } from '../domain.type'; +import { MetadataProvider } from '../model'; import { Router } from '@angular/router'; -import { RouterStub } from '../../../testing/router.stub'; -import { LoadDraftRequest, AddDraftRequest } from '../action/draft-collection.action'; -import { Provider } from '../entity/provider'; +import { RouterStub } from '../../../../testing/router.stub'; +import { AddDraftRequest } from '../action/draft-collection.action'; +import { Resolver } from '../model'; describe('Draft Collection Effects', () => { let effects: DraftCollectionEffects; @@ -43,7 +41,7 @@ describe('Draft Collection Effects', () => { describe('getPayload', () => { it('should return the action payload', () => { - const payload = new Provider({ id: 'foo' }); + const payload = new Resolver({ id: 'foo' }); const action = new AddDraftRequest(payload); expect(getPayload(action)).toEqual(payload); }); diff --git a/ui/src/app/domain/effect/draft-collection.effects.ts b/ui/src/app/metadata/domain/effect/draft-collection.effects.ts similarity index 98% rename from ui/src/app/domain/effect/draft-collection.effects.ts rename to ui/src/app/metadata/domain/effect/draft-collection.effects.ts index e113cf840..5c0eef714 100644 --- a/ui/src/app/domain/effect/draft-collection.effects.ts +++ b/ui/src/app/metadata/domain/effect/draft-collection.effects.ts @@ -10,7 +10,7 @@ import { switchMap, map, catchError, tap } from 'rxjs/operators'; import { DraftCollectionActionTypes, DraftCollectionActionsUnion } from '../action/draft-collection.action'; import * as actions from '../action/draft-collection.action'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataProvider } from '../../domain/model/provider'; import { EntityDraftService } from '../../domain/service/entity-draft.service'; export const getPayload = (action: any) => action.payload; diff --git a/ui/src/app/domain/effect/entity.effect.spec.ts b/ui/src/app/metadata/domain/effect/entity.effect.spec.ts similarity index 100% rename from ui/src/app/domain/effect/entity.effect.spec.ts rename to ui/src/app/metadata/domain/effect/entity.effect.spec.ts diff --git a/ui/src/app/domain/effect/entity.effect.ts b/ui/src/app/metadata/domain/effect/entity.effect.ts similarity index 100% rename from ui/src/app/domain/effect/entity.effect.ts rename to ui/src/app/metadata/domain/effect/entity.effect.ts diff --git a/ui/src/app/domain/effect/filter-collection.effect.spec.ts b/ui/src/app/metadata/domain/effect/filter-collection.effect.spec.ts similarity index 100% rename from ui/src/app/domain/effect/filter-collection.effect.spec.ts rename to ui/src/app/metadata/domain/effect/filter-collection.effect.spec.ts diff --git a/ui/src/app/domain/effect/filter-collection.effect.ts b/ui/src/app/metadata/domain/effect/filter-collection.effect.ts similarity index 100% rename from ui/src/app/domain/effect/filter-collection.effect.ts rename to ui/src/app/metadata/domain/effect/filter-collection.effect.ts diff --git a/ui/src/app/domain/effect/provider-collection.effect.spec.ts b/ui/src/app/metadata/domain/effect/provider-collection.effect.spec.ts similarity index 64% rename from ui/src/app/domain/effect/provider-collection.effect.spec.ts rename to ui/src/app/metadata/domain/effect/provider-collection.effect.spec.ts index e0ab36ae1..ffedc934d 100644 --- a/ui/src/app/domain/effect/provider-collection.effect.spec.ts +++ b/ui/src/app/metadata/domain/effect/provider-collection.effect.spec.ts @@ -1,16 +1,14 @@ -import { TestBed, tick, fakeAsync } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { Actions } from '@ngrx/effects'; -import { cold, getTestScheduler, hot } from 'jasmine-marbles'; -import { empty, Observable, of } from 'rxjs'; -import { TestActions, getActions } from '../../../testing/effect.util'; -import { MetadataProvider } from '../domain.type'; +import { TestActions, getActions } from '../../../../testing/effect.util'; +import { MetadataResolver } from '../model'; import { ProviderCollectionEffects } from './provider-collection.effects'; import { EntityDescriptorService } from '../service/entity-descriptor.service'; import { Router } from '@angular/router'; -import { RouterStub } from '../../../testing/router.stub'; +import { RouterStub } from '../../../../testing/router.stub'; -describe('Provider Collection Effects', () => { +describe('Resolver Collection Effects', () => { let effects: ProviderCollectionEffects; let draftService: any; let actions$: TestActions; @@ -24,10 +22,10 @@ describe('Provider Collection Effects', () => { useValue: { query: () => { }, find: (id: string) => { }, - save: (e: MetadataProvider) => { }, - update: (e: MetadataProvider) => { }, - remove: (e: MetadataProvider) => { }, - preview: (e: MetadataProvider) => { }, + save: (e: MetadataResolver) => { }, + update: (e: MetadataResolver) => { }, + remove: (e: MetadataResolver) => { }, + preview: (e: MetadataResolver) => { }, upload: (name: string, xml: string) => { }, createFromUrl: (name: string, url: string) => { } }, diff --git a/ui/src/app/domain/effect/provider-collection.effects.ts b/ui/src/app/metadata/domain/effect/provider-collection.effects.ts similarity index 94% rename from ui/src/app/domain/effect/provider-collection.effects.ts rename to ui/src/app/metadata/domain/effect/provider-collection.effects.ts index b402318f9..933c111ea 100644 --- a/ui/src/app/domain/effect/provider-collection.effects.ts +++ b/ui/src/app/metadata/domain/effect/provider-collection.effects.ts @@ -1,17 +1,15 @@ import { Injectable } from '@angular/core'; import { Effect, Actions, ofType } from '@ngrx/effects'; -import { Action } from '@ngrx/store'; import { Router } from '@angular/router'; -import { Observable, of } from 'rxjs'; +import { of } from 'rxjs'; import { map, catchError, switchMap, tap } from 'rxjs/operators'; import * as providerActions from '../action/provider-collection.action'; import * as draftActions from '../action/draft-collection.action'; -import { ProviderCollectionActionsUnion, ProviderCollectionActionTypes } from '../action/provider-collection.action'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { ProviderCollectionActionTypes } from '../action/provider-collection.action'; import { EntityDescriptorService } from '../../domain/service/entity-descriptor.service'; -import { removeNulls } from '../../shared/util'; +import { removeNulls } from '../../../shared/util'; /* istanbul ignore next */ @Injectable() diff --git a/ui/src/app/domain/guard/filter-exists.guard.ts b/ui/src/app/metadata/domain/guard/filter-exists.guard.ts similarity index 100% rename from ui/src/app/domain/guard/filter-exists.guard.ts rename to ui/src/app/metadata/domain/guard/filter-exists.guard.ts diff --git a/ui/src/app/domain/entity/filter.ts b/ui/src/app/metadata/domain/model/filter.entity.ts similarity index 79% rename from ui/src/app/domain/entity/filter.ts rename to ui/src/app/metadata/domain/model/filter.entity.ts index 58d386855..867ee3b3b 100644 --- a/ui/src/app/domain/entity/filter.ts +++ b/ui/src/app/metadata/domain/model/filter.entity.ts @@ -1,8 +1,9 @@ -import { MetadataFilter, RelyingPartyOverrides } from '../model/metadata-filter'; -import { DomainTypes } from '../domain.type'; -import { FilterTarget } from '../model/filter-target'; +import { MetadataFilter, RelyingPartyOverrides } from '../model'; +import { MetadataTypes } from '../domain.type'; +import { FilterTarget } from '../model'; +import { MetadataEntity } from '../model'; -export class Filter implements MetadataFilter { +export class Filter implements MetadataFilter, MetadataEntity { id = ''; createdDate?: string; modifiedDate?: string; @@ -36,7 +37,7 @@ export class Filter implements MetadataFilter { } get type(): string { - return DomainTypes.filter; + return MetadataTypes.FILTER; } get entityId(): string { diff --git a/ui/src/app/metadata/domain/model/index.ts b/ui/src/app/metadata/domain/model/index.ts new file mode 100644 index 000000000..5b8fa5fc4 --- /dev/null +++ b/ui/src/app/metadata/domain/model/index.ts @@ -0,0 +1,19 @@ +export * from './metadata-base'; +export * from './metadata-entity'; +export * from './metadata-filter'; +export * from './metadata-provider'; +export * from './metadata-resolver'; +export * from './properties/certificate'; +export * from './properties/contact'; +export * from './properties/filter-target'; +export * from './properties/logout-endpoint'; +export * from './properties/mdui'; +export * from './properties/organization'; +export * from './properties/relying-party-overrides'; +export * from './properties/security-info'; +export * from './properties/sso-descriptor'; +export * from './properties/sso-service'; + +export * from './filter.entity'; +export * from './resolver.entity'; +export * from './provider.entity'; diff --git a/ui/src/app/metadata/domain/model/metadata-base.ts b/ui/src/app/metadata/domain/model/metadata-base.ts new file mode 100644 index 000000000..2de4e32bf --- /dev/null +++ b/ui/src/app/metadata/domain/model/metadata-base.ts @@ -0,0 +1,6 @@ +export interface MetadataBase { + id?: string; + createdDate?: string; + modifiedDate?: string; + version?: string; +} diff --git a/ui/src/app/metadata/domain/model/metadata-entity.ts b/ui/src/app/metadata/domain/model/metadata-entity.ts new file mode 100644 index 000000000..6f7b9f306 --- /dev/null +++ b/ui/src/app/metadata/domain/model/metadata-entity.ts @@ -0,0 +1,7 @@ +export interface MetadataEntity { + name: string; + enabled: boolean; + type: string; + + serialize(): any; +} diff --git a/ui/src/app/domain/model/metadata-filter.ts b/ui/src/app/metadata/domain/model/metadata-filter.ts similarity index 56% rename from ui/src/app/domain/model/metadata-filter.ts rename to ui/src/app/metadata/domain/model/metadata-filter.ts index 548d6d813..6e9fc3983 100644 --- a/ui/src/app/domain/model/metadata-filter.ts +++ b/ui/src/app/metadata/domain/model/metadata-filter.ts @@ -1,6 +1,8 @@ -import { RelyingPartyOverrides } from './relying-party-overrides'; -import { MetadataBase } from './metadata-base'; -import { FilterTarget } from './filter-target'; +import { + MetadataBase, + FilterTarget, + RelyingPartyOverrides +} from '../model'; export interface MetadataFilter extends MetadataBase { entityId: string; @@ -12,5 +14,3 @@ export interface MetadataFilter extends MetadataBase { serialize(): any; } - -export * from './relying-party-overrides'; diff --git a/ui/src/app/metadata/domain/model/metadata-provider.ts b/ui/src/app/metadata/domain/model/metadata-provider.ts new file mode 100644 index 000000000..22da67257 --- /dev/null +++ b/ui/src/app/metadata/domain/model/metadata-provider.ts @@ -0,0 +1,25 @@ +import { + MetadataBase, + Organization, + Contact, + MDUI, + SecurityInfo, + SsoService, + IdpSsoDescriptor, + LogoutEndpoint, + RelyingPartyOverrides +} from '../model'; + +export interface MetadataProvider extends MetadataBase { + serviceProviderName: string; + organization?: Organization; + contacts?: Contact[]; + mdui?: MDUI; + securityInfo?: SecurityInfo; + assertionConsumerServices?: SsoService[]; + serviceProviderSsoDescriptor?: IdpSsoDescriptor; + logoutEndpoints?: LogoutEndpoint[]; + serviceEnabled?: boolean; + relyingPartyOverrides: RelyingPartyOverrides; + attributeRelease: string[]; +} diff --git a/ui/src/app/metadata/domain/model/metadata-resolver.ts b/ui/src/app/metadata/domain/model/metadata-resolver.ts new file mode 100644 index 000000000..431d9d448 --- /dev/null +++ b/ui/src/app/metadata/domain/model/metadata-resolver.ts @@ -0,0 +1,26 @@ +import { + MetadataBase, + Organization, + Contact, + MDUI, + SecurityInfo, + SsoService, + IdpSsoDescriptor, + LogoutEndpoint, + RelyingPartyOverrides +} from '../model'; + +export interface MetadataResolver extends MetadataBase { + entityId: string; + serviceProviderName: string; + organization?: Organization; + contacts?: Contact[]; + mdui?: MDUI; + securityInfo?: SecurityInfo; + assertionConsumerServices?: SsoService[]; + serviceProviderSsoDescriptor?: IdpSsoDescriptor; + logoutEndpoints?: LogoutEndpoint[]; + serviceEnabled?: boolean; + relyingPartyOverrides: RelyingPartyOverrides; + attributeRelease: string[]; +} diff --git a/ui/src/app/domain/model/certificate.ts b/ui/src/app/metadata/domain/model/properties/certificate.ts similarity index 97% rename from ui/src/app/domain/model/certificate.ts rename to ui/src/app/metadata/domain/model/properties/certificate.ts index e46be4e38..bb8ad9088 100644 --- a/ui/src/app/domain/model/certificate.ts +++ b/ui/src/app/metadata/domain/model/properties/certificate.ts @@ -2,4 +2,4 @@ export interface Certificate { name: string; type: string; value: string; -} \ No newline at end of file +} diff --git a/ui/src/app/domain/model/contact.ts b/ui/src/app/metadata/domain/model/properties/contact.ts similarity index 97% rename from ui/src/app/domain/model/contact.ts rename to ui/src/app/metadata/domain/model/properties/contact.ts index 1485522d5..52d1fe905 100644 --- a/ui/src/app/domain/model/contact.ts +++ b/ui/src/app/metadata/domain/model/properties/contact.ts @@ -2,4 +2,4 @@ export interface Contact { type: string; name: string; emailAddress: string; -} \ No newline at end of file +} diff --git a/ui/src/app/domain/model/filter-target.ts b/ui/src/app/metadata/domain/model/properties/filter-target.ts similarity index 100% rename from ui/src/app/domain/model/filter-target.ts rename to ui/src/app/metadata/domain/model/properties/filter-target.ts diff --git a/ui/src/app/domain/model/logout-endpoint.ts b/ui/src/app/metadata/domain/model/properties/logout-endpoint.ts similarity index 97% rename from ui/src/app/domain/model/logout-endpoint.ts rename to ui/src/app/metadata/domain/model/properties/logout-endpoint.ts index 9f149b4d2..31354277a 100644 --- a/ui/src/app/domain/model/logout-endpoint.ts +++ b/ui/src/app/metadata/domain/model/properties/logout-endpoint.ts @@ -1,4 +1,4 @@ export interface LogoutEndpoint { url: string; bindingType: string; -} \ No newline at end of file +} diff --git a/ui/src/app/domain/model/mdui.ts b/ui/src/app/metadata/domain/model/properties/mdui.ts similarity index 100% rename from ui/src/app/domain/model/mdui.ts rename to ui/src/app/metadata/domain/model/properties/mdui.ts diff --git a/ui/src/app/domain/model/organization.ts b/ui/src/app/metadata/domain/model/properties/organization.ts similarity index 100% rename from ui/src/app/domain/model/organization.ts rename to ui/src/app/metadata/domain/model/properties/organization.ts diff --git a/ui/src/app/domain/model/relying-party-overrides.ts b/ui/src/app/metadata/domain/model/properties/relying-party-overrides.ts similarity index 100% rename from ui/src/app/domain/model/relying-party-overrides.ts rename to ui/src/app/metadata/domain/model/properties/relying-party-overrides.ts diff --git a/ui/src/app/domain/model/security-info.ts b/ui/src/app/metadata/domain/model/properties/security-info.ts similarity index 100% rename from ui/src/app/domain/model/security-info.ts rename to ui/src/app/metadata/domain/model/properties/security-info.ts diff --git a/ui/src/app/domain/model/sso-descriptor.ts b/ui/src/app/metadata/domain/model/properties/sso-descriptor.ts similarity index 100% rename from ui/src/app/domain/model/sso-descriptor.ts rename to ui/src/app/metadata/domain/model/properties/sso-descriptor.ts diff --git a/ui/src/app/domain/model/sso-service.ts b/ui/src/app/metadata/domain/model/properties/sso-service.ts similarity index 100% rename from ui/src/app/domain/model/sso-service.ts rename to ui/src/app/metadata/domain/model/properties/sso-service.ts diff --git a/ui/src/app/domain/entity/provider.spec.ts b/ui/src/app/metadata/domain/model/provider.entity.spec.ts similarity index 92% rename from ui/src/app/domain/entity/provider.spec.ts rename to ui/src/app/metadata/domain/model/provider.entity.spec.ts index c5607e257..0ad9cee8b 100644 --- a/ui/src/app/domain/entity/provider.spec.ts +++ b/ui/src/app/metadata/domain/model/provider.entity.spec.ts @@ -1,7 +1,6 @@ -import { Provider } from './provider'; -import { MetadataProvider } from '../model/metadata-provider'; +import { Resolver } from './resolver.entity'; -describe('Provider construct', () => { +describe('Resolver construct', () => { const config = { id: 'foo', @@ -84,7 +83,7 @@ describe('Provider construct', () => { 'mail' ] }; - const entity = new Provider(config); + const entity = new Resolver(config); it('should populate its own values', () => { Object.keys(config).forEach(key => { diff --git a/ui/src/app/domain/entity/provider.ts b/ui/src/app/metadata/domain/model/provider.entity.ts similarity index 87% rename from ui/src/app/domain/entity/provider.ts rename to ui/src/app/metadata/domain/model/provider.entity.ts index f9bbb3692..ce5bdc30f 100644 --- a/ui/src/app/domain/entity/provider.ts +++ b/ui/src/app/metadata/domain/model/provider.entity.ts @@ -1,5 +1,6 @@ import { MetadataProvider, + MetadataEntity, Organization, Contact, MDUI, @@ -9,10 +10,10 @@ import { SsoService, IdpSsoDescriptor, RelyingPartyOverrides -} from '../model/metadata-provider'; -import { DomainTypes } from '../domain.type'; +} from '../model'; +import { MetadataTypes } from '../domain.type'; -export class Provider implements MetadataProvider { +export class Provider implements MetadataProvider, MetadataEntity { id = ''; createdDate?: string; modifiedDate?: string; @@ -60,7 +61,7 @@ export class Provider implements MetadataProvider { } get type(): string { - return DomainTypes.provider; + return MetadataTypes.PROVIDER; } serialize(): any { diff --git a/ui/src/app/metadata/domain/model/resolver.entity.ts b/ui/src/app/metadata/domain/model/resolver.entity.ts new file mode 100644 index 000000000..0b45a0344 --- /dev/null +++ b/ui/src/app/metadata/domain/model/resolver.entity.ts @@ -0,0 +1,70 @@ +import { + MetadataProvider, + Organization, + Contact, + MDUI, + LogoutEndpoint, + SecurityInfo, + Certificate, + SsoService, + IdpSsoDescriptor, + RelyingPartyOverrides +} from '../model'; +import { MetadataTypes } from '../domain.type'; +import { MetadataEntity } from '../model/metadata-entity'; + +export class Resolver implements MetadataProvider, MetadataEntity { + id = ''; + createdDate?: string; + modifiedDate?: string; + version: string; + + entityId = ''; + serviceProviderName = ''; + organization = {} as Organization; + contacts = [] as Contact[]; + mdui = {} as MDUI; + + securityInfo = { + x509CertificateAvailable: false, + authenticationRequestsSigned: false, + wantAssertionsSigned: false, + x509Certificates: [] as Certificate[] + } as SecurityInfo; + + assertionConsumerServices = [] as SsoService[]; + serviceProviderSsoDescriptor = { + nameIdFormats: [] + } as IdpSsoDescriptor; + + logoutEndpoints = [] as LogoutEndpoint[]; + + serviceEnabled = false; + + relyingPartyOverrides = { + nameIdFormats: [] as string[], + authenticationMethods: [] as string[] + } as RelyingPartyOverrides; + + attributeRelease = [] as string[]; + + constructor(descriptor?: Partial) { + Object.assign(this, descriptor); + } + + get name(): string { + return this.serviceProviderName; + } + + get enabled(): boolean { + return this.serviceEnabled; + } + + get type(): string { + return MetadataTypes.RESOLVER; + } + + serialize(): any { + return this; + } +} diff --git a/ui/src/app/domain/reducer/draft-collection.reducer.spec.ts b/ui/src/app/metadata/domain/reducer/draft-collection.reducer.spec.ts similarity index 96% rename from ui/src/app/domain/reducer/draft-collection.reducer.spec.ts rename to ui/src/app/metadata/domain/reducer/draft-collection.reducer.spec.ts index e9f72bd73..0ec6b9ff0 100644 --- a/ui/src/app/domain/reducer/draft-collection.reducer.spec.ts +++ b/ui/src/app/metadata/domain/reducer/draft-collection.reducer.spec.ts @@ -1,11 +1,11 @@ import { reducer, adapter } from './draft-collection.reducer'; import * as fromDrafts from './draft-collection.reducer'; import * as draftActions from '../action/draft-collection.action'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataResolver } from '../../domain/model'; -let drafts: MetadataProvider[] = [ - { entityId: 'foo', serviceProviderName: 'bar' } as MetadataProvider, - { entityId: 'baz', serviceProviderName: 'fin' } as MetadataProvider +let drafts: MetadataResolver[] = [ + { entityId: 'foo', serviceProviderName: 'bar' } as MetadataResolver, + { entityId: 'baz', serviceProviderName: 'fin' } as MetadataResolver ], snapshot: fromDrafts.DraftCollectionState = { ids: [drafts[0].entityId, drafts[1].entityId], diff --git a/ui/src/app/domain/reducer/draft-collection.reducer.ts b/ui/src/app/metadata/domain/reducer/draft-collection.reducer.ts similarity index 96% rename from ui/src/app/domain/reducer/draft-collection.reducer.ts rename to ui/src/app/metadata/domain/reducer/draft-collection.reducer.ts index 0fea3ea3d..ff1271faa 100644 --- a/ui/src/app/domain/reducer/draft-collection.reducer.ts +++ b/ui/src/app/metadata/domain/reducer/draft-collection.reducer.ts @@ -1,7 +1,7 @@ import { createSelector } from '@ngrx/store'; import { EntityState, EntityAdapter, createEntityAdapter } from '@ngrx/entity'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataProvider } from '../../domain/model/provider'; import * as providerAction from '../action/provider-collection.action'; import { DraftCollectionActionsUnion, DraftCollectionActionTypes } from '../action/draft-collection.action'; diff --git a/ui/src/app/domain/reducer/filter-collection.reducer.spec.ts b/ui/src/app/metadata/domain/reducer/filter-collection.reducer.spec.ts similarity index 100% rename from ui/src/app/domain/reducer/filter-collection.reducer.spec.ts rename to ui/src/app/metadata/domain/reducer/filter-collection.reducer.spec.ts diff --git a/ui/src/app/domain/reducer/filter-collection.reducer.ts b/ui/src/app/metadata/domain/reducer/filter-collection.reducer.ts similarity index 100% rename from ui/src/app/domain/reducer/filter-collection.reducer.ts rename to ui/src/app/metadata/domain/reducer/filter-collection.reducer.ts diff --git a/ui/src/app/domain/reducer/index.ts b/ui/src/app/metadata/domain/reducer/index.ts similarity index 97% rename from ui/src/app/domain/reducer/index.ts rename to ui/src/app/metadata/domain/reducer/index.ts index a6281c90b..5454f01a0 100644 --- a/ui/src/app/domain/reducer/index.ts +++ b/ui/src/app/metadata/domain/reducer/index.ts @@ -2,7 +2,7 @@ import { createSelector, createFeatureSelector, ActionReducerMap } from '@ngrx/s import * as fromFilter from './filter-collection.reducer'; import * as fromProvider from './provider-collection.reducer'; import * as fromDraft from './draft-collection.reducer'; -import * as fromRoot from '../../app.reducer'; +import * as fromRoot from '../../../app.reducer'; export interface CollectionState { filters: fromFilter.FilterCollectionState; @@ -45,7 +45,7 @@ export const getInCollectionFn = (entities, selectedId) => { export const getEntityIdsFn = list => list.map(entity => entity.entityId); /* - * Select pieces of Provider Collection + * Select pieces of Resolver Collection */ export const getProviderEntities = createSelector(getProviderEntityState, fromProvider.selectProviderEntities); diff --git a/ui/src/app/domain/reducer/provider-collection.reducer.spec.ts b/ui/src/app/metadata/domain/reducer/provider-collection.reducer.spec.ts similarity index 93% rename from ui/src/app/domain/reducer/provider-collection.reducer.spec.ts rename to ui/src/app/metadata/domain/reducer/provider-collection.reducer.spec.ts index baddf7317..ba6ae362b 100644 --- a/ui/src/app/domain/reducer/provider-collection.reducer.spec.ts +++ b/ui/src/app/metadata/domain/reducer/provider-collection.reducer.spec.ts @@ -1,11 +1,11 @@ import { reducer } from './provider-collection.reducer'; import * as fromProvider from './provider-collection.reducer'; import * as providerActions from '../action/provider-collection.action'; -import { MetadataProvider } from '../model/metadata-provider'; +import { MetadataResolver } from '../model'; -let providers: MetadataProvider[] = [ - { id: '1', entityId: 'foo', serviceProviderName: 'bar', createdDate: 'Tue Apr 17 2018 13:33:54 GMT-0700 (MST)' } as MetadataProvider, - { id: '2', entityId: 'baz', serviceProviderName: 'fin', createdDate: 'Tue Apr 17 2018 13:34:07 GMT-0700 (MST)' } as MetadataProvider +let providers: MetadataResolver[] = [ + { id: '1', entityId: 'foo', serviceProviderName: 'bar', createdDate: 'Tue Apr 17 2018 13:33:54 GMT-0700 (MST)' } as MetadataResolver, + { id: '2', entityId: 'baz', serviceProviderName: 'fin', createdDate: 'Tue Apr 17 2018 13:34:07 GMT-0700 (MST)' } as MetadataResolver ], snapshot: fromProvider.ProviderCollectionState = { ids: [providers[0].id, providers[1].id], @@ -16,7 +16,7 @@ let providers: MetadataProvider[] = [ selectedProviderId: null }; -describe('Provider Reducer', () => { +describe('Resolver Reducer', () => { const initialState: fromProvider.ProviderCollectionState = { ids: [], entities: {}, @@ -70,7 +70,7 @@ describe('Provider Reducer', () => { }); }); - describe('Select Provider', () => { + describe('Select Resolver', () => { it('should update the selected draft id', () => { let id = 'foo', expected = { ...snapshot, selectedProviderId: id }; diff --git a/ui/src/app/domain/reducer/provider-collection.reducer.ts b/ui/src/app/metadata/domain/reducer/provider-collection.reducer.ts similarity index 96% rename from ui/src/app/domain/reducer/provider-collection.reducer.ts rename to ui/src/app/metadata/domain/reducer/provider-collection.reducer.ts index 42a18c8c4..13497e6f7 100644 --- a/ui/src/app/domain/reducer/provider-collection.reducer.ts +++ b/ui/src/app/metadata/domain/reducer/provider-collection.reducer.ts @@ -1,7 +1,7 @@ import { createSelector } from '@ngrx/store'; import { EntityState, EntityAdapter, createEntityAdapter } from '@ngrx/entity'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataProvider } from '../../domain/model/provider'; import * as provider from '../action/provider-collection.action'; import { ProviderCollectionActionsUnion, ProviderCollectionActionTypes } from '../action/provider-collection.action'; diff --git a/ui/src/app/domain/service/entity-descriptor.service.spec.ts b/ui/src/app/metadata/domain/service/entity-descriptor.service.spec.ts similarity index 100% rename from ui/src/app/domain/service/entity-descriptor.service.spec.ts rename to ui/src/app/metadata/domain/service/entity-descriptor.service.spec.ts diff --git a/ui/src/app/domain/service/entity-descriptor.service.ts b/ui/src/app/metadata/domain/service/entity-descriptor.service.ts similarity index 97% rename from ui/src/app/domain/service/entity-descriptor.service.ts rename to ui/src/app/metadata/domain/service/entity-descriptor.service.ts index 9bc8c88eb..9bb798c15 100644 --- a/ui/src/app/domain/service/entity-descriptor.service.ts +++ b/ui/src/app/metadata/domain/service/entity-descriptor.service.ts @@ -4,7 +4,7 @@ import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; import { Observable, throwError } from 'rxjs'; import { catchError } from 'rxjs/operators'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataProvider } from '../../domain/model/provider'; import { MOCK_DESCRIPTORS } from '../../../data/descriptors.mock'; import { Storage } from '../../shared/storage'; import { environment } from '../../../environments/environment'; diff --git a/ui/src/app/domain/service/entity-draft.service.spec.ts b/ui/src/app/metadata/domain/service/entity-draft.service.spec.ts similarity index 90% rename from ui/src/app/domain/service/entity-draft.service.spec.ts rename to ui/src/app/metadata/domain/service/entity-draft.service.spec.ts index c30b8761a..dbe8a1109 100644 --- a/ui/src/app/domain/service/entity-draft.service.spec.ts +++ b/ui/src/app/metadata/domain/service/entity-draft.service.spec.ts @@ -2,7 +2,7 @@ import { TestBed } from '@angular/core/testing'; import { HttpClientModule, HttpRequest, HttpParams } from '@angular/common/http'; import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; import { EntityDraftService } from './entity-draft.service'; -import { Provider } from '../entity/provider'; +import { Resolver } from '../entity/provider'; describe(`EntityDraftService`, () => { @@ -20,7 +20,7 @@ describe(`EntityDraftService`, () => { describe('query', () => { it(`should return an observable of the list from the store`, (done: DoneFn) => { - let list = [new Provider()]; + let list = [new Resolver()]; spyOn(service.storage, 'query').and.returnValue(list); service.query().subscribe(l => { expect(l).toEqual(list); @@ -31,7 +31,7 @@ describe(`EntityDraftService`, () => { describe('find', () => { it(`should return an observable of the list from the store`, (done: DoneFn) => { let id = 'foo'; - let e = new Provider({ entityId: id }); + let e = new Resolver({ entityId: id }); let list = [e]; spyOn(service.storage, 'query').and.returnValue(list); service.find(id).subscribe(entity => { diff --git a/ui/src/app/domain/service/entity-draft.service.ts b/ui/src/app/metadata/domain/service/entity-draft.service.ts similarity index 95% rename from ui/src/app/domain/service/entity-draft.service.ts rename to ui/src/app/metadata/domain/service/entity-draft.service.ts index 687d4d441..83a0dcc8f 100644 --- a/ui/src/app/domain/service/entity-draft.service.ts +++ b/ui/src/app/metadata/domain/service/entity-draft.service.ts @@ -3,7 +3,7 @@ import { Injectable } from '@angular/core'; import { Observable, of } from 'rxjs'; import { switchMap } from 'rxjs/operators'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataProvider } from '../../domain/model/provider'; import { MOCK_DESCRIPTORS } from '../../../data/descriptors.mock'; import { Storage } from '../../shared/storage'; diff --git a/ui/src/app/domain/service/entity-id.service.spec.ts b/ui/src/app/metadata/domain/service/entity-id.service.spec.ts similarity index 100% rename from ui/src/app/domain/service/entity-id.service.spec.ts rename to ui/src/app/metadata/domain/service/entity-id.service.spec.ts diff --git a/ui/src/app/domain/service/entity-id.service.ts b/ui/src/app/metadata/domain/service/entity-id.service.ts similarity index 100% rename from ui/src/app/domain/service/entity-id.service.ts rename to ui/src/app/metadata/domain/service/entity-id.service.ts diff --git a/ui/src/app/domain/service/entity-validators.service.spec.ts b/ui/src/app/metadata/domain/service/entity-validators.service.spec.ts similarity index 100% rename from ui/src/app/domain/service/entity-validators.service.spec.ts rename to ui/src/app/metadata/domain/service/entity-validators.service.spec.ts diff --git a/ui/src/app/domain/service/entity-validators.service.ts b/ui/src/app/metadata/domain/service/entity-validators.service.ts similarity index 100% rename from ui/src/app/domain/service/entity-validators.service.ts rename to ui/src/app/metadata/domain/service/entity-validators.service.ts diff --git a/ui/src/app/domain/service/list-values.service.spec.ts b/ui/src/app/metadata/domain/service/list-values.service.spec.ts similarity index 100% rename from ui/src/app/domain/service/list-values.service.spec.ts rename to ui/src/app/metadata/domain/service/list-values.service.spec.ts diff --git a/ui/src/app/domain/service/list-values.service.ts b/ui/src/app/metadata/domain/service/list-values.service.ts similarity index 100% rename from ui/src/app/domain/service/list-values.service.ts rename to ui/src/app/metadata/domain/service/list-values.service.ts diff --git a/ui/src/app/domain/service/metadata-resolver.service.spec.ts b/ui/src/app/metadata/domain/service/metadata-resolver.service.spec.ts similarity index 100% rename from ui/src/app/domain/service/metadata-resolver.service.spec.ts rename to ui/src/app/metadata/domain/service/metadata-resolver.service.spec.ts diff --git a/ui/src/app/domain/service/metadata-resolver.service.ts b/ui/src/app/metadata/domain/service/metadata-resolver.service.ts similarity index 100% rename from ui/src/app/domain/service/metadata-resolver.service.ts rename to ui/src/app/metadata/domain/service/metadata-resolver.service.ts diff --git a/ui/src/app/domain/service/provider-change-emitter.service.spec.ts b/ui/src/app/metadata/domain/service/provider-change-emitter.service.spec.ts similarity index 96% rename from ui/src/app/domain/service/provider-change-emitter.service.spec.ts rename to ui/src/app/metadata/domain/service/provider-change-emitter.service.spec.ts index f77a10b01..97dba2257 100644 --- a/ui/src/app/domain/service/provider-change-emitter.service.spec.ts +++ b/ui/src/app/metadata/domain/service/provider-change-emitter.service.spec.ts @@ -4,7 +4,7 @@ import { Observable } from 'rxjs'; import { AbstractControl, FormBuilder, ReactiveFormsModule } from '@angular/forms'; import { ProviderStatusEmitter, ProviderValueEmitter } from './provider-change-emitter.service'; -describe(`Provider Change emitter service`, () => { +describe(`Resolver Change emitter service`, () => { beforeEach(() => { TestBed.configureTestingModule({ diff --git a/ui/src/app/domain/service/provider-change-emitter.service.ts b/ui/src/app/metadata/domain/service/provider-change-emitter.service.ts similarity index 100% rename from ui/src/app/domain/service/provider-change-emitter.service.ts rename to ui/src/app/metadata/domain/service/provider-change-emitter.service.ts diff --git a/ui/src/app/metadata-filter/action/filter.action.spec.ts b/ui/src/app/metadata/filter/action/filter.action.spec.ts similarity index 100% rename from ui/src/app/metadata-filter/action/filter.action.spec.ts rename to ui/src/app/metadata/filter/action/filter.action.spec.ts diff --git a/ui/src/app/metadata-filter/action/filter.action.ts b/ui/src/app/metadata/filter/action/filter.action.ts similarity index 100% rename from ui/src/app/metadata-filter/action/filter.action.ts rename to ui/src/app/metadata/filter/action/filter.action.ts diff --git a/ui/src/app/metadata-filter/action/search.action.spec.ts b/ui/src/app/metadata/filter/action/search.action.spec.ts similarity index 100% rename from ui/src/app/metadata-filter/action/search.action.spec.ts rename to ui/src/app/metadata/filter/action/search.action.spec.ts diff --git a/ui/src/app/metadata-filter/action/search.action.ts b/ui/src/app/metadata/filter/action/search.action.ts similarity index 100% rename from ui/src/app/metadata-filter/action/search.action.ts rename to ui/src/app/metadata/filter/action/search.action.ts diff --git a/ui/src/app/metadata-filter/component/search-dialog.component.html b/ui/src/app/metadata/filter/component/search-dialog.component.html similarity index 100% rename from ui/src/app/metadata-filter/component/search-dialog.component.html rename to ui/src/app/metadata/filter/component/search-dialog.component.html diff --git a/ui/src/app/metadata-filter/component/search-dialog.component.scss b/ui/src/app/metadata/filter/component/search-dialog.component.scss similarity index 100% rename from ui/src/app/metadata-filter/component/search-dialog.component.scss rename to ui/src/app/metadata/filter/component/search-dialog.component.scss diff --git a/ui/src/app/metadata-filter/component/search-dialog.component.spec.ts b/ui/src/app/metadata/filter/component/search-dialog.component.spec.ts similarity index 100% rename from ui/src/app/metadata-filter/component/search-dialog.component.spec.ts rename to ui/src/app/metadata/filter/component/search-dialog.component.spec.ts diff --git a/ui/src/app/metadata-filter/component/search-dialog.component.ts b/ui/src/app/metadata/filter/component/search-dialog.component.ts similarity index 100% rename from ui/src/app/metadata-filter/component/search-dialog.component.ts rename to ui/src/app/metadata/filter/component/search-dialog.component.ts diff --git a/ui/src/app/metadata-filter/container/edit-filter.component.html b/ui/src/app/metadata/filter/container/edit-filter.component.html similarity index 100% rename from ui/src/app/metadata-filter/container/edit-filter.component.html rename to ui/src/app/metadata/filter/container/edit-filter.component.html diff --git a/ui/src/app/metadata-filter/container/edit-filter.component.spec.ts b/ui/src/app/metadata/filter/container/edit-filter.component.spec.ts similarity index 100% rename from ui/src/app/metadata-filter/container/edit-filter.component.spec.ts rename to ui/src/app/metadata/filter/container/edit-filter.component.spec.ts diff --git a/ui/src/app/metadata-filter/container/edit-filter.component.ts b/ui/src/app/metadata/filter/container/edit-filter.component.ts similarity index 100% rename from ui/src/app/metadata-filter/container/edit-filter.component.ts rename to ui/src/app/metadata/filter/container/edit-filter.component.ts diff --git a/ui/src/app/metadata-filter/container/filter.component.html b/ui/src/app/metadata/filter/container/filter.component.html similarity index 100% rename from ui/src/app/metadata-filter/container/filter.component.html rename to ui/src/app/metadata/filter/container/filter.component.html diff --git a/ui/src/app/metadata-filter/container/filter.component.scss b/ui/src/app/metadata/filter/container/filter.component.scss similarity index 100% rename from ui/src/app/metadata-filter/container/filter.component.scss rename to ui/src/app/metadata/filter/container/filter.component.scss diff --git a/ui/src/app/metadata-filter/container/filter.component.spec.ts b/ui/src/app/metadata/filter/container/filter.component.spec.ts similarity index 100% rename from ui/src/app/metadata-filter/container/filter.component.spec.ts rename to ui/src/app/metadata/filter/container/filter.component.spec.ts diff --git a/ui/src/app/metadata-filter/container/filter.component.ts b/ui/src/app/metadata/filter/container/filter.component.ts similarity index 100% rename from ui/src/app/metadata-filter/container/filter.component.ts rename to ui/src/app/metadata/filter/container/filter.component.ts diff --git a/ui/src/app/metadata-filter/container/new-filter.component.html b/ui/src/app/metadata/filter/container/new-filter.component.html similarity index 100% rename from ui/src/app/metadata-filter/container/new-filter.component.html rename to ui/src/app/metadata/filter/container/new-filter.component.html diff --git a/ui/src/app/metadata-filter/container/new-filter.component.spec.ts b/ui/src/app/metadata/filter/container/new-filter.component.spec.ts similarity index 100% rename from ui/src/app/metadata-filter/container/new-filter.component.spec.ts rename to ui/src/app/metadata/filter/container/new-filter.component.spec.ts diff --git a/ui/src/app/metadata-filter/container/new-filter.component.ts b/ui/src/app/metadata/filter/container/new-filter.component.ts similarity index 100% rename from ui/src/app/metadata-filter/container/new-filter.component.ts rename to ui/src/app/metadata/filter/container/new-filter.component.ts diff --git a/ui/src/app/metadata-filter/effect/filter.effect.ts b/ui/src/app/metadata/filter/effect/filter.effect.ts similarity index 100% rename from ui/src/app/metadata-filter/effect/filter.effect.ts rename to ui/src/app/metadata/filter/effect/filter.effect.ts diff --git a/ui/src/app/metadata-filter/effect/search.effect.ts b/ui/src/app/metadata/filter/effect/search.effect.ts similarity index 96% rename from ui/src/app/metadata-filter/effect/search.effect.ts rename to ui/src/app/metadata/filter/effect/search.effect.ts index ba9e74dcb..fffd28530 100644 --- a/ui/src/app/metadata-filter/effect/search.effect.ts +++ b/ui/src/app/metadata/filter/effect/search.effect.ts @@ -15,7 +15,7 @@ import * as collection from '../../domain/action/filter-collection.action'; import { SearchDialogComponent } from '../component/search-dialog.component'; import { EntityIdService } from '../../domain/service/entity-id.service'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataProvider } from '../../domain/model/provider'; import { MetadataResolverService } from '../../domain/service/metadata-resolver.service'; import { fromPromise } from 'rxjs/internal-compatibility'; diff --git a/ui/src/app/metadata-filter/filter.module.ts b/ui/src/app/metadata/filter/filter.module.ts similarity index 100% rename from ui/src/app/metadata-filter/filter.module.ts rename to ui/src/app/metadata/filter/filter.module.ts diff --git a/ui/src/app/metadata-filter/reducer/filter.reducer.spec.ts b/ui/src/app/metadata/filter/reducer/filter.reducer.spec.ts similarity index 100% rename from ui/src/app/metadata-filter/reducer/filter.reducer.spec.ts rename to ui/src/app/metadata/filter/reducer/filter.reducer.spec.ts diff --git a/ui/src/app/metadata-filter/reducer/filter.reducer.ts b/ui/src/app/metadata/filter/reducer/filter.reducer.ts similarity index 100% rename from ui/src/app/metadata-filter/reducer/filter.reducer.ts rename to ui/src/app/metadata/filter/reducer/filter.reducer.ts diff --git a/ui/src/app/metadata-filter/reducer/index.ts b/ui/src/app/metadata/filter/reducer/index.ts similarity index 100% rename from ui/src/app/metadata-filter/reducer/index.ts rename to ui/src/app/metadata/filter/reducer/index.ts diff --git a/ui/src/app/metadata-filter/reducer/search.reducer.spec.ts b/ui/src/app/metadata/filter/reducer/search.reducer.spec.ts similarity index 100% rename from ui/src/app/metadata-filter/reducer/search.reducer.spec.ts rename to ui/src/app/metadata/filter/reducer/search.reducer.spec.ts diff --git a/ui/src/app/metadata-filter/reducer/search.reducer.ts b/ui/src/app/metadata/filter/reducer/search.reducer.ts similarity index 100% rename from ui/src/app/metadata-filter/reducer/search.reducer.ts rename to ui/src/app/metadata/filter/reducer/search.reducer.ts diff --git a/ui/src/app/metadata/metadata.module.ts b/ui/src/app/metadata/metadata.module.ts new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/metadata/provider/provider.module.ts b/ui/src/app/metadata/provider/provider.module.ts new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/metadata/resolver/resolver.module.ts b/ui/src/app/metadata/resolver/resolver.module.ts new file mode 100644 index 000000000..e69de29bb From 389c564234a8396835db9eb532821fda024df31b Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Wed, 13 Jun 2018 13:56:16 -0700 Subject: [PATCH 02/16] SHIBUI-598 Moving type files --- ui/src/app/domain/domain.type.ts | 14 ----- ui/src/app/domain/model/metadata-base.ts | 12 ---- ui/src/app/metadata/domain/domain.type.ts | 31 ++++++++-- .../filter/entity-attributes-filter.ts} | 10 ++-- ui/src/app/metadata/domain/entity/index.ts | 3 + .../file-backed-http-metadata-provider.ts} | 8 +-- ...ile-backed-http-metadata-resolver.spec.ts} | 4 +- .../file-backed-http-metadata-resolver.ts} | 10 ++-- .../metadata/domain/model/filter.entity.ts | 60 ------------------- .../metadata/domain/model/metadata-entity.ts | 2 +- 10 files changed, 47 insertions(+), 107 deletions(-) delete mode 100644 ui/src/app/domain/domain.type.ts delete mode 100644 ui/src/app/domain/model/metadata-base.ts rename ui/src/app/{domain/entity/entity-attributes.filter.ts => metadata/domain/entity/filter/entity-attributes-filter.ts} (82%) create mode 100644 ui/src/app/metadata/domain/entity/index.ts rename ui/src/app/metadata/domain/{model/provider.entity.ts => entity/provider/file-backed-http-metadata-provider.ts} (87%) rename ui/src/app/metadata/domain/{model/provider.entity.spec.ts => entity/resolver/file-backed-http-metadata-resolver.spec.ts} (94%) rename ui/src/app/metadata/domain/{model/resolver.entity.ts => entity/resolver/file-backed-http-metadata-resolver.ts} (84%) delete mode 100644 ui/src/app/metadata/domain/model/filter.entity.ts diff --git a/ui/src/app/domain/domain.type.ts b/ui/src/app/domain/domain.type.ts deleted file mode 100644 index d9bd86cfa..000000000 --- a/ui/src/app/domain/domain.type.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { MetadataFilter } from './model/metadata-filter'; -import { MetadataProvider } from './model/metadata-provider'; - -export * from './model/metadata-provider'; -export * from './model/metadata-filter'; - -export enum DomainEntityKinds { - filter = 'filter', - provider = 'provider' -} - -export type MetadataEntity = - | MetadataFilter - | MetadataProvider; diff --git a/ui/src/app/domain/model/metadata-base.ts b/ui/src/app/domain/model/metadata-base.ts deleted file mode 100644 index fc5ea1ca7..000000000 --- a/ui/src/app/domain/model/metadata-base.ts +++ /dev/null @@ -1,12 +0,0 @@ -export interface MetadataBase { - id?: string; - createdDate?: string; - modifiedDate?: string; - version: string; - - name: string; - enabled: boolean; - kind: string; - - serialize(): any; -} diff --git a/ui/src/app/metadata/domain/domain.type.ts b/ui/src/app/metadata/domain/domain.type.ts index 71a8194ed..6391a9be0 100644 --- a/ui/src/app/metadata/domain/domain.type.ts +++ b/ui/src/app/metadata/domain/domain.type.ts @@ -4,13 +4,36 @@ import { MetadataFilter } from './model'; +import { + EntityAttributesFilter, + FileBackedHttpMetadataResolver, + FileBackedHttpMetadataProvider +} from './entity'; + +export type Filter = + | EntityAttributesFilter; + +export type Resolver = + | FileBackedHttpMetadataResolver; + +export type Provider = + | FileBackedHttpMetadataProvider; + +export type Entity = + | Filter + | Resolver + | Provider; + +export type Metadata = + | MetadataProvider + | MetadataResolver + | MetadataFilter; + export enum MetadataTypes { FILTER = '[Type] Metadata Filter', PROVIDER = '[Type] Metadata Provider', RESOLVER = '[Type] Metadata Resolver' } -export type Metadata = - | MetadataProvider - | MetadataResolver - | MetadataFilter; +export * from './model'; +export * from './entity'; diff --git a/ui/src/app/domain/entity/entity-attributes.filter.ts b/ui/src/app/metadata/domain/entity/filter/entity-attributes-filter.ts similarity index 82% rename from ui/src/app/domain/entity/entity-attributes.filter.ts rename to ui/src/app/metadata/domain/entity/filter/entity-attributes-filter.ts index b10cde00f..d2bbe89ab 100644 --- a/ui/src/app/domain/entity/entity-attributes.filter.ts +++ b/ui/src/app/metadata/domain/entity/filter/entity-attributes-filter.ts @@ -1,8 +1,8 @@ -import { MetadataFilter, RelyingPartyOverrides } from '../model/metadata-filter'; -import { DomainEntityKinds } from '../domain.type'; -import { FilterTarget } from '../model/filter-target'; +import { MetadataFilter, MetadataEntity, RelyingPartyOverrides } from '../../model'; +import { MetadataTypes } from '../../domain.type'; +import { FilterTarget } from '../../model'; -export class EntityAttributesFilter implements MetadataFilter { +export class EntityAttributesFilter implements MetadataFilter, MetadataEntity { createdDate?: string; modifiedDate?: string; version: string; @@ -42,7 +42,7 @@ export class EntityAttributesFilter implements MetadataFilter { } get kind(): string { - return DomainEntityKinds.filter; + return MetadataTypes.FILTER; } get entityId(): string { diff --git a/ui/src/app/metadata/domain/entity/index.ts b/ui/src/app/metadata/domain/entity/index.ts new file mode 100644 index 000000000..1adb3735e --- /dev/null +++ b/ui/src/app/metadata/domain/entity/index.ts @@ -0,0 +1,3 @@ +export * from './filter/entity-attributes-filter'; +export * from './provider/file-backed-http-metadata-provider'; +export * from './resolver/file-backed-http-metadata-resolver'; diff --git a/ui/src/app/metadata/domain/model/provider.entity.ts b/ui/src/app/metadata/domain/entity/provider/file-backed-http-metadata-provider.ts similarity index 87% rename from ui/src/app/metadata/domain/model/provider.entity.ts rename to ui/src/app/metadata/domain/entity/provider/file-backed-http-metadata-provider.ts index 6cffb27a6..d5841ab0b 100644 --- a/ui/src/app/metadata/domain/model/provider.entity.ts +++ b/ui/src/app/metadata/domain/entity/provider/file-backed-http-metadata-provider.ts @@ -10,10 +10,10 @@ import { SsoService, IdpSsoDescriptor, RelyingPartyOverrides -} from '../model'; -import { MetadataTypes } from '../domain.type'; +} from '../../model'; +import { MetadataTypes } from '../../domain.type'; -export class Provider implements MetadataProvider, MetadataEntity { +export class FileBackedHttpMetadataProvider implements MetadataProvider, MetadataEntity { id = ''; createdDate?: string; modifiedDate?: string; @@ -61,7 +61,7 @@ export class Provider implements MetadataProvider, MetadataEntity { } get kind(): string { - return DomainEntityKinds.provider; + return MetadataTypes.PROVIDER; } serialize(): any { diff --git a/ui/src/app/metadata/domain/model/provider.entity.spec.ts b/ui/src/app/metadata/domain/entity/resolver/file-backed-http-metadata-resolver.spec.ts similarity index 94% rename from ui/src/app/metadata/domain/model/provider.entity.spec.ts rename to ui/src/app/metadata/domain/entity/resolver/file-backed-http-metadata-resolver.spec.ts index 0ad9cee8b..669033c19 100644 --- a/ui/src/app/metadata/domain/model/provider.entity.spec.ts +++ b/ui/src/app/metadata/domain/entity/resolver/file-backed-http-metadata-resolver.spec.ts @@ -1,4 +1,4 @@ -import { Resolver } from './resolver.entity'; +import { FileBackedHttpMetadataResolver } from './file-backed-http-metadata-resolver'; describe('Resolver construct', () => { @@ -83,7 +83,7 @@ describe('Resolver construct', () => { 'mail' ] }; - const entity = new Resolver(config); + const entity = new FileBackedHttpMetadataResolver(config); it('should populate its own values', () => { Object.keys(config).forEach(key => { diff --git a/ui/src/app/metadata/domain/model/resolver.entity.ts b/ui/src/app/metadata/domain/entity/resolver/file-backed-http-metadata-resolver.ts similarity index 84% rename from ui/src/app/metadata/domain/model/resolver.entity.ts rename to ui/src/app/metadata/domain/entity/resolver/file-backed-http-metadata-resolver.ts index 0b45a0344..8759ef3eb 100644 --- a/ui/src/app/metadata/domain/model/resolver.entity.ts +++ b/ui/src/app/metadata/domain/entity/resolver/file-backed-http-metadata-resolver.ts @@ -9,11 +9,11 @@ import { SsoService, IdpSsoDescriptor, RelyingPartyOverrides -} from '../model'; -import { MetadataTypes } from '../domain.type'; -import { MetadataEntity } from '../model/metadata-entity'; +} from '../../model'; +import { MetadataTypes } from '../../domain.type'; +import { MetadataEntity } from '../../model/metadata-entity'; -export class Resolver implements MetadataProvider, MetadataEntity { +export class FileBackedHttpMetadataResolver implements MetadataProvider, MetadataEntity { id = ''; createdDate?: string; modifiedDate?: string; @@ -60,7 +60,7 @@ export class Resolver implements MetadataProvider, MetadataEntity { return this.serviceEnabled; } - get type(): string { + get kind(): string { return MetadataTypes.RESOLVER; } diff --git a/ui/src/app/metadata/domain/model/filter.entity.ts b/ui/src/app/metadata/domain/model/filter.entity.ts deleted file mode 100644 index 867ee3b3b..000000000 --- a/ui/src/app/metadata/domain/model/filter.entity.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { MetadataFilter, RelyingPartyOverrides } from '../model'; -import { MetadataTypes } from '../domain.type'; -import { FilterTarget } from '../model'; -import { MetadataEntity } from '../model'; - -export class Filter implements MetadataFilter, MetadataEntity { - id = ''; - createdDate?: string; - modifiedDate?: string; - version: string; - - filterName = ''; - filterEnabled = false; - - relyingPartyOverrides = { - nameIdFormats: [] as string[], - authenticationMethods: [] as string[] - } as RelyingPartyOverrides; - - attributeRelease = [] as string[]; - - filterTarget: FilterTarget = { - type: 'ENTITY', - value: [''] - }; - - constructor(obj?: Partial) { - Object.assign(this, { ...obj }); - } - - get name(): string { - return this.filterName; - } - - get enabled(): boolean { - return this.filterEnabled; - } - - get type(): string { - return MetadataTypes.FILTER; - } - - get entityId(): string { - return this.filterTarget.value[0]; - } - - set entityId(val: string) { - this.filterTarget.value[0] = val; - } - - serialize(): any { - return { - attributeRelease: this.attributeRelease, - relyingPartyOverrides: this.relyingPartyOverrides, - filterTarget: { ...this.filterTarget }, - filterEnabled: this.filterEnabled, - filterName: this.filterName - }; - } -} diff --git a/ui/src/app/metadata/domain/model/metadata-entity.ts b/ui/src/app/metadata/domain/model/metadata-entity.ts index 6f7b9f306..68dab399f 100644 --- a/ui/src/app/metadata/domain/model/metadata-entity.ts +++ b/ui/src/app/metadata/domain/model/metadata-entity.ts @@ -1,7 +1,7 @@ export interface MetadataEntity { name: string; enabled: boolean; - type: string; + kind: string; serialize(): any; } From ba1c5a102594ed4280df30533d65130462c97003 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Thu, 14 Jun 2018 13:40:15 -0700 Subject: [PATCH 03/16] Refactoring --- ui/src/app/edit-provider/editor.module.ts | 84 -------------- ui/src/app/edit-provider/reducer/index.ts | 24 ---- ui/src/app/metadata-provider/reducer/index.ts | 34 ------ .../forms/advanced-info-form.component.html | 0 .../advanced-info-form.component.spec.ts | 0 .../forms/advanced-info-form.component.ts | 24 ++-- .../forms/assertion-form.component.html | 0 .../forms/assertion-form.component.spec.ts | 0 .../forms/assertion-form.component.ts | 9 +- .../attribute-release-form.component.html | 0 .../attribute-release-form.component.spec.ts | 0 .../forms/attribute-release-form.component.ts | 10 +- .../forms/descriptor-info-form.component.html | 0 .../descriptor-info-form.component.spec.ts | 0 .../forms/descriptor-info-form.component.ts | 8 +- .../forms/finish-form.component.html | 0 .../forms/finish-form.component.scss | 0 .../forms/finish-form.component.spec.ts | 0 .../component/forms/finish-form.component.ts | 12 +- .../forms/key-info-form.component.html | 0 .../forms/key-info-form.component.spec.ts | 0 .../forms/key-info-form.component.ts | 14 +-- .../forms/logout-form.component.html | 0 .../forms/logout-form.component.spec.ts | 0 .../component/forms/logout-form.component.ts | 14 +-- .../forms/metadata-ui-form.component.html | 0 .../forms/metadata-ui-form.component.spec.ts | 0 .../forms/metadata-ui-form.component.ts | 13 +-- .../organization-info-form.component.html | 0 .../organization-info-form.component.spec.ts | 0 .../forms/organization-info-form.component.ts | 5 +- .../provider-form-fragment.component.spec.ts | 0 .../forms/provider-form-fragment.component.ts | 15 ++- .../forms/relying-party-form.component.html | 0 .../relying-party-form.component.spec.ts | 0 .../forms/relying-party-form.component.ts | 9 +- .../domain}/component/index.ts | 8 +- .../domain/effect/entity.effect.spec.ts | 6 +- .../metadata/domain/effect/entity.effect.ts | 11 +- .../entity/filter/entity-attributes-filter.ts | 4 + .../file-backed-http-metadata-provider.ts | 4 + .../file-backed-http-metadata-resolver.ts | 12 +- ui/src/app/metadata/domain/model/index.ts | 4 - .../metadata/domain/model/metadata-entity.ts | 2 + .../reducer/draft-collection.reducer.ts | 61 ----------- ui/src/app/metadata/domain/reducer/index.ts | 88 --------------- .../service/entity-descriptor.service.ts | 36 +++--- .../domain/service/entity-draft.service.ts | 19 ++-- .../domain/service/entity-id.service.ts | 11 +- .../service/entity-validators.service.ts | 2 +- .../action/collection.action.ts} | 0 .../metadata/filter/action/filter.action.ts | 36 +++--- .../metadata/filter/action/search.action.ts | 32 +++--- .../component/search-dialog.component.ts | 2 +- .../filter/container/edit-filter.component.ts | 13 +-- .../filter/container/filter.component.ts | 9 +- .../filter/container/new-filter.component.ts | 6 +- .../effect/collection.effect.spec.ts} | 14 +-- .../effect/collection.effect.ts} | 12 +- .../metadata/filter/effect/filter.effect.ts | 47 +++++--- .../metadata/filter/effect/search.effect.ts | 21 ++-- .../guard/filter-exists.guard.ts | 3 +- .../reducer/collection.reducer.spec.ts} | 12 +- .../reducer/collection.reducer.ts} | 17 ++- .../filter/reducer/filter.reducer.spec.ts | 28 ++--- .../metadata/filter/reducer/filter.reducer.ts | 24 ++-- ui/src/app/metadata/filter/reducer/index.ts | 26 ++++- .../filter/reducer/search.reducer.spec.ts | 29 +++-- .../metadata/filter/reducer/search.reducer.ts | 22 ++-- ui/src/app/metadata/metadata.reducer.ts | 32 ++++++ .../action/collection.action.ts} | 22 ++-- .../resolver}/action/copy.action.ts | 6 +- .../action/draft.action.ts} | 52 ++++----- .../resolver}/action/editor.action.ts | 6 +- .../resolver}/action/search.action.ts | 1 - .../component/unsaved-dialog.component.html | 0 .../component/unsaved-dialog.component.ts | 6 +- .../component/valid-form-icon.component.html | 0 .../component/valid-form-icon.component.ts | 2 +- .../component/wizard-nav.component.html | 0 .../component/wizard-nav.component.spec.ts | 0 .../component/wizard-nav.component.ts | 0 .../container/blank-provider.component.html | 0 .../blank-provider.component.spec.ts | 0 .../container/blank-provider.component.ts | 20 ++-- .../container/confirm-copy.component.html | 0 .../container/confirm-copy.component.scss | 0 .../container/confirm-copy.component.spec.ts | 0 .../container/confirm-copy.component.ts | 10 +- .../container/copy-provider.component.html | 0 .../container/copy-provider.component.spec.ts | 0 .../container/copy-provider.component.ts | 0 .../resolver}/container/draft.component.html | 0 .../resolver}/container/draft.component.ts | 2 +- .../resolver}/container/editor.component.html | 0 .../resolver}/container/editor.component.ts | 16 +-- .../container/new-provider.component.html | 0 .../container/new-provider.component.scss | 0 .../container/new-provider.component.spec.ts | 0 .../container/new-provider.component.ts | 0 .../container/provider.component.html | 0 .../container/provider.component.scss | 0 .../container/provider.component.spec.ts | 0 .../resolver}/container/provider.component.ts | 2 +- .../container/upload-provider.component.html | 0 .../upload-provider.component.spec.ts | 0 .../container/upload-provider.component.ts | 0 .../resolver}/container/wizard.component.html | 0 .../resolver}/container/wizard.component.scss | 0 .../resolver}/container/wizard.component.ts | 12 +- .../resolver}/editor-definition.const.ts | 0 .../resolver}/effect/copy.effect.ts | 0 .../effect/draft-collection.effect.spec.ts | 8 +- .../effect/draft-collection.effects.ts | 2 +- .../resolver}/effect/editor.effect.ts | 2 +- .../effect/provider-collection.effect.spec.ts | 0 .../effect/provider-collection.effects.ts | 0 .../resolver}/effect/search.effect.ts | 0 .../resolver}/effect/wizard.effect.ts | 2 +- .../resolver}/guard/copy-isset.guard.ts | 0 .../resolver}/metadata-provider.module.ts | 0 .../reducer/collection.reducer.spec.ts} | 40 +++---- .../reducer/collection.reducer.ts} | 21 ++-- .../resolver}/reducer/copy.reducer.spec.ts | 0 .../resolver}/reducer/copy.reducer.ts | 8 +- .../reducer/draft.reducer.spec.ts} | 10 +- .../resolver/reducer/draft.reducer.ts | 59 ++++++++++ .../resolver}/reducer/editor.reducer.spec.ts | 22 ++-- .../resolver}/reducer/editor.reducer.ts | 11 +- ui/src/app/metadata/resolver/reducer/index.ts | 103 ++++++++++++++++++ .../resolver}/reducer/search.reducer.spec.ts | 0 .../resolver}/reducer/search.reducer.ts | 2 +- .../app/metadata/resolver/resolver.module.ts | 84 ++++++++++++++ .../directive/info-label.directive.spec.ts | 0 .../directive/info-label.directive.ts | 0 .../input-defaults.directive.spec.ts | 0 .../directive/input-defaults.directive.ts | 0 .../pipe/pretty-xml.pipe.ts | 0 138 files changed, 728 insertions(+), 731 deletions(-) delete mode 100644 ui/src/app/edit-provider/editor.module.ts delete mode 100644 ui/src/app/edit-provider/reducer/index.ts delete mode 100644 ui/src/app/metadata-provider/reducer/index.ts rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/advanced-info-form.component.html (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/advanced-info-form.component.spec.ts (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/advanced-info-form.component.ts (84%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/assertion-form.component.html (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/assertion-form.component.spec.ts (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/assertion-form.component.ts (88%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/attribute-release-form.component.html (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/attribute-release-form.component.spec.ts (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/attribute-release-form.component.ts (89%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/descriptor-info-form.component.html (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/descriptor-info-form.component.spec.ts (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/descriptor-info-form.component.ts (88%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/finish-form.component.html (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/finish-form.component.scss (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/finish-form.component.spec.ts (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/finish-form.component.ts (71%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/key-info-form.component.html (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/key-info-form.component.spec.ts (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/key-info-form.component.ts (86%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/logout-form.component.html (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/logout-form.component.spec.ts (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/logout-form.component.ts (76%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/metadata-ui-form.component.html (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/metadata-ui-form.component.spec.ts (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/metadata-ui-form.component.ts (73%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/organization-info-form.component.html (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/organization-info-form.component.spec.ts (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/organization-info-form.component.ts (94%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/provider-form-fragment.component.spec.ts (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/provider-form-fragment.component.ts (74%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/relying-party-form.component.html (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/relying-party-form.component.spec.ts (100%) rename ui/src/app/{metadata-provider => metadata/domain}/component/forms/relying-party-form.component.ts (89%) rename ui/src/app/{metadata-provider => metadata/domain}/component/index.ts (84%) delete mode 100644 ui/src/app/metadata/domain/reducer/draft-collection.reducer.ts delete mode 100644 ui/src/app/metadata/domain/reducer/index.ts rename ui/src/app/metadata/{domain/action/filter-collection.action.ts => filter/action/collection.action.ts} (100%) rename ui/src/app/metadata/{domain/effect/filter-collection.effect.spec.ts => filter/effect/collection.effect.spec.ts} (67%) rename ui/src/app/metadata/{domain/effect/filter-collection.effect.ts => filter/effect/collection.effect.ts} (90%) rename ui/src/app/metadata/{domain => filter}/guard/filter-exists.guard.ts (93%) rename ui/src/app/metadata/{domain/reducer/filter-collection.reducer.spec.ts => filter/reducer/collection.reducer.spec.ts} (85%) rename ui/src/app/metadata/{domain/reducer/filter-collection.reducer.ts => filter/reducer/collection.reducer.ts} (69%) create mode 100644 ui/src/app/metadata/metadata.reducer.ts rename ui/src/app/metadata/{domain/action/provider-collection.action.ts => resolver/action/collection.action.ts} (87%) rename ui/src/app/{metadata-provider => metadata/resolver}/action/copy.action.ts (90%) rename ui/src/app/metadata/{domain/action/draft-collection.action.ts => resolver/action/draft.action.ts} (59%) rename ui/src/app/{edit-provider => metadata/resolver}/action/editor.action.ts (84%) rename ui/src/app/{metadata-provider => metadata/resolver}/action/search.action.ts (91%) rename ui/src/app/{edit-provider => metadata/resolver}/component/unsaved-dialog.component.html (100%) rename ui/src/app/{edit-provider => metadata/resolver}/component/unsaved-dialog.component.ts (65%) rename ui/src/app/{edit-provider => metadata/resolver}/component/valid-form-icon.component.html (100%) rename ui/src/app/{edit-provider => metadata/resolver}/component/valid-form-icon.component.ts (74%) rename ui/src/app/{edit-provider => metadata/resolver}/component/wizard-nav.component.html (100%) rename ui/src/app/{edit-provider => metadata/resolver}/component/wizard-nav.component.spec.ts (100%) rename ui/src/app/{edit-provider => metadata/resolver}/component/wizard-nav.component.ts (100%) rename ui/src/app/{metadata-provider => metadata/resolver}/container/blank-provider.component.html (100%) rename ui/src/app/{metadata-provider => metadata/resolver}/container/blank-provider.component.spec.ts (100%) rename ui/src/app/{metadata-provider => metadata/resolver}/container/blank-provider.component.ts (58%) rename ui/src/app/{metadata-provider => metadata/resolver}/container/confirm-copy.component.html (100%) rename ui/src/app/{metadata-provider => metadata/resolver}/container/confirm-copy.component.scss (100%) rename ui/src/app/{metadata-provider => metadata/resolver}/container/confirm-copy.component.spec.ts (100%) rename ui/src/app/{metadata-provider => metadata/resolver}/container/confirm-copy.component.ts (85%) rename ui/src/app/{metadata-provider => metadata/resolver}/container/copy-provider.component.html (100%) rename ui/src/app/{metadata-provider => metadata/resolver}/container/copy-provider.component.spec.ts (100%) rename ui/src/app/{metadata-provider => metadata/resolver}/container/copy-provider.component.ts (100%) rename ui/src/app/{edit-provider => metadata/resolver}/container/draft.component.html (100%) rename ui/src/app/{edit-provider => metadata/resolver}/container/draft.component.ts (95%) rename ui/src/app/{edit-provider => metadata/resolver}/container/editor.component.html (100%) rename ui/src/app/{edit-provider => metadata/resolver}/container/editor.component.ts (95%) rename ui/src/app/{metadata-provider => metadata/resolver}/container/new-provider.component.html (100%) rename ui/src/app/{metadata-provider => metadata/resolver}/container/new-provider.component.scss (100%) rename ui/src/app/{metadata-provider => metadata/resolver}/container/new-provider.component.spec.ts (100%) rename ui/src/app/{metadata-provider => metadata/resolver}/container/new-provider.component.ts (100%) rename ui/src/app/{edit-provider => metadata/resolver}/container/provider.component.html (100%) rename ui/src/app/{edit-provider => metadata/resolver}/container/provider.component.scss (100%) rename ui/src/app/{edit-provider => metadata/resolver}/container/provider.component.spec.ts (100%) rename ui/src/app/{edit-provider => metadata/resolver}/container/provider.component.ts (95%) rename ui/src/app/{metadata-provider => metadata/resolver}/container/upload-provider.component.html (100%) rename ui/src/app/{metadata-provider => metadata/resolver}/container/upload-provider.component.spec.ts (100%) rename ui/src/app/{metadata-provider => metadata/resolver}/container/upload-provider.component.ts (100%) rename ui/src/app/{edit-provider => metadata/resolver}/container/wizard.component.html (100%) rename ui/src/app/{edit-provider => metadata/resolver}/container/wizard.component.scss (100%) rename ui/src/app/{edit-provider => metadata/resolver}/container/wizard.component.ts (95%) rename ui/src/app/{edit-provider => metadata/resolver}/editor-definition.const.ts (100%) rename ui/src/app/{metadata-provider => metadata/resolver}/effect/copy.effect.ts (100%) rename ui/src/app/metadata/{domain => resolver}/effect/draft-collection.effect.spec.ts (87%) rename ui/src/app/metadata/{domain => resolver}/effect/draft-collection.effects.ts (98%) rename ui/src/app/{edit-provider => metadata/resolver}/effect/editor.effect.ts (97%) rename ui/src/app/metadata/{domain => resolver}/effect/provider-collection.effect.spec.ts (100%) rename ui/src/app/metadata/{domain => resolver}/effect/provider-collection.effects.ts (100%) rename ui/src/app/{metadata-provider => metadata/resolver}/effect/search.effect.ts (100%) rename ui/src/app/{edit-provider => metadata/resolver}/effect/wizard.effect.ts (95%) rename ui/src/app/{metadata-provider => metadata/resolver}/guard/copy-isset.guard.ts (100%) rename ui/src/app/{metadata-provider => metadata/resolver}/metadata-provider.module.ts (100%) rename ui/src/app/metadata/{domain/reducer/provider-collection.reducer.spec.ts => resolver/reducer/collection.reducer.spec.ts} (63%) rename ui/src/app/metadata/{domain/reducer/provider-collection.reducer.ts => resolver/reducer/collection.reducer.ts} (57%) rename ui/src/app/{metadata-provider => metadata/resolver}/reducer/copy.reducer.spec.ts (100%) rename ui/src/app/{metadata-provider => metadata/resolver}/reducer/copy.reducer.ts (88%) rename ui/src/app/metadata/{domain/reducer/draft-collection.reducer.spec.ts => resolver/reducer/draft.reducer.spec.ts} (92%) create mode 100644 ui/src/app/metadata/resolver/reducer/draft.reducer.ts rename ui/src/app/{edit-provider => metadata/resolver}/reducer/editor.reducer.spec.ts (90%) rename ui/src/app/{edit-provider => metadata/resolver}/reducer/editor.reducer.ts (84%) create mode 100644 ui/src/app/metadata/resolver/reducer/index.ts rename ui/src/app/{metadata-provider => metadata/resolver}/reducer/search.reducer.spec.ts (100%) rename ui/src/app/{metadata-provider => metadata/resolver}/reducer/search.reducer.ts (95%) rename ui/src/app/{metadata-provider => shared}/directive/info-label.directive.spec.ts (100%) rename ui/src/app/{metadata-provider => shared}/directive/info-label.directive.ts (100%) rename ui/src/app/{metadata-provider => shared}/directive/input-defaults.directive.spec.ts (100%) rename ui/src/app/{metadata-provider => shared}/directive/input-defaults.directive.ts (100%) rename ui/src/app/{metadata-provider => shared}/pipe/pretty-xml.pipe.ts (100%) diff --git a/ui/src/app/edit-provider/editor.module.ts b/ui/src/app/edit-provider/editor.module.ts deleted file mode 100644 index 8b2863fc0..000000000 --- a/ui/src/app/edit-provider/editor.module.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { CommonModule } from '@angular/common'; -import { ReactiveFormsModule, FormsModule } from '@angular/forms'; -import { StoreModule } from '@ngrx/store'; -import { EffectsModule } from '@ngrx/effects'; - -import { ProviderComponent } from './container/provider.component'; -import { DraftComponent } from './container/draft.component'; -import { WizardComponent } from './container/wizard.component'; -import { EditorComponent } from './container/editor.component'; -import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; - -import { RootProviderModule } from '../metadata-provider/metadata-provider.module'; -import { ProviderEditorFormModule } from '../metadata-provider/component'; -import { reducers } from './reducer'; - -import { UnsavedDialogComponent } from './component/unsaved-dialog.component'; -import { CanDeactivateGuard } from '../core/service/can-deactivate.guard'; -import { WizardNavComponent } from './component/wizard-nav.component'; -import { WizardEffects } from './effect/wizard.effect'; -import { EditorEffects } from './effect/editor.effect'; -import { ValidFormIconComponent } from './component/valid-form-icon.component'; -import { SharedModule } from '../shared/shared.module'; -import { DomainModule } from '../domain/domain.module'; - -export const routes: Routes = [ - { - path: ':id', - component: ProviderComponent, - canActivate: [], - children: [ - { path: 'edit', redirectTo: 'edit/2' }, - { - path: 'edit/:index', - component: EditorComponent, - canDeactivate: [CanDeactivateGuard] - } - ] - }, - { - path: ':entityId', - component: DraftComponent, - canActivate: [], - children: [ - { path: 'wizard', redirectTo: 'wizard/2' }, - { - path: 'wizard/:index', - component: WizardComponent, - canDeactivate: [CanDeactivateGuard] - } - ] - } -]; - -@NgModule({ - declarations: [ - ProviderComponent, - EditorComponent, - WizardComponent, - UnsavedDialogComponent, - WizardNavComponent, - DraftComponent, - ValidFormIconComponent - ], - entryComponents: [ - UnsavedDialogComponent - ], - imports: [ - DomainModule, - CommonModule, - RouterModule, - ReactiveFormsModule, - RootProviderModule, - ProviderEditorFormModule, - NgbDropdownModule, - StoreModule.forFeature('edit-provider', reducers), - EffectsModule.forFeature([WizardEffects, EditorEffects]), - RouterModule.forChild(routes), - SharedModule - ], - providers: [] -}) -export class EditorModule { } diff --git a/ui/src/app/edit-provider/reducer/index.ts b/ui/src/app/edit-provider/reducer/index.ts deleted file mode 100644 index ba82831f4..000000000 --- a/ui/src/app/edit-provider/reducer/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { createSelector, createFeatureSelector } from '@ngrx/store'; -import * as fromRoot from '../../app.reducer'; -import * as fromEditor from './editor.reducer'; - -export interface EditProviderState { - editor: fromEditor.EditorState; -} - -export const reducers = { - editor: fromEditor.reducer -}; - -export interface State extends fromRoot.State { - 'edit-provider': EditProviderState; -} - -export const getEditProviderState = createFeatureSelector('edit-provider'); -export const getEditorState = createSelector(getEditProviderState, (state: EditProviderState) => state.editor); -export const getEditorIsValid = createSelector(getEditorState, fromEditor.isEditorValid); -export const getEditorIsSaved = createSelector(getEditorState, fromEditor.isEditorSaved); -export const getEditorChanges = createSelector(getEditorState, fromEditor.getChanges); -export const getEditorIsSaving = createSelector(getEditorState, fromEditor.isEditorSaving); -export const getFormStatus = createSelector(getEditorState, fromEditor.getFormStatus); -export const getInvalidEditorForms = createSelector(getEditorState, fromEditor.getInvalidForms); diff --git a/ui/src/app/metadata-provider/reducer/index.ts b/ui/src/app/metadata-provider/reducer/index.ts deleted file mode 100644 index d1981f19a..000000000 --- a/ui/src/app/metadata-provider/reducer/index.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { createSelector, createFeatureSelector } from '@ngrx/store'; -import * as fromRoot from '../../app.reducer'; -import * as fromSearch from './search.reducer'; -import * as fromCopy from './copy.reducer'; - -export interface ProviderState { - copy: fromCopy.CopyState; - search: fromSearch.SearchState; -} - -export const reducers = { - copy: fromCopy.reducer, - search: fromSearch.reducer -}; - -export interface State extends fromRoot.State { - 'provider': ProviderState; -} - -export const getProviderState = createFeatureSelector('provider'); - -export const getCopyFromStateFn = (state: ProviderState) => state.copy; -export const getSearchFromStateFn = (state: ProviderState) => state.search; - -export const getCopyFromState = createSelector(getProviderState, getCopyFromStateFn); -export const getCopy = createSelector(getCopyFromState, fromCopy.getCopy); -export const getSaving = createSelector(getCopyFromState, fromCopy.getSaving); -export const getAttributes = createSelector(getCopyFromState, fromCopy.getCopyAttributes); -export const getSectionsToCopy = createSelector(getCopyFromState, fromCopy.getCopySections); - -export const getSearchFromState = createSelector(getProviderState, getSearchFromStateFn); -export const getSearchResults = createSelector(getSearchFromState, fromSearch.getMatches); -export const getSearchQuery = createSelector(getSearchFromState, fromSearch.getQuery); -export const getSearchLoading = createSelector(getSearchFromState, fromSearch.getSearching); diff --git a/ui/src/app/metadata-provider/component/forms/advanced-info-form.component.html b/ui/src/app/metadata/domain/component/forms/advanced-info-form.component.html similarity index 100% rename from ui/src/app/metadata-provider/component/forms/advanced-info-form.component.html rename to ui/src/app/metadata/domain/component/forms/advanced-info-form.component.html diff --git a/ui/src/app/metadata-provider/component/forms/advanced-info-form.component.spec.ts b/ui/src/app/metadata/domain/component/forms/advanced-info-form.component.spec.ts similarity index 100% rename from ui/src/app/metadata-provider/component/forms/advanced-info-form.component.spec.ts rename to ui/src/app/metadata/domain/component/forms/advanced-info-form.component.spec.ts diff --git a/ui/src/app/metadata-provider/component/forms/advanced-info-form.component.ts b/ui/src/app/metadata/domain/component/forms/advanced-info-form.component.ts similarity index 84% rename from ui/src/app/metadata-provider/component/forms/advanced-info-form.component.ts rename to ui/src/app/metadata/domain/component/forms/advanced-info-form.component.ts index cf6173cf9..8e601508d 100644 --- a/ui/src/app/metadata-provider/component/forms/advanced-info-form.component.ts +++ b/ui/src/app/metadata/domain/component/forms/advanced-info-form.component.ts @@ -7,10 +7,10 @@ import { Store } from '@ngrx/store'; import * as fromCollection from '../../../domain/reducer'; import { ProviderStatusEmitter, ProviderValueEmitter } from '../../../domain/service/provider-change-emitter.service'; -import { MetadataProvider, Organization, Contact } from '../../../domain/model/metadata-provider'; +import { MetadataResolver, Contact } from '../../../domain/model'; import { ProviderFormFragmentComponent } from './provider-form-fragment.component'; import { EntityValidators } from '../../../domain/service/entity-validators.service'; -import * as patterns from '../../../shared/regex'; +import * as fromMetadata from '../../../metadata.reducer'; @Component({ selector: 'adv-info-form', @@ -18,7 +18,7 @@ import * as patterns from '../../../shared/regex'; templateUrl: './advanced-info-form.component.html' }) export class AdvancedInfoFormComponent extends ProviderFormFragmentComponent implements OnInit, OnChanges, OnDestroy { - @Input() provider: MetadataProvider; + @Input() resolver: MetadataResolver; contactTypes: string[] = [ 'support', @@ -39,7 +39,7 @@ export class AdvancedInfoFormComponent extends ProviderFormFragmentComponent imp protected fb: FormBuilder, protected statusEmitter: ProviderStatusEmitter, protected valueEmitter: ProviderValueEmitter, - protected store: Store + protected store: Store ) { super(fb, statusEmitter, valueEmitter); @@ -47,7 +47,7 @@ export class AdvancedInfoFormComponent extends ProviderFormFragmentComponent imp .select(fromCollection.getAllEntityIds) .pipe( takeUntil(this.ngUnsubscribe), - combineLatest(this.store.select(fromCollection.getSelectedProvider), (ids: string[], provider: MetadataProvider) => { + combineLatest(this.store.select(fromCollection.getSelectedProvider), (ids: string[], provider: MetadataResolver) => { return ids.filter(id => provider.entityId !== id); }) ); @@ -90,15 +90,15 @@ export class AdvancedInfoFormComponent extends ProviderFormFragmentComponent imp } ngOnChanges(): void { - this.provider.organization = this.provider.organization || {}; - this.provider.contacts = this.provider.contacts || []; + this.resolver.organization = this.resolver.organization || {}; + this.resolver.contacts = this.resolver.contacts || []; this.form.reset({ - serviceProviderName: this.provider.serviceProviderName, - serviceEnabled: this.provider.serviceEnabled, - entityId: this.provider.entityId, - organization: this.provider.organization + serviceProviderName: this.resolver.serviceProviderName, + serviceEnabled: this.resolver.serviceEnabled, + entityId: this.resolver.entityId, + organization: this.resolver.organization }); - this.setContacts(this.provider.contacts); + this.setContacts(this.resolver.contacts); } get contacts(): FormArray { diff --git a/ui/src/app/metadata-provider/component/forms/assertion-form.component.html b/ui/src/app/metadata/domain/component/forms/assertion-form.component.html similarity index 100% rename from ui/src/app/metadata-provider/component/forms/assertion-form.component.html rename to ui/src/app/metadata/domain/component/forms/assertion-form.component.html diff --git a/ui/src/app/metadata-provider/component/forms/assertion-form.component.spec.ts b/ui/src/app/metadata/domain/component/forms/assertion-form.component.spec.ts similarity index 100% rename from ui/src/app/metadata-provider/component/forms/assertion-form.component.spec.ts rename to ui/src/app/metadata/domain/component/forms/assertion-form.component.spec.ts diff --git a/ui/src/app/metadata-provider/component/forms/assertion-form.component.ts b/ui/src/app/metadata/domain/component/forms/assertion-form.component.ts similarity index 88% rename from ui/src/app/metadata-provider/component/forms/assertion-form.component.ts rename to ui/src/app/metadata/domain/component/forms/assertion-form.component.ts index 668784c78..ec031922f 100644 --- a/ui/src/app/metadata-provider/component/forms/assertion-form.component.ts +++ b/ui/src/app/metadata/domain/component/forms/assertion-form.component.ts @@ -4,8 +4,7 @@ import { FormBuilder, FormGroup, FormControl, FormArray, AbstractControl, Valida import { ProviderFormFragmentComponent } from './provider-form-fragment.component'; import { ProviderStatusEmitter, ProviderValueEmitter } from '../../../domain/service/provider-change-emitter.service'; -import { MetadataProvider, SsoService } from '../../../domain/model/metadata-provider'; -import * as patterns from '../../../shared/regex'; +import { SsoService, MetadataResolver } from '../../../domain/model/'; @Component({ selector: 'assertion-form', @@ -13,7 +12,7 @@ import * as patterns from '../../../shared/regex'; templateUrl: './assertion-form.component.html' }) export class AssertionFormComponent extends ProviderFormFragmentComponent implements OnInit, OnChanges, OnDestroy { - @Input() provider: MetadataProvider; + @Input() resolver: MetadataResolver; form: FormGroup; @@ -68,7 +67,7 @@ export class AssertionFormComponent extends ProviderFormFragmentComponent implem } ngOnChanges(): void { - this.provider.assertionConsumerServices = this.provider.assertionConsumerServices || []; - this.setEndpoints(this.provider.assertionConsumerServices); + this.resolver.assertionConsumerServices = this.resolver.assertionConsumerServices || []; + this.setEndpoints(this.resolver.assertionConsumerServices); } } /* istanbul ignore next */ diff --git a/ui/src/app/metadata-provider/component/forms/attribute-release-form.component.html b/ui/src/app/metadata/domain/component/forms/attribute-release-form.component.html similarity index 100% rename from ui/src/app/metadata-provider/component/forms/attribute-release-form.component.html rename to ui/src/app/metadata/domain/component/forms/attribute-release-form.component.html diff --git a/ui/src/app/metadata-provider/component/forms/attribute-release-form.component.spec.ts b/ui/src/app/metadata/domain/component/forms/attribute-release-form.component.spec.ts similarity index 100% rename from ui/src/app/metadata-provider/component/forms/attribute-release-form.component.spec.ts rename to ui/src/app/metadata/domain/component/forms/attribute-release-form.component.spec.ts diff --git a/ui/src/app/metadata-provider/component/forms/attribute-release-form.component.ts b/ui/src/app/metadata/domain/component/forms/attribute-release-form.component.ts similarity index 89% rename from ui/src/app/metadata-provider/component/forms/attribute-release-form.component.ts rename to ui/src/app/metadata/domain/component/forms/attribute-release-form.component.ts index d4a4d8b39..8a7d3a258 100644 --- a/ui/src/app/metadata-provider/component/forms/attribute-release-form.component.ts +++ b/ui/src/app/metadata/domain/component/forms/attribute-release-form.component.ts @@ -1,11 +1,11 @@ import { Component, Output, Input, EventEmitter, OnInit, OnChanges, OnDestroy, ChangeDetectionStrategy } from '@angular/core'; -import { FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms'; +import { FormBuilder, FormGroup } from '@angular/forms'; import { Observable } from 'rxjs'; import { last } from 'rxjs/operators'; import { ProviderFormFragmentComponent } from './provider-form-fragment.component'; import { ProviderStatusEmitter, ProviderValueEmitter } from '../../../domain/service/provider-change-emitter.service'; -import { MetadataProvider, Organization, Contact } from '../../../domain/model/metadata-provider'; +import { MetadataResolver } from '../../../domain/model'; import { ListValuesService } from '../../../domain/service/list-values.service'; import { FormArray } from '@angular/forms/src/model'; @@ -16,7 +16,7 @@ import { FormArray } from '@angular/forms/src/model'; templateUrl: './attribute-release-form.component.html' }) export class AttributeReleaseFormComponent extends ProviderFormFragmentComponent implements OnInit, OnChanges, OnDestroy { - @Input() provider: MetadataProvider; + @Input() resolver: MetadataResolver; form: FormGroup; attributesToRelease: any[]; @@ -43,8 +43,8 @@ export class AttributeReleaseFormComponent extends ProviderFormFragmentComponent } ngOnChanges(): void { - this.provider.attributeRelease = this.provider.attributeRelease || []; - this.setAttributes(this.provider.attributeRelease); + this.resolver.attributeRelease = this.resolver.attributeRelease || []; + this.setAttributes(this.resolver.attributeRelease); } get attributeRelease(): FormArray { diff --git a/ui/src/app/metadata-provider/component/forms/descriptor-info-form.component.html b/ui/src/app/metadata/domain/component/forms/descriptor-info-form.component.html similarity index 100% rename from ui/src/app/metadata-provider/component/forms/descriptor-info-form.component.html rename to ui/src/app/metadata/domain/component/forms/descriptor-info-form.component.html diff --git a/ui/src/app/metadata-provider/component/forms/descriptor-info-form.component.spec.ts b/ui/src/app/metadata/domain/component/forms/descriptor-info-form.component.spec.ts similarity index 100% rename from ui/src/app/metadata-provider/component/forms/descriptor-info-form.component.spec.ts rename to ui/src/app/metadata/domain/component/forms/descriptor-info-form.component.spec.ts diff --git a/ui/src/app/metadata-provider/component/forms/descriptor-info-form.component.ts b/ui/src/app/metadata/domain/component/forms/descriptor-info-form.component.ts similarity index 88% rename from ui/src/app/metadata-provider/component/forms/descriptor-info-form.component.ts rename to ui/src/app/metadata/domain/component/forms/descriptor-info-form.component.ts index dea3f26a2..89a824bc5 100644 --- a/ui/src/app/metadata-provider/component/forms/descriptor-info-form.component.ts +++ b/ui/src/app/metadata/domain/component/forms/descriptor-info-form.component.ts @@ -1,11 +1,11 @@ -import { Component, Output, Input, EventEmitter, OnInit, OnChanges, OnDestroy, ChangeDetectionStrategy } from '@angular/core'; +import { Component, Input, OnInit, OnChanges, OnDestroy, ChangeDetectionStrategy } from '@angular/core'; import { FormBuilder, FormGroup, FormControl, FormArray, Validators } from '@angular/forms'; import { Observable, of } from 'rxjs'; import { ProviderFormFragmentComponent } from './provider-form-fragment.component'; import { ProviderStatusEmitter, ProviderValueEmitter } from '../../../domain/service/provider-change-emitter.service'; -import { MetadataProvider, Organization, Contact } from '../../../domain/model/metadata-provider'; +import { MetadataResolver } from '../../../domain/model'; import { ListValuesService } from '../../../domain/service/list-values.service'; @Component({ @@ -14,7 +14,7 @@ import { ListValuesService } from '../../../domain/service/list-values.service'; templateUrl: './descriptor-info-form.component.html' }) export class DescriptorInfoFormComponent extends ProviderFormFragmentComponent implements OnInit, OnChanges, OnDestroy { - @Input() provider: MetadataProvider; + @Input() resolver: MetadataResolver; form: FormGroup; @@ -46,7 +46,7 @@ export class DescriptorInfoFormComponent extends ProviderFormFragmentComponent i } ngOnChanges(): void { - let descriptor = this.provider.serviceProviderSsoDescriptor; + let descriptor = this.resolver.serviceProviderSsoDescriptor; this.form.reset({ serviceProviderSsoDescriptor: descriptor || {} }); diff --git a/ui/src/app/metadata-provider/component/forms/finish-form.component.html b/ui/src/app/metadata/domain/component/forms/finish-form.component.html similarity index 100% rename from ui/src/app/metadata-provider/component/forms/finish-form.component.html rename to ui/src/app/metadata/domain/component/forms/finish-form.component.html diff --git a/ui/src/app/metadata-provider/component/forms/finish-form.component.scss b/ui/src/app/metadata/domain/component/forms/finish-form.component.scss similarity index 100% rename from ui/src/app/metadata-provider/component/forms/finish-form.component.scss rename to ui/src/app/metadata/domain/component/forms/finish-form.component.scss diff --git a/ui/src/app/metadata-provider/component/forms/finish-form.component.spec.ts b/ui/src/app/metadata/domain/component/forms/finish-form.component.spec.ts similarity index 100% rename from ui/src/app/metadata-provider/component/forms/finish-form.component.spec.ts rename to ui/src/app/metadata/domain/component/forms/finish-form.component.spec.ts diff --git a/ui/src/app/metadata-provider/component/forms/finish-form.component.ts b/ui/src/app/metadata/domain/component/forms/finish-form.component.ts similarity index 71% rename from ui/src/app/metadata-provider/component/forms/finish-form.component.ts rename to ui/src/app/metadata/domain/component/forms/finish-form.component.ts index c645db916..8cd8cac21 100644 --- a/ui/src/app/metadata-provider/component/forms/finish-form.component.ts +++ b/ui/src/app/metadata/domain/component/forms/finish-form.component.ts @@ -1,9 +1,9 @@ -import { Component, Output, Input, EventEmitter, OnInit, OnChanges, OnDestroy, ChangeDetectionStrategy } from '@angular/core'; -import { FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms'; +import { Component, Input, OnInit, OnChanges, OnDestroy, ChangeDetectionStrategy } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; import { Observable } from 'rxjs'; import { ProviderFormFragmentComponent } from './provider-form-fragment.component'; import { ProviderStatusEmitter, ProviderValueEmitter } from '../../../domain/service/provider-change-emitter.service'; -import { MetadataProvider, Organization, Contact } from '../../../domain/model/metadata-provider'; +import { MetadataResolver } from '../../../domain/model'; import { ListValuesService } from '../../../domain/service/list-values.service'; @Component({ @@ -13,7 +13,7 @@ import { ListValuesService } from '../../../domain/service/list-values.service'; styleUrls: ['./finish-form.component.scss'] }) export class FinishFormComponent extends ProviderFormFragmentComponent implements OnInit, OnChanges, OnDestroy { - @Input() provider: MetadataProvider; + @Input() resolver: MetadataResolver; form: FormGroup; attributesToRelease$: Observable; @@ -25,7 +25,7 @@ export class FinishFormComponent extends ProviderFormFragmentComponent implement private listValues: ListValuesService ) { super(fb, statusEmitter, valueEmitter); - this.attributesToRelease$ = listValues.attributesToRelease; + this.attributesToRelease$ = this.listValues.attributesToRelease; } createForm(): void { @@ -36,7 +36,7 @@ export class FinishFormComponent extends ProviderFormFragmentComponent implement ngOnChanges(): void { this.form.reset({ - serviceEnabled: !this.provider ? false : this.provider.serviceEnabled !== false ? true : false + serviceEnabled: !this.resolver ? false : this.resolver.serviceEnabled !== false ? true : false }); } } /* istanbul ignore next */ diff --git a/ui/src/app/metadata-provider/component/forms/key-info-form.component.html b/ui/src/app/metadata/domain/component/forms/key-info-form.component.html similarity index 100% rename from ui/src/app/metadata-provider/component/forms/key-info-form.component.html rename to ui/src/app/metadata/domain/component/forms/key-info-form.component.html diff --git a/ui/src/app/metadata-provider/component/forms/key-info-form.component.spec.ts b/ui/src/app/metadata/domain/component/forms/key-info-form.component.spec.ts similarity index 100% rename from ui/src/app/metadata-provider/component/forms/key-info-form.component.spec.ts rename to ui/src/app/metadata/domain/component/forms/key-info-form.component.spec.ts diff --git a/ui/src/app/metadata-provider/component/forms/key-info-form.component.ts b/ui/src/app/metadata/domain/component/forms/key-info-form.component.ts similarity index 86% rename from ui/src/app/metadata-provider/component/forms/key-info-form.component.ts rename to ui/src/app/metadata/domain/component/forms/key-info-form.component.ts index 0e8fe19e0..882b7c330 100644 --- a/ui/src/app/metadata-provider/component/forms/key-info-form.component.ts +++ b/ui/src/app/metadata/domain/component/forms/key-info-form.component.ts @@ -1,11 +1,11 @@ -import { Component, Output, Input, EventEmitter, OnInit, OnChanges, OnDestroy, ChangeDetectionStrategy } from '@angular/core'; -import { FormBuilder, FormGroup, FormControl, FormArray, Validators } from '@angular/forms'; +import { Component, Input, OnInit, OnChanges, OnDestroy, ChangeDetectionStrategy } from '@angular/core'; +import { FormBuilder, FormGroup, FormArray, Validators } from '@angular/forms'; import { Observable } from 'rxjs'; import { distinctUntilChanged, map, takeUntil } from 'rxjs/operators'; import { ProviderFormFragmentComponent } from './provider-form-fragment.component'; import { ProviderStatusEmitter, ProviderValueEmitter } from '../../../domain/service/provider-change-emitter.service'; -import { MetadataProvider, Certificate } from '../../../domain/model/metadata-provider'; +import { MetadataResolver, Certificate } from '../../../domain/model'; @Component({ selector: 'key-info-form', @@ -13,7 +13,7 @@ import { MetadataProvider, Certificate } from '../../../domain/model/metadata-pr templateUrl: './key-info-form.component.html' }) export class KeyInfoFormComponent extends ProviderFormFragmentComponent implements OnInit, OnChanges, OnDestroy { - @Input() provider: MetadataProvider; + @Input() resolver: MetadataResolver; hasCert$: Observable; @@ -97,14 +97,14 @@ export class KeyInfoFormComponent extends ProviderFormFragmentComponent implemen ngOnChanges(): void { this.form.reset({ - securityInfo: this.provider.securityInfo || { + securityInfo: this.resolver.securityInfo || { x509CertificateAvailable: false, authenticationRequestsSigned: false, wantAssertionsSigned: false } }); - if (this.provider.securityInfo && this.provider.securityInfo.x509CertificateAvailable) { - this.setCertificates(this.provider.securityInfo.x509Certificates); + if (this.resolver.securityInfo && this.resolver.securityInfo.x509CertificateAvailable) { + this.setCertificates(this.resolver.securityInfo.x509Certificates); } } } /* istanbul ignore next */ diff --git a/ui/src/app/metadata-provider/component/forms/logout-form.component.html b/ui/src/app/metadata/domain/component/forms/logout-form.component.html similarity index 100% rename from ui/src/app/metadata-provider/component/forms/logout-form.component.html rename to ui/src/app/metadata/domain/component/forms/logout-form.component.html diff --git a/ui/src/app/metadata-provider/component/forms/logout-form.component.spec.ts b/ui/src/app/metadata/domain/component/forms/logout-form.component.spec.ts similarity index 100% rename from ui/src/app/metadata-provider/component/forms/logout-form.component.spec.ts rename to ui/src/app/metadata/domain/component/forms/logout-form.component.spec.ts diff --git a/ui/src/app/metadata-provider/component/forms/logout-form.component.ts b/ui/src/app/metadata/domain/component/forms/logout-form.component.ts similarity index 76% rename from ui/src/app/metadata-provider/component/forms/logout-form.component.ts rename to ui/src/app/metadata/domain/component/forms/logout-form.component.ts index 981c336db..60b3b5f80 100644 --- a/ui/src/app/metadata-provider/component/forms/logout-form.component.ts +++ b/ui/src/app/metadata/domain/component/forms/logout-form.component.ts @@ -1,11 +1,9 @@ -import { Component, Output, Input, EventEmitter, OnInit, OnChanges, OnDestroy, ChangeDetectionStrategy } from '@angular/core'; -import { FormBuilder, FormGroup, FormControl, FormArray, Validators } from '@angular/forms'; -import { Observable } from 'rxjs'; +import { Component, Input, OnInit, OnChanges, OnDestroy, ChangeDetectionStrategy } from '@angular/core'; +import { FormBuilder, FormGroup, FormArray, Validators } from '@angular/forms'; import { ProviderFormFragmentComponent } from './provider-form-fragment.component'; import { ProviderStatusEmitter, ProviderValueEmitter } from '../../../domain/service/provider-change-emitter.service'; -import { MetadataProvider, LogoutEndpoint } from '../../../domain/model/metadata-provider'; -import * as patterns from '../../../shared/regex'; +import { MetadataResolver, LogoutEndpoint } from '../../../domain/model'; @Component({ selector: 'logout-form', @@ -13,7 +11,7 @@ import * as patterns from '../../../shared/regex'; templateUrl: './logout-form.component.html' }) export class LogoutFormComponent extends ProviderFormFragmentComponent implements OnInit, OnChanges, OnDestroy { - @Input() provider: MetadataProvider; + @Input() resolver: MetadataResolver; form: FormGroup; @@ -62,7 +60,7 @@ export class LogoutFormComponent extends ProviderFormFragmentComponent implement } ngOnChanges(): void { - this.provider.logoutEndpoints = this.provider.logoutEndpoints || []; - this.setEndpoints(this.provider.logoutEndpoints); + this.resolver.logoutEndpoints = this.resolver.logoutEndpoints || []; + this.setEndpoints(this.resolver.logoutEndpoints); } } /* istanbul ignore next */ diff --git a/ui/src/app/metadata-provider/component/forms/metadata-ui-form.component.html b/ui/src/app/metadata/domain/component/forms/metadata-ui-form.component.html similarity index 100% rename from ui/src/app/metadata-provider/component/forms/metadata-ui-form.component.html rename to ui/src/app/metadata/domain/component/forms/metadata-ui-form.component.html diff --git a/ui/src/app/metadata-provider/component/forms/metadata-ui-form.component.spec.ts b/ui/src/app/metadata/domain/component/forms/metadata-ui-form.component.spec.ts similarity index 100% rename from ui/src/app/metadata-provider/component/forms/metadata-ui-form.component.spec.ts rename to ui/src/app/metadata/domain/component/forms/metadata-ui-form.component.spec.ts diff --git a/ui/src/app/metadata-provider/component/forms/metadata-ui-form.component.ts b/ui/src/app/metadata/domain/component/forms/metadata-ui-form.component.ts similarity index 73% rename from ui/src/app/metadata-provider/component/forms/metadata-ui-form.component.ts rename to ui/src/app/metadata/domain/component/forms/metadata-ui-form.component.ts index 5bd8b0d6b..bde640cfc 100644 --- a/ui/src/app/metadata-provider/component/forms/metadata-ui-form.component.ts +++ b/ui/src/app/metadata/domain/component/forms/metadata-ui-form.component.ts @@ -1,10 +1,9 @@ -import { Component, Output, Input, EventEmitter, OnInit, OnChanges, OnDestroy, ChangeDetectionStrategy } from '@angular/core'; -import { FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms'; -import { Observable } from 'rxjs'; +import { Component, Input, OnInit, OnChanges, OnDestroy, ChangeDetectionStrategy } from '@angular/core'; +import { FormBuilder, Validators } from '@angular/forms'; import { ProviderFormFragmentComponent } from './provider-form-fragment.component'; import { ProviderStatusEmitter, ProviderValueEmitter } from '../../../domain/service/provider-change-emitter.service'; -import { MetadataProvider, Organization, Contact } from '../../../domain/model/metadata-provider'; -import * as patterns from '../../../shared/regex'; +import { MetadataResolver } from '../../../domain/model'; +import * as patterns from '../../../../shared/regex'; @Component({ selector: 'metadata-ui-form', @@ -12,7 +11,7 @@ import * as patterns from '../../../shared/regex'; templateUrl: './metadata-ui-form.component.html' }) export class MetadataUiFormComponent extends ProviderFormFragmentComponent implements OnInit, OnChanges, OnDestroy { - @Input() provider: MetadataProvider; + @Input() resolver: MetadataResolver; descriptionMaxLength = this.defaultMaxLength; @@ -40,7 +39,7 @@ export class MetadataUiFormComponent extends ProviderFormFragmentComponent imple ngOnChanges(): void { this.form.reset({ - mdui: this.provider.mdui || {} + mdui: this.resolver.mdui || {} }); } } /* istanbul ignore next */ diff --git a/ui/src/app/metadata-provider/component/forms/organization-info-form.component.html b/ui/src/app/metadata/domain/component/forms/organization-info-form.component.html similarity index 100% rename from ui/src/app/metadata-provider/component/forms/organization-info-form.component.html rename to ui/src/app/metadata/domain/component/forms/organization-info-form.component.html diff --git a/ui/src/app/metadata-provider/component/forms/organization-info-form.component.spec.ts b/ui/src/app/metadata/domain/component/forms/organization-info-form.component.spec.ts similarity index 100% rename from ui/src/app/metadata-provider/component/forms/organization-info-form.component.spec.ts rename to ui/src/app/metadata/domain/component/forms/organization-info-form.component.spec.ts diff --git a/ui/src/app/metadata-provider/component/forms/organization-info-form.component.ts b/ui/src/app/metadata/domain/component/forms/organization-info-form.component.ts similarity index 94% rename from ui/src/app/metadata-provider/component/forms/organization-info-form.component.ts rename to ui/src/app/metadata/domain/component/forms/organization-info-form.component.ts index 8a1d2598f..2b6d4fbce 100644 --- a/ui/src/app/metadata-provider/component/forms/organization-info-form.component.ts +++ b/ui/src/app/metadata/domain/component/forms/organization-info-form.component.ts @@ -4,10 +4,9 @@ import { Observable, Subscription } from 'rxjs'; import { startWith, map } from 'rxjs/operators'; import { ProviderStatusEmitter, ProviderValueEmitter } from '../../../domain/service/provider-change-emitter.service'; -import { MetadataProvider, Organization, Contact } from '../../../domain/model/metadata-provider'; +import { MetadataResolver, Contact } from '../../../domain/model'; import { ProviderFormFragmentComponent } from './provider-form-fragment.component'; import { EntityValidators } from '../../../domain/service/entity-validators.service'; -import * as patterns from '../../../shared/regex'; @Component({ selector: 'org-info-form', @@ -15,7 +14,7 @@ import * as patterns from '../../../shared/regex'; templateUrl: './organization-info-form.component.html' }) export class OrganizationInfoFormComponent extends ProviderFormFragmentComponent implements OnInit, OnChanges, OnDestroy { - @Input() provider: MetadataProvider; + @Input() provider: MetadataResolver; contactTypes: string[] = [ 'support', diff --git a/ui/src/app/metadata-provider/component/forms/provider-form-fragment.component.spec.ts b/ui/src/app/metadata/domain/component/forms/provider-form-fragment.component.spec.ts similarity index 100% rename from ui/src/app/metadata-provider/component/forms/provider-form-fragment.component.spec.ts rename to ui/src/app/metadata/domain/component/forms/provider-form-fragment.component.spec.ts diff --git a/ui/src/app/metadata-provider/component/forms/provider-form-fragment.component.ts b/ui/src/app/metadata/domain/component/forms/provider-form-fragment.component.ts similarity index 74% rename from ui/src/app/metadata-provider/component/forms/provider-form-fragment.component.ts rename to ui/src/app/metadata/domain/component/forms/provider-form-fragment.component.ts index fa9796f5c..746dfe7f8 100644 --- a/ui/src/app/metadata-provider/component/forms/provider-form-fragment.component.ts +++ b/ui/src/app/metadata/domain/component/forms/provider-form-fragment.component.ts @@ -1,15 +1,14 @@ -import { Component, Input, Output, OnInit, OnDestroy, AfterViewInit, - ChangeDetectionStrategy, EventEmitter, ElementRef, ViewChildren } from '@angular/core'; -import { FormBuilder, FormGroup, FormControl, FormArray, FormControlName, Validators } from '@angular/forms'; +import { Component, Input, OnInit, OnDestroy, ChangeDetectionStrategy, ElementRef, ViewChildren } from '@angular/core'; +import { FormBuilder, FormGroup, FormControlName } from '@angular/forms'; import { Observable, Subject, Subscription } from 'rxjs'; import { takeUntil, startWith } from 'rxjs/operators'; import { ProviderStatusEmitter, ProviderValueEmitter } from '../../../domain/service/provider-change-emitter.service'; -import { MetadataProvider, Organization, Contact } from '../../../domain/model/metadata-provider'; +import { MetadataResolver } from '../../../domain/model'; -import * as constants from '../../../shared/constant'; -import { removeNulls } from '../../../shared/util'; +import * as constants from '../../../../shared/constant'; +import { removeNulls } from '../../../../shared/util'; @Component({ selector: 'provider-form-fragment', @@ -17,7 +16,7 @@ import { removeNulls } from '../../../shared/util'; template: `Foo` }) export class ProviderFormFragmentComponent implements OnInit, OnDestroy { - @Input() provider: MetadataProvider; + @Input() resolver: MetadataResolver; @ViewChildren(FormControlName, { read: ElementRef }) formInputElements: ElementRef[]; protected ngUnsubscribe: Subject = new Subject(); @@ -25,7 +24,7 @@ export class ProviderFormFragmentComponent implements OnInit, OnDestroy { protected statusEmitSubscription: Subscription; form: FormGroup; - provider$: Observable; + provider$: Observable; defaultMaxLength = constants.DEFAULT_FIELD_MAX_LENGTH; diff --git a/ui/src/app/metadata-provider/component/forms/relying-party-form.component.html b/ui/src/app/metadata/domain/component/forms/relying-party-form.component.html similarity index 100% rename from ui/src/app/metadata-provider/component/forms/relying-party-form.component.html rename to ui/src/app/metadata/domain/component/forms/relying-party-form.component.html diff --git a/ui/src/app/metadata-provider/component/forms/relying-party-form.component.spec.ts b/ui/src/app/metadata/domain/component/forms/relying-party-form.component.spec.ts similarity index 100% rename from ui/src/app/metadata-provider/component/forms/relying-party-form.component.spec.ts rename to ui/src/app/metadata/domain/component/forms/relying-party-form.component.spec.ts diff --git a/ui/src/app/metadata-provider/component/forms/relying-party-form.component.ts b/ui/src/app/metadata/domain/component/forms/relying-party-form.component.ts similarity index 89% rename from ui/src/app/metadata-provider/component/forms/relying-party-form.component.ts rename to ui/src/app/metadata/domain/component/forms/relying-party-form.component.ts index 354995938..4aef6bff4 100644 --- a/ui/src/app/metadata-provider/component/forms/relying-party-form.component.ts +++ b/ui/src/app/metadata/domain/component/forms/relying-party-form.component.ts @@ -1,13 +1,12 @@ -import { Component, Output, Input, EventEmitter, OnInit, OnChanges, OnDestroy, ChangeDetectionStrategy } from '@angular/core'; +import { Component, Input, OnInit, OnChanges, OnDestroy, ChangeDetectionStrategy } from '@angular/core'; import { FormBuilder, FormGroup, FormControl, FormArray, Validators } from '@angular/forms'; import { Observable, of } from 'rxjs'; import { ProviderFormFragmentComponent } from './provider-form-fragment.component'; import { ProviderStatusEmitter, ProviderValueEmitter } from '../../../domain/service/provider-change-emitter.service'; import { ListValuesService } from '../../../domain/service/list-values.service'; -import { MetadataProvider, Organization, Contact } from '../../../domain/model/metadata-provider'; +import { MetadataResolver } from '../../../domain/model'; -import { URL_REGEX } from '../../../shared/regex'; @Component({ selector: 'relying-party-form', @@ -15,7 +14,7 @@ import { URL_REGEX } from '../../../shared/regex'; templateUrl: './relying-party-form.component.html' }) export class RelyingPartyFormComponent extends ProviderFormFragmentComponent implements OnInit, OnChanges, OnDestroy { - @Input() provider: MetadataProvider; + @Input() resolver: MetadataResolver; form: FormGroup; nameIds$: Observable = of([]); @@ -84,7 +83,7 @@ export class RelyingPartyFormComponent extends ProviderFormFragmentComponent imp } ngOnChanges(): void { - let overrides = this.provider.relyingPartyOverrides || {nameIdFormats: [], authenticationMethods: []}; + let overrides = this.resolver.relyingPartyOverrides || {nameIdFormats: [], authenticationMethods: []}; this.form.reset({ relyingPartyOverrides: overrides }); diff --git a/ui/src/app/metadata-provider/component/index.ts b/ui/src/app/metadata/domain/component/index.ts similarity index 84% rename from ui/src/app/metadata-provider/component/index.ts rename to ui/src/app/metadata/domain/component/index.ts index 3a676ac1a..238ff8d25 100644 --- a/ui/src/app/metadata-provider/component/index.ts +++ b/ui/src/app/metadata/domain/component/index.ts @@ -2,7 +2,7 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { ReactiveFormsModule } from '@angular/forms'; import { RouterModule } from '@angular/router'; -import { NgbPopoverModule, NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap/popover/popover.module'; +import { NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap/popover/popover.module'; import { NgbModalModule } from '@ng-bootstrap/ng-bootstrap/modal/modal.module'; import { AdvancedInfoFormComponent } from './forms/advanced-info-form.component'; @@ -17,9 +17,7 @@ import { LogoutFormComponent } from './forms/logout-form.component'; import { FinishFormComponent } from './forms/finish-form.component'; import { ProviderFormFragmentComponent } from './forms/provider-form-fragment.component'; -import { InfoLabelDirective } from '../directive/info-label.directive'; -import { InputDefaultsDirective } from '../directive/input-defaults.directive'; -import { SharedModule } from '../../shared/shared.module'; +import { SharedModule } from '../../../shared/shared.module'; import { DomainModule } from '../../domain/domain.module'; export const COMPONENTS = [ @@ -38,8 +36,6 @@ export const COMPONENTS = [ export const declarations = [ ...COMPONENTS, - InfoLabelDirective, - InputDefaultsDirective ]; @NgModule({ diff --git a/ui/src/app/metadata/domain/effect/entity.effect.spec.ts b/ui/src/app/metadata/domain/effect/entity.effect.spec.ts index 25a14a107..9c259e826 100644 --- a/ui/src/app/metadata/domain/effect/entity.effect.spec.ts +++ b/ui/src/app/metadata/domain/effect/entity.effect.spec.ts @@ -2,13 +2,13 @@ import { TestBed, tick, fakeAsync } from '@angular/core/testing'; import { Actions } from '@ngrx/effects'; import { of } from 'rxjs'; -import { TestActions, getActions } from '../../../testing/effect.util'; +import { TestActions, getActions } from '../../../../testing/effect.util'; import { EntityEffects } from './entity.effect'; import { EntityIdService } from '../service/entity-id.service'; import { EntityDescriptorService } from '../service/entity-descriptor.service'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { NgbModalStub } from '../../../testing/modal.stub'; -import { EntityAttributesFilter } from '../entity/entity-attributes.filter'; +import { NgbModalStub } from '../../../../testing/modal.stub'; +import { EntityAttributesFilter } from '../entity/filter/entity-attributes-filter'; describe('Entity Effects', () => { let effects: EntityEffects; diff --git a/ui/src/app/metadata/domain/effect/entity.effect.ts b/ui/src/app/metadata/domain/effect/entity.effect.ts index 440f5dd45..ff3e6394f 100644 --- a/ui/src/app/metadata/domain/effect/entity.effect.ts +++ b/ui/src/app/metadata/domain/effect/entity.effect.ts @@ -3,12 +3,11 @@ import { Effect, Actions, ofType } from '@ngrx/effects'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { Observable } from 'rxjs'; -import { map, switchMap, tap } from 'rxjs/operators'; +import { map, tap } from 'rxjs/operators'; import { EntityDescriptorService } from '../service/entity-descriptor.service'; -import { MetadataResolverService } from '../service/metadata-resolver.service'; -import { PreviewDialogComponent } from '../../shared/preview/preview-dialog.component'; -import { MetadataEntity, DomainEntityKinds } from '../domain.type'; +import { PreviewDialogComponent } from '../../../shared/preview/preview-dialog.component'; +import { MetadataEntity, MetadataTypes } from '../domain.type'; import { EntityIdService } from '../service/entity-id.service'; import * as entityActions from '../action/entity.action'; @@ -31,8 +30,8 @@ export class EntityEffects { ) { } openModal(entity: MetadataEntity): void { - let request: Observable = entity.kind === DomainEntityKinds.filter ? - this.entityService.preview(entity.entityId) : this.providerService.preview(entity.id); + let request: Observable = entity.kind === MetadataTypes.FILTER ? + this.entityService.preview(entity.getId()) : this.providerService.preview(entity.getId()); request.subscribe(xml => { let modal = this.modalService.open(PreviewDialogComponent, { size: 'lg', diff --git a/ui/src/app/metadata/domain/entity/filter/entity-attributes-filter.ts b/ui/src/app/metadata/domain/entity/filter/entity-attributes-filter.ts index d2bbe89ab..aff842de5 100644 --- a/ui/src/app/metadata/domain/entity/filter/entity-attributes-filter.ts +++ b/ui/src/app/metadata/domain/entity/filter/entity-attributes-filter.ts @@ -29,6 +29,10 @@ export class EntityAttributesFilter implements MetadataFilter, MetadataEntity { Object.assign(this, { ...obj }); } + getId(): string { + return this.entityId; + } + get id(): string { return this.resourceId; } diff --git a/ui/src/app/metadata/domain/entity/provider/file-backed-http-metadata-provider.ts b/ui/src/app/metadata/domain/entity/provider/file-backed-http-metadata-provider.ts index d5841ab0b..29e97a31a 100644 --- a/ui/src/app/metadata/domain/entity/provider/file-backed-http-metadata-provider.ts +++ b/ui/src/app/metadata/domain/entity/provider/file-backed-http-metadata-provider.ts @@ -52,6 +52,10 @@ export class FileBackedHttpMetadataProvider implements MetadataProvider, Metadat Object.assign(this, descriptor); } + getId(): string { + return this.id; + } + get name(): string { return this.serviceProviderName; } diff --git a/ui/src/app/metadata/domain/entity/resolver/file-backed-http-metadata-resolver.ts b/ui/src/app/metadata/domain/entity/resolver/file-backed-http-metadata-resolver.ts index 8759ef3eb..f58d961e6 100644 --- a/ui/src/app/metadata/domain/entity/resolver/file-backed-http-metadata-resolver.ts +++ b/ui/src/app/metadata/domain/entity/resolver/file-backed-http-metadata-resolver.ts @@ -1,5 +1,4 @@ import { - MetadataProvider, Organization, Contact, MDUI, @@ -8,12 +7,13 @@ import { Certificate, SsoService, IdpSsoDescriptor, - RelyingPartyOverrides + RelyingPartyOverrides, + MetadataResolver } from '../../model'; import { MetadataTypes } from '../../domain.type'; import { MetadataEntity } from '../../model/metadata-entity'; -export class FileBackedHttpMetadataResolver implements MetadataProvider, MetadataEntity { +export class FileBackedHttpMetadataResolver implements MetadataResolver, MetadataEntity { id = ''; createdDate?: string; modifiedDate?: string; @@ -48,10 +48,14 @@ export class FileBackedHttpMetadataResolver implements MetadataProvider, Metadat attributeRelease = [] as string[]; - constructor(descriptor?: Partial) { + constructor(descriptor?: Partial) { Object.assign(this, descriptor); } + getId(): string { + return this.id; + } + get name(): string { return this.serviceProviderName; } diff --git a/ui/src/app/metadata/domain/model/index.ts b/ui/src/app/metadata/domain/model/index.ts index 5b8fa5fc4..cd00d92fe 100644 --- a/ui/src/app/metadata/domain/model/index.ts +++ b/ui/src/app/metadata/domain/model/index.ts @@ -13,7 +13,3 @@ export * from './properties/relying-party-overrides'; export * from './properties/security-info'; export * from './properties/sso-descriptor'; export * from './properties/sso-service'; - -export * from './filter.entity'; -export * from './resolver.entity'; -export * from './provider.entity'; diff --git a/ui/src/app/metadata/domain/model/metadata-entity.ts b/ui/src/app/metadata/domain/model/metadata-entity.ts index 68dab399f..259a2cb99 100644 --- a/ui/src/app/metadata/domain/model/metadata-entity.ts +++ b/ui/src/app/metadata/domain/model/metadata-entity.ts @@ -3,5 +3,7 @@ export interface MetadataEntity { enabled: boolean; kind: string; + getId(): string; + serialize(): any; } diff --git a/ui/src/app/metadata/domain/reducer/draft-collection.reducer.ts b/ui/src/app/metadata/domain/reducer/draft-collection.reducer.ts deleted file mode 100644 index ff1271faa..000000000 --- a/ui/src/app/metadata/domain/reducer/draft-collection.reducer.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { createSelector } from '@ngrx/store'; -import { EntityState, EntityAdapter, createEntityAdapter } from '@ngrx/entity'; - -import { MetadataProvider } from '../../domain/model/provider'; -import * as providerAction from '../action/provider-collection.action'; -import { DraftCollectionActionsUnion, DraftCollectionActionTypes } from '../action/draft-collection.action'; - -export interface DraftCollectionState extends EntityState { - selectedDraftId: string | null; -} - -export function sortByName(a: MetadataProvider, b: MetadataProvider): number { - return a.serviceProviderName.localeCompare(b.serviceProviderName); -} - -export const adapter: EntityAdapter = createEntityAdapter({ - sortComparer: sortByName, - selectId: (model: MetadataProvider) => model.entityId -}); - -export const initialState: DraftCollectionState = adapter.getInitialState({ - selectedDraftId: null, -}); - -export function reducer(state = initialState, action: DraftCollectionActionsUnion): DraftCollectionState { - switch (action.type) { - case DraftCollectionActionTypes.LOAD_DRAFT_SUCCESS: { - return adapter.addMany(action.payload, { - ...state, - selectedDraftId: state.selectedDraftId, - }); - } - - case DraftCollectionActionTypes.UPDATE_DRAFT_SUCCESS: { - return adapter.updateOne(action.payload, state); - } - - case DraftCollectionActionTypes.REMOVE_DRAFT_SUCCESS: { - return adapter.removeOne(action.payload.entityId, state); - } - - case DraftCollectionActionTypes.SELECT: { - return { - ...state, - selectedDraftId: action.payload, - }; - } - - default: { - return state; - } - } -} - -export const getSelectedDraftId = (state: DraftCollectionState) => state.selectedDraftId; -export const { - selectIds: selectDraftIds, - selectEntities: selectDraftEntities, - selectAll: selectAllDrafts, - selectTotal: selectDraftTotal -} = adapter.getSelectors(); diff --git a/ui/src/app/metadata/domain/reducer/index.ts b/ui/src/app/metadata/domain/reducer/index.ts deleted file mode 100644 index 5454f01a0..000000000 --- a/ui/src/app/metadata/domain/reducer/index.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { createSelector, createFeatureSelector, ActionReducerMap } from '@ngrx/store'; -import * as fromFilter from './filter-collection.reducer'; -import * as fromProvider from './provider-collection.reducer'; -import * as fromDraft from './draft-collection.reducer'; -import * as fromRoot from '../../../app.reducer'; - -export interface CollectionState { - filters: fromFilter.FilterCollectionState; - providers: fromProvider.ProviderCollectionState; - drafts: fromDraft.DraftCollectionState; -} - -export const reducers: ActionReducerMap = { - filters: fromFilter.reducer, - providers: fromProvider.reducer, - drafts: fromDraft.reducer -}; - -export interface State extends fromRoot.State { - 'collections': CollectionState; -} - -export const getCollectionState = createFeatureSelector('collections'); - -/* - * Select pieces of Collection State - Functions -*/ -export const getFiltersFromStateFn = (state: CollectionState) => state.filters; -export const getProvidersStateFn = (state: CollectionState) => state.providers; -export const getDraftsStateFn = (state: CollectionState) => state.drafts; - -export const getFilterEntityState = createSelector(getCollectionState, getFiltersFromStateFn); -export const getProviderEntityState = createSelector(getCollectionState, getProvidersStateFn); -export const getDraftEntityState = createSelector(getCollectionState, getDraftsStateFn); - -/* - * Utility functions -*/ - -export const combineAllFn = (d, p) => [...p, ...d]; -export const doesExistFn = (ids, selected) => ids.indexOf(selected) > -1; -export const getInCollectionFn = (entities, selectedId) => { - return selectedId && entities[selectedId]; -}; -export const getEntityIdsFn = list => list.map(entity => entity.entityId); - -/* - * Select pieces of Resolver Collection -*/ - -export const getProviderEntities = createSelector(getProviderEntityState, fromProvider.selectProviderEntities); -export const getSelectedProviderId = createSelector(getProviderEntityState, fromProvider.getSelectedProviderId); -export const getSelectedProvider = createSelector(getProviderEntities, getSelectedProviderId, getInCollectionFn); -export const getProviderIds = createSelector(getProviderEntityState, fromProvider.selectProviderIds); -export const getProviderCollection = createSelector(getProviderEntityState, getProviderIds, fromProvider.selectAllProviders); - -/* - * Select pieces of Draft Collection -*/ - -export const getDraftEntities = createSelector(getDraftEntityState, fromDraft.selectDraftEntities); -export const getDraftIds = createSelector(getDraftEntityState, fromDraft.selectDraftIds); -export const getDraftCollection = createSelector(getDraftEntityState, getDraftIds, fromDraft.selectAllDrafts); - -export const getSelectedDraftId = createSelector(getDraftEntityState, fromDraft.getSelectedDraftId); -export const getSelectedDraft = createSelector(getDraftEntities, getSelectedDraftId, getInCollectionFn); -export const isSelectedProviderInCollection = createSelector(getProviderIds, getSelectedProviderId, doesExistFn); -export const isSelectedDraftInCollection = createSelector(getDraftIds, getSelectedDraftId, doesExistFn); - -/* - * Select pieces of Filter Collection -*/ - -export const getAllFilters = createSelector(getFilterEntityState, fromFilter.selectAllFilters); -export const getFilterEntities = createSelector(getFilterEntityState, fromFilter.selectFilterEntities); -export const getSelectedFilterId = createSelector(getFilterEntityState, fromFilter.getSelectedFilterId); -export const getSelectedFilter = createSelector(getFilterEntities, getSelectedFilterId, getInCollectionFn); -export const getFilterIds = createSelector(getFilterEntityState, fromFilter.selectFilterIds); -export const getFilterCollectionIsLoaded = createSelector(getFilterEntityState, fromFilter.getIsLoaded); - -/* - * Combine pieces of Collection State -*/ - -export const getAllProviders = createSelector(getDraftCollection, getProviderCollection, combineAllFn); -export const getAllProviderIds = createSelector(getDraftIds, getProviderIds, combineAllFn); - -export const getAllEntityIds = createSelector(getAllProviders, getEntityIdsFn); diff --git a/ui/src/app/metadata/domain/service/entity-descriptor.service.ts b/ui/src/app/metadata/domain/service/entity-descriptor.service.ts index 9bb798c15..5cb853a60 100644 --- a/ui/src/app/metadata/domain/service/entity-descriptor.service.ts +++ b/ui/src/app/metadata/domain/service/entity-descriptor.service.ts @@ -1,14 +1,8 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; - import { Observable, throwError } from 'rxjs'; import { catchError } from 'rxjs/operators'; - -import { MetadataProvider } from '../../domain/model/provider'; -import { MOCK_DESCRIPTORS } from '../../../data/descriptors.mock'; -import { Storage } from '../../shared/storage'; -import { environment } from '../../../environments/environment'; -import { MetadataEntity } from '../domain.type'; +import { MetadataResolver } from '../model'; @Injectable() @@ -21,42 +15,42 @@ export class EntityDescriptorService { private http: HttpClient ) {} - query(): Observable { - return this.http.get(`${ this.base }${ this.endpoint }s`, {}) + query(): Observable { + return this.http.get(`${ this.base }${ this.endpoint }s`, {}) .pipe( catchError(err => throwError([])) ); } - find(id: string): Observable { - return this.http.get(`${ this.base }${ this.endpoint }/${ id }`) + find(id: string): Observable { + return this.http.get(`${ this.base }${ this.endpoint }/${ id }`) .pipe( catchError(err => throwError(err)) ); } - update(provider: MetadataProvider): Observable { - return this.http.put(`${this.base}${this.endpoint}/${provider.id}`, provider); + update(provider: MetadataResolver): Observable { + return this.http.put(`${this.base}${this.endpoint}/${provider.id}`, provider); } - save(provider: MetadataProvider): Observable { - return this.http.post(`${this.base}${this.endpoint}`, provider); + save(provider: MetadataResolver): Observable { + return this.http.post(`${this.base}${this.endpoint}`, provider); } - remove(provider: MetadataProvider): Observable { - return this.http.delete(`${this.base}${this.endpoint}/${provider.id}`); + remove(provider: MetadataResolver): Observable { + return this.http.delete(`${this.base}${this.endpoint}/${provider.id}`); } - upload(name: string, xml: string): Observable { - return this.http.post(`${this.base}${this.endpoint}`, xml, { + upload(name: string, xml: string): Observable { + return this.http.post(`${this.base}${this.endpoint}`, xml, { headers: new HttpHeaders().set('Content-Type', 'application/xml'), params: new HttpParams().set('spName', name) }); } - createFromUrl(name: string, url: string): Observable { + createFromUrl(name: string, url: string): Observable { let body = `metadataUrl=${url}`; - return this.http.post(`${this.base}${this.endpoint}`, body, { + return this.http.post(`${this.base}${this.endpoint}`, body, { headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded'), params: new HttpParams().set('spName', name) }); diff --git a/ui/src/app/metadata/domain/service/entity-draft.service.ts b/ui/src/app/metadata/domain/service/entity-draft.service.ts index 83a0dcc8f..a31f8c798 100644 --- a/ui/src/app/metadata/domain/service/entity-draft.service.ts +++ b/ui/src/app/metadata/domain/service/entity-draft.service.ts @@ -3,23 +3,22 @@ import { Injectable } from '@angular/core'; import { Observable, of } from 'rxjs'; import { switchMap } from 'rxjs/operators'; -import { MetadataProvider } from '../../domain/model/provider'; -import { MOCK_DESCRIPTORS } from '../../../data/descriptors.mock'; -import { Storage } from '../../shared/storage'; +import { MetadataResolver } from '../../domain/model'; +import { Storage } from '../../../shared/storage'; @Injectable() export class EntityDraftService { - readonly storage: Storage; + readonly storage: Storage; constructor() { - this.storage = new Storage('provider_drafts'); + this.storage = new Storage('provider_drafts'); } - query(): Observable { + query(): Observable { return of(this.storage.query()); } - find(entityId: string): Observable { + find(entityId: string): Observable { return this.query().pipe( switchMap( list => of( @@ -29,17 +28,17 @@ export class EntityDraftService { ); } - save(provider: MetadataProvider): Observable { + save(provider: MetadataResolver): Observable { this.storage.add(provider); return of(provider); } - remove(provider: MetadataProvider): Observable { + remove(provider: MetadataResolver): Observable { this.storage.removeByAttr(provider.entityId, 'entityId'); return of(provider); } - update(provider: MetadataProvider): Observable { + update(provider: MetadataResolver): Observable { let stored = this.storage.findByAttr(provider.id, 'entityId'); stored = Object.assign({}, stored, provider); this.storage.removeByAttr(provider.entityId, 'entityId'); diff --git a/ui/src/app/metadata/domain/service/entity-id.service.ts b/ui/src/app/metadata/domain/service/entity-id.service.ts index f95e5d653..8daec78df 100644 --- a/ui/src/app/metadata/domain/service/entity-id.service.ts +++ b/ui/src/app/metadata/domain/service/entity-id.service.ts @@ -1,18 +1,11 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; -import * as XmlFormatter from 'xml-formatter'; - import { Observable, Subject, throwError } from 'rxjs'; import { map, catchError } from 'rxjs/operators'; -import { IDS } from '../../../data/ids.mock'; -import { Storage } from '../../shared/storage'; -import { environment } from '../../../environments/environment'; -import { QueryParams } from '../../core/model/query'; -import { MDUI } from '../model/mdui'; - -const MOCK_INTERVAL = 500; +import { QueryParams } from '../../../core/model/query'; +import { MDUI } from '../model'; @Injectable() export class EntityIdService { diff --git a/ui/src/app/metadata/domain/service/entity-validators.service.ts b/ui/src/app/metadata/domain/service/entity-validators.service.ts index 0e7a26716..638ba0c63 100644 --- a/ui/src/app/metadata/domain/service/entity-validators.service.ts +++ b/ui/src/app/metadata/domain/service/entity-validators.service.ts @@ -1,7 +1,7 @@ import { Observable, of } from 'rxjs'; import { map, take, startWith } from 'rxjs/operators'; -import { AbstractControl, FormGroup } from '@angular/forms'; +import { AbstractControl } from '@angular/forms'; export class EntityValidators { static createUniqueIdValidator(ids$: Observable) { diff --git a/ui/src/app/metadata/domain/action/filter-collection.action.ts b/ui/src/app/metadata/filter/action/collection.action.ts similarity index 100% rename from ui/src/app/metadata/domain/action/filter-collection.action.ts rename to ui/src/app/metadata/filter/action/collection.action.ts diff --git a/ui/src/app/metadata/filter/action/filter.action.ts b/ui/src/app/metadata/filter/action/filter.action.ts index af0f6f4c0..ad9ef8d28 100644 --- a/ui/src/app/metadata/filter/action/filter.action.ts +++ b/ui/src/app/metadata/filter/action/filter.action.ts @@ -1,51 +1,49 @@ import { Action } from '@ngrx/store'; - -import { QueryParams } from '../../core/model/query'; import { MetadataFilter } from '../../domain/model/metadata-filter'; -import { MDUI } from '../../domain/model/mdui'; - -export const SELECT_ID = '[Filter] Select Entity ID'; - -export const UPDATE_FILTER = '[Filter] Update Filter'; -export const CANCEL_CREATE_FILTER = '[Filter] Cancel Create Filter'; - -export const LOAD_ENTITY_PREVIEW = '[Filter] Load Preview data'; -export const LOAD_ENTITY_PREVIEW_SUCCESS = '[Filter] Load Preview data success'; -export const LOAD_ENTITY_PREVIEW_ERROR = '[Filter] Load Preview data error'; +import { MDUI } from '../../domain/model'; + +export enum FilterActionTypes { + SELECT_ID = '[Filter] Select Entity ID', + UPDATE_FILTER = '[Filter] Update Filter', + CANCEL_CREATE_FILTER = '[Filter] Cancel Create Filter', + LOAD_ENTITY_PREVIEW = '[Filter] Load Preview data', + LOAD_ENTITY_PREVIEW_SUCCESS = '[Filter] Load Preview data success', + LOAD_ENTITY_PREVIEW_ERROR = '[Filter] Load Preview data error' +} export class SelectId implements Action { - readonly type = SELECT_ID; + readonly type = FilterActionTypes.SELECT_ID; constructor(public payload: string) { } } export class LoadEntityPreview implements Action { - readonly type = LOAD_ENTITY_PREVIEW; + readonly type = FilterActionTypes.LOAD_ENTITY_PREVIEW; constructor(public payload: string) { } } export class LoadEntityPreviewSuccess implements Action { - readonly type = LOAD_ENTITY_PREVIEW_SUCCESS; + readonly type = FilterActionTypes.LOAD_ENTITY_PREVIEW_SUCCESS; constructor(public payload: MDUI) { } } export class LoadEntityPreviewError implements Action { - readonly type = LOAD_ENTITY_PREVIEW_ERROR; + readonly type = FilterActionTypes.LOAD_ENTITY_PREVIEW_ERROR; constructor(public payload: string) { } } export class CancelCreateFilter implements Action { - readonly type = CANCEL_CREATE_FILTER; + readonly type = FilterActionTypes.CANCEL_CREATE_FILTER; } export class UpdateFilterChanges implements Action { - readonly type = UPDATE_FILTER; + readonly type = FilterActionTypes.UPDATE_FILTER; constructor(public payload: Partial) { } } -export type Actions = +export type FilterActionsUnion = | SelectId | UpdateFilterChanges | CancelCreateFilter diff --git a/ui/src/app/metadata/filter/action/search.action.ts b/ui/src/app/metadata/filter/action/search.action.ts index a9312eff3..cd9638a54 100644 --- a/ui/src/app/metadata/filter/action/search.action.ts +++ b/ui/src/app/metadata/filter/action/search.action.ts @@ -1,47 +1,49 @@ import { Action } from '@ngrx/store'; -import { QueryParams } from '../../core/model/query'; - -export const QUERY_ENTITY_IDS = '[Filter] Query Entity Ids'; -export const VIEW_MORE_IDS = '[Filter] View More Ids Modal'; -export const CANCEL_VIEW_MORE = '[Filter] Cancel View More'; -export const CLEAR_SEARCH = '[Filter] Clear Search'; -export const LOAD_ENTITY_IDS_SUCCESS = '[Entity ID Collection] Load Entity Ids Success'; -export const LOAD_ENTITY_IDS_ERROR = '[Entity ID Collection] Load Entity Ids Error'; +import { QueryParams } from '../../../core/model/query'; + +export enum SearchActionTypes { + QUERY_ENTITY_IDS = '[Filter] Query Entity Ids', + VIEW_MORE_IDS = '[Filter] View More Ids Modal', + CANCEL_VIEW_MORE = '[Filter] Cancel View More', + CLEAR_SEARCH = '[Filter] Clear Search', + LOAD_ENTITY_IDS_SUCCESS = '[Entity ID Collection] Load Entity Ids Success', + LOAD_ENTITY_IDS_ERROR = '[Entity ID Collection] Load Entity Ids Error' +} export class QueryEntityIds implements Action { - readonly type = QUERY_ENTITY_IDS; + readonly type = SearchActionTypes.QUERY_ENTITY_IDS; constructor(public payload: QueryParams) { } } export class ViewMoreIds implements Action { - readonly type = VIEW_MORE_IDS; + readonly type = SearchActionTypes.VIEW_MORE_IDS; constructor(public payload: string) { } } export class ClearSearch implements Action { - readonly type = CLEAR_SEARCH; + readonly type = SearchActionTypes.CLEAR_SEARCH; } export class CancelViewMore implements Action { - readonly type = CANCEL_VIEW_MORE; + readonly type = SearchActionTypes.CANCEL_VIEW_MORE; } export class LoadEntityIdsSuccess implements Action { - readonly type = LOAD_ENTITY_IDS_SUCCESS; + readonly type = SearchActionTypes.LOAD_ENTITY_IDS_SUCCESS; constructor(public payload: string[]) { } } export class LoadEntityIdsError implements Action { - readonly type = LOAD_ENTITY_IDS_ERROR; + readonly type = SearchActionTypes.LOAD_ENTITY_IDS_ERROR; constructor(public payload: Error) { } } -export type Actions = +export type SearchActionsUnion = | ViewMoreIds | CancelViewMore | ClearSearch diff --git a/ui/src/app/metadata/filter/component/search-dialog.component.ts b/ui/src/app/metadata/filter/component/search-dialog.component.ts index 41f75be8b..545684077 100644 --- a/ui/src/app/metadata/filter/component/search-dialog.component.ts +++ b/ui/src/app/metadata/filter/component/search-dialog.component.ts @@ -1,5 +1,5 @@ import { Component, AfterViewInit, Input, OnInit, SimpleChange, SimpleChanges } from '@angular/core'; -import { NgbModal, NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; import { Observable } from 'rxjs'; import { Store } from '@ngrx/store'; diff --git a/ui/src/app/metadata/filter/container/edit-filter.component.ts b/ui/src/app/metadata/filter/container/edit-filter.component.ts index b1581c8a4..9ab55c3b7 100644 --- a/ui/src/app/metadata/filter/container/edit-filter.component.ts +++ b/ui/src/app/metadata/filter/container/edit-filter.component.ts @@ -4,21 +4,20 @@ import { Store } from '@ngrx/store'; import { Observable, Subject } from 'rxjs'; import { withLatestFrom, distinctUntilChanged, takeUntil, startWith, filter } from 'rxjs/operators'; -import * as fromRoot from '../../app.reducer'; +import * as fromRoot from '../../../app.reducer'; import * as fromFilter from '../reducer'; -import * as fromCollection from '../../domain/reducer'; import { ProviderValueEmitter } from '../../domain/service/provider-change-emitter.service'; import { CancelCreateFilter, SelectId, UpdateFilterChanges } from '../action/filter.action'; -import { UpdateFilterRequest } from '../../domain/action/filter-collection.action'; +import { UpdateFilterRequest } from '../../filter/action/collection.action'; import { MetadataFilter } from '../../domain/model/metadata-filter'; import { EntityValidators } from '../../domain/service/entity-validators.service'; import { QueryEntityIds, ViewMoreIds, ClearSearch } from '../action/search.action'; -import { AutoCompleteComponent } from '../../shared/autocomplete/autocomplete.component'; -import { MDUI } from '../../domain/model/mdui'; +import { AutoCompleteComponent } from '../../../shared/autocomplete/autocomplete.component'; +import { MDUI } from '../../domain/model'; import { PreviewEntity } from '../../domain/action/entity.action'; import { MetadataEntity } from '../../domain/domain.type'; -import { EntityAttributesFilter } from '../../domain/entity/entity-attributes.filter'; +import { EntityAttributesFilter } from '../../domain/entity/filter/entity-attributes-filter'; @Component({ selector: 'edit-filter-page', @@ -73,7 +72,7 @@ export class EditFilterComponent implements OnInit, OnDestroy { this.showMore$ = this.store.select(fromFilter.getViewingMore); this.selected$ = this.store.select(fromFilter.getSelected); - this.filter$ = this.store.select(fromCollection.getSelectedFilter); + this.filter$ = this.store.select(fromFilter.getSelectedFilter); this.entityIds$ = this.store.select(fromFilter.getEntityCollection); this.loading$ = this.store.select(fromFilter.getIsLoading); this.processing$ = this.loading$.pipe(withLatestFrom(this.showMore$, (l, s) => !s && l)); diff --git a/ui/src/app/metadata/filter/container/filter.component.ts b/ui/src/app/metadata/filter/container/filter.component.ts index b7d139423..2f2d0aa44 100644 --- a/ui/src/app/metadata/filter/container/filter.component.ts +++ b/ui/src/app/metadata/filter/container/filter.component.ts @@ -6,9 +6,8 @@ import { Store } from '@ngrx/store'; import { NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap'; import { MetadataFilter } from '../../domain/model/metadata-filter'; -import { SelectFilter } from '../../domain/action/filter-collection.action'; -import * as fromFilters from '../reducer'; -import * as fromCollection from '../../domain/reducer'; +import { SelectFilter } from '../action/collection.action'; +import * as fromFilter from '../reducer'; @Component({ @@ -22,7 +21,7 @@ export class FilterComponent implements OnDestroy { filter$: Observable; constructor( - private store: Store, + private store: Store, private route: ActivatedRoute ) { this.actionsSubscription = this.route.params.pipe( @@ -32,7 +31,7 @@ export class FilterComponent implements OnDestroy { }) ).subscribe(store); - this.filter$ = this.store.select(fromCollection.getSelectedFilter); + this.filter$ = this.store.select(fromFilter.getSelectedFilter); } ngOnDestroy() { diff --git a/ui/src/app/metadata/filter/container/new-filter.component.ts b/ui/src/app/metadata/filter/container/new-filter.component.ts index f56245dd7..840d2d9a4 100644 --- a/ui/src/app/metadata/filter/container/new-filter.component.ts +++ b/ui/src/app/metadata/filter/container/new-filter.component.ts @@ -7,12 +7,12 @@ import { withLatestFrom, distinctUntilChanged, startWith, takeUntil } from 'rxjs import * as fromFilter from '../reducer'; import { ProviderValueEmitter } from '../../domain/service/provider-change-emitter.service'; import { CancelCreateFilter, SelectId, UpdateFilterChanges } from '../action/filter.action'; -import { AddFilterRequest } from '../../domain/action/filter-collection.action'; +import { AddFilterRequest } from '../action/collection.action'; import { MetadataFilter } from '../../domain/model/metadata-filter'; import { EntityValidators } from '../../domain/service/entity-validators.service'; import { QueryEntityIds, ViewMoreIds, ClearSearch } from '../action/search.action'; -import { MDUI } from '../../domain/model/mdui'; -import { EntityAttributesFilter } from '../../domain/entity/entity-attributes.filter'; +import { MDUI } from '../../domain/model'; +import { EntityAttributesFilter } from '../../domain/entity/filter/entity-attributes-filter'; @Component({ selector: 'new-filter-page', diff --git a/ui/src/app/metadata/domain/effect/filter-collection.effect.spec.ts b/ui/src/app/metadata/filter/effect/collection.effect.spec.ts similarity index 67% rename from ui/src/app/metadata/domain/effect/filter-collection.effect.spec.ts rename to ui/src/app/metadata/filter/effect/collection.effect.spec.ts index 178dfa650..8dfc5cb5d 100644 --- a/ui/src/app/metadata/domain/effect/filter-collection.effect.spec.ts +++ b/ui/src/app/metadata/filter/effect/collection.effect.spec.ts @@ -1,14 +1,12 @@ -import { TestBed, tick, fakeAsync } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { Actions } from '@ngrx/effects'; -import { cold, getTestScheduler, hot } from 'jasmine-marbles'; -import { empty, Observable, of } from 'rxjs'; -import { TestActions, getActions } from '../../../testing/effect.util'; -import { MetadataFilter } from '../domain.type'; -import { FilterCollectionEffects } from './filter-collection.effect'; -import { MetadataResolverService } from '../service/metadata-resolver.service'; +import { TestActions, getActions } from '../../../../testing/effect.util'; +import { MetadataFilter } from '../../domain/model'; +import { FilterCollectionEffects } from './collection.effect'; +import { MetadataResolverService } from '../../domain/service/metadata-resolver.service'; import { Router } from '@angular/router'; -import { RouterStub } from '../../../testing/router.stub'; +import { RouterStub } from '../../../../testing/router.stub'; describe('Filter Collection Effects', () => { let effects: FilterCollectionEffects; diff --git a/ui/src/app/metadata/domain/effect/filter-collection.effect.ts b/ui/src/app/metadata/filter/effect/collection.effect.ts similarity index 90% rename from ui/src/app/metadata/domain/effect/filter-collection.effect.ts rename to ui/src/app/metadata/filter/effect/collection.effect.ts index f9b5d8589..8874aee39 100644 --- a/ui/src/app/metadata/domain/effect/filter-collection.effect.ts +++ b/ui/src/app/metadata/filter/effect/collection.effect.ts @@ -6,14 +6,14 @@ import { Router } from '@angular/router'; import { of } from 'rxjs'; import { switchMap, map, catchError, tap } from 'rxjs/operators'; -import * as actions from '../action/filter-collection.action'; -import { FilterCollectionActionTypes } from '../action/filter-collection.action'; +import * as actions from '../action/collection.action'; +import { FilterCollectionActionTypes } from '../action/collection.action'; import * as fromFilter from '../reducer'; -import { MetadataResolverService } from '../service/metadata-resolver.service'; -import { MetadataFilter } from '../../domain/model/metadata-filter'; -import { removeNulls } from '../../shared/util'; -import { EntityAttributesFilter } from '../entity/entity-attributes.filter'; +import { MetadataResolverService } from '../../domain/service/metadata-resolver.service'; +import { MetadataFilter } from '../../domain/model'; +import { removeNulls } from '../../../shared/util'; +import { EntityAttributesFilter } from '../../domain/entity/filter/entity-attributes-filter'; /* istanbul ignore next */ @Injectable() diff --git a/ui/src/app/metadata/filter/effect/filter.effect.ts b/ui/src/app/metadata/filter/effect/filter.effect.ts index c74bd3893..d137129e7 100644 --- a/ui/src/app/metadata/filter/effect/filter.effect.ts +++ b/ui/src/app/metadata/filter/effect/filter.effect.ts @@ -6,42 +6,53 @@ import { map, switchMap, catchError, withLatestFrom, tap } from 'rxjs/operators' import { Router } from '@angular/router'; -import * as filterActions from '../action/filter.action'; -import * as fromCollection from '../../domain/reducer'; -import * as fromRoot from '../../app.reducer'; -import * as collection from '../../domain/action/filter-collection.action'; -import { FilterCollectionActionTypes } from '../../domain/action/filter-collection.action'; +import * as fromFilter from '../reducer'; +import * as fromRoot from '../../../app.reducer'; +import { + FilterCollectionActionTypes, + UpdateFilterFail, + UpdateFilterRequest, + AddFilterSuccess, + LoadFilterRequest +} from '../action/collection.action'; +import { + SelectId, + FilterActionTypes, + LoadEntityPreviewSuccess, + LoadEntityPreviewError, + CancelCreateFilter +} from '../action/filter.action'; import { EntityIdService } from '../../domain/service/entity-id.service'; import { MetadataResolverService } from '../../domain/service/metadata-resolver.service'; -import { ShowContentionAction } from '../../contention/action/contention.action'; -import { MetadataFilter } from '../../domain/domain.type'; -import { ContentionService } from '../../contention/service/contention.service'; +import { ShowContentionAction } from '../../../contention/action/contention.action'; +import { MetadataFilter } from '../../domain/model'; +import { ContentionService } from '../../../contention/service/contention.service'; @Injectable() export class FilterEffects { @Effect() loadEntityMdui$ = this.actions$.pipe( - ofType(filterActions.SELECT_ID), + ofType(FilterActionTypes.SELECT_ID), map(action => action.payload), switchMap(query => this.idService.findEntityById(query).pipe( - map(data => new filterActions.LoadEntityPreviewSuccess(data)), - catchError(error => of(new filterActions.LoadEntityPreviewError(error))) + map(data => new LoadEntityPreviewSuccess(data)), + catchError(error => of(new LoadEntityPreviewError(error))) ) ) ); @Effect() openContention$ = this.actions$.pipe( - ofType(collection.FilterCollectionActionTypes.UPDATE_FILTER_FAIL), + ofType(FilterCollectionActionTypes.UPDATE_FILTER_FAIL), map(action => action.payload), - withLatestFrom(this.store.select(fromCollection.getSelectedFilter)), + withLatestFrom(this.store.select(fromFilter.getSelectedFilter)), switchMap(([filter, current]) => this.resolverService.find(filter.id).pipe( map(data => new ShowContentionAction(this.contentionService.getContention(current, filter, data, { - resolve: (obj) => this.store.dispatch(new collection.UpdateFilterRequest({ ...obj })), - reject: (obj) => this.store.dispatch(new filterActions.CancelCreateFilter()) + resolve: (obj) => this.store.dispatch(new UpdateFilterRequest({ ...obj })), + reject: (obj) => this.store.dispatch(new CancelCreateFilter()) }))) ) ) @@ -49,14 +60,14 @@ export class FilterEffects { @Effect({ dispatch: false }) saveFilterSuccess$ = this.actions$.pipe( - ofType(FilterCollectionActionTypes.ADD_FILTER_SUCCESS), + ofType(FilterCollectionActionTypes.ADD_FILTER_SUCCESS), switchMap(() => this.router.navigate(['/dashboard'])) ); @Effect() cancelChanges$ = this.actions$.pipe( - ofType(filterActions.CANCEL_CREATE_FILTER), - map(() => new collection.LoadFilterRequest()), + ofType(FilterActionTypes.CANCEL_CREATE_FILTER), + map(() => new LoadFilterRequest()), tap(() => this.router.navigate(['/dashboard'])) ); diff --git a/ui/src/app/metadata/filter/effect/search.effect.ts b/ui/src/app/metadata/filter/effect/search.effect.ts index d0e85f568..7642728e5 100644 --- a/ui/src/app/metadata/filter/effect/search.effect.ts +++ b/ui/src/app/metadata/filter/effect/search.effect.ts @@ -5,12 +5,17 @@ import { of } from 'rxjs'; import { catchError, map, debounceTime, switchMap } from 'rxjs/operators'; import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; -import * as search from '../action/search.action'; +import { + SearchActionTypes, + QueryEntityIds, + LoadEntityIdsError, + LoadEntityIdsSuccess, + ViewMoreIds, + CancelViewMore +} from '../action/search.action'; import { SearchDialogComponent } from '../component/search-dialog.component'; import { EntityIdService } from '../../domain/service/entity-id.service'; -import { MetadataProvider } from '../../domain/model/provider'; -import { MetadataResolverService } from '../../domain/service/metadata-resolver.service'; import { fromPromise } from 'rxjs/internal-compatibility'; import { SelectId } from '../action/filter.action'; @@ -21,20 +26,20 @@ export class SearchIdEffects { private dbounce = 500; @Effect() loadEntityIds$ = this.actions$.pipe( - ofType(search.QUERY_ENTITY_IDS), + ofType(SearchActionTypes.QUERY_ENTITY_IDS), map(action => action.payload), debounceTime(this.dbounce), switchMap(query => this.idService.query(query).pipe( - map(ids => new search.LoadEntityIdsSuccess(ids)), - catchError(error => of(new search.LoadEntityIdsError(error))) + map(ids => new LoadEntityIdsSuccess(ids)), + catchError(error => of(new LoadEntityIdsError(error))) ) ) ); @Effect() viewMore$ = this.actions$.pipe( - ofType(search.VIEW_MORE_IDS), + ofType(SearchActionTypes.VIEW_MORE_IDS), map(action => action.payload), switchMap(q => { const modal = this.modalService.open(SearchDialogComponent) as NgbModalRef; @@ -42,7 +47,7 @@ export class SearchIdEffects { modal.componentInstance.term = q; return fromPromise(res).pipe( map(id => new SelectId(id)), - catchError(() => of(new search.CancelViewMore())) + catchError(() => of(new CancelViewMore())) ); }) ); diff --git a/ui/src/app/metadata/domain/guard/filter-exists.guard.ts b/ui/src/app/metadata/filter/guard/filter-exists.guard.ts similarity index 93% rename from ui/src/app/metadata/domain/guard/filter-exists.guard.ts rename to ui/src/app/metadata/filter/guard/filter-exists.guard.ts index a7ac24414..dec524432 100644 --- a/ui/src/app/metadata/domain/guard/filter-exists.guard.ts +++ b/ui/src/app/metadata/filter/guard/filter-exists.guard.ts @@ -4,9 +4,8 @@ import { select, Store } from '@ngrx/store'; import { Observable, of } from 'rxjs'; import { catchError, filter, map, switchMap, take, tap } from 'rxjs/operators'; -import * as FilterActions from '../action/filter-collection.action'; import * as fromCollection from '../reducer'; -import { MetadataResolverService } from '../service/metadata-resolver.service'; +import { MetadataResolverService } from '../../domain/service/metadata-resolver.service'; /** * Guards are hooks into the route resolution process, providing an opportunity diff --git a/ui/src/app/metadata/domain/reducer/filter-collection.reducer.spec.ts b/ui/src/app/metadata/filter/reducer/collection.reducer.spec.ts similarity index 85% rename from ui/src/app/metadata/domain/reducer/filter-collection.reducer.spec.ts rename to ui/src/app/metadata/filter/reducer/collection.reducer.spec.ts index 7ecfd7314..0a5d9f74f 100644 --- a/ui/src/app/metadata/domain/reducer/filter-collection.reducer.spec.ts +++ b/ui/src/app/metadata/filter/reducer/collection.reducer.spec.ts @@ -1,14 +1,14 @@ -import { reducer } from './filter-collection.reducer'; -import * as fromFilter from './filter-collection.reducer'; +import { reducer } from './collection.reducer'; +import * as fromFilter from './collection.reducer'; import { FilterCollectionActionTypes, LoadFilterSuccess, UpdateFilterSuccess, SelectFilter -} from '../action/filter-collection.action'; -import { EntityAttributesFilter } from '../entity/entity-attributes.filter'; +} from '../action/collection.action'; +import { EntityAttributesFilter } from '../../domain/entity/filter/entity-attributes-filter'; -const snapshot: fromFilter.FilterCollectionState = { +const snapshot: fromFilter.CollectionState = { ids: [], entities: {}, selectedFilterId: null, @@ -24,7 +24,7 @@ describe('Filter Reducer', () => { }); }); - describe(`${FilterCollectionActionTypes.SELECT}`, () => { + describe(`${FilterCollectionActionTypes.SELECT_FILTER}`, () => { it('should set the selected id in the store', () => { const selectedFilterId = 'foo'; const action = new SelectFilter(selectedFilterId); diff --git a/ui/src/app/metadata/domain/reducer/filter-collection.reducer.ts b/ui/src/app/metadata/filter/reducer/collection.reducer.ts similarity index 69% rename from ui/src/app/metadata/domain/reducer/filter-collection.reducer.ts rename to ui/src/app/metadata/filter/reducer/collection.reducer.ts index f665a6c50..158bc0c7b 100644 --- a/ui/src/app/metadata/domain/reducer/filter-collection.reducer.ts +++ b/ui/src/app/metadata/filter/reducer/collection.reducer.ts @@ -1,9 +1,8 @@ -import { EntityState, EntityAdapter, createEntityAdapter, Update } from '@ngrx/entity'; -import { FilterCollectionActionTypes, FilterCollectionActionsUnion } from '../action/filter-collection.action'; -import { MetadataFilter } from '../domain.type'; -import { UpdateChanges } from '../../edit-provider/action/editor.action'; +import { EntityState, EntityAdapter, createEntityAdapter } from '@ngrx/entity'; +import { FilterCollectionActionTypes, FilterCollectionActionsUnion } from '../action/collection.action'; +import { MetadataFilter } from '../../domain/domain.type'; -export interface FilterCollectionState extends EntityState { +export interface CollectionState extends EntityState { selectedFilterId: string | null; loaded: boolean; } @@ -17,12 +16,12 @@ export const adapter: EntityAdapter = createEntityAdapter model.resourceId }); -export const initialState: FilterCollectionState = adapter.getInitialState({ +export const initialState: CollectionState = adapter.getInitialState({ selectedFilterId: null, loaded: false }); -export function reducer(state = initialState, action: FilterCollectionActionsUnion): FilterCollectionState { +export function reducer(state = initialState, action: FilterCollectionActionsUnion): CollectionState { switch (action.type) { case FilterCollectionActionTypes.LOAD_FILTER_SUCCESS: { let s = adapter.addAll(action.payload, { @@ -50,8 +49,8 @@ export function reducer(state = initialState, action: FilterCollectionActionsUni } } -export const getSelectedFilterId = (state: FilterCollectionState) => state.selectedFilterId; -export const getIsLoaded = (state: FilterCollectionState) => state.loaded; +export const getSelectedFilterId = (state: CollectionState) => state.selectedFilterId; +export const getIsLoaded = (state: CollectionState) => state.loaded; export const { selectIds: selectFilterIds, selectEntities: selectFilterEntities, diff --git a/ui/src/app/metadata/filter/reducer/filter.reducer.spec.ts b/ui/src/app/metadata/filter/reducer/filter.reducer.spec.ts index 8dd49f54f..33f3c4baf 100644 --- a/ui/src/app/metadata/filter/reducer/filter.reducer.spec.ts +++ b/ui/src/app/metadata/filter/reducer/filter.reducer.spec.ts @@ -1,8 +1,7 @@ import { reducer } from './filter.reducer'; import * as fromFilter from './filter.reducer'; -import * as actions from '../action/filter.action'; -import * as searchActions from '../action/search.action'; -import { CancelCreateFilter } from '../action/filter.action'; +import { SelectId, LoadEntityPreviewSuccess, UpdateFilterChanges, FilterActionTypes, CancelCreateFilter } from '../action/filter.action'; +import { SearchActionTypes } from '../action/search.action'; import { ClearSearch @@ -14,10 +13,11 @@ import { UpdateFilterRequest, AddFilterSuccess, UpdateFilterSuccess -} from '../../domain/action/filter-collection.action'; -import { MDUI } from '../../domain/model/mdui'; +} from '../action/collection.action'; +import { MDUI } from '../../domain/model'; import { MetadataFilter } from '../../domain/domain.type'; -import { EntityAttributesFilter } from '../../domain/entity/entity-attributes.filter'; +import { EntityAttributesFilter } from '../../domain/entity/filter/entity-attributes-filter'; + const snapshot: fromFilter.FilterState = { selected: null, @@ -45,27 +45,27 @@ describe('Filter Reducer', () => { }); }); - describe(`${actions.SELECT_ID} action`, () => { + describe(`${FilterActionTypes.SELECT_ID} action`, () => { it('should set selected property to the provided payload', () => { const id = 'foo'; - const result = reducer(snapshot, new actions.SelectId(id)); + const result = reducer(snapshot, new SelectId(id)); expect(result.selected).toBe(id); }); }); - describe(`${actions.LOAD_ENTITY_PREVIEW_SUCCESS} action`, () => { + describe(`${FilterActionTypes.LOAD_ENTITY_PREVIEW_SUCCESS} action`, () => { it('should set preview property to the provided payload', () => { let sampleMdui = { ...mdui }; - const result = reducer(snapshot, new actions.LoadEntityPreviewSuccess(sampleMdui)); + const result = reducer(snapshot, new LoadEntityPreviewSuccess(sampleMdui)); expect(result.preview).toEqual(sampleMdui); }); }); - describe(`${actions.UPDATE_FILTER} action`, () => { + describe(`${FilterActionTypes.UPDATE_FILTER} action`, () => { it('should update the state of changes', () => { const changes = { filterEnabled: false }; const current = { ...snapshot, changes: { filterEnabled: true } as MetadataFilter }; - const result = reducer(current, new actions.UpdateFilterChanges(changes)); + const result = reducer(current, new UpdateFilterChanges(changes)); expect(result.changes.filterEnabled).toBe(false); }); }); @@ -96,13 +96,13 @@ describe('Filter Reducer', () => { expect(result).toEqual(fromFilter.initialState); }); }); - describe(`${searchActions.CLEAR_SEARCH} action`, () => { + describe(`${SearchActionTypes.CLEAR_SEARCH} action`, () => { it('should set saving to true', () => { const result = reducer(snapshot, new ClearSearch()); expect(result).toEqual(fromFilter.initialState); }); }); - describe(`${actions.CANCEL_CREATE_FILTER} action`, () => { + describe(`${FilterActionTypes.CANCEL_CREATE_FILTER} action`, () => { it('should set saving to true', () => { const result = reducer(snapshot, new CancelCreateFilter()); expect(result).toEqual(fromFilter.initialState); diff --git a/ui/src/app/metadata/filter/reducer/filter.reducer.ts b/ui/src/app/metadata/filter/reducer/filter.reducer.ts index 1b7d54c01..d10cba1fb 100644 --- a/ui/src/app/metadata/filter/reducer/filter.reducer.ts +++ b/ui/src/app/metadata/filter/reducer/filter.reducer.ts @@ -1,6 +1,12 @@ -import * as filter from '../action/filter.action'; -import * as search from '../action/search.action'; -import { FilterCollectionActionTypes, FilterCollectionActionsUnion } from '../../domain/action/filter-collection.action'; +import { + FilterActionTypes, + FilterActionsUnion +} from '../action/filter.action'; +import { + SearchActionTypes, + SearchActionsUnion +} from '../action/search.action'; +import { FilterCollectionActionTypes, FilterCollectionActionsUnion } from '../action/collection.action'; import { MetadataFilter, MDUI } from '../../domain/domain.type'; export interface FilterState { @@ -17,21 +23,21 @@ export const initialState: FilterState = { saving: false }; -export function reducer(state = initialState, action: filter.Actions | search.Actions | FilterCollectionActionsUnion): FilterState { +export function reducer(state = initialState, action: FilterActionsUnion | SearchActionsUnion | FilterCollectionActionsUnion): FilterState { switch (action.type) { - case filter.SELECT_ID: { + case FilterActionTypes.SELECT_ID: { return { ...state, selected: action.payload }; } - case filter.LOAD_ENTITY_PREVIEW_SUCCESS: { + case FilterActionTypes.LOAD_ENTITY_PREVIEW_SUCCESS: { return { ...state, preview: action.payload }; } - case filter.UPDATE_FILTER: { + case FilterActionTypes.UPDATE_FILTER: { return { ...state, changes: { @@ -56,8 +62,8 @@ export function reducer(state = initialState, action: filter.Actions | search.Ac } case FilterCollectionActionTypes.ADD_FILTER_SUCCESS: case FilterCollectionActionTypes.UPDATE_FILTER_SUCCESS: - case search.CLEAR_SEARCH: - case filter.CANCEL_CREATE_FILTER: { + case SearchActionTypes.CLEAR_SEARCH: + case FilterActionTypes.CANCEL_CREATE_FILTER: { return { ...initialState }; diff --git a/ui/src/app/metadata/filter/reducer/index.ts b/ui/src/app/metadata/filter/reducer/index.ts index f94f5d385..5e971027c 100644 --- a/ui/src/app/metadata/filter/reducer/index.ts +++ b/ui/src/app/metadata/filter/reducer/index.ts @@ -1,25 +1,32 @@ import { createSelector, createFeatureSelector } from '@ngrx/store'; -import * as fromRoot from '../../core/reducer'; +import * as fromRoot from '../../../core/reducer'; import * as fromFilter from './filter.reducer'; import * as fromSearch from './search.reducer'; +import * as fromCollection from './collection.reducer'; + +import * as fromDomain from '../../domain/reducer/index'; export interface FilterState { filter: fromFilter.FilterState; search: fromSearch.SearchState; + collection: fromCollection.CollectionState; } export const reducers = { filter: fromFilter.reducer, - search: fromSearch.reducer + search: fromSearch.reducer, + collection: fromCollection.reducer }; export interface State extends fromRoot.State { - 'metadata-filter': FilterState; + 'filter': FilterState; } export const getFiltersFromStateFn = (state: FilterState) => state.filter; export const getSearchFromStateFn = (state: FilterState) => state.search; -export const getFilterState = createFeatureSelector('metadata-filter'); +export const getCollectionFromStateFn = (state: FilterState) => state.collection; + +export const getFilterState = createFeatureSelector('filter'); export const getFilterFromState = createSelector(getFilterState, getFiltersFromStateFn); export const getSelected = createSelector(getFilterFromState, fromFilter.getSelected); @@ -33,3 +40,14 @@ export const getIsLoading = createSelector(getSearchFromState, fromSearch.getLoa export const getError = createSelector(getSearchFromState, fromSearch.getError); export const getTerm = createSelector(getSearchFromState, fromSearch.getTerm); export const getViewingMore = createSelector(getSearchFromState, fromSearch.getViewMore); + +/* + * Select pieces of Filter Collection +*/ +export const getCollectionState = createSelector(getFilterState, getCollectionFromStateFn); +export const getAllFilters = createSelector(getCollectionState, fromCollection.selectAllFilters); +export const getFilterEntities = createSelector(getCollectionState, fromCollection.selectFilterEntities); +export const getSelectedFilterId = createSelector(getCollectionState, fromCollection.getSelectedFilterId); +export const getSelectedFilter = createSelector(getFilterEntities, getSelectedFilterId, fromDomain.getInCollectionFn); +export const getFilterIds = createSelector(getCollectionState, fromCollection.selectFilterIds); +export const getFilterCollectionIsLoaded = createSelector(getCollectionState, fromCollection.getIsLoaded); diff --git a/ui/src/app/metadata/filter/reducer/search.reducer.spec.ts b/ui/src/app/metadata/filter/reducer/search.reducer.spec.ts index 576294cf3..7c77afc30 100644 --- a/ui/src/app/metadata/filter/reducer/search.reducer.spec.ts +++ b/ui/src/app/metadata/filter/reducer/search.reducer.spec.ts @@ -1,6 +1,13 @@ import { reducer } from './search.reducer'; import * as fromFilter from './search.reducer'; -import * as actions from '../action/search.action'; +import { + SearchActionTypes, + ViewMoreIds, + CancelViewMore, + QueryEntityIds, + LoadEntityIdsError, + LoadEntityIdsSuccess +} from '../action/search.action'; const snapshot: fromFilter.SearchState = { entityIds: [], @@ -19,44 +26,44 @@ describe('Filter Reducer', () => { }); }); - describe(`${actions.VIEW_MORE_IDS} action`, () => { + describe(`${SearchActionTypes.VIEW_MORE_IDS} action`, () => { it('should set viewMore property to true', () => { - const result = reducer(snapshot, new actions.ViewMoreIds('foo')); + const result = reducer(snapshot, new ViewMoreIds('foo')); expect(result.viewMore).toBe(true); }); }); - describe(`${actions.CANCEL_VIEW_MORE} action`, () => { + describe(`${SearchActionTypes.CANCEL_VIEW_MORE} action`, () => { it('should set viewMore property to false', () => { - const result = reducer(snapshot, new actions.CancelViewMore()); + const result = reducer(snapshot, new CancelViewMore()); expect(result.viewMore).toBe(false); }); }); - describe(`${actions.QUERY_ENTITY_IDS} action`, () => { + describe(`${SearchActionTypes.QUERY_ENTITY_IDS} action`, () => { it('should set loading property to true', () => { - const result = reducer(snapshot, new actions.QueryEntityIds({ term: 'foo' })); + const result = reducer(snapshot, new QueryEntityIds({ term: 'foo' })); expect(result.loading).toBe(true); }); }); - describe(`${actions.LOAD_ENTITY_IDS_SUCCESS} action`, () => { + describe(`${SearchActionTypes.LOAD_ENTITY_IDS_SUCCESS} action`, () => { it('should set loading property to false and the entityIds property to the provided payload', () => { const ids = ['foo']; - const result = reducer(snapshot, new actions.LoadEntityIdsSuccess(ids)); + const result = reducer(snapshot, new LoadEntityIdsSuccess(ids)); expect(result.loading).toBe(false); expect(result.entityIds).toBe(ids); }); }); - describe(`${actions.LoadEntityIdsError} action`, () => { + describe(`${SearchActionTypes.LOAD_ENTITY_IDS_ERROR} action`, () => { it('should set loading property to false and the error property to the provided payload', () => { const err = new Error('Foobar!'); - const result = reducer(snapshot, new actions.LoadEntityIdsError(err)); + const result = reducer(snapshot, new LoadEntityIdsError(err)); expect(result.loading).toBe(false); expect(result.error).toBe(err); diff --git a/ui/src/app/metadata/filter/reducer/search.reducer.ts b/ui/src/app/metadata/filter/reducer/search.reducer.ts index 47d5948bc..1d63609e9 100644 --- a/ui/src/app/metadata/filter/reducer/search.reducer.ts +++ b/ui/src/app/metadata/filter/reducer/search.reducer.ts @@ -1,6 +1,6 @@ -import * as search from '../action/search.action'; -import * as filter from '../action/filter.action'; -import { FilterCollectionActionTypes, FilterCollectionActionsUnion } from '../../domain/action/filter-collection.action'; +import { FilterActionsUnion, FilterActionTypes } from '../action/filter.action'; +import { SearchActionsUnion, SearchActionTypes } from '../action/search.action'; +import { FilterCollectionActionTypes, FilterCollectionActionsUnion } from '../action/collection.action'; export interface SearchState { entityIds: string[]; @@ -18,28 +18,28 @@ export const initialState: SearchState = { term: '', }; -export function reducer(state = initialState, action: search.Actions | filter.Actions | FilterCollectionActionsUnion): SearchState { +export function reducer(state = initialState, action: SearchActionsUnion | FilterActionsUnion | FilterCollectionActionsUnion): SearchState { switch (action.type) { - case search.VIEW_MORE_IDS: { + case SearchActionTypes.VIEW_MORE_IDS: { return { ...state, viewMore: true }; } - case search.CANCEL_VIEW_MORE: { + case SearchActionTypes.CANCEL_VIEW_MORE: { return { ...state, viewMore: false }; } - case search.QUERY_ENTITY_IDS: { + case SearchActionTypes.QUERY_ENTITY_IDS: { return { ...state, loading: true, term: action.payload.term }; } - case search.LOAD_ENTITY_IDS_SUCCESS: { + case SearchActionTypes.LOAD_ENTITY_IDS_SUCCESS: { return { ...state, loading: false, @@ -47,7 +47,7 @@ export function reducer(state = initialState, action: search.Actions | filter.Ac entityIds: action.payload }; } - case search.LOAD_ENTITY_IDS_ERROR: { + case SearchActionTypes.LOAD_ENTITY_IDS_ERROR: { return { ...state, loading: false, @@ -56,8 +56,8 @@ export function reducer(state = initialState, action: search.Actions | filter.Ac } case FilterCollectionActionTypes.ADD_FILTER_SUCCESS: case FilterCollectionActionTypes.UPDATE_FILTER_SUCCESS: - case search.CLEAR_SEARCH: - case filter.CANCEL_CREATE_FILTER: { + case SearchActionTypes.CLEAR_SEARCH: + case FilterActionTypes.CANCEL_CREATE_FILTER: { return { ...initialState }; diff --git a/ui/src/app/metadata/metadata.reducer.ts b/ui/src/app/metadata/metadata.reducer.ts new file mode 100644 index 000000000..ecda6058c --- /dev/null +++ b/ui/src/app/metadata/metadata.reducer.ts @@ -0,0 +1,32 @@ +import * as fromRoot from '../app.reducer'; +import { FilterState } from './filter/reducer/filter.reducer'; +import { ResolverState } from './resolver/reducer'; + +import { reducers as filterReducers } from './filter/reducer'; +import { reducers as resolverReducers } from './filter/reducer'; + +export interface MetadataState { + filter: FilterState; + // provider: ProviderState; + resolver: ResolverState; +} + +export interface State extends fromRoot.State { + metadata: MetadataState; +} + +export const reducers = { + filter: filterReducers, + resolver: resolverReducers +}; + +/* + * Utility functions +*/ + +export const combineAllFn = (d, p) => [...p, ...d]; +export const doesExistFn = (ids, selected) => ids.indexOf(selected) > -1; +export const getInCollectionFn = (entities, selectedId) => { + return selectedId && entities[selectedId]; +}; +export const getEntityIdsFn = list => list.map(entity => entity.entityId); diff --git a/ui/src/app/metadata/domain/action/provider-collection.action.ts b/ui/src/app/metadata/resolver/action/collection.action.ts similarity index 87% rename from ui/src/app/metadata/domain/action/provider-collection.action.ts rename to ui/src/app/metadata/resolver/action/collection.action.ts index 1f60e26c9..218f599b7 100644 --- a/ui/src/app/metadata/domain/action/provider-collection.action.ts +++ b/ui/src/app/metadata/resolver/action/collection.action.ts @@ -1,5 +1,5 @@ import { Action } from '@ngrx/store'; -import { MetadataProvider } from '../model/provider'; +import { MetadataResolver } from '../../domain/model'; import { Update } from '@ngrx/entity'; export enum ProviderCollectionActionTypes { @@ -40,7 +40,7 @@ export class SelectProvider implements Action { export class SelectProviderSuccess implements Action { readonly type = ProviderCollectionActionTypes.SELECT_SUCCESS; - constructor(public payload: MetadataProvider) { } + constructor(public payload: MetadataResolver) { } } export class LoadProviderRequest implements Action { @@ -52,7 +52,7 @@ export class LoadProviderRequest implements Action { export class LoadProviderSuccess implements Action { readonly type = ProviderCollectionActionTypes.LOAD_PROVIDER_SUCCESS; - constructor(public payload: MetadataProvider[]) { } + constructor(public payload: MetadataResolver[]) { } } export class LoadProviderError implements Action { @@ -64,31 +64,31 @@ export class LoadProviderError implements Action { export class UpdateProviderRequest implements Action { readonly type = ProviderCollectionActionTypes.UPDATE_PROVIDER_REQUEST; - constructor(public payload: MetadataProvider) { } + constructor(public payload: MetadataResolver) { } } export class UpdateProviderSuccess implements Action { readonly type = ProviderCollectionActionTypes.UPDATE_PROVIDER_SUCCESS; - constructor(public payload: Update) { } + constructor(public payload: Update) { } } export class UpdateProviderFail implements Action { readonly type = ProviderCollectionActionTypes.UPDATE_PROVIDER_FAIL; - constructor(public payload: MetadataProvider) { } + constructor(public payload: MetadataResolver) { } } export class AddProviderRequest implements Action { readonly type = ProviderCollectionActionTypes.ADD_PROVIDER; - constructor(public payload: MetadataProvider) { } + constructor(public payload: MetadataResolver) { } } export class AddProviderSuccess implements Action { readonly type = ProviderCollectionActionTypes.ADD_PROVIDER_SUCCESS; - constructor(public payload: MetadataProvider) { } + constructor(public payload: MetadataResolver) { } } export class AddProviderFail implements Action { @@ -100,19 +100,19 @@ export class AddProviderFail implements Action { export class RemoveProviderRequest implements Action { readonly type = ProviderCollectionActionTypes.REMOVE_PROVIDER; - constructor(public payload: MetadataProvider) { } + constructor(public payload: MetadataResolver) { } } export class RemoveProviderSuccess implements Action { readonly type = ProviderCollectionActionTypes.REMOVE_PROVIDER_SUCCESS; - constructor(public payload: MetadataProvider) { } + constructor(public payload: MetadataResolver) { } } export class RemoveProviderFail implements Action { readonly type = ProviderCollectionActionTypes.REMOVE_PROVIDER_FAIL; - constructor(public payload: MetadataProvider) { } + constructor(public payload: MetadataResolver) { } } export class UploadProviderRequest implements Action { diff --git a/ui/src/app/metadata-provider/action/copy.action.ts b/ui/src/app/metadata/resolver/action/copy.action.ts similarity index 90% rename from ui/src/app/metadata-provider/action/copy.action.ts rename to ui/src/app/metadata/resolver/action/copy.action.ts index a0e424374..54c20c477 100644 --- a/ui/src/app/metadata-provider/action/copy.action.ts +++ b/ui/src/app/metadata/resolver/action/copy.action.ts @@ -1,5 +1,5 @@ import { Action } from '@ngrx/store'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataResolver } from '../../domain/model'; export enum CopySourceActionTypes { CREATE_PROVIDER_COPY_REQUEST = '[Copy Resolver] Create Resolver Copy Request', @@ -24,7 +24,7 @@ export class CreateProviderCopyRequest implements Action { export class CreateProviderCopySuccess implements Action { readonly type = CopySourceActionTypes.CREATE_PROVIDER_COPY_SUCCESS; - constructor(public payload: MetadataProvider) { } + constructor(public payload: MetadataResolver) { } } export class CreateProviderCopyError implements Action { @@ -36,7 +36,7 @@ export class CreateProviderCopyError implements Action { export class UpdateProviderCopy implements Action { readonly type = CopySourceActionTypes.UPDATE_PROVIDER_COPY; - constructor(public payload: Partial) { } + constructor(public payload: Partial) { } } export class UpdateProviderCopySections implements Action { diff --git a/ui/src/app/metadata/domain/action/draft-collection.action.ts b/ui/src/app/metadata/resolver/action/draft.action.ts similarity index 59% rename from ui/src/app/metadata/domain/action/draft-collection.action.ts rename to ui/src/app/metadata/resolver/action/draft.action.ts index a5aef8dd3..f4bba2744 100644 --- a/ui/src/app/metadata/domain/action/draft-collection.action.ts +++ b/ui/src/app/metadata/resolver/action/draft.action.ts @@ -1,8 +1,8 @@ import { Action } from '@ngrx/store'; import { Update } from '@ngrx/entity/entity'; -import { MetadataProvider } from '../model/provider'; +import { MetadataResolver } from '../../domain/model'; -export enum DraftCollectionActionTypes { +export enum DraftActionTypes { FIND = '[Metadata Draft] Find', SELECT = '[Metadata Draft] Select', UPDATE_DRAFT_REQUEST = '[Metadata Draft] Update Request', @@ -21,90 +21,90 @@ export enum DraftCollectionActionTypes { export class FindDraft implements Action { - readonly type = DraftCollectionActionTypes.FIND; + readonly type = DraftActionTypes.FIND; constructor(public payload: string) { } } export class SelectDraft implements Action { - readonly type = DraftCollectionActionTypes.SELECT; + readonly type = DraftActionTypes.SELECT; constructor(public payload: string) { } } export class UpdateDraftRequest implements Action { - readonly type = DraftCollectionActionTypes.UPDATE_DRAFT_REQUEST; + readonly type = DraftActionTypes.UPDATE_DRAFT_REQUEST; - constructor(public payload: MetadataProvider) { } + constructor(public payload: MetadataResolver) { } } export class UpdateDraftSuccess implements Action { - readonly type = DraftCollectionActionTypes.UPDATE_DRAFT_SUCCESS; + readonly type = DraftActionTypes.UPDATE_DRAFT_SUCCESS; - constructor(public payload: Update) { } + constructor(public payload: Update) { } } export class UpdateDraftFail implements Action { - readonly type = DraftCollectionActionTypes.UPDATE_DRAFT_FAIL; + readonly type = DraftActionTypes.UPDATE_DRAFT_FAIL; - constructor(public payload: MetadataProvider) { } + constructor(public payload: MetadataResolver) { } } export class AddDraftRequest implements Action { - readonly type = DraftCollectionActionTypes.ADD_DRAFT; + readonly type = DraftActionTypes.ADD_DRAFT; - constructor(public payload: MetadataProvider) { } + constructor(public payload: MetadataResolver) { } } export class AddDraftSuccess implements Action { - readonly type = DraftCollectionActionTypes.ADD_DRAFT_SUCCESS; + readonly type = DraftActionTypes.ADD_DRAFT_SUCCESS; - constructor(public payload: MetadataProvider) { } + constructor(public payload: MetadataResolver) { } } export class AddDraftFail implements Action { - readonly type = DraftCollectionActionTypes.ADD_DRAFT_FAIL; + readonly type = DraftActionTypes.ADD_DRAFT_FAIL; constructor(public payload: any) { } } export class RemoveDraftRequest implements Action { - readonly type = DraftCollectionActionTypes.REMOVE_DRAFT; + readonly type = DraftActionTypes.REMOVE_DRAFT; - constructor(public payload: MetadataProvider) { } + constructor(public payload: MetadataResolver) { } } export class RemoveDraftSuccess implements Action { - readonly type = DraftCollectionActionTypes.REMOVE_DRAFT_SUCCESS; + readonly type = DraftActionTypes.REMOVE_DRAFT_SUCCESS; - constructor(public payload: MetadataProvider) { } + constructor(public payload: MetadataResolver) { } } export class RemoveDraftFail implements Action { - readonly type = DraftCollectionActionTypes.REMOVE_DRAFT_FAIL; + readonly type = DraftActionTypes.REMOVE_DRAFT_FAIL; - constructor(public payload: MetadataProvider) { } + constructor(public payload: MetadataResolver) { } } export class LoadDraftRequest implements Action { - readonly type = DraftCollectionActionTypes.LOAD_DRAFT_REQUEST; + readonly type = DraftActionTypes.LOAD_DRAFT_REQUEST; constructor() { } } export class LoadDraftSuccess implements Action { - readonly type = DraftCollectionActionTypes.LOAD_DRAFT_SUCCESS; + readonly type = DraftActionTypes.LOAD_DRAFT_SUCCESS; - constructor(public payload: MetadataProvider[]) { } + constructor(public payload: MetadataResolver[]) { } } export class LoadDraftError implements Action { - readonly type = DraftCollectionActionTypes.LOAD_DRAFT_ERROR; + readonly type = DraftActionTypes.LOAD_DRAFT_ERROR; constructor(public payload: any) { } } -export type DraftCollectionActionsUnion = +export type DraftActionsUnion = | LoadDraftRequest | LoadDraftSuccess | LoadDraftError diff --git a/ui/src/app/edit-provider/action/editor.action.ts b/ui/src/app/metadata/resolver/action/editor.action.ts similarity index 84% rename from ui/src/app/edit-provider/action/editor.action.ts rename to ui/src/app/metadata/resolver/action/editor.action.ts index 6e8744d61..80da7774e 100644 --- a/ui/src/app/edit-provider/action/editor.action.ts +++ b/ui/src/app/metadata/resolver/action/editor.action.ts @@ -1,5 +1,5 @@ import { Action } from '@ngrx/store'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataResolver } from '../../domain/model'; export const UPDATE_STATUS = '[Editor] Update Status'; export const UPDATE_SAVED = '[Editor] Update Saved'; @@ -17,7 +17,7 @@ export class UpdateStatus implements Action { export class UpdateChanges implements Action { readonly type = UPDATE_CHANGES; - constructor(public payload: MetadataProvider) { } + constructor(public payload: MetadataResolver) { } } export class CancelChanges implements Action { @@ -27,7 +27,7 @@ export class CancelChanges implements Action { export class SaveChanges implements Action { readonly type = SAVE_CHANGES; - constructor(public payload: MetadataProvider) { } + constructor(public payload: MetadataResolver) { } } export class ResetChanges implements Action { diff --git a/ui/src/app/metadata-provider/action/search.action.ts b/ui/src/app/metadata/resolver/action/search.action.ts similarity index 91% rename from ui/src/app/metadata-provider/action/search.action.ts rename to ui/src/app/metadata/resolver/action/search.action.ts index 9265f512e..7bfdd7d5b 100644 --- a/ui/src/app/metadata-provider/action/search.action.ts +++ b/ui/src/app/metadata/resolver/action/search.action.ts @@ -1,5 +1,4 @@ import { Action } from '@ngrx/store'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; export enum SearchActionTypes { SEARCH_IDS = '[Search Resolver Ids] Request', diff --git a/ui/src/app/edit-provider/component/unsaved-dialog.component.html b/ui/src/app/metadata/resolver/component/unsaved-dialog.component.html similarity index 100% rename from ui/src/app/edit-provider/component/unsaved-dialog.component.html rename to ui/src/app/metadata/resolver/component/unsaved-dialog.component.html diff --git a/ui/src/app/edit-provider/component/unsaved-dialog.component.ts b/ui/src/app/metadata/resolver/component/unsaved-dialog.component.ts similarity index 65% rename from ui/src/app/edit-provider/component/unsaved-dialog.component.ts rename to ui/src/app/metadata/resolver/component/unsaved-dialog.component.ts index d412d069e..9373e352f 100644 --- a/ui/src/app/edit-provider/component/unsaved-dialog.component.ts +++ b/ui/src/app/metadata/resolver/component/unsaved-dialog.component.ts @@ -1,14 +1,10 @@ import { Component, Input, OnChanges } from '@angular/core'; -import { NgbModal, NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; import { Store, Action } from '@ngrx/store'; import { Subject } from 'rxjs/Subject'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; import * as fromEditor from '../reducer'; -import { UpdateDraftRequest } from '../../domain/action/draft-collection.action'; -import { EntityDescriptorService } from '../../domain/service/entity-descriptor.service'; -import { SaveChanges, CancelChanges } from '../action/editor.action'; @Component({ selector: 'unsaved-dialog', diff --git a/ui/src/app/edit-provider/component/valid-form-icon.component.html b/ui/src/app/metadata/resolver/component/valid-form-icon.component.html similarity index 100% rename from ui/src/app/edit-provider/component/valid-form-icon.component.html rename to ui/src/app/metadata/resolver/component/valid-form-icon.component.html diff --git a/ui/src/app/edit-provider/component/valid-form-icon.component.ts b/ui/src/app/metadata/resolver/component/valid-form-icon.component.ts similarity index 74% rename from ui/src/app/edit-provider/component/valid-form-icon.component.ts rename to ui/src/app/metadata/resolver/component/valid-form-icon.component.ts index 389e5b0a3..4528f273b 100644 --- a/ui/src/app/edit-provider/component/valid-form-icon.component.ts +++ b/ui/src/app/metadata/resolver/component/valid-form-icon.component.ts @@ -1,4 +1,4 @@ -import { Component, Input, OnChanges, ChangeDetectionStrategy } from '@angular/core'; +import { Component, Input, ChangeDetectionStrategy } from '@angular/core'; @Component({ selector: 'valid-form-icon', diff --git a/ui/src/app/edit-provider/component/wizard-nav.component.html b/ui/src/app/metadata/resolver/component/wizard-nav.component.html similarity index 100% rename from ui/src/app/edit-provider/component/wizard-nav.component.html rename to ui/src/app/metadata/resolver/component/wizard-nav.component.html diff --git a/ui/src/app/edit-provider/component/wizard-nav.component.spec.ts b/ui/src/app/metadata/resolver/component/wizard-nav.component.spec.ts similarity index 100% rename from ui/src/app/edit-provider/component/wizard-nav.component.spec.ts rename to ui/src/app/metadata/resolver/component/wizard-nav.component.spec.ts diff --git a/ui/src/app/edit-provider/component/wizard-nav.component.ts b/ui/src/app/metadata/resolver/component/wizard-nav.component.ts similarity index 100% rename from ui/src/app/edit-provider/component/wizard-nav.component.ts rename to ui/src/app/metadata/resolver/component/wizard-nav.component.ts diff --git a/ui/src/app/metadata-provider/container/blank-provider.component.html b/ui/src/app/metadata/resolver/container/blank-provider.component.html similarity index 100% rename from ui/src/app/metadata-provider/container/blank-provider.component.html rename to ui/src/app/metadata/resolver/container/blank-provider.component.html diff --git a/ui/src/app/metadata-provider/container/blank-provider.component.spec.ts b/ui/src/app/metadata/resolver/container/blank-provider.component.spec.ts similarity index 100% rename from ui/src/app/metadata-provider/container/blank-provider.component.spec.ts rename to ui/src/app/metadata/resolver/container/blank-provider.component.spec.ts diff --git a/ui/src/app/metadata-provider/container/blank-provider.component.ts b/ui/src/app/metadata/resolver/container/blank-provider.component.ts similarity index 58% rename from ui/src/app/metadata-provider/container/blank-provider.component.ts rename to ui/src/app/metadata/resolver/container/blank-provider.component.ts index b104ae129..c29fdc934 100644 --- a/ui/src/app/metadata-provider/container/blank-provider.component.ts +++ b/ui/src/app/metadata/resolver/container/blank-provider.component.ts @@ -4,16 +4,14 @@ import { Output, EventEmitter } from '@angular/core'; -import { FormBuilder, FormGroup, FormControl, FormControlName, Validators, AbstractControl } from '@angular/forms'; -import { Observable, Subject } from 'rxjs'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { Observable } from 'rxjs'; import { Store } from '@ngrx/store'; -import { AddDraftRequest } from '../../domain/action/draft-collection.action'; -import { AddProviderRequest, UploadProviderRequest } from '../../domain/action/provider-collection.action'; -import * as fromCollections from '../../domain/reducer'; +import { AddDraftRequest } from '../action/draft.action'; +import * as fromResolver from '../reducer'; import { EntityValidators } from '../../domain/service/entity-validators.service'; -import { MetadataProvider } from '../../domain/domain.type'; -import { Resolver } from '../../domain/entity/provider'; +import { FileBackedHttpMetadataResolver } from '../../domain/entity/resolver/file-backed-http-metadata-resolver'; @Component({ selector: 'blank-provider-form', @@ -26,10 +24,10 @@ export class BlankProviderComponent implements OnInit { ids$: Observable; constructor( - private store: Store, + private store: Store, private fb: FormBuilder ) { - this.ids$ = this.store.select(fromCollections.getAllEntityIds); + this.ids$ = this.store.select(fromResolver.getAllEntityIds); } ngOnInit(): void { @@ -40,10 +38,10 @@ export class BlankProviderComponent implements OnInit { } next(): void { - const val: MetadataProvider = new Resolver({ + const val = new FileBackedHttpMetadataResolver({ entityId: this.providerForm.get('entityId').value, serviceProviderName: this.providerForm.get('serviceProviderName').value }); this.store.dispatch(new AddDraftRequest(val)); } -} /* istanbul ignore next */ +} diff --git a/ui/src/app/metadata-provider/container/confirm-copy.component.html b/ui/src/app/metadata/resolver/container/confirm-copy.component.html similarity index 100% rename from ui/src/app/metadata-provider/container/confirm-copy.component.html rename to ui/src/app/metadata/resolver/container/confirm-copy.component.html diff --git a/ui/src/app/metadata-provider/container/confirm-copy.component.scss b/ui/src/app/metadata/resolver/container/confirm-copy.component.scss similarity index 100% rename from ui/src/app/metadata-provider/container/confirm-copy.component.scss rename to ui/src/app/metadata/resolver/container/confirm-copy.component.scss diff --git a/ui/src/app/metadata-provider/container/confirm-copy.component.spec.ts b/ui/src/app/metadata/resolver/container/confirm-copy.component.spec.ts similarity index 100% rename from ui/src/app/metadata-provider/container/confirm-copy.component.spec.ts rename to ui/src/app/metadata/resolver/container/confirm-copy.component.spec.ts diff --git a/ui/src/app/metadata-provider/container/confirm-copy.component.ts b/ui/src/app/metadata/resolver/container/confirm-copy.component.ts similarity index 85% rename from ui/src/app/metadata-provider/container/confirm-copy.component.ts rename to ui/src/app/metadata/resolver/container/confirm-copy.component.ts index 05579d3e4..98162ad8b 100644 --- a/ui/src/app/metadata-provider/container/confirm-copy.component.ts +++ b/ui/src/app/metadata/resolver/container/confirm-copy.component.ts @@ -4,7 +4,7 @@ import { Store } from '@ngrx/store'; import { Observable } from 'rxjs'; import * as fromProvider from '../reducer'; -import { MetadataProvider } from '../../domain/domain.type'; +import { MetadataResolver } from '../../domain/domain.type'; import { FormGroup, FormBuilder } from '@angular/forms'; import { ProviderValueEmitter } from '../../domain/service/provider-change-emitter.service'; import { UpdateProviderCopy } from '../action/copy.action'; @@ -18,11 +18,11 @@ import { AddProviderRequest } from '../../domain/action/provider-collection.acti }) export class ConfirmCopyComponent { - copy$: Observable; - values$: Observable; + copy$: Observable; + values$: Observable; saving$: Observable; - provider: MetadataProvider; + provider: MetadataResolver; constructor( private store: Store, @@ -37,7 +37,7 @@ export class ConfirmCopyComponent { this.copy$.subscribe(p => this.provider = p); } - onSave(provider: MetadataProvider): void { + onSave(provider: MetadataResolver): void { this.store.dispatch(new AddProviderRequest(provider)); } } /* istanbul ignore next */ diff --git a/ui/src/app/metadata-provider/container/copy-provider.component.html b/ui/src/app/metadata/resolver/container/copy-provider.component.html similarity index 100% rename from ui/src/app/metadata-provider/container/copy-provider.component.html rename to ui/src/app/metadata/resolver/container/copy-provider.component.html diff --git a/ui/src/app/metadata-provider/container/copy-provider.component.spec.ts b/ui/src/app/metadata/resolver/container/copy-provider.component.spec.ts similarity index 100% rename from ui/src/app/metadata-provider/container/copy-provider.component.spec.ts rename to ui/src/app/metadata/resolver/container/copy-provider.component.spec.ts diff --git a/ui/src/app/metadata-provider/container/copy-provider.component.ts b/ui/src/app/metadata/resolver/container/copy-provider.component.ts similarity index 100% rename from ui/src/app/metadata-provider/container/copy-provider.component.ts rename to ui/src/app/metadata/resolver/container/copy-provider.component.ts diff --git a/ui/src/app/edit-provider/container/draft.component.html b/ui/src/app/metadata/resolver/container/draft.component.html similarity index 100% rename from ui/src/app/edit-provider/container/draft.component.html rename to ui/src/app/metadata/resolver/container/draft.component.html diff --git a/ui/src/app/edit-provider/container/draft.component.ts b/ui/src/app/metadata/resolver/container/draft.component.ts similarity index 95% rename from ui/src/app/edit-provider/container/draft.component.ts rename to ui/src/app/metadata/resolver/container/draft.component.ts index 490cf594c..13377a3ee 100644 --- a/ui/src/app/edit-provider/container/draft.component.ts +++ b/ui/src/app/metadata/resolver/container/draft.component.ts @@ -7,7 +7,7 @@ import { distinctUntilChanged, map } from 'rxjs/operators'; import { Store } from '@ngrx/store'; import { NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataResolver } from '../../domain/model/metadata-provider'; import { SelectDraft } from '../../domain/action/draft-collection.action'; import * as fromCollection from '../../domain/reducer'; diff --git a/ui/src/app/edit-provider/container/editor.component.html b/ui/src/app/metadata/resolver/container/editor.component.html similarity index 100% rename from ui/src/app/edit-provider/container/editor.component.html rename to ui/src/app/metadata/resolver/container/editor.component.html diff --git a/ui/src/app/edit-provider/container/editor.component.ts b/ui/src/app/metadata/resolver/container/editor.component.ts similarity index 95% rename from ui/src/app/edit-provider/container/editor.component.ts rename to ui/src/app/metadata/resolver/container/editor.component.ts index b8a84c50f..22f7d112e 100644 --- a/ui/src/app/edit-provider/container/editor.component.ts +++ b/ui/src/app/metadata/resolver/container/editor.component.ts @@ -20,7 +20,7 @@ import { combineLatest, map, takeUntil, withLatestFrom, debounceTime, skipWhile, import { Store } from '@ngrx/store'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap/modal/modal'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataResolver } from '../../domain/model/metadata-provider'; import * as fromProviders from '../../domain/reducer'; import { UpdateProviderRequest } from '../../domain/action/provider-collection.action'; import * as fromEditor from '../reducer'; @@ -43,15 +43,15 @@ export class EditorComponent implements OnInit, OnDestroy { modified = false; open = false; - changes$: Observable; - changes: MetadataProvider; - updates: MetadataProvider; - latest: MetadataProvider; - latest$: Observable; + changes$: Observable; + changes: MetadataResolver; + updates: MetadataResolver; + latest: MetadataResolver; + latest$: Observable; - provider$: Observable; + provider$: Observable; providerName$: Observable; - provider: MetadataProvider; + provider: MetadataResolver; editorIndex$: Observable; editor$: Observable; editor: EditorFlowDefinition[]; diff --git a/ui/src/app/metadata-provider/container/new-provider.component.html b/ui/src/app/metadata/resolver/container/new-provider.component.html similarity index 100% rename from ui/src/app/metadata-provider/container/new-provider.component.html rename to ui/src/app/metadata/resolver/container/new-provider.component.html diff --git a/ui/src/app/metadata-provider/container/new-provider.component.scss b/ui/src/app/metadata/resolver/container/new-provider.component.scss similarity index 100% rename from ui/src/app/metadata-provider/container/new-provider.component.scss rename to ui/src/app/metadata/resolver/container/new-provider.component.scss diff --git a/ui/src/app/metadata-provider/container/new-provider.component.spec.ts b/ui/src/app/metadata/resolver/container/new-provider.component.spec.ts similarity index 100% rename from ui/src/app/metadata-provider/container/new-provider.component.spec.ts rename to ui/src/app/metadata/resolver/container/new-provider.component.spec.ts diff --git a/ui/src/app/metadata-provider/container/new-provider.component.ts b/ui/src/app/metadata/resolver/container/new-provider.component.ts similarity index 100% rename from ui/src/app/metadata-provider/container/new-provider.component.ts rename to ui/src/app/metadata/resolver/container/new-provider.component.ts diff --git a/ui/src/app/edit-provider/container/provider.component.html b/ui/src/app/metadata/resolver/container/provider.component.html similarity index 100% rename from ui/src/app/edit-provider/container/provider.component.html rename to ui/src/app/metadata/resolver/container/provider.component.html diff --git a/ui/src/app/edit-provider/container/provider.component.scss b/ui/src/app/metadata/resolver/container/provider.component.scss similarity index 100% rename from ui/src/app/edit-provider/container/provider.component.scss rename to ui/src/app/metadata/resolver/container/provider.component.scss diff --git a/ui/src/app/edit-provider/container/provider.component.spec.ts b/ui/src/app/metadata/resolver/container/provider.component.spec.ts similarity index 100% rename from ui/src/app/edit-provider/container/provider.component.spec.ts rename to ui/src/app/metadata/resolver/container/provider.component.spec.ts diff --git a/ui/src/app/edit-provider/container/provider.component.ts b/ui/src/app/metadata/resolver/container/provider.component.ts similarity index 95% rename from ui/src/app/edit-provider/container/provider.component.ts rename to ui/src/app/metadata/resolver/container/provider.component.ts index 0ca698a6b..4178df52e 100644 --- a/ui/src/app/edit-provider/container/provider.component.ts +++ b/ui/src/app/metadata/resolver/container/provider.component.ts @@ -7,7 +7,7 @@ import { distinctUntilChanged, map } from 'rxjs/operators'; import { Store } from '@ngrx/store'; import { NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataResolver } from '../../domain/model/metadata-provider'; import { SelectProvider } from '../../domain/action/provider-collection.action'; import * as fromProviders from '../../domain/reducer'; diff --git a/ui/src/app/metadata-provider/container/upload-provider.component.html b/ui/src/app/metadata/resolver/container/upload-provider.component.html similarity index 100% rename from ui/src/app/metadata-provider/container/upload-provider.component.html rename to ui/src/app/metadata/resolver/container/upload-provider.component.html diff --git a/ui/src/app/metadata-provider/container/upload-provider.component.spec.ts b/ui/src/app/metadata/resolver/container/upload-provider.component.spec.ts similarity index 100% rename from ui/src/app/metadata-provider/container/upload-provider.component.spec.ts rename to ui/src/app/metadata/resolver/container/upload-provider.component.spec.ts diff --git a/ui/src/app/metadata-provider/container/upload-provider.component.ts b/ui/src/app/metadata/resolver/container/upload-provider.component.ts similarity index 100% rename from ui/src/app/metadata-provider/container/upload-provider.component.ts rename to ui/src/app/metadata/resolver/container/upload-provider.component.ts diff --git a/ui/src/app/edit-provider/container/wizard.component.html b/ui/src/app/metadata/resolver/container/wizard.component.html similarity index 100% rename from ui/src/app/edit-provider/container/wizard.component.html rename to ui/src/app/metadata/resolver/container/wizard.component.html diff --git a/ui/src/app/edit-provider/container/wizard.component.scss b/ui/src/app/metadata/resolver/container/wizard.component.scss similarity index 100% rename from ui/src/app/edit-provider/container/wizard.component.scss rename to ui/src/app/metadata/resolver/container/wizard.component.scss diff --git a/ui/src/app/edit-provider/container/wizard.component.ts b/ui/src/app/metadata/resolver/container/wizard.component.ts similarity index 95% rename from ui/src/app/edit-provider/container/wizard.component.ts rename to ui/src/app/metadata/resolver/container/wizard.component.ts index d7020cd73..4aeb7022e 100644 --- a/ui/src/app/edit-provider/container/wizard.component.ts +++ b/ui/src/app/metadata/resolver/container/wizard.component.ts @@ -19,7 +19,7 @@ import { Store } from '@ngrx/store'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataResolver } from '../../domain/model/metadata-provider'; import * as fromCollections from '../../domain/reducer'; import * as draftActions from '../../domain/action/draft-collection.action'; import { AddProviderRequest, RemoveProviderRequest } from '../../domain/action/provider-collection.action'; @@ -42,12 +42,12 @@ export class WizardComponent implements OnInit, OnDestroy, CanComponentDeactivat private ngUnsubscribe: Subject = new Subject(); - provider$: Observable; - provider: MetadataProvider; + provider$: Observable; + provider: MetadataResolver; providerName$: Observable; - changes$: Observable; - changes: MetadataProvider; - latest: MetadataProvider; + changes$: Observable; + changes: MetadataResolver; + latest: MetadataResolver; wizardIndex$: Observable; currentPage$: Observable; diff --git a/ui/src/app/edit-provider/editor-definition.const.ts b/ui/src/app/metadata/resolver/editor-definition.const.ts similarity index 100% rename from ui/src/app/edit-provider/editor-definition.const.ts rename to ui/src/app/metadata/resolver/editor-definition.const.ts diff --git a/ui/src/app/metadata-provider/effect/copy.effect.ts b/ui/src/app/metadata/resolver/effect/copy.effect.ts similarity index 100% rename from ui/src/app/metadata-provider/effect/copy.effect.ts rename to ui/src/app/metadata/resolver/effect/copy.effect.ts diff --git a/ui/src/app/metadata/domain/effect/draft-collection.effect.spec.ts b/ui/src/app/metadata/resolver/effect/draft-collection.effect.spec.ts similarity index 87% rename from ui/src/app/metadata/domain/effect/draft-collection.effect.spec.ts rename to ui/src/app/metadata/resolver/effect/draft-collection.effect.spec.ts index 1dc4c8851..06e1c6c3e 100644 --- a/ui/src/app/metadata/domain/effect/draft-collection.effect.spec.ts +++ b/ui/src/app/metadata/resolver/effect/draft-collection.effect.spec.ts @@ -4,7 +4,7 @@ import { Actions } from '@ngrx/effects'; import { TestActions, getActions } from '../../../../testing/effect.util'; import { DraftCollectionEffects, getPayload } from './draft-collection.effects'; import { EntityDraftService } from '../service/entity-draft.service'; -import { MetadataProvider } from '../model'; +import { MetadataResolver } from '../model'; import { Router } from '@angular/router'; import { RouterStub } from '../../../../testing/router.stub'; import { AddDraftRequest } from '../action/draft-collection.action'; @@ -24,9 +24,9 @@ describe('Draft Collection Effects', () => { useValue: { query: () => { }, find: (id: string) => { }, - save: (provider: MetadataProvider) => { }, - remove: (provider: MetadataProvider) => { }, - update: (provider: MetadataProvider) => { } + save: (provider: MetadataResolver) => { }, + remove: (provider: MetadataResolver) => { }, + update: (provider: MetadataResolver) => { } }, }, { provide: Actions, useFactory: getActions }, diff --git a/ui/src/app/metadata/domain/effect/draft-collection.effects.ts b/ui/src/app/metadata/resolver/effect/draft-collection.effects.ts similarity index 98% rename from ui/src/app/metadata/domain/effect/draft-collection.effects.ts rename to ui/src/app/metadata/resolver/effect/draft-collection.effects.ts index 5c0eef714..772ea37d1 100644 --- a/ui/src/app/metadata/domain/effect/draft-collection.effects.ts +++ b/ui/src/app/metadata/resolver/effect/draft-collection.effects.ts @@ -10,7 +10,7 @@ import { switchMap, map, catchError, tap } from 'rxjs/operators'; import { DraftCollectionActionTypes, DraftCollectionActionsUnion } from '../action/draft-collection.action'; import * as actions from '../action/draft-collection.action'; -import { MetadataProvider } from '../../domain/model/provider'; +import { MetadataResolver } from '../../domain/model/provider'; import { EntityDraftService } from '../../domain/service/entity-draft.service'; export const getPayload = (action: any) => action.payload; diff --git a/ui/src/app/edit-provider/effect/editor.effect.ts b/ui/src/app/metadata/resolver/effect/editor.effect.ts similarity index 97% rename from ui/src/app/edit-provider/effect/editor.effect.ts rename to ui/src/app/metadata/resolver/effect/editor.effect.ts index 1e14ca360..4d9fee1e8 100644 --- a/ui/src/app/edit-provider/effect/editor.effect.ts +++ b/ui/src/app/metadata/resolver/effect/editor.effect.ts @@ -13,7 +13,7 @@ import { ShowContentionAction } from '../../contention/action/contention.action' import { Contention, ContentionEntity } from '../../contention/model/contention'; import { ProviderCollectionActionTypes } from '../../domain/action/provider-collection.action'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataResolver } from '../../domain/model/metadata-provider'; import { EntityDescriptorService } from '../../domain/service/entity-descriptor.service'; import { Router } from '@angular/router'; import { Store } from '@ngrx/store'; diff --git a/ui/src/app/metadata/domain/effect/provider-collection.effect.spec.ts b/ui/src/app/metadata/resolver/effect/provider-collection.effect.spec.ts similarity index 100% rename from ui/src/app/metadata/domain/effect/provider-collection.effect.spec.ts rename to ui/src/app/metadata/resolver/effect/provider-collection.effect.spec.ts diff --git a/ui/src/app/metadata/domain/effect/provider-collection.effects.ts b/ui/src/app/metadata/resolver/effect/provider-collection.effects.ts similarity index 100% rename from ui/src/app/metadata/domain/effect/provider-collection.effects.ts rename to ui/src/app/metadata/resolver/effect/provider-collection.effects.ts diff --git a/ui/src/app/metadata-provider/effect/search.effect.ts b/ui/src/app/metadata/resolver/effect/search.effect.ts similarity index 100% rename from ui/src/app/metadata-provider/effect/search.effect.ts rename to ui/src/app/metadata/resolver/effect/search.effect.ts diff --git a/ui/src/app/edit-provider/effect/wizard.effect.ts b/ui/src/app/metadata/resolver/effect/wizard.effect.ts similarity index 95% rename from ui/src/app/edit-provider/effect/wizard.effect.ts rename to ui/src/app/metadata/resolver/effect/wizard.effect.ts index b60b95069..d7c6d23d3 100644 --- a/ui/src/app/edit-provider/effect/wizard.effect.ts +++ b/ui/src/app/metadata/resolver/effect/wizard.effect.ts @@ -7,7 +7,7 @@ import * as editorActions from '../action/editor.action'; import * as draft from '../../domain/action/draft-collection.action'; import * as provider from '../../domain/action/provider-collection.action'; import { ProviderCollectionActionTypes } from '../../domain/action/provider-collection.action'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataResolver } from '../../domain/model/metadata-provider'; import { EntityDraftService } from '../../domain/service/entity-draft.service'; @Injectable() diff --git a/ui/src/app/metadata-provider/guard/copy-isset.guard.ts b/ui/src/app/metadata/resolver/guard/copy-isset.guard.ts similarity index 100% rename from ui/src/app/metadata-provider/guard/copy-isset.guard.ts rename to ui/src/app/metadata/resolver/guard/copy-isset.guard.ts diff --git a/ui/src/app/metadata-provider/metadata-provider.module.ts b/ui/src/app/metadata/resolver/metadata-provider.module.ts similarity index 100% rename from ui/src/app/metadata-provider/metadata-provider.module.ts rename to ui/src/app/metadata/resolver/metadata-provider.module.ts diff --git a/ui/src/app/metadata/domain/reducer/provider-collection.reducer.spec.ts b/ui/src/app/metadata/resolver/reducer/collection.reducer.spec.ts similarity index 63% rename from ui/src/app/metadata/domain/reducer/provider-collection.reducer.spec.ts rename to ui/src/app/metadata/resolver/reducer/collection.reducer.spec.ts index ba6ae362b..93e377342 100644 --- a/ui/src/app/metadata/domain/reducer/provider-collection.reducer.spec.ts +++ b/ui/src/app/metadata/resolver/reducer/collection.reducer.spec.ts @@ -1,23 +1,23 @@ -import { reducer } from './provider-collection.reducer'; -import * as fromProvider from './provider-collection.reducer'; -import * as providerActions from '../action/provider-collection.action'; -import { MetadataResolver } from '../model'; +import { reducer } from './collection.reducer'; +import * as fromCollection from './collection.reducer'; +import * as resolverActions from '../action/collection.action'; +import { MetadataResolver } from '../../domain/model'; -let providers: MetadataResolver[] = [ +let resolvers: MetadataResolver[] = [ { id: '1', entityId: 'foo', serviceProviderName: 'bar', createdDate: 'Tue Apr 17 2018 13:33:54 GMT-0700 (MST)' } as MetadataResolver, { id: '2', entityId: 'baz', serviceProviderName: 'fin', createdDate: 'Tue Apr 17 2018 13:34:07 GMT-0700 (MST)' } as MetadataResolver ], - snapshot: fromProvider.ProviderCollectionState = { - ids: [providers[0].id, providers[1].id], + snapshot: fromCollection.CollectionState = { + ids: [resolvers[0].id, resolvers[1].id], entities: { - [providers[0].id]: providers[0], - [providers[1].id]: providers[1] + [resolvers[0].id]: resolvers[0], + [resolvers[1].id]: resolvers[1] }, selectedProviderId: null }; describe('Resolver Reducer', () => { - const initialState: fromProvider.ProviderCollectionState = { + const initialState: fromCollection.CollectionState = { ids: [], entities: {}, selectedProviderId: null, @@ -32,8 +32,8 @@ describe('Resolver Reducer', () => { }); describe('Load Providers: Success', () => { - it('should add the loaded providers to the collection', () => { - const action = new providerActions.LoadProviderSuccess(providers); + it('should add the loaded resolvers to the collection', () => { + const action = new resolverActions.LoadProviderSuccess(resolvers); const result = reducer(initialState, action); expect(result).toEqual( @@ -44,16 +44,16 @@ describe('Resolver Reducer', () => { describe('Update Providers: Success', () => { it('should update the draft of the specified id', () => { - let changes = { ...providers[1], serviceEnabled: true }, + let changes = { ...resolvers[1], serviceEnabled: true }, expected = { - ids: [providers[0].id, providers[1].id], + ids: [resolvers[0].id, resolvers[1].id], entities: { - [providers[0].id]: providers[0], - [providers[1].id]: changes + [resolvers[0].id]: resolvers[0], + [resolvers[1].id]: changes }, selectedProviderId: null }; - const action = new providerActions.UpdateProviderSuccess({id: changes.id, changes}); + const action = new resolverActions.UpdateProviderSuccess({id: changes.id, changes}); const result = reducer({ ...snapshot }, action); expect(result).toEqual( @@ -62,8 +62,8 @@ describe('Resolver Reducer', () => { }); it('should return state if the entityId is not found', () => { - let changes = { ...providers[1], serviceEnabled: true, id: '4' }; - const action = new providerActions.UpdateProviderSuccess({id: changes.id, changes}); + let changes = { ...resolvers[1], serviceEnabled: true, id: '4' }; + const action = new resolverActions.UpdateProviderSuccess({id: changes.id, changes}); const result = reducer({ ...snapshot }, action); expect(result).toEqual(snapshot); @@ -74,7 +74,7 @@ describe('Resolver Reducer', () => { it('should update the selected draft id', () => { let id = 'foo', expected = { ...snapshot, selectedProviderId: id }; - const action = new providerActions.SelectProvider(id); + const action = new resolverActions.SelectProvider(id); const result = reducer({ ...snapshot }, action); expect(result).toEqual( diff --git a/ui/src/app/metadata/domain/reducer/provider-collection.reducer.ts b/ui/src/app/metadata/resolver/reducer/collection.reducer.ts similarity index 57% rename from ui/src/app/metadata/domain/reducer/provider-collection.reducer.ts rename to ui/src/app/metadata/resolver/reducer/collection.reducer.ts index 13497e6f7..2505b4210 100644 --- a/ui/src/app/metadata/domain/reducer/provider-collection.reducer.ts +++ b/ui/src/app/metadata/resolver/reducer/collection.reducer.ts @@ -1,28 +1,25 @@ -import { createSelector } from '@ngrx/store'; import { EntityState, EntityAdapter, createEntityAdapter } from '@ngrx/entity'; +import { MetadataResolver } from '../../domain/model'; +import { ProviderCollectionActionsUnion, ProviderCollectionActionTypes } from '../action/collection.action'; -import { MetadataProvider } from '../../domain/model/provider'; -import * as provider from '../action/provider-collection.action'; -import { ProviderCollectionActionsUnion, ProviderCollectionActionTypes } from '../action/provider-collection.action'; - -export interface ProviderCollectionState extends EntityState { +export interface CollectionState extends EntityState { selectedProviderId: string | null; } -export function sortByDate(a: MetadataProvider, b: MetadataProvider): number { +export function sortByDate(a: MetadataResolver, b: MetadataResolver): number { return a.createdDate.localeCompare(b.createdDate); } -export const adapter: EntityAdapter = createEntityAdapter({ +export const adapter: EntityAdapter = createEntityAdapter({ sortComparer: sortByDate, - selectId: (model: MetadataProvider) => model.id + selectId: (model: MetadataResolver) => model.id }); -export const initialState: ProviderCollectionState = adapter.getInitialState({ +export const initialState: CollectionState = adapter.getInitialState({ selectedProviderId: null }); -export function reducer(state = initialState, action: provider.ProviderCollectionActionsUnion): ProviderCollectionState { +export function reducer(state = initialState, action: ProviderCollectionActionsUnion): CollectionState { switch (action.type) { case ProviderCollectionActionTypes.LOAD_PROVIDER_SUCCESS: { return adapter.addAll(action.payload, { @@ -48,7 +45,7 @@ export function reducer(state = initialState, action: provider.ProviderCollectio } } -export const getSelectedProviderId = (state: ProviderCollectionState) => state.selectedProviderId; +export const getSelectedProviderId = (state: CollectionState) => state.selectedProviderId; export const { selectIds: selectProviderIds, selectEntities: selectProviderEntities, diff --git a/ui/src/app/metadata-provider/reducer/copy.reducer.spec.ts b/ui/src/app/metadata/resolver/reducer/copy.reducer.spec.ts similarity index 100% rename from ui/src/app/metadata-provider/reducer/copy.reducer.spec.ts rename to ui/src/app/metadata/resolver/reducer/copy.reducer.spec.ts diff --git a/ui/src/app/metadata-provider/reducer/copy.reducer.ts b/ui/src/app/metadata/resolver/reducer/copy.reducer.ts similarity index 88% rename from ui/src/app/metadata-provider/reducer/copy.reducer.ts rename to ui/src/app/metadata/resolver/reducer/copy.reducer.ts index 416086eba..b9a35caa8 100644 --- a/ui/src/app/metadata-provider/reducer/copy.reducer.ts +++ b/ui/src/app/metadata/resolver/reducer/copy.reducer.ts @@ -1,14 +1,12 @@ -import { createSelector, createFeatureSelector } from '@ngrx/store'; import { CopySourceActionTypes, CopySourceActionUnion } from '../action/copy.action'; -import { MetadataFilter, MetadataProvider } from '../../domain/domain.type'; -import { CopyProviderComponent } from '../container/copy-provider.component'; -import { ProviderCollectionActionsUnion, ProviderCollectionActionTypes } from '../../domain/action/provider-collection.action'; +import { MetadataResolver } from '../../domain/model'; +import { ProviderCollectionActionsUnion, ProviderCollectionActionTypes } from '../action/collection.action'; export interface CopyState { target: string; serviceProviderName: string; entityId: string; - provider: MetadataProvider; + provider: MetadataResolver; saving: boolean; sections: string[]; } diff --git a/ui/src/app/metadata/domain/reducer/draft-collection.reducer.spec.ts b/ui/src/app/metadata/resolver/reducer/draft.reducer.spec.ts similarity index 92% rename from ui/src/app/metadata/domain/reducer/draft-collection.reducer.spec.ts rename to ui/src/app/metadata/resolver/reducer/draft.reducer.spec.ts index 0ec6b9ff0..936581814 100644 --- a/ui/src/app/metadata/domain/reducer/draft-collection.reducer.spec.ts +++ b/ui/src/app/metadata/resolver/reducer/draft.reducer.spec.ts @@ -1,13 +1,13 @@ -import { reducer, adapter } from './draft-collection.reducer'; -import * as fromDrafts from './draft-collection.reducer'; -import * as draftActions from '../action/draft-collection.action'; +import { reducer, adapter } from './draft.reducer'; +import * as fromDrafts from './draft.reducer'; +import * as draftActions from '../action/draft.action'; import { MetadataResolver } from '../../domain/model'; let drafts: MetadataResolver[] = [ { entityId: 'foo', serviceProviderName: 'bar' } as MetadataResolver, { entityId: 'baz', serviceProviderName: 'fin' } as MetadataResolver ], - snapshot: fromDrafts.DraftCollectionState = { + snapshot: fromDrafts.DraftState = { ids: [drafts[0].entityId, drafts[1].entityId], entities: { [drafts[0].entityId]: drafts[0], @@ -17,7 +17,7 @@ let drafts: MetadataResolver[] = [ }; describe('Draft Reducer', () => { - const initialState: fromDrafts.DraftCollectionState = { + const initialState: fromDrafts.DraftState = { ids: [], entities: {}, selectedDraftId: null diff --git a/ui/src/app/metadata/resolver/reducer/draft.reducer.ts b/ui/src/app/metadata/resolver/reducer/draft.reducer.ts new file mode 100644 index 000000000..987883aaf --- /dev/null +++ b/ui/src/app/metadata/resolver/reducer/draft.reducer.ts @@ -0,0 +1,59 @@ +import { EntityState, EntityAdapter, createEntityAdapter } from '@ngrx/entity'; + +import { MetadataResolver } from '../../domain/model'; +import { DraftActionsUnion, DraftActionTypes } from '../action/draft.action'; + +export interface DraftState extends EntityState { + selectedDraftId: string | null; +} + +export function sortByName(a: MetadataResolver, b: MetadataResolver): number { + return a.serviceProviderName.localeCompare(b.serviceProviderName); +} + +export const adapter: EntityAdapter = createEntityAdapter({ + sortComparer: sortByName, + selectId: (model: MetadataResolver) => model.entityId +}); + +export const initialState: DraftState = adapter.getInitialState({ + selectedDraftId: null, +}); + +export function reducer(state = initialState, action: DraftActionsUnion): DraftState { + switch (action.type) { + case DraftActionTypes.LOAD_DRAFT_SUCCESS: { + return adapter.addMany(action.payload, { + ...state, + selectedDraftId: state.selectedDraftId, + }); + } + + case DraftActionTypes.UPDATE_DRAFT_SUCCESS: { + return adapter.updateOne(action.payload, state); + } + + case DraftActionTypes.REMOVE_DRAFT_SUCCESS: { + return adapter.removeOne(action.payload.entityId, state); + } + + case DraftActionTypes.SELECT: { + return { + ...state, + selectedDraftId: action.payload, + }; + } + + default: { + return state; + } + } +} + +export const getSelectedDraftId = (state: DraftState) => state.selectedDraftId; +export const { + selectIds: selectDraftIds, + selectEntities: selectDraftEntities, + selectAll: selectAllDrafts, + selectTotal: selectDraftTotal +} = adapter.getSelectors(); diff --git a/ui/src/app/edit-provider/reducer/editor.reducer.spec.ts b/ui/src/app/metadata/resolver/reducer/editor.reducer.spec.ts similarity index 90% rename from ui/src/app/edit-provider/reducer/editor.reducer.spec.ts rename to ui/src/app/metadata/resolver/reducer/editor.reducer.spec.ts index d3013c83a..9e8e3e6d3 100644 --- a/ui/src/app/edit-provider/reducer/editor.reducer.spec.ts +++ b/ui/src/app/metadata/resolver/reducer/editor.reducer.spec.ts @@ -1,20 +1,20 @@ import { reducer } from './editor.reducer'; import * as fromEditor from './editor.reducer'; import * as actions from '../action/editor.action'; -import * as collectionActions from '../../domain/action/provider-collection.action'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import * as collectionActions from '../action/collection.action'; +import { MetadataResolver } from '../../domain/model'; describe('Editor Reducer', () => { const initialState: fromEditor.EditorState = { saving: false, formStatus: {}, - changes: {} as MetadataProvider + changes: {} as MetadataResolver }; const changes = { entityId: 'foo', serviceProviderName: 'bar' - } as MetadataProvider; + } as MetadataResolver; describe('undefined action', () => { it('should return the default state', () => { @@ -121,7 +121,7 @@ describe('Editor Reducer', () => { it('should aggregate the status', () => { expect(fromEditor.isEditorValid({ saving: false, - changes: {} as MetadataProvider, + changes: {} as MetadataResolver, formStatus: { organization: 'INVALID', foo: 'VALID' @@ -132,13 +132,13 @@ describe('Editor Reducer', () => { it('should calculate a saved status based on changes', () => { expect(fromEditor.isEditorSaved({ saving: false, - changes: {} as MetadataProvider, + changes: {} as MetadataResolver, formStatus: {} })).toBe(true); expect(fromEditor.isEditorSaved({ saving: false, - changes: {organization: {}, entityId: 'bar'} as MetadataProvider, + changes: {organization: {}, entityId: 'bar'} as MetadataResolver, formStatus: {} })).toBe(false); }); @@ -146,21 +146,21 @@ describe('Editor Reducer', () => { it('should return current changes', () => { expect(fromEditor.getChanges({ saving: false, - changes: {} as MetadataProvider, + changes: {} as MetadataResolver, formStatus: {} - })).toEqual({} as MetadataProvider); + })).toEqual({} as MetadataResolver); }); it('should return `saving` status', () => { expect(fromEditor.isEditorSaving({ saving: false, - changes: {} as MetadataProvider, + changes: {} as MetadataResolver, formStatus: {} })).toBe(false); expect(fromEditor.isEditorSaving({ saving: true, - changes: {} as MetadataProvider, + changes: {} as MetadataResolver, formStatus: {} })).toBe(true); }); diff --git a/ui/src/app/edit-provider/reducer/editor.reducer.ts b/ui/src/app/metadata/resolver/reducer/editor.reducer.ts similarity index 84% rename from ui/src/app/edit-provider/reducer/editor.reducer.ts rename to ui/src/app/metadata/resolver/reducer/editor.reducer.ts index 1513c1403..dfc90db18 100644 --- a/ui/src/app/edit-provider/reducer/editor.reducer.ts +++ b/ui/src/app/metadata/resolver/reducer/editor.reducer.ts @@ -1,20 +1,17 @@ -import { createSelector, createFeatureSelector } from '@ngrx/store'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataResolver } from '../../domain/model'; import * as editor from '../action/editor.action'; -import * as provider from '../../domain/action/provider-collection.action'; -import { ProviderCollectionActionTypes, ProviderCollectionActionsUnion } from '../../domain/action/provider-collection.action'; -import * as fromRoot from '../../core/reducer'; +import { ProviderCollectionActionTypes, ProviderCollectionActionsUnion } from '../action/collection.action'; export interface EditorState { saving: boolean; formStatus: { [key: string]: string }; - changes: MetadataProvider; + changes: MetadataResolver; } export const initialState: EditorState = { saving: false, formStatus: {}, - changes: {} as MetadataProvider + changes: {} as MetadataResolver }; export function reducer(state = initialState, action: editor.Actions | ProviderCollectionActionsUnion): EditorState { diff --git a/ui/src/app/metadata/resolver/reducer/index.ts b/ui/src/app/metadata/resolver/reducer/index.ts new file mode 100644 index 000000000..c02e8386a --- /dev/null +++ b/ui/src/app/metadata/resolver/reducer/index.ts @@ -0,0 +1,103 @@ +import { createSelector, createFeatureSelector } from '@ngrx/store'; +import * as fromRoot from '../../../app.reducer'; +import * as fromEditor from './editor.reducer'; +import * as fromSearch from './search.reducer'; +import * as fromCopy from './copy.reducer'; +import * as fromDraft from './draft.reducer'; +import * as fromCollection from './collection.reducer'; + +import { combineAllFn, getEntityIdsFn, getInCollectionFn, doesExistFn } from '../../metadata.reducer'; + +export interface ResolverState { + editor: fromEditor.EditorState; + copy: fromCopy.CopyState; + search: fromSearch.SearchState; + draft: fromDraft.DraftState; + collection: fromCollection.CollectionState; +} + +export const reducers = { + copy: fromCopy.reducer, + search: fromSearch.reducer, + editor: fromEditor.reducer +}; + +export interface State extends fromRoot.State { + 'resolver': ResolverState; +} + +export const getResolverState = createFeatureSelector('resolver'); + +export const getCollectionStateFn = (state: ResolverState) => state.collection; +export const getDraftStateFn = (state: ResolverState) => state.draft; +export const getEditorStateFn = (state: ResolverState) => state.editor; +export const getCopyStateFn = (state: ResolverState) => state.copy; +export const getSearchStateFn = (state: ResolverState) => state.search; + +export const getCollectionState = createSelector(getResolverState, getCollectionStateFn); +export const getDraftState = createSelector(getResolverState, getDraftStateFn); +export const getEditorState = createSelector(getResolverState, getEditorStateFn); +export const getCopyState = createSelector(getResolverState, getCopyStateFn); +export const getSearchState = createSelector(getResolverState, getSearchStateFn); + +/* +Editor State +*/ + +export const getEditorIsValid = createSelector(getEditorState, fromEditor.isEditorValid); +export const getEditorIsSaved = createSelector(getEditorState, fromEditor.isEditorSaved); +export const getEditorChanges = createSelector(getEditorState, fromEditor.getChanges); +export const getEditorIsSaving = createSelector(getEditorState, fromEditor.isEditorSaving); +export const getFormStatus = createSelector(getEditorState, fromEditor.getFormStatus); +export const getInvalidEditorForms = createSelector(getEditorState, fromEditor.getInvalidForms); + +/* +Copy State +*/ + +export const getCopy = createSelector(getCopyState, fromCopy.getCopy); +export const getSaving = createSelector(getCopyState, fromCopy.getSaving); +export const getAttributes = createSelector(getCopyState, fromCopy.getCopyAttributes); +export const getSectionsToCopy = createSelector(getCopyState, fromCopy.getCopySections); + +/* +Search State +*/ + +export const getSearchResults = createSelector(getSearchState, fromSearch.getMatches); +export const getSearchQuery = createSelector(getSearchState, fromSearch.getQuery); +export const getSearchLoading = createSelector(getSearchState, fromSearch.getSearching); + +/* +Collection State +*/ + +export const getProviderEntities = createSelector(getCollectionState, fromCollection.selectProviderEntities); +export const getSelectedProviderId = createSelector(getCollectionState, fromCollection.getSelectedProviderId); +export const getProviderIds = createSelector(getCollectionState, fromCollection.selectProviderIds); + +export const getProviderCollection = createSelector(getCollectionState, getProviderIds, fromCollection.selectAllProviders); +export const getSelectedProvider = createSelector(getProviderEntities, getSelectedProviderId, getInCollectionFn); + + +/* +Draft State +*/ + +export const getDraftEntities = createSelector(getDraftState, fromDraft.selectDraftEntities); +export const getDraftIds = createSelector(getDraftState, fromDraft.selectDraftIds); +export const getDraftCollection = createSelector(getDraftState, getDraftIds, fromDraft.selectAllDrafts); +export const getSelectedDraftId = createSelector(getDraftState, fromDraft.getSelectedDraftId); + +export const getSelectedDraft = createSelector(getDraftEntities, getSelectedDraftId, getInCollectionFn); +export const isSelectedProviderInCollection = createSelector(getProviderIds, getSelectedProviderId, doesExistFn); +export const isSelectedDraftInCollection = createSelector(getDraftIds, getSelectedDraftId, doesExistFn); + +/* +Combine Drafts and Providers +*/ + +export const getAllProviders = createSelector(getDraftCollection, getProviderCollection, combineAllFn); +export const getAllProviderIds = createSelector(getDraftIds, getProviderIds, combineAllFn); + +export const getAllEntityIds = createSelector(getAllProviders, getEntityIdsFn); diff --git a/ui/src/app/metadata-provider/reducer/search.reducer.spec.ts b/ui/src/app/metadata/resolver/reducer/search.reducer.spec.ts similarity index 100% rename from ui/src/app/metadata-provider/reducer/search.reducer.spec.ts rename to ui/src/app/metadata/resolver/reducer/search.reducer.spec.ts diff --git a/ui/src/app/metadata-provider/reducer/search.reducer.ts b/ui/src/app/metadata/resolver/reducer/search.reducer.ts similarity index 95% rename from ui/src/app/metadata-provider/reducer/search.reducer.ts rename to ui/src/app/metadata/resolver/reducer/search.reducer.ts index 734057433..60f1b8e72 100644 --- a/ui/src/app/metadata-provider/reducer/search.reducer.ts +++ b/ui/src/app/metadata/resolver/reducer/search.reducer.ts @@ -1,5 +1,5 @@ import { SearchActionTypes, SearchActionUnion, SearchIds, SearchIdsSuccess, SearchIdsError } from '../action/search.action'; -import { MetadataProvider } from '../../domain/domain.type'; +import { MetadataResolver } from '../../domain/domain.type'; export interface SearchState { query: string; diff --git a/ui/src/app/metadata/resolver/resolver.module.ts b/ui/src/app/metadata/resolver/resolver.module.ts index e69de29bb..9df42ed70 100644 --- a/ui/src/app/metadata/resolver/resolver.module.ts +++ b/ui/src/app/metadata/resolver/resolver.module.ts @@ -0,0 +1,84 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { CommonModule } from '@angular/common'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; +import { StoreModule } from '@ngrx/store'; +import { EffectsModule } from '@ngrx/effects'; + +import { ProviderComponent } from './container/provider.component'; +import { DraftComponent } from './container/draft.component'; +import { WizardComponent } from './container/wizard.component'; +import { EditorComponent } from './container/editor.component'; +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; + +import { RootProviderModule } from '../metadata-provider/metadata-provider.module'; +import { ProviderEditorFormModule } from '../metadata-provider/component'; +import { reducers } from './reducer'; + +import { UnsavedDialogComponent } from './component/unsaved-dialog.component'; +import { CanDeactivateGuard } from '../core/service/can-deactivate.guard'; +import { WizardNavComponent } from './component/wizard-nav.component'; +import { WizardEffects } from './effect/wizard.effect'; +import { EditorEffects } from './effect/editor.effect'; +import { ValidFormIconComponent } from './component/valid-form-icon.component'; +import { SharedModule } from '../shared/shared.module'; +import { DomainModule } from '../domain/domain.module'; + +export const routes: Routes = [ + { + path: ':id', + component: ProviderComponent, + canActivate: [], + children: [ + { path: 'edit', redirectTo: 'edit/2' }, + { + path: 'edit/:index', + component: EditorComponent, + canDeactivate: [CanDeactivateGuard] + } + ] + }, + { + path: ':entityId', + component: DraftComponent, + canActivate: [], + children: [ + { path: 'wizard', redirectTo: 'wizard/2' }, + { + path: 'wizard/:index', + component: WizardComponent, + canDeactivate: [CanDeactivateGuard] + } + ] + } +]; + +@NgModule({ + declarations: [ + ProviderComponent, + EditorComponent, + WizardComponent, + UnsavedDialogComponent, + WizardNavComponent, + DraftComponent, + ValidFormIconComponent + ], + entryComponents: [ + UnsavedDialogComponent + ], + imports: [ + DomainModule, + CommonModule, + RouterModule, + ReactiveFormsModule, + RootProviderModule, + ProviderEditorFormModule, + NgbDropdownModule, + StoreModule.forFeature('edit-provider', reducers), + EffectsModule.forFeature([WizardEffects, EditorEffects]), + RouterModule.forChild(routes), + SharedModule + ], + providers: [] +}) +export class ResolverModule { } diff --git a/ui/src/app/metadata-provider/directive/info-label.directive.spec.ts b/ui/src/app/shared/directive/info-label.directive.spec.ts similarity index 100% rename from ui/src/app/metadata-provider/directive/info-label.directive.spec.ts rename to ui/src/app/shared/directive/info-label.directive.spec.ts diff --git a/ui/src/app/metadata-provider/directive/info-label.directive.ts b/ui/src/app/shared/directive/info-label.directive.ts similarity index 100% rename from ui/src/app/metadata-provider/directive/info-label.directive.ts rename to ui/src/app/shared/directive/info-label.directive.ts diff --git a/ui/src/app/metadata-provider/directive/input-defaults.directive.spec.ts b/ui/src/app/shared/directive/input-defaults.directive.spec.ts similarity index 100% rename from ui/src/app/metadata-provider/directive/input-defaults.directive.spec.ts rename to ui/src/app/shared/directive/input-defaults.directive.spec.ts diff --git a/ui/src/app/metadata-provider/directive/input-defaults.directive.ts b/ui/src/app/shared/directive/input-defaults.directive.ts similarity index 100% rename from ui/src/app/metadata-provider/directive/input-defaults.directive.ts rename to ui/src/app/shared/directive/input-defaults.directive.ts diff --git a/ui/src/app/metadata-provider/pipe/pretty-xml.pipe.ts b/ui/src/app/shared/pipe/pretty-xml.pipe.ts similarity index 100% rename from ui/src/app/metadata-provider/pipe/pretty-xml.pipe.ts rename to ui/src/app/shared/pipe/pretty-xml.pipe.ts From c6641af888fbb486248505a9e630109c3b51ae28 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Fri, 15 Jun 2018 15:43:14 -0700 Subject: [PATCH 04/16] Fixing paths and names --- ui/src/app/app.component.ts | 6 - ui/src/app/app.module.ts | 19 +-- ui/src/app/app.routing.ts | 16 ++ .../contention/action/contention.action.ts | 2 - .../component/change-item.component.ts | 12 +- .../component/contention-dialog.component.ts | 8 +- ui/src/app/contention/contention.module.ts | 4 - .../contention/effect/contention.effect.ts | 3 - .../contention/reducer/contention.reducer.ts | 1 - .../metadata/domain/action/entity.action.ts | 2 +- .../forms/advanced-info-form.component.ts | 3 +- .../forms/assertion-form.component.ts | 4 +- .../forms/finish-form.component.scss | 2 +- .../component}/preview-dialog.component.html | 0 .../component/preview-dialog.component.ts | 25 +++ ui/src/app/metadata/domain/domain.module.ts | 27 ++-- ui/src/app/metadata/domain/domain.type.ts | 3 - ui/src/app/metadata/domain/domain.util.ts | 10 ++ .../domain/effect/entity.effect.spec.ts | 2 +- .../metadata/domain/effect/entity.effect.ts | 9 +- ....service.spec.ts => draft.service.spec.ts} | 11 +- ...tity-draft.service.ts => draft.service.ts} | 0 ...rvice.spec.ts => provider.service.spec.ts} | 23 ++- ...esolver.service.ts => provider.service.ts} | 3 +- ...rvice.spec.ts => resolver.service.spec.ts} | 30 ++-- ...criptor.service.ts => resolver.service.ts} | 3 +- .../filter/container/edit-filter.component.ts | 2 +- .../filter/effect/collection.effect.ts | 4 +- .../metadata/filter/effect/filter.effect.ts | 4 +- ui/src/app/metadata/filter/filter.module.ts | 11 +- .../filter/guard/filter-exists.guard.ts | 4 +- .../filter/reducer/collection.reducer.ts | 2 +- .../metadata/filter/reducer/filter.reducer.ts | 2 +- ui/src/app/metadata/filter/reducer/index.ts | 5 +- .../manager/action/manager.action.ts} | 0 .../manager}/action/search.action.ts | 0 .../component/delete-dialog.component.html | 0 .../component/delete-dialog.component.ts | 0 .../component/entity-item.component.html | 0 .../component/entity-item.component.scss | 0 .../component/entity-item.component.spec.ts | 0 .../component/entity-item.component.ts | 5 +- .../component/provider-search.component.html | 0 .../component/provider-search.component.ts | 0 .../manager/container/manager.component.html} | 0 .../manager/container/manager.component.scss} | 0 .../container/manager.component.spec.ts} | 20 +-- .../manager/container/manager.component.ts} | 40 +++-- .../manager}/effect/search.effects.ts | 28 +--- .../manager/manager.module.ts} | 10 +- .../manager}/reducer/index.ts | 16 +- .../manager/reducer/manager.reducer.spec.ts} | 6 +- .../manager/reducer/manager.reducer.ts} | 9 +- .../manager}/reducer/search.reducer.ts | 0 ...component.html => metadata.component.html} | 0 ui/src/app/metadata/metadata.component.ts | 24 +++ ui/src/app/metadata/metadata.module.ts | 23 +++ ui/src/app/metadata/metadata.reducer.ts | 11 -- .../resolver/action/collection.action.ts | 134 ++++++++-------- .../metadata/resolver/action/copy.action.ts | 46 +++--- ...ent.html => blank-resolver.component.html} | 6 +- ...ec.ts => blank-resolver.component.spec.ts} | 20 +-- ...mponent.ts => blank-resolver.component.ts} | 6 +- .../container/confirm-copy.component.html | 4 +- .../container/confirm-copy.component.ts | 17 +- .../container/copy-provider.component.spec.ts | 23 ++- ...nent.html => copy-resolver.component.html} | 6 +- .../container/copy-resolver.component.spec.ts | 77 +++++++++ ...omponent.ts => copy-resolver.component.ts} | 28 ++-- .../resolver/container/draft.component.ts | 14 +- .../resolver/container/editor.component.html | 22 +-- .../resolver/container/editor.component.ts | 46 +++--- .../container/new-provider.component.spec.ts | 66 -------- .../container/new-provider.component.ts | 11 -- ...onent.html => new-resolver.component.html} | 10 +- ...onent.scss => new-resolver.component.scss} | 2 +- .../container/new-resolver.component.spec.ts | 61 ++++++++ .../container/new-resolver.component.ts | 11 ++ .../resolver/container/provider.component.ts | 36 ----- .../container/resolver.component.html | 1 + ...component.scss => resolver.component.scss} | 0 ...ent.spec.ts => resolver.component.spec.ts} | 15 +- .../resolver/container/resolver.component.ts | 34 ++++ ...nt.html => upload-resolver.component.html} | 12 +- ...c.ts => upload-resolver.component.spec.ts} | 26 ++- ...ponent.ts => upload-resolver.component.ts} | 23 ++- .../resolver/container/wizard.component.html | 24 +-- .../resolver/container/wizard.component.ts | 32 ++-- .../resolver/editor-definition.const.ts | 20 +-- ...fect.spec.ts => collection.effect.spec.ts} | 18 +-- .../resolver/effect/collection.effects.ts | 148 ++++++++++++++++++ .../metadata/resolver/effect/copy.effect.ts | 27 ++-- .../effect/draft-collection.effect.spec.ts | 10 +- .../effect/draft-collection.effects.ts | 28 ++-- .../metadata/resolver/effect/editor.effect.ts | 31 ++-- .../effect/provider-collection.effects.ts | 148 ------------------ .../metadata/resolver/effect/search.effect.ts | 11 +- .../metadata/resolver/effect/wizard.effect.ts | 14 +- .../resolver/metadata-provider.module.ts | 102 ------------ .../reducer/collection.reducer.spec.ts | 16 +- .../resolver/reducer/collection.reducer.ts | 28 ++-- .../resolver/reducer/copy.reducer.spec.ts | 58 +++---- .../metadata/resolver/reducer/copy.reducer.ts | 18 +-- .../resolver/reducer/editor.reducer.spec.ts | 6 +- .../resolver/reducer/editor.reducer.ts | 10 +- ui/src/app/metadata/resolver/reducer/index.ts | 22 +-- .../resolver/reducer/search.reducer.spec.ts | 2 +- .../resolver/reducer/search.reducer.ts | 3 +- .../app/metadata/resolver/resolver.module.ts | 146 ++++++++++------- ui/src/app/routing.module.ts | 27 ---- .../preview/preview-dialog.component.ts | 30 ---- .../shared/preview/preview-dialog.module.ts | 19 --- 112 files changed, 1052 insertions(+), 1157 deletions(-) create mode 100644 ui/src/app/app.routing.ts rename ui/src/app/{shared/preview => metadata/domain/component}/preview-dialog.component.html (100%) create mode 100644 ui/src/app/metadata/domain/component/preview-dialog.component.ts create mode 100644 ui/src/app/metadata/domain/domain.util.ts rename ui/src/app/metadata/domain/service/{entity-draft.service.spec.ts => draft.service.spec.ts} (74%) rename ui/src/app/metadata/domain/service/{entity-draft.service.ts => draft.service.ts} (100%) rename ui/src/app/metadata/domain/service/{metadata-resolver.service.spec.ts => provider.service.spec.ts} (79%) rename ui/src/app/metadata/domain/service/{metadata-resolver.service.ts => provider.service.ts} (96%) rename ui/src/app/metadata/domain/service/{entity-descriptor.service.spec.ts => resolver.service.spec.ts} (68%) rename ui/src/app/metadata/domain/service/{entity-descriptor.service.ts => resolver.service.ts} (98%) rename ui/src/app/{dashboard/action/dashboard.action.ts => metadata/manager/action/manager.action.ts} (100%) rename ui/src/app/{dashboard => metadata/manager}/action/search.action.ts (100%) rename ui/src/app/{dashboard => metadata/manager}/component/delete-dialog.component.html (100%) rename ui/src/app/{dashboard => metadata/manager}/component/delete-dialog.component.ts (100%) rename ui/src/app/{dashboard => metadata/manager}/component/entity-item.component.html (100%) rename ui/src/app/{dashboard => metadata/manager}/component/entity-item.component.scss (100%) rename ui/src/app/{dashboard => metadata/manager}/component/entity-item.component.spec.ts (100%) rename ui/src/app/{dashboard => metadata/manager}/component/entity-item.component.ts (82%) rename ui/src/app/{dashboard => metadata/manager}/component/provider-search.component.html (100%) rename ui/src/app/{dashboard => metadata/manager}/component/provider-search.component.ts (100%) rename ui/src/app/{dashboard/container/dashboard.component.html => metadata/manager/container/manager.component.html} (100%) rename ui/src/app/{dashboard/container/dashboard.component.scss => metadata/manager/container/manager.component.scss} (100%) rename ui/src/app/{dashboard/container/dashboard.component.spec.ts => metadata/manager/container/manager.component.spec.ts} (89%) rename ui/src/app/{dashboard/container/dashboard.component.ts => metadata/manager/container/manager.component.ts} (71%) rename ui/src/app/{dashboard => metadata/manager}/effect/search.effects.ts (53%) rename ui/src/app/{dashboard/dashboard.module.ts => metadata/manager/manager.module.ts} (81%) rename ui/src/app/{dashboard => metadata/manager}/reducer/index.ts (74%) rename ui/src/app/{dashboard/reducer/dashboard.reducer.spec.ts => metadata/manager/reducer/manager.reducer.spec.ts} (82%) rename ui/src/app/{dashboard/reducer/dashboard.reducer.ts => metadata/manager/reducer/manager.reducer.ts} (60%) rename ui/src/app/{dashboard => metadata/manager}/reducer/search.reducer.ts (100%) rename ui/src/app/metadata/{resolver/container/provider.component.html => metadata.component.html} (100%) create mode 100644 ui/src/app/metadata/metadata.component.ts rename ui/src/app/metadata/resolver/container/{blank-provider.component.html => blank-resolver.component.html} (91%) rename ui/src/app/metadata/resolver/container/{blank-provider.component.spec.ts => blank-resolver.component.spec.ts} (60%) rename ui/src/app/metadata/resolver/container/{blank-provider.component.ts => blank-resolver.component.ts} (90%) rename ui/src/app/metadata/resolver/container/{copy-provider.component.html => copy-resolver.component.html} (97%) create mode 100644 ui/src/app/metadata/resolver/container/copy-resolver.component.spec.ts rename ui/src/app/metadata/resolver/container/{copy-provider.component.ts => copy-resolver.component.ts} (76%) delete mode 100644 ui/src/app/metadata/resolver/container/new-provider.component.spec.ts delete mode 100644 ui/src/app/metadata/resolver/container/new-provider.component.ts rename ui/src/app/metadata/resolver/container/{new-provider.component.html => new-resolver.component.html} (91%) rename ui/src/app/metadata/resolver/container/{new-provider.component.scss => new-resolver.component.scss} (57%) create mode 100644 ui/src/app/metadata/resolver/container/new-resolver.component.spec.ts create mode 100644 ui/src/app/metadata/resolver/container/new-resolver.component.ts delete mode 100644 ui/src/app/metadata/resolver/container/provider.component.ts create mode 100644 ui/src/app/metadata/resolver/container/resolver.component.html rename ui/src/app/metadata/resolver/container/{provider.component.scss => resolver.component.scss} (100%) rename ui/src/app/metadata/resolver/container/{provider.component.spec.ts => resolver.component.spec.ts} (76%) create mode 100644 ui/src/app/metadata/resolver/container/resolver.component.ts rename ui/src/app/metadata/resolver/container/{upload-provider.component.html => upload-resolver.component.html} (86%) rename ui/src/app/metadata/resolver/container/{upload-provider.component.spec.ts => upload-resolver.component.spec.ts} (84%) rename ui/src/app/metadata/resolver/container/{upload-provider.component.ts => upload-resolver.component.ts} (73%) rename ui/src/app/metadata/resolver/effect/{provider-collection.effect.spec.ts => collection.effect.spec.ts} (72%) create mode 100644 ui/src/app/metadata/resolver/effect/collection.effects.ts delete mode 100644 ui/src/app/metadata/resolver/effect/provider-collection.effects.ts delete mode 100644 ui/src/app/metadata/resolver/metadata-provider.module.ts delete mode 100644 ui/src/app/routing.module.ts delete mode 100644 ui/src/app/shared/preview/preview-dialog.component.ts delete mode 100644 ui/src/app/shared/preview/preview-dialog.module.ts diff --git a/ui/src/app/app.component.ts b/ui/src/app/app.component.ts index 6a2702749..f3e44f399 100644 --- a/ui/src/app/app.component.ts +++ b/ui/src/app/app.component.ts @@ -6,10 +6,7 @@ import { Store } from '@ngrx/store'; import * as fromRoot from './core/reducer'; import { VersionInfo } from './core/model/version'; -import { LoadProviderRequest } from './domain/action/provider-collection.action'; -import { LoadDraftRequest } from './domain/action/draft-collection.action'; import { VersionInfoLoadRequestAction } from './core/action/version.action'; -import { LoadFilterRequest } from './domain/action/filter-collection.action'; @Component({ selector: 'app-root', templateUrl: './app.component.html', @@ -30,9 +27,6 @@ export class AppComponent implements OnInit { } ngOnInit(): void { - this.store.dispatch(new LoadProviderRequest()); - this.store.dispatch(new LoadFilterRequest()); - this.store.dispatch(new LoadDraftRequest()); this.store.dispatch(new VersionInfoLoadRequestAction()); } } diff --git a/ui/src/app/app.module.ts b/ui/src/app/app.module.ts index 15c94ea59..9f067e5f5 100644 --- a/ui/src/app/app.module.ts +++ b/ui/src/app/app.module.ts @@ -7,23 +7,17 @@ import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http'; import { NgbDropdownModule, NgbModalModule, NgbPopoverModule, NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap'; -import { AppRoutingModule } from './routing.module'; +import { AppRoutingModule } from './app.routing'; import { AppComponent } from './app.component'; import { CoreModule } from './core/core.module'; -import { DomainModule } from './domain/domain.module'; -import { MetadataProviderModule } from './metadata-provider/metadata-provider.module'; import { reducers, metaReducers } from './app.reducer'; import { CustomRouterStateSerializer } from './shared/util'; - -import { CachingInterceptor } from './core/service/cache.interceptor'; import { AuthorizedInterceptor } from './core/service/authorized.interceptor'; import { NotificationModule } from './notification/notification.module'; import { ErrorInterceptor } from './core/service/error.interceptor'; import { NavigatorService } from './core/service/navigator.service'; - -import { environment } from '../environments/environment'; import { ContentionModule } from './contention/contention.module'; @NgModule({ @@ -38,25 +32,18 @@ import { ContentionModule } from './contention/contention.module'; BrowserModule, AppRoutingModule, CoreModule.forRoot(), - MetadataProviderModule.forRoot(), - DomainModule.forRoot(), StoreRouterConnectingModule, NgbDropdownModule.forRoot(), NgbModalModule.forRoot(), NgbPopoverModule.forRoot(), NgbPaginationModule.forRoot(), NotificationModule, - ContentionModule, - HttpClientModule + HttpClientModule, + ContentionModule ], providers: [ NavigatorService, { provide: RouterStateSerializer, useClass: CustomRouterStateSerializer }, - /*{ - provide: HTTP_INTERCEPTORS, - useClass: CachingInterceptor, - multi: true - },*/ { provide: HTTP_INTERCEPTORS, useClass: AuthorizedInterceptor, diff --git a/ui/src/app/app.routing.ts b/ui/src/app/app.routing.ts new file mode 100644 index 000000000..d3a6ba525 --- /dev/null +++ b/ui/src/app/app.routing.ts @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +const routes: Routes = [ + { path: '', redirectTo: '/metadata/manager', pathMatch: 'full' }, + { + path: 'metadata', + loadChildren: './metadata/metadata.module#MetadataModule' + } +]; + +@NgModule({ + imports: [RouterModule.forRoot(routes)], + exports: [RouterModule] +}) +export class AppRoutingModule { } diff --git a/ui/src/app/contention/action/contention.action.ts b/ui/src/app/contention/action/contention.action.ts index bcf216008..0976c9c2d 100644 --- a/ui/src/app/contention/action/contention.action.ts +++ b/ui/src/app/contention/action/contention.action.ts @@ -1,7 +1,5 @@ import { Action } from '@ngrx/store'; import { Contention, ContentionResolution } from '../model/contention'; -import { MetadataEntity } from '../../domain/domain.type'; - export enum ContentionActionTypes { SHOW_CONTENTION = '[Contention] Show Contention', diff --git a/ui/src/app/contention/component/change-item.component.ts b/ui/src/app/contention/component/change-item.component.ts index c2cf99a7f..31e565286 100644 --- a/ui/src/app/contention/component/change-item.component.ts +++ b/ui/src/app/contention/component/change-item.component.ts @@ -1,15 +1,5 @@ -import { Component, OnInit, Input, OnChanges } from '@angular/core'; -import { FormGroup, Validators, FormBuilder } from '@angular/forms'; -import { Observable, of } from 'rxjs'; -import { map, withLatestFrom } from 'rxjs/operators'; -import { Router } from '@angular/router'; -import { Store } from '@ngrx/store'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -import * as fromContention from '../reducer'; -import { ResolveContentionAction } from '../action/contention.action'; +import { Component, Input, OnChanges } from '@angular/core'; import { ChangeItem } from '../model/contention'; -import { DifferentialService } from '../../core/service/differential.service'; export enum ValueTypes { array = 'array', diff --git a/ui/src/app/contention/component/contention-dialog.component.ts b/ui/src/app/contention/component/contention-dialog.component.ts index f9108d64c..1f3070081 100644 --- a/ui/src/app/contention/component/contention-dialog.component.ts +++ b/ui/src/app/contention/component/contention-dialog.component.ts @@ -1,13 +1,9 @@ -import { Component, OnInit, Input, OnChanges } from '@angular/core'; -import { FormGroup, Validators, FormBuilder } from '@angular/forms'; -import { Observable, of } from 'rxjs'; -import { map, withLatestFrom } from 'rxjs/operators'; -import { Router } from '@angular/router'; +import { Component } from '@angular/core'; +import { Observable } from 'rxjs'; import { Store } from '@ngrx/store'; import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; import * as fromContention from '../reducer'; -import { ResolveContentionAction } from '../action/contention.action'; import { Contention, ChangeItem } from '../model/contention'; @Component({ diff --git a/ui/src/app/contention/contention.module.ts b/ui/src/app/contention/contention.module.ts index 670c8eac8..078adbb6a 100644 --- a/ui/src/app/contention/contention.module.ts +++ b/ui/src/app/contention/contention.module.ts @@ -1,15 +1,12 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { RouterModule } from '@angular/router'; import { StoreModule } from '@ngrx/store'; import { EffectsModule } from '@ngrx/effects'; -import { HttpClientModule } from '@angular/common/http'; import { reducers } from './reducer'; import { ContentionEffects } from './effect/contention.effect'; import { ContentionDialogComponent } from './component/contention-dialog.component'; import { ChangeItemComponent } from './component/change-item.component'; -import { DomainModule } from '../domain/domain.module'; import { ContentionService } from './service/contention.service'; export const COMPONENTS = [ @@ -20,7 +17,6 @@ export const COMPONENTS = [ @NgModule({ imports: [ CommonModule, - DomainModule, StoreModule.forFeature('contention', reducers), EffectsModule.forFeature([ContentionEffects]) ], diff --git a/ui/src/app/contention/effect/contention.effect.ts b/ui/src/app/contention/effect/contention.effect.ts index b034bb8d3..aa89ffbd1 100644 --- a/ui/src/app/contention/effect/contention.effect.ts +++ b/ui/src/app/contention/effect/contention.effect.ts @@ -1,7 +1,5 @@ import { Injectable } from '@angular/core'; import { Effect, Actions, ofType } from '@ngrx/effects'; -import { Location } from '@angular/common'; - import { of } from 'rxjs'; import { map, tap, catchError, switchMap } from 'rxjs/operators'; @@ -9,7 +7,6 @@ import { ShowContentionAction, ResolveContentionAction, ContentionActionTypes, - ContentionActionUnion, CancelContentionAction } from '../action/contention.action'; import { ModalService, DEFAULT_MODAL_OPTIONS } from '../../core/service/modal.service'; diff --git a/ui/src/app/contention/reducer/contention.reducer.ts b/ui/src/app/contention/reducer/contention.reducer.ts index 2b940a976..d5432a93d 100644 --- a/ui/src/app/contention/reducer/contention.reducer.ts +++ b/ui/src/app/contention/reducer/contention.reducer.ts @@ -1,6 +1,5 @@ import { ContentionActionTypes, ContentionActionUnion } from '../action/contention.action'; import { Contention } from '../model/contention'; -import { MetadataEntity } from '../../domain/domain.type'; export interface State { contention: Contention; diff --git a/ui/src/app/metadata/domain/action/entity.action.ts b/ui/src/app/metadata/domain/action/entity.action.ts index 61f3ad3e5..4bfe1380c 100644 --- a/ui/src/app/metadata/domain/action/entity.action.ts +++ b/ui/src/app/metadata/domain/action/entity.action.ts @@ -1,5 +1,5 @@ import { Action } from '@ngrx/store'; -import { MetadataEntity } from '../../domain/domain.type'; +import { MetadataEntity } from '../../domain/model'; export const PREVIEW_ENTITY = '[Domain] Preview Entity'; diff --git a/ui/src/app/metadata/domain/component/forms/advanced-info-form.component.ts b/ui/src/app/metadata/domain/component/forms/advanced-info-form.component.ts index 8e601508d..5b756ef42 100644 --- a/ui/src/app/metadata/domain/component/forms/advanced-info-form.component.ts +++ b/ui/src/app/metadata/domain/component/forms/advanced-info-form.component.ts @@ -5,7 +5,6 @@ import { takeUntil, combineLatest, switchMap, map, startWith } from 'rxjs/operat import { Store } from '@ngrx/store'; -import * as fromCollection from '../../../domain/reducer'; import { ProviderStatusEmitter, ProviderValueEmitter } from '../../../domain/service/provider-change-emitter.service'; import { MetadataResolver, Contact } from '../../../domain/model'; import { ProviderFormFragmentComponent } from './provider-form-fragment.component'; @@ -43,6 +42,7 @@ export class AdvancedInfoFormComponent extends ProviderFormFragmentComponent imp ) { super(fb, statusEmitter, valueEmitter); + /* this.ids$ = this.store .select(fromCollection.getAllEntityIds) .pipe( @@ -51,6 +51,7 @@ export class AdvancedInfoFormComponent extends ProviderFormFragmentComponent imp return ids.filter(id => provider.entityId !== id); }) ); + */ } createForm(): void { diff --git a/ui/src/app/metadata/domain/component/forms/assertion-form.component.ts b/ui/src/app/metadata/domain/component/forms/assertion-form.component.ts index ec031922f..a3ce408b8 100644 --- a/ui/src/app/metadata/domain/component/forms/assertion-form.component.ts +++ b/ui/src/app/metadata/domain/component/forms/assertion-form.component.ts @@ -1,5 +1,5 @@ -import { Component, Output, Input, EventEmitter, OnInit, OnChanges, OnDestroy, ChangeDetectionStrategy } from '@angular/core'; -import { FormBuilder, FormGroup, FormControl, FormArray, AbstractControl, Validators } from '@angular/forms'; +import { Component, Input, OnInit, OnChanges, OnDestroy, ChangeDetectionStrategy } from '@angular/core'; +import { FormBuilder, FormGroup, FormArray, AbstractControl } from '@angular/forms'; import { ProviderFormFragmentComponent } from './provider-form-fragment.component'; diff --git a/ui/src/app/metadata/domain/component/forms/finish-form.component.scss b/ui/src/app/metadata/domain/component/forms/finish-form.component.scss index 0f9488141..71ade4d37 100644 --- a/ui/src/app/metadata/domain/component/forms/finish-form.component.scss +++ b/ui/src/app/metadata/domain/component/forms/finish-form.component.scss @@ -1,4 +1,4 @@ -@import '../../../../theme/_palette'; +@import '../../../../../theme/_palette'; .value:empty { &::after { diff --git a/ui/src/app/shared/preview/preview-dialog.component.html b/ui/src/app/metadata/domain/component/preview-dialog.component.html similarity index 100% rename from ui/src/app/shared/preview/preview-dialog.component.html rename to ui/src/app/metadata/domain/component/preview-dialog.component.html diff --git a/ui/src/app/metadata/domain/component/preview-dialog.component.ts b/ui/src/app/metadata/domain/component/preview-dialog.component.ts new file mode 100644 index 000000000..824d5be90 --- /dev/null +++ b/ui/src/app/metadata/domain/component/preview-dialog.component.ts @@ -0,0 +1,25 @@ +import { Component, Input } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import * as FileSaver from 'file-saver'; +import { Subscription } from 'rxjs/Subscription'; +import { MetadataEntity } from '../../domain/model'; + +@Component({ + selector: 'preview-dialog', + templateUrl: './preview-dialog.component.html' +}) +export class PreviewDialogComponent { + @Input() entity: MetadataEntity; + @Input() xml: string; + + sub: Subscription; + + constructor( + public activeModal: NgbActiveModal + ) {} + + preview(xml): void { + const blob = new Blob([xml], { type: 'text/xml;charset=utf-8' }); + FileSaver.saveAs(blob, `${ this.entity.name }.xml`); + } +} /* istanbul ignore next */ diff --git a/ui/src/app/metadata/domain/domain.module.ts b/ui/src/app/metadata/domain/domain.module.ts index ac77546db..4666381c4 100644 --- a/ui/src/app/metadata/domain/domain.module.ts +++ b/ui/src/app/metadata/domain/domain.module.ts @@ -1,29 +1,25 @@ import { NgModule, ModuleWithProviders } from '@angular/core'; import { HttpModule } from '@angular/http'; -import { StoreModule } from '@ngrx/store'; import { EffectsModule } from '@ngrx/effects'; import { CommonModule } from '@angular/common'; -import { EntityDescriptorService } from './service/entity-descriptor.service'; +import { ResolverService } from './service/resolver.service'; import { ListValuesService } from './service/list-values.service'; import { ProviderStatusEmitter, ProviderValueEmitter } from './service/provider-change-emitter.service'; import { EntityIdService } from './service/entity-id.service'; -import { EntityDraftService } from './service/entity-draft.service'; +import { EntityDraftService } from './service/draft.service'; -import { reducers } from './reducer'; -import { DraftCollectionEffects } from './effect/draft-collection.effects'; -import { ProviderCollectionEffects } from './effect/provider-collection.effects'; -import { FilterCollectionEffects } from './effect/filter-collection.effect'; -import { MetadataResolverService } from './service/metadata-resolver.service'; +import { MetadataProviderService } from './service/provider.service'; import { EntityEffects } from './effect/entity.effect'; -import { PreviewDialogModule } from '../shared/preview/preview-dialog.module'; import { I18nTextComponent } from './component/i18n-text.component'; +import { PreviewDialogComponent } from './component/preview-dialog.component'; export const COMPONENTS = []; export const DECLARATIONS = [ ...COMPONENTS, - I18nTextComponent + I18nTextComponent, + PreviewDialogComponent ]; @NgModule({ @@ -31,8 +27,7 @@ export const DECLARATIONS = [ entryComponents: COMPONENTS, imports: [ HttpModule, - CommonModule, - PreviewDialogModule + CommonModule ], exports: DECLARATIONS, providers: [] @@ -42,13 +37,13 @@ export class DomainModule { return { ngModule: RootDomainModule, providers: [ - EntityDescriptorService, + ResolverService, EntityIdService, EntityDraftService, ListValuesService, ProviderStatusEmitter, ProviderValueEmitter, - MetadataResolverService + MetadataProviderService ] }; } @@ -57,11 +52,7 @@ export class DomainModule { @NgModule({ imports: [ DomainModule, - StoreModule.forFeature('collections', reducers), EffectsModule.forFeature([ - FilterCollectionEffects, - DraftCollectionEffects, - ProviderCollectionEffects, EntityEffects ]) ], diff --git a/ui/src/app/metadata/domain/domain.type.ts b/ui/src/app/metadata/domain/domain.type.ts index 6391a9be0..78def16d7 100644 --- a/ui/src/app/metadata/domain/domain.type.ts +++ b/ui/src/app/metadata/domain/domain.type.ts @@ -34,6 +34,3 @@ export enum MetadataTypes { PROVIDER = '[Type] Metadata Provider', RESOLVER = '[Type] Metadata Resolver' } - -export * from './model'; -export * from './entity'; diff --git a/ui/src/app/metadata/domain/domain.util.ts b/ui/src/app/metadata/domain/domain.util.ts new file mode 100644 index 000000000..599ce04b7 --- /dev/null +++ b/ui/src/app/metadata/domain/domain.util.ts @@ -0,0 +1,10 @@ +/* + * Utility functions +*/ + +export const combineAllFn = (d, p) => [...p, ...d]; +export const doesExistFn = (ids, selected) => ids.indexOf(selected) > -1; +export const getInCollectionFn = (entities, selectedId) => { + return selectedId && entities[selectedId]; +}; +export const getEntityIdsFn = list => list.map(entity => entity.entityId); diff --git a/ui/src/app/metadata/domain/effect/entity.effect.spec.ts b/ui/src/app/metadata/domain/effect/entity.effect.spec.ts index 9c259e826..141abe812 100644 --- a/ui/src/app/metadata/domain/effect/entity.effect.spec.ts +++ b/ui/src/app/metadata/domain/effect/entity.effect.spec.ts @@ -8,7 +8,7 @@ import { EntityIdService } from '../service/entity-id.service'; import { EntityDescriptorService } from '../service/entity-descriptor.service'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { NgbModalStub } from '../../../../testing/modal.stub'; -import { EntityAttributesFilter } from '../entity/filter/entity-attributes-filter'; +import { EntityAttributesFilter } from '../entity'; describe('Entity Effects', () => { let effects: EntityEffects; diff --git a/ui/src/app/metadata/domain/effect/entity.effect.ts b/ui/src/app/metadata/domain/effect/entity.effect.ts index ff3e6394f..4901b3828 100644 --- a/ui/src/app/metadata/domain/effect/entity.effect.ts +++ b/ui/src/app/metadata/domain/effect/entity.effect.ts @@ -5,9 +5,10 @@ import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { Observable } from 'rxjs'; import { map, tap } from 'rxjs/operators'; -import { EntityDescriptorService } from '../service/entity-descriptor.service'; -import { PreviewDialogComponent } from '../../../shared/preview/preview-dialog.component'; -import { MetadataEntity, MetadataTypes } from '../domain.type'; +import { ResolverService } from '../service/resolver.service'; +import { PreviewDialogComponent } from '../component/preview-dialog.component'; +import { MetadataEntity } from '../model'; +import { MetadataTypes } from '../domain.type'; import { EntityIdService } from '../service/entity-id.service'; import * as entityActions from '../action/entity.action'; @@ -25,7 +26,7 @@ export class EntityEffects { constructor( private actions$: Actions, private modalService: NgbModal, - private providerService: EntityDescriptorService, + private providerService: ResolverService, private entityService: EntityIdService ) { } diff --git a/ui/src/app/metadata/domain/service/entity-draft.service.spec.ts b/ui/src/app/metadata/domain/service/draft.service.spec.ts similarity index 74% rename from ui/src/app/metadata/domain/service/entity-draft.service.spec.ts rename to ui/src/app/metadata/domain/service/draft.service.spec.ts index dbe8a1109..bc88dc941 100644 --- a/ui/src/app/metadata/domain/service/entity-draft.service.spec.ts +++ b/ui/src/app/metadata/domain/service/draft.service.spec.ts @@ -1,9 +1,6 @@ import { TestBed } from '@angular/core/testing'; -import { HttpClientModule, HttpRequest, HttpParams } from '@angular/common/http'; -import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; -import { EntityDraftService } from './entity-draft.service'; -import { Resolver } from '../entity/provider'; - +import { EntityDraftService } from './draft.service'; +import { FileBackedHttpMetadataResolver } from '../entity'; describe(`EntityDraftService`, () => { let service: EntityDraftService; @@ -20,7 +17,7 @@ describe(`EntityDraftService`, () => { describe('query', () => { it(`should return an observable of the list from the store`, (done: DoneFn) => { - let list = [new Resolver()]; + let list = [new FileBackedHttpMetadataResolver()]; spyOn(service.storage, 'query').and.returnValue(list); service.query().subscribe(l => { expect(l).toEqual(list); @@ -31,7 +28,7 @@ describe(`EntityDraftService`, () => { describe('find', () => { it(`should return an observable of the list from the store`, (done: DoneFn) => { let id = 'foo'; - let e = new Resolver({ entityId: id }); + let e = new FileBackedHttpMetadataResolver({ entityId: id }); let list = [e]; spyOn(service.storage, 'query').and.returnValue(list); service.find(id).subscribe(entity => { diff --git a/ui/src/app/metadata/domain/service/entity-draft.service.ts b/ui/src/app/metadata/domain/service/draft.service.ts similarity index 100% rename from ui/src/app/metadata/domain/service/entity-draft.service.ts rename to ui/src/app/metadata/domain/service/draft.service.ts diff --git a/ui/src/app/metadata/domain/service/metadata-resolver.service.spec.ts b/ui/src/app/metadata/domain/service/provider.service.spec.ts similarity index 79% rename from ui/src/app/metadata/domain/service/metadata-resolver.service.spec.ts rename to ui/src/app/metadata/domain/service/provider.service.spec.ts index 95c9840d5..1efcc4b29 100644 --- a/ui/src/app/metadata/domain/service/metadata-resolver.service.spec.ts +++ b/ui/src/app/metadata/domain/service/provider.service.spec.ts @@ -1,9 +1,8 @@ import { TestBed, async, inject } from '@angular/core/testing'; import { HttpTestingController, HttpClientTestingModule } from '@angular/common/http/testing'; import { HttpClientModule, HttpRequest } from '@angular/common/http'; -import { MetadataResolverService } from './metadata-resolver.service'; -import { EntityAttributesFilter } from '../entity/entity-attributes.filter'; - +import { MetadataProviderService } from './provider.service'; +import { EntityAttributesFilter } from '../entity'; describe(`Metadata Resolver Service`, () => { @@ -14,14 +13,14 @@ describe(`Metadata Resolver Service`, () => { HttpClientTestingModule ], providers: [ - MetadataResolverService + MetadataProviderService ] }); }); describe('query method', () => { - it(`should send an expected GET[] request`, async(inject([MetadataResolverService, HttpTestingController], - (service: MetadataResolverService, backend: HttpTestingController) => { + it(`should send an expected GET[] request`, async(inject([MetadataProviderService, HttpTestingController], + (service: MetadataProviderService, backend: HttpTestingController) => { service.query().subscribe(); backend.expectOne((req: HttpRequest) => { @@ -32,8 +31,8 @@ describe(`Metadata Resolver Service`, () => { ))); }); describe('find method', () => { - it(`should send an expected GET request`, async(inject([MetadataResolverService, HttpTestingController], - (service: MetadataResolverService, backend: HttpTestingController) => { + it(`should send an expected GET request`, async(inject([MetadataProviderService, HttpTestingController], + (service: MetadataProviderService, backend: HttpTestingController) => { const id = 'foo'; service.find(id).subscribe(); @@ -45,8 +44,8 @@ describe(`Metadata Resolver Service`, () => { ))); }); describe('update method', () => { - it(`should send an expected PUT request`, async(inject([MetadataResolverService, HttpTestingController], - (service: MetadataResolverService, backend: HttpTestingController) => { + it(`should send an expected PUT request`, async(inject([MetadataProviderService, HttpTestingController], + (service: MetadataProviderService, backend: HttpTestingController) => { const id = 'foo'; const filter = new EntityAttributesFilter({id}); service.update(filter).subscribe(); @@ -59,8 +58,8 @@ describe(`Metadata Resolver Service`, () => { ))); }); describe('save method', () => { - it(`should send an expected POST request`, async(inject([MetadataResolverService, HttpTestingController], - (service: MetadataResolverService, backend: HttpTestingController) => { + it(`should send an expected POST request`, async(inject([MetadataProviderService, HttpTestingController], + (service: MetadataProviderService, backend: HttpTestingController) => { const id = 'foo'; const filter = new EntityAttributesFilter({ id }); service.save(filter).subscribe(); diff --git a/ui/src/app/metadata/domain/service/metadata-resolver.service.ts b/ui/src/app/metadata/domain/service/provider.service.ts similarity index 96% rename from ui/src/app/metadata/domain/service/metadata-resolver.service.ts rename to ui/src/app/metadata/domain/service/provider.service.ts index db62a0a9d..2713dd498 100644 --- a/ui/src/app/metadata/domain/service/metadata-resolver.service.ts +++ b/ui/src/app/metadata/domain/service/provider.service.ts @@ -1,4 +1,3 @@ - import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; @@ -6,7 +5,7 @@ import { Observable } from 'rxjs'; import { MetadataFilter } from '../../domain/model/metadata-filter'; @Injectable() -export class MetadataResolverService { +export class MetadataProviderService { readonly endpoint = '/MetadataResolver/incommon/Filters'; readonly base = '/api'; diff --git a/ui/src/app/metadata/domain/service/entity-descriptor.service.spec.ts b/ui/src/app/metadata/domain/service/resolver.service.spec.ts similarity index 68% rename from ui/src/app/metadata/domain/service/entity-descriptor.service.spec.ts rename to ui/src/app/metadata/domain/service/resolver.service.spec.ts index 299733fb6..f42c6d705 100644 --- a/ui/src/app/metadata/domain/service/entity-descriptor.service.spec.ts +++ b/ui/src/app/metadata/domain/service/resolver.service.spec.ts @@ -1,7 +1,7 @@ import { TestBed, async, inject } from '@angular/core/testing'; -import { HttpClientModule, HttpRequest, HttpParams } from '@angular/common/http'; +import { HttpClientModule, HttpRequest } from '@angular/common/http'; import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; -import { EntityDescriptorService } from './entity-descriptor.service'; +import { ResolverService } from './resolver.service'; describe(`EntityDescriptorService`, () => { @@ -13,7 +13,7 @@ describe(`EntityDescriptorService`, () => { HttpClientTestingModule ], providers: [ - EntityDescriptorService + ResolverService ] }); }); @@ -23,8 +23,8 @@ describe(`EntityDescriptorService`, () => { })); describe('query', () => { - it(`should send an expected query request`, async(inject([EntityDescriptorService, HttpTestingController], - (service: EntityDescriptorService, backend: HttpTestingController) => { + it(`should send an expected query request`, async(inject([ResolverService, HttpTestingController], + (service: ResolverService, backend: HttpTestingController) => { service.query().subscribe(); backend.expectOne((req: HttpRequest) => { @@ -34,8 +34,8 @@ describe(`EntityDescriptorService`, () => { } ))); - xit(`should emit an empty array if an error is thrown`, async(inject([EntityDescriptorService, HttpTestingController], - (service: EntityDescriptorService, backend: HttpTestingController) => { + xit(`should emit an empty array if an error is thrown`, async(inject([ResolverService, HttpTestingController], + (service: ResolverService, backend: HttpTestingController) => { service.query().subscribe((next) => { expect(next).toEqual([]); }); @@ -44,8 +44,8 @@ describe(`EntityDescriptorService`, () => { } ))); - it(`should emit 'true' for 200 Ok`, async(inject([EntityDescriptorService, HttpTestingController], - (service: EntityDescriptorService, backend: HttpTestingController) => { + it(`should emit 'true' for 200 Ok`, async(inject([ResolverService, HttpTestingController], + (service: ResolverService, backend: HttpTestingController) => { service.query().subscribe((next) => { expect(next).toBeTruthy(); }); @@ -58,8 +58,8 @@ describe(`EntityDescriptorService`, () => { describe('find', () => { let id = 'foo'; - it(`should send an expected GET request`, async(inject([EntityDescriptorService, HttpTestingController], - (service: EntityDescriptorService, backend: HttpTestingController) => { + it(`should send an expected GET request`, async(inject([ResolverService, HttpTestingController], + (service: ResolverService, backend: HttpTestingController) => { service.find(id).subscribe(); backend.expectOne((req: HttpRequest) => { @@ -69,8 +69,8 @@ describe(`EntityDescriptorService`, () => { } ))); - xit(`should emit an error is thrown`, async(inject([EntityDescriptorService, HttpTestingController], - (service: EntityDescriptorService, backend: HttpTestingController) => { + xit(`should emit an error is thrown`, async(inject([ResolverService, HttpTestingController], + (service: ResolverService, backend: HttpTestingController) => { service.find(id).subscribe((next) => { expect(next).toBeFalsy(); }); @@ -79,8 +79,8 @@ describe(`EntityDescriptorService`, () => { } ))); - xit(`should emit 'true' for 200 Ok`, async(inject([EntityDescriptorService, HttpTestingController], - (service: EntityDescriptorService, backend: HttpTestingController) => { + xit(`should emit 'true' for 200 Ok`, async(inject([ResolverService, HttpTestingController], + (service: ResolverService, backend: HttpTestingController) => { service.find(id).subscribe((next) => { expect(next).toBeTruthy(); }); diff --git a/ui/src/app/metadata/domain/service/entity-descriptor.service.ts b/ui/src/app/metadata/domain/service/resolver.service.ts similarity index 98% rename from ui/src/app/metadata/domain/service/entity-descriptor.service.ts rename to ui/src/app/metadata/domain/service/resolver.service.ts index 5cb853a60..c3486de76 100644 --- a/ui/src/app/metadata/domain/service/entity-descriptor.service.ts +++ b/ui/src/app/metadata/domain/service/resolver.service.ts @@ -4,9 +4,8 @@ import { Observable, throwError } from 'rxjs'; import { catchError } from 'rxjs/operators'; import { MetadataResolver } from '../model'; - @Injectable() -export class EntityDescriptorService { +export class ResolverService { private endpoint = '/EntityDescriptor'; private base = '/api'; diff --git a/ui/src/app/metadata/filter/container/edit-filter.component.ts b/ui/src/app/metadata/filter/container/edit-filter.component.ts index 9ab55c3b7..41d10a3e9 100644 --- a/ui/src/app/metadata/filter/container/edit-filter.component.ts +++ b/ui/src/app/metadata/filter/container/edit-filter.component.ts @@ -16,7 +16,7 @@ import { QueryEntityIds, ViewMoreIds, ClearSearch } from '../action/search.actio import { AutoCompleteComponent } from '../../../shared/autocomplete/autocomplete.component'; import { MDUI } from '../../domain/model'; import { PreviewEntity } from '../../domain/action/entity.action'; -import { MetadataEntity } from '../../domain/domain.type'; +import { MetadataEntity } from '../../domain/model'; import { EntityAttributesFilter } from '../../domain/entity/filter/entity-attributes-filter'; @Component({ diff --git a/ui/src/app/metadata/filter/effect/collection.effect.ts b/ui/src/app/metadata/filter/effect/collection.effect.ts index 8874aee39..da2a08a84 100644 --- a/ui/src/app/metadata/filter/effect/collection.effect.ts +++ b/ui/src/app/metadata/filter/effect/collection.effect.ts @@ -10,7 +10,7 @@ import * as actions from '../action/collection.action'; import { FilterCollectionActionTypes } from '../action/collection.action'; import * as fromFilter from '../reducer'; -import { MetadataResolverService } from '../../domain/service/metadata-resolver.service'; +import { MetadataProviderService } from '../../domain/service/provider.service'; import { MetadataFilter } from '../../domain/model'; import { removeNulls } from '../../../shared/util'; import { EntityAttributesFilter } from '../../domain/entity/filter/entity-attributes-filter'; @@ -113,7 +113,7 @@ export class FilterCollectionEffects { constructor( private actions$: Actions, private router: Router, - private resolverService: MetadataResolverService, + private resolverService: MetadataProviderService, private store: Store ) { } } diff --git a/ui/src/app/metadata/filter/effect/filter.effect.ts b/ui/src/app/metadata/filter/effect/filter.effect.ts index d137129e7..87b5a7f1c 100644 --- a/ui/src/app/metadata/filter/effect/filter.effect.ts +++ b/ui/src/app/metadata/filter/effect/filter.effect.ts @@ -23,7 +23,7 @@ import { CancelCreateFilter } from '../action/filter.action'; import { EntityIdService } from '../../domain/service/entity-id.service'; -import { MetadataResolverService } from '../../domain/service/metadata-resolver.service'; +import { MetadataProviderService } from '../../domain/service/provider.service'; import { ShowContentionAction } from '../../../contention/action/contention.action'; import { MetadataFilter } from '../../domain/model'; import { ContentionService } from '../../../contention/service/contention.service'; @@ -76,7 +76,7 @@ export class FilterEffects { private actions$: Actions, private router: Router, private idService: EntityIdService, - private resolverService: MetadataResolverService, + private resolverService: MetadataProviderService, private contentionService: ContentionService ) { } } diff --git a/ui/src/app/metadata/filter/filter.module.ts b/ui/src/app/metadata/filter/filter.module.ts index 61bf73a8a..a7afa9a4a 100644 --- a/ui/src/app/metadata/filter/filter.module.ts +++ b/ui/src/app/metadata/filter/filter.module.ts @@ -8,17 +8,16 @@ import { EffectsModule } from '@ngrx/effects'; import { NewFilterComponent } from './container/new-filter.component'; import { reducers } from './reducer'; -import { ProviderFormFragmentComponent } from '../metadata-provider/component/forms/provider-form-fragment.component'; -import { ProviderEditorFormModule } from '../metadata-provider/component'; +import { ProviderEditorFormModule } from '../domain/component'; import { FilterEffects } from './effect/filter.effect'; import { NgbPopoverModule, NgbModalModule } from '@ng-bootstrap/ng-bootstrap'; import { SearchDialogComponent } from './component/search-dialog.component'; -import { SharedModule } from '../shared/shared.module'; +import { SharedModule } from '../../shared/shared.module'; import { EditFilterComponent } from './container/edit-filter.component'; import { FilterComponent } from './container/filter.component'; import { SearchIdEffects } from './effect/search.effect'; -import { FilterExistsGuard } from '../domain/guard/filter-exists.guard'; -import { PreviewDialogModule } from '../shared/preview/preview-dialog.module'; +import { FilterExistsGuard } from './guard/filter-exists.guard'; +import { DomainModule } from '../domain/domain.module'; export const routes: Routes = [ @@ -61,7 +60,7 @@ export const routes: Routes = [ NgbPopoverModule, NgbModalModule, SharedModule, - PreviewDialogModule, + DomainModule, HttpClientModule ], providers: [ diff --git a/ui/src/app/metadata/filter/guard/filter-exists.guard.ts b/ui/src/app/metadata/filter/guard/filter-exists.guard.ts index dec524432..048e5ae9f 100644 --- a/ui/src/app/metadata/filter/guard/filter-exists.guard.ts +++ b/ui/src/app/metadata/filter/guard/filter-exists.guard.ts @@ -5,7 +5,7 @@ import { Observable, of } from 'rxjs'; import { catchError, filter, map, switchMap, take, tap } from 'rxjs/operators'; import * as fromCollection from '../reducer'; -import { MetadataResolverService } from '../../domain/service/metadata-resolver.service'; +import { MetadataProviderService } from '../../domain/service/provider.service'; /** * Guards are hooks into the route resolution process, providing an opportunity @@ -16,7 +16,7 @@ import { MetadataResolverService } from '../../domain/service/metadata-resolver. export class FilterExistsGuard implements CanActivate { constructor( private store: Store, - private mdResolverService: MetadataResolverService, + private mdResolverService: MetadataProviderService, private router: Router ) { } diff --git a/ui/src/app/metadata/filter/reducer/collection.reducer.ts b/ui/src/app/metadata/filter/reducer/collection.reducer.ts index 158bc0c7b..2eeff6ff1 100644 --- a/ui/src/app/metadata/filter/reducer/collection.reducer.ts +++ b/ui/src/app/metadata/filter/reducer/collection.reducer.ts @@ -1,6 +1,6 @@ import { EntityState, EntityAdapter, createEntityAdapter } from '@ngrx/entity'; import { FilterCollectionActionTypes, FilterCollectionActionsUnion } from '../action/collection.action'; -import { MetadataFilter } from '../../domain/domain.type'; +import { MetadataFilter } from '../../domain/model'; export interface CollectionState extends EntityState { selectedFilterId: string | null; diff --git a/ui/src/app/metadata/filter/reducer/filter.reducer.ts b/ui/src/app/metadata/filter/reducer/filter.reducer.ts index d10cba1fb..3bce96ae3 100644 --- a/ui/src/app/metadata/filter/reducer/filter.reducer.ts +++ b/ui/src/app/metadata/filter/reducer/filter.reducer.ts @@ -7,7 +7,7 @@ import { SearchActionsUnion } from '../action/search.action'; import { FilterCollectionActionTypes, FilterCollectionActionsUnion } from '../action/collection.action'; -import { MetadataFilter, MDUI } from '../../domain/domain.type'; +import { MetadataFilter, MDUI } from '../../domain/model'; export interface FilterState { selected: string | null; diff --git a/ui/src/app/metadata/filter/reducer/index.ts b/ui/src/app/metadata/filter/reducer/index.ts index 5e971027c..e0252e04a 100644 --- a/ui/src/app/metadata/filter/reducer/index.ts +++ b/ui/src/app/metadata/filter/reducer/index.ts @@ -3,8 +3,7 @@ import * as fromRoot from '../../../core/reducer'; import * as fromFilter from './filter.reducer'; import * as fromSearch from './search.reducer'; import * as fromCollection from './collection.reducer'; - -import * as fromDomain from '../../domain/reducer/index'; +import * as utils from '../../domain/domain.util'; export interface FilterState { filter: fromFilter.FilterState; @@ -48,6 +47,6 @@ export const getCollectionState = createSelector(getFilterState, getCollectionFr export const getAllFilters = createSelector(getCollectionState, fromCollection.selectAllFilters); export const getFilterEntities = createSelector(getCollectionState, fromCollection.selectFilterEntities); export const getSelectedFilterId = createSelector(getCollectionState, fromCollection.getSelectedFilterId); -export const getSelectedFilter = createSelector(getFilterEntities, getSelectedFilterId, fromDomain.getInCollectionFn); +export const getSelectedFilter = createSelector(getFilterEntities, getSelectedFilterId, utils.getInCollectionFn); export const getFilterIds = createSelector(getCollectionState, fromCollection.selectFilterIds); export const getFilterCollectionIsLoaded = createSelector(getCollectionState, fromCollection.getIsLoaded); diff --git a/ui/src/app/dashboard/action/dashboard.action.ts b/ui/src/app/metadata/manager/action/manager.action.ts similarity index 100% rename from ui/src/app/dashboard/action/dashboard.action.ts rename to ui/src/app/metadata/manager/action/manager.action.ts diff --git a/ui/src/app/dashboard/action/search.action.ts b/ui/src/app/metadata/manager/action/search.action.ts similarity index 100% rename from ui/src/app/dashboard/action/search.action.ts rename to ui/src/app/metadata/manager/action/search.action.ts diff --git a/ui/src/app/dashboard/component/delete-dialog.component.html b/ui/src/app/metadata/manager/component/delete-dialog.component.html similarity index 100% rename from ui/src/app/dashboard/component/delete-dialog.component.html rename to ui/src/app/metadata/manager/component/delete-dialog.component.html diff --git a/ui/src/app/dashboard/component/delete-dialog.component.ts b/ui/src/app/metadata/manager/component/delete-dialog.component.ts similarity index 100% rename from ui/src/app/dashboard/component/delete-dialog.component.ts rename to ui/src/app/metadata/manager/component/delete-dialog.component.ts diff --git a/ui/src/app/dashboard/component/entity-item.component.html b/ui/src/app/metadata/manager/component/entity-item.component.html similarity index 100% rename from ui/src/app/dashboard/component/entity-item.component.html rename to ui/src/app/metadata/manager/component/entity-item.component.html diff --git a/ui/src/app/dashboard/component/entity-item.component.scss b/ui/src/app/metadata/manager/component/entity-item.component.scss similarity index 100% rename from ui/src/app/dashboard/component/entity-item.component.scss rename to ui/src/app/metadata/manager/component/entity-item.component.scss diff --git a/ui/src/app/dashboard/component/entity-item.component.spec.ts b/ui/src/app/metadata/manager/component/entity-item.component.spec.ts similarity index 100% rename from ui/src/app/dashboard/component/entity-item.component.spec.ts rename to ui/src/app/metadata/manager/component/entity-item.component.spec.ts diff --git a/ui/src/app/dashboard/component/entity-item.component.ts b/ui/src/app/metadata/manager/component/entity-item.component.ts similarity index 82% rename from ui/src/app/dashboard/component/entity-item.component.ts rename to ui/src/app/metadata/manager/component/entity-item.component.ts index 83236f5b4..b5aed3756 100644 --- a/ui/src/app/dashboard/component/entity-item.component.ts +++ b/ui/src/app/metadata/manager/component/entity-item.component.ts @@ -1,6 +1,7 @@ import { Component, ChangeDetectionStrategy, Input, Output, EventEmitter } from '@angular/core'; -import { MetadataEntity, DomainEntityKinds } from '../../domain/domain.type'; +import { MetadataEntity } from '../../domain/model'; +import { MetadataTypes } from '../../domain/domain.type'; @Component({ selector: 'entity-item', @@ -10,7 +11,7 @@ import { MetadataEntity, DomainEntityKinds } from '../../domain/domain.type'; }) export class EntityItemComponent { - types = DomainEntityKinds; + types = MetadataTypes; @Input() entity: MetadataEntity; @Input() isOpen: boolean; diff --git a/ui/src/app/dashboard/component/provider-search.component.html b/ui/src/app/metadata/manager/component/provider-search.component.html similarity index 100% rename from ui/src/app/dashboard/component/provider-search.component.html rename to ui/src/app/metadata/manager/component/provider-search.component.html diff --git a/ui/src/app/dashboard/component/provider-search.component.ts b/ui/src/app/metadata/manager/component/provider-search.component.ts similarity index 100% rename from ui/src/app/dashboard/component/provider-search.component.ts rename to ui/src/app/metadata/manager/component/provider-search.component.ts diff --git a/ui/src/app/dashboard/container/dashboard.component.html b/ui/src/app/metadata/manager/container/manager.component.html similarity index 100% rename from ui/src/app/dashboard/container/dashboard.component.html rename to ui/src/app/metadata/manager/container/manager.component.html diff --git a/ui/src/app/dashboard/container/dashboard.component.scss b/ui/src/app/metadata/manager/container/manager.component.scss similarity index 100% rename from ui/src/app/dashboard/container/dashboard.component.scss rename to ui/src/app/metadata/manager/container/manager.component.scss diff --git a/ui/src/app/dashboard/container/dashboard.component.spec.ts b/ui/src/app/metadata/manager/container/manager.component.spec.ts similarity index 89% rename from ui/src/app/dashboard/container/dashboard.component.spec.ts rename to ui/src/app/metadata/manager/container/manager.component.spec.ts index faa8342c9..4d1bc9020 100644 --- a/ui/src/app/dashboard/container/dashboard.component.spec.ts +++ b/ui/src/app/metadata/manager/container/manager.component.spec.ts @@ -5,30 +5,30 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { StoreModule, Store, combineReducers } from '@ngrx/store'; import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap/pagination/pagination.module'; import { NgbModal, NgbModalModule } from '@ng-bootstrap/ng-bootstrap/modal/modal.module'; -import { DashboardComponent } from './dashboard.component'; +import { DashboardComponent } from './manager.component'; import * as fromDashboard from '../reducer'; import { ProviderSearchComponent } from '../component/provider-search.component'; import { EntityItemComponent } from '../component/entity-item.component'; import { DeleteDialogComponent } from '../component/delete-dialog.component'; -import { RouterStub } from '../../../testing/router.stub'; -import { NgbModalStub } from '../../../testing/modal.stub'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; -import { Resolver } from '../../domain/entity/provider'; +import { RouterStub } from '../../../../testing/router.stub'; +import { NgbModalStub } from '../../../../testing/modal.stub'; +import { FileBackedHttpMetadataResolver } from '../../domain/entity'; -describe('Dashboard Page', () => { +describe('Metadata Manager Page', () => { let fixture: ComponentFixture; let store: Store; let router: Router; let modal: NgbModal; let instance: DashboardComponent; - let draft = new Resolver({ + let draft = new FileBackedHttpMetadataResolver({ entityId: 'foo', serviceProviderName: 'bar' }), - provider = new Resolver({ - ...draft, + provider = new FileBackedHttpMetadataResolver({ + entityId: 'foo', + serviceProviderName: 'foo', id: '1' }); @@ -41,7 +41,7 @@ describe('Dashboard Page', () => { imports: [ NoopAnimationsModule, StoreModule.forRoot({ - dashboard: combineReducers(fromDashboard.reducers), + manager: combineReducers(fromDashboard.reducers), }), ReactiveFormsModule, NgbPaginationModule, diff --git a/ui/src/app/dashboard/container/dashboard.component.ts b/ui/src/app/metadata/manager/container/manager.component.ts similarity index 71% rename from ui/src/app/dashboard/container/dashboard.component.ts rename to ui/src/app/metadata/manager/container/manager.component.ts index aee61af43..de1cfdf77 100644 --- a/ui/src/app/dashboard/container/dashboard.component.ts +++ b/ui/src/app/metadata/manager/container/manager.component.ts @@ -2,26 +2,25 @@ import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core'; import { Router } from '@angular/router'; import { Store } from '@ngrx/store'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { MetadataTypes, Metadata } from '../../metadata/domain/domain.type'; + +import { MetadataEntity, MetadataResolver } from '../../domain/model'; +import { MetadataTypes, Metadata } from '../../domain/domain.type'; import * as searchActions from '../action/search.action'; -import * as draftActions from '../../domain/action/draft-collection.action'; import * as fromDashboard from '../reducer'; -import { ToggleEntityDisplay } from '../action/dashboard.action'; -import { PreviewEntity } from '../../domain/action/entity.action'; - +import { ToggleEntityDisplay } from '../action/manager.action'; import { DeleteDialogComponent } from '../component/delete-dialog.component'; -import { MetadataFactory } from '@angular/compiler/src/core'; +import { PreviewEntity } from '../../domain/action/entity.action'; +import { RemoveDraftRequest } from '../../resolver/action/draft.action'; @Component({ - selector: 'dashboard-page', + selector: 'manager-page', changeDetection: ChangeDetectionStrategy.OnPush, - templateUrl: './dashboard.component.html', - styleUrls: ['./dashboard.component.scss'] + templateUrl: './manager.component.html', + styleUrls: ['./manager.component.scss'] }) -export class DashboardComponent implements OnInit { +export class ManagerComponent implements OnInit { searchQuery$: Observable; providers$: Observable; loading$: Observable; @@ -61,12 +60,12 @@ export class DashboardComponent implements OnInit { this.changeFilter('all'); } - getPagedProviders(page: number, list$: Observable): Observable { + getPagedProviders(page: number, list$: Observable): Observable { return list$.pipe( - map((providers: MetadataEntity[]) => { + map((providers: Metadata[]) => { let maxIndex = (page * this.limit) - 1, minIndex = ((page - 1) * this.limit); - return providers.filter((provider: MetadataEntity, index: number) => (maxIndex >= index && index >= minIndex) ); + return providers.filter((provider: Metadata, index: number) => (maxIndex >= index && index >= minIndex) ); }) ); } @@ -86,31 +85,28 @@ export class DashboardComponent implements OnInit { } edit(entity: MetadataEntity): void { - let path = entity.id ? 'edit' : 'wizard', - id = entity.id ? entity.id : entity.entityId; - this.router.navigate([entity.kind, id, path]); + this.router.navigate(['resolver', entity.getId(), entity.getId() ? 'edit' : 'wizard']); } toggleProvider(entity: MetadataEntity): void { - let id = entity.id ? entity.id : entity.entityId; - this.store.dispatch(new ToggleEntityDisplay(id)); + this.store.dispatch(new ToggleEntityDisplay(entity.getId())); } openPreviewDialog(entity: MetadataEntity): void { this.store.dispatch(new PreviewEntity(entity)); } - deleteProvider(entity: MetadataProvider): void { + deleteProvider(entity: MetadataResolver): void { this.modalService .open(DeleteDialogComponent) .result .then( success => { - this.store.dispatch(new draftActions.RemoveDraftRequest(entity)); + this.store.dispatch(new RemoveDraftRequest(entity)); }, err => { console.log('Cancelled'); } ); } -} /* istanbul ignore next */ +} diff --git a/ui/src/app/dashboard/effect/search.effects.ts b/ui/src/app/metadata/manager/effect/search.effects.ts similarity index 53% rename from ui/src/app/dashboard/effect/search.effects.ts rename to ui/src/app/metadata/manager/effect/search.effects.ts index 78a9066e4..fa3386def 100644 --- a/ui/src/app/dashboard/effect/search.effects.ts +++ b/ui/src/app/metadata/manager/effect/search.effects.ts @@ -5,16 +5,10 @@ import { Observable, of } from 'rxjs'; import { switchMap, map, combineLatest } from 'rxjs/operators'; import * as entitySearch from '../action/search.action'; -import * as fromCollections from '../../domain/reducer'; -import * as fromDashboard from '../reducer'; +import * as fromManager from '../reducer'; +import * as fromResolver from '../../resolver/reducer'; import { MetadataProvider } from '../../domain/model/metadata-provider'; -import { EntityDescriptorService } from '../../domain/service/entity-descriptor.service'; -import { Resolver } from '../../domain/entity/provider'; -import { Filter } from '../../domain/entity/filter'; -import { MetadataEntity, DomainTypes, MetadataFilter } from '../../domain/domain.type'; -import { Provider } from '../../domain/entity/provider'; -import { MetadataEntity, MetadataFilter } from '../../domain/domain.type'; -import { EntityAttributesFilter } from '../../domain/entity/entity-attributes.filter'; +import { FileBackedHttpMetadataResolver } from '../../domain/entity'; @Injectable() @@ -36,27 +30,21 @@ export class SearchEffects { constructor( private actions$: Actions, - private store: Store + private store: Store ) { } private performSearch(): Observable { return of([]).pipe( combineLatest( - this.store.select(fromCollections.getAllProviders), - this.store.select(fromCollections.getAllFilters), - (o: any[], p: MetadataProvider[], f: MetadataFilter[]): Array => { + this.store.select(fromResolver.getAllResolvers), + (o: any[], p: MetadataProvider[]): Array => { return o.concat( - f.map(filter => new EntityAttributesFilter(filter)), - p.map(provider => new Provider(provider)) + p.map(provider => new FileBackedHttpMetadataResolver(provider)) ); } ), combineLatest( - this.store.select(fromDashboard.getFilterType), - (entities, kind) => kind !== 'all' ? entities.filter(e => e.kind === kind) : entities - ), - combineLatest( - this.store.select(fromDashboard.getSearchQuery), + this.store.select(fromManager.getSearchQuery), (entities, term) => entities.filter( e => this.matcher(e.name, term) || this.matcher(e.entityId, term) ) diff --git a/ui/src/app/dashboard/dashboard.module.ts b/ui/src/app/metadata/manager/manager.module.ts similarity index 81% rename from ui/src/app/dashboard/dashboard.module.ts rename to ui/src/app/metadata/manager/manager.module.ts index 06efbc2b0..49bde0aa7 100644 --- a/ui/src/app/dashboard/dashboard.module.ts +++ b/ui/src/app/metadata/manager/manager.module.ts @@ -7,7 +7,7 @@ import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap/pagination/pagin import { StoreModule } from '@ngrx/store'; import { EffectsModule } from '@ngrx/effects'; -import { DashboardComponent } from './container/dashboard.component'; +import { ManagerComponent } from './container/manager.component'; import { EntityItemComponent } from './component/entity-item.component'; import { ProviderSearchComponent } from './component/provider-search.component'; import { reducers } from './reducer'; @@ -15,11 +15,10 @@ import { SearchEffects } from './effect/search.effects'; import { DeleteDialogComponent } from './component/delete-dialog.component'; import { NgbModalModule } from '@ng-bootstrap/ng-bootstrap/modal/modal.module'; import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; -import { PreviewDialogModule } from '../shared/preview/preview-dialog.module'; @NgModule({ declarations: [ - DashboardComponent, + ManagerComponent, EntityItemComponent, ProviderSearchComponent, DeleteDialogComponent @@ -29,16 +28,15 @@ import { PreviewDialogModule } from '../shared/preview/preview-dialog.module'; ], imports: [ RouterModule.forChild([ - { path: '', component: DashboardComponent } + { path: '', component: ManagerComponent } ]), - StoreModule.forFeature('dashboard', reducers), + StoreModule.forFeature('manager', reducers), EffectsModule.forFeature([SearchEffects]), CommonModule, ReactiveFormsModule, NgbPaginationModule, NgbModalModule, NgbDropdownModule, - PreviewDialogModule, HttpClientModule ], providers: [] diff --git a/ui/src/app/dashboard/reducer/index.ts b/ui/src/app/metadata/manager/reducer/index.ts similarity index 74% rename from ui/src/app/dashboard/reducer/index.ts rename to ui/src/app/metadata/manager/reducer/index.ts index 4fb55bf4e..ce597a06b 100644 --- a/ui/src/app/dashboard/reducer/index.ts +++ b/ui/src/app/metadata/manager/reducer/index.ts @@ -1,25 +1,25 @@ import { createSelector, createFeatureSelector } from '@ngrx/store'; -import * as fromRoot from '../../core/reducer'; -import * as fromDashboard from './dashboard.reducer'; +import * as fromRoot from '../../../core/reducer'; +import * as fromDashboard from './manager.reducer'; import * as fromSearch from './search.reducer'; export interface DashboardState { - dashboard: fromDashboard.State; + manager: fromDashboard.State; search: fromSearch.SearchState; } export interface State extends fromRoot.State { - 'dashboard': DashboardState; + 'manager': DashboardState; } export const reducers = { - dashboard: fromDashboard.reducer, + manager: fromDashboard.reducer, search: fromSearch.reducer }; -export const getFeatureState = createFeatureSelector('dashboard'); -export const getDashboardState = createSelector(getFeatureState, (state: DashboardState) => state.dashboard); -export const getOpenProviders = createSelector(getDashboardState, (dashboard: fromDashboard.State) => dashboard.providersOpen); +export const getFeatureState = createFeatureSelector('manager'); +export const getDashboardState = createSelector(getFeatureState, (state: DashboardState) => state.manager); +export const getOpenProviders = createSelector(getDashboardState, (manager: fromDashboard.State) => manager.providersOpen); export const getSearchState = createSelector(getFeatureState, (state: DashboardState) => state.search diff --git a/ui/src/app/dashboard/reducer/dashboard.reducer.spec.ts b/ui/src/app/metadata/manager/reducer/manager.reducer.spec.ts similarity index 82% rename from ui/src/app/dashboard/reducer/dashboard.reducer.spec.ts rename to ui/src/app/metadata/manager/reducer/manager.reducer.spec.ts index 969671c65..b31f3c4f7 100644 --- a/ui/src/app/dashboard/reducer/dashboard.reducer.spec.ts +++ b/ui/src/app/metadata/manager/reducer/manager.reducer.spec.ts @@ -1,6 +1,6 @@ -import { reducer } from './dashboard.reducer'; -import * as fromDashboard from './dashboard.reducer'; -import { ToggleEntityDisplay } from '../action/dashboard.action'; +import { reducer } from './manager.reducer'; +import * as fromDashboard from './manager.reducer'; +import { ToggleEntityDisplay } from '../action/manager.action'; describe('Dashboard Reducer', () => { const initialState: fromDashboard.State = { diff --git a/ui/src/app/dashboard/reducer/dashboard.reducer.ts b/ui/src/app/metadata/manager/reducer/manager.reducer.ts similarity index 60% rename from ui/src/app/dashboard/reducer/dashboard.reducer.ts rename to ui/src/app/metadata/manager/reducer/manager.reducer.ts index a71c8b812..2cd0e6926 100644 --- a/ui/src/app/dashboard/reducer/dashboard.reducer.ts +++ b/ui/src/app/metadata/manager/reducer/manager.reducer.ts @@ -1,7 +1,4 @@ -import { createSelector, createFeatureSelector } from '@ngrx/store'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; -import * as dashboard from '../action/dashboard.action'; -import * as fromRoot from '../../core/reducer'; +import * as manager from '../action/manager.action'; export interface State { providersOpen: {[key: string]: boolean}; @@ -11,9 +8,9 @@ export const initialState: State = { providersOpen: {} }; -export function reducer(state = initialState, action: dashboard.Actions): State { +export function reducer(state = initialState, action: manager.Actions): State { switch (action.type) { - case dashboard.TOGGLE_ENTITY_DISPLAY: { + case manager.TOGGLE_ENTITY_DISPLAY: { return Object.assign({}, state, { providersOpen: { ...state.providersOpen, diff --git a/ui/src/app/dashboard/reducer/search.reducer.ts b/ui/src/app/metadata/manager/reducer/search.reducer.ts similarity index 100% rename from ui/src/app/dashboard/reducer/search.reducer.ts rename to ui/src/app/metadata/manager/reducer/search.reducer.ts diff --git a/ui/src/app/metadata/resolver/container/provider.component.html b/ui/src/app/metadata/metadata.component.html similarity index 100% rename from ui/src/app/metadata/resolver/container/provider.component.html rename to ui/src/app/metadata/metadata.component.html diff --git a/ui/src/app/metadata/metadata.component.ts b/ui/src/app/metadata/metadata.component.ts new file mode 100644 index 000000000..08c288dda --- /dev/null +++ b/ui/src/app/metadata/metadata.component.ts @@ -0,0 +1,24 @@ +import { Component, ChangeDetectionStrategy } from '@angular/core'; +import { Store } from '@ngrx/store'; + +import * as fromMetadata from './metadata.reducer'; +import { LoadResolverRequest } from './resolver/action/collection.action'; +import { LoadFilterRequest } from './filter/action/collection.action'; +import { LoadDraftRequest } from './resolver/action/draft.action'; + +@Component({ + selector: 'metadata-page', + changeDetection: ChangeDetectionStrategy.OnPush, + templateUrl: './metadata.component.html', + styleUrls: [] +}) +export class MetadataPageComponent { + + constructor( + private store: Store + ) { + this.store.dispatch(new LoadResolverRequest()); + this.store.dispatch(new LoadFilterRequest()); + this.store.dispatch(new LoadDraftRequest()); + } +} diff --git a/ui/src/app/metadata/metadata.module.ts b/ui/src/app/metadata/metadata.module.ts index e69de29bb..58c75051e 100644 --- a/ui/src/app/metadata/metadata.module.ts +++ b/ui/src/app/metadata/metadata.module.ts @@ -0,0 +1,23 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { ResolverModule } from './resolver/resolver.module'; +import { FilterModule } from './filter/filter.module'; +import { DomainModule } from './domain/domain.module'; +import { MetadataPageComponent } from './metadata.component'; + +@NgModule({ + imports: [ + ResolverModule, + FilterModule, + DomainModule, + RouterModule.forChild([ + { path: '', component: MetadataPageComponent } + ]) + ], + providers: [], + declarations: [ + MetadataPageComponent + ] +}) +export class MetadataModule { } diff --git a/ui/src/app/metadata/metadata.reducer.ts b/ui/src/app/metadata/metadata.reducer.ts index ecda6058c..f035ff707 100644 --- a/ui/src/app/metadata/metadata.reducer.ts +++ b/ui/src/app/metadata/metadata.reducer.ts @@ -19,14 +19,3 @@ export const reducers = { filter: filterReducers, resolver: resolverReducers }; - -/* - * Utility functions -*/ - -export const combineAllFn = (d, p) => [...p, ...d]; -export const doesExistFn = (ids, selected) => ids.indexOf(selected) > -1; -export const getInCollectionFn = (entities, selectedId) => { - return selectedId && entities[selectedId]; -}; -export const getEntityIdsFn = list => list.map(entity => entity.entityId); diff --git a/ui/src/app/metadata/resolver/action/collection.action.ts b/ui/src/app/metadata/resolver/action/collection.action.ts index 218f599b7..f0aebd69a 100644 --- a/ui/src/app/metadata/resolver/action/collection.action.ts +++ b/ui/src/app/metadata/resolver/action/collection.action.ts @@ -2,146 +2,146 @@ import { Action } from '@ngrx/store'; import { MetadataResolver } from '../../domain/model'; import { Update } from '@ngrx/entity'; -export enum ProviderCollectionActionTypes { +export enum ResolverCollectionActionTypes { FIND = '[Metadata Resolver] Find', SELECT = '[Metadata Resolver] Select', SELECT_SUCCESS = '[Metadata Resolver] Select Success', - UPDATE_PROVIDER_REQUEST = '[Metadata Resolver] Update Request', - UPDATE_PROVIDER_SUCCESS = '[Metadata Resolver] Update Success', - UPDATE_PROVIDER_FAIL = '[Metadata Resolver] Update Fail', + UPDATE_RESOLVER_REQUEST = '[Metadata Resolver] Update Request', + UPDATE_RESOLVER_SUCCESS = '[Metadata Resolver] Update Success', + UPDATE_RESOLVER_FAIL = '[Metadata Resolver] Update Fail', - LOAD_PROVIDER_REQUEST = '[Metadata Resolver Collection] Resolver REQUEST', - LOAD_PROVIDER_SUCCESS = '[Metadata Resolver Collection] Resolver SUCCESS', - LOAD_PROVIDER_ERROR = '[Metadata Resolver Collection] Resolver ERROR', - ADD_PROVIDER = '[Metadata Resolver Collection] Add Resolver', - ADD_PROVIDER_SUCCESS = '[Metadata Resolver Collection] Add Resolver Success', - ADD_PROVIDER_FAIL = '[Metadata Resolver Collection] Add Resolver Fail', - REMOVE_PROVIDER = '[Metadata Resolver Collection] Remove Resolver', - REMOVE_PROVIDER_SUCCESS = '[Metadata Resolver Collection] Remove Resolver Success', - REMOVE_PROVIDER_FAIL = '[Metadata Resolver Collection] Remove Resolver Fail', + LOAD_RESOLVER_REQUEST = '[Metadata Resolver Collection] Resolver REQUEST', + LOAD_RESOLVER_SUCCESS = '[Metadata Resolver Collection] Resolver SUCCESS', + LOAD_RESOLVER_ERROR = '[Metadata Resolver Collection] Resolver ERROR', + ADD_RESOLVER = '[Metadata Resolver Collection] Add Resolver', + ADD_RESOLVER_SUCCESS = '[Metadata Resolver Collection] Add Resolver Success', + ADD_RESOLVER_FAIL = '[Metadata Resolver Collection] Add Resolver Fail', + REMOVE_RESOLVER = '[Metadata Resolver Collection] Remove Resolver', + REMOVE_RESOLVER_SUCCESS = '[Metadata Resolver Collection] Remove Resolver Success', + REMOVE_RESOLVER_FAIL = '[Metadata Resolver Collection] Remove Resolver Fail', - UPLOAD_PROVIDER_REQUEST = '[Metadata Resolver Collection] Upload Resolver Request', - CREATE_PROVIDER_FROM_URL_REQUEST = '[Metadata Resolver Collection] Create Resolver From URL Request', + UPLOAD_RESOLVER_REQUEST = '[Metadata Resolver Collection] Upload Resolver Request', + CREATE_RESOLVER_FROM_URL_REQUEST = '[Metadata Resolver Collection] Create Resolver From URL Request', } -export class FindProvider implements Action { - readonly type = ProviderCollectionActionTypes.FIND; +export class FindResolver implements Action { + readonly type = ResolverCollectionActionTypes.FIND; constructor(public payload: string) { } } -export class SelectProvider implements Action { - readonly type = ProviderCollectionActionTypes.SELECT; +export class SelectResolver implements Action { + readonly type = ResolverCollectionActionTypes.SELECT; constructor(public payload: string) { } } -export class SelectProviderSuccess implements Action { - readonly type = ProviderCollectionActionTypes.SELECT_SUCCESS; +export class SelectResolverSuccess implements Action { + readonly type = ResolverCollectionActionTypes.SELECT_SUCCESS; constructor(public payload: MetadataResolver) { } } -export class LoadProviderRequest implements Action { - readonly type = ProviderCollectionActionTypes.LOAD_PROVIDER_REQUEST; +export class LoadResolverRequest implements Action { + readonly type = ResolverCollectionActionTypes.LOAD_RESOLVER_REQUEST; constructor() { } } -export class LoadProviderSuccess implements Action { - readonly type = ProviderCollectionActionTypes.LOAD_PROVIDER_SUCCESS; +export class LoadResolverSuccess implements Action { + readonly type = ResolverCollectionActionTypes.LOAD_RESOLVER_SUCCESS; constructor(public payload: MetadataResolver[]) { } } -export class LoadProviderError implements Action { - readonly type = ProviderCollectionActionTypes.LOAD_PROVIDER_ERROR; +export class LoadResolverError implements Action { + readonly type = ResolverCollectionActionTypes.LOAD_RESOLVER_ERROR; constructor(public payload: any) { } } -export class UpdateProviderRequest implements Action { - readonly type = ProviderCollectionActionTypes.UPDATE_PROVIDER_REQUEST; +export class UpdateResolverRequest implements Action { + readonly type = ResolverCollectionActionTypes.UPDATE_RESOLVER_REQUEST; constructor(public payload: MetadataResolver) { } } -export class UpdateProviderSuccess implements Action { - readonly type = ProviderCollectionActionTypes.UPDATE_PROVIDER_SUCCESS; +export class UpdateResolverSuccess implements Action { + readonly type = ResolverCollectionActionTypes.UPDATE_RESOLVER_SUCCESS; constructor(public payload: Update) { } } -export class UpdateProviderFail implements Action { - readonly type = ProviderCollectionActionTypes.UPDATE_PROVIDER_FAIL; +export class UpdateResolverFail implements Action { + readonly type = ResolverCollectionActionTypes.UPDATE_RESOLVER_FAIL; constructor(public payload: MetadataResolver) { } } -export class AddProviderRequest implements Action { - readonly type = ProviderCollectionActionTypes.ADD_PROVIDER; +export class AddResolverRequest implements Action { + readonly type = ResolverCollectionActionTypes.ADD_RESOLVER; constructor(public payload: MetadataResolver) { } } -export class AddProviderSuccess implements Action { - readonly type = ProviderCollectionActionTypes.ADD_PROVIDER_SUCCESS; +export class AddResolverSuccess implements Action { + readonly type = ResolverCollectionActionTypes.ADD_RESOLVER_SUCCESS; constructor(public payload: MetadataResolver) { } } -export class AddProviderFail implements Action { - readonly type = ProviderCollectionActionTypes.ADD_PROVIDER_FAIL; +export class AddResolverFail implements Action { + readonly type = ResolverCollectionActionTypes.ADD_RESOLVER_FAIL; constructor(public payload: any) { } } -export class RemoveProviderRequest implements Action { - readonly type = ProviderCollectionActionTypes.REMOVE_PROVIDER; +export class RemoveResolverRequest implements Action { + readonly type = ResolverCollectionActionTypes.REMOVE_RESOLVER; constructor(public payload: MetadataResolver) { } } -export class RemoveProviderSuccess implements Action { - readonly type = ProviderCollectionActionTypes.REMOVE_PROVIDER_SUCCESS; +export class RemoveResolverSuccess implements Action { + readonly type = ResolverCollectionActionTypes.REMOVE_RESOLVER_SUCCESS; constructor(public payload: MetadataResolver) { } } -export class RemoveProviderFail implements Action { - readonly type = ProviderCollectionActionTypes.REMOVE_PROVIDER_FAIL; +export class RemoveResolverFail implements Action { + readonly type = ResolverCollectionActionTypes.REMOVE_RESOLVER_FAIL; constructor(public payload: MetadataResolver) { } } -export class UploadProviderRequest implements Action { - readonly type = ProviderCollectionActionTypes.UPLOAD_PROVIDER_REQUEST; +export class UploadResolverRequest implements Action { + readonly type = ResolverCollectionActionTypes.UPLOAD_RESOLVER_REQUEST; constructor(public payload: { name: string, body: string }) { } } -export class CreateProviderFromUrlRequest implements Action { - readonly type = ProviderCollectionActionTypes.CREATE_PROVIDER_FROM_URL_REQUEST; +export class CreateResolverFromUrlRequest implements Action { + readonly type = ResolverCollectionActionTypes.CREATE_RESOLVER_FROM_URL_REQUEST; constructor(public payload: { name: string, url: string }) { } } -export type ProviderCollectionActionsUnion = - | LoadProviderRequest - | LoadProviderSuccess - | LoadProviderError - | AddProviderRequest - | AddProviderSuccess - | AddProviderFail - | RemoveProviderRequest - | RemoveProviderSuccess - | RemoveProviderFail - | FindProvider - | SelectProvider - | SelectProviderSuccess - | UpdateProviderRequest - | UpdateProviderSuccess - | UpdateProviderFail - | UploadProviderRequest - | CreateProviderFromUrlRequest; +export type ResolverCollectionActionsUnion = + | LoadResolverRequest + | LoadResolverSuccess + | LoadResolverError + | AddResolverRequest + | AddResolverSuccess + | AddResolverFail + | RemoveResolverRequest + | RemoveResolverSuccess + | RemoveResolverFail + | FindResolver + | SelectResolver + | SelectResolverSuccess + | UpdateResolverRequest + | UpdateResolverSuccess + | UpdateResolverFail + | UploadResolverRequest + | CreateResolverFromUrlRequest; diff --git a/ui/src/app/metadata/resolver/action/copy.action.ts b/ui/src/app/metadata/resolver/action/copy.action.ts index 54c20c477..8d70af76c 100644 --- a/ui/src/app/metadata/resolver/action/copy.action.ts +++ b/ui/src/app/metadata/resolver/action/copy.action.ts @@ -2,52 +2,52 @@ import { Action } from '@ngrx/store'; import { MetadataResolver } from '../../domain/model'; export enum CopySourceActionTypes { - CREATE_PROVIDER_COPY_REQUEST = '[Copy Resolver] Create Resolver Copy Request', - CREATE_PROVIDER_COPY_SUCCESS = '[Copy Resolver] Create Resolver Copy Success', - CREATE_PROVIDER_COPY_ERROR = '[Copy Resolver] Create Resolver Copy Error', + CREATE_RESOLVER_COPY_REQUEST = '[Copy Resolver] Create Resolver Copy Request', + CREATE_RESOLVER_COPY_SUCCESS = '[Copy Resolver] Create Resolver Copy Success', + CREATE_RESOLVER_COPY_ERROR = '[Copy Resolver] Create Resolver Copy Error', - UPDATE_PROVIDER_COPY = '[Copy Resolver] Update Resolver Copy Request', + UPDATE_RESOLVER_COPY = '[Copy Resolver] Update Resolver Copy Request', - UPDATE_PROVIDER_COPY_SECTIONS = '[Copy Resolver] Update Resolver Sections', + UPDATE_RESOLVER_COPY_SECTIONS = '[Copy Resolver] Update Resolver Sections', - SAVE_PROVIDER_COPY_REQUEST = '[Copy Resolver] Save Resolver Copy Request', - SAVE_PROVIDER_COPY_SUCCESS = '[Copy Resolver] Save Resolver Copy Request', - SAVE_PROVIDER_COPY_ERROR = '[Copy Resolver] Save Resolver Copy Request', + SAVE_RESOLVER_COPY_REQUEST = '[Copy Resolver] Save Resolver Copy Request', + SAVE_RESOLVER_COPY_SUCCESS = '[Copy Resolver] Save Resolver Copy Request', + SAVE_RESOLVER_COPY_ERROR = '[Copy Resolver] Save Resolver Copy Request', } -export class CreateProviderCopyRequest implements Action { - readonly type = CopySourceActionTypes.CREATE_PROVIDER_COPY_REQUEST; +export class CreateResolverCopyRequest implements Action { + readonly type = CopySourceActionTypes.CREATE_RESOLVER_COPY_REQUEST; constructor(public payload: { entityId: string, serviceProviderName: string, target: string }) { } } -export class CreateProviderCopySuccess implements Action { - readonly type = CopySourceActionTypes.CREATE_PROVIDER_COPY_SUCCESS; +export class CreateResolverCopySuccess implements Action { + readonly type = CopySourceActionTypes.CREATE_RESOLVER_COPY_SUCCESS; constructor(public payload: MetadataResolver) { } } -export class CreateProviderCopyError implements Action { - readonly type = CopySourceActionTypes.CREATE_PROVIDER_COPY_ERROR; +export class CreateResolverCopyError implements Action { + readonly type = CopySourceActionTypes.CREATE_RESOLVER_COPY_ERROR; constructor(public payload: Error) { } } -export class UpdateProviderCopy implements Action { - readonly type = CopySourceActionTypes.UPDATE_PROVIDER_COPY; +export class UpdateResolverCopy implements Action { + readonly type = CopySourceActionTypes.UPDATE_RESOLVER_COPY; constructor(public payload: Partial) { } } -export class UpdateProviderCopySections implements Action { - readonly type = CopySourceActionTypes.UPDATE_PROVIDER_COPY_SECTIONS; +export class UpdateResolverCopySections implements Action { + readonly type = CopySourceActionTypes.UPDATE_RESOLVER_COPY_SECTIONS; constructor(public payload: string[]) { } } export type CopySourceActionUnion = - | CreateProviderCopyRequest - | CreateProviderCopySuccess - | CreateProviderCopyError - | UpdateProviderCopy - | UpdateProviderCopySections; + | CreateResolverCopyRequest + | CreateResolverCopySuccess + | CreateResolverCopyError + | UpdateResolverCopy + | UpdateResolverCopySections; diff --git a/ui/src/app/metadata/resolver/container/blank-provider.component.html b/ui/src/app/metadata/resolver/container/blank-resolver.component.html similarity index 91% rename from ui/src/app/metadata/resolver/container/blank-provider.component.html rename to ui/src/app/metadata/resolver/container/blank-resolver.component.html index 0f37f6b5b..923d35548 100644 --- a/ui/src/app/metadata/resolver/container/blank-provider.component.html +++ b/ui/src/app/metadata/resolver/container/blank-resolver.component.html @@ -24,19 +24,19 @@

    - Service Provider Name is required + Service Resolver Name is required
    diff --git a/ui/src/app/metadata/resolver/container/blank-provider.component.spec.ts b/ui/src/app/metadata/resolver/container/blank-resolver.component.spec.ts similarity index 60% rename from ui/src/app/metadata/resolver/container/blank-provider.component.spec.ts rename to ui/src/app/metadata/resolver/container/blank-resolver.component.spec.ts index 0faafb48a..30f6747ec 100644 --- a/ui/src/app/metadata/resolver/container/blank-provider.component.spec.ts +++ b/ui/src/app/metadata/resolver/container/blank-resolver.component.spec.ts @@ -2,31 +2,31 @@ import { TestBed, ComponentFixture } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { StoreModule, Store, combineReducers } from '@ngrx/store'; -import { NewProviderComponent } from './new-provider.component'; -import * as fromCollections from '../../domain/reducer'; -import { BlankProviderComponent } from './blank-provider.component'; -import { UploadProviderComponent } from './upload-provider.component'; +import { NewResolverComponent } from './new-resolver.component'; +import * as fromResolver from '../reducer'; +import { BlankResolverComponent } from './blank-resolver.component'; +import { UploadResolverComponent } from './upload-resolver.component'; describe('Blank Resolver Page', () => { - let fixture: ComponentFixture; - let store: Store; - let instance: BlankProviderComponent; + let fixture: ComponentFixture; + let store: Store; + let instance: BlankResolverComponent; beforeEach(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, StoreModule.forRoot({ - collections: combineReducers(fromCollections.reducers), + collections: combineReducers(fromResolver.reducers), }), ReactiveFormsModule, ], declarations: [ - BlankProviderComponent + BlankResolverComponent ], }); - fixture = TestBed.createComponent(BlankProviderComponent); + fixture = TestBed.createComponent(BlankResolverComponent); instance = fixture.componentInstance; store = TestBed.get(Store); diff --git a/ui/src/app/metadata/resolver/container/blank-provider.component.ts b/ui/src/app/metadata/resolver/container/blank-resolver.component.ts similarity index 90% rename from ui/src/app/metadata/resolver/container/blank-provider.component.ts rename to ui/src/app/metadata/resolver/container/blank-resolver.component.ts index c29fdc934..b82c8c6fa 100644 --- a/ui/src/app/metadata/resolver/container/blank-provider.component.ts +++ b/ui/src/app/metadata/resolver/container/blank-resolver.component.ts @@ -14,10 +14,10 @@ import { EntityValidators } from '../../domain/service/entity-validators.service import { FileBackedHttpMetadataResolver } from '../../domain/entity/resolver/file-backed-http-metadata-resolver'; @Component({ - selector: 'blank-provider-form', - templateUrl: './blank-provider.component.html' + selector: 'blank-resolver-form', + templateUrl: './blank-resolver.component.html' }) -export class BlankProviderComponent implements OnInit { +export class BlankResolverComponent implements OnInit { @Output() save: EventEmitter = new EventEmitter(); providerForm: FormGroup; diff --git a/ui/src/app/metadata/resolver/container/confirm-copy.component.html b/ui/src/app/metadata/resolver/container/confirm-copy.component.html index eb0b7881e..3939bf935 100644 --- a/ui/src/app/metadata/resolver/container/confirm-copy.component.html +++ b/ui/src/app/metadata/resolver/container/confirm-copy.component.html @@ -27,7 +27,7 @@

  • - + diff --git a/ui/src/app/metadata/resolver/container/confirm-copy.component.ts b/ui/src/app/metadata/resolver/container/confirm-copy.component.ts index 98162ad8b..42bbff14b 100644 --- a/ui/src/app/metadata/resolver/container/confirm-copy.component.ts +++ b/ui/src/app/metadata/resolver/container/confirm-copy.component.ts @@ -4,12 +4,11 @@ import { Store } from '@ngrx/store'; import { Observable } from 'rxjs'; import * as fromProvider from '../reducer'; -import { MetadataResolver } from '../../domain/domain.type'; -import { FormGroup, FormBuilder } from '@angular/forms'; +import { MetadataResolver } from '../../domain/model'; import { ProviderValueEmitter } from '../../domain/service/provider-change-emitter.service'; -import { UpdateProviderCopy } from '../action/copy.action'; +import { UpdateResolverCopy } from '../action/copy.action'; import { map, take } from 'rxjs/operators'; -import { AddProviderRequest } from '../../domain/action/provider-collection.action'; +import { AddResolverRequest } from '../action/collection.action'; @Component({ selector: 'confirm-copy-page', @@ -22,7 +21,7 @@ export class ConfirmCopyComponent { values$: Observable; saving$: Observable; - provider: MetadataResolver; + resolver: MetadataResolver; constructor( private store: Store, @@ -32,12 +31,12 @@ export class ConfirmCopyComponent { this.saving$ = this.store.select(fromProvider.getSaving); this.values$ = this.copy$.pipe(take(1)); - this.valueEmitter.changeEmitted$.subscribe(changes => this.store.dispatch(new UpdateProviderCopy(changes))); + this.valueEmitter.changeEmitted$.subscribe(changes => this.store.dispatch(new UpdateResolverCopy(changes))); - this.copy$.subscribe(p => this.provider = p); + this.copy$.subscribe(p => this.resolver = p); } - onSave(provider: MetadataResolver): void { - this.store.dispatch(new AddProviderRequest(provider)); + onSave(resolver: MetadataResolver): void { + this.store.dispatch(new AddResolverRequest(resolver)); } } /* istanbul ignore next */ diff --git a/ui/src/app/metadata/resolver/container/copy-provider.component.spec.ts b/ui/src/app/metadata/resolver/container/copy-provider.component.spec.ts index 7f6a29d88..18d819a03 100644 --- a/ui/src/app/metadata/resolver/container/copy-provider.component.spec.ts +++ b/ui/src/app/metadata/resolver/container/copy-provider.component.spec.ts @@ -3,21 +3,20 @@ import { TestBed, ComponentFixture } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { StoreModule, Store, combineReducers } from '@ngrx/store'; -import { NewProviderComponent } from './new-provider.component'; -import * as fromCollections from '../../domain/reducer'; +import * as fromCollections from '../reducer'; import * as fromProvider from '../reducer'; -import { CopyProviderComponent } from './copy-provider.component'; -import { SharedModule } from '../../shared/shared.module'; -import { NavigatorService } from '../../core/service/navigator.service'; +import { CopyResolverComponent } from './copy-resolver.component'; +import { SharedModule } from '../../../shared/shared.module'; +import { NavigatorService } from '../../../core/service/navigator.service'; import { I18nTextComponent } from '../../domain/component/i18n-text.component'; @Component({ - template: `` + template: `` }) class TestHostComponent { - @ViewChild(CopyProviderComponent) - public formUnderTest: CopyProviderComponent; + @ViewChild(CopyResolverComponent) + public formUnderTest: CopyResolverComponent; onSave(event: any): void {} } @@ -25,7 +24,7 @@ class TestHostComponent { describe('Copy Resolver Page', () => { let fixture: ComponentFixture; let store: Store; - let instance: CopyProviderComponent; + let instance: CopyResolverComponent; beforeEach(() => { TestBed.configureTestingModule({ @@ -33,13 +32,13 @@ describe('Copy Resolver Page', () => { NoopAnimationsModule, StoreModule.forRoot({ collections: combineReducers(fromCollections.reducers), - provider: combineReducers(fromProvider.reducers) + resolver: combineReducers(fromProvider.reducers) }), ReactiveFormsModule, SharedModule ], declarations: [ - CopyProviderComponent, + CopyResolverComponent, I18nTextComponent, TestHostComponent ], diff --git a/ui/src/app/metadata/resolver/container/copy-provider.component.html b/ui/src/app/metadata/resolver/container/copy-resolver.component.html similarity index 97% rename from ui/src/app/metadata/resolver/container/copy-provider.component.html rename to ui/src/app/metadata/resolver/container/copy-resolver.component.html index 1fd0f0763..62f420492 100644 --- a/ui/src/app/metadata/resolver/container/copy-provider.component.html +++ b/ui/src/app/metadata/resolver/container/copy-resolver.component.html @@ -38,7 +38,7 @@

    - + @@ -50,13 +50,13 @@

    - Service Provider Name is required + Service Resolver Name is required
    diff --git a/ui/src/app/metadata/resolver/container/copy-resolver.component.spec.ts b/ui/src/app/metadata/resolver/container/copy-resolver.component.spec.ts new file mode 100644 index 000000000..18d819a03 --- /dev/null +++ b/ui/src/app/metadata/resolver/container/copy-resolver.component.spec.ts @@ -0,0 +1,77 @@ +import { ViewChild, Component } from '@angular/core'; +import { TestBed, ComponentFixture } from '@angular/core/testing'; +import { ReactiveFormsModule } from '@angular/forms'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { StoreModule, Store, combineReducers } from '@ngrx/store'; +import * as fromCollections from '../reducer'; +import * as fromProvider from '../reducer'; +import { CopyResolverComponent } from './copy-resolver.component'; +import { SharedModule } from '../../../shared/shared.module'; +import { NavigatorService } from '../../../core/service/navigator.service'; +import { I18nTextComponent } from '../../domain/component/i18n-text.component'; + +@Component({ + template: `` +}) +class TestHostComponent { + @ViewChild(CopyResolverComponent) + public formUnderTest: CopyResolverComponent; + + onSave(event: any): void {} +} + +describe('Copy Resolver Page', () => { + let fixture: ComponentFixture; + let store: Store; + let instance: CopyResolverComponent; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, + StoreModule.forRoot({ + collections: combineReducers(fromCollections.reducers), + resolver: combineReducers(fromProvider.reducers) + }), + ReactiveFormsModule, + SharedModule + ], + declarations: [ + CopyResolverComponent, + I18nTextComponent, + TestHostComponent + ], + providers: [ + NavigatorService + ] + }); + + fixture = TestBed.createComponent(TestHostComponent); + instance = fixture.componentInstance.formUnderTest; + store = TestBed.get(Store); + fixture.detectChanges(); + + spyOn(store, 'dispatch').and.callThrough(); + }); + + it('should compile', () => { + expect(fixture).toBeDefined(); + }); + + describe('next method', () => { + it('should dispatch an action to create a copy', () => { + instance.next(); + expect(store.dispatch).toHaveBeenCalled(); + }); + }); + + describe('onChange method', () => { + it('should dispatch an action to update the selected sections to copy', () => { + instance.onChange('relyingPartyOverrides'); + expect(store.dispatch).toHaveBeenCalled(); + instance.onChange('relyingPartyOverrides'); + expect(store.dispatch).toHaveBeenCalled(); + }); + }); +}); diff --git a/ui/src/app/metadata/resolver/container/copy-provider.component.ts b/ui/src/app/metadata/resolver/container/copy-resolver.component.ts similarity index 76% rename from ui/src/app/metadata/resolver/container/copy-provider.component.ts rename to ui/src/app/metadata/resolver/container/copy-resolver.component.ts index 8f83feae1..aec11cdb5 100644 --- a/ui/src/app/metadata/resolver/container/copy-provider.component.ts +++ b/ui/src/app/metadata/resolver/container/copy-resolver.component.ts @@ -10,21 +10,21 @@ import { Store } from '@ngrx/store'; import { startWith, take, last } from 'rxjs/operators'; -import { AddDraftRequest } from '../../domain/action/draft-collection.action'; -import { AddProviderRequest, UploadProviderRequest } from '../../domain/action/provider-collection.action'; -import * as fromCollections from '../../domain/reducer'; +import { AddDraftRequest } from '../action/draft.action'; +import { AddResolverRequest, UploadResolverRequest } from '../action/collection.action'; +import * as fromResolver from '../reducer'; import { EntityValidators } from '../../domain/service/entity-validators.service'; import { SearchIds } from '../action/search.action'; import * as fromProvider from '../reducer'; -import { Resolver } from '../../domain/entity/provider'; -import { CreateProviderCopyRequest, UpdateProviderCopySections} from '../action/copy.action'; +import { FileBackedHttpMetadataResolver } from '../../domain/entity'; +import { CreateResolverCopyRequest, UpdateResolverCopySections } from '../action/copy.action'; @Component({ - selector: 'copy-provider-form', - templateUrl: './copy-provider.component.html' + selector: 'copy-resolver-form', + templateUrl: './copy-resolver.component.html' }) -export class CopyProviderComponent implements OnInit { +export class CopyResolverComponent implements OnInit { @Output() save: EventEmitter = new EventEmitter(); providerForm: FormGroup; @@ -48,10 +48,10 @@ export class CopyProviderComponent implements OnInit { sections$ = of(this.sections); constructor( - private store: Store, + private store: Store, private fb: FormBuilder ) { - this.ids$ = this.store.select(fromCollections.getAllEntityIds); + this.ids$ = this.store.select(fromResolver.getAllEntityIds); this.searchResults$ = this.store.select(fromProvider.getSearchResults); this.selected$ = this.store.select(fromProvider.getSectionsToCopy); @@ -78,23 +78,23 @@ export class CopyProviderComponent implements OnInit { } next(): void { - this.store.dispatch(new CreateProviderCopyRequest({ + this.store.dispatch(new CreateResolverCopyRequest({ ...this.providerForm.value })); } onChange(attr: string): void { this.store.dispatch( - new UpdateProviderCopySections( + new UpdateResolverCopySections( this.selected.indexOf(attr) > -1 ? this.selected.filter(a => a !== attr) : [...this.selected, attr] ) ); } onCheckAll(): void { - this.store.dispatch(new UpdateProviderCopySections(this.sections.map(section => section.property))); + this.store.dispatch(new UpdateResolverCopySections(this.sections.map(section => section.property))); } onCheckNone(event: Event | null = null): void { - this.store.dispatch(new UpdateProviderCopySections([])); + this.store.dispatch(new UpdateResolverCopySections([])); } } diff --git a/ui/src/app/metadata/resolver/container/draft.component.ts b/ui/src/app/metadata/resolver/container/draft.component.ts index 13377a3ee..b1838f18e 100644 --- a/ui/src/app/metadata/resolver/container/draft.component.ts +++ b/ui/src/app/metadata/resolver/container/draft.component.ts @@ -6,22 +6,20 @@ import { distinctUntilChanged, map } from 'rxjs/operators'; import { Store } from '@ngrx/store'; import { NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap'; - -import { MetadataResolver } from '../../domain/model/metadata-provider'; -import { SelectDraft } from '../../domain/action/draft-collection.action'; -import * as fromCollection from '../../domain/reducer'; +import { SelectDraft } from '../action/draft.action'; +import * as fromCollection from '../reducer'; @Component({ - selector: 'provider-page', - templateUrl: './provider.component.html', - styleUrls: ['./provider.component.scss'], + selector: 'resolver-page', + templateUrl: './resolver.component.html', + styleUrls: ['./resolver.component.scss'], providers: [NgbPopoverConfig] }) export class DraftComponent implements OnDestroy { actionsSubscription: Subscription; constructor( - store: Store, + store: Store, route: ActivatedRoute ) { this.actionsSubscription = route.params.pipe( diff --git a/ui/src/app/metadata/resolver/container/editor.component.html b/ui/src/app/metadata/resolver/container/editor.component.html index 5e387e595..3049b01b5 100644 --- a/ui/src/app/metadata/resolver/container/editor.component.html +++ b/ui/src/app/metadata/resolver/container/editor.component.html @@ -1,9 +1,9 @@ -
    -
    +
    +
    - Edit Metadata Source - {{ (provider$ | async).serviceProviderName }} + Edit Metadata Source - {{ (resolver$ | async).serviceProviderName }}
    @@ -83,17 +83,17 @@
    - - - - - - + + + + + +
    - +
    - +
    diff --git a/ui/src/app/metadata/resolver/container/editor.component.ts b/ui/src/app/metadata/resolver/container/editor.component.ts index 22f7d112e..62f32058e 100644 --- a/ui/src/app/metadata/resolver/container/editor.component.ts +++ b/ui/src/app/metadata/resolver/container/editor.component.ts @@ -1,29 +1,23 @@ import { Component, - ViewChild, - AfterViewInit, OnInit, - OnDestroy, - EventEmitter + OnDestroy } from '@angular/core'; import { ActivatedRoute, Router, - CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; -import { FormBuilder, FormGroup, FormControl, Validators, NgModel } from '@angular/forms'; import { Observable, Subject, of } from 'rxjs'; import { combineLatest, map, takeUntil, withLatestFrom, debounceTime, skipWhile, distinctUntilChanged } from 'rxjs/operators'; import { Store } from '@ngrx/store'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap/modal/modal'; -import { MetadataResolver } from '../../domain/model/metadata-provider'; -import * as fromProviders from '../../domain/reducer'; -import { UpdateProviderRequest } from '../../domain/action/provider-collection.action'; -import * as fromEditor from '../reducer'; +import { MetadataResolver } from '../../domain/model/metadata-resolver'; +import * as fromResolver from '../reducer'; +import { UpdateResolverRequest } from '../action/collection.action'; import { ProviderStatusEmitter, ProviderValueEmitter } from '../../domain/service/provider-change-emitter.service'; import { UpdateStatus, UpdateChanges, CancelChanges } from '../action/editor.action'; @@ -49,9 +43,9 @@ export class EditorComponent implements OnInit, OnDestroy { latest: MetadataResolver; latest$: Observable; - provider$: Observable; + resolver$: Observable; providerName$: Observable; - provider: MetadataResolver; + resolver: MetadataResolver; editorIndex$: Observable; editor$: Observable; editor: EditorFlowDefinition[]; @@ -65,35 +59,35 @@ export class EditorComponent implements OnInit, OnDestroy { wizardIsInvalid$: Observable; constructor( - private store: Store, + private store: Store, private route: ActivatedRoute, private router: Router, private statusEmitter: ProviderStatusEmitter, private valueEmitter: ProviderValueEmitter, private modalService: NgbModal ) { - this.provider$ = this.store.select(fromProviders.getSelectedProvider); - this.changes$ = this.store.select(fromEditor.getEditorChanges); + this.resolver$ = this.store.select(fromResolver.getSelectedResolver); + this.changes$ = this.store.select(fromResolver.getEditorChanges); - this.latest$ = this.provider$.pipe( + this.latest$ = this.resolver$.pipe( combineLatest(this.changes$, (base, changes) => Object.assign({}, base, changes)) ); - this.providerName$ = this.provider$.pipe(map(p => p.serviceProviderName)); - this.changes$ = this.store.select(fromEditor.getEditorChanges); + this.providerName$ = this.resolver$.pipe(map(p => p.serviceProviderName)); + this.changes$ = this.store.select(fromResolver.getEditorChanges); this.editorIndex$ = this.route.params.pipe(map(params => Number(params.index))); this.currentPage$ = this.editorIndex$.pipe(map(index => EditorDef.find(r => r.index === index))); this.editor = EditorDef; - this.store.select(fromEditor.getEditorIsSaving).pipe( + this.store.select(fromResolver.getEditorIsSaving).pipe( takeUntil(this.ngUnsubscribe) ).subscribe(saving => this.saving = saving); - this.wizardIsValid$ = this.store.select(fromEditor.getEditorIsValid); + this.wizardIsValid$ = this.store.select(fromResolver.getEditorIsValid); this.wizardIsInvalid$ = this.wizardIsValid$.pipe(map(valid => !valid)); } save(): void { - this.store.dispatch(new UpdateProviderRequest({ + this.store.dispatch(new UpdateResolverRequest({ ...this.latest, ...this.changes, ...this.updates @@ -113,9 +107,9 @@ export class EditorComponent implements OnInit, OnDestroy { } ngOnInit(): void { - this.provider$.pipe( + this.resolver$.pipe( takeUntil(this.ngUnsubscribe) - ).subscribe(provider => this.provider = provider); + ).subscribe(resolver => this.resolver = resolver); this.changes$.pipe( takeUntil(this.ngUnsubscribe) ).subscribe(changes => this.changes = changes); @@ -143,7 +137,7 @@ export class EditorComponent implements OnInit, OnDestroy { skipWhile(() => this.saving) ).subscribe(latest => this.latest = latest); - this.invalidForms$ = this.store.select(fromEditor.getInvalidEditorForms); + this.invalidForms$ = this.store.select(fromResolver.getInvalidEditorForms); this.invalidForms$.pipe( distinctUntilChanged(), @@ -170,7 +164,7 @@ export class EditorComponent implements OnInit, OnDestroy { if (nextState.url.match('edit')) { return of(true); } if (Object.keys({ ...this.changes }).length > 0) { let modal = this.modalService.open(UnsavedDialogComponent); - modal.componentInstance.provider = this.latest; + modal.componentInstance.resolver = this.latest; modal.componentInstance.message = 'editor'; modal.componentInstance.action = new CancelChanges(); modal.result.then( @@ -178,6 +172,6 @@ export class EditorComponent implements OnInit, OnDestroy { () => console.warn('denied') ); } - return this.store.select(fromEditor.getEditorIsSaved); + return this.store.select(fromResolver.getEditorIsSaved); } } diff --git a/ui/src/app/metadata/resolver/container/new-provider.component.spec.ts b/ui/src/app/metadata/resolver/container/new-provider.component.spec.ts deleted file mode 100644 index 0626788e0..000000000 --- a/ui/src/app/metadata/resolver/container/new-provider.component.spec.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { TestBed, ComponentFixture } from '@angular/core/testing'; -import { ReactiveFormsModule } from '@angular/forms'; -import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { RouterModule, Router, ActivatedRoute } from '@angular/router'; -import { APP_BASE_HREF } from '@angular/common'; - -import { StoreModule, Store, combineReducers } from '@ngrx/store'; -import { NewProviderComponent } from './new-provider.component'; - -import { BlankProviderComponent } from './blank-provider.component'; -import { UploadProviderComponent } from './upload-provider.component'; -import { CopyProviderComponent } from './copy-provider.component'; -import { SharedModule } from '../../shared/shared.module'; -import { NavigatorService } from '../../core/service/navigator.service'; -import * as fromProvider from '../reducer'; -import * as fromCollections from '../../domain/reducer'; -import { RouterStub } from '../../../testing/router.stub'; -import { ActivatedRouteStub } from '../../../testing/activated-route.stub'; -import { I18nTextComponent } from '../../domain/component/i18n-text.component'; - -describe('New Resolver Page', () => { - let fixture: ComponentFixture; - let store: Store; - let instance: NewProviderComponent; - let activatedRoute: ActivatedRouteStub = new ActivatedRouteStub(); - activatedRoute.testParamMap = { id: 'foo' }; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [ - NoopAnimationsModule, - StoreModule.forRoot({ - collections: combineReducers(fromCollections.reducers), - provider: combineReducers(fromProvider.reducers) - }), - ReactiveFormsModule, - SharedModule, - RouterModule.forRoot([]) - ], - declarations: [ - NewProviderComponent, - BlankProviderComponent, - UploadProviderComponent, - CopyProviderComponent, - I18nTextComponent - ], - providers: [ - NavigatorService, - { provide: ActivatedRoute, useValue: activatedRoute }, - { provide: APP_BASE_HREF, useValue: '/' } - ] - }); - - fixture = TestBed.createComponent(NewProviderComponent); - instance = fixture.componentInstance; - store = TestBed.get(Store); - - spyOn(store, 'dispatch').and.callThrough(); - }); - - it('should compile', () => { - fixture.detectChanges(); - - expect(fixture).toBeDefined(); - }); -}); diff --git a/ui/src/app/metadata/resolver/container/new-provider.component.ts b/ui/src/app/metadata/resolver/container/new-provider.component.ts deleted file mode 100644 index 4dee1bf02..000000000 --- a/ui/src/app/metadata/resolver/container/new-provider.component.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Component } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; - -@Component({ - selector: 'new-provider-page', - templateUrl: './new-provider.component.html', - styleUrls: ['./new-provider.component.scss'] -}) -export class NewProviderComponent { - constructor() {} -} /* istanbul ignore next */ diff --git a/ui/src/app/metadata/resolver/container/new-provider.component.html b/ui/src/app/metadata/resolver/container/new-resolver.component.html similarity index 91% rename from ui/src/app/metadata/resolver/container/new-provider.component.html rename to ui/src/app/metadata/resolver/container/new-resolver.component.html index 37d373546..48f0b847d 100644 --- a/ui/src/app/metadata/resolver/container/new-provider.component.html +++ b/ui/src/app/metadata/resolver/container/new-resolver.component.html @@ -3,7 +3,7 @@
    - Add a new metadata source + Add a new metadata source
    @@ -13,10 +13,10 @@

    How are you addi
    -
    +