Skip to content
Snippets Groups Projects
Commit 1576b3a9 authored by François Agneray's avatar François Agneray
Browse files

Handle data_path property for instance entity

parent b207e6a9
No related branches found
No related tags found
1 merge request!29Develop
Showing
with 96 additions and 32 deletions
......@@ -45,7 +45,7 @@
[rootDirectory]="rootDirectory"
[rootDirectoryIsLoading]="rootDirectoryIsLoading"
[rootDirectoryIsLoaded]="rootDirectoryIsLoaded"
(loadRootDirectory)="loadRootDirectory.emit($event)">
(loadRootDirectory)="onChangeDataPath($event)">
</app-data-path-form-control>
<div class="form-group">
<label for="display">Display</label>
......
......@@ -10,13 +10,14 @@
import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';
import { FormGroup, FormControl, Validators } from '@angular/forms';
import { Dataset, Survey, DatasetFamily, FileInfo, Attribute } from 'src/app/metamodel/models';
import { Instance, Dataset, Survey, DatasetFamily, FileInfo, Attribute } from 'src/app/metamodel/models';
@Component({
selector: 'app-dataset-form',
templateUrl: 'dataset-form.component.html'
})
export class DatasetFormComponent implements OnInit, OnChanges {
@Input() instance: Instance;
@Input() dataset: Dataset;
@Input() surveyList: Survey[];
@Input() tableListIsLoading: boolean;
......@@ -137,4 +138,9 @@ export class DatasetFormComponent implements OnInit, OnChanges {
this.changeSurvey.emit(this.surveyList.find(survey => survey.name === surveyName).id_database);
}
}
onChangeDataPath(path: string) {
this.loadRootDirectory.emit(this.instance.data_path + path);
this.form.markAsDirty();
}
}
......@@ -9,7 +9,6 @@
import { DatasetCardComponent } from './dataset-card.component';
import { DatasetFormComponent } from './dataset-form.component';
import { DataPathFormControlComponent } from './data-path-form-control.component';
import { ImageFormGroupComponent } from './image-form-group.component';
import { ConeSearchFormGroupComponent } from './cone-search-form-group.component';
import { DownloadFormGroupComponent } from './download-form-group.component';
......@@ -21,7 +20,6 @@ import { DatatableFormGroupComponent } from './datatable-form-group.component';
export const datasetComponents = [
DatasetCardComponent,
DatasetFormComponent,
DataPathFormControlComponent,
ImageFormGroupComponent,
ConeSearchFormGroupComponent,
DownloadFormGroupComponent,
......
......@@ -9,10 +9,13 @@
<label for="label">Label</label>
<input type="text" class="form-control" id="label" name="label" formControlName="label">
</div>
<div class="form-group">
<label for="label">Data path</label>
<input type="text" class="form-control" id="data_path" name="data_path" formControlName="data_path">
</div>
<app-data-path-form-control
[form]="form"
[rootDirectory]="rootDirectory"
[rootDirectoryIsLoading]="rootDirectoryIsLoading"
[rootDirectoryIsLoaded]="rootDirectoryIsLoaded"
(loadRootDirectory)="onChangeDataPath($event)">
</app-data-path-form-control>
</accordion-group>
<app-design-form-group [form]="designFormGroup"></app-design-form-group>
<app-search-form-group [form]="searchFormGroup"></app-search-form-group>
......
......@@ -10,7 +10,7 @@
import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';
import { FormGroup, FormControl, Validators } from '@angular/forms';
import { Instance } from 'src/app/metamodel/models';
import { Instance, FileInfo } from 'src/app/metamodel/models';
@Component({
selector: 'app-instance-form',
......@@ -18,6 +18,10 @@ import { Instance } from 'src/app/metamodel/models';
})
export class InstanceFormComponent implements OnInit {
@Input() instance: Instance;
@Input() rootDirectory: FileInfo[];
@Input() rootDirectoryIsLoading: boolean;
@Input() rootDirectoryIsLoaded: boolean;
@Output() loadRootDirectory: EventEmitter<string> = new EventEmitter();
@Output() onSubmit: EventEmitter<Instance> = new EventEmitter();
public designFormGroup = new FormGroup({
......@@ -54,6 +58,11 @@ export class InstanceFormComponent implements OnInit {
}
}
onChangeDataPath(path: string) {
this.loadRootDirectory.emit(path);
this.form.markAsDirty();
}
submit() {
if (this.instance) {
this.onSubmit.emit({
......
......@@ -7,8 +7,10 @@
* file that was distributed with this source code.
*/
import { DeleteBtnComponent } from "./delete-btn.component";
import { DeleteBtnComponent } from './delete-btn.component';
import { DataPathFormControlComponent } from './data-path-form-control.component';
export const sharedComponents = [
DeleteBtnComponent
DeleteBtnComponent,
DataPathFormControlComponent
];
......@@ -5,8 +5,8 @@
<a routerLink="/admin/instance-list">Instances</a>
</li>
<li class="breadcrumb-item active" aria-current="page">
<a routerLink="/admin/configure-instance/{{ instanceSelected | async }}">
Configure instance {{ instanceSelected | async }}
<a routerLink="/admin/configure-instance/{{ (instance | async).name }}">
Configure instance {{ (instance | async).name }}
</a>
</li>
<li class="breadcrumb-item active" aria-current="page">Edit dataset {{ datasetSelected | async }}</li>
......@@ -26,6 +26,7 @@
&& (datasetFamilyListIsLoaded | async)" class="row">
<div class="col-12">
<app-dataset-form
[instance]="instance | async"
[dataset]="datasetList | async | datasetByName:(datasetSelected | async)"
[surveyList]="surveyList | async"
[tableListIsLoading]="tableListIsLoading | async"
......@@ -44,7 +45,7 @@
<i class="fa fa-database"></i> Update dataset information
</button>
&nbsp;
<a routerLink="/admin/configure-instance/{{instanceSelected | async}}" type="button" class="btn btn-danger">Cancel</a>
<a routerLink="/admin/configure-instance/{{ (instance | async).name }}" type="button" class="btn btn-danger">Cancel</a>
</app-dataset-form>
</div>
</div>
......
......@@ -13,7 +13,7 @@ import { ActivatedRoute } from '@angular/router';
import { Observable } from 'rxjs';
import { Store } from '@ngrx/store';
import { Survey, DatasetFamily, Dataset, Attribute, FileInfo } from 'src/app/metamodel/models';
import { Instance, Survey, DatasetFamily, Dataset, Attribute, FileInfo } from 'src/app/metamodel/models';
import * as datasetSelector from 'src/app/metamodel/selectors/dataset.selector';
import * as datasetActions from 'src/app/metamodel/actions/dataset.actions';
import * as attributeSelector from 'src/app/metamodel/selectors/attribute.selector';
......@@ -31,7 +31,7 @@ import * as rootDirectorySelector from 'src/app/metamodel/selectors/root-directo
templateUrl: 'edit-dataset.component.html'
})
export class EditDatasetComponent implements OnInit {
public instanceSelected: Observable<string>;
public instance: Observable<Instance>;
public datasetSelected: Observable<string>;
public datasetList: Observable<Dataset[]>;
public datasetListIsLoading: Observable<boolean>;
......@@ -53,7 +53,7 @@ export class EditDatasetComponent implements OnInit {
public rootDirectoryIsLoaded: Observable<boolean>;
constructor(private store: Store<{ }>, private route: ActivatedRoute) {
this.instanceSelected = store.select(instanceSelector.selectInstanceNameByRoute);
this.instance = store.select(instanceSelector.selectInstanceByRouteName);
this.datasetSelected = store.select(datasetSelector.selectDatasetNameByRoute);
this.datasetList = store.select(datasetSelector.selectAllDatasets);
this.datasetListIsLoading = store.select(datasetSelector.selectDatasetListIsLoading);
......
......@@ -5,8 +5,8 @@
<a routerLink="/admin/instance-list">Instances</a>
</li>
<li class="breadcrumb-item active" aria-current="page">
<a routerLink="/admin/configure-instance/{{ instanceSelected | async }}">
Configure instance {{ instanceSelected | async }}
<a routerLink="/admin/configure-instance/{{ (instance | async).name }}">
Configure instance {{ (instance | async).name }}
</a>
</li>
<li class="breadcrumb-item active" aria-current="page">New dataset</li>
......@@ -20,6 +20,7 @@
<div *ngIf="(surveyListIsLoaded | async) && (datasetFamilyListIsLoaded | async)" class="row">
<div class="col-12">
<app-dataset-form
[instance]="instance | async"
[surveyList]="surveyList | async"
[tableListIsLoading]="tableListIsLoading | async"
[tableListIsLoaded]="tableListIsLoaded | async"
......@@ -37,7 +38,7 @@
<i class="fa fa-database"></i> Add new dataset
</button>
&nbsp;
<a routerLink="/admin/configure-instance/{{instanceSelected | async}}" type="button" class="btn btn-danger">Cancel</a>
<a routerLink="/admin/configure-instance/{{ (instance | async).name }}" type="button" class="btn btn-danger">Cancel</a>
</app-dataset-form>
</div>
</div>
......
......@@ -14,7 +14,7 @@ import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { Store } from '@ngrx/store';
import { Survey, DatasetFamily, Dataset, FileInfo } from 'src/app/metamodel/models';
import { Instance, Survey, DatasetFamily, Dataset, FileInfo } from 'src/app/metamodel/models';
import * as surveySelector from 'src/app/metamodel/selectors/survey.selector';
import * as tableActions from 'src/app/metamodel/actions/table.actions';
import * as tableSelector from 'src/app/metamodel/selectors/table.selector';
......@@ -29,7 +29,7 @@ import * as rootDirectorySelector from 'src/app/metamodel/selectors/root-directo
templateUrl: 'new-dataset.component.html'
})
export class NewDatasetComponent implements OnInit {
public instanceSelected: Observable<string>;
public instance: Observable<Instance>;
public surveyListIsLoading: Observable<boolean>;
public surveyListIsLoaded: Observable<boolean>;
public surveyList: Observable<Survey[]>;
......@@ -45,7 +45,7 @@ export class NewDatasetComponent implements OnInit {
public rootDirectoryIsLoaded: Observable<boolean>;
constructor(private store: Store<{ }>, private route: ActivatedRoute) {
this.instanceSelected = store.select(instanceSelector.selectInstanceNameByRoute);
this.instance = store.select(instanceSelector.selectInstanceByRouteName);
this.surveyListIsLoading = store.select(surveySelector.selectSurveyListIsLoading);
this.surveyListIsLoaded = store.select(surveySelector.selectSurveyListIsLoaded);
this.surveyList = store.select(surveySelector.selectAllSurveys);
......
......@@ -10,7 +10,14 @@
<div class="container">
<div class="row">
<div class="col-12">
<app-instance-form [instance]="instance | async" (onSubmit)="editInstance($event)" #formInstance>
<app-instance-form
[instance]="instance | async"
[rootDirectory]="rootDirectory | async"
[rootDirectoryIsLoading]="rootDirectoryIsLoading | async"
[rootDirectoryIsLoaded]="rootDirectoryIsLoaded | async"
(loadRootDirectory)="loadRootDirectory($event)"
(onSubmit)="editInstance($event)"
#formInstance>
<button [disabled]="!formInstance.form.valid || formInstance.form.pristine" type="submit" class="btn btn-primary">
<span class="fa fa-database"></span> Update instance information
</button>
......
......@@ -12,9 +12,11 @@ import { Component } from '@angular/core';
import { Store } from '@ngrx/store';
import { Observable } from 'rxjs';
import { Instance } from 'src/app/metamodel/models';
import { Instance, FileInfo } from 'src/app/metamodel/models';
import * as instanceActions from 'src/app/metamodel/actions/instance.actions';
import * as instanceSelector from 'src/app/metamodel/selectors/instance.selector';
import * as rootDirectoryActions from 'src/app/metamodel/actions/root-directory.actions';
import * as rootDirectorySelector from 'src/app/metamodel/selectors/root-directory.selector';
@Component({
selector: 'app-edit-instance',
......@@ -22,12 +24,22 @@ import * as instanceSelector from 'src/app/metamodel/selectors/instance.selector
})
export class EditInstanceComponent {
public instance: Observable<Instance>;
public rootDirectory: Observable<FileInfo[]>;
public rootDirectoryIsLoading: Observable<boolean>;
public rootDirectoryIsLoaded: Observable<boolean>;
constructor(private store: Store<{ }>) {
this.instance = store.select(instanceSelector.selectInstanceByRouteName);
this.rootDirectory = store.select(rootDirectorySelector.selectAllFileInfo);
this.rootDirectoryIsLoading = store.select(rootDirectorySelector.selectRootDirectoryIsLoading);
this.rootDirectoryIsLoaded = store.select(rootDirectorySelector.selectRootDirectoryIsLoaded);
}
editInstance(instance: Instance) {
this.store.dispatch(instanceActions.editInstance({ instance }));
}
loadRootDirectory(path: string) {
this.store.dispatch(rootDirectoryActions.loadRootDirectory({ path }));
}
}
......@@ -10,7 +10,13 @@
<div class="container">
<div class="row">
<div class="col-12">
<app-instance-form (onSubmit)="addNewInstance($event)" #formInstance>
<app-instance-form
[rootDirectory]="rootDirectory | async"
[rootDirectoryIsLoading]="rootDirectoryIsLoading | async"
[rootDirectoryIsLoaded]="rootDirectoryIsLoaded | async"
(loadRootDirectory)="loadRootDirectory($event)"
(onSubmit)="addNewInstance($event)"
#formInstance>
<button [disabled]="!formInstance.form.valid || formInstance.form.pristine" type="submit" class="btn btn-primary">
<span class="fa fa-database"></span> Add the new instance
</button>
......
......@@ -10,17 +10,33 @@
import { Component } from '@angular/core';
import { Store } from '@ngrx/store';
import { Instance } from 'src/app/metamodel/models';
import * as instanceActions from 'src/app/metamodel/actions/instance.actions'
import { Observable } from 'rxjs';
import { Instance, FileInfo } from 'src/app/metamodel/models';
import * as instanceActions from 'src/app/metamodel/actions/instance.actions';
import * as rootDirectoryActions from 'src/app/metamodel/actions/root-directory.actions';
import * as rootDirectorySelector from 'src/app/metamodel/selectors/root-directory.selector';
@Component({
selector: 'app-new-instance',
templateUrl: 'new-instance.component.html'
})
export class NewInstanceComponent {
constructor(private store: Store<{ }>) { }
public rootDirectory: Observable<FileInfo[]>;
public rootDirectoryIsLoading: Observable<boolean>;
public rootDirectoryIsLoaded: Observable<boolean>;
constructor(private store: Store<{ }>) {
this.rootDirectory = store.select(rootDirectorySelector.selectAllFileInfo);
this.rootDirectoryIsLoading = store.select(rootDirectorySelector.selectRootDirectoryIsLoading);
this.rootDirectoryIsLoaded = store.select(rootDirectorySelector.selectRootDirectoryIsLoaded);
}
addNewInstance(instance: Instance) {
this.store.dispatch(instanceActions.addInstance({ instance }));
}
loadRootDirectory(path: string) {
this.store.dispatch(rootDirectoryActions.loadRootDirectory({ path }));
}
}
......@@ -17,6 +17,7 @@ export interface Dataset {
survey_name: string;
id_dataset_family: number;
public: boolean;
full_data_path: string;
config: {
images: any[],
cone_search: {
......
......@@ -10,6 +10,7 @@
export interface Instance {
name: string;
label: string;
data_path: string;
config: {
design: {
design_color: string
......
......@@ -84,8 +84,9 @@ final class DatasetFileExplorerAction extends AbstractAction
$this->verifyDatasetAuthorization($request, $dataset->getName(), $this->settings['admin_role']);
}
$path = $this->dataPath . $dataset->getDataPath();
// Dataset data_path
$path = $this->dataPath . $dataset->getFullDataPath();
if (array_key_exists('fpath', $args)) {
$path .= DIRECTORY_SEPARATOR . $args['fpath'];
}
......
......@@ -85,7 +85,7 @@ final class DownloadFileAction extends AbstractAction
}
// Search the file
$filePath = $this->dataPath . $dataset->getDataPath() . DIRECTORY_SEPARATOR . $args['fpath'];
$filePath = $this->dataPath . $dataset->getFullDataPath() . DIRECTORY_SEPARATOR . $args['fpath'];
// If the file not found 404
if (!file_exists($filePath)) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment