Skip to content

Commit ec2549b

Browse files
thomaslowsolth
andauthored
Refactor Bean Scopes: Project, Template, Workflow, Docket, Ruleset forms (#6847)
* Refactor bean scopes of user, client, ldap server, ldap group, authority and role form. * Replace constructor with init method in AuthorityListView. * Remove LdapGroupEditView constructor. * Remove constructor in LdapServerListView. * Improve javadoc. * Navigate to respective list view tab after editing an ldap group or server. * Switch to appropriate tab via tabIndex query parameter. * Use Javascript to update tabIndex query parameter when switching tabs. * Update activeTabIndex to use UsersTabView. * Fix codacy errors. * Update user edit view metadata tab after merge with pagination editor improvements. * Move session scoped keepPagination logic into URL query parameter remembering row index of referred list view. * Encode list view sort state as URL query parameters such that they can be restored after navigating back from an edit view. * Fix filter menu in user list view. * Add missing @OverRide annotations. * Fix selenium tests due to addtional list view url query paramaters in edit links. * Encode current user list filter as query parameter such that is persists between reloads and when editing a user. * Fix newly saved filters are not listed. * Add more javadoc. * Replace referrerFirstRow view parameter with updated referrerListOptions in authority edit view and role list view. * Refactor bean scopes to view scoped for project, template, workflow docket, ruleset list and edit views. * Remove unused method in ProjectsTabView. * Fix project list sortField in DesktopForm after removing sort field mapping of deprecated "title.keyword" field used before HibernateSearch update. * Merge branch 'refactor-bean-scopes-user-form' into refactor-bean-scopes-project-forms * Update projects tab view to use named tab URL parameter instead of tabIndex. * Apply suggestions from @solth Co-authored-by: Arved Solth <solth@effective-webwork.de> * Remove unused method in WorkflowListView. Add missing Javadoc. * Remove unused import. * Remove unused import. * Remove unused import. --------- Co-authored-by: Arved Solth <solth@effective-webwork.de>
1 parent 52cd832 commit ec2549b

File tree

60 files changed

+1576
-989
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+1576
-989
lines changed

Kitodo/src/main/java/org/kitodo/production/forms/DesktopForm.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ public List<Process> getProcesses() {
116116
public List<Project> getProjects() {
117117
try {
118118
if (ServiceManager.getSecurityAccessService().hasAuthorityToViewProjectList() && projectList.isEmpty()) {
119-
projectList = ServiceManager.getProjectService().loadData(0, 10, SORT_TITLE, SortOrder.ASCENDING, null);
119+
projectList = ServiceManager.getProjectService().loadData(0, 10, "title", SortOrder.ASCENDING, null);
120120
}
121121
} catch (DAOException | JsonException e) {
122122
Helper.setErrorMessage(ERROR_LOADING_MANY, new Object[] {ObjectType.PROJECT.getTranslationPlural() },

Kitodo/src/main/java/org/kitodo/production/forms/DocketForm.java renamed to Kitodo/src/main/java/org/kitodo/production/forms/DocketEditView.java

Lines changed: 14 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@
2323
import java.util.stream.Collectors;
2424
import java.util.stream.Stream;
2525

26-
import jakarta.enterprise.context.SessionScoped;
27-
import jakarta.inject.Inject;
26+
import jakarta.faces.view.ViewScoped;
2827
import jakarta.inject.Named;
2928

3029
import org.apache.logging.log4j.LogManager;
@@ -35,48 +34,17 @@
3534
import org.kitodo.data.database.exceptions.DAOException;
3635
import org.kitodo.production.enums.ObjectType;
3736
import org.kitodo.production.helper.Helper;
38-
import org.kitodo.production.model.LazyBeanModel;
3937
import org.kitodo.production.services.ServiceManager;
40-
import org.primefaces.model.SortMeta;
41-
import org.primefaces.model.SortOrder;
4238

43-
@Named("DocketForm")
44-
@SessionScoped
45-
public class DocketForm extends BaseForm {
46-
private Docket docket = new Docket();
47-
private static final Logger logger = LogManager.getLogger(DocketForm.class);
48-
49-
private final String docketEditPath = MessageFormat.format(REDIRECT_PATH, "docketEdit");
39+
@Named("DocketEditView")
40+
@ViewScoped
41+
public class DocketEditView extends BaseEditView {
5042

51-
@Named("ProjectForm")
52-
private final ProjectForm projectForm;
53-
54-
/**
55-
* Default constructor with inject project form that also sets the
56-
* LazyBeanModel instance of this bean.
57-
*
58-
* @param projectForm
59-
* managed bean
60-
*/
61-
@Inject
62-
public DocketForm(ProjectForm projectForm) {
63-
super();
64-
super.setLazyBeanModel(new LazyBeanModel(ServiceManager.getDocketService()));
65-
this.projectForm = projectForm;
66-
sortBy = SortMeta.builder().field("title.keyword").order(SortOrder.ASCENDING).build();
67-
}
68-
69-
/**
70-
* Creates a new Docket.
71-
*
72-
* @return the navigation String
73-
*/
74-
public String newDocket() {
75-
this.docket = new Docket();
76-
this.docket.setClient(ServiceManager.getUserService().getSessionClientOfAuthenticatedUser());
77-
return docketEditPath;
78-
}
43+
public static final String VIEW_PATH = MessageFormat.format(REDIRECT_PATH, "docketEdit");
7944

45+
private Docket docket = new Docket();
46+
private static final Logger logger = LogManager.getLogger(DocketEditView.class);
47+
8048
/**
8149
* Save docket.
8250
*
@@ -90,7 +58,7 @@ public String save() {
9058
return this.stayOnCurrentPage;
9159
}
9260
ServiceManager.getDocketService().save(docket);
93-
return projectsPage;
61+
return DocketListView.VIEW_PATH + "&" + getReferrerListOptions();
9462
} else {
9563
Helper.setErrorMessage("docketNotFound");
9664
return this.stayOnCurrentPage;
@@ -106,22 +74,6 @@ private boolean hasValidRulesetFilePath(Docket d, String pathToRulesets) {
10674
return rulesetFile.exists();
10775
}
10876

109-
/**
110-
* Delete docket.
111-
*/
112-
public void delete() {
113-
try {
114-
if (hasAssignedProcessesOrTemplates(this.docket.getId())) {
115-
Helper.setErrorMessage("docketInUse");
116-
} else {
117-
ServiceManager.getDocketService().remove(this.docket);
118-
}
119-
} catch (DAOException e) {
120-
Helper.setErrorMessage(ERROR_DELETING, new Object[] {ObjectType.DOCKET.getTranslationSingular() }, logger,
121-
e);
122-
}
123-
}
124-
12577
private boolean existsDocketWithSameName() {
12678
List<Docket> dockets = ServiceManager.getDocketService().getByTitle(this.docket.getTitle());
12779
if (dockets.isEmpty()) {
@@ -139,11 +91,6 @@ private boolean existsDocketWithSameName() {
13991
}
14092
}
14193

142-
private boolean hasAssignedProcessesOrTemplates(int docketId) throws DAOException {
143-
return !ServiceManager.getProcessService().findByDocket(docketId).isEmpty()
144-
|| !ServiceManager.getTemplateService().findByDocket(docketId).isEmpty();
145-
}
146-
14794
/**
14895
* Method being used as viewAction for docket edit form.
14996
*
@@ -153,7 +100,12 @@ private boolean hasAssignedProcessesOrTemplates(int docketId) throws DAOExceptio
153100
public void load(int id) {
154101
try {
155102
if (!Objects.equals(id, 0)) {
103+
// load existing docket
156104
setDocket(ServiceManager.getDocketService().getById(id));
105+
} else {
106+
// new docket
107+
this.docket = new Docket();
108+
this.docket.setClient(ServiceManager.getUserService().getSessionClientOfAuthenticatedUser());
157109
}
158110
setSaveDisabled(true);
159111
} catch (DAOException e) {
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
/*
2+
* (c) Kitodo. Key to digital objects e. V. <contact@kitodo.org>
3+
*
4+
* This file is part of the Kitodo project.
5+
*
6+
* It is licensed under GNU General Public License version 3 or later.
7+
*
8+
* For the full copyright and license information, please read the
9+
* GPL3-License.txt file that was distributed with this source code.
10+
*/
11+
12+
package org.kitodo.production.forms;
13+
14+
import java.text.MessageFormat;
15+
import java.util.ArrayList;
16+
import java.util.Set;
17+
18+
import jakarta.annotation.PostConstruct;
19+
import jakarta.faces.view.ViewScoped;
20+
import jakarta.inject.Named;
21+
22+
import org.apache.logging.log4j.LogManager;
23+
import org.apache.logging.log4j.Logger;
24+
import org.kitodo.data.database.beans.Docket;
25+
import org.kitodo.data.database.exceptions.DAOException;
26+
import org.kitodo.production.enums.ObjectType;
27+
import org.kitodo.production.helper.Helper;
28+
import org.kitodo.production.model.LazyBeanModel;
29+
import org.kitodo.production.services.ServiceManager;
30+
import org.primefaces.model.SortMeta;
31+
import org.primefaces.model.SortOrder;
32+
33+
@Named("DocketListView")
34+
@ViewScoped
35+
public class DocketListView extends BaseListView {
36+
37+
public static final String VIEW_PATH = MessageFormat.format(REDIRECT_PATH, "projects") + "&tab=docketTab";
38+
39+
private static final Logger logger = LogManager.getLogger(DocketListView.class);
40+
41+
/**
42+
* Initialize Docket form.
43+
*/
44+
@PostConstruct
45+
public void init() {
46+
setLazyBeanModel(new LazyBeanModel(ServiceManager.getDocketService()));
47+
sortBy = SortMeta.builder().field("title").order(SortOrder.ASCENDING).build();
48+
49+
columns = new ArrayList<>();
50+
try {
51+
columns.add(ServiceManager.getListColumnService().getListColumnsForListAsSelectItemGroup("docket"));
52+
} catch (DAOException e) {
53+
Helper.setErrorMessage(e.getLocalizedMessage(), logger, e);
54+
}
55+
selectedColumns = ServiceManager.getListColumnService().getSelectedListColumnsForListAndClient("docket");
56+
}
57+
58+
/**
59+
* Creates a new Docket.
60+
*
61+
* @return the navigation String
62+
*/
63+
public String newDocket() {
64+
return DocketEditView.VIEW_PATH;
65+
}
66+
67+
/**
68+
* Delete docket.
69+
*/
70+
public void delete(Docket docket) {
71+
try {
72+
if (hasAssignedProcessesOrTemplates(docket.getId())) {
73+
Helper.setErrorMessage("docketInUse");
74+
} else {
75+
ServiceManager.getDocketService().remove(docket);
76+
}
77+
} catch (DAOException e) {
78+
Helper.setErrorMessage(ERROR_DELETING, new Object[] {ObjectType.DOCKET.getTranslationSingular() }, logger,
79+
e);
80+
}
81+
}
82+
83+
private boolean hasAssignedProcessesOrTemplates(int docketId) throws DAOException {
84+
return !ServiceManager.getProcessService().findByDocket(docketId).isEmpty()
85+
|| !ServiceManager.getTemplateService().findByDocket(docketId).isEmpty();
86+
}
87+
88+
/**
89+
* The set of allowed sort fields (columns) to sanitize the URL query parameter "sortField".
90+
*
91+
* @return the set of allowed sort fields (columns)
92+
*/
93+
@Override
94+
protected Set<String> getAllowedSortFields() {
95+
return Set.of("title", "file");
96+
}
97+
98+
}

Kitodo/src/main/java/org/kitodo/production/forms/ImportConfigurationEditView.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
package org.kitodo.production.forms;
1313

14+
import java.text.MessageFormat;
1415
import java.util.ArrayList;
1516
import java.util.Collections;
1617
import java.util.Comparator;
@@ -44,7 +45,9 @@
4445

4546
@Named
4647
@ViewScoped
47-
public class ImportConfigurationEditView extends BaseForm {
48+
public class ImportConfigurationEditView extends BaseEditView {
49+
50+
public static final String VIEW_PATH = MessageFormat.format(REDIRECT_PATH, "importConfigurationEdit");
4851

4952
private static final Logger logger = LogManager.getLogger(ImportConfigurationEditView.class);
5053
private ImportConfiguration importConfiguration = new ImportConfiguration();
@@ -122,7 +125,7 @@ public void load(int id) {
122125
public String save() {
123126
try {
124127
ServiceManager.getImportConfigurationService().save(importConfiguration);
125-
return projectsPage;
128+
return ImportConfigurationListView.VIEW_PATH + "&" + getReferrerListOptions();
126129
} catch (DAOException e) {
127130
Helper.setErrorMessage(ERROR_SAVING,
128131
new Object[] {ObjectType.IMPORT_CONFIGURATION.getTranslationSingular()}, logger, e);

Kitodo/src/main/java/org/kitodo/production/forms/ImportConfigurationListView.java

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
import java.text.MessageFormat;
1515
import java.util.ArrayList;
1616
import java.util.List;
17+
import java.util.Set;
1718

19+
import jakarta.annotation.PostConstruct;
1820
import jakarta.faces.view.ViewScoped;
1921
import jakarta.inject.Named;
2022

@@ -28,20 +30,23 @@
2830
import org.kitodo.exceptions.ImportConfigurationInUseException;
2931
import org.kitodo.production.enums.ObjectType;
3032
import org.kitodo.production.helper.Helper;
33+
import org.kitodo.production.model.LazyBeanModel;
3134
import org.kitodo.production.services.ServiceManager;
3235
import org.primefaces.PrimeFaces;
3336
import org.primefaces.model.SortMeta;
3437
import org.primefaces.model.SortOrder;
3538

3639
@Named("ImportConfigurationListView")
3740
@ViewScoped
38-
public class ImportConfigurationListView extends BaseForm {
41+
public class ImportConfigurationListView extends BaseListView {
42+
43+
public static final String VIEW_PATH = MessageFormat.format(REDIRECT_PATH, "projects") + "&tab=importConfigurationsTab";
3944

4045
private static final Logger logger = LogManager.getLogger(ImportConfigurationListView.class);
41-
private final String importConfigurationEditPath = MessageFormat.format(REDIRECT_PATH, "importConfigurationEdit");
4246

43-
public ImportConfigurationListView() {
44-
super();
47+
@PostConstruct
48+
public void init() {
49+
setLazyBeanModel(new LazyBeanModel(ServiceManager.getImportConfigurationService()));
4550
sortBy = SortMeta.builder().field("title").order(SortOrder.ASCENDING).build();
4651
}
4752

@@ -66,7 +71,7 @@ public List<ImportConfiguration> getImportConfigurations() {
6671
* @return path to 'importConfigurationEdit' view
6772
*/
6873
public String newImportConfiguration() {
69-
return importConfigurationEditPath;
74+
return ImportConfigurationEditView.VIEW_PATH;
7075
}
7176

7277
/**
@@ -99,4 +104,14 @@ public void startCatalogConfigurationImport() {
99104
Helper.setErrorMessage(e.getMessage());
100105
}
101106
}
107+
108+
/**
109+
* The set of allowed sort fields (columns) to sanitize the URL query parameter "sortField".
110+
*
111+
* @return the set of allowed sort fields (columns)
112+
*/
113+
@Override
114+
protected Set<String> getAllowedSortFields() {
115+
return Set.of("title", "configurationType", "interfaceType", "metadataFormat", "defaultImportDepth");
116+
}
102117
}

Kitodo/src/main/java/org/kitodo/production/forms/LtpValidationConfigurationEditView.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
package org.kitodo.production.forms;
1313

14+
import java.text.MessageFormat;
1415
import java.util.ArrayList;
1516
import java.util.Collections;
1617
import java.util.List;
@@ -42,7 +43,9 @@
4243

4344
@Named("LtpValidationConfigurationEditView")
4445
@ViewScoped
45-
public class LtpValidationConfigurationEditView extends BaseForm {
46+
public class LtpValidationConfigurationEditView extends BaseEditView {
47+
48+
public static final String VIEW_PATH = MessageFormat.format(REDIRECT_PATH, "ltpValidationConfigurationEdit");
4649

4750
private static final Logger logger = LogManager.getLogger(LtpValidationConfigurationEditView.class);
4851
private LtpValidationConfiguration configuration = new LtpValidationConfiguration();
@@ -111,7 +114,7 @@ public void load(int id) {
111114
public String save() {
112115
try {
113116
ServiceManager.getLtpValidationConfigurationService().save(configuration);
114-
return projectsPage;
117+
return LtpValidationConfigurationListView.VIEW_PATH + "&" + getReferrerListOptions();
115118
} catch (DAOException e) {
116119
Helper.setErrorMessage(ERROR_SAVING,
117120
new Object[] {ObjectType.LTP_VALIDATION_CONFIGURATION.getTranslationSingular() }, logger, e);

Kitodo/src/main/java/org/kitodo/production/forms/LtpValidationConfigurationListView.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.text.MessageFormat;
1515
import java.util.ArrayList;
1616
import java.util.List;
17+
import java.util.Set;
1718

1819
import jakarta.faces.view.ViewScoped;
1920
import jakarta.inject.Named;
@@ -31,11 +32,12 @@
3132

3233
@Named("LtpValidationConfigurationListView")
3334
@ViewScoped
34-
public class LtpValidationConfigurationListView extends BaseForm {
35+
public class LtpValidationConfigurationListView extends BaseListView {
36+
37+
public static final String VIEW_PATH = MessageFormat.format(REDIRECT_PATH, "projects") + "&tab=ltpValidationConfigurationsTab";
3538

3639
private static final Logger logger = LogManager.getLogger(LtpValidationConfigurationListView.class);
37-
private final String ltpValidationConfigurationEditPath = MessageFormat.format(REDIRECT_PATH,
38-
"ltpValidationConfigurationEdit");
40+
3941

4042
/**
4143
* Empty default constructor that also sets the LazyBeanModel instance of
@@ -68,7 +70,7 @@ public List<LtpValidationConfiguration> getLtpValidationConfigurations() {
6870
* @return path to 'ltpValidationConfigurationEdit' view
6971
*/
7072
public String newLtpValidationConfiguration() {
71-
return ltpValidationConfigurationEditPath;
73+
return LtpValidationConfigurationEditView.VIEW_PATH;
7274
}
7375

7476
/**
@@ -86,4 +88,14 @@ public void deleteById(int id) {
8688
}
8789
}
8890

91+
/**
92+
* The set of allowed sort fields (columns) to sanitize the URL query parameter "sortField".
93+
*
94+
* @return the set of allowed sort fields (columns)
95+
*/
96+
@Override
97+
protected Set<String> getAllowedSortFields() {
98+
return Set.of("title", "mimeType");
99+
}
100+
89101
}

0 commit comments

Comments
 (0)