58789: Rest call for creating metadata schemas

This commit is contained in:
Kristof De Langhe
2019-01-22 10:39:32 +01:00
parent 52a440c9f2
commit 73f24a5dc1
6 changed files with 64 additions and 53 deletions

View File

@@ -13,6 +13,6 @@
[formGroup]="formGroup" [formGroup]="formGroup"
[formLayout]="formLayout" [formLayout]="formLayout"
(cancel)="onCancel()" (cancel)="onCancel()"
(submit)="onSubmit()"> (submitForm)="onSubmit()">
</ds-form> </ds-form>

View File

@@ -11,6 +11,8 @@ import { FormBuilderService } from '../../../../shared/form/builder/form-builder
import { FormService } from '../../../../shared/form/form.service'; import { FormService } from '../../../../shared/form/form.service';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
import { AppState } from '../../../../app.reducer'; import { AppState } from '../../../../app.reducer';
import { take } from 'rxjs/operators';
import { MetadataSchema } from '../../../../core/metadata/metadataschema.model';
@Component({ @Component({
selector: 'ds-metadata-schema-form', selector: 'ds-metadata-schema-form',
@@ -95,11 +97,13 @@ export class MetadataSchemaFormComponent implements OnInit {
onSubmit() { onSubmit() {
this.registryService.getActiveMetadataSchema().subscribe( this.registryService.getActiveMetadataSchema().subscribe(
(schema) => { (schema) => {
if (schema == null) { if (schema == null) {
console.log('metadata field to create:'); this.registryService.createMetadataSchema(Object.assign(new MetadataSchema(), {
console.log('prefix: ' + this.name.value); prefix: this.name.value,
console.log('namespace: ' + this.namespace.value); namespace: this.namespace.value
})).subscribe((newSchema) => {
console.log(newSchema);
});
} else { } else {
console.log('metadata field to update:'); console.log('metadata field to update:');
console.log('prefix: ' + this.name.value); console.log('prefix: ' + this.name.value);

View File

@@ -62,6 +62,7 @@ import { NotificationsService } from '../shared/notifications/notifications.serv
import { UploaderService } from '../shared/uploader/uploader.service'; import { UploaderService } from '../shared/uploader/uploader.service';
import { BrowseItemsResponseParsingService } from './data/browse-items-response-parsing-service'; import { BrowseItemsResponseParsingService } from './data/browse-items-response-parsing-service';
import { DSpaceObjectDataService } from './data/dspace-object-data.service'; import { DSpaceObjectDataService } from './data/dspace-object-data.service';
import { MetadataschemaParsingService } from './data/metadataschema-parsing.service';
const IMPORTS = [ const IMPORTS = [
CommonModule, CommonModule,
@@ -121,6 +122,7 @@ const PROVIDERS = [
SubmissionSectionsConfigService, SubmissionSectionsConfigService,
AuthorityService, AuthorityService,
IntegrationResponseParsingService, IntegrationResponseParsingService,
MetadataschemaParsingService,
UploaderService, UploaderService,
UUIDService, UUIDService,
DSpaceObjectDataService, DSpaceObjectDataService,

View File

@@ -11,6 +11,8 @@ import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service';
import { IntegrationResponseParsingService } from '../integration/integration-response-parsing.service'; import { IntegrationResponseParsingService } from '../integration/integration-response-parsing.service';
import { RestRequestMethod } from './rest-request-method'; import { RestRequestMethod } from './rest-request-method';
import { BrowseItemsResponseParsingService } from './browse-items-response-parsing-service'; import { BrowseItemsResponseParsingService } from './browse-items-response-parsing-service';
import { RegistryMetadataschemasResponseParsingService } from './registry-metadataschemas-response-parsing.service';
import { MetadataschemaParsingService } from './metadataschema-parsing.service';
/* tslint:disable:max-classes-per-file */ /* tslint:disable:max-classes-per-file */
@@ -217,6 +219,16 @@ export class IntegrationRequest extends GetRequest {
} }
} }
export class CreateMetadataSchemaRequest extends PostRequest {
constructor(uuid: string, href: string, public body?: any, public options?: HttpOptions) {
super(uuid, href, body, options);
}
getResponseParser(): GenericConstructor<ResponseParsingService> {
return MetadataschemaParsingService;
}
}
export class RequestError extends Error { export class RequestError extends Error {
statusText: string; statusText: string;
} }

View File

@@ -6,7 +6,7 @@ import { PageInfo } from '../shared/page-info.model';
import { MetadataSchema } from '../metadata/metadataschema.model'; import { MetadataSchema } from '../metadata/metadataschema.model';
import { MetadataField } from '../metadata/metadatafield.model'; import { MetadataField } from '../metadata/metadatafield.model';
import { BitstreamFormat } from './mock-bitstream-format.model'; import { BitstreamFormat } from './mock-bitstream-format.model';
import { GetRequest, RestRequest } from '../data/request.models'; import { CreateMetadataSchemaRequest, GetRequest, RestRequest } from '../data/request.models';
import { GenericConstructor } from '../shared/generic-constructor'; import { GenericConstructor } from '../shared/generic-constructor';
import { ResponseParsingService } from '../data/parsing.service'; import { ResponseParsingService } from '../data/parsing.service';
import { RegistryMetadataschemasResponseParsingService } from '../data/registry-metadataschemas-response-parsing.service'; import { RegistryMetadataschemasResponseParsingService } from '../data/registry-metadataschemas-response-parsing.service';
@@ -14,19 +14,20 @@ import { RemoteDataBuildService } from '../cache/builders/remote-data-build.serv
import { RequestService } from '../data/request.service'; import { RequestService } from '../data/request.service';
import { RegistryMetadataschemasResponse } from './registry-metadataschemas-response.model'; import { RegistryMetadataschemasResponse } from './registry-metadataschemas-response.model';
import { import {
ErrorResponse, MetadataschemaSuccessResponse,
RegistryBitstreamformatsSuccessResponse, RegistryBitstreamformatsSuccessResponse,
RegistryMetadatafieldsSuccessResponse, RegistryMetadatafieldsSuccessResponse,
RegistryMetadataschemasSuccessResponse RegistryMetadataschemasSuccessResponse, RestResponse
} from '../cache/response.models'; } from '../cache/response.models';
import { HALEndpointService } from '../shared/hal-endpoint.service'; import { HALEndpointService } from '../shared/hal-endpoint.service';
import { RegistryMetadatafieldsResponseParsingService } from '../data/registry-metadatafields-response-parsing.service'; import { RegistryMetadatafieldsResponseParsingService } from '../data/registry-metadatafields-response-parsing.service';
import { RegistryMetadatafieldsResponse } from './registry-metadatafields-response.model'; import { RegistryMetadatafieldsResponse } from './registry-metadatafields-response.model';
import { isNotEmpty } from '../../shared/empty.util'; import { isNotEmpty, isNotEmptyOperator } from '../../shared/empty.util';
import { URLCombiner } from '../url-combiner/url-combiner'; import { URLCombiner } from '../url-combiner/url-combiner';
import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model'; import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model';
import { RegistryBitstreamformatsResponseParsingService } from '../data/registry-bitstreamformats-response-parsing.service'; import { RegistryBitstreamformatsResponseParsingService } from '../data/registry-bitstreamformats-response-parsing.service';
import { RegistryBitstreamformatsResponse } from './registry-bitstreamformats-response.model'; import { RegistryBitstreamformatsResponse } from './registry-bitstreamformats-response.model';
import { getResponseFromEntry } from '../shared/operators'; import { configureRequest, getResponseFromEntry, getSucceededRemoteData } from '../shared/operators';
import { createSelector, select, Store } from '@ngrx/store'; import { createSelector, select, Store } from '@ngrx/store';
import { AppState } from '../../app.reducer'; import { AppState } from '../../app.reducer';
import { MetadataRegistryState } from '../../+admin/admin-registries/metadata-registry/metadata-registry.reducers'; import { MetadataRegistryState } from '../../+admin/admin-registries/metadata-registry/metadata-registry.reducers';
@@ -40,7 +41,11 @@ import {
MetadataRegistrySelectFieldAction, MetadataRegistrySelectFieldAction,
MetadataRegistrySelectSchemaAction MetadataRegistrySelectSchemaAction
} from '../../+admin/admin-registries/metadata-registry/metadata-registry.actions'; } from '../../+admin/admin-registries/metadata-registry/metadata-registry.actions';
import { flatMap, map, tap } from 'rxjs/operators'; import { distinctUntilChanged, flatMap, map, switchMap, take, tap } from 'rxjs/operators';
import { DSpaceRESTv2Serializer } from '../dspace-rest-v2/dspace-rest-v2.serializer';
import { NormalizedObjectFactory } from '../cache/models/normalized-object-factory';
import { ResourceType } from '../shared/resource-type';
import { NormalizedMetadataSchema } from '../metadata/normalized-metadata-schema.model';
const metadataRegistryStateSelector = (state: AppState) => state.metadataRegistry; const metadataRegistryStateSelector = (state: AppState) => state.metadataRegistry;
const editMetadataSchemaSelector = createSelector(metadataRegistryStateSelector, (metadataState: MetadataRegistryState) => metadataState.editSchema); const editMetadataSchemaSelector = createSelector(metadataRegistryStateSelector, (metadataState: MetadataRegistryState) => metadataState.editSchema);
@@ -288,45 +293,33 @@ export class RegistryService {
return this.store.pipe(select(selectedMetadataFieldsSelector)); return this.store.pipe(select(selectedMetadataFieldsSelector));
} }
// public createMetadataSchema(schema: MetadataSchema): Observable<RemoteData<MetadataSchema>> { public createMetadataSchema(schema: MetadataSchema): Observable<MetadataSchema> {
// const requestId = this.requestService.generateRequestId(); const requestId = this.requestService.generateRequestId();
// const endpoint$ = this.halService.getEndpoint(this.metadataSchemasPath).pipe( const endpoint$ = this.halService.getEndpoint(this.metadataSchemasPath).pipe(
// isNotEmptyOperator(), isNotEmptyOperator(),
// distinctUntilChanged() distinctUntilChanged()
// ); );
//
// const serializedDso = new DSpaceRESTv2Serializer(NormalizedObjectFactory.getConstructor(MetadataSchema.type)).serialize(normalizedObject); const serializedSchema = new DSpaceRESTv2Serializer(NormalizedObjectFactory.getConstructor(ResourceType.MetadataSchema)).serialize(schema as NormalizedMetadataSchema);
//
// const request$ = endpoint$.pipe( const request$ = endpoint$.pipe(
// take(1), take(1),
// map((endpoint: string) => new CreateRequest(requestId, endpoint, JSON.stringify(serializedDso))) map((endpoint: string) => new CreateMetadataSchemaRequest(requestId, endpoint, JSON.stringify(serializedSchema)))
// ); );
//
// // Execute the post request // Execute the post request
// request$.pipe( request$.pipe(
// configureRequest(this.requestService) configureRequest(this.requestService)
// ).subscribe(); ).subscribe();
//
// // Resolve self link for new object // Return newly created schema
// const selfLink$ = this.requestService.getByUUID(requestId).pipe( return this.requestService.getByUUID(requestId).pipe(
// getResponseFromEntry(), getResponseFromEntry(),
// map((response: RestResponse) => { map((response: MetadataschemaSuccessResponse) => {
// if (!response.isSuccessful && response instanceof ErrorResponse) { if (isNotEmpty(response.metadataschema)) {
// this.notificationsService.error('Server Error:', response.errorMessage, new NotificationOptions(-1)); return response.metadataschema;
// } else { }
// return response; })
// } );
// }), }
// map((response: any) => {
// if (isNotEmpty(response.resourceSelfLinks)) {
// return response.resourceSelfLinks[0];
// }
// }),
// distinctUntilChanged()
// ) as Observable<string>;
//
// return selfLink$.pipe(
// switchMap((selfLink: string) => this.findByHref(selfLink)),
// )
// }
} }

View File

@@ -79,7 +79,7 @@ export class FormComponent implements OnDestroy, OnInit {
* An event fired when form is valid and submitted . * An event fired when form is valid and submitted .
* Event's payload equals to the form content. * Event's payload equals to the form content.
*/ */
@Output() submit: EventEmitter<Observable<any>> = new EventEmitter<Observable<any>>(); @Output() submitForm: EventEmitter<Observable<any>> = new EventEmitter<Observable<any>>();
/** /**
* An object of FormGroup type * An object of FormGroup type
@@ -273,7 +273,7 @@ export class FormComponent implements OnDestroy, OnInit {
*/ */
onSubmit(): void { onSubmit(): void {
if (this.getFormGroupValidStatus()) { if (this.getFormGroupValidStatus()) {
this.submit.emit(this.formService.getFormData(this.formId)); this.submitForm.emit(this.formService.getFormData(this.formId));
} else { } else {
this.formService.validateAllFormFields(this.formGroup); this.formService.validateAllFormFields(this.formGroup);
} }