Added JDocs

This commit is contained in:
Kristof De Langhe
2019-02-21 15:09:44 +01:00
parent 05bb5dc70b
commit 3d1e6e63fb
11 changed files with 93 additions and 3 deletions

View File

@@ -32,6 +32,11 @@ const initialState: MetadataRegistryState = {
selectedFields: [] selectedFields: []
}; };
/**
* Reducer that handles MetadataRegistryActions to modify metadata schema and/or field states
* @param state The current MetadataRegistryState
* @param action The MetadataRegistryAction to perform on the state
*/
export function metadataRegistryReducer(state = initialState, action: MetadataRegistryAction): MetadataRegistryState { export function metadataRegistryReducer(state = initialState, action: MetadataRegistryAction): MetadataRegistryState {
switch (action.type) { switch (action.type) {

View File

@@ -95,6 +95,9 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy {
private translateService: TranslateService) { private translateService: TranslateService) {
} }
/**
* Initialize the component, setting up the necessary Models for the dynamic form
*/
ngOnInit() { ngOnInit() {
combineLatest( combineLatest(
this.translateService.get(`${this.messagePrefix}.element`), this.translateService.get(`${this.messagePrefix}.element`),

View File

@@ -33,6 +33,9 @@ export class DSOSuccessResponse extends RestResponse {
} }
} }
/**
* A successful response containing a list of MetadataSchemas wrapped in a RegistryMetadataschemasResponse
*/
export class RegistryMetadataschemasSuccessResponse extends RestResponse { export class RegistryMetadataschemasSuccessResponse extends RestResponse {
constructor( constructor(
public metadataschemasResponse: RegistryMetadataschemasResponse, public metadataschemasResponse: RegistryMetadataschemasResponse,
@@ -43,6 +46,9 @@ export class RegistryMetadataschemasSuccessResponse extends RestResponse {
} }
} }
/**
* A successful response containing a list of MetadataFields wrapped in a RegistryMetadatafieldsResponse
*/
export class RegistryMetadatafieldsSuccessResponse extends RestResponse { export class RegistryMetadatafieldsSuccessResponse extends RestResponse {
constructor( constructor(
public metadatafieldsResponse: RegistryMetadatafieldsResponse, public metadatafieldsResponse: RegistryMetadatafieldsResponse,
@@ -53,6 +59,9 @@ export class RegistryMetadatafieldsSuccessResponse extends RestResponse {
} }
} }
/**
* A successful response containing a list of BitstreamFormats wrapped in a RegistryBitstreamformatsResponse
*/
export class RegistryBitstreamformatsSuccessResponse extends RestResponse { export class RegistryBitstreamformatsSuccessResponse extends RestResponse {
constructor( constructor(
public bitstreamformatsResponse: RegistryBitstreamformatsResponse, public bitstreamformatsResponse: RegistryBitstreamformatsResponse,
@@ -63,6 +72,9 @@ export class RegistryBitstreamformatsSuccessResponse extends RestResponse {
} }
} }
/**
* A successful response containing exactly one MetadataSchema
*/
export class MetadataschemaSuccessResponse extends RestResponse { export class MetadataschemaSuccessResponse extends RestResponse {
constructor( constructor(
public metadataschema: MetadataSchema, public metadataschema: MetadataSchema,
@@ -72,6 +84,9 @@ export class MetadataschemaSuccessResponse extends RestResponse {
} }
} }
/**
* A successful response containing exactly one MetadataField
*/
export class MetadatafieldSuccessResponse extends RestResponse { export class MetadatafieldSuccessResponse extends RestResponse {
constructor( constructor(
public metadatafield: MetadataField, public metadatafield: MetadataField,

View File

@@ -17,6 +17,9 @@ import { HttpClient } from '@angular/common/http';
import { ChangeAnalyzer } from './change-analyzer'; import { ChangeAnalyzer } from './change-analyzer';
import { NormalizedObjectBuildService } from '../cache/builders/normalized-object-build.service'; import { NormalizedObjectBuildService } from '../cache/builders/normalized-object-build.service';
/**
* A service responsible for fetching/sending data from/to the REST API on the metadataschemas endpoint
*/
@Injectable() @Injectable()
export class MetadataSchemaDataService extends DataService<NormalizedMetadataSchema, MetadataSchema> { export class MetadataSchemaDataService extends DataService<NormalizedMetadataSchema, MetadataSchema> {
protected linkPath = 'metadataschemas'; protected linkPath = 'metadataschemas';

View File

@@ -6,6 +6,9 @@ import { Injectable } from '@angular/core';
import { MetadatafieldSuccessResponse, MetadataschemaSuccessResponse, RestResponse } from '../cache/response.models'; import { MetadatafieldSuccessResponse, MetadataschemaSuccessResponse, RestResponse } from '../cache/response.models';
import { MetadataField } from '../metadata/metadatafield.model'; import { MetadataField } from '../metadata/metadatafield.model';
/**
* A service responsible for parsing DSpaceRESTV2Response data related to a single MetadataField to a valid RestResponse
*/
@Injectable() @Injectable()
export class MetadatafieldParsingService implements ResponseParsingService { export class MetadatafieldParsingService implements ResponseParsingService {

View File

@@ -220,6 +220,9 @@ export class IntegrationRequest extends GetRequest {
} }
} }
/**
* Request to create a MetadataSchema
*/
export class CreateMetadataSchemaRequest extends PostRequest { export class CreateMetadataSchemaRequest extends PostRequest {
constructor(uuid: string, href: string, public body?: any, public options?: HttpOptions) { constructor(uuid: string, href: string, public body?: any, public options?: HttpOptions) {
super(uuid, href, body, options); super(uuid, href, body, options);
@@ -230,6 +233,9 @@ export class CreateMetadataSchemaRequest extends PostRequest {
} }
} }
/**
* Request to update a MetadataSchema
*/
export class UpdateMetadataSchemaRequest extends PutRequest { export class UpdateMetadataSchemaRequest extends PutRequest {
constructor(uuid: string, href: string, public body?: any, public options?: HttpOptions) { constructor(uuid: string, href: string, public body?: any, public options?: HttpOptions) {
super(uuid, href, body, options); super(uuid, href, body, options);
@@ -240,6 +246,9 @@ export class UpdateMetadataSchemaRequest extends PutRequest {
} }
} }
/**
* Request to create a MetadataField
*/
export class CreateMetadataFieldRequest extends PostRequest { export class CreateMetadataFieldRequest extends PostRequest {
constructor(uuid: string, href: string, public body?: any, public options?: HttpOptions) { constructor(uuid: string, href: string, public body?: any, public options?: HttpOptions) {
super(uuid, href, body, options); super(uuid, href, body, options);
@@ -250,6 +259,9 @@ export class CreateMetadataFieldRequest extends PostRequest {
} }
} }
/**
* Request to update a MetadataField
*/
export class UpdateMetadataFieldRequest extends PutRequest { export class UpdateMetadataFieldRequest extends PutRequest {
constructor(uuid: string, href: string, public body?: any, public options?: HttpOptions) { constructor(uuid: string, href: string, public body?: any, public options?: HttpOptions) {
super(uuid, href, body, options); super(uuid, href, body, options);

View File

@@ -110,6 +110,11 @@ function resetResponseTimestamps(state: RequestState, action: ResetResponseTimes
return newState; return newState;
} }
/**
* Remove a request from the RequestState
* @param state The current RequestState
* @param action The RequestRemoveAction to perform
*/
function removeRequest(state: RequestState, action: RequestRemoveAction): RequestState { function removeRequest(state: RequestState, action: RequestRemoveAction): RequestState {
const newState = Object.create(null); const newState = Object.create(null);
for (const value in state) { for (const value in state) {

View File

@@ -55,6 +55,13 @@ export class RequestService {
return pathSelector<CoreState, string>(coreSelector, 'index', IndexName.UUID_MAPPING, uuid); return pathSelector<CoreState, string>(coreSelector, 'index', IndexName.UUID_MAPPING, uuid);
} }
/**
* Create a selector that fetches a list of request UUIDs from a given index substate of which the request href
* contains a given substring
* @param selector MemoizedSelector to start from
* @param name The name of the index substate we're fetching request UUIDs from
* @param href Substring that the request's href should contain
*/
private uuidsFromHrefSubstringSelector(selector: MemoizedSelector<any, IndexState>, name: string, href: string): MemoizedSelector<any, string[]> { private uuidsFromHrefSubstringSelector(selector: MemoizedSelector<any, IndexState>, name: string, href: string): MemoizedSelector<any, string[]> {
return createSelector(selector, (state: IndexState) => this.getUuidsFromHrefSubstring(state, name, href)); return createSelector(selector, (state: IndexState) => this.getUuidsFromHrefSubstring(state, name, href));
} }

View File

@@ -65,6 +65,11 @@ function removeFromIndexByValue(state: IndexState, action: RemoveFromIndexByValu
}); });
} }
/**
* Remove values from the IndexState's substate that contain a given substring
* @param state The IndexState to remove values from
* @param action The RemoveFromIndexByValueAction containing the necessary information to remove the values
*/
function removeFromIndexBySubstring(state: IndexState, action: RemoveFromIndexByValueAction): IndexState { function removeFromIndexBySubstring(state: IndexState, action: RemoveFromIndexByValueAction): IndexState {
const subState = state[action.payload.name]; const subState = state[action.payload.name];
const newSubState = Object.create(null); const newSubState = Object.create(null);

View File

@@ -5,17 +5,32 @@ import { CacheableObject } from '../cache/object-cache.reducer';
import { ListableObject } from '../../shared/object-collection/shared/listable-object.model'; import { ListableObject } from '../../shared/object-collection/shared/listable-object.model';
import { MetadataSchema } from './metadataschema.model'; import { MetadataSchema } from './metadataschema.model';
/**
* Normalized class for a DSpace MetadataSchema
*/
@mapsTo(MetadataSchema) @mapsTo(MetadataSchema)
export class NormalizedMetadataSchema extends NormalizedObject implements CacheableObject, ListableObject { export class NormalizedMetadataSchema extends NormalizedObject implements CacheableObject, ListableObject {
/**
* The unique identifier for this schema
*/
@autoserialize @autoserialize
id: number; id: number;
/**
* The REST link to itself
*/
@autoserialize @autoserialize
self: string; self: string;
/**
* A unique prefix that defines this schema
*/
@autoserialize @autoserialize
prefix: string; prefix: string;
/**
* The namespace for this schema
*/
@autoserialize @autoserialize
namespace: string; namespace: string;
} }

View File

@@ -7,10 +7,11 @@ 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 { import {
CreateMetadataFieldRequest,
CreateMetadataSchemaRequest, CreateMetadataSchemaRequest,
DeleteRequest, DeleteRequest,
GetRequest, GetRequest,
RestRequest, RestRequest, UpdateMetadataFieldRequest,
UpdateMetadataSchemaRequest UpdateMetadataSchemaRequest
} from '../data/request.models'; } from '../data/request.models';
import { GenericConstructor } from '../shared/generic-constructor'; import { GenericConstructor } from '../shared/generic-constructor';
@@ -314,6 +315,14 @@ export class RegistryService {
return this.store.pipe(select(selectedMetadataFieldsSelector)); return this.store.pipe(select(selectedMetadataFieldsSelector));
} }
/**
* Create or Update a MetadataSchema
* If the MetadataSchema contains an id, it is assumed the schema already exists and is updated instead
* Since creating or updating is nearly identical, the only real difference is the request (and slight difference in endpoint):
* - On creation, a CreateMetadataSchemaRequest is used
* - On update, a UpdateMetadataSchemaRequest is used
* @param schema The MetadataSchema to create or update
*/
public createOrUpdateMetadataSchema(schema: MetadataSchema): Observable<MetadataSchema> { public createOrUpdateMetadataSchema(schema: MetadataSchema): Observable<MetadataSchema> {
const isUpdate = hasValue(schema.id); const isUpdate = hasValue(schema.id);
const requestId = this.requestService.generateRequestId(); const requestId = this.requestService.generateRequestId();
@@ -377,6 +386,14 @@ export class RegistryService {
) )
} }
/**
* Create or Update a MetadataField
* If the MetadataField contains an id, it is assumed the field already exists and is updated instead
* Since creating or updating is nearly identical, the only real difference is the request (and slight difference in endpoint):
* - On creation, a CreateMetadataFieldRequest is used
* - On update, a UpdateMetadataFieldRequest is used
* @param field The MetadataField to create or update
*/
public createOrUpdateMetadataField(field: MetadataField): Observable<MetadataField> { public createOrUpdateMetadataField(field: MetadataField): Observable<MetadataField> {
const isUpdate = hasValue(field.id); const isUpdate = hasValue(field.id);
const requestId = this.requestService.generateRequestId(); const requestId = this.requestService.generateRequestId();
@@ -394,9 +411,9 @@ export class RegistryService {
let headers = new HttpHeaders(); let headers = new HttpHeaders();
headers = headers.append('Content-Type', 'application/json'); headers = headers.append('Content-Type', 'application/json');
options.headers = headers; options.headers = headers;
return new UpdateMetadataSchemaRequest(requestId, endpoint, JSON.stringify(field), options); return new UpdateMetadataFieldRequest(requestId, endpoint, JSON.stringify(field), options);
} else { } else {
return new CreateMetadataSchemaRequest(requestId, endpoint, JSON.stringify(field)); return new CreateMetadataFieldRequest(requestId, endpoint, JSON.stringify(field));
} }
}) })
); );