Skip to content

Commit

Permalink
Merge branch 'master' into feature/SHIBUI-814
Browse files Browse the repository at this point in the history
  • Loading branch information
rmathis committed Sep 11, 2018
2 parents 876efe8 + 03b2f50 commit a09f5ad
Show file tree
Hide file tree
Showing 8 changed files with 75 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,18 @@
import com.google.common.collect.Collections2;
import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.component.ComponentSupport;
import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
import net.shibboleth.utilities.java.support.resolver.ResolverException;
import org.opensaml.saml.metadata.resolver.ChainingMetadataResolver;
import org.opensaml.saml.metadata.resolver.MetadataResolver;
import org.opensaml.saml.metadata.resolver.RefreshableMetadataResolver;
import org.opensaml.saml.saml2.metadata.EntityDescriptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
Expand Down Expand Up @@ -49,6 +53,26 @@ public List<MetadataResolver> getResolvers() {
return mutableResolvers;
}

@Override
@Nonnull public Iterable<EntityDescriptor> resolve(@Nullable final CriteriaSet criteria) throws ResolverException {
ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
//Our overridden method uses a collection of mutable resolvers instead of regular resolvers
for (final MetadataResolver resolver : mutableResolvers) {
try {
final Iterable<EntityDescriptor> descriptors = resolver.resolve(criteria);
if (descriptors != null && descriptors.iterator().hasNext()) {
return descriptors;
}
} catch (final ResolverException e) {
log.warn("Error retrieving metadata from resolver of type {}, proceeding to next resolver",
resolver.getClass().getName(), e);
continue;
}
}

return Collections.emptyList();
}

@Override
protected void doInitialize() throws ComponentInitializationException {
super.doInitialize();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import org.springframework.boot.test.web.client.TestRestTemplate
import org.springframework.context.annotation.Bean
import org.springframework.http.HttpEntity
import org.springframework.http.HttpHeaders
import org.springframework.test.annotation.DirtiesContext
import org.springframework.test.context.ActiveProfiles
import spock.lang.Specification
import spock.lang.Unroll
Expand Down Expand Up @@ -150,6 +151,7 @@ class MetadataResolversControllerIntegrationTests extends Specification {
}

@Unroll
@DirtiesContext
def "POST new concrete MetadataResolver of type #resolverType -> /api/MetadataResolvers"(String resolverType) {
given: 'New MetadataResolver JSON representation'
def resolver = generator.buildRandomMetadataResolverOfType(resolverType)
Expand Down
6 changes: 6 additions & 0 deletions ui/src/app/metadata/domain/effect/entity.effect.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { NgbModalStub } from '../../../../testing/modal.stub';
import { EntityAttributesFilterEntity, FileBackedHttpMetadataResolver } from '../entity';

import * as fromRoot from '../../../app.reducer';
import { StoreModule } from '@ngrx/store';

describe('Entity Effects', () => {
let effects: EntityEffects;
let providerService: any;
Expand All @@ -35,6 +38,9 @@ describe('Entity Effects', () => {
},
{ provide: Actions, useFactory: getActions }
],
imports: [
StoreModule.forRoot(fromRoot.reducers)
]
});

effects = TestBed.get(EntityEffects);
Expand Down
33 changes: 24 additions & 9 deletions ui/src/app/metadata/domain/effect/entity.effect.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Injectable } from '@angular/core';
import { Effect, Actions, ofType } from '@ngrx/effects';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { Store } from '@ngrx/store';

import { Observable } from 'rxjs';
import { map, tap } from 'rxjs/operators';
Expand All @@ -12,6 +13,10 @@ import { MetadataTypes } from '../domain.type';
import { EntityIdService } from '../service/entity-id.service';
import * as entityActions from '../action/entity.action';

import * as fromRoot from '../../../app.reducer';

import { AddNotification } from '../../../notification/action/notification.action';
import { Notification, NotificationType } from '../../../notification/model/notification';

@Injectable()
export class EntityEffects {
Expand All @@ -27,20 +32,30 @@ export class EntityEffects {
private actions$: Actions,
private modalService: NgbModal,
private providerService: ResolverService,
private entityService: EntityIdService
private entityService: EntityIdService,
private store: Store<fromRoot.State>
) { }

openModal(prev: { id: string, entity: MetadataEntity }): void {
let { id, entity } = prev,
request: Observable<string> = entity.kind === MetadataTypes.FILTER ?
this.entityService.preview(id) : this.providerService.preview(id);
request.subscribe(xml => {
let modal = this.modalService.open(PreviewDialogComponent, {
size: 'lg',
windowClass: 'modal-xl'
});
modal.componentInstance.entity = entity;
modal.componentInstance.xml = xml;
});
request.subscribe(
xml => {
let modal = this.modalService.open(PreviewDialogComponent, {
size: 'lg',
windowClass: 'modal-xl'
});
modal.componentInstance.entity = entity;
modal.componentInstance.xml = xml;
},
err => {
this.store.dispatch(new AddNotification(new Notification(
NotificationType.Danger,
`Unable to preview entity.`,
8000
)));
}
);
}
} /* istanbul ignore next */
2 changes: 1 addition & 1 deletion ui/src/app/metadata/provider/model/base.provider.form.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export const BaseMetadataProviderEditor: Wizard<BaseMetadataProvider> = {
return err;
},
'/metadataURL': (value, property, form) => {
return !!UriValidator.isUri(value) ? {
return !UriValidator.isUri(value) ? {
code: 'INVALID_URI',
path: `#${property.path}`,
message: 'URI must be valid format.',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<button class="btn btn-link text-right" [ngSwitch]="button.id" (click)="this.action($event)">
<button class="btn btn-link text-right" [ngSwitch]="button.id" (click)="this.action($event)" *ngIf="this.visible">
<i class="fa fa-eye fa-lg text-success" *ngSwitchCase="'preview'"></i>
<i class="fa fa-floppy-o fa-lg text-info" *ngSwitchDefault></i>
</button>
15 changes: 12 additions & 3 deletions ui/src/app/schema-form/widget/button/icon-button.component.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,24 @@
import {
Component, AfterViewInit,
Component, AfterViewInit, ChangeDetectorRef
} from '@angular/core';
import { ButtonWidget } from 'ngx-schema-form';
import { ɵb as ActionRegistry } from 'ngx-schema-form';
import { interval } from 'rxjs';

@Component({
selector: 'icon-button',
templateUrl: `./icon-button.component.html`
})
export class IconButtonComponent extends ButtonWidget implements AfterViewInit {

action = ($event) => {};
visible = false;

constructor(private actionRegistry: ActionRegistry) {
action = (e) => {};

constructor(
private actionRegistry: ActionRegistry,
private changeDetector: ChangeDetectorRef
) {
super();
}

Expand All @@ -24,5 +30,8 @@ export class IconButtonComponent extends ButtonWidget implements AfterViewInit {
}
e.preventDefault();
};

this.visible = !!this.actionRegistry.get(this.button.id);
this.changeDetector.detectChanges();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,11 @@
<li class="list-group-item d-flex justify-content-between align-items-center" *ngFor="let id of targets">
{{ id }}
<span>
<sf-form-element-action *ngFor="let button of getButtonConfig(id)" [button]="button" [formProperty]="formProperty"></sf-form-element-action>
<sf-form-element-action
*ngFor="let button of getButtonConfig(id)"
[button]="button"
[formProperty]="formProperty">
</sf-form-element-action>
<button class="btn btn-link text-right" (click)="removeId(id)">
<i class="fa fa-trash fa-lg text-danger"></i>
</button>
Expand Down

0 comments on commit a09f5ad

Please sign in to comment.