commit 2f0035dabe7e75f1b1e782cd266f7868359fec6d Author: liam.monchanin Date: Mon May 29 17:14:51 2023 +0200 Pour le binding diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..0fa5ecc --- /dev/null +++ b/.drone.yml @@ -0,0 +1,49 @@ +kind: pipeline +type: docker +name: pipelinefordeveloppement + +trigger: + branch: + - developpement + - master + event: + - push + +steps: + - name: build + image: mcr.microsoft.com/dotnet/sdk:7.0 + commands: + - cd notus/ + - dotnet restore notus_without_maui.sln + - dotnet build notus_without_maui.sln -c Release --no-restore /p:AndroidSdkDirectory=$ANDROID_SDK_ROOT -property:Aapt2ToolPath=$ANDROID_SDK_ROOT/build-tools/33.0.0 + - dotnet publish notus_without_maui.sln -c Release --no-restore -o $CI_PROJECT_DIR/build/release + + - name: tests + image: mcr.microsoft.com/dotnet/sdk:7.0 + commands: + - cd notus/ + - dotnet restore notus_without_maui.sln + - dotnet test notus_without_maui.sln --no-restore + depends_on: [build] + + - name: sonar + image: hub.codefirst.iut.uca.fr/marc.chevaldonne/codefirst-dronesonarplugin-dotnet7 + secrets: [ Sonar_Login ] + environment: + sonar_host: https://codefirst.iut.uca.fr/sonar/ + sonar_token: + from_secret: Sonar_Login + project_key: notus_ThMo + coverage_exclusions: "Tests/**/**,Notus_Console/**" + commands: + - cd notus/ + - dotnet restore notus_without_maui.sln + - dotnet sonarscanner begin /k:$${project_key} /d:sonar.host.url=$${sonar_host} /d:sonar.coverageReportPaths="coveragereport/SonarQube.xml" /d:sonar.coverage.exclusions=$${coverage_exclusions} /d:sonar.login=$${sonar_token} + - dotnet build notus_without_maui.sln -c Release --no-restore + - dotnet test notus_without_maui.sln --logger trx --no-restore /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura --collect "XPlat Code Coverage" + - reportgenerator -reports:'**/coverage.cobertura.xml' -reporttypes:SonarQube -targetdir:"coveragereport" -verbosity:Verbose + - dotnet publish notus_without_maui.sln -c Release --no-restore -o CI_PROJECT_DIR/build/release + - dotnet sonarscanner end /d:sonar.login=$${sonar_token} + branch: + - developpement + depends_on: [build,tests] \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ca1c7a3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,400 @@ +# ---> VisualStudio +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml + diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/Uml_NotusApp.mdj b/Uml_NotusApp.mdj new file mode 100644 index 0000000..6ca54af --- /dev/null +++ b/Uml_NotusApp.mdj @@ -0,0 +1,5386 @@ +{ + "_type": "Project", + "_id": "AAAAAAFF+h6SjaM2Hec=", + "name": "Untitled", + "ownedElements": [ + { + "_type": "UMLModel", + "_id": "AAAAAAFF+qBWK6M3Z8Y=", + "_parent": { + "$ref": "AAAAAAFF+h6SjaM2Hec=" + }, + "name": "Model", + "ownedElements": [ + { + "_type": "UMLClassDiagram", + "_id": "AAAAAAFF+qBtyKM79qY=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Main", + "defaultDiagram": true, + "ownedViews": [ + { + "_type": "UMLClassView", + "_id": "AAAAAAGHsxATrmDNnOM=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGHsxATrmDO80A=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDNnOM=" + }, + "model": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGHsxATrmDPh3U=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDO80A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -144, + "top": 656, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGHsxATrmDQn88=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDO80A=" + }, + "font": "Arial;13;1", + "left": 333, + "top": 639, + "width": 158.93896484375, + "height": 13, + "text": "BaseData" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGHsxATrmDRNgA=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDO80A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -144, + "top": 656, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGHsxATrmDSaAM=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDO80A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -144, + "top": 656, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 328, + "top": 632, + "width": 168.93896484375, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGHsxATrmDPh3U=" + }, + "nameLabel": { + "$ref": "AAAAAAGHsxATrmDQn88=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGHsxATrmDRNgA=" + }, + "propertyLabel": { + "$ref": "AAAAAAGHsxATrmDSaAM=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGHsxATrmDTxFE=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDNnOM=" + }, + "model": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "font": "Arial;13;0", + "left": 328, + "top": 657, + "width": 168.93896484375, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGHsxATrmDU59E=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDNnOM=" + }, + "model": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGHsxHmvGEGKUs=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDU59E=" + }, + "model": { + "$ref": "AAAAAAGHsxHmtmEDQjA=" + }, + "font": "Arial;13;0", + "left": 333, + "top": 672, + "width": 158.93896484375, + "height": 13, + "text": "+RechercherUtilisateur()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGHsznnzWNKqnU=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDU59E=" + }, + "model": { + "$ref": "AAAAAAGHsznnx2NH2gQ=" + }, + "font": "Arial;13;0", + "left": 333, + "top": 687, + "width": 158.93896484375, + "height": 13, + "text": "+GetLinkLogo()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGHwWwdPe/7ZQg=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDU59E=" + }, + "model": { + "$ref": "AAAAAAGHwWwdHu/427c=" + }, + "font": "Arial;13;0", + "left": 333, + "top": 702, + "width": 158.93896484375, + "height": 13, + "text": "+GetUtilisateur()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGHwWw/APK6TcY=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDU59E=" + }, + "model": { + "$ref": "AAAAAAGHwWw++/K3/cw=" + }, + "font": "Arial;13;0", + "left": 333, + "top": 717, + "width": 158.93896484375, + "height": 13, + "text": "+CorrespondPassword()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGHwWxY6/XxvFk=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDU59E=" + }, + "model": { + "$ref": "AAAAAAGHwWxY5fXure4=" + }, + "font": "Arial;13;0", + "left": 333, + "top": 732, + "width": 158.93896484375, + "height": 13, + "text": "+TrouverMail()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGHwWx6o/5QW8c=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDU59E=" + }, + "model": { + "$ref": "AAAAAAGHwWx6nf5NEN0=" + }, + "font": "Arial;13;0", + "left": 333, + "top": 747, + "width": 158.93896484375, + "height": 13, + "text": "+AjouterUtilisateur()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH/LY7PGUgC/M=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDU59E=" + }, + "model": { + "$ref": "AAAAAAGH/LY7M2UdnuU=" + }, + "font": "Arial;13;0", + "left": 333, + "top": 762, + "width": 158.93896484375, + "height": 13, + "text": "+SupUtilisateur()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH/LZOf2YOhAI=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDU59E=" + }, + "model": { + "$ref": "AAAAAAGH/LZOeGYLzYM=" + }, + "font": "Arial;13;0", + "left": 333, + "top": 777, + "width": 158.93896484375, + "height": 13, + "text": "+AjouterTheme()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH/LZrNmb8CO8=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDU59E=" + }, + "model": { + "$ref": "AAAAAAGH/LZrM2b5qcY=" + }, + "font": "Arial;13;0", + "left": 333, + "top": 792, + "width": 158.93896484375, + "height": 13, + "text": "+SupTheme()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH/LaAAWfqCu8=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDU59E=" + }, + "model": { + "$ref": "AAAAAAGH/LZ//Wfn/yw=" + }, + "font": "Arial;13;0", + "left": 333, + "top": 807, + "width": 158.93896484375, + "height": 13, + "text": "+GetTheme()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH/LaTwmjYkaQ=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDU59E=" + }, + "model": { + "$ref": "AAAAAAGH/LaTv2jVHMA=" + }, + "font": "Arial;13;0", + "left": 333, + "top": 822, + "width": 158.93896484375, + "height": 13, + "text": "+ModifierNomTheme()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH/LanoGnGr3U=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDU59E=" + }, + "model": { + "$ref": "AAAAAAGH/LannGnD+e4=" + }, + "font": "Arial;13;0", + "left": 333, + "top": 837, + "width": 158.93896484375, + "height": 13, + "text": "+ModifierColorListTheme()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 328, + "top": 667, + "width": 168.93896484375, + "height": 188 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGHsxATrmDV5cU=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDNnOM=" + }, + "model": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -72, + "top": 328, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGHsxATrmDWo3c=", + "_parent": { + "$ref": "AAAAAAGHsxATrmDNnOM=" + }, + "model": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -72, + "top": 328, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 328, + "top": 632, + "width": 168.93896484375, + "height": 223, + "nameCompartment": { + "$ref": "AAAAAAGHsxATrmDO80A=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGHsxATrmDTxFE=" + }, + "operationCompartment": { + "$ref": "AAAAAAGHsxATrmDU59E=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGHsxATrmDV5cU=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGHsxATrmDWo3c=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGHsxLjH2EVAzI=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGHsxLjH2EWA68=", + "_parent": { + "$ref": "AAAAAAGHsxLjH2EVAzI=" + }, + "model": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGHsxLjH2EXG+w=", + "_parent": { + "$ref": "AAAAAAGHsxLjH2EWA68=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -592, + "top": 80, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGHsxLjH2EYEbM=", + "_parent": { + "$ref": "AAAAAAGHsxLjH2EWA68=" + }, + "font": "Arial;13;1", + "left": 341, + "top": 279, + "width": 182.45068359375, + "height": 13, + "text": "Note" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGHsxLjH2EZY4I=", + "_parent": { + "$ref": "AAAAAAGHsxLjH2EWA68=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -592, + "top": 80, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGHsxLjH2Eas/I=", + "_parent": { + "$ref": "AAAAAAGHsxLjH2EWA68=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -592, + "top": 80, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 336, + "top": 272, + "width": 192.45068359375, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGHsxLjH2EXG+w=" + }, + "nameLabel": { + "$ref": "AAAAAAGHsxLjH2EYEbM=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGHsxLjH2EZY4I=" + }, + "propertyLabel": { + "$ref": "AAAAAAGHsxLjH2Eas/I=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGHsxLjIGEbeoc=", + "_parent": { + "$ref": "AAAAAAGHsxLjH2EVAzI=" + }, + "model": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGHsxL0LmFATTM=", + "_parent": { + "$ref": "AAAAAAGHsxLjIGEbeoc=" + }, + "model": { + "$ref": "AAAAAAGHsxL0HWE9FYU=" + }, + "font": "Arial;13;0", + "left": 341, + "top": 302, + "width": 182.45068359375, + "height": 13, + "text": "-/nom: string", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGHsxMgu2FHPBY=", + "_parent": { + "$ref": "AAAAAAGHsxLjIGEbeoc=" + }, + "model": { + "$ref": "AAAAAAGHsxMgtWFET5I=" + }, + "font": "Arial;13;0", + "left": 341, + "top": 317, + "width": 182.45068359375, + "height": 13, + "text": "-logo: string", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGHsxOygmFc6C8=", + "_parent": { + "$ref": "AAAAAAGHsxLjIGEbeoc=" + }, + "model": { + "$ref": "AAAAAAGHsxOyfGFZzxw=" + }, + "font": "Arial;13;0", + "left": 341, + "top": 332, + "width": 182.45068359375, + "height": 13, + "text": "-dateCreation: string", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGHsxPYmmFjHeU=", + "_parent": { + "$ref": "AAAAAAGHsxLjIGEbeoc=" + }, + "model": { + "$ref": "AAAAAAGHsxPYlGFgs7M=" + }, + "font": "Arial;13;0", + "left": 341, + "top": 347, + "width": 182.45068359375, + "height": 13, + "text": "-listeImage: list ", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGHsxQpimFq2+Y=", + "_parent": { + "$ref": "AAAAAAGHsxLjIGEbeoc=" + }, + "model": { + "$ref": "AAAAAAGHsxQphGFn79c=" + }, + "font": "Arial;13;0", + "left": 341, + "top": 362, + "width": 182.45068359375, + "height": 13, + "text": "-listeLigneTexte: list ", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGHsxTEqmFxkW8=", + "_parent": { + "$ref": "AAAAAAGHsxLjIGEbeoc=" + }, + "model": { + "$ref": "AAAAAAGHsxTEpGFu3U4=" + }, + "font": "Arial;13;0", + "left": 341, + "top": 377, + "width": 182.45068359375, + "height": 13, + "text": "-listePosiImage: list ", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGH4OGlOd4/fU4=", + "_parent": { + "$ref": "AAAAAAGHsxLjIGEbeoc=" + }, + "model": { + "$ref": "AAAAAAGH4OGlMd48So8=" + }, + "font": "Arial;13;0", + "left": 341, + "top": 392, + "width": 182.45068359375, + "height": 13, + "text": "-Proprietaire: Utilisateur", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGH4OHotd9DLSY=", + "_parent": { + "$ref": "AAAAAAGHsxLjIGEbeoc=" + }, + "model": { + "$ref": "AAAAAAGH4OHosd9AbLE=" + }, + "font": "Arial;13;0", + "left": 341, + "top": 407, + "width": 182.45068359375, + "height": 13, + "text": "-Cooperateurs: list", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGH4OJNhuCGmB0=", + "_parent": { + "$ref": "AAAAAAGHsxLjIGEbeoc=" + }, + "model": { + "$ref": "AAAAAAGH4OJNgeCD2aw=" + }, + "font": "Arial;13;0", + "left": 341, + "top": 422, + "width": 182.45068359375, + "height": 13, + "text": "-Editeurs: list", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 336, + "top": 297, + "width": 192.45068359375, + "height": 143 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGHsxLjIGEcokU=", + "_parent": { + "$ref": "AAAAAAGHsxLjH2EVAzI=" + }, + "model": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGHwWgEJJ81rI0=", + "_parent": { + "$ref": "AAAAAAGHsxLjIGEcokU=" + }, + "model": { + "$ref": "AAAAAAGHwWgEHp8y24w=" + }, + "font": "Arial;13;0", + "left": 341, + "top": 445, + "width": 182.45068359375, + "height": 13, + "text": "+VerifOwner()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGHwWg7mKAj0EY=", + "_parent": { + "$ref": "AAAAAAGHsxLjIGEcokU=" + }, + "model": { + "$ref": "AAAAAAGHwWg7laAgGPM=" + }, + "font": "Arial;13;0", + "left": 341, + "top": 460, + "width": 182.45068359375, + "height": 13, + "text": "+ModifRole()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH4NPpL9TC1Ns=", + "_parent": { + "$ref": "AAAAAAGHsxLjIGEcokU=" + }, + "model": { + "$ref": "AAAAAAGH4NPpHdS/8Gg=" + }, + "font": "Arial;13;0", + "left": 341, + "top": 475, + "width": 182.45068359375, + "height": 13, + "text": "+AjouterImage()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH4OLpg+KbTHU=", + "_parent": { + "$ref": "AAAAAAGHsxLjIGEcokU=" + }, + "model": { + "$ref": "AAAAAAGH4OLpfuKYzBw=" + }, + "font": "Arial;13;0", + "left": 341, + "top": 490, + "width": 182.45068359375, + "height": 13, + "text": "+SuppImage()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH4OSk4+a5A68=", + "_parent": { + "$ref": "AAAAAAGHsxLjIGEcokU=" + }, + "model": { + "$ref": "AAAAAAGH4OSk3ea2Vmg=" + }, + "font": "Arial;13;0", + "left": 341, + "top": 505, + "width": 182.45068359375, + "height": 13, + "text": "+VerifPriviledge()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH/LL0aFmYRH0=", + "_parent": { + "$ref": "AAAAAAGHsxLjIGEcokU=" + }, + "model": { + "$ref": "AAAAAAGH/LL0XFmVxh0=" + }, + "font": "Arial;13;0", + "left": 341, + "top": 520, + "width": 182.45068359375, + "height": 13, + "text": "+AjouterCoop()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH/LTGbVqGu0s=", + "_parent": { + "$ref": "AAAAAAGHsxLjIGEcokU=" + }, + "model": { + "$ref": "AAAAAAGH/LTGZlqDkIg=" + }, + "font": "Arial;13;0", + "left": 341, + "top": 535, + "width": 182.45068359375, + "height": 13, + "text": "+SupCoop()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH/LTpflt0SfI=", + "_parent": { + "$ref": "AAAAAAGHsxLjIGEcokU=" + }, + "model": { + "$ref": "AAAAAAGH/LTpeFtxaEQ=" + }, + "font": "Arial;13;0", + "left": 341, + "top": 550, + "width": 182.45068359375, + "height": 13, + "text": "+AjouterEdit()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH/LUCOVxiOdQ=", + "_parent": { + "$ref": "AAAAAAGHsxLjIGEcokU=" + }, + "model": { + "$ref": "AAAAAAGH/LUCNVxfrq8=" + }, + "font": "Arial;13;0", + "left": 341, + "top": 565, + "width": 182.45068359375, + "height": 13, + "text": "+SupEdit()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 336, + "top": 440, + "width": 192.45068359375, + "height": 143 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGHsxLjIGEdQ0Q=", + "_parent": { + "$ref": "AAAAAAGHsxLjH2EVAzI=" + }, + "model": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -296, + "top": 40, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGHsxLjIGEeh3o=", + "_parent": { + "$ref": "AAAAAAGHsxLjH2EVAzI=" + }, + "model": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -296, + "top": 40, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 336, + "top": 272, + "width": 192.45068359375, + "height": 311, + "nameCompartment": { + "$ref": "AAAAAAGHsxLjH2EWA68=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGHsxLjIGEbeoc=" + }, + "operationCompartment": { + "$ref": "AAAAAAGHsxLjIGEcokU=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGHsxLjIGEdQ0Q=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGHsxLjIGEeh3o=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGHszJKAGG0NQ0=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGHszJKAWG1eoU=", + "_parent": { + "$ref": "AAAAAAGHszJKAGG0NQ0=" + }, + "model": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGHszJKAWG2BVI=", + "_parent": { + "$ref": "AAAAAAGHszJKAWG1eoU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1040, + "top": -112, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGHszJKAWG3tjA=", + "_parent": { + "$ref": "AAAAAAGHszJKAWG1eoU=" + }, + "font": "Arial;13;1", + "left": 797, + "top": 479, + "width": 205.2578125, + "height": 13, + "text": "Utilisateur" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGHszJKAWG44oo=", + "_parent": { + "$ref": "AAAAAAGHszJKAWG1eoU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1040, + "top": -112, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGHszJKAWG5k9Y=", + "_parent": { + "$ref": "AAAAAAGHszJKAWG1eoU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1040, + "top": -112, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 792, + "top": 472, + "width": 215.2578125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGHszJKAWG2BVI=" + }, + "nameLabel": { + "$ref": "AAAAAAGHszJKAWG3tjA=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGHszJKAWG44oo=" + }, + "propertyLabel": { + "$ref": "AAAAAAGHszJKAWG5k9Y=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGHszJKAWG6OO4=", + "_parent": { + "$ref": "AAAAAAGHszJKAGG0NQ0=" + }, + "model": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGHszJzvWHfbGI=", + "_parent": { + "$ref": "AAAAAAGHszJKAWG6OO4=" + }, + "model": { + "$ref": "AAAAAAGHszJzs2HcXu4=" + }, + "font": "Arial;13;0", + "left": 797, + "top": 502, + "width": 205.2578125, + "height": 13, + "text": "-/pseudo: string", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGHszKhc2HnEMM=", + "_parent": { + "$ref": "AAAAAAGHszJKAWG6OO4=" + }, + "model": { + "$ref": "AAAAAAGHszKhY2Hk848=" + }, + "font": "Arial;13;0", + "left": 797, + "top": 517, + "width": 205.2578125, + "height": 13, + "text": "-/mail: string", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGHszLWW2HwNic=", + "_parent": { + "$ref": "AAAAAAGHszJKAWG6OO4=" + }, + "model": { + "$ref": "AAAAAAGHszLWWGHtWvc=" + }, + "font": "Arial;13;0", + "left": 797, + "top": 532, + "width": 205.2578125, + "height": 13, + "text": "-/password: string", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGHwX5qjz5/xEc=", + "_parent": { + "$ref": "AAAAAAGHszJKAWG6OO4=" + }, + "model": { + "$ref": "AAAAAAGHwX5qfj58iuE=" + }, + "font": "Arial;13;0", + "left": 797, + "top": 547, + "width": 205.2578125, + "height": 13, + "text": "-connecter: bool", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGH5ZuqkuEJHqY=", + "_parent": { + "$ref": "AAAAAAGHszJKAWG6OO4=" + }, + "model": { + "$ref": "AAAAAAGH5Zuqf+EGwEY=" + }, + "font": "Arial;13;0", + "left": 797, + "top": 562, + "width": 205.2578125, + "height": 13, + "text": "-notetaged: map>", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 792, + "top": 497, + "width": 215.2578125, + "height": 83 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGHszJKAmG7KV0=", + "_parent": { + "$ref": "AAAAAAGHszJKAGG0NQ0=" + }, + "model": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGHszOmxGIcpC4=", + "_parent": { + "$ref": "AAAAAAGHszJKAmG7KV0=" + }, + "model": { + "$ref": "AAAAAAGHszOmwWIZbnQ=" + }, + "font": "Arial;13;0", + "left": 797, + "top": 585, + "width": 205.2578125, + "height": 13, + "text": "+RechercherNote()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGHwWZXe5PNb7Y=", + "_parent": { + "$ref": "AAAAAAGHszJKAmG7KV0=" + }, + "model": { + "$ref": "AAAAAAGHwWZXdpPKlxs=" + }, + "font": "Arial;13;0", + "left": 797, + "top": 600, + "width": 205.2578125, + "height": 13, + "text": "+RechercherNoteFav()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGHwWbQIZXNNR4=", + "_parent": { + "$ref": "AAAAAAGHszJKAmG7KV0=" + }, + "model": { + "$ref": "AAAAAAGHwWbQHpXKwHw=" + }, + "font": "Arial;13;0", + "left": 797, + "top": 615, + "width": 205.2578125, + "height": 13, + "text": "+RechercherTags()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGHwWcDa5eiGRw=", + "_parent": { + "$ref": "AAAAAAGHszJKAmG7KV0=" + }, + "model": { + "$ref": "AAAAAAGHwWcDZpefm/w=" + }, + "font": "Arial;13;0", + "left": 797, + "top": 630, + "width": 205.2578125, + "height": 13, + "text": "+AjouterFav()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGHwWc4T5l3iME=", + "_parent": { + "$ref": "AAAAAAGHszJKAmG7KV0=" + }, + "model": { + "$ref": "AAAAAAGHwWc4R5l0Qos=" + }, + "font": "Arial;13;0", + "left": 797, + "top": 645, + "width": 205.2578125, + "height": 13, + "text": "+SuppFav()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH5Z2Iuea6vDk=", + "_parent": { + "$ref": "AAAAAAGHszJKAmG7KV0=" + }, + "model": { + "$ref": "AAAAAAGH5Z2Ir+a3+4U=" + }, + "font": "Arial;13;0", + "left": 797, + "top": 660, + "width": 205.2578125, + "height": 13, + "text": "+AjouterNote()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH5Z23ReeTalo=", + "_parent": { + "$ref": "AAAAAAGHszJKAmG7KV0=" + }, + "model": { + "$ref": "AAAAAAGH5Z23P+eQnoI=" + }, + "font": "Arial;13;0", + "left": 797, + "top": 675, + "width": 205.2578125, + "height": 13, + "text": "+SuppNote()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH7Y/7u6/9e4g=", + "_parent": { + "$ref": "AAAAAAGHszJKAmG7KV0=" + }, + "model": { + "$ref": "AAAAAAGH7Y/7sa/62wM=" + }, + "font": "Arial;13;0", + "left": 797, + "top": 690, + "width": 205.2578125, + "height": 13, + "text": "+createTag()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH7ZACirDAG+Q=", + "_parent": { + "$ref": "AAAAAAGHszJKAmG7KV0=" + }, + "model": { + "$ref": "AAAAAAGH7ZAChbC9p+o=" + }, + "font": "Arial;13;0", + "left": 797, + "top": 705, + "width": 205.2578125, + "height": 13, + "text": "+deleteTag()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH/KxPwUUTIEE=", + "_parent": { + "$ref": "AAAAAAGHszJKAmG7KV0=" + }, + "model": { + "$ref": "AAAAAAGH/KxPskUQQZ4=" + }, + "font": "Arial;13;0", + "left": 797, + "top": 720, + "width": 205.2578125, + "height": 13, + "text": "+AddOneTagToNoteList()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH/KxhfUYBFQE=", + "_parent": { + "$ref": "AAAAAAGHszJKAmG7KV0=" + }, + "model": { + "$ref": "AAAAAAGH/KxhdkX+V8s=" + }, + "font": "Arial;13;0", + "left": 797, + "top": 735, + "width": 205.2578125, + "height": 13, + "text": "+SupOneTagToNoteList()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH/KyCJ0bv5Dc=", + "_parent": { + "$ref": "AAAAAAGHszJKAmG7KV0=" + }, + "model": { + "$ref": "AAAAAAGH/KyCIkbsdWw=" + }, + "font": "Arial;13;0", + "left": 797, + "top": 750, + "width": 205.2578125, + "height": 13, + "text": "+AddTagToNoteList()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH/KyTS0fdez8=", + "_parent": { + "$ref": "AAAAAAGHszJKAmG7KV0=" + }, + "model": { + "$ref": "AAAAAAGH/KyTR0faUc4=" + }, + "font": "Arial;13;0", + "left": 797, + "top": 765, + "width": 205.2578125, + "height": 13, + "text": "+SupTagToNoteList()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 792, + "top": 580, + "width": 215.2578125, + "height": 203 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGHszJKAmG8kLU=", + "_parent": { + "$ref": "AAAAAAGHszJKAGG0NQ0=" + }, + "model": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 504, + "top": -72, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGHszJKAmG9XNE=", + "_parent": { + "$ref": "AAAAAAGHszJKAGG0NQ0=" + }, + "model": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 834.5927734375, + "top": 456, + "width": 130.6689453125, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 792, + "top": 472, + "width": 215.2578125, + "height": 311, + "nameCompartment": { + "$ref": "AAAAAAGHszJKAWG1eoU=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGHszJKAWG6OO4=" + }, + "operationCompartment": { + "$ref": "AAAAAAGHszJKAmG7KV0=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGHszJKAmG8kLU=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGHszJKAmG9XNE=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGHszUGkWJVNws=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGHszUGkGJTukc=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGHszUGkWJWMlk=", + "_parent": { + "$ref": "AAAAAAGHszUGkWJVNws=" + }, + "model": { + "$ref": "AAAAAAGHszUGkGJTukc=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGHszUGkWJXoqE=", + "_parent": { + "$ref": "AAAAAAGHszUGkWJWMlk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -304, + "top": 160, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGHszUGkWJY8BA=", + "_parent": { + "$ref": "AAAAAAGHszUGkWJWMlk=" + }, + "font": "Arial;13;1", + "left": 845, + "top": 327, + "width": 111.642578125, + "height": 13, + "text": "Tags" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGHszUGkWJZjmc=", + "_parent": { + "$ref": "AAAAAAGHszUGkWJWMlk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -304, + "top": 160, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGHszUGkWJaOfQ=", + "_parent": { + "$ref": "AAAAAAGHszUGkWJWMlk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -304, + "top": 160, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 840, + "top": 320, + "width": 121.642578125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGHszUGkWJXoqE=" + }, + "nameLabel": { + "$ref": "AAAAAAGHszUGkWJY8BA=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGHszUGkWJZjmc=" + }, + "propertyLabel": { + "$ref": "AAAAAAGHszUGkWJaOfQ=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGHszUGkWJbPu8=", + "_parent": { + "$ref": "AAAAAAGHszUGkWJVNws=" + }, + "model": { + "$ref": "AAAAAAGHszUGkGJTukc=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGHszUlB2KAYak=", + "_parent": { + "$ref": "AAAAAAGHszUGkWJbPu8=" + }, + "model": { + "$ref": "AAAAAAGHszUk6GJ9jMQ=" + }, + "font": "Arial;13;0", + "left": 845, + "top": 350, + "width": 111.642578125, + "height": 13, + "text": "-/nom: string", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGHszUrEWKGnXc=", + "_parent": { + "$ref": "AAAAAAGHszUGkWJbPu8=" + }, + "model": { + "$ref": "AAAAAAGHszUrAGKDQzw=" + }, + "font": "Arial;13;0", + "left": 845, + "top": 365, + "width": 111.642578125, + "height": 13, + "text": "-/couleur: string", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 840, + "top": 345, + "width": 121.642578125, + "height": 38 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGHszUGkmJcy48=", + "_parent": { + "$ref": "AAAAAAGHszUGkWJVNws=" + }, + "model": { + "$ref": "AAAAAAGHszUGkGJTukc=" + }, + "font": "Arial;13;0", + "left": 840, + "top": 383, + "width": 121.642578125, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGHszUGkmJdXQk=", + "_parent": { + "$ref": "AAAAAAGHszUGkWJVNws=" + }, + "model": { + "$ref": "AAAAAAGHszUGkGJTukc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -152, + "top": 80, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGHszUGkmJeE1Y=", + "_parent": { + "$ref": "AAAAAAGHszUGkWJVNws=" + }, + "model": { + "$ref": "AAAAAAGHszUGkGJTukc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -152, + "top": 80, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 840, + "top": 320, + "width": 121.642578125, + "height": 73, + "nameCompartment": { + "$ref": "AAAAAAGHszUGkWJWMlk=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGHszUGkWJbPu8=" + }, + "operationCompartment": { + "$ref": "AAAAAAGHszUGkmJcy48=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGHszUGkmJdXQk=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGHszUGkmJeE1Y=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGHs2HK42c8byg=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGHs2HK4mc6StU=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGHs2HK42c9P1Y=", + "_parent": { + "$ref": "AAAAAAGHs2HK42c8byg=" + }, + "model": { + "$ref": "AAAAAAGHs2HK4mc6StU=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGHs2HK42c+R3w=", + "_parent": { + "$ref": "AAAAAAGHs2HK42c9P1Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 464, + "top": 448, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGHs2HK42c/hvo=", + "_parent": { + "$ref": "AAAAAAGHs2HK42c9P1Y=" + }, + "font": "Arial;13;1", + "left": 765, + "top": 815, + "width": 160.4052734375, + "height": 13, + "text": "Theme" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGHs2HK42dADlg=", + "_parent": { + "$ref": "AAAAAAGHs2HK42c9P1Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 464, + "top": 448, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGHs2HK42dB/uM=", + "_parent": { + "$ref": "AAAAAAGHs2HK42c9P1Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 464, + "top": 448, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 760, + "top": 808, + "width": 170.4052734375, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGHs2HK42c+R3w=" + }, + "nameLabel": { + "$ref": "AAAAAAGHs2HK42c/hvo=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGHs2HK42dADlg=" + }, + "propertyLabel": { + "$ref": "AAAAAAGHs2HK42dB/uM=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGHs2HK42dCx5A=", + "_parent": { + "$ref": "AAAAAAGHs2HK42c8byg=" + }, + "model": { + "$ref": "AAAAAAGHs2HK4mc6StU=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGH5ZSDQ8GNXOk=", + "_parent": { + "$ref": "AAAAAAGHs2HK42dCx5A=" + }, + "model": { + "$ref": "AAAAAAGH5ZSDMsGKSBM=" + }, + "font": "Arial;13;0", + "left": 765, + "top": 838, + "width": 160.4052734375, + "height": 13, + "text": "-/nom: string", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGHs2HpiWdnChE=", + "_parent": { + "$ref": "AAAAAAGHs2HK42dCx5A=" + }, + "model": { + "$ref": "AAAAAAGHs2HpZ2dkozw=" + }, + "font": "Arial;13;0", + "left": 765, + "top": 853, + "width": 160.4052734375, + "height": 13, + "text": "-listeCouleur: list ", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 760, + "top": 833, + "width": 170.4052734375, + "height": 38 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGHs2HK42dDsQM=", + "_parent": { + "$ref": "AAAAAAGHs2HK42c8byg=" + }, + "model": { + "$ref": "AAAAAAGHs2HK4mc6StU=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH7UFM65jZvww=", + "_parent": { + "$ref": "AAAAAAGHs2HK42dDsQM=" + }, + "model": { + "$ref": "AAAAAAGH7UFM3ZjWsn8=" + }, + "font": "Arial;13;0", + "left": 765, + "top": 876, + "width": 160.4052734375, + "height": 13, + "text": "+GetColorList()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGH6+RfvRFVmfE=", + "_parent": { + "$ref": "AAAAAAGHs2HK42dDsQM=" + }, + "model": { + "$ref": "AAAAAAGH6+RfrBFS0Bc=" + }, + "font": "Arial;13;0", + "left": 765, + "top": 891, + "width": 160.4052734375, + "height": 13, + "text": "+ChangeColor()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 760, + "top": 871, + "width": 170.4052734375, + "height": 38 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGHs2HK42dE8xQ=", + "_parent": { + "$ref": "AAAAAAGHs2HK42c8byg=" + }, + "model": { + "$ref": "AAAAAAGHs2HK4mc6StU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 232, + "top": 224, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGHs2HK42dFcXo=", + "_parent": { + "$ref": "AAAAAAGHs2HK42c8byg=" + }, + "model": { + "$ref": "AAAAAAGHs2HK4mc6StU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 232, + "top": 224, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 760, + "top": 808, + "width": 170.4052734375, + "height": 101, + "nameCompartment": { + "$ref": "AAAAAAGHs2HK42c9P1Y=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGHs2HK42dCx5A=" + }, + "operationCompartment": { + "$ref": "AAAAAAGHs2HK42dDsQM=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGHs2HK42dE8xQ=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGHs2HK42dFcXo=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGHwVHBhl+/C6c=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGHwVHBhV+7NK4=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwVHBhl/Apoc=", + "_parent": { + "$ref": "AAAAAAGHwVHBhl+/C6c=" + }, + "model": { + "$ref": "AAAAAAGHwVHBhV+7NK4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 647, + "top": 696, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGHwVHBhl+/C6c=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwVHBhl/B7ew=", + "_parent": { + "$ref": "AAAAAAGHwVHBhl+/C6c=" + }, + "model": { + "$ref": "AAAAAAGHwVHBhV+7NK4=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 650, + "top": 711, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGHwVHBhl+/C6c=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwVHBhl/CxnI=", + "_parent": { + "$ref": "AAAAAAGHwVHBhl+/C6c=" + }, + "model": { + "$ref": "AAAAAAGHwVHBhV+7NK4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 640, + "top": 667, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGHwVHBhl+/C6c=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwVHBhl/DI28=", + "_parent": { + "$ref": "AAAAAAGHwVHBhl+/C6c=" + }, + "model": { + "$ref": "AAAAAAGHwVHBhV+8e04=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 769, + "top": 667, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGHwVHBhl+/C6c=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwVHBhl/E1YE=", + "_parent": { + "$ref": "AAAAAAGHwVHBhl+/C6c=" + }, + "model": { + "$ref": "AAAAAAGHwVHBhV+8e04=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 770, + "top": 681, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGHwVHBhl+/C6c=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwVHBhl/FVVY=", + "_parent": { + "$ref": "AAAAAAGHwVHBhl+/C6c=" + }, + "model": { + "$ref": "AAAAAAGHwVHBhV+8e04=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 767, + "top": 639, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGHwVHBhl+/C6c=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwVHBhl/G60M=", + "_parent": { + "$ref": "AAAAAAGHwVHBhl+/C6c=" + }, + "model": { + "$ref": "AAAAAAGHwVHBhV+9K5M=" + }, + "font": "Arial;13;0", + "left": 519, + "top": 692, + "width": 48.0517578125, + "height": 13, + "alpha": 0.2432285905158279, + "distance": 52.839379254491625, + "hostEdge": { + "$ref": "AAAAAAGHwVHBhl+/C6c=" + }, + "text": "-Theme" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwVHBhl/HlTo=", + "_parent": { + "$ref": "AAAAAAGHwVHBhl+/C6c=" + }, + "model": { + "$ref": "AAAAAAGHwVHBhV+9K5M=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 531, + "top": 737, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGHwVHBhl+/C6c=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwVHBhl/Il1A=", + "_parent": { + "$ref": "AAAAAAGHwVHBhl+/C6c=" + }, + "model": { + "$ref": "AAAAAAGHwVHBhV+9K5M=" + }, + "font": "Arial;13;0", + "left": 498, + "top": 690, + "width": 21.68359375, + "height": 13, + "alpha": -5.348897275791532, + "distance": 28.600699292150182, + "hostEdge": { + "$ref": "AAAAAAGHwVHBhl+/C6c=" + }, + "text": "1" + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGHwVHBhl/JHHU=", + "_parent": { + "$ref": "AAAAAAGHwVHBhl+/C6c=" + }, + "model": { + "$ref": "AAAAAAGHwVHBhV+8e04=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 72, + "top": 96, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGHwVHBhl/KP2c=", + "_parent": { + "$ref": "AAAAAAGHwVHBhl+/C6c=" + }, + "model": { + "$ref": "AAAAAAGHwVHBhV+9K5M=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 72, + "top": 96, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGHsxATrmDNnOM=" + }, + "tail": { + "$ref": "AAAAAAGHszJKAGG0NQ0=" + }, + "lineStyle": 1, + "points": "791:653;497:723", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGHwVHBhl/Apoc=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGHwVHBhl/B7ew=" + }, + "propertyLabel": { + "$ref": "AAAAAAGHwVHBhl/CxnI=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGHwVHBhl/DI28=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGHwVHBhl/E1YE=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGHwVHBhl/FVVY=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGHwVHBhl/G60M=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGHwVHBhl/HlTo=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGHwVHBhl/Il1A=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGHwVHBhl/JHHU=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGHwVHBhl/KP2c=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGHwVctnIUM2+M=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGHwVctm4UI1Hs=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwVctnIUNaCs=", + "_parent": { + "$ref": "AAAAAAGHwVctnIUM2+M=" + }, + "model": { + "$ref": "AAAAAAGHwVctm4UI1Hs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 885, + "top": 425, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGHwVctnIUM2+M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwVctnIUOLBI=", + "_parent": { + "$ref": "AAAAAAGHwVctnIUM2+M=" + }, + "model": { + "$ref": "AAAAAAGHwVctm4UI1Hs=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 870, + "top": 425, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGHwVctnIUM2+M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwVctnIUPj78=", + "_parent": { + "$ref": "AAAAAAGHwVctnIUM2+M=" + }, + "model": { + "$ref": "AAAAAAGHwVctm4UI1Hs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 914, + "top": 426, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGHwVctnIUM2+M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwVctnIUQn+0=", + "_parent": { + "$ref": "AAAAAAGHwVctnIUM2+M=" + }, + "model": { + "$ref": "AAAAAAGHwVctm4UJdmI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 885, + "top": 439, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGHwVctnIUM2+M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwVctnIURcQ4=", + "_parent": { + "$ref": "AAAAAAGHwVctnIUM2+M=" + }, + "model": { + "$ref": "AAAAAAGHwVctm4UJdmI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 871, + "top": 436, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGHwVctnIUM2+M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwVctnIUSHck=", + "_parent": { + "$ref": "AAAAAAGHwVctnIUM2+M=" + }, + "model": { + "$ref": "AAAAAAGHwVctm4UJdmI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 912, + "top": 443, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGHwVctnIUM2+M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwVctnYUTkgg=", + "_parent": { + "$ref": "AAAAAAGHwVctnIUM2+M=" + }, + "model": { + "$ref": "AAAAAAGHwVctm4UK/yI=" + }, + "font": "Arial;13;0", + "left": 847, + "top": 425, + "width": 50.93994140625, + "height": 13, + "alpha": -0.6300750331437177, + "distance": 47.095647357266465, + "hostEdge": { + "$ref": "AAAAAAGHwVctnIUM2+M=" + }, + "text": "-listTags" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwVctnYUUBYM=", + "_parent": { + "$ref": "AAAAAAGHwVctnIUM2+M=" + }, + "model": { + "$ref": "AAAAAAGHwVctm4UK/yI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 871, + "top": 415, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGHwVctnIUM2+M=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwVctnYUVOcA=", + "_parent": { + "$ref": "AAAAAAGHwVctnIUM2+M=" + }, + "model": { + "$ref": "AAAAAAGHwVctm4UK/yI=" + }, + "font": "Arial;13;0", + "left": 912, + "top": 411, + "width": 6.5, + "height": 13, + "alpha": 0.5552277465295183, + "distance": 28.460498941515414, + "hostEdge": { + "$ref": "AAAAAAGHwVctnIUM2+M=" + }, + "text": "*" + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGHwVctnYUWm0o=", + "_parent": { + "$ref": "AAAAAAGHwVctnIUM2+M=" + }, + "model": { + "$ref": "AAAAAAGHwVctm4UJdmI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 120, + "top": 96, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGHwVctnYUXbJ0=", + "_parent": { + "$ref": "AAAAAAGHwVctnIUM2+M=" + }, + "model": { + "$ref": "AAAAAAGHwVctm4UK/yI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 120, + "top": 96, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGHszUGkWJVNws=" + }, + "tail": { + "$ref": "AAAAAAGHszJKAGG0NQ0=" + }, + "lineStyle": 1, + "points": "900:471;900:393", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGHwVctnIUNaCs=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGHwVctnIUOLBI=" + }, + "propertyLabel": { + "$ref": "AAAAAAGHwVctnIUPj78=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGHwVctnIUQn+0=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGHwVctnIURcQ4=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGHwVctnIUSHck=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGHwVctnYUTkgg=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGHwVctnYUUBYM=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGHwVctnYUVOcA=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGHwVctnYUWm0o=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGHwVctnYUXbJ0=" + } + }, + { + "_type": "UMLDependencyView", + "_id": "AAAAAAGHwV2zBOCPY7U=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGHwV2zBOCNhek=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwV2zBOCQoPw=", + "_parent": { + "$ref": "AAAAAAGHwV2zBOCPY7U=" + }, + "model": { + "$ref": "AAAAAAGHwV2zBOCNhek=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 804, + "top": 434, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGHwV2zBOCPY7U=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwV2zBOCRW3E=", + "_parent": { + "$ref": "AAAAAAGHwV2zBOCPY7U=" + }, + "model": { + "$ref": "AAAAAAGHwV2zBOCNhek=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 817, + "top": 426, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGHwV2zBOCPY7U=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwV2zBOCSPAc=", + "_parent": { + "$ref": "AAAAAAGHwV2zBOCPY7U=" + }, + "model": { + "$ref": "AAAAAAGHwV2zBOCNhek=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 779, + "top": 449, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGHwV2zBOCPY7U=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGHszJKAGG0NQ0=" + }, + "tail": { + "$ref": "AAAAAAGHsxLjH2EVAzI=" + }, + "lineStyle": 3, + "points": "528:433;792:448;806:471", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGHwV2zBOCQoPw=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGHwV2zBOCRW3E=" + }, + "propertyLabel": { + "$ref": "AAAAAAGHwV2zBOCSPAc=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGHwV3a5OQ1/RQ=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGHwV3a5OQxGUg=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwV3a5OQ2Hy0=", + "_parent": { + "$ref": "AAAAAAGHwV3a5OQ1/RQ=" + }, + "model": { + "$ref": "AAAAAAGHwV3a5OQxGUg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 639, + "top": 590, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGHwV3a5OQ1/RQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwV3a5OQ33jA=", + "_parent": { + "$ref": "AAAAAAGHwV3a5OQ1/RQ=" + }, + "model": { + "$ref": "AAAAAAGHwV3a5OQxGUg=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 630, + "top": 602, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGHwV3a5OQ1/RQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwV3a5OQ4T04=", + "_parent": { + "$ref": "AAAAAAGHwV3a5OQ1/RQ=" + }, + "model": { + "$ref": "AAAAAAGHwV3a5OQxGUg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 656, + "top": 565, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGHwV3a5OQ1/RQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwV3a5OQ5+pU=", + "_parent": { + "$ref": "AAAAAAGHwV3a5OQ1/RQ=" + }, + "model": { + "$ref": "AAAAAAGHwV3a5OQy8dQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 762, + "top": 612, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGHwV3a5OQ1/RQ=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwV3a5OQ6n+8=", + "_parent": { + "$ref": "AAAAAAGHwV3a5OQ1/RQ=" + }, + "model": { + "$ref": "AAAAAAGHwV3a5OQy8dQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 758, + "top": 625, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGHwV3a5OQ1/RQ=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwV3a5OQ7Ie0=", + "_parent": { + "$ref": "AAAAAAGHwV3a5OQ1/RQ=" + }, + "model": { + "$ref": "AAAAAAGHwV3a5OQy8dQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 771, + "top": 586, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGHwV3a5OQ1/RQ=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwV3a5OQ8HIE=", + "_parent": { + "$ref": "AAAAAAGHwV3a5OQ1/RQ=" + }, + "model": { + "$ref": "AAAAAAGHwV3a5OQzkxk=" + }, + "font": "Arial;13;0", + "left": 535, + "top": 509, + "width": 58.169921875, + "height": 13, + "alpha": 0.17368804935160154, + "distance": 40.70626487409524, + "hostEdge": { + "$ref": "AAAAAAGHwV3a5OQ1/RQ=" + }, + "text": "-listeNote" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwV3a5OQ9Pso=", + "_parent": { + "$ref": "AAAAAAGHwV3a5OQ1/RQ=" + }, + "model": { + "$ref": "AAAAAAGHwV3a5OQzkxk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 534, + "top": 531, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGHwV3a5OQ1/RQ=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwV3a5OQ+x4k=", + "_parent": { + "$ref": "AAAAAAGHwV3a5OQ1/RQ=" + }, + "model": { + "$ref": "AAAAAAGHwV3a5OQzkxk=" + }, + "font": "Arial;13;0", + "left": 555, + "top": 500, + "width": 6.5, + "height": 13, + "alpha": 0.3480805540781273, + "distance": 31.76476034853718, + "hostEdge": { + "$ref": "AAAAAAGHwV3a5OQ1/RQ=" + }, + "text": "*" + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGHwV3a5OQ/vtI=", + "_parent": { + "$ref": "AAAAAAGHwV3a5OQ1/RQ=" + }, + "model": { + "$ref": "AAAAAAGHwV3a5OQy8dQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 80, + "top": 152, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGHwV3a5ORAuJo=", + "_parent": { + "$ref": "AAAAAAGHwV3a5OQ1/RQ=" + }, + "model": { + "$ref": "AAAAAAGHwV3a5OQzkxk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 80, + "top": 152, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGHsxLjH2EVAzI=" + }, + "tail": { + "$ref": "AAAAAAGHszJKAGG0NQ0=" + }, + "lineStyle": 3, + "points": "791:608;648:584;528:498", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGHwV3a5OQ2Hy0=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGHwV3a5OQ33jA=" + }, + "propertyLabel": { + "$ref": "AAAAAAGHwV3a5OQ4T04=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGHwV3a5OQ5+pU=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGHwV3a5OQ6n+8=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGHwV3a5OQ7Ie0=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGHwV3a5OQ8HIE=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGHwV3a5OQ9Pso=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGHwV3a5OQ+x4k=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGHwV3a5OQ/vtI=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGHwV3a5ORAuJo=" + } + }, + { + "_type": "UMLDependencyView", + "_id": "AAAAAAGHwWj+HLR7e4Q=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGHwWj+G7R5mto=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwWj+HLR8LT4=", + "_parent": { + "$ref": "AAAAAAGHwWj+HLR7e4Q=" + }, + "model": { + "$ref": "AAAAAAGHwWj+G7R5mto=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 433, + "top": 601, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGHwWj+HLR7e4Q=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwWj+HLR9/0U=", + "_parent": { + "$ref": "AAAAAAGHwWj+HLR7e4Q=" + }, + "model": { + "$ref": "AAAAAAGHwWj+G7R5mto=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 448, + "top": 602, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGHwWj+HLR7e4Q=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwWj+HLR+qjI=", + "_parent": { + "$ref": "AAAAAAGHwWj+HLR7e4Q=" + }, + "model": { + "$ref": "AAAAAAGHwWj+G7R5mto=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 404, + "top": 600, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGHwWj+HLR7e4Q=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGHsxATrmDNnOM=" + }, + "tail": { + "$ref": "AAAAAAGHsxLjH2EVAzI=" + }, + "lineStyle": 1, + "points": "421:583;418:631", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGHwWj+HLR8LT4=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGHwWj+HLR9/0U=" + }, + "propertyLabel": { + "$ref": "AAAAAAGHwWj+HLR+qjI=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGHwWkglLcu+/w=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGHwWkglLcqb8o=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwWkglLcvzPg=", + "_parent": { + "$ref": "AAAAAAGHwWkglLcu+/w=" + }, + "model": { + "$ref": "AAAAAAGHwWkglLcqb8o=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 679, + "top": 741, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGHwWkglLcu+/w=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwWkglLcwqaQ=", + "_parent": { + "$ref": "AAAAAAGHwWkglLcu+/w=" + }, + "model": { + "$ref": "AAAAAAGHwWkglLcqb8o=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 671, + "top": 728, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGHwWkglLcu+/w=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwWkglLcxvoU=", + "_parent": { + "$ref": "AAAAAAGHwWkglLcu+/w=" + }, + "model": { + "$ref": "AAAAAAGHwWkglLcqb8o=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 696, + "top": 766, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGHwWkglLcu+/w=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwWkglLcy2+A=", + "_parent": { + "$ref": "AAAAAAGHwWkglLcu+/w=" + }, + "model": { + "$ref": "AAAAAAGHwWkglLcr7pg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 523, + "top": 728, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGHwWkglLcu+/w=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwWkglLczrag=", + "_parent": { + "$ref": "AAAAAAGHwWkglLcu+/w=" + }, + "model": { + "$ref": "AAAAAAGHwWkglLcr7pg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 527, + "top": 715, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGHwWkglLcu+/w=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwWkglLc0adE=", + "_parent": { + "$ref": "AAAAAAGHwWkglLcu+/w=" + }, + "model": { + "$ref": "AAAAAAGHwWkglLcr7pg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 517, + "top": 755, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGHwWkglLcu+/w=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwWkglLc1RSY=", + "_parent": { + "$ref": "AAAAAAGHwWkglLcu+/w=" + }, + "model": { + "$ref": "AAAAAAGHwWkglLcsxtM=" + }, + "font": "Arial;13;0", + "left": 687, + "top": 701, + "width": 88.50537109375, + "height": 13, + "alpha": -0.3566504292668551, + "distance": 60.8276253029822, + "hostEdge": { + "$ref": "AAAAAAGHwWkglLcu+/w=" + }, + "text": "-listeUtilisateur" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwWkglLc2xsw=", + "_parent": { + "$ref": "AAAAAAGHwWkglLcu+/w=" + }, + "model": { + "$ref": "AAAAAAGHwWkglLcsxtM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 751, + "top": 680, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGHwWkglLcu+/w=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwWkglLc3898=", + "_parent": { + "$ref": "AAAAAAGHwWkglLcu+/w=" + }, + "model": { + "$ref": "AAAAAAGHwWkglLcsxtM=" + }, + "font": "Arial;13;0", + "left": 776, + "top": 711, + "width": 6.5, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGHwWkglLcu+/w=" + }, + "text": "*" + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGHwWkglLc4KhM=", + "_parent": { + "$ref": "AAAAAAGHwWkglLcu+/w=" + }, + "model": { + "$ref": "AAAAAAGHwWkglLcr7pg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 80, + "top": 64, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGHwWkglLc5uKE=", + "_parent": { + "$ref": "AAAAAAGHwWkglLcu+/w=" + }, + "model": { + "$ref": "AAAAAAGHwWkglLcsxtM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 80, + "top": 64, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGHszJKAGG0NQ0=" + }, + "tail": { + "$ref": "AAAAAAGHsxATrmDNnOM=" + }, + "lineStyle": 3, + "points": "497:748;688:760;791:695", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGHwWkglLcvzPg=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGHwWkglLcwqaQ=" + }, + "propertyLabel": { + "$ref": "AAAAAAGHwWkglLcxvoU=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGHwWkglLcy2+A=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGHwWkglLczrag=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGHwWkglLc0adE=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGHwWkglLc1RSY=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGHwWkglLc2xsw=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGHwWkglLc3898=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGHwWkglLc4KhM=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGHwWkglLc5uKE=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGHwW45PVivcZ0=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGHwW45PFirGuk=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwW45PViwqGs=", + "_parent": { + "$ref": "AAAAAAGHwW45PVivcZ0=" + }, + "model": { + "$ref": "AAAAAAGHwW45PFirGuk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 653, + "top": 532, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGHwW45PVivcZ0=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwW45PVixjgs=", + "_parent": { + "$ref": "AAAAAAGHwW45PVivcZ0=" + }, + "model": { + "$ref": "AAAAAAGHwW45PFirGuk=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 647, + "top": 546, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGHwW45PVivcZ0=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwW45PViyTj0=", + "_parent": { + "$ref": "AAAAAAGHwW45PVivcZ0=" + }, + "model": { + "$ref": "AAAAAAGHwW45PFirGuk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 664, + "top": 505, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGHwW45PVivcZ0=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwW45PVizCM8=", + "_parent": { + "$ref": "AAAAAAGHwW45PVivcZ0=" + }, + "model": { + "$ref": "AAAAAAGHwW45PFisvlo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 761, + "top": 578, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGHwW45PVivcZ0=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwW45PVi02Q4=", + "_parent": { + "$ref": "AAAAAAGHwW45PVivcZ0=" + }, + "model": { + "$ref": "AAAAAAGHwW45PFisvlo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 753, + "top": 589, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGHwW45PVivcZ0=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwW45PVi1EOk=", + "_parent": { + "$ref": "AAAAAAGHwW45PVivcZ0=" + }, + "model": { + "$ref": "AAAAAAGHwW45PFisvlo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 775, + "top": 555, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGHwW45PVivcZ0=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwW45PVi2gpQ=", + "_parent": { + "$ref": "AAAAAAGHwW45PVivcZ0=" + }, + "model": { + "$ref": "AAAAAAGHwW45PFitVg4=" + }, + "font": "Arial;13;0", + "left": 549, + "top": 486, + "width": 68.9990234375, + "height": 13, + "alpha": 0.002433128081675673, + "distance": 60.40695324215582, + "hostEdge": { + "$ref": "AAAAAAGHwW45PVivcZ0=" + }, + "text": "-listefavoris" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwW45PVi3fPo=", + "_parent": { + "$ref": "AAAAAAGHwW45PVivcZ0=" + }, + "model": { + "$ref": "AAAAAAGHwW45PFitVg4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 542, + "top": 500, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGHwW45PVivcZ0=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwW45PVi4Z6o=", + "_parent": { + "$ref": "AAAAAAGHwW45PVivcZ0=" + }, + "model": { + "$ref": "AAAAAAGHwW45PFitVg4=" + }, + "font": "Arial;13;0", + "left": 536, + "top": 483, + "width": 6.5, + "height": 13, + "alpha": -0.6366393122007756, + "distance": 23.323807579381203, + "hostEdge": { + "$ref": "AAAAAAGHwW45PVivcZ0=" + }, + "text": "*" + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGHwW45PVi5g74=", + "_parent": { + "$ref": "AAAAAAGHwW45PVivcZ0=" + }, + "model": { + "$ref": "AAAAAAGHwW45PFisvlo=" + }, + "visible": false, + "font": "Arial;13;0", + "top": 48, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGHwW45PVi6a+k=", + "_parent": { + "$ref": "AAAAAAGHwW45PVivcZ0=" + }, + "model": { + "$ref": "AAAAAAGHwW45PFitVg4=" + }, + "visible": false, + "font": "Arial;13;0", + "top": 48, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGHsxLjH2EVAzI=" + }, + "tail": { + "$ref": "AAAAAAGHszJKAGG0NQ0=" + }, + "lineStyle": 1, + "points": "791:581;528:469", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGHwW45PViwqGs=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGHwW45PVixjgs=" + }, + "propertyLabel": { + "$ref": "AAAAAAGHwW45PViyTj0=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGHwW45PVizCM8=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGHwW45PVi02Q4=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGHwW45PVi1EOk=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGHwW45PVi2gpQ=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGHwW45PVi3fPo=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGHwW45PVi4Z6o=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGHwW45PVi5g74=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGHwW45PVi6a+k=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGHwXrkljsYQSY=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGHwXrkljsUu9c=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwXrkljsZ58k=", + "_parent": { + "$ref": "AAAAAAGHwXrkljsYQSY=" + }, + "model": { + "$ref": "AAAAAAGHwXrkljsUu9c=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 631, + "top": 779, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGHwXrkljsYQSY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwXrkljsadNE=", + "_parent": { + "$ref": "AAAAAAGHwXrkljsYQSY=" + }, + "model": { + "$ref": "AAAAAAGHwXrkljsUu9c=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 635, + "top": 765, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGHwXrkljsYQSY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwXrkljsb2+A=", + "_parent": { + "$ref": "AAAAAAGHwXrkljsYQSY=" + }, + "model": { + "$ref": "AAAAAAGHwXrkljsUu9c=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 624, + "top": 808, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGHwXrkljsYQSY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwXrkljscPf0=", + "_parent": { + "$ref": "AAAAAAGHwXrkljsYQSY=" + }, + "model": { + "$ref": "AAAAAAGHwXrkljsVDlU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 525, + "top": 752, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGHwXrkljsYQSY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwXrkljsdk2M=", + "_parent": { + "$ref": "AAAAAAGHwXrkljsYQSY=" + }, + "model": { + "$ref": "AAAAAAGHwXrkljsVDlU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 531, + "top": 739, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGHwXrkljsYQSY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwXrkljseXO0=", + "_parent": { + "$ref": "AAAAAAGHwXrkljsYQSY=" + }, + "model": { + "$ref": "AAAAAAGHwXrkljsVDlU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 514, + "top": 777, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGHwXrkljsYQSY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwXrkljsf1/A=", + "_parent": { + "$ref": "AAAAAAGHwXrkljsYQSY=" + }, + "model": { + "$ref": "AAAAAAGHwXrkljsW6h4=" + }, + "font": "Arial;13;0", + "left": 685, + "top": 804, + "width": 71.169921875, + "height": 13, + "alpha": -0.30805284668983113, + "distance": 46.17358552246078, + "hostEdge": { + "$ref": "AAAAAAGHwXrkljsYQSY=" + }, + "text": "-listeTheme" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwXrkljsgrHc=", + "_parent": { + "$ref": "AAAAAAGHwXrkljsYQSY=" + }, + "model": { + "$ref": "AAAAAAGHwXrkljsW6h4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 738, + "top": 794, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGHwXrkljsYQSY=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGHwXrkljshZKo=", + "_parent": { + "$ref": "AAAAAAGHwXrkljsYQSY=" + }, + "model": { + "$ref": "AAAAAAGHwXrkljsW6h4=" + }, + "font": "Arial;13;0", + "left": 731, + "top": 835, + "width": 6.5, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGHwXrkljsYQSY=" + }, + "text": "*" + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGHwXrkljsiZSs=", + "_parent": { + "$ref": "AAAAAAGHwXrkljsYQSY=" + }, + "model": { + "$ref": "AAAAAAGHwXrkljsVDlU=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGHwXrkljsjGDQ=", + "_parent": { + "$ref": "AAAAAAGHwXrkljsYQSY=" + }, + "model": { + "$ref": "AAAAAAGHwXrkljsW6h4=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGHs2HK42c8byg=" + }, + "tail": { + "$ref": "AAAAAAGHsxATrmDNnOM=" + }, + "lineStyle": 1, + "points": "497:766;759:835", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGHwXrkljsZ58k=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGHwXrkljsadNE=" + }, + "propertyLabel": { + "$ref": "AAAAAAGHwXrkljsb2+A=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGHwXrkljscPf0=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGHwXrkljsdk2M=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGHwXrkljseXO0=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGHwXrkljsf1/A=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGHwXrkljsgrHc=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGHwXrkljshZKo=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGHwXrkljsiZSs=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGHwXrkljsjGDQ=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGH5ZTmwMXEOZg=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGH5ZTmwMXCGIo=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGH5ZTmwMXFnWw=", + "_parent": { + "$ref": "AAAAAAGH5ZTmwMXEOZg=" + }, + "model": { + "$ref": "AAAAAAGH5ZTmwMXCGIo=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGH5ZTmwMXG39k=", + "_parent": { + "$ref": "AAAAAAGH5ZTmwMXFnWw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 192, + "top": -256, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGH5ZTmwcXHh+g=", + "_parent": { + "$ref": "AAAAAAGH5ZTmwMXFnWw=" + }, + "font": "Arial;13;1", + "left": 573, + "top": 839, + "width": 95.3798828125, + "height": 13, + "text": "Logo" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGH5ZTmwcXIs/c=", + "_parent": { + "$ref": "AAAAAAGH5ZTmwMXFnWw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 192, + "top": -256, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGH5ZTmwcXJjY8=", + "_parent": { + "$ref": "AAAAAAGH5ZTmwMXFnWw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 192, + "top": -256, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 568, + "top": 832, + "width": 105.3798828125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGH5ZTmwMXG39k=" + }, + "nameLabel": { + "$ref": "AAAAAAGH5ZTmwcXHh+g=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGH5ZTmwcXIs/c=" + }, + "propertyLabel": { + "$ref": "AAAAAAGH5ZTmwcXJjY8=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGH5ZTmwcXKYRI=", + "_parent": { + "$ref": "AAAAAAGH5ZTmwMXEOZg=" + }, + "model": { + "$ref": "AAAAAAGH5ZTmwMXCGIo=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGH5ZT8oMaXNAE=", + "_parent": { + "$ref": "AAAAAAGH5ZTmwcXKYRI=" + }, + "model": { + "$ref": "AAAAAAGH5ZT8lsZ/BSw=" + }, + "font": "Arial;13;0", + "left": 573, + "top": 862, + "width": 95.3798828125, + "height": 13, + "text": "-/nom: string", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGH5ZUsG8dcRNU=", + "_parent": { + "$ref": "AAAAAAGH5ZTmwcXKYRI=" + }, + "model": { + "$ref": "AAAAAAGH5ZUsEsdE3fg=" + }, + "font": "Arial;13;0", + "left": 573, + "top": 877, + "width": 95.3798828125, + "height": 13, + "text": "-/linkLogo: string", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 568, + "top": 857, + "width": 105.3798828125, + "height": 38 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGH5ZTmwcXLIOY=", + "_parent": { + "$ref": "AAAAAAGH5ZTmwMXEOZg=" + }, + "model": { + "$ref": "AAAAAAGH5ZTmwMXCGIo=" + }, + "font": "Arial;13;0", + "left": 568, + "top": 895, + "width": 105.3798828125, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGH5ZTmwcXMftg=", + "_parent": { + "$ref": "AAAAAAGH5ZTmwMXEOZg=" + }, + "model": { + "$ref": "AAAAAAGH5ZTmwMXCGIo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 96, + "top": -128, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGH5ZTmwcXN29c=", + "_parent": { + "$ref": "AAAAAAGH5ZTmwMXEOZg=" + }, + "model": { + "$ref": "AAAAAAGH5ZTmwMXCGIo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 96, + "top": -128, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 568, + "top": 832, + "width": 105.3798828125, + "height": 73, + "nameCompartment": { + "$ref": "AAAAAAGH5ZTmwMXFnWw=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGH5ZTmwcXKYRI=" + }, + "operationCompartment": { + "$ref": "AAAAAAGH5ZTmwcXLIOY=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGH5ZTmwcXMftg=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGH5ZTmwcXN29c=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGH5ZaYJM5hLPU=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGH5ZaYJM5dUQg=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGH5ZaYJM5iscE=", + "_parent": { + "$ref": "AAAAAAGH5ZaYJM5hLPU=" + }, + "model": { + "$ref": "AAAAAAGH5ZaYJM5dUQg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 539, + "top": 796, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGH5ZaYJM5hLPU=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGH5ZaYJM5jYZg=", + "_parent": { + "$ref": "AAAAAAGH5ZaYJM5hLPU=" + }, + "model": { + "$ref": "AAAAAAGH5ZaYJM5dUQg=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 547, + "top": 783, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGH5ZaYJM5hLPU=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGH5ZaYJc5kQ74=", + "_parent": { + "$ref": "AAAAAAGH5ZaYJM5hLPU=" + }, + "model": { + "$ref": "AAAAAAGH5ZaYJM5dUQg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 524, + "top": 821, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGH5ZaYJM5hLPU=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGH5ZaYJc5l+wc=", + "_parent": { + "$ref": "AAAAAAGH5ZaYJM5hLPU=" + }, + "model": { + "$ref": "AAAAAAGH5ZaYJM5ekSI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 526, + "top": 788, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGH5ZaYJM5hLPU=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGH5ZaYJc5mpjQ=", + "_parent": { + "$ref": "AAAAAAGH5ZaYJM5hLPU=" + }, + "model": { + "$ref": "AAAAAAGH5ZaYJM5ekSI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 535, + "top": 778, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGH5ZaYJM5hLPU=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGH5ZaYJc5nWeY=", + "_parent": { + "$ref": "AAAAAAGH5ZaYJM5hLPU=" + }, + "model": { + "$ref": "AAAAAAGH5ZaYJM5ekSI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 509, + "top": 809, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGH5ZaYJM5hLPU=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGH5ZaYJc5oNu0=", + "_parent": { + "$ref": "AAAAAAGH5ZaYJM5hLPU=" + }, + "model": { + "$ref": "AAAAAAGH5ZaYJM5fb2g=" + }, + "font": "Arial;13;0", + "left": 514, + "top": 814, + "width": 72.6552734375, + "height": 13, + "alpha": -0.2021279491877861, + "distance": 22.67156809750927, + "hostEdge": { + "$ref": "AAAAAAGH5ZaYJM5hLPU=" + }, + "text": "-defautLogo" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGH5ZaYJc5psF4=", + "_parent": { + "$ref": "AAAAAAGH5ZaYJM5hLPU=" + }, + "model": { + "$ref": "AAAAAAGH5ZaYJM5fb2g=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 557, + "top": 791, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGH5ZaYJM5hLPU=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGH5ZaYJc5qKxc=", + "_parent": { + "$ref": "AAAAAAGH5ZaYJM5hLPU=" + }, + "model": { + "$ref": "AAAAAAGH5ZaYJM5fb2g=" + }, + "font": "Arial;13;0", + "left": 539, + "top": 829, + "width": 6.5, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGH5ZaYJM5hLPU=" + }, + "text": "*" + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGH5ZaYJc5rgHM=", + "_parent": { + "$ref": "AAAAAAGH5ZaYJM5hLPU=" + }, + "model": { + "$ref": "AAAAAAGH5ZaYJM5ekSI=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGH5ZaYJc5sIZw=", + "_parent": { + "$ref": "AAAAAAGH5ZaYJM5hLPU=" + }, + "model": { + "$ref": "AAAAAAGH5ZaYJM5fb2g=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGH5ZTmwMXEOZg=" + }, + "tail": { + "$ref": "AAAAAAGHsxATrmDNnOM=" + }, + "lineStyle": 1, + "points": "497:794;567:836", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGH5ZaYJM5iscE=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGH5ZaYJM5jYZg=" + }, + "propertyLabel": { + "$ref": "AAAAAAGH5ZaYJc5kQ74=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGH5ZaYJc5l+wc=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGH5ZaYJc5mpjQ=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGH5ZaYJc5nWeY=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGH5ZaYJc5oNu0=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGH5ZaYJc5psF4=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGH5ZaYJc5qKxc=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGH5ZaYJc5rgHM=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGH5ZaYJc5sIZw=" + } + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGHsxATrWDLbqE=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "BaseData", + "ownedElements": [ + { + "_type": "UMLAssociation", + "_id": "AAAAAAGHwWkglLcqb8o=", + "_parent": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHwWkglLcr7pg=", + "_parent": { + "$ref": "AAAAAAGHwWkglLcqb8o=" + }, + "reference": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHwWkglLcsxtM=", + "_parent": { + "$ref": "AAAAAAGHwWkglLcqb8o=" + }, + "name": "listeUtilisateur", + "reference": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "visibility": "private", + "multiplicity": "*" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGH5ZaYJM5dUQg=", + "_parent": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGH5ZaYJM5ekSI=", + "_parent": { + "$ref": "AAAAAAGH5ZaYJM5dUQg=" + }, + "reference": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGH5ZaYJM5fb2g=", + "_parent": { + "$ref": "AAAAAAGH5ZaYJM5dUQg=" + }, + "name": "defautLogo", + "reference": { + "$ref": "AAAAAAGH5ZTmwMXCGIo=" + }, + "visibility": "private", + "multiplicity": "*" + } + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGHsxHmtmEDQjA=", + "_parent": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "name": "RechercherUtilisateur" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGHsznnx2NH2gQ=", + "_parent": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "name": "GetLinkLogo" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGHwWwdHu/427c=", + "_parent": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "name": "GetUtilisateur" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGHwWw++/K3/cw=", + "_parent": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "name": "CorrespondPassword" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGHwWxY5fXure4=", + "_parent": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "name": "TrouverMail" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGHwWx6nf5NEN0=", + "_parent": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "name": "AjouterUtilisateur" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH/LY7M2UdnuU=", + "_parent": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "name": "SupUtilisateur" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH/LZOeGYLzYM=", + "_parent": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "name": "AjouterTheme" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH/LZrM2b5qcY=", + "_parent": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "name": "SupTheme" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH/LZ//Wfn/yw=", + "_parent": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "name": "GetTheme" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH/LaTv2jVHMA=", + "_parent": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "name": "ModifierNomTheme" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH/LannGnD+e4=", + "_parent": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "name": "ModifierColorListTheme" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGHsxLjHmETJHw=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Note", + "ownedElements": [ + { + "_type": "UMLDependency", + "_id": "AAAAAAGHsz8IrGOijqg=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "source": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "target": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + } + }, + { + "_type": "UMLDependency", + "_id": "AAAAAAGHs0J/N2P/AMo=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "source": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "target": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGHs0VgdGQi0DA=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHs0VgdGQjBEQ=", + "_parent": { + "$ref": "AAAAAAGHs0VgdGQi0DA=" + }, + "reference": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHs0VgdWQkobk=", + "_parent": { + "$ref": "AAAAAAGHs0VgdGQi0DA=" + }, + "reference": { + "$ref": "AAAAAAGHszUGkGJTukc=" + }, + "navigable": "navigable" + } + }, + { + "_type": "UMLDependency", + "_id": "AAAAAAGHs0WKuWSwq68=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "source": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "target": { + "$ref": "AAAAAAGHszUGkGJTukc=" + } + }, + { + "_type": "UMLDependency", + "_id": "AAAAAAGHs0XAIWTB/NY=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "source": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "target": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + } + }, + { + "_type": "UMLDependency", + "_id": "AAAAAAGHwV2zBOCNhek=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "source": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "target": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGHwV8k+BY69+0=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHwV8k+BY7m7c=", + "_parent": { + "$ref": "AAAAAAGHwV8k+BY69+0=" + }, + "reference": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHwV8k+BY8GjY=", + "_parent": { + "$ref": "AAAAAAGHwV8k+BY69+0=" + }, + "name": "atributionTags", + "reference": { + "$ref": "AAAAAAGHszUGkGJTukc=" + }, + "visibility": "private", + "navigable": "navigable", + "multiplicity": "*" + } + }, + { + "_type": "UMLDependency", + "_id": "AAAAAAGHwWj+G7R5mto=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "source": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "target": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGHsxL0HWE9FYU=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "name": "/nom", + "visibility": "private", + "type": "string" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGHsxMgtWFET5I=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "name": "logo", + "visibility": "private", + "type": "string" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGHsxOyfGFZzxw=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "name": "dateCreation", + "visibility": "private", + "type": "string" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGHsxPYlGFgs7M=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "name": "listeImage", + "visibility": "private", + "type": "list " + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGHsxQphGFn79c=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "name": "listeLigneTexte", + "visibility": "private", + "type": "list " + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGHsxTEpGFu3U4=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "name": "listePosiImage", + "visibility": "private", + "type": "list " + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGH4OGlMd48So8=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "name": "Proprietaire", + "visibility": "private", + "type": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + } + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGH4OHosd9AbLE=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "name": "Cooperateurs", + "visibility": "private", + "type": "list" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGH4OJNgeCD2aw=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "name": "Editeurs", + "visibility": "private", + "type": "list" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGHwWgEHp8y24w=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "name": "VerifOwner" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGHwWg7laAgGPM=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "name": "ModifRole" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH4NPpHdS/8Gg=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "name": "AjouterImage" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH4OLpfuKYzBw=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "name": "SuppImage" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH4OSk3ea2Vmg=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "name": "VerifPriviledge" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH/LL0XFmVxh0=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "name": "AjouterCoop" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH/LTGZlqDkIg=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "name": "SupCoop" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH/LTpeFtxaEQ=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "name": "AjouterEdit" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH/LUCNVxfrq8=", + "_parent": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "name": "SupEdit" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGHszJKAGGyqQg=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Utilisateur", + "ownedElements": [ + { + "_type": "UMLDependency", + "_id": "AAAAAAGHs0BF1GPKV7g=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "name": "listTags", + "source": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "target": { + "$ref": "AAAAAAGHszUGkGJTukc=" + }, + "visibility": "private" + }, + { + "_type": "UMLDependency", + "_id": "AAAAAAGHs0GbmGPhRXs=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "source": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "target": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGHwVHBhV+7NK4=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHwVHBhV+8e04=", + "_parent": { + "$ref": "AAAAAAGHwVHBhV+7NK4=" + }, + "reference": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHwVHBhV+9K5M=", + "_parent": { + "$ref": "AAAAAAGHwVHBhV+7NK4=" + }, + "name": "Theme", + "reference": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + }, + "visibility": "private", + "navigable": "navigable", + "multiplicity": "1" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGHwVctm4UI1Hs=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHwVctm4UJdmI=", + "_parent": { + "$ref": "AAAAAAGHwVctm4UI1Hs=" + }, + "reference": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHwVctm4UK/yI=", + "_parent": { + "$ref": "AAAAAAGHwVctm4UI1Hs=" + }, + "name": "listTags", + "reference": { + "$ref": "AAAAAAGHszUGkGJTukc=" + }, + "visibility": "private", + "navigable": "navigable", + "multiplicity": "*" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGHwV3a5OQxGUg=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHwV3a5OQy8dQ=", + "_parent": { + "$ref": "AAAAAAGHwV3a5OQxGUg=" + }, + "reference": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHwV3a5OQzkxk=", + "_parent": { + "$ref": "AAAAAAGHwV3a5OQxGUg=" + }, + "name": "listeNote", + "reference": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "visibility": "private", + "navigable": "navigable", + "multiplicity": "*" + } + }, + { + "_type": "UMLConstraint", + "_id": "AAAAAAGHwWSiQXVp0WE=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "name": "Constraint1", + "specification": "\n" + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGHwW45PFirGuk=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHwW45PFisvlo=", + "_parent": { + "$ref": "AAAAAAGHwW45PFirGuk=" + }, + "reference": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHwW45PFitVg4=", + "_parent": { + "$ref": "AAAAAAGHwW45PFirGuk=" + }, + "name": "listefavoris", + "reference": { + "$ref": "AAAAAAGHsxLjHmETJHw=" + }, + "visibility": "private", + "navigable": "navigable", + "multiplicity": "*" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGHszJzs2HcXu4=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "name": "/pseudo", + "visibility": "private", + "type": "string" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGHszKhY2Hk848=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "name": "/mail", + "visibility": "private", + "type": "string" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGHszLWWGHtWvc=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "name": "/password", + "visibility": "private", + "type": "string" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGHwX5qfj58iuE=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "name": "connecter", + "visibility": "private", + "type": "bool" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGH5Zuqf+EGwEY=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "name": "notetaged", + "visibility": "private", + "type": "map>" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGHszOmwWIZbnQ=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "name": "RechercherNote" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGHwWZXdpPKlxs=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "name": "RechercherNoteFav" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGHwWbQHpXKwHw=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "name": "RechercherTags" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGHwWcDZpefm/w=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "name": "AjouterFav" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGHwWc4R5l0Qos=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "name": "SuppFav" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH5Z2Ir+a3+4U=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "name": "AjouterNote" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH5Z23P+eQnoI=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "name": "SuppNote" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH7Y/7sa/62wM=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "name": "createTag" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH7ZAChbC9p+o=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "name": "deleteTag" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH/KxPskUQQZ4=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "name": "AddOneTagToNoteList" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH/KxhdkX+V8s=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "name": "SupOneTagToNoteList" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH/KyCIkbsdWw=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "name": "AddTagToNoteList" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH/KyTR0faUc4=", + "_parent": { + "$ref": "AAAAAAGHszJKAGGyqQg=" + }, + "name": "SupTagToNoteList" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGHszUGkGJTukc=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Tags", + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGHszUk6GJ9jMQ=", + "_parent": { + "$ref": "AAAAAAGHszUGkGJTukc=" + }, + "name": "/nom", + "visibility": "private", + "type": "string" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGHszUrAGKDQzw=", + "_parent": { + "$ref": "AAAAAAGHszUGkGJTukc=" + }, + "name": "/couleur", + "visibility": "private", + "type": "string" + } + ] + }, + { + "_type": "UMLInterface", + "_id": "AAAAAAGHszWvB2Kby3c=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Connection", + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGHszXRYmLGEIs=", + "_parent": { + "$ref": "AAAAAAGHszWvB2Kby3c=" + }, + "name": "TrouverMail" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGHszX2WWLTw/w=", + "_parent": { + "$ref": "AAAAAAGHszWvB2Kby3c=" + }, + "name": "CorrespondPassword" + } + ] + }, + { + "_type": "UMLInterface", + "_id": "AAAAAAGHszavsGLcE1w=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Inscription", + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGHszbdSWMT+Qc=", + "_parent": { + "$ref": "AAAAAAGHszavsGLcE1w=" + }, + "name": "AjouterBaseData" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGHs1B9TWTsIxE=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Compte" + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGHs1sG1GUvWQc=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "SupprimerCompte" + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGHs1svqWVZgh0=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Deconnecter" + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGHs1tJIWWDEBQ=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "SetTheme", + "ownedElements": [ + { + "_type": "UMLAssociation", + "_id": "AAAAAAGHwVHoOmHYth4=", + "_parent": { + "$ref": "AAAAAAGHs1tJIWWDEBQ=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHwVHoOmHZ9G8=", + "_parent": { + "$ref": "AAAAAAGHwVHoOmHYth4=" + }, + "reference": { + "$ref": "AAAAAAGHs1tJIWWDEBQ=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHwVHoOmHafMw=", + "_parent": { + "$ref": "AAAAAAGHwVHoOmHYth4=" + }, + "name": "listeTheme", + "reference": { + "$ref": "AAAAAAGHs2HK4mc6StU=" + }, + "visibility": "private", + "multiplicity": "*" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGHwVaw2n3zGQo=", + "_parent": { + "$ref": "AAAAAAGHs1tJIWWDEBQ=" + }, + "name": "listeTheme", + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHwVaw2n30LmY=", + "_parent": { + "$ref": "AAAAAAGHwVaw2n3zGQo=" + }, + "reference": { + "$ref": "AAAAAAGHs1tJIWWDEBQ=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHwVaw2n31tqI=", + "_parent": { + "$ref": "AAAAAAGHwVaw2n3zGQo=" + }, + "reference": { + "$ref": "AAAAAAGHs2HK4mc6StU=" + }, + "navigable": "navigable" + }, + "visibility": "private" + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGHwVgmWpo8T3w=", + "_parent": { + "$ref": "AAAAAAGHs1tJIWWDEBQ=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHwVgmWpo9vvY=", + "_parent": { + "$ref": "AAAAAAGHwVgmWpo8T3w=" + }, + "reference": { + "$ref": "AAAAAAGHs1tJIWWDEBQ=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHwVgmWpo+ctQ=", + "_parent": { + "$ref": "AAAAAAGHwVgmWpo8T3w=" + }, + "name": "listeTheme", + "reference": { + "$ref": "AAAAAAGHs2HK4mc6StU=" + }, + "visibility": "private", + "multiplicity": "*" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGHwXrkljsUu9c=", + "_parent": { + "$ref": "AAAAAAGHs1tJIWWDEBQ=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHwXrkljsVDlU=", + "_parent": { + "$ref": "AAAAAAGHwXrkljsUu9c=" + }, + "reference": { + "$ref": "AAAAAAGHsxATrWDLbqE=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGHwXrkljsW6h4=", + "_parent": { + "$ref": "AAAAAAGHwXrkljsUu9c=" + }, + "name": "listeTheme", + "reference": { + "$ref": "AAAAAAGHs2HK4mc6StU=" + }, + "visibility": "private", + "multiplicity": "*" + } + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGHs1t3gWWtwXQ=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "CreerNte" + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGHs1uQGWXX5LY=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "SupprimerNote" + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGHs1u8GWYB3cU=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "CreerTag" + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGHs1vbPGYrQrw=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "SupprimerTag" + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGHs1wROWZVwos=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Favoriser" + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGHs14zVWahGNQ=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "AddImage" + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGHs16KnGbPBNk=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "AddTag" + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGHs16gp2b5oPQ=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "EnleverTag" + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGHs2HK4mc6StU=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Theme", + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGH5ZSDMsGKSBM=", + "_parent": { + "$ref": "AAAAAAGHs2HK4mc6StU=" + }, + "name": "/nom", + "visibility": "private", + "type": "string" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGHs2HpZ2dkozw=", + "_parent": { + "$ref": "AAAAAAGHs2HK4mc6StU=" + }, + "name": "listeCouleur", + "visibility": "private", + "type": "list " + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGH7UFM3ZjWsn8=", + "_parent": { + "$ref": "AAAAAAGHs2HK4mc6StU=" + }, + "name": "GetColorList" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGH6+RfrBFS0Bc=", + "_parent": { + "$ref": "AAAAAAGHs2HK4mc6StU=" + }, + "name": "ChangeColor" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGHs2QdI2d3AO8=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Couleur", + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGHs2QxsGehxHI=", + "_parent": { + "$ref": "AAAAAAGHs2QdI2d3AO8=" + }, + "name": "couleur", + "visibility": "private", + "type": "string" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGHwWDzukIEzcY=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "EnleverImage" + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGH5ZTmwMXCGIo=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Logo", + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGH5ZT8lsZ/BSw=", + "_parent": { + "$ref": "AAAAAAGH5ZTmwMXCGIo=" + }, + "name": "/nom", + "visibility": "private", + "type": "string" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGH5ZUsEsdE3fg=", + "_parent": { + "$ref": "AAAAAAGH5ZTmwMXCGIo=" + }, + "name": "/linkLogo", + "visibility": "private", + "type": "string" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGH5Zjg9NvBVJQ=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "TagedNote", + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGH5ZkVmdyTM14=", + "_parent": { + "$ref": "AAAAAAGH5Zjg9NvBVJQ=" + }, + "name": "tagnote", + "type": "map>" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/notus/Biblioteque_de_Class/Biblioteque_de_Class.csproj b/notus/Biblioteque_de_Class/Biblioteque_de_Class.csproj new file mode 100644 index 0000000..cfadb03 --- /dev/null +++ b/notus/Biblioteque_de_Class/Biblioteque_de_Class.csproj @@ -0,0 +1,9 @@ + + + + net7.0 + enable + enable + + + diff --git a/notus/Biblioteque_de_Class/Biblioteque_de_Class.sln b/notus/Biblioteque_de_Class/Biblioteque_de_Class.sln new file mode 100644 index 0000000..df2ece8 --- /dev/null +++ b/notus/Biblioteque_de_Class/Biblioteque_de_Class.sln @@ -0,0 +1,34 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.33424.131 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Biblioteque_de_Class", "Biblioteque_de_Class.csproj", "{CC2FF847-9D3A-44F7-8672-C70A4FE87C5B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Notus_Console", "..\Notus_Console\Notus_Console.csproj", "{F48CF8AB-163E-4D63-B210-BDA22BE5251D}" + ProjectSection(ProjectDependencies) = postProject + {CC2FF847-9D3A-44F7-8672-C70A4FE87C5B} = {CC2FF847-9D3A-44F7-8672-C70A4FE87C5B} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CC2FF847-9D3A-44F7-8672-C70A4FE87C5B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CC2FF847-9D3A-44F7-8672-C70A4FE87C5B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC2FF847-9D3A-44F7-8672-C70A4FE87C5B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CC2FF847-9D3A-44F7-8672-C70A4FE87C5B}.Release|Any CPU.Build.0 = Release|Any CPU + {F48CF8AB-163E-4D63-B210-BDA22BE5251D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F48CF8AB-163E-4D63-B210-BDA22BE5251D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F48CF8AB-163E-4D63-B210-BDA22BE5251D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F48CF8AB-163E-4D63-B210-BDA22BE5251D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {0AA9469C-FA7B-4AF1-9C90-056193DA2415} + EndGlobalSection +EndGlobal diff --git a/notus/Biblioteque_de_Class/Database.cs b/notus/Biblioteque_de_Class/Database.cs new file mode 100644 index 0000000..fd54280 --- /dev/null +++ b/notus/Biblioteque_de_Class/Database.cs @@ -0,0 +1,208 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.ComponentModel.Design; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace Biblioteque_de_Class +{ + [DataContract] + public class Database + { + [DataMember] + private List DefaultLogoList; + [DataMember] + private List ThemeList; + [DataMember] + private List UserList; + + public Database() + { + DefaultLogoList = new List(); + ThemeList = new List(); + UserList = new List(); + } + + public List GetDefaultLogoList() { return DefaultLogoList; } + public List GetThemeList() { return ThemeList; } + public List GetUserList() { return UserList; } + + /// + /// recherche un utilisateur dans la liste d'utilisateur + /// + public List SearchUser(string name) + { + List searchedUsers = new List(); + string search = name.ToLower(); + searchedUsers.AddRange(UserList.Where( user => user.GetUsername().ToLower().Contains(search))); + return searchedUsers; + } + + /// + /// récupérer le lien d'un logo + /// + public string? GetLogoLink(string name) + { + foreach (Logo logo in DefaultLogoList) + { + if (logo.GetName() == name) { return logo.GetLogoLink(); } + } + throw new NotFoundException("No logo link found."); + } + + /// + /// récupérer un utilisateur + /// + public User GetUser(string name) + { + foreach (User user in UserList) + { + if (user.GetUsername() == name) + { + return user; + } + } + throw new AlreadyUsedException("No user found with this username."); + } + + /// + /// comparer le mot de passe entré avec celui de l'utilisateur + /// + public static bool ComparePassword(User user, string? password) => user.GetPassword() == password; + + /// + /// rechercher un mail dans la liste d'utilisateur + /// + public bool FindEmail(string email) + { + foreach (User user in UserList) + { + if (string.Equals(user.GetEmail(), email)) + { + return true; + } + } + return false; + } + + /// + /// ajouter un utilisateur dans la liste d'utilisateur + /// + public void AddUser(User user) + { + foreach (User existingUser in UserList) + { + if (existingUser.GetUsername() == user.GetUsername()) + { + throw new AlreadyUsedException("Username already used."); + } + else if (existingUser.GetEmail() == user.GetEmail()) + { + throw new AlreadyUsedException("Email already used."); + } + } + UserList.Add(user); + } + + /// + /// supprimer un utilisateur dans la liste d'utilisateur + /// + public void RemoveUser(User user) + { + if (UserList.Contains(user)) + { + UserList.Remove(user); + } + else + { + throw new NotFoundException("User not found."); + } + } + + /// + /// ajouter un theme dans la liste de theme + /// + public void AddTheme(Theme theme) + { + foreach (Theme existingTheme in ThemeList) + { + if (existingTheme.GetName() == theme.GetName()) + { + throw new AlreadyUsedException("Theme already used."); + } + } + ThemeList.Add(theme); + } + + /// + /// supprimer un theme dans la liste de theme + /// + public void RemoveTheme(Theme theme) + { + if (ThemeList.Contains(theme)) + { + if (theme.GetName().Length > 6 && theme.GetName()[..6] != "Static" ) + { + throw new AlreadyUsedException("This theme is used a default theme."); + } + ThemeList.Remove(theme); + } + else + { + throw new NotFoundException("Theme not found."); + } + } + + /// + /// récupérer un theme + /// + public Theme GetTheme(string name) + { + foreach (Theme theme in ThemeList) + { + if (theme.GetName() == name) + { + return theme; + } + } + throw new NotFoundException("No theme found with this name."); + } + + /// + /// modifier le nom d'un theme + /// + public void ModifyThemeName(Theme theme, string newName) + { + foreach (Theme existingTheme in ThemeList) + { + if (existingTheme.GetName() == theme.GetName()) + { + existingTheme.SetName(newName); + return; + } + } + throw new NotFoundException("Theme not found."); + } + + /// + /// modifier la liste de couleur d'un theme + /// + public void ModifyThemeColorList(Theme theme, List newColorList) + { + foreach (Theme existingTheme in ThemeList) + { + if (existingTheme.GetName() == theme.GetName()) + { + for (int i = 0; i < 3; i++) + { + existingTheme.ChangeColor(existingTheme.GetColor(i), newColorList[i]); + } + return; + } + } + } + } +} \ No newline at end of file diff --git a/notus/Biblioteque_de_Class/Exception.cs b/notus/Biblioteque_de_Class/Exception.cs new file mode 100644 index 0000000..2cfe24d --- /dev/null +++ b/notus/Biblioteque_de_Class/Exception.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace Biblioteque_de_Class +{ + [Serializable] + public class NotAllowedException : Exception + { + public NotAllowedException(string message) : base(message) + { + } + protected NotAllowedException(SerializationInfo info, StreamingContext context) : base(info, context) + { + } + } + [Serializable] + public class AlreadyUsedException : Exception + { + public AlreadyUsedException(string message) : base(message) + { + } + protected AlreadyUsedException(SerializationInfo info, StreamingContext context) : base(info, context) + { + } + } + [Serializable] + public class NotFoundException : Exception + { + public NotFoundException(string message) : base(message) + { + } + protected NotFoundException(SerializationInfo info, StreamingContext context) : base(info, context) + { + } + } + [Serializable] + public class AlreadyExistException : Exception + { + public AlreadyExistException(string message) : base(message) + { + } + protected AlreadyExistException(SerializationInfo info, StreamingContext context) : base(info, context) + { + } + } + + + + + [Serializable] + public class FileException : Exception + { + public FileException(string message) : base(message) + { + } + protected FileException(SerializationInfo info, StreamingContext context) : base(info, context) + { + + } + } +} diff --git a/notus/Biblioteque_de_Class/IManager.cs b/notus/Biblioteque_de_Class/IManager.cs new file mode 100644 index 0000000..262f1c9 --- /dev/null +++ b/notus/Biblioteque_de_Class/IManager.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Biblioteque_de_Class +{ + public interface IManager + { + public void SaveDatabaseData(Database database); + + public Database LoadDatabaseData(); + } +} diff --git a/notus/Biblioteque_de_Class/Logo.cs b/notus/Biblioteque_de_Class/Logo.cs new file mode 100644 index 0000000..7a99add --- /dev/null +++ b/notus/Biblioteque_de_Class/Logo.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Biblioteque_de_Class +{ + public class Logo + { + private string Name { get; set; } + private string LogoLink { get; set; } + + public Logo(string name, string logoLink) + { + Name = name; + LogoLink = logoLink; + } + + public string GetName() { return Name; } + public string GetLogoLink() { return LogoLink; } + + public void SetName(string name) { Name = name; } + public void SetLogoLink(string logoLink) { LogoLink = logoLink; } + + public override string ToString() => $"Logo -> Name: {Name}\nLink: {LogoLink}"; + } +} diff --git a/notus/Biblioteque_de_Class/Note.cs b/notus/Biblioteque_de_Class/Note.cs new file mode 100644 index 0000000..abeedca --- /dev/null +++ b/notus/Biblioteque_de_Class/Note.cs @@ -0,0 +1,141 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Biblioteque_de_Class +{ + public class Note + { + private string name; + public string Name + { + get { return name; } + private set { if (value == null) { name = "Unnamed Note"; } else { name = value; } } + } + + private string Text { get; set; } = ""; + + private string logoPath; + public string LogoPath + { + get { return logoPath; } + private set { if (value == null) { logoPath = "PATH TO DEFAULT LOGO"; } else { logoPath = value; } } + } + + private DateOnly CreationDate { get; } + private DateOnly ModificationDate { get; set; } + private readonly List ImageList; + private readonly List Collaborators; + private readonly List Editors; + private readonly User Owner; + + public Note(string name, string logoPath, User owner) + { + Name = name; + LogoPath = logoPath; + CreationDate = DateOnly.FromDateTime(DateTime.Now); + ModificationDate = DateOnly.FromDateTime(DateTime.Now); + ImageList = new List(); + Collaborators = new List(); + Editors = new List(); + Owner = owner; + } + + public string GetName() { return Name; } + public string GetLogoPath() { return LogoPath; } + public string GetText() { return Text; } + public DateOnly GetCreationDate() { return CreationDate; } + public DateOnly GetModificationDate() { return ModificationDate; } + public List GetImageList() { return ImageList; } + public List GetCollaborators() { return Collaborators; } + public List GetEditors() { return Editors; } + public User GetOwner() { return Owner; } + + public override string ToString() => $"Note -> Name: {Name}\nLogoPath: {LogoPath}"; + + public void SetName(string name) { Name = name; } + public void SetLogoPath(string logoPath) { LogoPath = logoPath; } + public void SetModificationDate() { ModificationDate = DateOnly.FromDateTime(DateTime.Now); } + + + /// + /// vérifier si l'utilisateur est le propriétaire de la note + /// + public bool VerifyOwner(User user) + { + return user == Owner; + } + + public void AddImage(string imageLink, string position) + { + int newname = ImageList.Count + 1; + ImageList.Add(new NoteImage(newname, imageLink, position)); + } + + public void RemoveImage(int name) + { + foreach (NoteImage image in ImageList) + { + if (image.GetName() == name) + { + ImageList.Remove(image); + return; + } + } + throw new NotFoundException("Image not found"); + } + + public void AddText(string text) + { + Text = Text + "\n" + text; + } + + /// + /// vérifier si l'utilisateur est un éditeur de la note + /// + public bool VerifyPrivilege(User user) + { + return Editors.Contains(user); + } + + /// + /// ajouter un utilisateur en tant que coopérateur + /// + public void AddCollaborator(User owner, User user) + { + if (VerifyOwner(owner)) { Collaborators.Add(user); } + else { throw new NotAllowedException("User is not the owner"); } + user.GetNoteList().Add(this); + } + + /// + /// supprimer un utilisateur en tant que coopérateur + /// + public void RemoveCollaborator(User owner, User user) + { + if (VerifyOwner(owner)) { Collaborators.Remove(user); } + else { throw new NotAllowedException("User is not the owner"); } + user.GetNoteList().Remove(this); + } + + /// + /// passer un coopérateur en tant qu'éditeur + /// + public void AddEditor(User owner, User user) + { + if (VerifyOwner(owner)) { Editors.Add(user); } + else { throw new NotAllowedException("User is not the owner"); } + } + + /// + /// supprimer un coopérateur de la liste des éditeurs + /// + public void RemoveEditor(User owner, User user) + { + if (VerifyOwner(owner)) { Editors.Remove(user); } + else { throw new NotAllowedException("User is not the owner"); } + } + } +} diff --git a/notus/Biblioteque_de_Class/NoteImage.cs b/notus/Biblioteque_de_Class/NoteImage.cs new file mode 100644 index 0000000..1680e74 --- /dev/null +++ b/notus/Biblioteque_de_Class/NoteImage.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Biblioteque_de_Class +{ + public class NoteImage + { + private int Name { get; set; } + private string ImageLink { get; set; } + private string Position { get; set; } + + public NoteImage(int name, string imageLink, string position) + { + Name = name; + ImageLink = imageLink; + Position = position; + } + + public int GetName() { return Name; } + public string GetImageLink() { return ImageLink; } + public string GetPosition() { return Position; } + + public void SetName(int name) { Name = name; } + public void SetImageLink(string imageLink) { ImageLink = imageLink; } + public void SetPosition(string position) { Position = position; } + + public override string ToString() => $"image -> name: {Name}\nlink: {ImageLink}"; + } +} diff --git a/notus/Biblioteque_de_Class/PersistenceManager.cs b/notus/Biblioteque_de_Class/PersistenceManager.cs new file mode 100644 index 0000000..cb276f0 --- /dev/null +++ b/notus/Biblioteque_de_Class/PersistenceManager.cs @@ -0,0 +1,24 @@ +using Microsoft.VisualBasic; + +namespace Biblioteque_de_Class +{ + public class PersistenceManager + { + private readonly IManager persistence; + + public PersistenceManager(IManager pers) + { + persistence = pers; + } + + public void SaveDatabaseData(Database database) + { + persistence.SaveDatabaseData(database); + } + + public Database LoadDatabaseData() + { + return persistence.LoadDatabaseData(); + } + } +} diff --git a/notus/Biblioteque_de_Class/Tags.cs b/notus/Biblioteque_de_Class/Tags.cs new file mode 100644 index 0000000..e0f9c3e --- /dev/null +++ b/notus/Biblioteque_de_Class/Tags.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Biblioteque_de_Class +{ + public class Tags + { + private string Name { get; set; } + private string Color { get; set; } + + public Tags(string name, string color) + { + Name = name; + Color = color; + } + + public string GetName() { return Name; } + public string GetColor() { return Color; } + public void SetName(string name) { Name = name; } + public void SetColor(string color) { Color = color; } + + public override string ToString() => $"tag -> name: {Name}\ncolor: {Color}"; + } +} diff --git a/notus/Biblioteque_de_Class/Theme.cs b/notus/Biblioteque_de_Class/Theme.cs new file mode 100644 index 0000000..4d55261 --- /dev/null +++ b/notus/Biblioteque_de_Class/Theme.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Biblioteque_de_Class +{ + public class Theme + { + private string Name { get; set; } + private readonly List ColorList; + + public Theme(string name, List colorList) + { + Name = name; + ColorList = colorList; + } + + public string GetName() { return Name; } + public void SetName(string name) { Name = name; } + public List GetColorList() { return ColorList; } + public string GetColor(int index) { return ColorList[index]; } + + public override string ToString() => $"name: {Name}\ncolor 1: {ColorList[0]}\ncolor 2: {ColorList[1]}\ncolor 3: {ColorList[2]}\n"; + + /// + /// Change a specific color of the theme. + /// + public void ChangeColor(string color, string newColor) + { + for (int i = 0; i < ColorList.Count; i++) + { + if (ColorList[i] == color) + { + ColorList[i] = newColor; + } + } + } + } +} diff --git a/notus/Biblioteque_de_Class/User.cs b/notus/Biblioteque_de_Class/User.cs new file mode 100644 index 0000000..9e9fa05 --- /dev/null +++ b/notus/Biblioteque_de_Class/User.cs @@ -0,0 +1,271 @@ +using Microsoft.VisualBasic.FileIO; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations.Schema; +using System.Runtime.Serialization; + +namespace Biblioteque_de_Class +{ + [DataContract] + public class User + { + [DataMember] + private string Username { get; set; } + [DataMember] + private string Email { get; set; } + [DataMember] + private string Password { get; set; } + private Theme Theme; + [DataMember] + private List NoteList; + [DataMember] + private List TagList; + [DataMember] + private List FavList; + [DataMember] + private bool IsConnected { get; set; } + [DataMember] + private Dictionary> NoteTagged; + + public User(string username, string email, string password) + { + Username = username; + Email = email; + Password = password; + NoteList = new List(); + TagList = new List(); + FavList = new List(); + NoteTagged = new Dictionary>(); + } + + public string GetUsername() { return Username; } + public string GetEmail() { return Email; } + public string GetPassword() { return Password; } + public Theme GetTheme() { return Theme; } + public List GetNoteList() { return NoteList; } + public List GetTagList() { return TagList; } + public List GetFavList() { return FavList; } + public bool GetIsConnected() { return IsConnected; } + public Dictionary> GetNoteTagged() { return NoteTagged; } + public List GetNoteTaggedList(Note note) { return NoteTagged[note]; } + + public void SetUsername(string username) { Username = username; } + public void SetEmail(string email) { Email = email; } + public void SetPassword(string password) { Password = password; } + public void SetTheme(Theme theme) { Theme = theme; } + public void SetIsConnected(bool isConnected) { IsConnected = isConnected; } + + public override string ToString() => $"username: {Username}\nemail: {Email}\npassword: {Password}\nOwned notes: {NoteList.Count}"; + + /// + /// rechercher une note dans la liste de note de l'utilisateur et la liste de note favoris de l'utilisateur + /// + public List SearchNoteByName(List ToResearchIntoList, string name) + { + List searchedNotes = new List(); + string search = name.ToLower(); + foreach (Note note in ToResearchIntoList) + { + if (note.GetName().ToLower().Contains(search)) + { + searchedNotes.Add(note); + } + } + return searchedNotes; + } + + /// + /// rechercher un tag dans la liste de tag de l'utilisateur + /// + public List SearchTagByName(List ToResearchIntoList, string name) + { + List searchedTags = new List(); + string search = name.ToLower(); + foreach (Tags tag in ToResearchIntoList) + { + if (tag.GetName().ToLower().Contains(search)) + { + searchedTags.Add(tag); + } + } + return searchedTags; + } + + public List SearchNoteByDate(List ToResearchIntoList, string name, DateOnly FirstDate, DateOnly SecondeDate) + { + List searchedNotes = new List(); + string search = name.ToLower(); + foreach (Note note in ToResearchIntoList) + { + if (note.GetName().ToLower().Contains(search) && note.GetCreationDate() >= FirstDate && note.GetCreationDate() <= SecondeDate || note.GetModificationDate() >= FirstDate && note.GetModificationDate() <= SecondeDate) + { + searchedNotes.Add(note); + } + } + return searchedNotes; + } + + public Note GetNoteByName(string name) + { + foreach (Note note in NoteList) + { + if (note.GetName() == name) + { + return note; + } + } + throw new NotFoundException("Note not found"); + } + + public Tags GetTagByName(string name) + { + foreach (Tags tag in TagList) + { + if (tag.GetName() == name) + { + return tag; + } + } + throw new NotFoundException("Tag not found"); + } + + /// + /// ajouter une note dans la liste de note favorite de l'utilisateur + /// + public void AddFavorite(Note note) + { + if (FavList.Contains(note)) + { + throw new AlreadyExistException("Note already in favorites"); + } + FavList.Add(note); + } + + /// + /// supprimer une note dans la liste de note favorite de l'utilisateur + /// + public void RemoveFavorite(Note note) + { + if (FavList.Contains(note)) + { + FavList.Remove(note); + } + else + { + throw new NotFoundException("Note not found"); + } + } + + /// + ///creer une note + /// + public void CreateNote(string name, string imagePath) + { + foreach (Note existingNote in NoteList) + { + if (existingNote.GetName() == name) + { + throw new AlreadyExistException("Note already exists"); + } + } + Note note = new Note(name, imagePath, this); + NoteList.Add(note); + NoteTagged.Add(note, new List()); + } + + /// + /// supprimer une note + /// + public void DeleteNote(string note) + { + foreach (Note existingNote in NoteList) + { + if (existingNote.GetName() == note) + { + NoteList.Remove(existingNote); + NoteTagged.Remove(existingNote); + return; + } + } + throw new NotFoundException("Note not found"); + } + + /// + /// creer un tag + /// + public void CreateTag(string name, string color) + { + foreach (Tags tag in TagList) + { + if (tag.GetName() == name) + { + throw new AlreadyExistException("Tag already exists"); + } + } + TagList.Add(new Tags(name, color)); + } + + /// + /// supprimer un tag + /// + public void DeleteTag(string name) + { + foreach (Tags tag in TagList) + { + if (tag.GetName() == name) + { + TagList.Remove(tag); + return; + } + } + } + + /// + /// ajouter un tag a une note + /// + public void AddTagToNoteList(Note note, Tags tagToAdd) + { + if (!TagList.Contains(tagToAdd)) + { + throw new NotFoundException("Tag not found"); + } + if (!NoteList.Contains(note)) + { + throw new NotFoundException("Note not found"); + } + NoteTagged[note].Add(tagToAdd); + } + + /// + /// supprimer un tag a une note + /// + public void RemoveTagFromNoteList(Note note, Tags tagToRemove) + { + if (!TagList.Contains(tagToRemove)) + { + throw new NotFoundException("Tag not found"); + } + if (!NoteList.Contains(note)) + { + throw new NotFoundException("Note not found"); + } + NoteTagged[note].Remove(tagToRemove); + } + + /// + /// ajouter plusieur tag a une note + /// + public void AddTagsToNoteList(Note note, List tags) + { + NoteTagged.Add(note, tags); + } + + /// + ///supprimer tout les tags d'une note + /// + public void RemoveTagsFromNoteList(Note note) + { + NoteTagged.Remove(note); + } + + } +} \ No newline at end of file diff --git a/notus/Notus_Console/Notus_Console.csproj b/notus/Notus_Console/Notus_Console.csproj new file mode 100644 index 0000000..3cc35ff --- /dev/null +++ b/notus/Notus_Console/Notus_Console.csproj @@ -0,0 +1,15 @@ + + + + Exe + net7.0 + enable + enable + + + + + + + + diff --git a/notus/Notus_Console/Program.cs b/notus/Notus_Console/Program.cs new file mode 100644 index 0000000..d0a78b0 --- /dev/null +++ b/notus/Notus_Console/Program.cs @@ -0,0 +1,647 @@ +using Biblioteque_de_Class; +using Notus_Persistance; +using System.Collections; +using System.Security.Cryptography; +using System.Text; + +// load database +PersistenceManager manager = new(new Stub()); +Database db = manager.LoadDatabaseData(); +foreach(User user in db.GetUserList()) +{ + user.SetPassword(GetSHA256Hash(user.GetPassword())); +} + + +// initialization zone============================================================================== + +bool continuerboucle = false; +bool menu = true, connection = false, inscription = false; +bool note=false, tags=false, para=false, paraCompte=false, theme=false; + +// déclaration d'un user qui sera utiliser pour servir de personne connecté dans l'app +User u = new("", "", ""); +User uvide = new("", "", ""); +uvide.SetIsConnected(false); + +// déclaration d'une note qui sera utiliser pour servir de note selectionnée +Note n = new("","",uvide); + +List researchlist = new(); + +// factorisation +bool continuer() +{ + continuerboucle = false; + while(!continuerboucle) + { + Console.WriteLine("\nContinuer ? (O/n)"); + switch (Console.ReadLine()) + { + case "O": + return true; + case null: + return true; + case "o": + return true; + case "n": + return false; + default: + Console.WriteLine("\nEntrez un choix valide.\n"); + continuerboucle = true; + break; + } + } + return false; +} + +bool choix_note() +{ + Console.WriteLine("\nChoisissez le nom de la note"); + string? wantedModifyNote = Console.ReadLine(); + wantedModifyNote??= ""; + try + { + n = u.GetNoteByName(wantedModifyNote); + }catch (Exception ex) { Console.WriteLine(ex.Message); return false; } + return true; +} + +void displayNote() +{ + foreach (Note note in u.GetNoteList()) + { + Console.WriteLine(note.GetName() + "\n"); + } +} + +void displayTag() +{ + foreach (Tags tag in u.GetTagList()) + { + Console.WriteLine(tag.GetName() + "\n"); + } +} + +void displayTheme() +{ + foreach (Theme theme in db.GetThemeList()) + { + Console.WriteLine(theme.GetName() + "\n"); + } +} + +List? choix_couleur() +{ + List colorList = new(); + Console.WriteLine("Fond : "); + string? wantedNewThemeFond = Console.ReadLine(); + if(wantedNewThemeFond == null){ return null; } + else if(wantedNewThemeFond[0].ToString() != "#"){ + Console.WriteLine("\nLa couleur doit être au format hexadécimal.\n"); + return null; + }else if(wantedNewThemeFond.Length != 7) + { + string toadd=""; + for(int i = 7- wantedNewThemeFond.Length; i!=0; i--){toadd += "0";} + wantedNewThemeFond += toadd; + return null; + } + Console.WriteLine("Texte : "); + string? wantedNewThemeTexte = Console.ReadLine(); + if(wantedNewThemeTexte == null){ return null; } + else if(wantedNewThemeTexte[0].ToString() != "#"){ + Console.WriteLine("\nLa couleur doit être au format hexadécimal.\n"); + return null; + }else if(wantedNewThemeTexte.Length != 7) + { + string toadd=""; + for(int i = 7- wantedNewThemeTexte.Length; i!=0; i--){toadd += "0";} + wantedNewThemeTexte += toadd; + return null; + } + Console.WriteLine("Bouton : "); + string? wantedNewThemeBouton = Console.ReadLine(); + if(wantedNewThemeBouton == null){ return null; } + else if(wantedNewThemeBouton[0].ToString() != "#"){ + Console.WriteLine("\nLa couleur doit être au format hexadécimal.\n"); + return null; + }else if(wantedNewThemeBouton.Length != 7) + { + string toadd=""; + for(int i = 7- wantedNewThemeBouton.Length; i!=0; i--){toadd += "0";} + wantedNewThemeBouton += toadd; + return null; + } + colorList.Add(wantedNewThemeFond); + colorList.Add(wantedNewThemeTexte); + colorList.Add(wantedNewThemeBouton); + return colorList; +} + +static string GetSHA256Hash(string input) +{ + using (SHA256 sha256Hash = SHA256.Create()) + { + byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(input)); + + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < bytes.Length; i++) + { + builder.Append(bytes[i].ToString("x2")); + } + + return builder.ToString(); + } +} + +while (menu) +{ + Console.WriteLine("\n|--------------------------------------|"); + Console.WriteLine("| |"); + Console.WriteLine("| starting menu |"); + Console.WriteLine("| |"); + Console.WriteLine("|--------------------------------------|--------|"); + Console.WriteLine("| |"); + Console.WriteLine("| 1 / - connection - |"); + Console.WriteLine("| 2 / - inscription - |"); + Console.WriteLine("| |"); + Console.WriteLine("|-----------------------------------------------|\n"); + Console.WriteLine("rentrez votre choix."); + switch (Console.ReadLine()) + { + case "1": ///Connexion + connection = true; break; + + case "2":///Creer un compte + inscription = true; break; + default: + Console.WriteLine("\nEntrez un choix valide.\n"); + break; + } + + //connection + while (connection) + { + connection = false; + Console.WriteLine("\nEntrez un nom : "); + string? nom = Console.ReadLine(); + if (nom == null) { continue; } + Console.WriteLine("\nEntrez un password :"); + string? password = Console.ReadLine(); + if (password == null) { continue; } + password = GetSHA256Hash(password); + try + { + u = db.GetUser(nom); + } + catch (AlreadyUsedException ex) + { + Console.WriteLine(ex.Message); + connection = true; + } + if (!connection) + { + if (Database.ComparePassword(u, password)) + { + u.SetIsConnected(true); + Console.WriteLine("\nConnection réussie !\n"); + menu = false; + } + else + { + Console.WriteLine("\nWrong PassWord !\n"); + connection = true; + continuerboucle = true; + u = uvide; + } + } + while (continuerboucle) { connection = continuer(); } + } + + //inscription + while (inscription) + { + Console.WriteLine("\nEntrez un nom :"); + string? nom = Console.ReadLine(); + if (nom == null) { continue; } + Console.WriteLine("\nEntrez un password :"); + string? password = Console.ReadLine(); + if (password == null) { continue; } + try + { + u = db.GetUser(nom); + } + catch (AlreadyUsedException) + { + password = GetSHA256Hash(password); + u = new User(nom, "", password); + db.AddUser(u); + db.GetUser(nom).SetIsConnected(true); + Console.WriteLine("\nConnection réussie !\n"); + menu = false; + break; + } + Console.WriteLine("\nNom d'utilisateur déjà utilisé. \n"); + while (continuerboucle) { inscription = continuer(); } + + } +} +//une fois connecté ou inscription fait +while (u.GetIsConnected()) +{ + Console.WriteLine("\n|--------------------------------------|"); + Console.WriteLine("| |"); + Console.WriteLine("| menu |"); + Console.WriteLine("| |"); + Console.WriteLine("|--------------------------------------|--------|"); + Console.WriteLine("| |"); + Console.WriteLine("| 1/ - rechercher note - |"); + Console.WriteLine("| 2/ - note - |"); + Console.WriteLine("| 3/ - tags - |"); + Console.WriteLine("| 4/ - paramêtres - |"); + Console.WriteLine("| 5/ - se déconnecter - |"); + Console.WriteLine("| |"); + Console.WriteLine("|-----------------------------------------------|\n"); + Console.WriteLine("rentrez votre choix."); + switch (Console.ReadLine()) + { + case "1": + researchlist = u.GetNoteList(); + Console.WriteLine("\nEntrez la note que vous cherchez. "); + string? wantedSearchNote = Console.ReadLine(); + Console.WriteLine("\nChercher par tags ? (o/N) "); + + Console.WriteLine("\nChercher par date ? (o/N) "); + break; + case "2": + note = true; + break; + case "3": + tags = true; + break; + case "4": + para = true; + break; + case "5": + Console.WriteLine("\ndéconnecté! \n"); + u.SetIsConnected(false); + u = uvide; + break; + default: + Console.WriteLine("\nEntrez un choix valide.\n"); + break; + } + + while(note) + { + Console.WriteLine("\n|--------------------------------------|"); + Console.WriteLine("| |"); + Console.WriteLine("| menu - note |"); + Console.WriteLine("| |"); + Console.WriteLine("|--------------------------------------|--------|"); + Console.WriteLine("| |"); + Console.WriteLine("| 1/ - afficher la liste des notes - |"); + Console.WriteLine("| 2/ - afficher une note - |"); + Console.WriteLine("| 3/ - modifier une note - |"); + Console.WriteLine("| 4/ - écrire dans une note - |"); + Console.WriteLine("| 5/ - créer note - |"); + Console.WriteLine("| 6/ - supprimer note - |"); + Console.WriteLine("| 7/ - retour - |"); + Console.WriteLine("| |"); + Console.WriteLine("|-----------------------------------------------|\n"); + Console.WriteLine("note actuelle : " + n.GetName()); + Console.WriteLine("rentrez votre choix."); + switch (Console.ReadLine()) + { + case "1": + displayNote(); + break; + case "2": + if (!choix_note()) { break; } + Console.WriteLine("\n" + n.GetName() + " :"); + Console.WriteLine(n.GetText()); + break; + case "3": + if (!choix_note()) { break;} + Console.WriteLine("\nChoisissez le nouveau nom de la note (entrer - nom par defaut)"); + string? wantedNewNameNote = Console.ReadLine(); + wantedNewNameNote??= ""; + n.SetName(wantedNewNameNote); + break; + case "4": + if (!choix_note()) { break; } + Console.WriteLine(n.GetText()); + Console.WriteLine("\nEntrez le texte à ajouter"); + string? wantedTextNote = Console.ReadLine(); + wantedTextNote??= ""; + n.AddText(wantedTextNote); + break; + case "5": + Console.WriteLine("\nChoisissez le nom de la note (entrer - nom par defaut)"); + string? wantedNameNote = Console.ReadLine(); + wantedNameNote ??= ""; + u.CreateNote(wantedNameNote, ""); + break; + case "6": + Console.WriteLine("\nChoisissez le nom de la note"); + string? wantedDeleteNote = Console.ReadLine(); + wantedDeleteNote ??= ""; + try + { + u.DeleteNote(wantedDeleteNote); + } + catch (Exception ex) { Console.WriteLine(ex.Message); } + break; + case "7": + note = false; + break; + default: + Console.WriteLine("\nEntrez un choix valide.\n"); + break; + } + } + + while (tags) + { + Console.WriteLine("\n|--------------------------------------|"); + Console.WriteLine("| |"); + Console.WriteLine("| menu - tags |"); + Console.WriteLine("| |"); + Console.WriteLine("|--------------------------------------|--------|"); + Console.WriteLine("| |"); + Console.WriteLine("| 1/ - créer tag - |"); + Console.WriteLine("| 2/ - ajouter tag - |"); + Console.WriteLine("| 3/ - supprimer tag - |"); + Console.WriteLine("| 4/ - retour - |"); + Console.WriteLine("| |"); + Console.WriteLine("|-----------------------------------------------|\n"); + Console.WriteLine("rentrez votre choix."); + switch (Console.ReadLine()) + { + case "1": + Console.WriteLine("\nChoisissez le nom du tag."); + string? wantedNameTag = Console.ReadLine(); + wantedNameTag??= "NoName" + u.GetTagList().Count.ToString(); + Console.WriteLine("\nChoisissez la couleur du tag."); + string? wantedColorTag = Console.ReadLine(); + wantedColorTag??= "#000000"; + if (wantedColorTag[0] != '#') { wantedColorTag = "#" + wantedColorTag; } + else if (wantedColorTag.Length < 7) { string toadd=""; for(int i = 7-wantedColorTag.Length; i!=0; i--){toadd += "0";} wantedColorTag += toadd ;} + else if (wantedColorTag.Length > 7) { wantedColorTag = wantedColorTag[..7];} + u.CreateTag(wantedNameTag,wantedColorTag); + break; + case "2": + Note wantedAddNote; + Tags wantedAddTag; + Console.WriteLine("\n Plusieurs tags à ajouter ? (o/N)"); + string? wantedAddMultipleTag = Console.ReadLine(); + wantedAddMultipleTag ??= "N"; + if(wantedAddMultipleTag == "o" || wantedAddMultipleTag == "O"){ + displayNote(); + Console.WriteLine("\nDonnez le nom de la note à laquelle ajouter des tags : "); + string? wantedAddNameNote = Console.ReadLine(); + wantedAddNameNote??= ""; + try{ + wantedAddNote = u.GetNoteByName(wantedAddNameNote); + }catch (Exception ex) { Console.WriteLine(ex.Message); break;} + displayTag(); + Console.WriteLine("\nChoisissez les noms des tags séparés par des espaces."); + string? wantedAddNameTags = Console.ReadLine(); + wantedAddNameTags??= ""; + string[] wantedAddNameTagsList = wantedAddNameTags.Split(' '); + foreach(string wantedAddNameTag in wantedAddNameTagsList) + { + try + { + wantedAddTag = u.GetTagByName(wantedAddNameTag); + }catch (Exception ex) { Console.WriteLine(ex.Message); break;} + try + { + u.AddTagToNoteList(wantedAddNote, wantedAddTag); + }catch (Exception ex) { Console.WriteLine(ex.Message); break;} + } + }else if(wantedAddMultipleTag == "n" || wantedAddMultipleTag == "N"){ + displayNote(); + Console.WriteLine("\nChoisissez le nom de la note."); + string? wantedAddNameNote = Console.ReadLine(); + wantedAddNameNote??= ""; + displayTag(); + Console.WriteLine("\nChoisissez le nom du tag."); + string? wantedAddNameTag = Console.ReadLine(); + wantedAddNameTag??= ""; + try + { + wantedAddNote = u.GetNoteByName(wantedAddNameNote); + wantedAddTag = u.GetTagByName(wantedAddNameTag); + u.AddTagToNoteList(wantedAddNote, wantedAddTag); + }catch (Exception ex) { Console.WriteLine(ex.Message); } + }else{ + Console.WriteLine("\nEntrez un choix valide.\n"); + } + break; + case "3": + displayNote(); + Note wantedRemoveNote; + Tags wantedRemoveTag; + Console.WriteLine("\n Choisissez le nom de la note à laquelle supprimer des tags : "); + string? wantedRemoveNameNote = Console.ReadLine(); + wantedRemoveNameNote??= ""; + try{ + wantedRemoveNote = u.GetNoteByName(wantedRemoveNameNote); + }catch (Exception ex) { Console.WriteLine(ex.Message); break;} + foreach( Tags t in u.GetNoteTaggedList(wantedRemoveNote)) + { + Console.WriteLine(t.GetName() + "\n"); + } + Console.WriteLine("\nChoisissez le nom du tag à supprimer."); + string? wantedRemoveNameTag = Console.ReadLine(); + wantedRemoveNameTag??= ""; + try { + wantedRemoveTag = u.GetTagByName(wantedRemoveNameTag); + }catch (Exception ex) { Console.WriteLine(ex.Message); break;} + try + { + u.RemoveTagFromNoteList(wantedRemoveNote, wantedRemoveTag); + }catch (Exception ex) { Console.WriteLine(ex.Message); } + break; + case "4": + tags = false; + break; + default: + Console.WriteLine("\nEntrez un choix valide.\n"); + break; + } + } + + while(para) + { + Console.WriteLine("\n|--------------------------------------|"); + Console.WriteLine("| |"); + Console.WriteLine("| menu - paramêtre |"); + Console.WriteLine("| |"); + Console.WriteLine("|--------------------------------------|--------|"); + Console.WriteLine("| |"); + Console.WriteLine("| 1/ - modifier compte - |"); + Console.WriteLine("| 2/ - thèmes - |"); + Console.WriteLine("| 3/ - supprimer un compte - |"); + Console.WriteLine("| 4/ - retour - |"); + Console.WriteLine("| |"); + Console.WriteLine("|-----------------------------------------------|\n"); + Console.WriteLine("rentrez votre choix."); + switch (Console.ReadLine()) + { + case "1": + paraCompte = true; + break; + case "2": + theme = true; + break; + case "3": + Console.WriteLine("\nÊtes-vous sûr de vouloir supprimer votre compte ? (o/N)"); + string? wantedDelete = Console.ReadLine(); + wantedDelete??= "N"; + if( wantedDelete == "o" || wantedDelete == "O"){ + db.RemoveUser(u); + Console.WriteLine("\nVotre compte a bien été supprimé.\n"); + para = false; + u = uvide; + break; + }else if( wantedDelete == "n" || wantedDelete == "N"){ + break; + } + break; + case "4": + para = false; + break; + default: + Console.WriteLine("\nEntrez un choix valide.\n"); + break; + } + while (paraCompte) + { + Console.WriteLine("\n|--------------------------------------|"); + Console.WriteLine("| |"); + Console.WriteLine("| paramêtre - compte |"); + Console.WriteLine("| |"); + Console.WriteLine("|--------------------------------------|--------|"); + Console.WriteLine("| |"); + Console.WriteLine("| 1/ - modifier pseudo - |"); + Console.WriteLine("| 2/ - modifier mot de passe - |"); + Console.WriteLine("| 3/ - retour - |"); + Console.WriteLine("| |"); + Console.WriteLine("|-----------------------------------------------|\n"); + Console.WriteLine("rentrez votre choix."); + switch (Console.ReadLine()) + { + case "1": + Console.WriteLine("\nChoisissez le nouveau pseudo."); + string? wantedNewPseudo = Console.ReadLine(); + if(wantedNewPseudo == null){break;} + u.SetUsername(wantedNewPseudo); + break; + case "2": + Console.WriteLine("\nChoisissez le nouveau mot de passe."); + string? wantedNewPassword = Console.ReadLine(); + if(wantedNewPassword == null){break;} + else if(wantedNewPassword.Length < 8){ + Console.WriteLine("\nLe mot de passe doit contenir au moins 8 caractères.\n"); + break; + } + wantedNewPassword = GetSHA256Hash(wantedNewPassword); + if(wantedNewPassword == u.GetPassword()){ + Console.WriteLine("\nLe nouveau mot de passe doit être différent de l'ancien.\n"); + break; + } + u.SetPassword(wantedNewPassword); + break; + case "3": + paraCompte = false; + break; + default: + Console.WriteLine("\nEntrez un choix valide.\n"); + break; + } + } + while (theme) + { + Console.WriteLine("\n|--------------------------------------|"); + Console.WriteLine("| |"); + Console.WriteLine("| paramêtre - thèmes |"); + Console.WriteLine("| |"); + Console.WriteLine("|--------------------------------------|--------|"); + Console.WriteLine("| |"); + Console.WriteLine("| 1/ - choisir un thème - |"); + Console.WriteLine("| 2/ - créer un thème - |"); + Console.WriteLine("| 3/ - supprimer un thème - |"); + Console.WriteLine("| 4/ - modifier un thème - |"); + Console.WriteLine("| 5/ - retour - |"); + Console.WriteLine("| |"); + Console.WriteLine("|-----------------------------------------------|\n"); + Console.WriteLine("rentrez votre choix."); + switch (Console.ReadLine()) + { + case "1": + Theme twantedTheme; + displayTheme(); + Console.WriteLine("\nChoisissez le nom du thème."); + string? wantedTheme = Console.ReadLine(); + if(wantedTheme==null){break;} + try + { + twantedTheme = db.GetTheme(wantedTheme); + }catch (Exception ex) { Console.WriteLine(ex.Message); break;} + u.SetTheme(twantedTheme); + break; + case "2": + List? themeList; + Console.WriteLine("\nChoisissez le nom du thème."); + string? wantedNewThemeName = Console.ReadLine(); + if(wantedNewThemeName==null){break;} + Console.WriteLine("\nChoisissez la couleur du thème."); + themeList = choix_couleur(); + if(themeList == null) { break;} + db.AddTheme(new Theme(wantedNewThemeName, themeList)); + break; + case "3": + Theme t; + Console.WriteLine("\nChoisissez le nom du thème à supprimer."); + string? wantedRemoveTheme = Console.ReadLine(); + if(wantedRemoveTheme == null) {break;} + try{ + t = db.GetTheme(wantedRemoveTheme); + }catch (Exception ex) { Console.WriteLine(ex.Message); break;} + try{ + db.RemoveTheme(t); + }catch (Exception ex) { Console.WriteLine(ex.Message); break;} + break; + case "4": + displayTheme(); + Theme themeToModify; + Console.WriteLine("\nChoisissez le nom du thème à modifier."); + string? wantedModifyTheme = Console.ReadLine(); + if(wantedModifyTheme == null){break;} + try{ + themeToModify = db.GetTheme(wantedModifyTheme); + }catch (Exception ex) { Console.WriteLine(ex.Message); break;} + Console.WriteLine("\nChoisissez le nouveau nom du thème."); + string? wantedNewNameTheme = Console.ReadLine(); + if(wantedNewNameTheme == null) {break;} + try{ + db.ModifyThemeName(themeToModify, wantedNewNameTheme); + }catch (Exception ex) { Console.WriteLine(ex.Message); break;} + Console.WriteLine("\nChoisissez les nouvelles couleurs du thème."); + List? couleurlist = choix_couleur(); + if(couleurlist == null) { break;} + db.ModifyThemeColorList(themeToModify, couleurlist); + break; + case "5": + theme = false; + break; + default: + Console.WriteLine("\nEntrez un choix valide.\n"); + break; + } + } + } +} \ No newline at end of file diff --git a/notus/Notus_Persistence/Notus_Persistance.csproj b/notus/Notus_Persistence/Notus_Persistance.csproj new file mode 100644 index 0000000..38454ea --- /dev/null +++ b/notus/Notus_Persistence/Notus_Persistance.csproj @@ -0,0 +1,13 @@ + + + + net7.0 + enable + enable + + + + + + + diff --git a/notus/Notus_Persistence/Stub.cs b/notus/Notus_Persistence/Stub.cs new file mode 100644 index 0000000..d89c553 --- /dev/null +++ b/notus/Notus_Persistence/Stub.cs @@ -0,0 +1,68 @@ +using Biblioteque_de_Class; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization.Json; +using System.Text; +using System.Threading.Tasks; + +namespace Notus_Persistance +{ + public class Stub : IManager + { + public void SaveDatabaseData(Database database) + { + throw new NotImplementedException(); + } + + //Loaders + Database IManager.LoadDatabaseData() + { + Database database = new Database(); + Note nselect; + User uselect; + + // add some users + database.AddUser(new User("Nicolas", "leHeros@gmail.com", "Feur")); + database.AddUser(new User("Benjamin", "labsent@gmail.com", "Moto2005")); + database.AddUser(new User("Liam", "liammonchanin@gmail.com", "Baguette")); + database.AddUser(new User("Brigitte", "Macroutte@gmail.com", "49Trois")); + + // add some notes and tags to go faster + foreach(User user in database.GetUserList().Where(x => x.GetUsername().Contains("m"))) + { + user.CreateNote("Note 1", ""); + user.CreateNote("Note 2", ""); + user.CreateNote("Note 3", ""); + user.CreateTag("Tag 1","#FA0034"); + user.CreateTag("Tag 2", "#2500A4"); + } + + // add note to user for sharing note test mixed with tag + uselect = (User)database.GetUserList().Where(x => x.GetUsername() == "Nicolas"); + uselect.CreateNote("Note 4", "Logo_1"); + uselect.CreateTag("Tag 3", "#00FF00"); + nselect = (Note)uselect.GetNoteList().Where(x => x.GetName() == "Note 4"); + uselect.AddTagToNoteList(nselect, (Tags)uselect.GetTagList().Where(x => x.GetName() == "Tag 3")); + nselect.AddCollaborator(uselect,(User)database.GetUserList().Where(x => x.GetUsername() == "Benjamin")); + uselect = (User)database.GetUserList().Where(x => x.GetUsername() == "Benjamin"); + uselect.CreateTag("Tag 4", "#FF0000"); + + // add some default logos and themes + database.GetDefaultLogoList().Add(new Logo("Logo_1", "logo")); + database.GetDefaultLogoList().Add(new Logo("Logo_2", "logo")); + database.GetDefaultLogoList().Add(new Logo("Logo_3", "logo")); + List colorListHexaCode = new("FF0000,00FF00,0000FF".Split(',')); + database.AddTheme(new Theme("Theme_1", colorListHexaCode)); + colorListHexaCode = new("FF00FF,00FFFF,FFFF00".Split(',')); + database.AddTheme(new Theme("Theme_2", colorListHexaCode)); + colorListHexaCode = new("000000,FFFFFF,000000".Split(',')); + database.AddTheme(new Theme("Theme_3", colorListHexaCode)); + + + return database; + } + + } +} + diff --git a/notus/Notus_Persistence/ToJSON.cs b/notus/Notus_Persistence/ToJSON.cs new file mode 100644 index 0000000..5cb4a5a --- /dev/null +++ b/notus/Notus_Persistence/ToJSON.cs @@ -0,0 +1,69 @@ +using Biblioteque_de_Class; +using System.Runtime.Serialization; +using System.Runtime.Serialization.Json; +using System.Xml; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.IO; +using System.Text.Json; + +namespace Notus_Persistance +{ + public class ToJSON : IManager + { + private const string DatabaseDataFilePath = "data.json"; + private const string UserDataFilePath = "userdata.json"; + private const string NoteDataFilePath = "notedata.json"; + private const string ThemeDataFilePath = "themedata.json"; + private const string LogoDataFilePath = "logodata.json"; + private const string TagsDataFilePath = "tagsdata.json"; + private const string NoteImageDataFilePath = "noteImagedata.json"; + private static DataContractJsonSerializer DatabasejsonSerializer = new DataContractJsonSerializer(typeof(Database)); + private static DataContractJsonSerializer UserjsonSerializer = new DataContractJsonSerializer(typeof(User)); + private static DataContractJsonSerializer NotejsonSerializer = new DataContractJsonSerializer(typeof(Note)); + private static DataContractJsonSerializer ThemejsonSerializer = new DataContractJsonSerializer(typeof(Theme)); + private static DataContractJsonSerializer LogojsonSerializer = new DataContractJsonSerializer(typeof(Logo)); + private static DataContractJsonSerializer TagsjsonSerializer = new DataContractJsonSerializer(typeof(Tags)); + private static DataContractJsonSerializer NoteImagejsonSerializer = new DataContractJsonSerializer(typeof(NoteImage)); + public void SaveDatabaseData(Database database) + { + using (FileStream fileStream = File.Create(DatabaseDataFilePath)) + { + using (var writer = JsonReaderWriterFactory.CreateJsonWriter( + fileStream, + System.Text.Encoding.UTF8, + false, + true))//<- this boolean says that we sant indentation + { + DatabasejsonSerializer.WriteObject(writer, database); + } + } + } + + public Database LoadDatabaseData() + { + if (File.Exists(DatabaseDataFilePath)) + { + using (FileStream fileStream = File.OpenRead(DatabaseDataFilePath)) + { + Database? database = (Database?)DatabasejsonSerializer.ReadObject(fileStream); + if (database == null) + { + throw new FileException("Failed to load database. The loaded object is null."); + } + else + { + return database; + } + } + } + else + { + throw new FileException("No data file found."); + } + } + } +} diff --git a/notus/Notus_Persistence/ToXML.cs b/notus/Notus_Persistence/ToXML.cs new file mode 100644 index 0000000..fd45cc6 --- /dev/null +++ b/notus/Notus_Persistence/ToXML.cs @@ -0,0 +1,28 @@ +using Biblioteque_de_Class; +using System.Runtime.Serialization; +using System.Runtime.Serialization.Json; +using System.Xml; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Notus_Persistance +{ + public class ToXML : IManager + { + private const string DataFilePath = "data.xml"; + private const string XmlDataFilePath = "userdata.xml"; + + public void SaveDatabaseData(Database database) + { + throw new NotImplementedException(); + } + + public Database LoadDatabaseData() + { + throw new NotImplementedException(); + } + } +} diff --git a/notus/Notus_without_console_and_maui.sln b/notus/Notus_without_console_and_maui.sln new file mode 100644 index 0000000..222b9cc --- /dev/null +++ b/notus/Notus_without_console_and_maui.sln @@ -0,0 +1,36 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31611.283 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Biblioteque_de_Class", "Biblioteque_de_Class\Biblioteque_de_Class.csproj", "{92DD50C5-EEAD-44ED-AEFF-E21935725477}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Notus_Persistance", "Notus_Persistence\Notus_Persistance.csproj", "{184478A9-E14F-42E0-B963-B3A4474C9C1C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Notus_UnitTest_Database", "Tests\Notus_UnitTest_Database\Notus_UnitTest_Database.csproj", "{EE443C17-B31D-4AD0-9141-920876E7DF79}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {92DD50C5-EEAD-44ED-AEFF-E21935725477}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {92DD50C5-EEAD-44ED-AEFF-E21935725477}.Debug|Any CPU.Build.0 = Debug|Any CPU + {92DD50C5-EEAD-44ED-AEFF-E21935725477}.Release|Any CPU.ActiveCfg = Release|Any CPU + {92DD50C5-EEAD-44ED-AEFF-E21935725477}.Release|Any CPU.Build.0 = Release|Any CPU + {184478A9-E14F-42E0-B963-B3A4474C9C1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {184478A9-E14F-42E0-B963-B3A4474C9C1C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {184478A9-E14F-42E0-B963-B3A4474C9C1C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {184478A9-E14F-42E0-B963-B3A4474C9C1C}.Release|Any CPU.Build.0 = Release|Any CPU + {EE443C17-B31D-4AD0-9141-920876E7DF79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EE443C17-B31D-4AD0-9141-920876E7DF79}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EE443C17-B31D-4AD0-9141-920876E7DF79}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EE443C17-B31D-4AD0-9141-920876E7DF79}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {61F7FB11-1E47-470C-91E2-47F8143E1572} + EndGlobalSection +EndGlobal diff --git a/notus/Tests/Notus_UnitTest_Database/AddThemeTests.cs b/notus/Tests/Notus_UnitTest_Database/AddThemeTests.cs new file mode 100644 index 0000000..6e0990f --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Database/AddThemeTests.cs @@ -0,0 +1,39 @@ +using Biblioteque_de_Class; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; + +namespace Notus_UnitTest_Database +{ + public class AddThemeTests + { + private Database database; + + [SetUp] + public void Setup() + { + database = new Database(); + } + + [Test] + public void AddTheme_NewTheme_ThemeAddedToList() + { + List listcolor = new List() { "Blue", "Dark", "Grey" }; + Theme theme = new Theme("ocean", listcolor); + database.AddTheme(theme); + CollectionAssert.Contains(database.GetThemeList(), theme); + } + + [Test] + public void AddTheme_ExistingTheme_ThrowsException() + { + List listcolor = new(); + Theme theme = new Theme("ocean", listcolor); + database.AddTheme(theme); + Assert.Throws(() => database.AddTheme(theme), "Theme already used."); + } + } +} diff --git a/notus/Tests/Notus_UnitTest_Database/AddUserTests.cs b/notus/Tests/Notus_UnitTest_Database/AddUserTests.cs new file mode 100644 index 0000000..26312b5 --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Database/AddUserTests.cs @@ -0,0 +1,51 @@ +using Biblioteque_de_Class; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Notus_UnitTest_Database +{ + public class AddUserTests + { + private Database database; + + [SetUp] + public void Setup() + { + database = new Database(); + } + + [Test] + public void AddUser_ValidUser_UserAddedToList() + { + User user = new User("John", "rien", "choco") ; + user.SetEmail("john@example.com"); + database.AddUser(user); + CollectionAssert.Contains(database.GetUserList(), user); + } + + [Test] + public void AddUser_DuplicateUsername_ThrowsException() + { + User existingUser = new User("John1", "rien", "choco"); + existingUser.SetEmail("john1@example.com"); + database.GetUserList().Add(existingUser); + User newUser = new User("John1", "rien", "choco"); + newUser.SetEmail("Jane@example.com"); + Assert.Throws(() => database.AddUser(newUser), "Username already used."); + } + + [Test] + public void AddUser_DuplicateEmail_ThrowsException() + { + User existingUser = new User("John2", "rien", "choco"); + existingUser.SetEmail("john2@example.com"); + database.GetUserList().Add(existingUser); + User newUser = new User("Jane", "rien", "choco"); + newUser.SetEmail("john2@example.com"); + Assert.Throws(() => database.AddUser(newUser), "Email already used."); + } + } +} diff --git a/notus/Tests/Notus_UnitTest_Database/ComparePasswordTests.cs b/notus/Tests/Notus_UnitTest_Database/ComparePasswordTests.cs new file mode 100644 index 0000000..a017f85 --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Database/ComparePasswordTests.cs @@ -0,0 +1,42 @@ +using Biblioteque_de_Class; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Notus_UnitTest_Database +{ + [TestFixture] + public class ComparePasswordTests + { + private Database database; + + [SetUp] + public void Setup() + { + database = new Database(); + User user = new User("John","rien","choco"); + user.SetPassword("password123"); + database.GetUserList().Add(user); + } + + [Test] + public void ComparePassword_CorrectPassword_ReturnsTrue() + { + User user = database.GetUserList()[0]; + string password = "password123"; + var result = Database.ComparePassword(user, password); + Assert.That(result, Is.True); + } + + [Test] + public void ComparePassword_IncorrectPassword_ReturnsFalse() + { + User user = database.GetUserList()[0]; + string password = "incorrectPassword"; + var result = Database.ComparePassword(user, password); + Assert.That(result, Is.False); + } + } +} diff --git a/notus/Tests/Notus_UnitTest_Database/FindMailTests.cs b/notus/Tests/Notus_UnitTest_Database/FindMailTests.cs new file mode 100644 index 0000000..ba18f8b --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Database/FindMailTests.cs @@ -0,0 +1,39 @@ +using Biblioteque_de_Class; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Notus_UnitTest_Database +{ + public class FindMailTests + { + private Database database; + + [SetUp] + public void Setup() + { + database = new Database(); + User user = new User("John","rien","choco"); + user.SetEmail("john@example.com"); + database.GetUserList().Add(user); + } + + [Test] + public void FindEmail_ExistingEmail_ReturnsTrue() + { + string email = "john@example.com"; + bool result = database.FindEmail(email); + Assert.IsTrue(result); + } + + [Test] + public void FindEmail_NonExistingEmail_ReturnsFalse() + { + string email = "jane@example.com"; + bool result = database.FindEmail(email); + Assert.IsFalse(result); + } + } +} diff --git a/notus/Tests/Notus_UnitTest_Database/GetLogoLinkTests.cs b/notus/Tests/Notus_UnitTest_Database/GetLogoLinkTests.cs new file mode 100644 index 0000000..158b138 --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Database/GetLogoLinkTests.cs @@ -0,0 +1,32 @@ +using Biblioteque_de_Class; + +namespace Notus_UnitTest_Database +{ + [TestFixture] + public class GetLogoLinksTests + { + private Database database; + + [SetUp] + public void Setup() + { + database = new Database(); + database.GetDefaultLogoList().Add(new Logo("Logo1", "link1")); + database.GetDefaultLogoList().Add(new Logo("Logo2", "link2")); + database.GetDefaultLogoList().Add(new Logo("Logo3", "link3")); + } + + [Test] + public void GetLogoLink_LogoExists_ReturnsLogoLink() + { + Assert.That(database.GetLogoLink("Logo2"), Is.EqualTo("link2")); + } + + [Test] + public void GetLogoLink_LogoDoesNotExist_ThrowsException() + { + string logoName = "Logo4"; + Assert.Throws(() => database.GetLogoLink(logoName)); + } + } +} \ No newline at end of file diff --git a/notus/Tests/Notus_UnitTest_Database/GetThemeTests.cs b/notus/Tests/Notus_UnitTest_Database/GetThemeTests.cs new file mode 100644 index 0000000..5f857f9 --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Database/GetThemeTests.cs @@ -0,0 +1,36 @@ +using Biblioteque_de_Class; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Notus_UnitTest_Database +{ + public class GetThemeTests + { + private Database database; + + [SetUp] + public void Setup() + { + database = new Database(); + } + + [Test] + public void GetTheme_ExistingTheme_ReturnsTheme() + { + List listcolor = new List() { "Blue", "Dark", "Grey" }; + Theme theme = new Theme("ocean", listcolor); + database.GetThemeList().Add(theme); + Theme retrievedTheme = database.GetTheme("ocean"); + Assert.That(retrievedTheme, Is.EqualTo(theme)); + } + + [Test] + public void GetTheme_NonExistingTheme_ThrowsException() + { + Assert.Throws(() => database.GetTheme("NonExistingTheme"), "No theme found with this name."); + } + } +} diff --git a/notus/Tests/Notus_UnitTest_Database/GetUserTests.cs b/notus/Tests/Notus_UnitTest_Database/GetUserTests.cs new file mode 100644 index 0000000..cb17df4 --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Database/GetUserTests.cs @@ -0,0 +1,36 @@ +using Biblioteque_de_Class; + +namespace Notus_UnitTest_Database +{ + + [TestFixture] + public class GetUserTests + { + private Database database; + + [SetUp] + public void Setup() + { + database = new Database(); + database.GetUserList().Add(new User("John","rien","choco")); + database.GetUserList().Add(new User("Alice", "rien", "choco")); + database.GetUserList().Add(new User("Bob", "rien", "choco")); + } + + [Test] + public void GetUser_UserExists_ReturnsUser() + { + string userName = "Alice"; + User user = database.GetUser(userName); + Assert.IsNotNull(user); + Assert.That(user.GetUsername(), Is.EqualTo(userName)); + } + + [Test] + public void GetUser_UserDoesNotExist_ThrowsException() + { + string userName = "Eve"; + Assert.Throws(() => database.GetUser(userName)); + } + } +} diff --git a/notus/Tests/Notus_UnitTest_Database/ModifyThemeColorListTests.cs b/notus/Tests/Notus_UnitTest_Database/ModifyThemeColorListTests.cs new file mode 100644 index 0000000..0593201 --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Database/ModifyThemeColorListTests.cs @@ -0,0 +1,33 @@ +using Biblioteque_de_Class; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Notus_UnitTest_Database +{ + public class ModifyThemeColorListTests + { + private Database database; + + [SetUp] + public void Setup() + { + database = new Database(); + } + + [Test] + public void ModifyThemeColorList_ExistingTheme_ModifiesColors() + { + List listcolor = new List() { "Blue", "Dark", "Grey" }; + Theme theme = new Theme("ocean", listcolor); + database.GetThemeList().Add(theme); + List newColorList = new List { "Red", "Green", "Blue" }; + database.ModifyThemeColorList(theme, newColorList); + Assert.That(theme.GetColor(0), Is.EqualTo(newColorList[0])); + Assert.That(theme.GetColor(1), Is.EqualTo(newColorList[1])); + Assert.That(theme.GetColor(2), Is.EqualTo(newColorList[2])); + } + } +} diff --git a/notus/Tests/Notus_UnitTest_Database/ModifyThemeNameTests.cs b/notus/Tests/Notus_UnitTest_Database/ModifyThemeNameTests.cs new file mode 100644 index 0000000..d22f5ac --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Database/ModifyThemeNameTests.cs @@ -0,0 +1,40 @@ +using Biblioteque_de_Class; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Notus_UnitTest_Database +{ + public class ModifyThemeNameTests + { + private Database database; + + [SetUp] + public void Setup() + { + database = new Database(); + } + + [Test] + public void ModifyThemeName_ExistingTheme_ModifiesName() + { + List listcolor = new List() { "Blue", "Dark", "Grey" }; + Theme theme = new Theme("ocean", listcolor); + database.GetThemeList().Add(theme); + string newName = "Light"; + database.ModifyThemeName(theme, newName); + Assert.That(theme.GetName(), Is.EqualTo(newName)); + } + + [Test] + public void ModifyThemeName_NonExistingTheme_ThrowsException() + { + List listcolor = new List() { "Blue", "Dark", "Grey" }; + Theme theme = new Theme("ocean", listcolor); + string newName = "Light"; + Assert.Throws(() => database.ModifyThemeName(theme, newName), "Theme not found."); + } + } +} diff --git a/notus/Tests/Notus_UnitTest_Database/Notus_UnitTest_Database.csproj b/notus/Tests/Notus_UnitTest_Database/Notus_UnitTest_Database.csproj new file mode 100644 index 0000000..3f9f74f --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Database/Notus_UnitTest_Database.csproj @@ -0,0 +1,24 @@ + + + + net7.0 + enable + enable + + false + true + + + + + + + + + + + + + + + diff --git a/notus/Tests/Notus_UnitTest_Database/RemoveThemeTests.cs b/notus/Tests/Notus_UnitTest_Database/RemoveThemeTests.cs new file mode 100644 index 0000000..ef16204 --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Database/RemoveThemeTests.cs @@ -0,0 +1,38 @@ +using Biblioteque_de_Class; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Notus_UnitTest_Database +{ + public class RemoveThemeTests + { + private Database database; + + [SetUp] + public void Setup() + { + database = new Database(); + } + + [Test] + public void RemoveTheme_NewTheme_ThemeAddedToList() + { + List listcolor = new List() { "Blue", "Dark", "Grey" }; + Theme theme = new Theme("ocean", listcolor); + database.AddTheme(theme); + database.RemoveTheme(theme); + CollectionAssert.DoesNotContain(database.GetThemeList(), theme); + } + + [Test] + public void RemoveTheme_ExistingTheme_ThrowsException() + { + List listcolor = new(); + Theme theme = new Theme("ocean", listcolor); + Assert.Throws(() => database.RemoveTheme(theme), "Theme already used."); + } + } +} diff --git a/notus/Tests/Notus_UnitTest_Database/RemoveUserTests.cs b/notus/Tests/Notus_UnitTest_Database/RemoveUserTests.cs new file mode 100644 index 0000000..4a731c9 --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Database/RemoveUserTests.cs @@ -0,0 +1,38 @@ +using Biblioteque_de_Class; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Notus_UnitTest_Database +{ + public class RemoveUserTests + { + private Database database; + + [SetUp] + public void Setup() + { + database = new Database(); + } + + [Test] + public void RemoveUser_ExistingUser_UserRemovedFromList() + { + User user = new User("John","rien","choco"); + user.SetEmail("john@example.com"); + database.GetUserList().Add(user); + database.RemoveUser(user); + CollectionAssert.DoesNotContain(database.GetUserList(), user); + } + + [Test] + public void RemoveUser_NonExistingUser_ThrowsException() + { + User user = new User("John", "rien", "choco"); + user.SetEmail("john@example.com"); + Assert.Throws(() => database.RemoveUser(user), "User not found."); + } + } +} diff --git a/notus/Tests/Notus_UnitTest_Database/SearchUserTests.cs b/notus/Tests/Notus_UnitTest_Database/SearchUserTests.cs new file mode 100644 index 0000000..3c25715 --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Database/SearchUserTests.cs @@ -0,0 +1,54 @@ +using Biblioteque_de_Class; + +namespace Notus_UnitTest_Database +{ + [TestFixture] + public class SearchUserTests + { + private Database database; + + [SetUp] + public void Setup() + { + database = new Database(); + database.GetUserList().Add(new User("John", "john@example.com", "choco")); + database.GetUserList().Add(new User("Jane", "jane@example.com", "choco")); + database.GetUserList().Add(new User("Alice", "alice@example.com", "choco")); + } + + [Test] + public void SearchUser_UserExists_ReturnsMatchingUsers() + { + string searchName = "Jo"; + List searchedUsers = database.SearchUser(searchName); + Assert.That(searchedUsers.Count, Is.EqualTo(1)); + Assert.That(searchedUsers[0].GetUsername(), Is.EqualTo("John")); + } + + [Test] + public void SearchUser_UserDoesNotExist_ReturnsEmptyList() + { + string searchName = "Bob"; + List searchedUsers = database.SearchUser(searchName); + Assert.IsEmpty(searchedUsers); + } + + [Test] + public void SearchUser_CaseInsensitiveSearch_ReturnsMatchingUsers() + { + string searchName = "ALICE"; + List searchedUsers = database.SearchUser(searchName); + Assert.That(searchedUsers.Count, Is.EqualTo(1)); + Assert.That(searchedUsers[0].GetUsername(), Is.EqualTo("Alice")); + } + + [Test] + public void SearchUser_PartialMatch_ReturnsMatchingUsers() + { + string searchName = "ane"; + List searchedUsers = database.SearchUser(searchName); + Assert.That(searchedUsers.Count, Is.EqualTo(1)); + Assert.That(searchedUsers[0].GetUsername(), Is.EqualTo("Jane")); + } + } +} \ No newline at end of file diff --git a/notus/Tests/Notus_UnitTest_Database/Usings.cs b/notus/Tests/Notus_UnitTest_Database/Usings.cs new file mode 100644 index 0000000..cefced4 --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Database/Usings.cs @@ -0,0 +1 @@ +global using NUnit.Framework; \ No newline at end of file diff --git a/notus/Tests/Notus_UnitTest_Note/AddCollaboratorTests.cs b/notus/Tests/Notus_UnitTest_Note/AddCollaboratorTests.cs new file mode 100644 index 0000000..0116c1d --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Note/AddCollaboratorTests.cs @@ -0,0 +1,28 @@ +using Biblioteque_de_Class; + +namespace Notus_UnitTest_Note +{ + [TestFixture] + public class AddCollaboratorTests + { + [Test] + public void AddCollaborator_WhenUserIsOwner_CollaboratorAdded() + { + User owner = new User("Owner", "owner@example.com", "password"); + User collaborator = new User("Collaborator1", "collaborator1@example.com", "password"); + Note note = new Note("Test Note", "logo.png", owner); + note.AddCollaborator(owner, collaborator); + Assert.Contains(collaborator, note.GetCollaborators()); + } + + [Test] + public void AddCollaborator_WhenUserIsNotOwner_ThrowsException() + { + User owner = new User("Owner", "owner@example.com", "password"); + User collaborator = new User("Collaborator1", "collaborator1@example.com", "password"); + User user = new User("User1", "user1@example.com", "password"); + Note note = new Note("Test Note", "logo.png", owner); + Assert.Throws(() => note.AddCollaborator(user, collaborator)); + } + } +} diff --git a/notus/Tests/Notus_UnitTest_Note/AddEditorTests.cs b/notus/Tests/Notus_UnitTest_Note/AddEditorTests.cs new file mode 100644 index 0000000..d6e420a --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Note/AddEditorTests.cs @@ -0,0 +1,29 @@ +using Biblioteque_de_Class; + +namespace Notus_UnitTest_Note +{ + [TestFixture] + public class AddEditorTests + { + [Test] + public void AddEditor_WhenUserIsOwner_EditorAdded() + { + User owner = new User("Owner", "owner@example.com", "password"); + User editor = new User("Editor1", "editor1@example.com", "password"); + Note note = new Note("Test Note", "logo.png", owner); + note.AddEditor(owner, editor); + Assert.IsTrue(note.GetEditors().Contains(editor)); + } + + [Test] + public void AddEditor_WhenUserIsNotOwner_ThrowsException() + { + User owner = new User("Owner", "owner@example.com", "password"); + User editor = new User("Editor1", "editor1@example.com", "password"); + User user = new User("User1", "user1@example.com", "password"); + Note note = new Note("Test Note", "logo.png", owner); + Assert.Throws(() => note.AddEditor(user, editor)); + } + + } +} diff --git a/notus/Tests/Notus_UnitTest_Note/AddImageTests.cs b/notus/Tests/Notus_UnitTest_Note/AddImageTests.cs new file mode 100644 index 0000000..746882e --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Note/AddImageTests.cs @@ -0,0 +1,23 @@ +using Biblioteque_de_Class; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Notus_UnitTest_Note +{ + public class AddImageTests + { + [Test] + public void AddImage_WhenImageLinkIsValid_ImageAddedToList() + { + User owner = new User("Owner", "owner@example.com", "password"); + Note note = new Note("Test Note", "logo.png", owner); + string imageLink = "image.png"; + string position = "top"; + note.AddImage(imageLink, position); + Assert.That(note.GetImageList().Count, Is.EqualTo(1)); + } + } +} diff --git a/notus/Tests/Notus_UnitTest_Note/Notus_UnitTest_Note.csproj b/notus/Tests/Notus_UnitTest_Note/Notus_UnitTest_Note.csproj new file mode 100644 index 0000000..3f9f74f --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Note/Notus_UnitTest_Note.csproj @@ -0,0 +1,24 @@ + + + + net7.0 + enable + enable + + false + true + + + + + + + + + + + + + + + diff --git a/notus/Tests/Notus_UnitTest_Note/RemoveCollaboratorTests.cs b/notus/Tests/Notus_UnitTest_Note/RemoveCollaboratorTests.cs new file mode 100644 index 0000000..daa888f --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Note/RemoveCollaboratorTests.cs @@ -0,0 +1,36 @@ +using Biblioteque_de_Class; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Notus_UnitTest_Note +{ + [TestFixture] + public class RemoveCollaboratorTests + { + [Test] + public void RemoveCollaborator_WhenUserIsOwner_CollaboratorRemoved() + { + User owner = new User("Owner", "owner@example.com", "password"); + User collaborator = new User("Collaborator1", "collaborator1@example.com", "password"); + Note note = new Note("Test Note", "logo.png", owner); + note.AddCollaborator(owner, collaborator); + note.RemoveCollaborator(owner, collaborator); + Assert.IsFalse(note.GetCollaborators().Contains(collaborator)); + } + + [Test] + public void RemoveCollaborator_WhenUserIsNotOwner_ThrowsException() + { + User owner = new User("Owner", "owner@example.com", "password"); + User collaborator = new User("Collaborator1", "collaborator1@example.com", "password"); + User user = new User("User1", "user1@example.com", "password"); + Note note = new Note("Test Note", "logo.png", owner); + note.AddCollaborator(owner, collaborator); + Assert.Throws(() => note.RemoveCollaborator(user, collaborator)); + } + + } +} diff --git a/notus/Tests/Notus_UnitTest_Note/RemoveEditorTests.cs b/notus/Tests/Notus_UnitTest_Note/RemoveEditorTests.cs new file mode 100644 index 0000000..90b1251 --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Note/RemoveEditorTests.cs @@ -0,0 +1,36 @@ +using Biblioteque_de_Class; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Notus_UnitTest_Note +{ + [TestFixture] + public class RemoveEditorTests + { + [Test] + public void RemoveEditor_WhenUserIsOwner_EditorRemoved() + { + User owner = new User("Owner", "owner@example.com", "password"); + User editor = new User("Editor1", "editor1@example.com", "password"); + Note note = new Note("Test Note", "logo.png", owner); + note.AddEditor(owner, editor); + note.RemoveEditor(owner, editor); + Assert.IsFalse(note.GetEditors().Contains(editor)); + } + + [Test] + public void RemoveEditor_WhenUserIsNotOwner_ThrowsException() + { + User owner = new User("Owner", "owner@example.com", "password"); + User editor = new User("Editor1", "editor1@example.com", "password"); + User user = new User("User1", "user1@example.com", "password"); + Note note = new Note("Test Note", "logo.png", owner); + note.AddEditor(owner, editor); + Assert.Throws(() => note.RemoveEditor(user, editor)); + } + + } +} diff --git a/notus/Tests/Notus_UnitTest_Note/RemoveImageTests.cs b/notus/Tests/Notus_UnitTest_Note/RemoveImageTests.cs new file mode 100644 index 0000000..f4143d1 --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Note/RemoveImageTests.cs @@ -0,0 +1,31 @@ +using Biblioteque_de_Class; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Notus_UnitTest_Note +{ + [TestFixture] + public class RemoveImageTests + { + [Test] + public void RemoveImage_WhenImageExists_ImageRemovedFromList() + { + User owner = new User("Owner", "owner@example.com", "password"); + Note note = new Note("Test Note", "logo.png", owner); + note.AddImage("image.png", "top"); + note.RemoveImage(1); + Assert.That(note.GetImageList().Count, Is.EqualTo(0)); + } + + [Test] + public void RemoveImage_WhenImageDoesNotExist_ExceptionThrown() + { + User owner = new User("Owner", "owner@example.com", "password"); + Note note = new Note("Test Note", "logo.png", owner); + Assert.Throws(() => note.RemoveImage(1)); + } + } +} diff --git a/notus/Tests/Notus_UnitTest_Note/SetTests.cs b/notus/Tests/Notus_UnitTest_Note/SetTests.cs new file mode 100644 index 0000000..762d85d --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Note/SetTests.cs @@ -0,0 +1,80 @@ +using Biblioteque_de_Class; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Notus_UnitTest_Note +{ + [TestFixture] + public class SetTests + { + private User owner; + private Note note; + + [SetUp] + public void Setup() + { + owner = new User("John","rien","choco"); + note = new Note("note","logo.png",owner); + } + + [Test] + public void GetName_ShouldReturnName() + { + string actualName = note.GetName(); + Assert.That(actualName, Is.EqualTo("note")); + } + + [Test] + public void GetLogoPath_ShouldReturnLogoPath() + { + string actualLogoPath = note.GetLogoPath(); + Assert.That(actualLogoPath, Is.EqualTo("logo.png")); + } + + [Test] + public void GetCreationDate_ShouldReturnCreationDate() + { + DateOnly actualCreationDate = note.GetCreationDate(); + Assert.That(actualCreationDate, Is.EqualTo(DateOnly.FromDateTime(DateTime.Now))); + } + + [Test] + public void GetModificationDate_ShouldReturnModificationDate() + { + DateOnly actualModificationDate = note.GetModificationDate(); + Assert.That(actualModificationDate, Is.EqualTo(DateOnly.FromDateTime(DateTime.Now))); + } + + [Test] + public void GetImageList_ShouldReturnImageList() + { + List actualImageList = note.GetImageList(); + Assert.That(actualImageList, Is.EqualTo(new List())); + } + + [Test] + public void GetCollaborators_ShouldReturnCollaborators() + { + List actualCollaborators = note.GetCollaborators(); + Assert.That(actualCollaborators, Is.EqualTo(new List())); + } + + [Test] + public void GetEditors_ShouldReturnEditors() + { + List actualEditors = note.GetEditors(); + Assert.That(actualEditors, Is.EqualTo(new List())); + } + + [Test] + public void GetOwner_ShouldReturnOwner() + { + User actualOwner = note.GetOwner(); + Assert.That(actualOwner, Is.EqualTo(owner)); + } + + } +} diff --git a/notus/Tests/Notus_UnitTest_Note/Usings.cs b/notus/Tests/Notus_UnitTest_Note/Usings.cs new file mode 100644 index 0000000..cefced4 --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Note/Usings.cs @@ -0,0 +1 @@ +global using NUnit.Framework; \ No newline at end of file diff --git a/notus/Tests/Notus_UnitTest_Note/VerifyOwnerTests.cs b/notus/Tests/Notus_UnitTest_Note/VerifyOwnerTests.cs new file mode 100644 index 0000000..4b28379 --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Note/VerifyOwnerTests.cs @@ -0,0 +1,26 @@ +using Biblioteque_de_Class; +namespace Notus_UnitTest_Note +{ + [TestFixture] + public class VerifyOwnerTests + { + [Test] + public void VerifyOwner_UserIsOwner_ReturnsTrue() + { + User owner = new User("John", "john@example.com", "choco"); + Note note = new Note("My Note", "path/to/logo.png", owner); + bool isOwner = note.VerifyOwner(owner); + Assert.IsTrue(isOwner); + } + + [Test] + public void VerifyOwner_UserIsNotOwner_ReturnsFalse() + { + User owner = new User("John", "john@example.com", "choco"); + User anotherUser = new User("Jane", "jane@example.com", "choco"); + Note note = new Note("My Note", "path/to/logo.png", owner); + bool isOwner = note.VerifyOwner(anotherUser); + Assert.IsFalse(isOwner); + } + } +} \ No newline at end of file diff --git a/notus/Tests/Notus_UnitTest_Note/VerifyPrivilegeTests.cs b/notus/Tests/Notus_UnitTest_Note/VerifyPrivilegeTests.cs new file mode 100644 index 0000000..7a02a0b --- /dev/null +++ b/notus/Tests/Notus_UnitTest_Note/VerifyPrivilegeTests.cs @@ -0,0 +1,32 @@ +using Biblioteque_de_Class; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Notus_UnitTest_Note +{ + [TestFixture] + public class VerifyPrivilegeTests + { + [Test] + public void VerifyPrivilege_WhenUserIsEditor_ReturnsTrue() + { + User editor = new User("Editor1", "editor1@example.com", "password"); + Note note = new Note("Test Note", "logo.png", new User("Owner", "owner@example.com", "password")); + note.AddEditor(note.GetOwner(), editor); + bool result = note.VerifyPrivilege(editor); + Assert.IsTrue(result); + } + + [Test] + public void VerifyPrivilege_WhenUserIsNotEditor_ThrowsException() + { + User editor = new User("Editor1", "editor1@example.com", "password"); + Note note = new Note("Test Note", "logo.png", new User("Owner", "owner@example.com", "password")); + bool result = note.VerifyPrivilege(editor); + Assert.IsFalse(result); + } + } +} diff --git a/notus/Tests/Notus_UnitTest_User/Notus_UnitTest_User.csproj b/notus/Tests/Notus_UnitTest_User/Notus_UnitTest_User.csproj new file mode 100644 index 0000000..3f9f74f --- /dev/null +++ b/notus/Tests/Notus_UnitTest_User/Notus_UnitTest_User.csproj @@ -0,0 +1,24 @@ + + + + net7.0 + enable + enable + + false + true + + + + + + + + + + + + + + + diff --git a/notus/Tests/Notus_UnitTest_User/SearchNoteByNameTests.cs b/notus/Tests/Notus_UnitTest_User/SearchNoteByNameTests.cs new file mode 100644 index 0000000..c4d03f4 --- /dev/null +++ b/notus/Tests/Notus_UnitTest_User/SearchNoteByNameTests.cs @@ -0,0 +1,59 @@ +using Biblioteque_de_Class; + +namespace Notus_UnitTest_User +{ + [TestFixture] + public class SearchNoteByNameTests + { + private User owner; + private string searchName; + + [SetUp] + public void SetUp() + { + owner = new("Owner", "owner@example.com", "password"); + owner.CreateNote("Note 1", "image1.png"); + owner.CreateNote("Note 2", "image2.png"); + owner.CreateNote("Another Note", "image3.png"); + owner.AddFavorite(owner.GetNoteList()[0]); + owner.AddFavorite(owner.GetNoteList()[1]); + owner.AddFavorite(owner.GetNoteList()[2]); + searchName = "note"; + } + + [Test] + public void SearchNoteByName_WhenMatchingNotesExist_NotesReturned() + { + List result = owner.SearchNoteByName(owner.GetNoteList(),"note"); + Assert.That(result, Has.Count.EqualTo(3)); + CollectionAssert.Contains(result, owner.GetNoteList()[0]); + CollectionAssert.Contains(result, owner.GetNoteList()[1]); + CollectionAssert.Contains(result, owner.GetNoteList()[2]); + } + + [Test] + public void SearchNoteByName_WhenNoMatchingNotesExist_EmptyListReturned() + { + List result = owner.SearchNoteByName(owner.GetNoteList(), "test"); + Assert.That(result, Is.Empty); + } + + [Test] + public void SearchFavoriteNoteByName_ShouldReturnMatchingNotes() + { + List searchedNotes = owner.SearchNoteByName(owner.GetFavList(), searchName); + Assert.That(searchedNotes, Has.Count.EqualTo(3)); + CollectionAssert.Contains(searchedNotes, owner.GetNoteList()[0]); + CollectionAssert.Contains(searchedNotes, owner.GetNoteList()[1]); + CollectionAssert.Contains(searchedNotes, owner.GetNoteList()[2]); + } + + [Test] + public void SearchFavoriteNoteByName_ShouldReturnEmptyList_WhenNoMatchFound() + { + searchName = "nonexistent"; + List searchedNotes = owner.SearchNoteByName(owner.GetFavList(), searchName); + Assert.That(searchedNotes, Is.Empty); + } + } +} \ No newline at end of file diff --git a/notus/Tests/Notus_UnitTest_User/Usings.cs b/notus/Tests/Notus_UnitTest_User/Usings.cs new file mode 100644 index 0000000..cefced4 --- /dev/null +++ b/notus/Tests/Notus_UnitTest_User/Usings.cs @@ -0,0 +1 @@ +global using NUnit.Framework; \ No newline at end of file diff --git a/notus/notus.sln b/notus/notus.sln new file mode 100644 index 0000000..23417e2 --- /dev/null +++ b/notus/notus.sln @@ -0,0 +1,71 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31611.283 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Notus_Vue", "notus_vue\Notus_Vue.csproj", "{561264A1-4611-40FB-A662-3EF65550CA71}" + ProjectSection(ProjectDependencies) = postProject + {0A5E5F33-6B39-42BF-A46D-0752EDB666FB} = {0A5E5F33-6B39-42BF-A46D-0752EDB666FB} + {184478A9-E14F-42E0-B963-B3A4474C9C1C} = {184478A9-E14F-42E0-B963-B3A4474C9C1C} + {7B7F1062-9498-44E5-AC77-84BC90A3B730} = {7B7F1062-9498-44E5-AC77-84BC90A3B730} + {92DD50C5-EEAD-44ED-AEFF-E21935725477} = {92DD50C5-EEAD-44ED-AEFF-E21935725477} + {AFCEAA99-3A25-4E9E-B498-72DD76A6B7FF} = {AFCEAA99-3A25-4E9E-B498-72DD76A6B7FF} + {EE443C17-B31D-4AD0-9141-920876E7DF79} = {EE443C17-B31D-4AD0-9141-920876E7DF79} + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Biblioteque_de_Class", "Biblioteque_de_Class\Biblioteque_de_Class.csproj", "{92DD50C5-EEAD-44ED-AEFF-E21935725477}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Notus_Console", "Notus_Console\Notus_Console.csproj", "{0A5E5F33-6B39-42BF-A46D-0752EDB666FB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Notus_Persistance", "Notus_Persistence\Notus_Persistance.csproj", "{184478A9-E14F-42E0-B963-B3A4474C9C1C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Notus_UnitTest_Database", "Tests\Notus_UnitTest_Database\Notus_UnitTest_Database.csproj", "{EE443C17-B31D-4AD0-9141-920876E7DF79}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Notus_UnitTest_Note", "Tests\Notus_UnitTest_Note\Notus_UnitTest_Note.csproj", "{7B7F1062-9498-44E5-AC77-84BC90A3B730}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Notus_UnitTest_User", "Tests\Notus_UnitTest_User\Notus_UnitTest_User.csproj", "{AFCEAA99-3A25-4E9E-B498-72DD76A6B7FF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {561264A1-4611-40FB-A662-3EF65550CA71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {561264A1-4611-40FB-A662-3EF65550CA71}.Debug|Any CPU.Build.0 = Debug|Any CPU + {561264A1-4611-40FB-A662-3EF65550CA71}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {561264A1-4611-40FB-A662-3EF65550CA71}.Release|Any CPU.ActiveCfg = Release|Any CPU + {561264A1-4611-40FB-A662-3EF65550CA71}.Release|Any CPU.Build.0 = Release|Any CPU + {561264A1-4611-40FB-A662-3EF65550CA71}.Release|Any CPU.Deploy.0 = Release|Any CPU + {92DD50C5-EEAD-44ED-AEFF-E21935725477}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {92DD50C5-EEAD-44ED-AEFF-E21935725477}.Debug|Any CPU.Build.0 = Debug|Any CPU + {92DD50C5-EEAD-44ED-AEFF-E21935725477}.Release|Any CPU.ActiveCfg = Release|Any CPU + {92DD50C5-EEAD-44ED-AEFF-E21935725477}.Release|Any CPU.Build.0 = Release|Any CPU + {0A5E5F33-6B39-42BF-A46D-0752EDB666FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0A5E5F33-6B39-42BF-A46D-0752EDB666FB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0A5E5F33-6B39-42BF-A46D-0752EDB666FB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0A5E5F33-6B39-42BF-A46D-0752EDB666FB}.Release|Any CPU.Build.0 = Release|Any CPU + {184478A9-E14F-42E0-B963-B3A4474C9C1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {184478A9-E14F-42E0-B963-B3A4474C9C1C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {184478A9-E14F-42E0-B963-B3A4474C9C1C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {184478A9-E14F-42E0-B963-B3A4474C9C1C}.Release|Any CPU.Build.0 = Release|Any CPU + {EE443C17-B31D-4AD0-9141-920876E7DF79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EE443C17-B31D-4AD0-9141-920876E7DF79}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EE443C17-B31D-4AD0-9141-920876E7DF79}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EE443C17-B31D-4AD0-9141-920876E7DF79}.Release|Any CPU.Build.0 = Release|Any CPU + {7B7F1062-9498-44E5-AC77-84BC90A3B730}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7B7F1062-9498-44E5-AC77-84BC90A3B730}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7B7F1062-9498-44E5-AC77-84BC90A3B730}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7B7F1062-9498-44E5-AC77-84BC90A3B730}.Release|Any CPU.Build.0 = Release|Any CPU + {AFCEAA99-3A25-4E9E-B498-72DD76A6B7FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AFCEAA99-3A25-4E9E-B498-72DD76A6B7FF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AFCEAA99-3A25-4E9E-B498-72DD76A6B7FF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AFCEAA99-3A25-4E9E-B498-72DD76A6B7FF}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {61F7FB11-1E47-470C-91E2-47F8143E1572} + EndGlobalSection +EndGlobal diff --git a/notus/notus_vue/App.xaml b/notus/notus_vue/App.xaml new file mode 100644 index 0000000..0c897b2 --- /dev/null +++ b/notus/notus_vue/App.xaml @@ -0,0 +1,14 @@ + + + + + + + + + + + diff --git a/notus/notus_vue/App.xaml.cs b/notus/notus_vue/App.xaml.cs new file mode 100644 index 0000000..cb06065 --- /dev/null +++ b/notus/notus_vue/App.xaml.cs @@ -0,0 +1,14 @@ + +namespace notus; + +public partial class App : Application +{ + public App() + { + InitializeComponent(); + + MainPage = new AppShell(); + } + + +} diff --git a/notus/notus_vue/AppShell.xaml b/notus/notus_vue/AppShell.xaml new file mode 100644 index 0000000..0ce0df6 --- /dev/null +++ b/notus/notus_vue/AppShell.xaml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/notus/notus_vue/AppShell.xaml.cs b/notus/notus_vue/AppShell.xaml.cs new file mode 100644 index 0000000..4c4e7f2 --- /dev/null +++ b/notus/notus_vue/AppShell.xaml.cs @@ -0,0 +1,7 @@ +namespace notus; + +public partial class AppShell : Shell{ + public AppShell(){ + InitializeComponent(); + } +} diff --git a/notus/notus_vue/ConnecPage.xaml b/notus/notus_vue/ConnecPage.xaml new file mode 100644 index 0000000..9689c47 --- /dev/null +++ b/notus/notus_vue/ConnecPage.xaml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + +