Skip to content

Commit 15c4ee0

Browse files
authored
Merge pull request #222 from ipb-halle/219-experiment-access-at-creation
219 experiment access at creation
2 parents 232b103 + 5b78ed8 commit 15c4ee0

13 files changed

Lines changed: 179 additions & 116 deletions

File tree

ui/src/main/java/de/ipb_halle/lbac/exp/ExpProjectController.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,41 +17,47 @@
1717
*/
1818
package de.ipb_halle.lbac.exp;
1919

20+
import de.ipb_halle.lbac.admission.ACListService;
21+
import de.ipb_halle.lbac.admission.ACPermission;
2022
import de.ipb_halle.lbac.admission.User;
2123
import de.ipb_halle.lbac.project.Project;
2224
import de.ipb_halle.lbac.project.ProjectSearchConditionBuilder;
2325
import de.ipb_halle.lbac.project.ProjectSearchRequestBuilder;
2426
import de.ipb_halle.lbac.project.ProjectService;
2527
import de.ipb_halle.lbac.search.SearchResult;
28+
2629
import java.util.ArrayList;
2730
import java.util.HashMap;
2831
import java.util.List;
2932
import java.util.Map;
3033

3134
/**
32-
*
3335
* @author fmauz
3436
*/
3537
public class ExpProjectController {
3638

3739
private Project choosenProject;
3840
private List<Project> choosableProjects = new ArrayList<>();
3941
private ProjectService projectService;
42+
private ACListService acListService;
4043
private User currentUser;
4144
private Map<String, Project> nameMap = new HashMap<>();
4245

43-
public ExpProjectController(ProjectService projectService, User currentUser) {
46+
public ExpProjectController(ProjectService projectService, ACListService acListService, User currentUser) {
4447
choosableProjects = new ArrayList<>();
4548
this.projectService = projectService;
49+
this.acListService = acListService;
4650
this.currentUser = currentUser;
4751
if (currentUser != null) {
4852
ProjectSearchRequestBuilder builder = new ProjectSearchRequestBuilder(currentUser, 0, Integer.MAX_VALUE);
4953
builder.setDeactivated(false);
5054
SearchResult result = projectService.loadProjects(builder.build());
51-
choosableProjects = result.getAllFoundObjects(Project.class, result.getNode());
52-
this.nameMap = new HashMap<>();
53-
for (Project p : choosableProjects) {
54-
nameMap.put(p.getName(), p);
55+
List<Project> allProjects = result.getAllFoundObjects(Project.class, result.getNode());
56+
for (Project p : allProjects) {
57+
if (acListService.isPermitted(ACPermission.permCREATE, p, currentUser)) {
58+
choosableProjects.add(p);
59+
nameMap.put(p.getName(), p);
60+
}
5561
}
5662

5763
}

ui/src/main/java/de/ipb_halle/lbac/exp/ExpRecordController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ public List<MaterialType> getMaterialTypes() {
152152

153153
public abstract ExpRecord getNewRecord();
154154

155-
public boolean isDiagrammButtonVisible(Assay assay) {
155+
public boolean isDiagramButtonVisible(Assay assay) {
156156
List<LinkedData> linkedData = assay.getLinkedData();
157157

158158
// There needs to be at least one result. (n.b.: The first list element is the ASSAY_TARGET.)

ui/src/main/java/de/ipb_halle/lbac/exp/ExperimentBean.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@
2828
import de.ipb_halle.lbac.admission.MemberService;
2929
import de.ipb_halle.lbac.admission.User;
3030
import de.ipb_halle.lbac.datalink.LinkCreationProcess;
31+
3132
import static de.ipb_halle.lbac.exp.ExperimentBean.CreationState.*;
33+
3234
import de.ipb_halle.lbac.exp.assay.AssayController;
3335
import de.ipb_halle.lbac.exp.image.ImageController;
3436
import de.ipb_halle.lbac.exp.search.ExperimentSearchRequestBuilder;
@@ -147,20 +149,21 @@ public enum CreationState {
147149
public ExperimentBean() {
148150
}
149151

150-
//Test Contructor
152+
//Test Constructor
151153
public ExperimentBean(
152154
ItemAgent itemAgent,
153155
MaterialAgent materialAgent,
154156
GlobalAdmissionContext globalAdmissionContext,
155157
ProjectService projectService,
156158
ExperimentService experimentService,
157159
MessagePresenter messagePresenter,
158-
ExpRecordService expRecordService
160+
ExpRecordService expRecordService,
161+
ACListService acListService
159162
) {
160163
if (loggingProfiler == null) {
161164
loggingProfiler = new LoggingProfiler();
162165
}
163-
loggingProfiler.profilerStart("ExperimentBean Contructor");
166+
loggingProfiler.profilerStart("ExperimentBean Constructor");
164167

165168
this.itemAgent = itemAgent;
166169
this.materialAgent = materialAgent;
@@ -169,8 +172,9 @@ public ExperimentBean(
169172
this.experimentService = experimentService;
170173
this.messagePresenter = messagePresenter;
171174
this.expRecordService = expRecordService;
175+
this.aclistService = acListService;
172176

173-
loggingProfiler.profilerStop("ExperimentBean Contructor");
177+
loggingProfiler.profilerStop("ExperimentBean Constructor");
174178

175179
}
176180

@@ -197,7 +201,7 @@ public void init() {
197201
}
198202

199203
protected void experimentBeanInit() {
200-
projectController = new ExpProjectController(projectService, currentUser);
204+
projectController = new ExpProjectController(projectService, aclistService, currentUser);
201205
/*
202206
* ToDo: create an experiment with real user and ACL
203207
*/
@@ -334,7 +338,7 @@ public void actionEditRecord(ExpRecord recordIn) {
334338
public void actionStartEditExperiment(Experiment exp) {
335339
creationState = CreationState.EDIT;
336340
this.experiment = exp;
337-
projectController = new ExpProjectController(projectService, currentUser);
341+
projectController = new ExpProjectController(projectService, aclistService, currentUser);
338342
experimentCode = ExperimentCode.createInstanceOfExistingExp(exp.getCode());
339343
loadExpRecords();
340344
}
@@ -346,7 +350,7 @@ public void actionNewExperiment() {
346350
//New exp from template
347351
if (!templateMode || experiment.getId() == null) {
348352
this.expRecords = new ArrayList<>();
349-
projectController = new ExpProjectController(projectService, currentUser);
353+
projectController = new ExpProjectController(projectService, aclistService, currentUser);
350354
initEmptyExperiment();
351355
}
352356
}
@@ -512,7 +516,8 @@ private boolean isExpSelected(Experiment exp) {
512516
}
513517

514518
public boolean isNewExpButtonDisabled() {
515-
return !currentUser.hasShortCut();
519+
ExpProjectController controller = new ExpProjectController(projectService, aclistService, currentUser);
520+
return !currentUser.hasShortCut() || controller.getChoosableProjects().isEmpty();
516521
}
517522

518523
public String getNewExpToolTip() {
@@ -552,6 +557,7 @@ public void adjustOrder(ExpRecord record) {
552557
}
553558

554559
/**
560+
*
555561
*/
556562
public void cleanup() {
557563
this.expRecordController = new NullController(this);
@@ -673,7 +679,7 @@ public String getExpRecordStyle(ExpRecord record, boolean even) {
673679

674680
if ((lastSavedExpRecord != null) && (record.getExpRecordId() != null)
675681
&& (record.getExpRecordId()
676-
.equals(lastSavedExpRecord.getExpRecordId()))) {
682+
.equals(lastSavedExpRecord.getExpRecordId()))) {
677683
sj.add(expRecordLastSavedCssClass);
678684
}
679685

ui/src/main/java/de/ipb_halle/lbac/exp/ExperimentCode.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
package de.ipb_halle.lbac.exp;
1919

2020
/**
21-
*
2221
* @author fmauz
2322
*/
2423
public class ExperimentCode {
@@ -33,6 +32,10 @@ private ExperimentCode() {
3332

3433
}
3534

35+
public String getPrefix() {
36+
return prefix;
37+
}
38+
3639
public void setPrefix(String prefix) {
3740
this.prefix = prefix;
3841
}
@@ -45,11 +48,7 @@ public void setSuffix(String suffix) {
4548
this.suffix = suffix;
4649
}
4750

48-
public String getPrefix() {
49-
return prefix;
50-
}
5151

52-
5352
public String generateNewExperimentCode(int expNumber) {
5453
return prefix.replace(numberPattern, String.format(numberFormat, expNumber)) + seperator + suffix;
5554
}
@@ -69,9 +68,9 @@ public static ExperimentCode createInstanceOfExistingExp(String expCode) {
6968
throw new RuntimeException("Experimentcode not valide. Must contain a '-'");
7069
}
7170
ExperimentCode code = new ExperimentCode();
72-
int indexOfFirstSeperator= expCode.indexOf(code.seperator);
71+
int indexOfFirstSeperator = expCode.indexOf(code.seperator);
7372
code.setPrefix(expCode.substring(0, indexOfFirstSeperator));
74-
code.setSuffix(expCode.substring(indexOfFirstSeperator+1));
73+
code.setSuffix(expCode.substring(indexOfFirstSeperator + 1));
7574
return code;
7675
}
7776

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package de.ipb_halle.lbac.exp;
2+
3+
4+
import jakarta.faces.application.FacesMessage;
5+
import jakarta.faces.component.UIComponent;
6+
import jakarta.faces.context.FacesContext;
7+
import jakarta.faces.validator.FacesValidator;
8+
import jakarta.faces.validator.Validator;
9+
import jakarta.faces.validator.ValidatorException;
10+
11+
@FacesValidator("experimentCodeValidator")
12+
public class ExperimentCodeValidator implements Validator<String> {
13+
14+
@Override
15+
public void validate(FacesContext facesContext, UIComponent uiComponent, String s) throws ValidatorException {
16+
if (s == null || s.trim().isEmpty()) {
17+
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Validation failed", "Experiment Code is required.");
18+
throw new ValidatorException(msg);
19+
}
20+
}
21+
}

ui/src/main/java/de/ipb_halle/lbac/exp/ProjectConverter.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
*/
1818
package de.ipb_halle.lbac.exp;
1919

20+
import de.ipb_halle.lbac.admission.ACList;
21+
import de.ipb_halle.lbac.admission.ACListService;
2022
import de.ipb_halle.lbac.admission.UserBean;
2123
import de.ipb_halle.lbac.project.Project;
2224
import de.ipb_halle.lbac.project.ProjectService;
@@ -34,6 +36,9 @@
3436
@FacesConverter(value = "ProjectConverter")
3537
public class ProjectConverter implements Converter {
3638

39+
@Inject
40+
private ACListService acListService;
41+
3742
@Inject
3843
ProjectService service;
3944

@@ -42,7 +47,7 @@ public class ProjectConverter implements Converter {
4247

4348
@Override
4449
public Project getAsObject(FacesContext fc, UIComponent uic, String string) throws ConverterException {
45-
ExpProjectController projectController = new ExpProjectController(service, userBean.getCurrentAccount());
50+
ExpProjectController projectController = new ExpProjectController(service, acListService, userBean.getCurrentAccount());
4651
Project p = projectController.getProjectByName(string);
4752
return p;
4853
}

ui/src/test/java/de/ipb_halle/lbac/datalink/LinkCreationProcessTest.java

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,25 @@
1717
*/
1818
package de.ipb_halle.lbac.datalink;
1919

20+
import de.ipb_halle.lbac.admission.ACListService;
2021
import de.ipb_halle.lbac.admission.GlobalAdmissionContext;
2122
import de.ipb_halle.lbac.admission.LoginEvent;
2223
import de.ipb_halle.lbac.admission.User;
23-
import de.ipb_halle.lbac.exp.*;
2424
import de.ipb_halle.lbac.admission.UserBeanDeployment;
2525
import de.ipb_halle.lbac.base.ProjectCreator;
2626
import de.ipb_halle.lbac.base.TestBase;
27+
import de.ipb_halle.lbac.exp.*;
2728
import de.ipb_halle.lbac.exp.assay.AssayService;
2829
import de.ipb_halle.lbac.exp.text.TextService;
2930
import de.ipb_halle.lbac.items.ItemDeployment;
3031
import de.ipb_halle.lbac.items.service.ItemService;
3132
import de.ipb_halle.lbac.material.common.service.MaterialService;
32-
import de.ipb_halle.lbac.material.mocks.MessagePresenterMock;
3333
import de.ipb_halle.lbac.project.Project;
3434
import de.ipb_halle.lbac.project.ProjectService;
3535
import de.ipb_halle.lbac.project.ProjectType;
3636
import de.ipb_halle.testcontainers.PostgresqlContainerExtension;
37-
import java.util.ArrayList;
3837
import jakarta.faces.component.UIComponentBase;
3938
import jakarta.inject.Inject;
40-
4139
import org.jboss.arquillian.container.test.api.Deployment;
4240
import org.jboss.arquillian.junit5.ArquillianExtension;
4341
import org.jboss.shrinkwrap.api.spec.WebArchive;
@@ -47,6 +45,9 @@
4745
import org.junit.jupiter.api.extension.ExtendWith;
4846
import org.primefaces.event.FlowEvent;
4947

48+
import java.util.ArrayList;
49+
import java.util.List;
50+
5051
/**
5152
*
5253
* @author fmauz
@@ -57,6 +58,9 @@ public class LinkCreationProcessTest extends TestBase {
5758

5859
private LinkCreationProcess linkCreationProcess;
5960
private ExperimentBean experimentBean;
61+
62+
@Inject
63+
private ACListService acListService;
6064
@Inject
6165
private MaterialAgent materialAgent;
6266
@Inject
@@ -76,27 +80,28 @@ public class LinkCreationProcessTest extends TestBase {
7680
@Inject
7781
private ItemService itemService;
7882

79-
private User publicUser;
8083
private int materialId, materialId2, materialId3;
8184
private int itemId;
8285

8386
@BeforeEach
8487
public void init() {
85-
publicUser = memberService.loadUserById(GlobalAdmissionContext.PUBLIC_ACCOUNT_ID);
88+
// publicUser = memberService.loadUserById(GlobalAdmissionContext.PUBLIC_ACCOUNT_ID);
8689
Project project = new ProjectCreator(projectService, GlobalAdmissionContext.getPublicReadACL())
8790
.setProjectName("LinkCreationProcessTest_Project")
8891
.setType(ProjectType.BIOCHEMICAL_PROJECT)
89-
.createAndSaveProject(publicUser);
90-
experimentBean = new ExperimentBean(itemAgent, materialAgent, context, projectService, expService, getMessagePresenterMock(), expRecService);
91-
LoginEvent event = new LoginEvent(publicUser);
92+
.createAndSaveProject(adminUser);
93+
experimentBean = new ExperimentBean(itemAgent, materialAgent, context, projectService,
94+
expService, getMessagePresenterMock(), expRecService, acListService);
95+
LoginEvent event = new LoginEvent(adminUser);
9296
experimentBean.setCurrentAccount(event);
97+
experimentBean.init();
9398
linkCreationProcess = new LinkCreationProcess(materialAgent, itemAgent, experimentBean);
9499
linkCreationProcess.init();
95-
materialId = materialCreator.createStructure(publicUser.getId(), GlobalAdmissionContext.getPublicReadACL().getId(), null, "LinkCreationProcessTest_M1");
96-
materialId2 = materialCreator.createStructure(publicUser.getId(), GlobalAdmissionContext.getPublicReadACL().getId(), null, "LinkCreationProcessTest_M2");
97-
materialId3 = materialCreator.createStructure(publicUser.getId(), GlobalAdmissionContext.getPublicReadACL().getId(), null, "LinkCreationProcessTest_M3");
100+
materialId = materialCreator.createStructure(adminUser.getId(), GlobalAdmissionContext.getPublicReadACL().getId(), null, "LinkCreationProcessTest_M1");
101+
materialId2 = materialCreator.createStructure(adminUser.getId(), GlobalAdmissionContext.getPublicReadACL().getId(), null, "LinkCreationProcessTest_M2");
102+
materialId3 = materialCreator.createStructure(adminUser.getId(), GlobalAdmissionContext.getPublicReadACL().getId(), null, "LinkCreationProcessTest_M3");
98103
itemId = itemCreator.createItem(
99-
publicUser.getId(),
104+
adminUser.getId(),
100105
GlobalAdmissionContext.getPublicReadACL().getId(),
101106
materialId,
102107
"LinkCreationProcessTest_I1",
@@ -181,6 +186,7 @@ public static WebArchive createDeployment() {
181186
.addClass(AssayService.class)
182187
.addClass(TextService.class)
183188
.addClass(MaterialService.class)
189+
.addClass(ACListService.class)
184190
.addClass(ProjectService.class);
185191
return ExperimentDeployment.add(UserBeanDeployment.add(ItemDeployment.add(deployment)));
186192
}
@@ -189,7 +195,9 @@ private void prepareLinkCreation() {
189195
linkCreationProcess.startLinkCreation();
190196
experimentBean.actionNewExperiment();
191197
experimentBean.getExperiment().setCode("LinkCreationProcessTest_EXP1");
192-
experimentBean.getProjectController().setChoosenProject(experimentBean.getProjectController().getChoosableProjects().get(0));
198+
ExpProjectController epc = experimentBean.getProjectController();
199+
List<Project> projects = epc.getChoosableProjects();
200+
epc.setChoosenProject(projects.get(0));
193201
experimentBean.actionSaveExperiment();
194202
experimentBean.actionNewExperimentRecord("TEXT", 0);
195203
}

0 commit comments

Comments
 (0)