diff --git a/client/src/app/admin/instance/dataset/components/attribute/detail/index.ts b/client/src/app/admin/instance/dataset/components/attribute/detail/index.ts index 4db9273e1ec22368184b553c46b2f8f4a5433a02..d1581ea5b138546e26d7eba21a7cd6d624ce1612 100644 --- a/client/src/app/admin/instance/dataset/components/attribute/detail/index.ts +++ b/client/src/app/admin/instance/dataset/components/attribute/detail/index.ts @@ -9,10 +9,8 @@ import { TableDetailComponent } from './table-detail.component'; import { TrDetailComponent } from './tr-detail.component'; -import { detailRenderers } from './renderers'; export const detailComponents = [ TableDetailComponent, - TrDetailComponent, - detailRenderers + TrDetailComponent ]; diff --git a/client/src/app/admin/instance/dataset/components/attribute/detail/renderers/index.ts b/client/src/app/admin/instance/dataset/components/attribute/detail/renderers/index.ts deleted file mode 100644 index 5d88e779669df93b295514cb7302eede2baab9ad..0000000000000000000000000000000000000000 --- a/client/src/app/admin/instance/dataset/components/attribute/detail/renderers/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * This file is part of Anis Client. - * - * @copyright Laboratoire d'Astrophysique de Marseille / CNRS - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -import { SpectraGraphRendererComponent } from './spectra-graph-renderer.component'; - -export const detailRenderers = [ - SpectraGraphRendererComponent -]; - -export * from './renderer-detail-form-factory'; - -export const rendererDetailList = [ - { label: 'Image', value: 'img', display: 10 }, - { label: 'Spectra graph', value: 'spectra_graph', display: 20 } -]; diff --git a/client/src/app/admin/instance/dataset/components/attribute/detail/renderers/renderer-detail-form-factory.ts b/client/src/app/admin/instance/dataset/components/attribute/detail/renderers/renderer-detail-form-factory.ts deleted file mode 100644 index 5108b97da5409e606ea69db631ba93ad80f32454..0000000000000000000000000000000000000000 --- a/client/src/app/admin/instance/dataset/components/attribute/detail/renderers/renderer-detail-form-factory.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * This file is part of Anis Client. - * - * @copyright Laboratoire d'Astrophysique de Marseille / CNRS - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -import { FormControl } from "@angular/forms"; - -export abstract class RendererDetailFormFactory { - static create(renderer: string) { - switch (renderer) { - case 'spectra_graph': - return { - z: new FormControl(null) - }; - default: - return {}; - } - } -} diff --git a/client/src/app/admin/instance/dataset/components/attribute/detail/renderers/spectra-graph-renderer.component.html b/client/src/app/admin/instance/dataset/components/attribute/detail/renderers/spectra-graph-renderer.component.html deleted file mode 100644 index 0769a05e96659585e1c99f879f98f9e7256c51c8..0000000000000000000000000000000000000000 --- a/client/src/app/admin/instance/dataset/components/attribute/detail/renderers/spectra-graph-renderer.component.html +++ /dev/null @@ -1,10 +0,0 @@ -<ng-container [formGroup]="form"> - <div class="form-group row align-items-center"> - <label for="{{id}}_z" class="col-md-5 col-sm-12 col-form-label">Attribute z:</label> - <div class="col-md-7 col-sm-12"> - <select class="form-control" name="{{id}}_z" formControlName="z"> - <option *ngFor="let attribute of attributeList" [ngValue]="attribute.id">{{ attribute.form_label }}</option> - </select> - </div> - </div> -</ng-container> \ No newline at end of file diff --git a/client/src/app/admin/instance/dataset/components/attribute/detail/renderers/spectra-graph-renderer.component.ts b/client/src/app/admin/instance/dataset/components/attribute/detail/renderers/spectra-graph-renderer.component.ts deleted file mode 100644 index fa350b065baa875530522459154044c58e830c58..0000000000000000000000000000000000000000 --- a/client/src/app/admin/instance/dataset/components/attribute/detail/renderers/spectra-graph-renderer.component.ts +++ /dev/null @@ -1,24 +0,0 @@ -/** - * This file is part of Anis Client. - * - * @copyright Laboratoire d'Astrophysique de Marseille / CNRS - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -import { Component, Input, ChangeDetectionStrategy } from '@angular/core'; -import { FormGroup } from '@angular/forms'; - -import { Attribute } from 'src/app/metamodel/models'; - -@Component({ - selector: 'app-spectra-graph-renderer', - templateUrl: 'spectra-graph-renderer.component.html', - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class SpectraGraphRendererComponent { - @Input() id: number; - @Input() form: FormGroup; - @Input() attributeList: Attribute[]; -} diff --git a/client/src/app/admin/instance/dataset/components/attribute/detail/table-detail.component.html b/client/src/app/admin/instance/dataset/components/attribute/detail/table-detail.component.html index 6a1a4834269ca803d35809a4be79f00d58d4b752..ae53a43249c09f7380c6d5f6537b6ea13dbaf4bf 100644 --- a/client/src/app/admin/instance/dataset/components/attribute/detail/table-detail.component.html +++ b/client/src/app/admin/instance/dataset/components/attribute/detail/table-detail.component.html @@ -3,8 +3,8 @@ <thead> <tr> <th scope="col" style="min-width:150px">Name</th> - <th scope="col" style="width:50px">Visible</th> - <th scope="col" style="min-width:140px;width:140px;">Display detail</th> + <th scope="col" style="min-width:150px">Output category</th> + <th scope="col" style="min-width:100px;width:100px;">Display</th> <th scope="col" style="width:50px">Save</th> </tr> </thead> diff --git a/client/src/app/admin/instance/dataset/components/attribute/detail/tr-detail.component.html b/client/src/app/admin/instance/dataset/components/attribute/detail/tr-detail.component.html index 1699cd9ce954c947b21965848991582e885b9a3e..ecb4ec71877ba64a3137d3bd0bcdc813d8c680b0 100644 --- a/client/src/app/admin/instance/dataset/components/attribute/detail/tr-detail.component.html +++ b/client/src/app/admin/instance/dataset/components/attribute/detail/tr-detail.component.html @@ -3,10 +3,13 @@ <input type="text" class="form-control" name="name" formControlName="name"> </td> <td> - <input type="checkbox" class="form-control" name="detail" formControlName="detail"> + <select class="form-control" name="id_detail_output_category" (change)="detailOutputCategoryOnChange()" formControlName="id_detail_output_category"> + <option value=""></option> + <option *ngFor="let category of outputCategoryList" [ngValue]="category.id">{{category.label}}</option> + </select> </td> <td> - <input *ngIf="form.controls.detail.value" type="number" class="form-control" name="display_detail" formControlName="display_detail"> + <input *ngIf="form.controls.id_detail_output_category.value" type="number" class="form-control" name="detail_display" formControlName="detail_display"> </td> <td class="text-center align-middle"> <button (click)="submit()" [disabled]="form.invalid || form.pristine" class="btn btn-outline-primary"> diff --git a/client/src/app/admin/instance/dataset/components/attribute/detail/tr-detail.component.ts b/client/src/app/admin/instance/dataset/components/attribute/detail/tr-detail.component.ts index c54af8154d9be4dd65631ac9702d30ead8bc6eda..d8e82e1779660878b2abbcb775a4e36924daa10d 100644 --- a/client/src/app/admin/instance/dataset/components/attribute/detail/tr-detail.component.ts +++ b/client/src/app/admin/instance/dataset/components/attribute/detail/tr-detail.component.ts @@ -10,8 +10,7 @@ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, OnInit } from '@angular/core'; import { FormControl, FormGroup } from '@angular/forms'; -import { Attribute } from 'src/app/metamodel/models'; -import { RendererDetailFormFactory, rendererDetailList } from './renderers'; +import { Attribute, OutputCategory } from 'src/app/metamodel/models'; @Component({ selector: '[detail]', @@ -21,14 +20,13 @@ import { RendererDetailFormFactory, rendererDetailList } from './renderers'; }) export class TrDetailComponent implements OnInit { @Input() attribute: Attribute - @Input() attributeList: Attribute[]; + @Input() outputCategoryList: OutputCategory[]; @Output() save: EventEmitter<Attribute> = new EventEmitter(); - rendererDetailList = rendererDetailList; - public form = new FormGroup({ name: new FormControl({ value: '', disabled: true }), - detail: new FormControl() + id_detail_output_category: new FormControl(), + detail_display: new FormControl() }); ngOnInit() { @@ -37,6 +35,12 @@ export class TrDetailComponent implements OnInit { } } + detailOutputCategoryOnChange(): void { + if (this.form.controls.id.value === '') { + this.form.controls.id_detail_output_category.setValue(null); + } + } + submit(): void { this.save.emit({ ...this.attribute, diff --git a/client/src/app/admin/instance/dataset/components/attribute/general/add-attribute.component.ts b/client/src/app/admin/instance/dataset/components/attribute/general/add-attribute.component.ts index 32625a6e57f5aabdac3317ff36d1fe6101c0ddd2..c1f4241c0dd4a8f7130aa5dd27166ab2fa35a3a2 100644 --- a/client/src/app/admin/instance/dataset/components/attribute/general/add-attribute.component.ts +++ b/client/src/app/admin/instance/dataset/components/attribute/general/add-attribute.component.ts @@ -69,8 +69,7 @@ export class AddAttributeComponent { renderer_config: null, order_by: true, archive: false, - detail: true, - display_detail: id * 10, + detail_display: id * 10, options: null, vo_utype: null, vo_ucd: null, @@ -79,7 +78,8 @@ export class AddAttributeComponent { vo_datatype: null, vo_size: null, id_criteria_family: null, - id_output_category: null + id_output_category: null, + id_detail_output_category: null }) } } diff --git a/client/src/app/admin/instance/dataset/components/detail-page/detail-config-form.component.ts b/client/src/app/admin/instance/dataset/components/detail-page/detail-config-form.component.ts index 71a3b134c9361ff5c4e5fd1295183b3468a977f0..a0b257653e8489688f7067296111dfb82fd2702d 100644 --- a/client/src/app/admin/instance/dataset/components/detail-page/detail-config-form.component.ts +++ b/client/src/app/admin/instance/dataset/components/detail-page/detail-config-form.component.ts @@ -19,7 +19,6 @@ import { Attribute, DetailConfig } from 'src/app/metamodel/models'; }) export class DetailConfigFormComponent implements OnInit { @Input() detailConfig: DetailConfig; - @Input() attributeList: Attribute[]; @Output() onSubmit: EventEmitter<DetailConfig> = new EventEmitter(); public form = new FormGroup({ diff --git a/client/src/app/admin/instance/dataset/components/detail-page/detail-config.component.html b/client/src/app/admin/instance/dataset/components/detail-page/detail-config.component.html index 4b54881f89b58df7b90bf6685af60c349aaf8807..57ad9f57db4d0128c7b7f6469cbcdd33610eeb6c 100644 --- a/client/src/app/admin/instance/dataset/components/detail-page/detail-config.component.html +++ b/client/src/app/admin/instance/dataset/components/detail-page/detail-config.component.html @@ -1,6 +1,5 @@ <app-detail-config-form [detailConfig]="detailConfig" - [attributeList]="attributeList" (onSubmit)="save($event)" #formDetailConfig> <button [disabled]="!formDetailConfig.form.valid || formDetailConfig.form.pristine" type="submit" class="btn btn-primary"> diff --git a/client/src/app/admin/instance/dataset/components/detail-page/detail-config.component.ts b/client/src/app/admin/instance/dataset/components/detail-page/detail-config.component.ts index 88a8574fa4a386317b5a6a32b8714d7050cfbf5a..0d46c4f1a7f131e8442b18454475b3e1daed43eb 100644 --- a/client/src/app/admin/instance/dataset/components/detail-page/detail-config.component.ts +++ b/client/src/app/admin/instance/dataset/components/detail-page/detail-config.component.ts @@ -9,7 +9,7 @@ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core'; -import { Attribute, DetailConfig, Dataset } from 'src/app/metamodel/models'; +import { DetailConfig } from 'src/app/metamodel/models'; @Component({ selector: 'app-detail-config', @@ -17,9 +17,7 @@ import { Attribute, DetailConfig, Dataset } from 'src/app/metamodel/models'; changeDetection: ChangeDetectionStrategy.OnPush }) export class DetailConfigComponent { - @Input() dataset: Dataset; @Input() detailConfig: DetailConfig; - @Input() attributeList: Attribute[]; @Output() addDetailConfig: EventEmitter<DetailConfig> = new EventEmitter(); @Output() editDetailConfig: EventEmitter<DetailConfig> = new EventEmitter(); diff --git a/client/src/app/admin/instance/dataset/containers/configure-dataset.component.html b/client/src/app/admin/instance/dataset/containers/configure-dataset.component.html index d07e62ae143269b8379ad4ec1d754a4321bed0ce..bc48f6ba520392a1e1e886e0125b305e847d8eb8 100644 --- a/client/src/app/admin/instance/dataset/containers/configure-dataset.component.html +++ b/client/src/app/admin/instance/dataset/containers/configure-dataset.component.html @@ -4,6 +4,7 @@ || (outputFamilyListIsLoading | async) || (outputCategoryListIsLoading | async) || (imageListIsLoading | async) + || (detailConfigIsLoading | async) || (coneSearchConfigIsLoading | async)"> </app-spinner> @@ -13,6 +14,7 @@ && (outputFamilyListIsLoaded | async) && (outputCategoryListIsLoaded | async) && (imageListIsLoaded | async) + && (detailConfigIsLoaded | async) && (coneSearchConfigIsLoaded | async)" class="container-fluid"> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> @@ -127,7 +129,7 @@ <tr *ngFor="let attribute of (attributeList | async)" detail [attribute]="attribute" - [attributeList]="attributeList | async" + [outputCategoryList]="outputCategoryList | async" (save)="editAttribute($event)"> </tr> </app-table-detail> @@ -200,9 +202,7 @@ </app-cone-search-config> <app-detail-config *ngSwitchCase="'detail-page'" - [dataset]="dataset | async" [detailConfig]="detailConfig | async" - [attributeList]="attributeList | async" (addDetailConfig)="addDetailConfig($event)" (editDetailConfig)="editDetailConfig($event)"> </app-detail-config> diff --git a/client/src/app/instance/search/components/detail/object-data.component.html b/client/src/app/instance/search/components/detail/object-data.component.html index e2f47787b81757cc0b1d7effa1fb3ca4b3aabfcb..e9411be0d29bfa4d8e4d63c8f8deae62fa374213 100644 --- a/client/src/app/instance/search/components/detail/object-data.component.html +++ b/client/src/app/instance/search/components/detail/object-data.component.html @@ -23,11 +23,11 @@ {{ family.label }} <span *ngIf="ag.isOpen"> - <span class="fas fa-chevron-up"></span> - </span> + <span class="fas fa-chevron-up"></span> + </span> <span *ngIf="!ag.isOpen"> - <span class="fas fa-chevron-down"></span> - </span> + <span class="fas fa-chevron-down"></span> + </span> </span> </button> diff --git a/client/src/app/instance/search/components/detail/object-data.component.ts b/client/src/app/instance/search/components/detail/object-data.component.ts index a35db493695fd77ce979caf4a44e24cfe2f9310c..34068a6fed49ff8445dbbdee0cd78fae57ed0ed5 100644 --- a/client/src/app/instance/search/components/detail/object-data.component.ts +++ b/client/src/app/instance/search/components/detail/object-data.component.ts @@ -52,7 +52,7 @@ export class ObjectDataComponent { */ getAttributesVisibleByCategory(idCategory: number): Attribute[] { return this.attributeList - .filter(a => a.detail) + .filter(a => a.id_detail_output_category) .filter(a => a.id_output_category === idCategory); } @@ -62,7 +62,7 @@ export class ObjectDataComponent { * @return Attribute[] */ getAttributesVisible(): Attribute[] { - return this.attributeList.filter(a => a.detail); + return this.attributeList.filter(a => a.id_detail_output_category); } /** diff --git a/client/src/app/instance/search/containers/detail.component.html b/client/src/app/instance/search/containers/detail.component.html deleted file mode 100644 index 3ceca60ed2a736979571553b040484ca49c9861d..0000000000000000000000000000000000000000 --- a/client/src/app/instance/search/containers/detail.component.html +++ /dev/null @@ -1,40 +0,0 @@ -<div class="container-fluid"> - <div *ngIf="!(pristine | async)" class="row mt-2 mb-2 justify-content-between"> - <div class="col"> - <button (click)="goBackToResult()" class="btn btn-outline-secondary"> - <span class="fa fa-backward"></span> Back to search results - </button> - </div> - </div> - <app-spinner *ngIf="(attributeListIsLoading | async) - || (outputFamilyListIsLoading | async) - || (outputCategoryListIsLoading | async) - || (objectIsLoading | async)"> - </app-spinner> - <ng-container *ngIf="(attributeListIsLoaded | async) - && (outputFamilyListIsLoaded | async) - && (outputCategoryListIsLoaded | async) - && (objectIsLoaded | async)" [ngSwitch]="getDetailComponent(attributeList | async)"> - <app-spectra-object *ngSwitchCase="'spectra'" - [datasetSelected]="datasetSelected | async" - [outputFamilyList]="outputFamilyList | async" - [outputCategoryList]="outputCategoryList | async" - [attributeList]="attributeList | async | sortByDetailDisplay" - [object]="object | async" - [spectraCSV]="spectraCSV | async" - [spectraIsLoading]="spectraIsLoading | async" - [spectraIsLoaded]="spectraIsLoaded | async" - (getSpectraCSV)="getSpectraCSV($event)"> - </app-spectra-object> - <app-default-object *ngSwitchCase="'default'" - [datasetSelected]="datasetSelected | async" - [outputFamilyList]="outputFamilyList | async" - [outputCategoryList]="outputCategoryList | async" - [attributeList]="attributeList | async | sortByDetailDisplay" - [object]="object | async"> - </app-default-object> - <div *ngSwitchDefault> - Detail component <span class="font-weight-bold">{{ getDetailComponent(attributeList | async) }}</span> not supported ! - </div> - </ng-container> -</div> diff --git a/client/src/app/instance/search/detail/components/detail-content.component.html b/client/src/app/instance/search/detail/components/detail-content.component.html new file mode 100644 index 0000000000000000000000000000000000000000..daab406d8b2701a0898d8a6be4ed2e712f7af25e --- /dev/null +++ b/client/src/app/instance/search/detail/components/detail-content.component.html @@ -0,0 +1 @@ +<ngx-dynamic-hooks [content]="detailConfig.content" [context]="getContext()"></ngx-dynamic-hooks> \ No newline at end of file diff --git a/client/src/app/instance/search/detail/components/detail-content.component.ts b/client/src/app/instance/search/detail/components/detail-content.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..4e1adf8332d5244eb2fc820c3e0be0d31375c744 --- /dev/null +++ b/client/src/app/instance/search/detail/components/detail-content.component.ts @@ -0,0 +1,37 @@ +/** + * This file is part of Anis Client. + * + * @copyright Laboratoire d'Astrophysique de Marseille / CNRS + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import { Component, Input } from '@angular/core'; + +import { DetailConfig, Attribute, OutputFamily, OutputCategory} from 'src/app/metamodel/models'; + +/** + * @class + * @classdesc Detail content component. + */ +@Component({ + selector: 'app-detail-content', + templateUrl: 'detail-content.component.html' +}) +export class DetailContentComponent { + @Input() detailConfig: DetailConfig; + @Input() object: any; + @Input() attributeList: Attribute[]; + @Input() outputFamilyList: OutputFamily[]; + @Input() outputCategoryList: OutputCategory[]; + + getContext() { + return { + object: this.object, + attributeList: this.attributeList, + outputFamilyList: this.outputFamilyList, + outputCategoryList: this.outputCategoryList + }; + } +} diff --git a/client/src/app/instance/search/detail/components/index.ts b/client/src/app/instance/search/detail/components/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..0dcbf58e5e5f4fdf19dfc73aac0bc8039807a695 --- /dev/null +++ b/client/src/app/instance/search/detail/components/index.ts @@ -0,0 +1,14 @@ +/** + * This file is part of Anis Client. + * + * @copyright Laboratoire d'Astrophysique de Marseille / CNRS + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import { DetailContentComponent } from './detail-content.component'; + +export const dummiesComponents = [ + DetailContentComponent +]; diff --git a/client/src/app/instance/search/detail/containers/detail.component.html b/client/src/app/instance/search/detail/containers/detail.component.html new file mode 100644 index 0000000000000000000000000000000000000000..9fc60ad458ae38a7d942436ea49e260cb235ec21 --- /dev/null +++ b/client/src/app/instance/search/detail/containers/detail.component.html @@ -0,0 +1,28 @@ +<div class="container-fluid"> + <div *ngIf="!(pristine | async)" class="row mt-2 mb-2 justify-content-between"> + <div class="col"> + <button (click)="goBackToResult()" class="btn btn-outline-secondary"> + <span class="fa fa-backward"></span> Back to search results + </button> + </div> + </div> + <app-spinner *ngIf="(detailConfigIsLoading | async) + || (attributeListIsLoading | async) + || (outputFamilyListIsLoading | async) + || (outputCategoryListIsLoading | async) + || (objectIsLoading | async)"> + </app-spinner> + <ng-container *ngIf="(detailConfigIsLoaded | async) + && (attributeListIsLoaded | async) + && (outputFamilyListIsLoaded | async) + && (outputCategoryListIsLoaded | async) + && (objectIsLoaded | async)"> + <app-detail-content + [detailConfig]="detailConfig | async" + [object]="object | async" + [attributeList]="attributeList | async" + [outputFamilyList]="outputFamilyList | async" + [outputCategoryList]="outputCategoryList | async"> + </app-detail-content> + </ng-container> +</div> diff --git a/client/src/app/instance/search/containers/detail.component.spec.ts b/client/src/app/instance/search/detail/containers/detail.component.spec.ts similarity index 100% rename from client/src/app/instance/search/containers/detail.component.spec.ts rename to client/src/app/instance/search/detail/containers/detail.component.spec.ts diff --git a/client/src/app/instance/search/containers/detail.component.ts b/client/src/app/instance/search/detail/containers/detail.component.ts similarity index 87% rename from client/src/app/instance/search/containers/detail.component.ts rename to client/src/app/instance/search/detail/containers/detail.component.ts index 78d4b5f69732f88b4fa2cff913292cf63a78dc27..e314fe0fb911448897f565494f78ae6a34b5597e 100644 --- a/client/src/app/instance/search/containers/detail.component.ts +++ b/client/src/app/instance/search/detail/containers/detail.component.ts @@ -13,7 +13,7 @@ import { Location } from '@angular/common'; import { Store } from '@ngrx/store'; import { Observable, Subscription } from 'rxjs'; -import { Attribute, OutputCategory, OutputFamily, DetailLinkRendererConfig } from 'src/app/metamodel/models'; +import { Attribute, OutputCategory, OutputFamily, DetailLinkRendererConfig, DetailConfig } from 'src/app/metamodel/models'; import * as detailActions from 'src/app/instance/store/actions/detail.actions'; import * as detailSelector from 'src/app/instance/store/selectors/detail.selector'; import * as datasetSelector from 'src/app/metamodel/selectors/dataset.selector'; @@ -22,6 +22,8 @@ import * as outputFamilySelector from 'src/app/metamodel/selectors/output-family import * as outputCategorySelector from 'src/app/metamodel/selectors/output-category.selector'; import * as attributeSelector from 'src/app/metamodel/selectors/attribute.selector'; import * as searchActions from 'src/app/instance/store/actions/search.actions'; +import * as detailConfigActions from 'src/app/metamodel/actions/detail-config.actions'; +import * as detailConfigSelector from 'src/app/metamodel/selectors/detail-config.selector'; /** * @class @@ -37,6 +39,9 @@ import * as searchActions from 'src/app/instance/store/actions/search.actions'; export class DetailComponent implements OnInit, OnDestroy { public datasetSelected: Observable<string>; public pristine: Observable<boolean>; + public detailConfig: Observable<DetailConfig>; + public detailConfigIsLoading: Observable<boolean>; + public detailConfigIsLoaded: Observable<boolean>; public attributeList: Observable<Attribute[]>; public attributeListIsLoading: Observable<boolean>; public attributeListIsLoaded: Observable<boolean>; @@ -58,6 +63,9 @@ export class DetailComponent implements OnInit, OnDestroy { constructor(private location: Location, private store: Store<{ }>) { this.datasetSelected = store.select(datasetSelector.selectDatasetNameByRoute); this.pristine = store.select(searchSelector.selectPristine); + this.detailConfig = store.select(detailConfigSelector.selectDetailConfig); + this.detailConfigIsLoading = store.select(detailConfigSelector.selectDetailConfigIsLoading); + this.detailConfigIsLoaded = store.select(detailConfigSelector.selectDetailConfigIsLoaded); this.attributeList = store.select(attributeSelector.selectAllAttributes); this.attributeListIsLoading = store.select(attributeSelector.selectAttributeListIsLoading); this.attributeListIsLoaded = store.select(attributeSelector.selectAttributeListIsLoaded); @@ -85,6 +93,7 @@ export class DetailComponent implements OnInit, OnDestroy { Promise.resolve(null).then(() => this.store.dispatch(detailActions.retrieveObject())); } }); + Promise.resolve(null).then(() => this.store.dispatch(detailConfigActions.loadDetailConfig())); } /** diff --git a/client/src/app/instance/search/detail/detail-routing.module.ts b/client/src/app/instance/search/detail/detail-routing.module.ts new file mode 100644 index 0000000000000000000000000000000000000000..0b32f4090e5baf2dfedf5abf50f6e8a391be6add --- /dev/null +++ b/client/src/app/instance/search/detail/detail-routing.module.ts @@ -0,0 +1,32 @@ +/** + * This file is part of Anis Client. + * + * @copyright Laboratoire d'Astrophysique de Marseille / CNRS + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { DetailComponent } from './containers/detail.component'; + +const routes: Routes = [ + { path: '', redirectTo: ':dname/:id', pathMatch: 'full' }, + { path: ':dname/:id', component: DetailComponent } +]; + +/** + * @class + * @classdesc Search routing module. + */ + @NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class DetailRoutingModule { } + +export const routedComponents = [ + DetailComponent +]; diff --git a/client/src/app/instance/search/detail/detail.module.ts b/client/src/app/instance/search/detail/detail.module.ts new file mode 100644 index 0000000000000000000000000000000000000000..a23e0508d92267a54b2693335b43f0715e8c0e49 --- /dev/null +++ b/client/src/app/instance/search/detail/detail.module.ts @@ -0,0 +1,32 @@ +/** + * This file is part of Anis Client. + * + * @copyright Laboratoire d'Astrophysique de Marseille / CNRS + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import { NgModule } from '@angular/core'; + +import { SharedModule } from 'src/app/shared/shared.module'; +import { DynamicContentModule } from './dynamic-content/dynamic-content.module'; +import { DetailRoutingModule, routedComponents } from './detail-routing.module'; +import { dummiesComponents } from './components'; + +/** + * @class + * @classdesc Search module. + */ +@NgModule({ + imports: [ + SharedModule, + DynamicContentModule, + DetailRoutingModule + ], + declarations: [ + routedComponents, + dummiesComponents + ] +}) +export class DetailModule { } diff --git a/client/src/app/instance/search/detail/dynamic-content/components/display-object.component.html b/client/src/app/instance/search/detail/dynamic-content/components/display-object.component.html new file mode 100644 index 0000000000000000000000000000000000000000..5c1adc90c23c6bec1e06f2c4e4499b6319cea7e0 --- /dev/null +++ b/client/src/app/instance/search/detail/dynamic-content/components/display-object.component.html @@ -0,0 +1,41 @@ +<!-- Accordion families --> +<accordion [isAnimated]="true"> + <accordion-group *ngFor="let family of outputFamilyList" #ag [isOpen]="true" class="pl-2"> + <button class="btn btn-link btn-block clearfix pb-2" accordion-heading> + <span class="pull-left float-left text-primary"> + {{ family.label }} + + <span *ngIf="ag.isOpen"> + <span class="fas fa-chevron-up"></span> + </span> + <span *ngIf="!ag.isOpen"> + <span class="fas fa-chevron-down"></span> + </span> + </span> + </button> + + <!-- Accordion categories --> + <accordion [isAnimated]="true"> + <accordion-group *ngFor="let category of getOutputCategoryListByFamily(family.id)" #ag [isOpen]="true" class="pl-4"> + <button class="btn btn-link btn-block clearfix pb-2" accordion-heading> + <span class="pull-left float-left text-primary"> + {{ category.label }} + + <span *ngIf="ag.isOpen"> + <span class="fas fa-chevron-up"></span> + </span> + <span *ngIf="!ag.isOpen"> + <span class="fas fa-chevron-down"></span> + </span> + </span> + </button> + + <!-- Output list --> + <div *ngFor="let attribute of getAttributeListByOutputCategory(category.id)" class="row pb-2"> + <div class="col-5 font-weight-bold">{{ attribute.form_label }}</div> + <div class="col">{{ object[attribute.label] }}</div> + </div> + </accordion-group> + </accordion> + </accordion-group> +</accordion> \ No newline at end of file diff --git a/client/src/app/instance/search/detail/dynamic-content/components/display-object.component.ts b/client/src/app/instance/search/detail/dynamic-content/components/display-object.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..c290ab7ef375b140139d684585bc2ef5d30368ad --- /dev/null +++ b/client/src/app/instance/search/detail/dynamic-content/components/display-object.component.ts @@ -0,0 +1,35 @@ +/** + * This file is part of Anis Client. + * + * @copyright Laboratoire d'Astrophysique de Marseille / CNRS + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import { Component, Input } from '@angular/core'; + +import { Attribute, OutputCategory, OutputFamily } from 'src/app/metamodel/models'; + +/** + * @class + * @classdesc Display object component. + */ +@Component({ + selector: 'app-display-object', + templateUrl: 'display-object.component.html' +}) +export class DisplayObjectComponent { + @Input() object: any; + @Input() attributeList: Attribute[]; + @Input() outputFamilyList: OutputFamily[]; + @Input() outputCategoryList: OutputCategory[]; + + getOutputCategoryListByFamily(idOutputFamily: number): OutputCategory[] { + return this.outputCategoryList.filter(outputCategory => outputCategory.id_output_family === idOutputFamily); + } + + getAttributeListByOutputCategory(idOutputCategory: number): Attribute[] { + return this.attributeList.filter(attribute => attribute.id_detail_output_category === idOutputCategory); + } +} diff --git a/client/src/app/instance/search/detail/dynamic-content/components/index.ts b/client/src/app/instance/search/detail/dynamic-content/components/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..ff4f0ea4d36285884f51a39661ccca14da7c36f0 --- /dev/null +++ b/client/src/app/instance/search/detail/dynamic-content/components/index.ts @@ -0,0 +1,14 @@ +/** + * This file is part of Anis Client. + * + * @copyright Laboratoire d'Astrophysique de Marseille / CNRS + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import { DisplayObjectComponent } from './display-object.component'; + +export const dummiesComponents = [ + DisplayObjectComponent +]; diff --git a/client/src/app/instance/dynamic-content/dynamic-components/dynamic-router-link.component.html b/client/src/app/instance/search/detail/dynamic-content/dynamic-components/dynamic-router-link.component.html similarity index 100% rename from client/src/app/instance/dynamic-content/dynamic-components/dynamic-router-link.component.html rename to client/src/app/instance/search/detail/dynamic-content/dynamic-components/dynamic-router-link.component.html diff --git a/client/src/app/instance/dynamic-content/dynamic-components/dynamic-router-link.component.scss b/client/src/app/instance/search/detail/dynamic-content/dynamic-components/dynamic-router-link.component.scss similarity index 100% rename from client/src/app/instance/dynamic-content/dynamic-components/dynamic-router-link.component.scss rename to client/src/app/instance/search/detail/dynamic-content/dynamic-components/dynamic-router-link.component.scss diff --git a/client/src/app/instance/dynamic-content/dynamic-components/dynamic-router-link.component.ts b/client/src/app/instance/search/detail/dynamic-content/dynamic-components/dynamic-router-link.component.ts similarity index 100% rename from client/src/app/instance/dynamic-content/dynamic-components/dynamic-router-link.component.ts rename to client/src/app/instance/search/detail/dynamic-content/dynamic-components/dynamic-router-link.component.ts diff --git a/client/src/app/instance/search/detail/dynamic-content/dynamic-components/index.ts b/client/src/app/instance/search/detail/dynamic-content/dynamic-components/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..0a6b8f24206481483991135d430f1cd8d23a639b --- /dev/null +++ b/client/src/app/instance/search/detail/dynamic-content/dynamic-components/index.ts @@ -0,0 +1,5 @@ +import { DynamicRouterLinkComponent } from './dynamic-router-link.component'; + +export const DynamicComponents = [ + DynamicRouterLinkComponent +]; diff --git a/client/src/app/instance/dynamic-content/dynamic-content.module.ts b/client/src/app/instance/search/detail/dynamic-content/dynamic-content.module.ts similarity index 100% rename from client/src/app/instance/dynamic-content/dynamic-content.module.ts rename to client/src/app/instance/search/detail/dynamic-content/dynamic-content.module.ts diff --git a/client/src/app/instance/dynamic-content/parsers/dynamic-router-link-parser.ts b/client/src/app/instance/search/detail/dynamic-content/parsers/dynamic-router-link-parser.ts similarity index 100% rename from client/src/app/instance/dynamic-content/parsers/dynamic-router-link-parser.ts rename to client/src/app/instance/search/detail/dynamic-content/parsers/dynamic-router-link-parser.ts diff --git a/client/src/app/instance/dynamic-content/parsers/index.ts b/client/src/app/instance/search/detail/dynamic-content/parsers/index.ts similarity index 100% rename from client/src/app/instance/dynamic-content/parsers/index.ts rename to client/src/app/instance/search/detail/dynamic-content/parsers/index.ts diff --git a/client/src/app/instance/search/pipes/sort-by-detail-display.ts b/client/src/app/instance/search/pipes/sort-by-detail-display.ts index dd17a7ca46d072c91e36aa534811d4ae89a2ada4..2887500ac544ce036e7f9513a23b2ad085b7489c 100644 --- a/client/src/app/instance/search/pipes/sort-by-detail-display.ts +++ b/client/src/app/instance/search/pipes/sort-by-detail-display.ts @@ -14,6 +14,6 @@ import { Attribute } from 'src/app/metamodel/models'; @Pipe({name: 'sortByDetailDisplay'}) export class SortByDetailDisplay implements PipeTransform { transform(attributeList: Attribute[]): Attribute[] { - return [...attributeList].sort((a: Attribute, b: Attribute) => a.display_detail - b.display_detail); + return [...attributeList].sort((a: Attribute, b: Attribute) => a.detail_display - b.detail_display); } } diff --git a/client/src/app/instance/search/search-routing.module.ts b/client/src/app/instance/search/search-routing.module.ts index ffc569397e828e64c8c3374a733e02e11f1d0f5e..cec8354915ef48ce8d73543afcf52a9c0326c2b0 100644 --- a/client/src/app/instance/search/search-routing.module.ts +++ b/client/src/app/instance/search/search-routing.module.ts @@ -15,11 +15,9 @@ import { DatasetComponent } from './containers/dataset.component'; import { CriteriaComponent } from './containers/criteria.component'; import { OutputComponent } from './containers/output.component'; import { ResultComponent } from './containers/result.component'; -import { DetailComponent } from './containers/detail.component'; import { SearchAuthGuard } from './search-auth.guard'; const routes: Routes = [ - { path: 'detail/:dname/:id', component: DetailComponent }, { path: '', component: SearchComponent, children: [ { path: '', redirectTo: 'dataset', pathMatch: 'full' }, @@ -29,7 +27,8 @@ const routes: Routes = [ { path: 'output/:dname', canActivate: [SearchAuthGuard], component: OutputComponent }, { path: 'result/:dname', canActivate: [SearchAuthGuard], component: ResultComponent } ] - } + }, + { path: 'detail', loadChildren: () => import('./detail/detail.module').then(m => m.DetailModule) } ]; /** @@ -47,6 +46,5 @@ export const routedComponents = [ DatasetComponent, CriteriaComponent, OutputComponent, - ResultComponent, - DetailComponent + ResultComponent ]; diff --git a/client/src/app/instance/search/search.module.ts b/client/src/app/instance/search/search.module.ts index 2109154c13b7a32d7d1d041d86b59d1e95da69f4..e633fbb3bce0cf46b60004ea2d201630bda58b36 100644 --- a/client/src/app/instance/search/search.module.ts +++ b/client/src/app/instance/search/search.module.ts @@ -10,6 +10,7 @@ import { NgModule } from '@angular/core'; import { SharedModule } from 'src/app/shared/shared.module'; +// import { DynamicContentModule } from '../dynamic-content/dynamic-content.module'; import { ConeSearchModule } from '../cone-search/cone-search.module'; import { SearchRoutingModule, routedComponents } from './search-routing.module'; import { dummiesComponents } from './components'; @@ -22,6 +23,7 @@ import { searchPipes } from './pipes'; @NgModule({ imports: [ SharedModule, + //DynamicContentModule, ConeSearchModule, SearchRoutingModule ], diff --git a/client/src/app/instance/store/effects/detail.effects.ts b/client/src/app/instance/store/effects/detail.effects.ts index b1f2aa5f2bfec3d2c09c3aa7055ee309655cafff..ce166cfa21a9a9d2caeaa9e5234e3a97678cfd29 100644 --- a/client/src/app/instance/store/effects/detail.effects.ts +++ b/client/src/app/instance/store/effects/detail.effects.ts @@ -43,7 +43,7 @@ export class DetailEffects { datasetName, attributeList.find(attribute => attribute.order_by).id, id, - attributeList.filter(attribute => attribute.detail).map(attribute => attribute.id) + attributeList.filter(attribute => attribute.id_detail_output_category).map(attribute => attribute.id) ).pipe( map(object => detailActions.retrieveObjectSuccess({ object: object[0] })), catchError(() => of(detailActions.retrieveObjectFail())) diff --git a/client/src/app/instance/dynamic-content/components/datatable.component.html b/client/src/app/instance/webpage/dynamic-content/components/datatable.component.html similarity index 100% rename from client/src/app/instance/dynamic-content/components/datatable.component.html rename to client/src/app/instance/webpage/dynamic-content/components/datatable.component.html diff --git a/client/src/app/instance/dynamic-content/components/datatable.component.ts b/client/src/app/instance/webpage/dynamic-content/components/datatable.component.ts similarity index 100% rename from client/src/app/instance/dynamic-content/components/datatable.component.ts rename to client/src/app/instance/webpage/dynamic-content/components/datatable.component.ts diff --git a/client/src/app/instance/dynamic-content/components/index.ts b/client/src/app/instance/webpage/dynamic-content/components/index.ts similarity index 100% rename from client/src/app/instance/dynamic-content/components/index.ts rename to client/src/app/instance/webpage/dynamic-content/components/index.ts diff --git a/client/src/app/instance/dynamic-content/dynamic-components/dataset-sample.component.html b/client/src/app/instance/webpage/dynamic-content/dynamic-components/dataset-sample.component.html similarity index 100% rename from client/src/app/instance/dynamic-content/dynamic-components/dataset-sample.component.html rename to client/src/app/instance/webpage/dynamic-content/dynamic-components/dataset-sample.component.html diff --git a/client/src/app/instance/dynamic-content/dynamic-components/dataset-sample.component.ts b/client/src/app/instance/webpage/dynamic-content/dynamic-components/dataset-sample.component.ts similarity index 100% rename from client/src/app/instance/dynamic-content/dynamic-components/dataset-sample.component.ts rename to client/src/app/instance/webpage/dynamic-content/dynamic-components/dataset-sample.component.ts diff --git a/client/src/app/instance/webpage/dynamic-content/dynamic-components/dynamic-router-link.component.html b/client/src/app/instance/webpage/dynamic-content/dynamic-components/dynamic-router-link.component.html new file mode 100644 index 0000000000000000000000000000000000000000..2f43ac7ec15f1e5f671dbca64512d719766158a9 --- /dev/null +++ b/client/src/app/instance/webpage/dynamic-content/dynamic-components/dynamic-router-link.component.html @@ -0,0 +1,18 @@ +<a *ngIf="isExternalLink()" + [href]="link" + [ngClass]="css" + [target]="target ? target : '_self'" +> + <ng-container *ngTemplateOutlet="contentTpl"></ng-container> +</a> + +<a *ngIf="!isExternalLink()" + [routerLink]="link" + [queryParams]="queryParams ? queryParams : {}" + [fragment]="anchorFragment ? anchorFragment : null" + [ngClass]="css" +> + <ng-container *ngTemplateOutlet="contentTpl"></ng-container> +</a> + +<ng-template #contentTpl><ng-content></ng-content></ng-template> diff --git a/client/src/app/instance/webpage/dynamic-content/dynamic-components/dynamic-router-link.component.scss b/client/src/app/instance/webpage/dynamic-content/dynamic-components/dynamic-router-link.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..1f0440ee0e66b2f7ee73998e14e352af81a61627 --- /dev/null +++ b/client/src/app/instance/webpage/dynamic-content/dynamic-components/dynamic-router-link.component.scss @@ -0,0 +1,3 @@ +:host { + display: inline; +} \ No newline at end of file diff --git a/client/src/app/instance/webpage/dynamic-content/dynamic-components/dynamic-router-link.component.ts b/client/src/app/instance/webpage/dynamic-content/dynamic-components/dynamic-router-link.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..d0e20e09d5bd91c394084aba899ed450e398f04f --- /dev/null +++ b/client/src/app/instance/webpage/dynamic-content/dynamic-components/dynamic-router-link.component.ts @@ -0,0 +1,18 @@ +import { Component, Input } from '@angular/core'; + +@Component({ + selector: 'app-dynamic-router-link', + templateUrl: 'dynamic-router-link.component.html', + styleUrls: [ 'dynamic-router-link.component.scss' ] +}) +export class DynamicRouterLinkComponent { + @Input() link: string; + @Input() queryParams: {[key: string]: any}; + @Input() anchorFragment: string; + @Input() css: string; + @Input() target: string; + + isExternalLink() { + return this.link.startsWith('http'); + } +} diff --git a/client/src/app/instance/dynamic-content/dynamic-components/index.ts b/client/src/app/instance/webpage/dynamic-content/dynamic-components/index.ts similarity index 100% rename from client/src/app/instance/dynamic-content/dynamic-components/index.ts rename to client/src/app/instance/webpage/dynamic-content/dynamic-components/index.ts diff --git a/client/src/app/instance/webpage/dynamic-content/dynamic-content.module.ts b/client/src/app/instance/webpage/dynamic-content/dynamic-content.module.ts new file mode 100644 index 0000000000000000000000000000000000000000..8f4f27818c3c0ea4ef559d24a8a79de8f825e191 --- /dev/null +++ b/client/src/app/instance/webpage/dynamic-content/dynamic-content.module.ts @@ -0,0 +1,53 @@ +/** + * This file is part of Anis Client. + * + * @copyright Laboratoire d'Astrophysique de Marseille / CNRS + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { DynamicHooksModule, HookParserEntry } from 'ngx-dynamic-hooks'; + +import { SharedModule } from 'src/app/shared/shared.module'; +import { hookParsers } from './parsers'; +import { DynamicComponents } from './dynamic-components'; +import { dummiesComponents } from './components'; + +export const componentParsers: Array<HookParserEntry> = [ + ...hookParsers, + ...DynamicComponents.map(component => { + return { component }; + }) +]; + +/** + * @class + * @classdesc Dynamic content module. + */ +@NgModule({ + imports: [ + SharedModule, + RouterModule, + DynamicHooksModule.forRoot({ + globalParsers: componentParsers + }), + ], + exports: [ + DynamicHooksModule + ], + providers: [ + hookParsers + ], + declarations: [ + DynamicComponents, + dummiesComponents + ], + entryComponents: [ + DynamicComponents + ] +}) +export class DynamicContentModule { } diff --git a/client/src/app/instance/webpage/dynamic-content/parsers/dynamic-router-link-parser.ts b/client/src/app/instance/webpage/dynamic-content/parsers/dynamic-router-link-parser.ts new file mode 100644 index 0000000000000000000000000000000000000000..cb543c79b8a96b1d49c935f44f88045eef4ee3d9 --- /dev/null +++ b/client/src/app/instance/webpage/dynamic-content/parsers/dynamic-router-link-parser.ts @@ -0,0 +1,96 @@ +import { Injectable } from '@angular/core'; +import { HookParser, HookPosition, HookValue, HookComponentData, HookBindings, HookFinder } from 'ngx-dynamic-hooks'; + +import { DynamicRouterLinkComponent } from '../dynamic-components/dynamic-router-link.component'; + +@Injectable() +export class DynamicRouterLinkParser implements HookParser { + linkOpeningTagRegex: RegExp; + linkClosingTagRegex: RegExp; + hrefAttrRegex: RegExp; + classAttrRegex: RegExp; + targetAttrRegex: RegExp; + + constructor(private hookFinder: HookFinder) { + const hrefAttr = '\\s+href\=\\"([^\\"]*?)\\"'; + const anyOtherAttr = '\\s+[a-zA-Z]+\\=\\"[^\\"]*?\\"'; + const linkOpeningTag = '\\<a(?:' + anyOtherAttr + ')*?' + hrefAttr + '(?:' + anyOtherAttr + ')*?\\>'; + + // Transform into proper regex objects and save for later + this.linkOpeningTagRegex = new RegExp(linkOpeningTag, 'gim'); + this.linkClosingTagRegex = new RegExp('<\\/a>', 'gim'); + this.hrefAttrRegex = new RegExp(hrefAttr, 'im'); + this.classAttrRegex = new RegExp('\\s+class\=\\"([^\\"]*?)\\"', 'im'); + this.targetAttrRegex = new RegExp('\\s+target\=\\"([^\\"]*?)\\"', 'im') + } + + public findHooks(content: string, context: any): Array<HookPosition> { + // With the regexes we prepared, we can simply use findEnclosingHooks() to retrieve + // the HookPositions of all internal <a>-elements from the content string + return this.hookFinder.findEnclosingHooks(content, this.linkOpeningTagRegex, this.linkClosingTagRegex); + } + + public loadComponent(hookId: number, hookValue: HookValue, context: any, childNodes: Array<Element>): HookComponentData { + // Simply return the component class here + return { + component: DynamicRouterLinkComponent + }; + } + + public getBindings(hookId: number, hookValue: HookValue, context: any): HookBindings { + // We can reuse the hrefAttrRegex here as its first capture group is the relative part of the url, + // e.g. '/jedi/windu' from 'https://www.mysite.com/jedi/windu', which is what we need + const hrefAttrMatch = hookValue.openingTag.match(this.hrefAttrRegex); + let link = hrefAttrMatch[1]; + + // The relative part of the link may still contain the query string and the + // anchor fragment, so we need to split it up accordingly + const anchorFragmentSplit = link.split('#'); + link = anchorFragmentSplit[0]; + const anchorFragment = anchorFragmentSplit.length > 1 ? anchorFragmentSplit[1] : null; + + const queryParamsSplit = link.split('?'); + link = queryParamsSplit[0]; + const queryParams = queryParamsSplit.length > 1 ? this.parseQueryString(queryParamsSplit[1]) : {}; + + // Select css part + let css = null; + const classAttrMatch = hookValue.openingTag.match(this.classAttrRegex); + if (classAttrMatch) { + css = classAttrMatch[1]; + } + + // Select target part + let target = null; + const targetAttrMatch = hookValue.openingTag.match(this.targetAttrRegex); + if (targetAttrMatch) { + target = targetAttrMatch[1]; + } + + // Give all of these to our DynamicRouterLinkComponent as inputs and we're done! + return { + inputs: { + link, + queryParams: queryParams, + anchorFragment: anchorFragment, + css, + target + } + }; + } + + /** + * A helper function that transforms a query string into a QueryParams object + * Approach by Wolfgang Kuehn @ https://stackoverflow.com/a/8649003/3099523 + * + * @param queryParamString - The queryString to parse + */ + private parseQueryString(queryParamString: string): {[key: string]: any} { + return JSON.parse('{"' + + decodeURI(queryParamString) + .replace(/"/g, '\\"') + .replace(/&/g, '","') + .replace(/=/g, '":"') + + '"}'); + } +} diff --git a/client/src/app/instance/webpage/dynamic-content/parsers/index.ts b/client/src/app/instance/webpage/dynamic-content/parsers/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..bac0c8f9072e6c66cbda86f139d047018dcba1ba --- /dev/null +++ b/client/src/app/instance/webpage/dynamic-content/parsers/index.ts @@ -0,0 +1,5 @@ +import { DynamicRouterLinkParser } from './dynamic-router-link-parser'; + +export const hookParsers = [ + DynamicRouterLinkParser +]; diff --git a/client/src/app/instance/webpage/webpage.module.ts b/client/src/app/instance/webpage/webpage.module.ts index 5bec1e05d2e46632e45e0dc24d0b376d975504ee..e88ace7bcff38b64d22ddfa53cb089147f545aba 100644 --- a/client/src/app/instance/webpage/webpage.module.ts +++ b/client/src/app/instance/webpage/webpage.module.ts @@ -10,7 +10,7 @@ import { NgModule } from '@angular/core'; import { SharedModule } from 'src/app/shared/shared.module'; -import { DynamicContentModule } from '../dynamic-content/dynamic-content.module'; +import { DynamicContentModule } from './dynamic-content/dynamic-content.module'; import { WebpageRoutingModule, routedComponents } from './webpage-routing.module'; import { dummiesComponents } from './components'; diff --git a/client/src/app/metamodel/models/attribute.model.ts b/client/src/app/metamodel/models/attribute.model.ts index 003b971b9cb999a5c62dc5386a771537c58d0347..ab96827eca36153c04b2b853ea1f47c5b6ccd7e5 100644 --- a/client/src/app/metamodel/models/attribute.model.ts +++ b/client/src/app/metamodel/models/attribute.model.ts @@ -37,8 +37,7 @@ export interface Attribute { renderer_config: RendererConfig; order_by: boolean; archive: boolean; - detail: boolean; - display_detail: number; + detail_display: number; options: Option[]; vo_utype: string; vo_ucd: string; @@ -48,4 +47,5 @@ export interface Attribute { vo_size: number; id_criteria_family: number; id_output_category: number; + id_detail_output_category: number; } diff --git a/conf-dev/create-db.sh b/conf-dev/create-db.sh index c01a91350a88f10d985e68c2cc4810377d533e15..5118a6a2a21f233478ca4db8dc10bdee0c23860e 100644 --- a/conf-dev/create-db.sh +++ b/conf-dev/create-db.sh @@ -27,36 +27,36 @@ curl -d '{"label":"Default","display":10,"opened":true}' --header 'Content-Type: curl -d '{"label":"Default","display":10,"opened":true}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/output-family curl -d '{"label":"Default","display":10}' --header 'Content-Type: application/json' -X POST http://localhost/output-family/1/output-category -curl -d '{"id":1,"name":"num","label":"num","form_label":"num","description":null,"primary_key":true,"output_display":10,"criteria_display":10,"search_type":"field","type":"decimal","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"detail-link","renderer_config":{"display":"text","blank":true},"display_detail":10,"selected":true,"order_by":true,"archive":false,"detail":true,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":1,"id_output_category":1}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute -curl -d '{"id":2,"name":"alpha","label":"alpha","form_label":"alpha","description":null,"primary_key":false,"output_display":20,"criteria_display":20,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":20,"selected":true,"order_by":true,"archive":false,"detail":true,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":1}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute -curl -d '{"id":3,"name":"delta","label":"delta","form_label":"delta","description":null,"primary_key":false,"output_display":30,"criteria_display":30,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":30,"selected":true,"order_by":true,"archive":false,"detail":true,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":1}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute -curl -d '{"id":4,"name":"selmag","label":"selmag","form_label":"selmag","description":null,"primary_key":false,"output_display":40,"criteria_display":40,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":40,"selected":true,"order_by":true,"archive":false,"detail":true,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":1}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute -curl -d '{"id":5,"name":"errselmag","label":"errselmag","form_label":"errselmag","description":null,"primary_key":false,"output_display":50,"criteria_display":50,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":50,"selected":true,"order_by":true,"archive":false,"detail":true,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":1}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute -curl -d '{"id":6,"name":"pointing","label":"pointing","form_label":"pointing","description":null,"primary_key":false,"output_display":60,"criteria_display":60,"search_type":null,"type":"string","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":60,"selected":true,"order_by":true,"archive":false,"detail":true,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":1}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute -curl -d '{"id":7,"name":"quadrant","label":"quadrant","form_label":"quadrant","description":null,"primary_key":false,"output_display":70,"criteria_display":70,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":70,"selected":true,"order_by":true,"archive":false,"detail":true,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":1}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute -curl -d '{"id":8,"name":"zspec","label":"zspec","form_label":"zspec","description":null,"primary_key":false,"output_display":80,"criteria_display":80,"search_type":"between","type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":80,"selected":true,"order_by":true,"archive":false,"detail":true,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":1,"id_output_category":1}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute -curl -d '{"id":9,"name":"zflg","label":"zflg","form_label":"zflg","description":null,"primary_key":false,"output_display":90,"criteria_display":90,"search_type":"datalist","type":"decimal","operator":"in","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":90,"selected":true,"order_by":true,"archive":false,"detail":true,"options":[{"label":"1,2,3,4,9","value":"1,2,3,4,9","display":10},{"label":"2,3,4,9","value":"2,3,4,9","display":20},{"label":"3,4","value":"3,4","display":30},{"label":"1,2,3,4,9,21,22,23,24,29","value":"1,2,3,4,9,21,22,23,24,29","display":40},{"label":"2,3,4,9,22,23,24,29","value":"2,3,4,9,22,23,24,29","display":50}],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":1,"id_output_category":1}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute -curl -d '{"id":10,"name":"norm","label":"norm","form_label":"norm","description":null,"primary_key":false,"output_display":100,"criteria_display":100,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":100,"selected":true,"order_by":true,"archive":false,"detail":true,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":1}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute -curl -d '{"id":11,"name":"epoch","label":"epoch","form_label":"epoch","description":null,"primary_key":false,"output_display":110,"criteria_display":110,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":110,"selected":true,"order_by":true,"archive":false,"detail":true,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute -curl -d '{"id":12,"name":"photomask","label":"photomask","form_label":"photomask","description":null,"primary_key":false,"output_display":120,"criteria_display":120,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":120,"selected":true,"order_by":true,"archive":false,"detail":true,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute -curl -d '{"id":56,"name":"spec1d","label":"spec1d","form_label":"spec1d","description":null,"primary_key":false,"output_display":560,"criteria_display":560,"search_type":null,"type":"text","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"download","renderer_config":{"display":"icon-button","text":"DOWNLOAD","icon":"fas fa-download"},"display_detail":560,"selected":true,"order_by":false,"archive":false,"detail":true,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":1}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute -curl -d '{"id":57,"name":"spec1dnoise","label":"spec1dnoise","form_label":"spec1dnoise","description":null,"primary_key":false,"output_display":570,"criteria_display":570,"search_type":null,"type":"text","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"download","renderer_config":{"display":"icon-button","text":"DOWNLOAD","icon":"fas fa-download"},"display_detail":570,"selected":true,"order_by":false,"archive":false,"detail":true,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":1}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute -curl -d '{"id":58,"name":"spec1dsky","label":"spec1dsky","form_label":"spec1dsky","description":null,"primary_key":false,"output_display":580,"criteria_display":580,"search_type":null,"type":"text","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"download","renderer_config":{"display":"icon-button","text":"DOWNLOAD","icon":"fas fa-download"},"display_detail":580,"selected":true,"order_by":false,"archive":false,"detail":true,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":1}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute +curl -d '{"id":1,"name":"num","label":"num","form_label":"num","description":null,"primary_key":true,"output_display":10,"criteria_display":10,"search_type":"field","type":"decimal","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"detail-link","renderer_config":{"display":"text","blank":true},"detail_display":10,"selected":true,"order_by":true,"archive":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":1,"id_output_category":1,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute +curl -d '{"id":2,"name":"alpha","label":"alpha","form_label":"alpha","description":null,"primary_key":false,"output_display":20,"criteria_display":20,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":20,"selected":true,"order_by":true,"archive":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":1,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute +curl -d '{"id":3,"name":"delta","label":"delta","form_label":"delta","description":null,"primary_key":false,"output_display":30,"criteria_display":30,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":30,"selected":true,"order_by":true,"archive":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":1,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute +curl -d '{"id":4,"name":"selmag","label":"selmag","form_label":"selmag","description":null,"primary_key":false,"output_display":40,"criteria_display":40,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":40,"selected":true,"order_by":true,"archive":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":1,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute +curl -d '{"id":5,"name":"errselmag","label":"errselmag","form_label":"errselmag","description":null,"primary_key":false,"output_display":50,"criteria_display":50,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":50,"selected":true,"order_by":true,"archive":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":1,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute +curl -d '{"id":6,"name":"pointing","label":"pointing","form_label":"pointing","description":null,"primary_key":false,"output_display":60,"criteria_display":60,"search_type":null,"type":"string","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":60,"selected":true,"order_by":true,"archive":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":1,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute +curl -d '{"id":7,"name":"quadrant","label":"quadrant","form_label":"quadrant","description":null,"primary_key":false,"output_display":70,"criteria_display":70,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":70,"selected":true,"order_by":true,"archive":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":1,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute +curl -d '{"id":8,"name":"zspec","label":"zspec","form_label":"zspec","description":null,"primary_key":false,"output_display":80,"criteria_display":80,"search_type":"between","type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":80,"selected":true,"order_by":true,"archive":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":1,"id_output_category":1,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute +curl -d '{"id":9,"name":"zflg","label":"zflg","form_label":"zflg","description":null,"primary_key":false,"output_display":90,"criteria_display":90,"search_type":"datalist","type":"decimal","operator":"in","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":90,"selected":true,"order_by":true,"archive":false,"options":[{"label":"1,2,3,4,9","value":"1,2,3,4,9","display":10},{"label":"2,3,4,9","value":"2,3,4,9","display":20},{"label":"3,4","value":"3,4","display":30},{"label":"1,2,3,4,9,21,22,23,24,29","value":"1,2,3,4,9,21,22,23,24,29","display":40},{"label":"2,3,4,9,22,23,24,29","value":"2,3,4,9,22,23,24,29","display":50}],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":1,"id_output_category":1,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute +curl -d '{"id":10,"name":"norm","label":"norm","form_label":"norm","description":null,"primary_key":false,"output_display":100,"criteria_display":100,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":100,"selected":true,"order_by":true,"archive":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":1,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute +curl -d '{"id":11,"name":"epoch","label":"epoch","form_label":"epoch","description":null,"primary_key":false,"output_display":110,"criteria_display":110,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":110,"selected":true,"order_by":true,"archive":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":null,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute +curl -d '{"id":12,"name":"photomask","label":"photomask","form_label":"photomask","description":null,"primary_key":false,"output_display":120,"criteria_display":120,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":120,"selected":true,"order_by":true,"archive":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":null,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute +curl -d '{"id":56,"name":"spec1d","label":"spec1d","form_label":"spec1d","description":null,"primary_key":false,"output_display":560,"criteria_display":560,"search_type":null,"type":"text","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"download","renderer_config":{"display":"icon-button","text":"DOWNLOAD","icon":"fas fa-download"},"detail_display":560,"selected":true,"order_by":false,"archive":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":1,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute +curl -d '{"id":57,"name":"spec1dnoise","label":"spec1dnoise","form_label":"spec1dnoise","description":null,"primary_key":false,"output_display":570,"criteria_display":570,"search_type":null,"type":"text","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"download","renderer_config":{"display":"icon-button","text":"DOWNLOAD","icon":"fas fa-download"},"detail_display":570,"selected":true,"order_by":false,"archive":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":1,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute +curl -d '{"id":58,"name":"spec1dsky","label":"spec1dsky","form_label":"spec1dsky","description":null,"primary_key":false,"output_display":580,"criteria_display":580,"search_type":null,"type":"text","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"download","renderer_config":{"display":"icon-button","text":"DOWNLOAD","icon":"fas fa-download"},"detail_display":580,"selected":true,"order_by":false,"archive":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":1,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vipers_dr2_w1/attribute # Add sp_cards attributes curl -d '{"label":"Card","display":10,"opened":true}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/sp_cards/criteria-family curl -d '{"label":"Default","display":10,"opened":true}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/sp_cards/output-family curl -d '{"label":"Default","display":10}' --header 'Content-Type: application/json' -X POST http://localhost/output-family/2/output-category -curl -d '{"id":1,"name":"acronym","label":"acronym","form_label":"Product Acronym","description":null,"primary_key":true,"output_display":10,"criteria_display":10,"search_type":"select","type":"string","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":[],"display_detail":10,"selected":true,"order_by":true,"archive":false,"detail":false,"options":[{"label":"LAMTEST","value":"LAMTEST","display":10},{"label":"LAMTEST_DC1","value":"LAMTEST_DC1","display":20},{"label":"MXT-EVT-CAL","value":"MXT-EVT-CAL","display":30},{"label":"OBLC_ECL","value":"OBLC_ECL","display":40}],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":2,"id_output_category":2}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/sp_cards/attribute -curl -d '{"id":2,"name":"sp_id","label":"sp_id","form_label":"SP IAP ID","description":null,"primary_key":false,"output_display":20,"criteria_display":20,"search_type":null,"type":"integer","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":20,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":2}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/sp_cards/attribute -curl -d '{"id":3,"name":"version","label":"version","form_label":"Version","description":null,"primary_key":false,"output_display":30,"criteria_display":30,"search_type":null,"type":"float","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":30,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":2}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/sp_cards/attribute -curl -d '{"id":4,"name":"program","label":"program","form_label":"Program","description":null,"primary_key":false,"output_display":40,"criteria_display":40,"search_type":"select","type":"string","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":40,"selected":true,"order_by":true,"archive":false,"detail":false,"options":[{"label":"CP","value":"CP","display":10},{"label":"GP","value":"GP","display":20}],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":2,"id_output_category":2}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/sp_cards/attribute -curl -d '{"id":5,"name":"instrument","label":"instrument","form_label":"Instrument","description":null,"primary_key":false,"output_display":50,"criteria_display":50,"search_type":"select","type":"string","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":50,"selected":true,"order_by":true,"archive":false,"detail":false,"options":[{"label":"ALL","value":"ALL","display":10},{"label":"MXT","value":"MXT","display":20}],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":2,"id_output_category":2}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/sp_cards/attribute -curl -d '{"id":6,"name":"type","label":"type","form_label":"Type","description":null,"primary_key":false,"output_display":60,"criteria_display":60,"search_type":null,"type":"string","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":60,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":2}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/sp_cards/attribute -curl -d '{"id":7,"name":"json_schema","label":"json_schema","form_label":"JSON Schema (original)","description":null,"primary_key":false,"output_display":70,"criteria_display":70,"search_type":null,"type":"json","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"json","renderer_config":[],"display_detail":70,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":2}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/sp_cards/attribute -curl -d '{"id":8,"name":"search_kw","label":"search_kw","form_label":"KWs searchable","description":null,"primary_key":false,"output_display":80,"criteria_display":80,"search_type":null,"type":"json","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"json","renderer_config":[],"display_detail":80,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":2}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/sp_cards/attribute -curl -d '{"id":9,"name":"json_schema_uploaded","label":"json_schema_uploaded","form_label":"json_schema_uploaded","description":null,"primary_key":false,"output_display":90,"criteria_display":90,"search_type":null,"type":"json","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":90,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/sp_cards/attribute +curl -d '{"id":1,"name":"acronym","label":"acronym","form_label":"Product Acronym","description":null,"primary_key":true,"output_display":10,"criteria_display":10,"search_type":"select","type":"string","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":[],"detail_display":10,"selected":true,"order_by":true,"archive":false,"detail":false,"options":[{"label":"LAMTEST","value":"LAMTEST","display":10},{"label":"LAMTEST_DC1","value":"LAMTEST_DC1","display":20},{"label":"MXT-EVT-CAL","value":"MXT-EVT-CAL","display":30},{"label":"OBLC_ECL","value":"OBLC_ECL","display":40}],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":2,"id_output_category":2,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/sp_cards/attribute +curl -d '{"id":2,"name":"sp_id","label":"sp_id","form_label":"SP IAP ID","description":null,"primary_key":false,"output_display":20,"criteria_display":20,"search_type":null,"type":"integer","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":20,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":2,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/sp_cards/attribute +curl -d '{"id":3,"name":"version","label":"version","form_label":"Version","description":null,"primary_key":false,"output_display":30,"criteria_display":30,"search_type":null,"type":"float","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":30,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":2,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/sp_cards/attribute +curl -d '{"id":4,"name":"program","label":"program","form_label":"Program","description":null,"primary_key":false,"output_display":40,"criteria_display":40,"search_type":"select","type":"string","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":40,"selected":true,"order_by":true,"archive":false,"detail":false,"options":[{"label":"CP","value":"CP","display":10},{"label":"GP","value":"GP","display":20}],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":2,"id_output_category":2,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/sp_cards/attribute +curl -d '{"id":5,"name":"instrument","label":"instrument","form_label":"Instrument","description":null,"primary_key":false,"output_display":50,"criteria_display":50,"search_type":"select","type":"string","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":50,"selected":true,"order_by":true,"archive":false,"detail":false,"options":[{"label":"ALL","value":"ALL","display":10},{"label":"MXT","value":"MXT","display":20}],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":2,"id_output_category":2,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/sp_cards/attribute +curl -d '{"id":6,"name":"type","label":"type","form_label":"Type","description":null,"primary_key":false,"output_display":60,"criteria_display":60,"search_type":null,"type":"string","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":60,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":2,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/sp_cards/attribute +curl -d '{"id":7,"name":"json_schema","label":"json_schema","form_label":"JSON Schema (original)","description":null,"primary_key":false,"output_display":70,"criteria_display":70,"search_type":null,"type":"json","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"json","renderer_config":[],"detail_display":70,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":2,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/sp_cards/attribute +curl -d '{"id":8,"name":"search_kw","label":"search_kw","form_label":"KWs searchable","description":null,"primary_key":false,"output_display":80,"criteria_display":80,"search_type":null,"type":"json","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"json","renderer_config":[],"detail_display":80,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":2,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/sp_cards/attribute +curl -d '{"id":9,"name":"json_schema_uploaded","label":"json_schema_uploaded","form_label":"json_schema_uploaded","description":null,"primary_key":false,"output_display":90,"criteria_display":90,"search_type":null,"type":"json","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":90,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":null,"id_detail_output_category":null,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/sp_cards/attribute # Add observations attributes curl -d '{"label":"Default","display":10,"opened":true}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/observations/criteria-family @@ -64,28 +64,28 @@ curl -d '{"label":"Default parameters","display":10,"opened":true}' --header 'Co curl -d '{"label":"Astrometry","display":10}' --header 'Content-Type: application/json' -X POST http://localhost/output-family/3/output-category curl -d '{"label":"Observation","display":10}' --header 'Content-Type: application/json' -X POST http://localhost/output-family/3/output-category -curl -d '{"id":1,"name":"id","label":"id","form_label":"id","description":"Observation Ident","primary_key":true,"output_display":10,"criteria_display":10,"search_type":null,"type":"integer","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":10,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":3}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/observations/attribute -curl -d '{"id":2,"name":"ra","label":"ra","form_label":"Alpha J2000","description":"Alpha J2000","primary_key":false,"output_display":20,"criteria_display":20,"search_type":null,"type":"float","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":20,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":3}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/observations/attribute -curl -d '{"id":3,"name":"dec","label":"dec","form_label":"Delta J2000","description":"Delta J2000","primary_key":false,"output_display":30,"criteria_display":30,"search_type":null,"type":"float","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":30,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":3}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/observations/attribute -curl -d '{"id":4,"name":"date_time","label":"date_time","form_label":"Date Time","description":"Date Time","primary_key":false,"output_display":40,"criteria_display":40,"search_type":"between-date","type":"datetime","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":40,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":1,"id_output_category":4}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/observations/attribute -curl -d '{"id":5,"name":"exposure_time","label":"exposure_time","form_label":"Exposure Time","description":"Exposure Time","primary_key":false,"output_display":50,"criteria_display":50,"search_type":"between","type":"integer","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":50,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":1,"id_output_category":4}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/observations/attribute -curl -d '{"id":6,"name":"filter","label":"filter","form_label":"Filter","description":"Filter","primary_key":false,"output_display":60,"criteria_display":60,"search_type":"select","type":"string","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":60,"selected":true,"order_by":true,"archive":false,"detail":false,"options":[{"label":"Halpha","value":"Halpha","display":10},{"label":"SDSS g","value":"SDSS g","display":20}],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":1,"id_output_category":4}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/observations/attribute -curl -d '{"id":7,"name":"object_name","label":"object_name","form_label":"Object name","description":"Object name","primary_key":false,"output_display":70,"criteria_display":70,"search_type":"field","type":"string","operator":"lk","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"link","renderer_config":{"href":"http:\/\/cdsportal.u-strasbg.fr\/?target=$value","display":"text","text":"$value","icon":"fas fa-link","blank":true},"display_detail":70,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":1,"id_output_category":4}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/observations/attribute -curl -d '{"id":8,"name":"fits_file","label":"fits_file","form_label":"fits_file","description":null,"primary_key":false,"output_display":80,"criteria_display":80,"search_type":null,"type":"string","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"download","renderer_config":{"display":"icon-button","text":"DOWNLOAD","icon":"fas fa-download"},"display_detail":80,"selected":true,"order_by":false,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":4}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/observations/attribute -curl -d '{"id":9,"name":"fits_png","label":"fits_png","form_label":"fits_png","description":null,"primary_key":false,"output_display":90,"criteria_display":90,"search_type":null,"type":"string","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"image","renderer_config":{"type":"fits","display":"modal","width":"50","height":"50"},"display_detail":90,"selected":true,"order_by":false,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":4}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/observations/attribute +curl -d '{"id":1,"name":"id","label":"id","form_label":"id","description":"Observation Ident","primary_key":true,"output_display":10,"criteria_display":10,"search_type":null,"type":"integer","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":10,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":3,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/observations/attribute +curl -d '{"id":2,"name":"ra","label":"ra","form_label":"Alpha J2000","description":"Alpha J2000","primary_key":false,"output_display":20,"criteria_display":20,"search_type":null,"type":"float","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":20,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":3,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/observations/attribute +curl -d '{"id":3,"name":"dec","label":"dec","form_label":"Delta J2000","description":"Delta J2000","primary_key":false,"output_display":30,"criteria_display":30,"search_type":null,"type":"float","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":30,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":3,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/observations/attribute +curl -d '{"id":4,"name":"date_time","label":"date_time","form_label":"Date Time","description":"Date Time","primary_key":false,"output_display":40,"criteria_display":40,"search_type":"between-date","type":"datetime","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":40,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":1,"id_output_category":4,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/observations/attribute +curl -d '{"id":5,"name":"exposure_time","label":"exposure_time","form_label":"Exposure Time","description":"Exposure Time","primary_key":false,"output_display":50,"criteria_display":50,"search_type":"between","type":"integer","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":50,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":1,"id_output_category":4,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/observations/attribute +curl -d '{"id":6,"name":"filter","label":"filter","form_label":"Filter","description":"Filter","primary_key":false,"output_display":60,"criteria_display":60,"search_type":"select","type":"string","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":60,"selected":true,"order_by":true,"archive":false,"detail":false,"options":[{"label":"Halpha","value":"Halpha","display":10},{"label":"SDSS g","value":"SDSS g","display":20}],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":1,"id_output_category":4,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/observations/attribute +curl -d '{"id":7,"name":"object_name","label":"object_name","form_label":"Object name","description":"Object name","primary_key":false,"output_display":70,"criteria_display":70,"search_type":"field","type":"string","operator":"lk","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"link","renderer_config":{"href":"http:\/\/cdsportal.u-strasbg.fr\/?target=$value","display":"text","text":"$value","icon":"fas fa-link","blank":true},"detail_display":70,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":1,"id_output_category":4,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/observations/attribute +curl -d '{"id":8,"name":"fits_file","label":"fits_file","form_label":"fits_file","description":null,"primary_key":false,"output_display":80,"criteria_display":80,"search_type":null,"type":"string","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"download","renderer_config":{"display":"icon-button","text":"DOWNLOAD","icon":"fas fa-download"},"detail_display":80,"selected":true,"order_by":false,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":4,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/observations/attribute +curl -d '{"id":9,"name":"fits_png","label":"fits_png","form_label":"fits_png","description":null,"primary_key":false,"output_display":90,"criteria_display":90,"search_type":null,"type":"string","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"image","renderer_config":{"type":"fits","display":"modal","width":"50","height":"50"},"detail_display":90,"selected":true,"order_by":false,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":4,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/observations/attribute # Add vvds_f02_udeep attributes curl -d '{"label":"Default","display":10,"opened":true}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vvds_f02_udeep/criteria-family curl -d '{"label":"Default","display":10,"opened":true}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vvds_f02_udeep/output-family curl -d '{"label":"Default","display":10}' --header 'Content-Type: application/json' -X POST http://localhost/output-family/4/output-category -curl -d '{"id":1,"name":"vvds_ident","label":"vvds_ident","form_label":"vvds_ident","description":null,"primary_key":true,"output_display":10,"criteria_display":10,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":10,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":5}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vvds_f02_udeep/attribute -curl -d '{"id":2,"name":"id_iau","label":"id_iau","form_label":"id_iau","description":null,"primary_key":false,"output_display":20,"criteria_display":20,"search_type":null,"type":"string","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":20,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":5}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vvds_f02_udeep/attribute -curl -d '{"id":3,"name":"alpha","label":"alpha","form_label":"alpha","description":null,"primary_key":false,"output_display":30,"criteria_display":30,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":30,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":5}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vvds_f02_udeep/attribute -curl -d '{"id":4,"name":"delta","label":"delta","form_label":"delta","description":null,"primary_key":false,"output_display":40,"criteria_display":40,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":40,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":5}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vvds_f02_udeep/attribute -curl -d '{"id":5,"name":"z_spec","label":"z_spec","form_label":"z_spec","description":null,"primary_key":false,"output_display":50,"criteria_display":50,"search_type":"between","type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":50,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":4,"id_output_category":5}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vvds_f02_udeep/attribute -curl -d '{"id":6,"name":"zflag","label":"zflag","form_label":"zflag","description":null,"primary_key":false,"output_display":60,"criteria_display":60,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":60,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":5}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vvds_f02_udeep/attribute -curl -d '{"id":7,"name":"sel_mag","label":"sel_mag","form_label":"sel_mag","description":null,"primary_key":false,"output_display":70,"criteria_display":70,"search_type":"between","type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"display_detail":70,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":4,"id_output_category":5}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vvds_f02_udeep/attribute +curl -d '{"id":1,"name":"vvds_ident","label":"vvds_ident","form_label":"vvds_ident","description":null,"primary_key":true,"output_display":10,"criteria_display":10,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":10,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":5,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vvds_f02_udeep/attribute +curl -d '{"id":2,"name":"id_iau","label":"id_iau","form_label":"id_iau","description":null,"primary_key":false,"output_display":20,"criteria_display":20,"search_type":null,"type":"string","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":20,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":5,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vvds_f02_udeep/attribute +curl -d '{"id":3,"name":"alpha","label":"alpha","form_label":"alpha","description":null,"primary_key":false,"output_display":30,"criteria_display":30,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":30,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":5,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vvds_f02_udeep/attribute +curl -d '{"id":4,"name":"delta","label":"delta","form_label":"delta","description":null,"primary_key":false,"output_display":40,"criteria_display":40,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":40,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":5,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vvds_f02_udeep/attribute +curl -d '{"id":5,"name":"z_spec","label":"z_spec","form_label":"z_spec","description":null,"primary_key":false,"output_display":50,"criteria_display":50,"search_type":"between","type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":50,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":4,"id_output_category":5,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vvds_f02_udeep/attribute +curl -d '{"id":6,"name":"zflag","label":"zflag","form_label":"zflag","description":null,"primary_key":false,"output_display":60,"criteria_display":60,"search_type":null,"type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":60,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":5,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vvds_f02_udeep/attribute +curl -d '{"id":7,"name":"sel_mag","label":"sel_mag","form_label":"sel_mag","description":null,"primary_key":false,"output_display":70,"criteria_display":70,"search_type":"between","type":"decimal","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"detail_display":70,"selected":true,"order_by":true,"archive":false,"detail":false,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":4,"id_output_category":5,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/vvds_f02_udeep/attribute # Add products attributes curl -d '{"label":"Obs","display":10,"opened":true}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/criteria-family @@ -94,21 +94,21 @@ curl -d '{"label":"Default","display":10,"opened":true}' --header 'Content-Type: curl -d '{"label":"Default","display":10}' --header 'Content-Type: application/json' -X POST http://localhost/output-family/5/output-category curl -d '{"label":"Additionnal","display":20}' --header 'Content-Type: application/json' -X POST http://localhost/output-family/5/output-category -curl -d '{"id":1,"name":"product_id","label":"product_id","form_label":"Product ID","description":null,"primary_key":true,"output_display":10,"criteria_display":10,"search_type":"field","type":"integer","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":[],"selected":true,"order_by":true,"archive":false,"detail":false,"display_detail":10,"options":[],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":5,"id_output_category":6}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute -curl -d '{"id":2,"name":"obs_id","label":"obs_id","form_label":"Observation ID","description":null,"primary_key":false,"output_display":20,"criteria_display":20,"search_type":"field","type":"bigint","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":true,"order_by":true,"archive":false,"detail":false,"display_detail":20,"options":[],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":5,"id_output_category":6}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute -curl -d '{"id":3,"name":"acronym","label":"acronym","form_label":"Product Acronym","description":null,"primary_key":false,"output_display":30,"criteria_display":30,"search_type":"select","type":"string","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":true,"order_by":true,"archive":false,"detail":false,"display_detail":30,"options":[{"label":"ECL-DET-UBC","value":"ECL-DET-UBC","display":10},{"label":"OBLC_ECL","value":"OBLC_ECL","display":20}],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":6,"id_output_category":6}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute -curl -d '{"id":4,"name":"url","label":"url","form_label":"Product URL","description":null,"primary_key":false,"output_display":40,"criteria_display":40,"search_type":null,"type":"text","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"link","renderer_config":{"href":"$value","display":"text","text":"$value","icon":"fas fa-link","blank":true},"selected":true,"order_by":true,"archive":false,"detail":false,"display_detail":40,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":6}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute -curl -d '{"id":5,"name":"criteria","label":"criteria","form_label":"Product criteria (based on KWs searchables)","description":null,"primary_key":false,"output_display":50,"criteria_display":50,"search_type":"svom_json_kw","type":"json","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"json","renderer_config":[],"selected":false,"order_by":true,"archive":false,"detail":false,"display_detail":50,"options":[],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":6,"id_output_category":7}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute -curl -d '{"id":6,"name":"added_at","label":"added_at","form_label":"Added at","description":null,"primary_key":false,"output_display":60,"criteria_display":60,"search_type":"between-date","type":"datetime","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":true,"order_by":true,"archive":false,"detail":false,"display_detail":60,"options":[],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":5,"id_output_category":6}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute -curl -d '{"id":7,"name":"product_version","label":"product_version","form_label":"Version","description":null,"primary_key":false,"output_display":70,"criteria_display":70,"search_type":null,"type":"integer","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":true,"order_by":true,"archive":false,"detail":false,"display_detail":70,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":6}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute -curl -d '{"id":8,"name":"program","label":"program","form_label":"Program","description":null,"primary_key":false,"output_display":80,"criteria_display":80,"search_type":"select","type":"string","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":false,"order_by":true,"archive":false,"detail":false,"display_detail":80,"options":[{"label":"CoreProgram","value":"CoreProgram","display":10},{"label":"GeneralProgram","value":"GeneralProgram","display":20}],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":6,"id_output_category":7}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute -curl -d '{"id":9,"name":"instrument","label":"instrument","form_label":"Instrument","description":null,"primary_key":false,"output_display":90,"criteria_display":90,"search_type":"select","type":"string","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":false,"order_by":true,"archive":false,"detail":false,"display_detail":90,"options":[{"label":"ECL","value":"ECL","display":10}],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":6,"id_output_category":7}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute -curl -d '{"id":10,"name":"type","label":"type","form_label":"Type","description":null,"primary_key":false,"output_display":100,"criteria_display":100,"search_type":null,"type":"string","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":false,"order_by":true,"archive":false,"detail":false,"display_detail":100,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":7}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute -curl -d '{"id":11,"name":"upload_filename","label":"upload_filename","form_label":"Filename","description":null,"primary_key":false,"output_display":110,"criteria_display":110,"search_type":null,"type":"string","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":true,"order_by":true,"archive":false,"detail":false,"display_detail":110,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":6}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute -curl -d '{"id":12,"name":"burst_id","label":"burst_id","form_label":"Burst ID","description":null,"primary_key":false,"output_display":120,"criteria_display":120,"search_type":"field","type":"string","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":true,"order_by":true,"archive":false,"detail":false,"display_detail":120,"options":[],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":5,"id_output_category":6}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute -curl -d '{"id":13,"name":"pipeline_version","label":"pipeline_version","form_label":"Pipeline version","description":null,"primary_key":false,"output_display":130,"criteria_display":130,"search_type":null,"type":"float","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":false,"order_by":true,"archive":false,"detail":false,"display_detail":130,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":7}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute -curl -d '{"id":14,"name":"schema_version","label":"schema_version","form_label":"Schema version","description":null,"primary_key":false,"output_display":140,"criteria_display":140,"search_type":null,"type":"float","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":false,"order_by":true,"archive":false,"detail":false,"display_detail":140,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":7}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute -curl -d '{"id":15,"name":"src_id","label":"src_id","form_label":"SRC ID","description":null,"primary_key":false,"output_display":150,"criteria_display":150,"search_type":null,"type":"integer","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":false,"order_by":true,"archive":false,"detail":false,"display_detail":150,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":7}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute +curl -d '{"id":1,"name":"product_id","label":"product_id","form_label":"Product ID","description":null,"primary_key":true,"output_display":10,"criteria_display":10,"search_type":"field","type":"integer","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":[],"selected":true,"order_by":true,"archive":false,"detail":false,"detail_display":10,"options":[],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":5,"id_output_category":6,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute +curl -d '{"id":2,"name":"obs_id","label":"obs_id","form_label":"Observation ID","description":null,"primary_key":false,"output_display":20,"criteria_display":20,"search_type":"field","type":"bigint","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":true,"order_by":true,"archive":false,"detail":false,"detail_display":20,"options":[],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":5,"id_output_category":6,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute +curl -d '{"id":3,"name":"acronym","label":"acronym","form_label":"Product Acronym","description":null,"primary_key":false,"output_display":30,"criteria_display":30,"search_type":"select","type":"string","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":true,"order_by":true,"archive":false,"detail":false,"detail_display":30,"options":[{"label":"ECL-DET-UBC","value":"ECL-DET-UBC","display":10},{"label":"OBLC_ECL","value":"OBLC_ECL","display":20}],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":6,"id_output_category":6,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute +curl -d '{"id":4,"name":"url","label":"url","form_label":"Product URL","description":null,"primary_key":false,"output_display":40,"criteria_display":40,"search_type":null,"type":"text","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"link","renderer_config":{"href":"$value","display":"text","text":"$value","icon":"fas fa-link","blank":true},"selected":true,"order_by":true,"archive":false,"detail":false,"detail_display":40,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":6,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute +curl -d '{"id":5,"name":"criteria","label":"criteria","form_label":"Product criteria (based on KWs searchables)","description":null,"primary_key":false,"output_display":50,"criteria_display":50,"search_type":"svom_json_kw","type":"json","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":"json","renderer_config":[],"selected":false,"order_by":true,"archive":false,"detail":false,"detail_display":50,"options":[],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":6,"id_output_category":7,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute +curl -d '{"id":6,"name":"added_at","label":"added_at","form_label":"Added at","description":null,"primary_key":false,"output_display":60,"criteria_display":60,"search_type":"between-date","type":"datetime","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":true,"order_by":true,"archive":false,"detail":false,"detail_display":60,"options":[],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":5,"id_output_category":6,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute +curl -d '{"id":7,"name":"product_version","label":"product_version","form_label":"Version","description":null,"primary_key":false,"output_display":70,"criteria_display":70,"search_type":null,"type":"integer","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":true,"order_by":true,"archive":false,"detail":false,"detail_display":70,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":6,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute +curl -d '{"id":8,"name":"program","label":"program","form_label":"Program","description":null,"primary_key":false,"output_display":80,"criteria_display":80,"search_type":"select","type":"string","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":false,"order_by":true,"archive":false,"detail":false,"detail_display":80,"options":[{"label":"CoreProgram","value":"CoreProgram","display":10},{"label":"GeneralProgram","value":"GeneralProgram","display":20}],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":6,"id_output_category":7,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute +curl -d '{"id":9,"name":"instrument","label":"instrument","form_label":"Instrument","description":null,"primary_key":false,"output_display":90,"criteria_display":90,"search_type":"select","type":"string","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":false,"order_by":true,"archive":false,"detail":false,"detail_display":90,"options":[{"label":"ECL","value":"ECL","display":10}],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":6,"id_output_category":7,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute +curl -d '{"id":10,"name":"type","label":"type","form_label":"Type","description":null,"primary_key":false,"output_display":100,"criteria_display":100,"search_type":null,"type":"string","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":false,"order_by":true,"archive":false,"detail":false,"detail_display":100,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":7,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute +curl -d '{"id":11,"name":"upload_filename","label":"upload_filename","form_label":"Filename","description":null,"primary_key":false,"output_display":110,"criteria_display":110,"search_type":null,"type":"string","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":true,"order_by":true,"archive":false,"detail":false,"detail_display":110,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":6,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute +curl -d '{"id":12,"name":"burst_id","label":"burst_id","form_label":"Burst ID","description":null,"primary_key":false,"output_display":120,"criteria_display":120,"search_type":"field","type":"string","operator":"eq","dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":true,"order_by":true,"archive":false,"detail":false,"detail_display":120,"options":[],"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":5,"id_output_category":6,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute +curl -d '{"id":13,"name":"pipeline_version","label":"pipeline_version","form_label":"Pipeline version","description":null,"primary_key":false,"output_display":130,"criteria_display":130,"search_type":null,"type":"float","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":false,"order_by":true,"archive":false,"detail":false,"detail_display":130,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":7,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute +curl -d '{"id":14,"name":"schema_version","label":"schema_version","form_label":"Schema version","description":null,"primary_key":false,"output_display":140,"criteria_display":140,"search_type":null,"type":"float","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":false,"order_by":true,"archive":false,"detail":false,"detail_display":140,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":7,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute +curl -d '{"id":15,"name":"src_id","label":"src_id","form_label":"SRC ID","description":null,"primary_key":false,"output_display":150,"criteria_display":150,"search_type":null,"type":"integer","operator":null,"dynamic_operator":true,"min":null,"max":null,"placeholder_min":null,"placeholder_max":null,"renderer":null,"renderer_config":null,"selected":false,"order_by":true,"archive":false,"detail":false,"detail_display":150,"options":null,"vo_utype":null,"vo_ucd":null,"vo_unit":null,"vo_description":null,"vo_datatype":null,"vo_size":null,"id_criteria_family":null,"id_output_category":7,"id_detail_output_category":null}' --header 'Content-Type: application/json' -X POST http://localhost/dataset/products/attribute # Add webpages curl -d '{"label":"Default","icon":null,"display":10}' --header 'Content-Type: application/json' -X POST http://localhost/instance/default/webpage-family diff --git a/server/doctrine-proxy/__CG__AppEntityAttribute.php b/server/doctrine-proxy/__CG__AppEntityAttribute.php index 0d1ec8c3f3191d037c0be588092fcc82d35c7c35..e9734fb01579e1ab7e3a2421e77fc5e46fd5ea72 100644 --- a/server/doctrine-proxy/__CG__AppEntityAttribute.php +++ b/server/doctrine-proxy/__CG__AppEntityAttribute.php @@ -67,10 +67,10 @@ class Attribute extends \App\Entity\Attribute implements \Doctrine\ORM\Proxy\Pro public function __sleep() { if ($this->__isInitialized__) { - return ['__isInitialized__', 'id', 'dataset', 'name', 'label', 'formLabel', 'description', 'primaryKey', 'type', 'searchType', 'operator', 'dynamicOperator', 'min', 'max', 'options', 'placeholderMin', 'placeholderMax', 'criteriaDisplay', 'outputDisplay', 'selected', 'renderer', 'rendererConfig', 'orderBy', 'archive', 'detail', 'displayDetail', 'rendererDetail', 'rendererDetailConfig', 'voUtype', 'voUcd', 'voUnit', 'voDescription', 'voDatatype', 'voSize', 'criteriaFamily', 'outputCategory']; + return ['__isInitialized__', 'id', 'dataset', 'name', 'label', 'formLabel', 'description', 'primaryKey', 'type', 'searchType', 'operator', 'dynamicOperator', 'min', 'max', 'options', 'placeholderMin', 'placeholderMax', 'criteriaDisplay', 'outputDisplay', 'selected', 'renderer', 'rendererConfig', 'orderBy', 'archive', 'detailDisplay', 'voUtype', 'voUcd', 'voUnit', 'voDescription', 'voDatatype', 'voSize', 'criteriaFamily', 'outputCategory', 'detailOutputCategory']; } - return ['__isInitialized__', 'id', 'dataset', 'name', 'label', 'formLabel', 'description', 'primaryKey', 'type', 'searchType', 'operator', 'dynamicOperator', 'min', 'max', 'options', 'placeholderMin', 'placeholderMax', 'criteriaDisplay', 'outputDisplay', 'selected', 'renderer', 'rendererConfig', 'orderBy', 'archive', 'detail', 'displayDetail', 'rendererDetail', 'rendererDetailConfig', 'voUtype', 'voUcd', 'voUnit', 'voDescription', 'voDatatype', 'voSize', 'criteriaFamily', 'outputCategory']; + return ['__isInitialized__', 'id', 'dataset', 'name', 'label', 'formLabel', 'description', 'primaryKey', 'type', 'searchType', 'operator', 'dynamicOperator', 'min', 'max', 'options', 'placeholderMin', 'placeholderMax', 'criteriaDisplay', 'outputDisplay', 'selected', 'renderer', 'rendererConfig', 'orderBy', 'archive', 'detailDisplay', 'voUtype', 'voUcd', 'voUnit', 'voDescription', 'voDatatype', 'voSize', 'criteriaFamily', 'outputCategory', 'detailOutputCategory']; } /** @@ -679,23 +679,23 @@ class Attribute extends \App\Entity\Attribute implements \Doctrine\ORM\Proxy\Pro /** * {@inheritDoc} */ - public function getDisplayDetail() + public function getDetailDisplay() { - $this->__initializer__ && $this->__initializer__->__invoke($this, 'getDisplayDetail', []); + $this->__initializer__ && $this->__initializer__->__invoke($this, 'getDetailDisplay', []); - return parent::getDisplayDetail(); + return parent::getDetailDisplay(); } /** * {@inheritDoc} */ - public function setDisplayDetail($displayDetail) + public function setDetailDisplay($detailDisplay) { - $this->__initializer__ && $this->__initializer__->__invoke($this, 'setDisplayDetail', [$displayDetail]); + $this->__initializer__ && $this->__initializer__->__invoke($this, 'setDetailDisplay', [$detailDisplay]); - return parent::setDisplayDetail($displayDetail); + return parent::setDetailDisplay($detailDisplay); } /** @@ -833,111 +833,67 @@ class Attribute extends \App\Entity\Attribute implements \Doctrine\ORM\Proxy\Pro /** * {@inheritDoc} */ - public function getDetail() - { - - $this->__initializer__ && $this->__initializer__->__invoke($this, 'getDetail', []); - - return parent::getDetail(); - } - - /** - * {@inheritDoc} - */ - public function setDetail($detail) - { - - $this->__initializer__ && $this->__initializer__->__invoke($this, 'setDetail', [$detail]); - - return parent::setDetail($detail); - } - - /** - * {@inheritDoc} - */ - public function getRendererDetail() - { - - $this->__initializer__ && $this->__initializer__->__invoke($this, 'getRendererDetail', []); - - return parent::getRendererDetail(); - } - - /** - * {@inheritDoc} - */ - public function setRendererDetail($rendererDetail) - { - - $this->__initializer__ && $this->__initializer__->__invoke($this, 'setRendererDetail', [$rendererDetail]); - - return parent::setRendererDetail($rendererDetail); - } - - /** - * {@inheritDoc} - */ - public function getRendererDetailConfig() + public function getCriteriaFamily() { - $this->__initializer__ && $this->__initializer__->__invoke($this, 'getRendererDetailConfig', []); + $this->__initializer__ && $this->__initializer__->__invoke($this, 'getCriteriaFamily', []); - return parent::getRendererDetailConfig(); + return parent::getCriteriaFamily(); } /** * {@inheritDoc} */ - public function setRendererDetailConfig($rendererDetailConfig) + public function setCriteriaFamily($criteriaFamily) { - $this->__initializer__ && $this->__initializer__->__invoke($this, 'setRendererDetailConfig', [$rendererDetailConfig]); + $this->__initializer__ && $this->__initializer__->__invoke($this, 'setCriteriaFamily', [$criteriaFamily]); - return parent::setRendererDetailConfig($rendererDetailConfig); + return parent::setCriteriaFamily($criteriaFamily); } /** * {@inheritDoc} */ - public function getCriteriaFamily() + public function getOutputCategory() { - $this->__initializer__ && $this->__initializer__->__invoke($this, 'getCriteriaFamily', []); + $this->__initializer__ && $this->__initializer__->__invoke($this, 'getOutputCategory', []); - return parent::getCriteriaFamily(); + return parent::getOutputCategory(); } /** * {@inheritDoc} */ - public function setCriteriaFamily($criteriaFamily) + public function setOutputCategory($outputCategory) { - $this->__initializer__ && $this->__initializer__->__invoke($this, 'setCriteriaFamily', [$criteriaFamily]); + $this->__initializer__ && $this->__initializer__->__invoke($this, 'setOutputCategory', [$outputCategory]); - return parent::setCriteriaFamily($criteriaFamily); + return parent::setOutputCategory($outputCategory); } /** * {@inheritDoc} */ - public function getOutputCategory() + public function getDetailOutputCategory() { - $this->__initializer__ && $this->__initializer__->__invoke($this, 'getOutputCategory', []); + $this->__initializer__ && $this->__initializer__->__invoke($this, 'getDetailOutputCategory', []); - return parent::getOutputCategory(); + return parent::getDetailOutputCategory(); } /** * {@inheritDoc} */ - public function setOutputCategory($outputCategory) + public function setDetailOutputCategory($detailOutputCategory) { - $this->__initializer__ && $this->__initializer__->__invoke($this, 'setOutputCategory', [$outputCategory]); + $this->__initializer__ && $this->__initializer__->__invoke($this, 'setDetailOutputCategory', [$detailOutputCategory]); - return parent::setOutputCategory($outputCategory); + return parent::setDetailOutputCategory($detailOutputCategory); } /** diff --git a/server/doctrine-proxy/__CG__AppEntityDataset.php b/server/doctrine-proxy/__CG__AppEntityDataset.php index 2d0da202673c348e3d21db33c676cf70dcea3e08..cd70caa3d43ccacd978ec065e1107a21206eddf1 100644 --- a/server/doctrine-proxy/__CG__AppEntityDataset.php +++ b/server/doctrine-proxy/__CG__AppEntityDataset.php @@ -67,10 +67,10 @@ class Dataset extends \App\Entity\Dataset implements \Doctrine\ORM\Proxy\Proxy public function __sleep() { if ($this->__isInitialized__) { - return ['__isInitialized__', 'name', 'tableRef', 'label', 'description', 'display', 'dataPath', 'public', 'downloadJson', 'downloadCsv', 'downloadAscii', 'downloadVo', 'serverLinkEnabled', 'datatableEnabled', 'datatableSelectableRows', '' . "\0" . 'App\\Entity\\Dataset' . "\0" . 'coneSearchConfig', 'database', 'datasetFamily', 'attributes']; + return ['__isInitialized__', 'name', 'tableRef', 'label', 'description', 'display', 'dataPath', 'public', 'downloadJson', 'downloadCsv', 'downloadAscii', 'downloadVo', 'serverLinkEnabled', 'datatableEnabled', 'datatableSelectableRows', '' . "\0" . 'App\\Entity\\Dataset' . "\0" . 'coneSearchConfig', '' . "\0" . 'App\\Entity\\Dataset' . "\0" . 'detailConfig', 'database', 'datasetFamily', 'attributes']; } - return ['__isInitialized__', 'name', 'tableRef', 'label', 'description', 'display', 'dataPath', 'public', 'downloadJson', 'downloadCsv', 'downloadAscii', 'downloadVo', 'serverLinkEnabled', 'datatableEnabled', 'datatableSelectableRows', '' . "\0" . 'App\\Entity\\Dataset' . "\0" . 'coneSearchConfig', 'database', 'datasetFamily', 'attributes']; + return ['__isInitialized__', 'name', 'tableRef', 'label', 'description', 'display', 'dataPath', 'public', 'downloadJson', 'downloadCsv', 'downloadAscii', 'downloadVo', 'serverLinkEnabled', 'datatableEnabled', 'datatableSelectableRows', '' . "\0" . 'App\\Entity\\Dataset' . "\0" . 'coneSearchConfig', '' . "\0" . 'App\\Entity\\Dataset' . "\0" . 'detailConfig', 'database', 'datasetFamily', 'attributes']; } /** @@ -500,6 +500,28 @@ class Dataset extends \App\Entity\Dataset implements \Doctrine\ORM\Proxy\Proxy return parent::setConeSearchConfig($coneSearchConfig); } + /** + * {@inheritDoc} + */ + public function getDetailConfig() + { + + $this->__initializer__ && $this->__initializer__->__invoke($this, 'getDetailConfig', []); + + return parent::getDetailConfig(); + } + + /** + * {@inheritDoc} + */ + public function setDetailConfig($detailConfig) + { + + $this->__initializer__ && $this->__initializer__->__invoke($this, 'setDetailConfig', [$detailConfig]); + + return parent::setDetailConfig($detailConfig); + } + /** * {@inheritDoc} */ diff --git a/server/doctrine-proxy/__CG__AppEntityDetailConfig.php b/server/doctrine-proxy/__CG__AppEntityDetailConfig.php new file mode 100644 index 0000000000000000000000000000000000000000..45fb9beb72f23dc4407d16a627f62218b360833b --- /dev/null +++ b/server/doctrine-proxy/__CG__AppEntityDetailConfig.php @@ -0,0 +1,250 @@ +<?php + +namespace DoctrineProxies\__CG__\App\Entity; + + +/** + * DO NOT EDIT THIS FILE - IT WAS CREATED BY DOCTRINE'S PROXY GENERATOR + */ +class DetailConfig extends \App\Entity\DetailConfig implements \Doctrine\ORM\Proxy\Proxy +{ + /** + * @var \Closure the callback responsible for loading properties in the proxy object. This callback is called with + * three parameters, being respectively the proxy object to be initialized, the method that triggered the + * initialization process and an array of ordered parameters that were passed to that method. + * + * @see \Doctrine\Common\Proxy\Proxy::__setInitializer + */ + public $__initializer__; + + /** + * @var \Closure the callback responsible of loading properties that need to be copied in the cloned object + * + * @see \Doctrine\Common\Proxy\Proxy::__setCloner + */ + public $__cloner__; + + /** + * @var boolean flag indicating if this object was already initialized + * + * @see \Doctrine\Persistence\Proxy::__isInitialized + */ + public $__isInitialized__ = false; + + /** + * @var array<string, null> properties to be lazy loaded, indexed by property name + */ + public static $lazyPropertiesNames = array ( +); + + /** + * @var array<string, mixed> default values of properties to be lazy loaded, with keys being the property names + * + * @see \Doctrine\Common\Proxy\Proxy::__getLazyProperties + */ + public static $lazyPropertiesDefaults = array ( +); + + + + public function __construct(?\Closure $initializer = null, ?\Closure $cloner = null) + { + + $this->__initializer__ = $initializer; + $this->__cloner__ = $cloner; + } + + + + + + + + /** + * + * @return array + */ + public function __sleep() + { + if ($this->__isInitialized__) { + return ['__isInitialized__', 'id', 'enabled', 'content']; + } + + return ['__isInitialized__', 'id', 'enabled', 'content']; + } + + /** + * + */ + public function __wakeup() + { + if ( ! $this->__isInitialized__) { + $this->__initializer__ = function (DetailConfig $proxy) { + $proxy->__setInitializer(null); + $proxy->__setCloner(null); + + $existingProperties = get_object_vars($proxy); + + foreach ($proxy::$lazyPropertiesDefaults as $property => $defaultValue) { + if ( ! array_key_exists($property, $existingProperties)) { + $proxy->$property = $defaultValue; + } + } + }; + + } + } + + /** + * + */ + public function __clone() + { + $this->__cloner__ && $this->__cloner__->__invoke($this, '__clone', []); + } + + /** + * Forces initialization of the proxy + */ + public function __load() + { + $this->__initializer__ && $this->__initializer__->__invoke($this, '__load', []); + } + + /** + * {@inheritDoc} + * @internal generated method: use only when explicitly handling proxy specific loading logic + */ + public function __isInitialized() + { + return $this->__isInitialized__; + } + + /** + * {@inheritDoc} + * @internal generated method: use only when explicitly handling proxy specific loading logic + */ + public function __setInitialized($initialized) + { + $this->__isInitialized__ = $initialized; + } + + /** + * {@inheritDoc} + * @internal generated method: use only when explicitly handling proxy specific loading logic + */ + public function __setInitializer(\Closure $initializer = null) + { + $this->__initializer__ = $initializer; + } + + /** + * {@inheritDoc} + * @internal generated method: use only when explicitly handling proxy specific loading logic + */ + public function __getInitializer() + { + return $this->__initializer__; + } + + /** + * {@inheritDoc} + * @internal generated method: use only when explicitly handling proxy specific loading logic + */ + public function __setCloner(\Closure $cloner = null) + { + $this->__cloner__ = $cloner; + } + + /** + * {@inheritDoc} + * @internal generated method: use only when explicitly handling proxy specific cloning logic + */ + public function __getCloner() + { + return $this->__cloner__; + } + + /** + * {@inheritDoc} + * @internal generated method: use only when explicitly handling proxy specific loading logic + * @deprecated no longer in use - generated code now relies on internal components rather than generated public API + * @static + */ + public function __getLazyProperties() + { + return self::$lazyPropertiesDefaults; + } + + + /** + * {@inheritDoc} + */ + public function getId() + { + if ($this->__isInitialized__ === false) { + return (int) parent::getId(); + } + + + $this->__initializer__ && $this->__initializer__->__invoke($this, 'getId', []); + + return parent::getId(); + } + + /** + * {@inheritDoc} + */ + public function getEnabled() + { + + $this->__initializer__ && $this->__initializer__->__invoke($this, 'getEnabled', []); + + return parent::getEnabled(); + } + + /** + * {@inheritDoc} + */ + public function setEnabled($enabled) + { + + $this->__initializer__ && $this->__initializer__->__invoke($this, 'setEnabled', [$enabled]); + + return parent::setEnabled($enabled); + } + + /** + * {@inheritDoc} + */ + public function getContent() + { + + $this->__initializer__ && $this->__initializer__->__invoke($this, 'getContent', []); + + return parent::getContent(); + } + + /** + * {@inheritDoc} + */ + public function setContent($content) + { + + $this->__initializer__ && $this->__initializer__->__invoke($this, 'setContent', [$content]); + + return parent::setContent($content); + } + + /** + * {@inheritDoc} + */ + public function jsonSerialize(): array + { + + $this->__initializer__ && $this->__initializer__->__invoke($this, 'jsonSerialize', []); + + return parent::jsonSerialize(); + } + +} diff --git a/server/src/Action/AttributeAction.php b/server/src/Action/AttributeAction.php index 44eba539366173c669d871bd3050724f037dd908..4ceb4096c1a7eaf5ba2c3f9d653a3805b0ae9e9e 100644 --- a/server/src/Action/AttributeAction.php +++ b/server/src/Action/AttributeAction.php @@ -85,8 +85,7 @@ final class AttributeAction extends AbstractAction 'renderer_config', 'order_by', 'archive', - 'detail', - 'display_detail', + 'detail_display', 'vo_utype', 'vo_ucd', 'vo_unit', @@ -94,7 +93,8 @@ final class AttributeAction extends AbstractAction 'vo_datatype', 'vo_size', 'id_criteria_family', - 'id_output_category' + 'id_output_category', + 'id_detail_output_category' ); foreach ($fields as $a) { if (!array_key_exists($a, $parsedBody)) { @@ -150,8 +150,7 @@ final class AttributeAction extends AbstractAction $attribute->setRendererConfig($parsedBody['renderer_config']); $attribute->setOrderBy($parsedBody['order_by']); $attribute->setArchive($parsedBody['archive']); - $attribute->setDetail($parsedBody['detail']); - $attribute->setDisplayDetail($parsedBody['display_detail']); + $attribute->setDetailDisplay($parsedBody['detail_display']); $attribute->setVoUtype($parsedBody['vo_utype']); $attribute->setVoUcd($parsedBody['vo_ucd']); $attribute->setVoUnit($parsedBody['vo_unit']); @@ -176,6 +175,15 @@ final class AttributeAction extends AbstractAction ); } $attribute->setOutputCategory($outputCategory); + if (is_null($parsedBody['id_detail_output_category'])) { + $detailOutputCategory = null; + } else { + $detailOutputCategory = $this->em->find( + 'App\Entity\OutputCategory', + $parsedBody['id_detail_output_category'] + ); + } + $attribute->setDetailOutputCategory($detailOutputCategory); $this->em->flush(); } } diff --git a/server/src/Action/AttributeListAction.php b/server/src/Action/AttributeListAction.php index 07f18ab47b232d1d4944e98dd449573e3e3d3431..e1496b10d00f994be42136fd2cdaaa719a39c80a 100644 --- a/server/src/Action/AttributeListAction.php +++ b/server/src/Action/AttributeListAction.php @@ -87,8 +87,7 @@ final class AttributeListAction extends AbstractAction 'renderer_config', 'order_by', 'archive', - 'detail', - 'display_detail', + 'detail_display', 'vo_utype', 'vo_ucd', 'vo_unit', @@ -96,7 +95,8 @@ final class AttributeListAction extends AbstractAction 'vo_datatype', 'vo_size', 'id_criteria_family', - 'id_output_category' + 'id_output_category', + 'id_detail_output_category' ); foreach ($fields as $a) { if (!array_key_exists($a, $parsedBody)) { @@ -148,8 +148,7 @@ final class AttributeListAction extends AbstractAction $attribute->setRendererConfig($parsedBody['renderer_config']); $attribute->setOrderBy($parsedBody['order_by']); $attribute->setArchive($parsedBody['archive']); - $attribute->setDetail($parsedBody['detail']); - $attribute->setDisplayDetail($parsedBody['display_detail']); + $attribute->setDetailDisplay($parsedBody['detail_display']); $attribute->setVoUtype($parsedBody['vo_utype']); $attribute->setVoUcd($parsedBody['vo_ucd']); $attribute->setVoUnit($parsedBody['vo_unit']); @@ -174,6 +173,15 @@ final class AttributeListAction extends AbstractAction ); } $attribute->setOutputCategory($outputCategory); + if (is_null($parsedBody['id_detail_output_category'])) { + $detailOutputCategory = null; + } else { + $detailOutputCategory = $this->em->find( + 'App\Entity\OutputCategory', + $parsedBody['id_detail_output_category'] + ); + } + $attribute->setDetailOutputCategory($detailOutputCategory); $this->em->persist($attribute); $this->em->flush(); diff --git a/server/src/Entity/Attribute.php b/server/src/Entity/Attribute.php index fcbdf69df8ce0f233f882affb6d1becc7ae41b22..82f8aeb5d389af1631b9c39ae6d0b92cd429e087 100644 --- a/server/src/Entity/Attribute.php +++ b/server/src/Entity/Attribute.php @@ -185,19 +185,12 @@ class Attribute implements \JsonSerializable */ protected $archive; - /** - * @var bool - * - * @Column(type="boolean", name="detail", nullable=false, options={"default":false}) - */ - protected $detail; - /** * @var int * - * @Column(type="integer", name="display_detail", nullable=true) + * @Column(type="integer", name="detail_display", nullable=true) */ - protected $displayDetail; + protected $detailDisplay; /** * @var string @@ -257,6 +250,14 @@ class Attribute implements \JsonSerializable */ protected $outputCategory; + /** + * @var OutputCategory + * + * @ManyToOne(targetEntity="OutputCategory") + * @JoinColumn(name="detail_output_category", referencedColumnName="id", nullable=true, onDelete="SET NULL") + */ + protected $detailOutputCategory; + public function __construct(int $id, Dataset $dataset) { $this->id = $id; @@ -488,14 +489,14 @@ class Attribute implements \JsonSerializable $this->archive = $archive; } - public function getDisplayDetail() + public function getDetailDisplay() { - return $this->displayDetail; + return $this->detailDisplay; } - public function setDisplayDetail($displayDetail) + public function setDetailDisplay($detailDisplay) { - $this->displayDetail = $displayDetail; + $this->detailDisplay = $detailDisplay; } public function getVoUtype() @@ -558,16 +559,6 @@ class Attribute implements \JsonSerializable $this->voSize = $voSize; } - public function getDetail() - { - return $this->detail; - } - - public function setDetail($detail) - { - $this->detail = $detail; - } - public function getCriteriaFamily() { return $this->criteriaFamily; @@ -588,6 +579,16 @@ class Attribute implements \JsonSerializable $this->outputCategory = $outputCategory; } + public function getDetailOutputCategory() + { + return $this->detailOutputCategory; + } + + public function setDetailOutputCategory($detailOutputCategory) + { + $this->detailOutputCategory = $detailOutputCategory; + } + public function jsonSerialize(): array { return [ @@ -613,8 +614,7 @@ class Attribute implements \JsonSerializable 'renderer_config' => $this->getRendererConfig(), 'order_by' => $this->getOrderBy(), 'archive' => $this->getArchive(), - 'detail' => $this->getDetail(), - 'display_detail' => $this->getDisplayDetail(), + 'detail_display' => $this->getDetailDisplay(), 'vo_utype' => $this->getVoUtype(), 'vo_ucd' => $this->getVoUcd(), 'vo_unit' => $this->getVoUnit(), @@ -622,7 +622,8 @@ class Attribute implements \JsonSerializable 'vo_datatype' => $this->getVoDatatype(), 'vo_size' => $this->getVoSize(), 'id_criteria_family' => is_null($this->getCriteriaFamily()) ? null : $this->getCriteriaFamily()->getId(), - 'id_output_category' => is_null($this->getOutputCategory()) ? null : $this->getOutputCategory()->getId() + 'id_output_category' => is_null($this->getOutputCategory()) ? null : $this->getOutputCategory()->getId(), + 'id_detail_output_category' => is_null($this->getDetailOutputCategory()) ? null : $this->getDetailOutputCategory()->getId() ]; } }