From d91620bb4f025fa78bd84cf6702f2804e2ef1efe Mon Sep 17 00:00:00 2001 From: Michael Simon <simon@kit.edu> Date: Tue, 9 May 2023 08:47:25 +0200 Subject: [PATCH] show policies on service connect --- .../ConnectLocalProjectToServiceBean.java | 74 +++++++++++++++++++ .../connect-local-project-to-service.xhtml | 22 +++++- 2 files changed, 94 insertions(+), 2 deletions(-) diff --git a/bwreg-webapp/src/main/java/edu/kit/scc/webreg/bean/project/ConnectLocalProjectToServiceBean.java b/bwreg-webapp/src/main/java/edu/kit/scc/webreg/bean/project/ConnectLocalProjectToServiceBean.java index 577369dd2..aa0fe192e 100644 --- a/bwreg-webapp/src/main/java/edu/kit/scc/webreg/bean/project/ConnectLocalProjectToServiceBean.java +++ b/bwreg-webapp/src/main/java/edu/kit/scc/webreg/bean/project/ConnectLocalProjectToServiceBean.java @@ -19,29 +19,41 @@ import javax.faces.view.ViewScoped; import javax.inject.Inject; import javax.inject.Named; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import edu.kit.scc.webreg.entity.PolicyEntity; import edu.kit.scc.webreg.entity.ServiceEntity; import edu.kit.scc.webreg.entity.project.LocalProjectEntity; import edu.kit.scc.webreg.entity.project.LocalProjectEntity_; import edu.kit.scc.webreg.entity.project.ProjectAdminType; import edu.kit.scc.webreg.entity.project.ProjectIdentityAdminEntity; +import edu.kit.scc.webreg.entity.project.ProjectPolicyType; import edu.kit.scc.webreg.entity.project.ProjectServiceEntity; import edu.kit.scc.webreg.entity.project.ProjectServiceStatusType; import edu.kit.scc.webreg.entity.project.ProjectServiceType; import edu.kit.scc.webreg.exc.NotAuthorizedException; +import edu.kit.scc.webreg.service.PolicyService; import edu.kit.scc.webreg.service.ServiceService; import edu.kit.scc.webreg.service.project.LocalProjectService; import edu.kit.scc.webreg.service.project.ProjectService; import edu.kit.scc.webreg.session.SessionManager; +import edu.kit.scc.webreg.util.FacesMessageGenerator; +import edu.kit.scc.webreg.util.PolicyHolder; @Named @ViewScoped public class ConnectLocalProjectToServiceBean implements Serializable { private static final long serialVersionUID = 1L; + private static final Logger logger = LoggerFactory.getLogger(ConnectLocalProjectToServiceBean.class); @Inject private SessionManager session; + @Inject + private FacesMessageGenerator messageGenerator; + @Inject private LocalProjectService service; @@ -51,6 +63,9 @@ public class ConnectLocalProjectToServiceBean implements Serializable { @Inject private ProjectService projectService; + @Inject + private PolicyService policyService; + private LocalProjectEntity entity; private List<ServiceEntity> serviceList; @@ -62,6 +77,10 @@ public class ConnectLocalProjectToServiceBean implements Serializable { private List<ProjectIdentityAdminEntity> adminList; private ProjectIdentityAdminEntity adminIdentity; + private List<PolicyHolder> policyHolderList; + + private Boolean savePossible = false; + public void preRenderView(ComponentSystemEvent ev) { selectedServices = new ArrayList<ServiceEntity>(); @@ -82,6 +101,29 @@ public class ConnectLocalProjectToServiceBean implements Serializable { } } + public void connectionAdded() { + policyHolderList = new ArrayList<PolicyHolder>(); + if (selectedServices.size() > 0) { + setSavePossible(true); + } + else { + setSavePossible(false); + } + + for (ServiceEntity s : selectedServices) { + List<PolicyEntity> policyList = policyService.findAllByAttr("projectPolicy", s); + + policyList.stream().forEach(policy -> { + if (ProjectPolicyType.SERVICE_CONNECT.equals(policy.getProjectPolicyType())) { + PolicyHolder ph = new PolicyHolder(); + ph.setPolicy(policy); + policyHolderList.add(ph); + } + }); + + } + } + public List<ProjectIdentityAdminEntity> getAdminList() { if (adminList == null) { adminList = projectService.findAdminsForProject(getEntity()); @@ -90,6 +132,23 @@ public class ConnectLocalProjectToServiceBean implements Serializable { } public String save() { + logger.debug("testing all checkboxes"); + for (PolicyHolder ph : policyHolderList) { + if (ph.getPolicy() != null && ph.getPolicy().getShowOnly() != null && ph.getPolicy().getShowOnly()) { + logger.debug("Policy {} in Service {} is just for show", ph.getPolicy().getId(), + ph.getPolicy().getProjectPolicy().getId()); + } else if (!ph.getChecked()) { + logger.debug("Policy {} in Service {} is not checked", ph.getPolicy().getId(), + ph.getPolicy().getProjectPolicy().getId()); + messageGenerator.addWarningMessage("need_check", "Zustimmung fehlt!", + "Sie müssen allen Nutzungbedingungen zustimmen."); + return ""; + } else { + logger.debug("Policy {} in Service {} is checked", ph.getPolicy().getId(), + ph.getPolicy().getProjectPolicy().getId()); + } + } + for (ServiceEntity s : selectedServices) { projectService.addOrChangeService(entity, s, ProjectServiceType.PASSIVE_GROUP, ProjectServiceStatusType.APPROVAL_PENDING, "idty-" + session.getIdentityId()); @@ -145,4 +204,19 @@ public class ConnectLocalProjectToServiceBean implements Serializable { public void setProjectServiceList(List<ProjectServiceEntity> projectServiceList) { this.projectServiceList = projectServiceList; } + + public List<PolicyHolder> getPolicyHolderList() { + if (policyHolderList == null) { + policyHolderList = new ArrayList<PolicyHolder>(); + } + return policyHolderList; + } + + public Boolean getSavePossible() { + return savePossible; + } + + public void setSavePossible(Boolean savePossible) { + this.savePossible = savePossible; + } } diff --git a/bwreg-webapp/src/main/webapp/project/connect-local-project-to-service.xhtml b/bwreg-webapp/src/main/webapp/project/connect-local-project-to-service.xhtml index 2943f285b..5c47b568e 100644 --- a/bwreg-webapp/src/main/webapp/project/connect-local-project-to-service.xhtml +++ b/bwreg-webapp/src/main/webapp/project/connect-local-project-to-service.xhtml @@ -39,6 +39,7 @@ <p:selectManyMenu id="servicePicker" value="#{connectLocalProjectToServiceBean.selectedServices}" converter="#{serviceConverter}" style="min-width: 300px;" var="s" showCheckbox="true"> + <p:ajax listener="#{connectLocalProjectToServiceBean.connectionAdded()}" update="btnPanel policyHolderList" /> <f:selectItems value="#{connectLocalProjectToServiceBean.serviceList}" var="service" itemLabel="#{service.name}" itemValue="#{service}"/> <p:column> @@ -57,9 +58,26 @@ <p:panel> <h:outputText value="#{messages['project.connect_to_service_connect_text']}" /> </p:panel> + + + <p:panel id="policyHolderList"> + <p:panel style="margin: 1.5em 0.5em;" rendered="#{connectLocalProjectToServiceBean.policyHolderList.size() != 0}"> + <ui:repeat var="policyHolder" value="#{connectLocalProjectToServiceBean.policyHolderList}"> + <b><h:outputText value="#{policyHolder.policy.name} - #{policyHolder.policy.actualAgreement.name}" /></b> + <div style="margin-top: 1em;"> + <h:outputText value="#{bbCodeConverter.convert(policyHolder.policy.actualAgreement.agreement)}" escape="false"/> + </div> + <p:outputPanel rendered="#{not policyHolder.policy.showOnly}" style="margin-top: 1em;"> + <h:selectBooleanCheckbox value="#{policyHolder.checked}" /> + <h:outputText value="#{messages.accept_tou}" /> + </p:outputPanel> + </ui:repeat> + </p:panel> + </p:panel> - <p:panel> - <p:commandButton id="save" action="#{connectLocalProjectToServiceBean.save}" value="#{messages['project.connect_to_service_connect_button']}" /> + <p:panel id="btnPanel"> + <p:commandButton id="saveBtn" action="#{connectLocalProjectToServiceBean.save}" value="#{messages['project.connect_to_service_connect_button']}" + update="messageBox" disabled="#{not connectLocalProjectToServiceBean.savePossible}" /> </p:panel> <div class="text full" style="margin-top: 0.4em;"> -- GitLab