From 14c2157be8e7fcd216fe552f16e362ab79c669d5 Mon Sep 17 00:00:00 2001
From: Baptiste Toulemonde <toulemonde@cines.fr>
Date: Tue, 8 Mar 2022 14:58:16 +0100
Subject: [PATCH] test 200 and 221 done

---
 .../pastis/src/app/models/pua.model.ts        |   2 +-
 .../file-tree-metadata.component.ts           | 172 +++++++++---------
 .../file-tree/file-tree.component.ts          |   6 +
 3 files changed, 96 insertions(+), 84 deletions(-)

diff --git a/ui/ui-frontend/projects/pastis/src/app/models/pua.model.ts b/ui/ui-frontend/projects/pastis/src/app/models/pua.model.ts
index bdca4d07f..fb7fc81f8 100644
--- a/ui/ui-frontend/projects/pastis/src/app/models/pua.model.ts
+++ b/ui/ui-frontend/projects/pastis/src/app/models/pua.model.ts
@@ -4,7 +4,7 @@ import { PuaProperties } from './pua.propreties.model';
 export class PUA {
     "$schema": string;
     "type": "object";
-    "additionalProperties": false;
+    "additionalProperties": boolean;
     "definitions" : PuaDefinitions;
     "properties": PuaProperties;
   }
\ No newline at end of file
diff --git a/ui/ui-frontend/projects/pastis/src/app/profile/edit-profile/file-tree-metadata/file-tree-metadata.component.ts b/ui/ui-frontend/projects/pastis/src/app/profile/edit-profile/file-tree-metadata/file-tree-metadata.component.ts
index 3b4e90bfa..9618f768b 100644
--- a/ui/ui-frontend/projects/pastis/src/app/profile/edit-profile/file-tree-metadata/file-tree-metadata.component.ts
+++ b/ui/ui-frontend/projects/pastis/src/app/profile/edit-profile/file-tree-metadata/file-tree-metadata.component.ts
@@ -35,12 +35,12 @@ same conditions as regards security.
 The fact that you are presently reading this means that you have had
 knowledge of the CeCILL-C license and that you accept its terms.
 */
-import {CdkTextareaAutosize} from '@angular/cdk/text-field';
-import {Component, EventEmitter, Output, ViewChild, ViewEncapsulation} from '@angular/core';
-import {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';
-import {MatTableDataSource} from '@angular/material/table';
-import {FileService} from '../../../core/services/file.service';
-import {SedaService} from '../../../core/services/seda.service';
+import { CdkTextareaAutosize } from '@angular/cdk/text-field';
+import { Component, EventEmitter, Output, ViewChild, ViewEncapsulation } from '@angular/core';
+import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
+import { MatTableDataSource } from '@angular/material/table';
+import { FileService } from '../../../core/services/file.service';
+import { SedaService } from '../../../core/services/seda.service';
 import {
   CardinalityConstants,
   DataTypeConstants,
@@ -51,23 +51,23 @@ import {
   TypeConstants,
   ValueOrDataConstants
 } from '../../../models/file-node';
-import {SedaData, SedaElementConstants} from '../../../models/seda-data';
-import {FileTreeMetadataService} from './file-tree-metadata.service';
-import {AttributesPopupComponent} from './attributes/attributes.component';
-import {AttributeData} from '../../../models/edit-attribute-models';
-import {ProfileService} from '../../../core/services/profile.service';
-import {BreadcrumbDataMetadata, BreadcrumbDataTop} from '../../../models/breadcrumb';
-import {StartupService} from 'ui-frontend-common';
-import {Router} from '@angular/router';
-import {Subscription} from "rxjs";
-import {MatCheckboxChange} from "@angular/material/checkbox";
-import {PastisPopupMetadataLanguageService} from '../../../shared/pastis-popup-metadata-language/pastis-popup-metadata-language.service';
-import {FileTreeService} from '../file-tree/file-tree.service';
-import {LangChangeEvent, TranslateService} from "@ngx-translate/core";
-import {CardinalityValues, MetadataHeaders} from '../../../models/models';
-import {NotificationService} from '../../../core/services/notification.service';
-import {PastisDialogData} from '../../../shared/pastis-dialog/classes/pastis-dialog-data';
-import {environment} from 'projects/pastis/src/environments/environment';
+import { SedaData, SedaElementConstants } from '../../../models/seda-data';
+import { FileTreeMetadataService } from './file-tree-metadata.service';
+import { AttributesPopupComponent } from './attributes/attributes.component';
+import { AttributeData } from '../../../models/edit-attribute-models';
+import { ProfileService } from '../../../core/services/profile.service';
+import { BreadcrumbDataMetadata, BreadcrumbDataTop } from '../../../models/breadcrumb';
+import { StartupService } from 'ui-frontend-common';
+import { Router } from '@angular/router';
+import { Subscription } from "rxjs";
+import { MatCheckboxChange } from "@angular/material/checkbox";
+import { PastisPopupMetadataLanguageService } from '../../../shared/pastis-popup-metadata-language/pastis-popup-metadata-language.service';
+import { FileTreeService } from '../file-tree/file-tree.service';
+import { LangChangeEvent, TranslateService } from "@ngx-translate/core";
+import { CardinalityValues, MetadataHeaders } from '../../../models/models';
+import { NotificationService } from '../../../core/services/notification.service';
+import { PastisDialogData } from '../../../shared/pastis-dialog/classes/pastis-dialog-data';
+import { environment } from 'projects/pastis/src/environments/environment';
 
 
 const FILE_TREE_METADATA_TRANSLATE_PATH = 'PROFILE.EDIT_PROFILE.FILE_TREE_METADATA';
@@ -101,7 +101,7 @@ export class FileTreeMetadataComponent {
   //Mat table
   matDataSource: MatTableDataSource<MetadataHeaders>;
 
-  @ViewChild('autosize', {static: false}) autosize: CdkTextareaAutosize;
+  @ViewChild('autosize', { static: false }) autosize: CdkTextareaAutosize;
 
   displayedColumns: string[] = ['nomDuChamp', 'valeurFixe', 'cardinalite', 'commentaire', 'menuoption'];
 
@@ -157,16 +157,16 @@ export class FileTreeMetadataComponent {
   @Output()
   public removeNode: EventEmitter<FileNode> = new EventEmitter<FileNode>();
 
-  private _profileServiceProfileModeSubscription : Subscription;
+  private _profileServiceProfileModeSubscription: Subscription;
 
   @Output()
-  public duplicateNode: EventEmitter<FileNode>= new EventEmitter<FileNode>();
+  public duplicateNode: EventEmitter<FileNode> = new EventEmitter<FileNode>();
 
-  private _fileServiceSubscription : Subscription;
-  private _fileMetadataServiceSubscriptionSelectedCardinalities : Subscription;
-  private _fileServiceSubscriptionNodeChange : Subscription;
-  private _sedaServiceSubscritptionSelectedSedaNode : Subscription;
-  private _fileMetadataServiceSubscriptionDataSource : Subscription;
+  private _fileServiceSubscription: Subscription;
+  private _fileMetadataServiceSubscriptionSelectedCardinalities: Subscription;
+  private _fileServiceSubscriptionNodeChange: Subscription;
+  private _sedaServiceSubscritptionSelectedSedaNode: Subscription;
+  private _fileMetadataServiceSubscriptionDataSource: Subscription;
   private _sedalanguageSub: Subscription;
 
   sedaLanguage: boolean;
@@ -189,12 +189,12 @@ export class FileTreeMetadataComponent {
   commentaire: string;
   enumeration: string[];
   additionalProperties: boolean;
-  additionalPropertiesMetadonnee : boolean;
+  additionalPropertiesMetadonnee: boolean;
 
   constructor(private fileService: FileService, private fileMetadataService: FileTreeMetadataService,
     private sedaService: SedaService, private fb: FormBuilder, private notificationService: NotificationService,
     private router: Router, private startupService: StartupService, public profileService: ProfileService,
-    private fileTreeService:FileTreeService, private metadataLanguageService: PastisPopupMetadataLanguageService,
+    private fileTreeService: FileTreeService, private metadataLanguageService: PastisPopupMetadataLanguageService,
     private translateService: TranslateService) {
 
     this.config = {
@@ -207,17 +207,17 @@ export class FileTreeMetadataComponent {
 
   ngOnInit() {
 
-    if(!this.isStandalone){
+    if (!this.isStandalone) {
       constantToTranslate.call(this);
       this.translatedOnChange();
     }
-    else if(this.isStandalone){
-      this.notificationAjoutMetadonnee= "La métadonnée ArchiveUnit a été ajoutée"
-      this.boutonAjoutMetadonnee= "Ajouter une métadonnée"
-      this.boutonAjoutUA= "Ajouter une UA"
-      this.popupSousTitre= "Edition des attributs de"
-      this.popupValider= "Valider"
-      this.popupAnnuler= "Annuler"
+    else if (this.isStandalone) {
+      this.notificationAjoutMetadonnee = "La métadonnée ArchiveUnit a été ajoutée"
+      this.boutonAjoutMetadonnee = "Ajouter une métadonnée"
+      this.boutonAjoutUA = "Ajouter une UA"
+      this.popupSousTitre = "Edition des attributs de"
+      this.popupValider = "Valider"
+      this.popupAnnuler = "Annuler"
     }
 
     this.additionalProperties = false;
@@ -235,23 +235,23 @@ export class FileTreeMetadataComponent {
     this._fileServiceSubscriptionNodeChange = this.fileService.nodeChange.subscribe(node => {
       this.clickedNode = node;
       // BreadCrumb for navigation through metadatas
-      if (node && node!==undefined) {
-        let breadCrumbNodeLabel: string =  node.name;
+      if (node && node !== undefined) {
+        let breadCrumbNodeLabel: string = node.name;
         this.fileService.tabRootNode.subscribe(tabRootNode => {
-          if (tabRootNode){
+          if (tabRootNode) {
             let tabLabel = (<any>nodeNameToLabel)[tabRootNode.name];
-            this.breadcrumbDataMetadata = [{ label: tabLabel, node: tabRootNode}];
-            if (tabRootNode.name !== breadCrumbNodeLabel){
-              if(node.parent){
-                if (node.parent.name!==tabRootNode.name){
-                  if(node.parent.parent){
-                    if (node.parent.parent.name!==tabRootNode.name){
-                      this.breadcrumbDataMetadata = this.breadcrumbDataMetadata.concat([ { label: '...' } ]);
+            this.breadcrumbDataMetadata = [{ label: tabLabel, node: tabRootNode }];
+            if (tabRootNode.name !== breadCrumbNodeLabel) {
+              if (node.parent) {
+                if (node.parent.name !== tabRootNode.name) {
+                  if (node.parent.parent) {
+                    if (node.parent.parent.name !== tabRootNode.name) {
+                      this.breadcrumbDataMetadata = this.breadcrumbDataMetadata.concat([{ label: '...' }]);
                     }
                   }
-                  this.breadcrumbDataMetadata = this.breadcrumbDataMetadata.concat([ { label: node.parent.name, node: node.parent } ]);
+                  this.breadcrumbDataMetadata = this.breadcrumbDataMetadata.concat([{ label: node.parent.name, node: node.parent }]);
                 }
-                this.breadcrumbDataMetadata = this.breadcrumbDataMetadata.concat([ { label: breadCrumbNodeLabel, node: node } ]);
+                this.breadcrumbDataMetadata = this.breadcrumbDataMetadata.concat([{ label: breadCrumbNodeLabel, node: node }]);
               }
             }
           }
@@ -259,8 +259,8 @@ export class FileTreeMetadataComponent {
       }
     });
     // BreadCrump Top for navigation
-    this.profileModeLabel = this.profileService.profileMode==='PUA'?"PROFILE.EDIT_PROFILE.FILE_TREE_METADATA.PUA":"PROFILE.EDIT_PROFILE.FILE_TREE_METADATA.PA";
-    this.breadcrumbDataTop = [{ label: "PROFILE.EDIT_PROFILE.BREADCRUMB.PORTAIL", url: this.startupService.getPortalUrl(), external: true},{ label: "PROFILE.EDIT_PROFILE.BREADCRUMB.CREER_ET_GERER_PROFIL", url: '/'}, { label: this.profileModeLabel }];
+    this.profileModeLabel = this.profileService.profileMode === 'PUA' ? "PROFILE.EDIT_PROFILE.FILE_TREE_METADATA.PUA" : "PROFILE.EDIT_PROFILE.FILE_TREE_METADATA.PA";
+    this.breadcrumbDataTop = [{ label: "PROFILE.EDIT_PROFILE.BREADCRUMB.PORTAIL", url: this.startupService.getPortalUrl(), external: true }, { label: "PROFILE.EDIT_PROFILE.BREADCRUMB.CREER_ET_GERER_PROFIL", url: '/' }, { label: this.profileModeLabel }];
 
     this._fileServiceSubscription = this.fileService.currentTree.subscribe(fileTree => {
       if (fileTree) {
@@ -298,16 +298,16 @@ export class FileTreeMetadataComponent {
     })
   }
 
-  navigate(d: BreadcrumbDataTop){
-      if (d.external){
-        window.location.assign(d.url);
-      } else {
-        this.router.navigate([d.url],{skipLocationChange: false});
-      }
+  navigate(d: BreadcrumbDataTop) {
+    if (d.external) {
+      window.location.assign(d.url);
+    } else {
+      this.router.navigate([d.url], { skipLocationChange: false });
+    }
   }
 
-  navigateMetadata(d: BreadcrumbDataMetadata){
-    if (d.node && d.node!==undefined){
+  navigateMetadata(d: BreadcrumbDataMetadata) {
+    if (d.node && d.node !== undefined) {
       this.fileTreeService.updateMedataTable.next(d.node);
     }
   }
@@ -326,8 +326,8 @@ export class FileTreeMetadataComponent {
     let nomDuchamp: string = this.sedaLanguage ? 'nomDuChamp' : 'nomDuChampFr';
     this.setupFilter(nomDuchamp);
     // Lors d'un reset sur le search component on renvoie un string null.
-    if(filterValue == null)
-      filterValue='';
+    if (filterValue == null)
+      filterValue = '';
     this.matDataSource.filter = filterValue.trim().toLowerCase();
   }
 
@@ -439,13 +439,13 @@ export class FileTreeMetadataComponent {
         Name: 'ArchiveUnit',
         NameFr: null,
         Type: null,
-        Element:null,
-        Cardinality:null,
-        Definition:null,
-        Extensible:null,
-        Choice:null,
+        Element: null,
+        Cardinality: null,
+        Definition: null,
+        Extensible: null,
+        Choice: null,
         Children: null,
-        Enumeration:null,
+        Enumeration: null,
         Collection: null
       });
       let params: FileNodeInsertParams = {
@@ -460,7 +460,7 @@ export class FileTreeMetadataComponent {
     }
   }
 
-  onDuplicateNode(id : number) {
+  onDuplicateNode(id: number) {
     const nodeToDuplicate = this.fileService.getFileNodeById(this.fileService.nodeChange.getValue(), id);
     this.duplicateNode.emit(nodeToDuplicate);
   }
@@ -638,29 +638,29 @@ export class FileTreeMetadataComponent {
   }
 
   goBack() {
-    this.router.navigate(['/'], {skipLocationChange: false});
+    this.router.navigate(['/'], { skipLocationChange: false });
   }
 
   ngOnDestroy() {
     if (this._fileServiceSubscription != null) {
       this._fileServiceSubscription.unsubscribe();
     }
-    if(this._fileMetadataServiceSubscriptionSelectedCardinalities!= null){
+    if (this._fileMetadataServiceSubscriptionSelectedCardinalities != null) {
       this._fileMetadataServiceSubscriptionSelectedCardinalities.unsubscribe();
     }
-    if(this._fileServiceSubscriptionNodeChange!= null){
+    if (this._fileServiceSubscriptionNodeChange != null) {
       this._fileServiceSubscriptionNodeChange.unsubscribe();
     }
-    if(this._sedaServiceSubscritptionSelectedSedaNode!= null){
+    if (this._sedaServiceSubscritptionSelectedSedaNode != null) {
       this._sedaServiceSubscritptionSelectedSedaNode.unsubscribe();
     }
-    if(this._fileMetadataServiceSubscriptionDataSource!= null){
+    if (this._fileMetadataServiceSubscriptionDataSource != null) {
       this._fileMetadataServiceSubscriptionDataSource.unsubscribe();
     }
-    if(this._profileServiceProfileModeSubscription!= null){
+    if (this._profileServiceProfileModeSubscription != null) {
       this._profileServiceProfileModeSubscription.unsubscribe();
     }
-    if(this._sedalanguageSub!=null){
+    if (this._sedalanguageSub != null) {
       this._sedalanguageSub.unsubscribe();
     }
   }
@@ -702,14 +702,20 @@ export class FileTreeMetadataComponent {
     return !(nomDuChamp == "Content" || nomDuChamp == "Management");
   }
 
-  changeAutorisation($event: MatCheckboxChange, element : any) {
+  changeAutorisation($event: MatCheckboxChange, element: any) {
     console.log($event.checked + "test" + element.nomDuChamp);
     this.additionalPropertiesMetadonnee = $event.checked;
     this.setNodeAdditionalPropertiesChange(this.additionalPropertiesMetadonnee, element)
   }
 
-  private setNodeAdditionalPropertiesChange(additionalPropertiesMetadonnee: boolean, element: FileNode) {
-//TODO Mettre additional properties à true dans la métadonnée complexe element.
-    console.log(element.nomDuChamp + " nom metadonnee" + additionalPropertiesMetadonnee + " nouveau addition à setter")
+  private setNodeAdditionalPropertiesChange(additionalPropertiesMetadonnee: boolean, element: MetadataHeaders) {
+
+    for (let node of this.clickedNode.children) {
+      if (node.name === element.nomDuChamp && node.id === element.id) {
+        
+        node.puaData.additionalProperties = additionalPropertiesMetadonnee;
+      }
+    }
+
   }
 }
diff --git a/ui/ui-frontend/projects/pastis/src/app/profile/edit-profile/file-tree/file-tree.component.ts b/ui/ui-frontend/projects/pastis/src/app/profile/edit-profile/file-tree/file-tree.component.ts
index 089eb425e..d7a9c2607 100644
--- a/ui/ui-frontend/projects/pastis/src/app/profile/edit-profile/file-tree/file-tree.component.ts
+++ b/ui/ui-frontend/projects/pastis/src/app/profile/edit-profile/file-tree/file-tree.component.ts
@@ -53,6 +53,7 @@ import {DuplicateMetadataComponent} from "../../../user-actions/duplicate-metada
 import {LangChangeEvent, TranslateService} from "@ngx-translate/core";
 import {environment} from "../../../../environments/environment";
 import { ProfileService } from '../../../core/services/profile.service';
+import { PUA } from '../../../models/pua.model';
 
 const FILE_TREE_TRANSLATE_PATH = 'PROFILE.EDIT_PROFILE.FILE_TREE';
 
@@ -281,6 +282,7 @@ export class FileTreeComponent implements OnDestroy {
   /** Add an item (or a list of items) in the Tree */
   insertItem(parent: FileNode, elementsToAdd: string[], node?: FileNode, insertItemDuplicate?:boolean) {
     console.log("After data is : %o", this.fileTreeService.nestedDataSource.data)
+    console.log("element to add : %o",elementsToAdd)
     let elementsToAddFromSeda: SedaData[] = [];
     for (let element of elementsToAdd) {
       parent.sedaData.Children.forEach((child) => {
@@ -319,6 +321,10 @@ export class FileTreeComponent implements OnDestroy {
         newNode.parent = parent;
         newNode.children = [];
         newNode.sedaData = sedaChild;
+        if (this.isElementComplex(newNode)) {
+          newNode.puaData = new PUA()
+          newNode.puaData.additionalProperties = false;
+        }
         console.log("Parent node name: " + parent.name);
         console.log("New node  : ", newNode);
 
-- 
GitLab