From 6b4f1b2fee5f9feaf86f9159d1bc6debad3b6a30 Mon Sep 17 00:00:00 2001 From: jcomedouteau Date: Fri, 11 Oct 2024 16:13:03 +0200 Subject: [PATCH] #2388-automatic executions - front --- docker-compose/Dockerfile | 44 +++++++-------- .../shanoir/ng/vip/AutomaticExecution.java | 17 ------ .../ng/vip/controller/ExecutionApi.java | 2 +- .../controller/ExecutionApiController.java | 2 +- .../ng/vip/model/AutomaticExecution.java | 55 +++++++++++++++++++ .../monitoring/model/PipelineParameter.java | 16 +++++- .../app/studies/study/study.component.html | 2 +- .../execution-planning-list.component.html | 8 ++- .../execution-planning-list.component.ts | 17 +++++- .../execution-planning.component.html | 14 +++-- .../execution-planning.component.ts | 19 +++++-- 11 files changed, 141 insertions(+), 55 deletions(-) delete mode 100644 shanoir-ng-datasets/src/main/java/org/shanoir/ng/vip/AutomaticExecution.java create mode 100644 shanoir-ng-datasets/src/main/java/org/shanoir/ng/vip/model/AutomaticExecution.java diff --git a/docker-compose/Dockerfile b/docker-compose/Dockerfile index 5507bf1445..83332942ec 100644 --- a/docker-compose/Dockerfile +++ b/docker-compose/Dockerfile @@ -13,7 +13,7 @@ ################ base debian image ######################################### -FROM debian:bookworm as base-debian +FROM debian:bookworm AS base-debian # - disable the automatic "apt-get clean" command (because we mount # /var/cache/apt from an external volume to speed-up the build) @@ -30,13 +30,13 @@ RUN rm /etc/apt/apt.conf.d/docker-clean \ # (rather that temurin's default /etc/ssl/certs/adoptium/cacerts) # to keep the location independent of the implementation (in case users need # to mount it from an external volume) -FROM base-debian as adoptium-key +FROM base-debian AS adoptium-key RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update -qq && apt-get install -qqy wget gnupg RUN wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public \ | gpg --dearmor > /adoptium.gpg -FROM base-debian as base-debian-with-adoptium +FROM base-debian AS base-debian-with-adoptium COPY --link --from=adoptium-key /adoptium.gpg /etc/apt/keyrings/ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update -qq && apt install -qqy apt-transport-https ca-certificates \ @@ -45,11 +45,11 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ "$(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" \ | tee /etc/apt/sources.list.d/adoptium.list -FROM base-debian-with-adoptium as jdk +FROM base-debian-with-adoptium AS jdk RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update -qq && apt-get install -qqy temurin-21-jdk maven bzip2 git -FROM base-debian-with-adoptium as base-microservice +FROM base-debian-with-adoptium AS base-microservice RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update -qq \ && apt-get install -qqy temurin-21-jre ca-certificates-java \ @@ -69,7 +69,7 @@ ENTRYPOINT ["/bin/entrypoint", "java", "-Djava.security.egd=file:/dev/urandom", ################ datasets ################################################## -FROM alpine as datasets-download +FROM alpine AS datasets-download # Installation of dcm4che into /opt/dcm4che to manage the store-scu into the # PACS dcm4che3, used last version 5.21.0 as available on the 2020-02-14 @@ -81,7 +81,7 @@ RUN wget -qO dcm4che-bin.zip \ && rm /dcm4che-bin.zip -FROM base-microservice as datasets +FROM base-microservice AS datasets RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update -qq \ @@ -111,7 +111,7 @@ CMD ["-jar", "/shanoir-ng-datasets.jar"] ################ import #################################################### -FROM base-microservice as import +FROM base-microservice AS import COPY --link import/entrypoint /usr/bin/ COPY --link import/shanoir-ng-import.jar shanoir-ng-import.jar @@ -124,7 +124,7 @@ CMD ["-jar", "/shanoir-ng-import.jar"] ################ nifti-conversion ########################################## -FROM base-debian as nifti-conversion-conda +FROM base-debian AS nifti-conversion-conda RUN --mount=type=cache,target=/var/cache/apt,sharing=locked,id=apt-conda \ apt-get -qqy update \ @@ -141,7 +141,7 @@ RUN --mount=type=cache,target=/opt/miniconda3/pkgs \ /opt/miniconda3/bin/conda install -c conda-forge dicomifier -y -FROM base-debian as nifti-conversion-builder +FROM base-debian AS nifti-conversion-builder RUN --mount=type=cache,target=/var/cache/apt,sharing=locked,id=apt-builder \ apt-get -qqy update \ @@ -168,7 +168,7 @@ RUN mkdir -p /target/opt/nifti-converters/mriconverter \ && chmod 0777 . MRIFileManager/MRIManager.jar -FROM base-microservice as nifti-conversion +FROM base-microservice AS nifti-conversion # xvfb+gtk2 needed by mri_conv (headless mode not supported by DicomToNifti) # see: https://populse.github.io/mri_conv/Installation/installation.html#scriptwithoutGUI @@ -218,7 +218,7 @@ CMD ["-jar", "/nifti-conversion.jar"] ################ preclinical ############################################### -FROM base-microservice as preclinical +FROM base-microservice AS preclinical COPY --link preclinical/shanoir-ng-preclinical.jar shanoir-ng-preclinical.jar COPY --link preclinical/entrypoint /usr/bin/ @@ -231,7 +231,7 @@ CMD ["-jar", "/shanoir-ng-preclinical.jar", "-Xmx6g", "-Xms1g"] ################ studies ################################################### -FROM base-microservice as studies +FROM base-microservice AS studies COPY --link studies/shanoir-ng-studies.jar shanoir-ng-studies.jar COPY --link studies/entrypoint /usr/bin/ @@ -244,7 +244,7 @@ CMD ["-jar", "/shanoir-ng-studies.jar"] ################ users ##################################################### -FROM base-microservice as users +FROM base-microservice AS users RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update -qq && apt-get install -qqy openssl @@ -265,7 +265,7 @@ CMD ["-jar", "/shanoir-ng-users.jar"] ################ keycloak ################################################## -FROM quay.io/keycloak/keycloak:25.0.4 as keycloak-base +FROM quay.io/keycloak/keycloak:25.0.4 AS keycloak-base # keycloak options (https://www.keycloak.org/server/all-config) # @@ -284,7 +284,7 @@ ENV KC_DB="mysql" \ # # Use builder to integrate custom provider # -FROM keycloak-base as keycloak-builder +FROM keycloak-base AS keycloak-builder COPY keycloak/shanoir-ng-keycloak-auth.jar /opt/keycloak/providers @@ -294,7 +294,7 @@ RUN /opt/keycloak/bin/kc.sh build # # Create actual image, based on builder before # -FROM keycloak-base as keycloak +FROM keycloak-base AS keycloak COPY --from=keycloak-builder /opt/keycloak/ /opt/keycloak/ COPY --chown=keycloak keycloak/themes/. /opt/keycloak/themes @@ -313,7 +313,7 @@ CMD [] FROM ohif/app:v3.9.0-beta.76 AS nginx-viewer -FROM nginx as nginx +FROM nginx AS nginx COPY --link \ nginx/http.conf \ @@ -342,7 +342,7 @@ CMD ["nginx", "-g", "daemon off;"] ################ front-dev ################################################# -FROM node:lts-alpine3.17 as front-dev +FROM node:lts-alpine3.17 AS front-dev WORKDIR /app @@ -352,7 +352,7 @@ RUN npm install -g @angular/cli@11.2.14 ################ database ################################################## -FROM mysql/mysql-server:5.7 as database +FROM mysql/mysql-server:5.7 AS database COPY --link --chmod=0755 database/shanoir-entrypoint.sh / ENTRYPOINT ["/shanoir-entrypoint.sh"] @@ -371,7 +371,7 @@ COPY --link database/db-changes /opt/db-changes ################ keycloak-database ################################################## -FROM mysql/mysql-server:5.7 as keycloak-database +FROM mysql/mysql-server:5.7 AS keycloak-database COPY --link --chmod=0755 keycloak-database/1_add_users.sql /docker-entrypoint-initdb.d/ @@ -379,7 +379,7 @@ COPY --link --chmod=0755 keycloak-database/1_add_users.sql /docker-entrypoint-in ################ solr ############################################################### -FROM solr:8.1 as solr +FROM solr:8.1 AS solr USER root RUN mkdir -p /etc/shanoir-core-template \ diff --git a/shanoir-ng-datasets/src/main/java/org/shanoir/ng/vip/AutomaticExecution.java b/shanoir-ng-datasets/src/main/java/org/shanoir/ng/vip/AutomaticExecution.java deleted file mode 100644 index 0d94016aed..0000000000 --- a/shanoir-ng-datasets/src/main/java/org/shanoir/ng/vip/AutomaticExecution.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.shanoir.ng.vip; - -/** - * This class represents the associated criterias for an automatic execution realized after an import in shanoir. - */ -public class AutomaticExecution { - - String name; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} diff --git a/shanoir-ng-datasets/src/main/java/org/shanoir/ng/vip/controller/ExecutionApi.java b/shanoir-ng-datasets/src/main/java/org/shanoir/ng/vip/controller/ExecutionApi.java index 5a564220d6..0c216b1058 100644 --- a/shanoir-ng-datasets/src/main/java/org/shanoir/ng/vip/controller/ExecutionApi.java +++ b/shanoir-ng-datasets/src/main/java/org/shanoir/ng/vip/controller/ExecutionApi.java @@ -24,9 +24,9 @@ import org.shanoir.ng.shared.exception.EntityNotFoundException; import org.shanoir.ng.shared.exception.RestServiceException; import org.shanoir.ng.shared.exception.SecurityException; -import org.shanoir.ng.vip.AutomaticExecution; import org.shanoir.ng.vip.dto.ExecutionCandidateDTO; import org.shanoir.ng.vip.dto.VipExecutionDTO; +import org.shanoir.ng.vip.model.AutomaticExecution; import org.shanoir.ng.vip.monitoring.model.ExecutionStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; diff --git a/shanoir-ng-datasets/src/main/java/org/shanoir/ng/vip/controller/ExecutionApiController.java b/shanoir-ng-datasets/src/main/java/org/shanoir/ng/vip/controller/ExecutionApiController.java index 79e8149da1..7cc2af12bc 100644 --- a/shanoir-ng-datasets/src/main/java/org/shanoir/ng/vip/controller/ExecutionApiController.java +++ b/shanoir-ng-datasets/src/main/java/org/shanoir/ng/vip/controller/ExecutionApiController.java @@ -27,10 +27,10 @@ import org.shanoir.ng.shared.exception.RestServiceException; import org.shanoir.ng.shared.exception.SecurityException; import org.shanoir.ng.utils.KeycloakUtil; -import org.shanoir.ng.vip.AutomaticExecution; import org.shanoir.ng.vip.dto.DatasetParameterDTO; import org.shanoir.ng.vip.dto.ExecutionCandidateDTO; import org.shanoir.ng.vip.dto.VipExecutionDTO; +import org.shanoir.ng.vip.model.AutomaticExecution; import org.shanoir.ng.vip.monitoring.model.ExecutionMonitoring; import org.shanoir.ng.vip.monitoring.model.ExecutionStatus; import org.shanoir.ng.vip.monitoring.schedule.ExecutionStatusMonitorService; diff --git a/shanoir-ng-datasets/src/main/java/org/shanoir/ng/vip/model/AutomaticExecution.java b/shanoir-ng-datasets/src/main/java/org/shanoir/ng/vip/model/AutomaticExecution.java new file mode 100644 index 0000000000..5779c58561 --- /dev/null +++ b/shanoir-ng-datasets/src/main/java/org/shanoir/ng/vip/model/AutomaticExecution.java @@ -0,0 +1,55 @@ +package org.shanoir.ng.vip.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import org.shanoir.ng.shared.model.Study; + +/** + * This class represents the associated criterias for an automatic execution realized after an import in shanoir. + */ +@Entity +@JsonIgnoreProperties(ignoreUnknown = true) +public class AutomaticExecution { + + @Id + private Long id; + + private String name; + + @ManyToOne + @JoinColumn(name = "study_id") + private Study study; + + /* + @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) + @JoinTable(name = "pipeline_parameter") + private List parameters; + */ + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Study getStudy() { + return study; + } + + public void setStudy(Study study) { + this.study = study; + } +} diff --git a/shanoir-ng-datasets/src/main/java/org/shanoir/ng/vip/monitoring/model/PipelineParameter.java b/shanoir-ng-datasets/src/main/java/org/shanoir/ng/vip/monitoring/model/PipelineParameter.java index aecb7ace20..64ab0b4749 100644 --- a/shanoir-ng-datasets/src/main/java/org/shanoir/ng/vip/monitoring/model/PipelineParameter.java +++ b/shanoir-ng-datasets/src/main/java/org/shanoir/ng/vip/monitoring/model/PipelineParameter.java @@ -15,14 +15,18 @@ package org.shanoir.ng.vip.monitoring.model; -import java.util.List; -import java.util.Map; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; /** * This class represents the parameter of a VIP pipeline. */ +@Entity public class PipelineParameter { + @Id + private Long id; + private String name; private String type; private String value; @@ -77,4 +81,12 @@ public String getValue() { public void setValue(String value) { this.value = value; } + + public void setId(Long id) { + this.id = id; + } + + public Long getId() { + return id; + } } diff --git a/shanoir-ng-front/src/app/studies/study/study.component.html b/shanoir-ng-front/src/app/studies/study/study.component.html index c8585c4cb0..30cbbc1182 100644 --- a/shanoir-ng-front/src/app/studies/study/study.component.html +++ b/shanoir-ng-front/src/app/studies/study/study.component.html @@ -426,7 +426,7 @@

Execution planning - + diff --git a/shanoir-ng-front/src/app/vip/execution-planning/execution-planning-list.component.html b/shanoir-ng-front/src/app/vip/execution-planning/execution-planning-list.component.html index 67d4c96405..439b9054fb 100644 --- a/shanoir-ng-front/src/app/vip/execution-planning/execution-planning-list.component.html +++ b/shanoir-ng-front/src/app/vip/execution-planning/execution-planning-list.component.html @@ -1,8 +1,12 @@ + +
  1. -
      - + +
  2. +
+ diff --git a/shanoir-ng-front/src/app/vip/execution-planning/execution-planning-list.component.ts b/shanoir-ng-front/src/app/vip/execution-planning/execution-planning-list.component.ts index ee0e9dee4d..b0b941e485 100644 --- a/shanoir-ng-front/src/app/vip/execution-planning/execution-planning-list.component.ts +++ b/shanoir-ng-front/src/app/vip/execution-planning/execution-planning-list.component.ts @@ -1,15 +1,20 @@ -import {Component, Input, OnInit} from '@angular/core'; +import {Component, Input, model, OnInit} from '@angular/core'; import {ExecutionService} from "../execution/execution.service"; import {AutomaticExecution} from "../models/automatic-execution"; +import {ModesAware} from "../../preclinical/shared/mode/mode.decorator"; +import { Mode } from '../../shared/components/entity/entity.component.abstract'; +import {ExecutionPlanning} from "./execution-planning.component"; @Component({ selector: 'execution-planning-list', templateUrl: './execution-planning-list.component.html', styleUrls: ['./execution-planning-list.component.css'] }) +@ModesAware export class ExecutionPlanningList { @Input() studyId: number + @Input() mode: Mode executions: AutomaticExecution[] constructor(protected executionService: ExecutionService) {} @@ -20,4 +25,14 @@ export class ExecutionPlanningList { ) } + addNewExec() { + let exec = new AutomaticExecution(); + exec.name = "new one yay"; + this.executions.push(exec) + } + + deleteExec(execution) { + this.executions = this.executions.slice(this.executions.indexOf(execution)); + } + } diff --git a/shanoir-ng-front/src/app/vip/execution-planning/execution-planning.component.html b/shanoir-ng-front/src/app/vip/execution-planning/execution-planning.component.html index 045958d5a2..86094fa80c 100644 --- a/shanoir-ng-front/src/app/vip/execution-planning/execution-planning.component.html +++ b/shanoir-ng-front/src/app/vip/execution-planning/execution-planning.component.html @@ -1,7 +1,13 @@ -
+
+ We are creating / editing +
+
- + {{executionPlanning.name}}
- - +
+
+ + +
diff --git a/shanoir-ng-front/src/app/vip/execution-planning/execution-planning.component.ts b/shanoir-ng-front/src/app/vip/execution-planning/execution-planning.component.ts index 4c15c9defd..31c65a2860 100644 --- a/shanoir-ng-front/src/app/vip/execution-planning/execution-planning.component.ts +++ b/shanoir-ng-front/src/app/vip/execution-planning/execution-planning.component.ts @@ -1,16 +1,27 @@ import {Component, Input} from '@angular/core'; import {AutomaticExecution} from "../models/automatic-execution"; - +import {ModesAware} from "../../preclinical/shared/mode/mode.decorator"; +import {Mode} from "../../shared/components/entity/entity.component.abstract"; @Component({ selector: 'execution-planning', templateUrl: './execution-planning.component.html', - styleUrls: ['./execution-planning-component.css'] + styleUrls: ['./execution-planning.component.css'] }) +@ModesAware export class ExecutionPlanning { @Input() executionPlanning: AutomaticExecution - onSubmitExecutionForm() { - console.log("we send the form, but actually no"); + @Input() mode: Mode; + // Define if the current execution planning is being created / edited or only viewed, 'view' by default + @Input() state = 'view' + + saveExec() { + console.log("we save the exec") + this.state = 'view' + } + + editExec() { + this.state = 'edit' } }