Skip to content

Commit d014cad

Browse files
committed
MCR-3581 Improve factory methods in mycore-acl
1 parent 63f03c8 commit d014cad

17 files changed

+264
-66
lines changed

mycore-acl/src/main/java/org/mycore/mcr/acl/accesskey/MCRAccessKeyEventHandler.java

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@
2929
import org.mycore.datamodel.metadata.MCRObjectService;
3030
import org.mycore.mcr.acl.accesskey.dto.MCRAccessKeyDto;
3131
import org.mycore.mcr.acl.accesskey.mapper.MCRAccessKeyJsonMapper;
32-
import org.mycore.mcr.acl.accesskey.service.MCRAccessKeyServiceFactory;
32+
import org.mycore.mcr.acl.accesskey.service.MCRAccessKeyService;
33+
import org.mycore.mcr.acl.accesskey.service.MCRAccessKeyServiceProvider;
3334

3435
/**
3536
* Event handler for managing access keys in the context of MyCoRe objects and derivates.
@@ -41,6 +42,25 @@ public class MCRAccessKeyEventHandler extends MCREventHandlerBase {
4142
*/
4243
public static final String ACCESS_KEY_FLAG_TYPE = "accesskeys";
4344

45+
private final MCRAccessKeyService accessKeyService;
46+
47+
/**
48+
* Creates a new {@link MCRAccessKeyEventHandler} using the default
49+
* {@link MCRAccessKeyService} instance.
50+
*/
51+
public MCRAccessKeyEventHandler() {
52+
this(MCRAccessKeyServiceProvider.obtainInstance());
53+
}
54+
55+
/**
56+
* Creates a new {@link MCRAccessKeyEventHandler} with the specified access key service.
57+
*
58+
* @param accessKeyService the {@link MCRAccessKeyService} used to manage access key events
59+
*/
60+
public MCRAccessKeyEventHandler(MCRAccessKeyService accessKeyService) {
61+
this.accessKeyService = accessKeyService;
62+
}
63+
4464
@Override
4565
protected void handleObjectCreated(MCREvent evt, MCRObject obj) {
4666
handleBaseCreated(obj);
@@ -77,7 +97,7 @@ private void handleBaseCreated(final MCRBase obj) {
7797
.map(MCRAccessKeyJsonMapper::jsonToAccessKeyDtos).flatMap(Collection::stream).toList();
7898
for (MCRAccessKeyDto accessKeyDto : accessKeyDtos) {
7999
accessKeyDto.setReference(obj.getId().toString());
80-
MCRAccessKeyServiceFactory.getAccessKeyService().importAccessKey(accessKeyDto);
100+
accessKeyService.importAccessKey(accessKeyDto);
81101
}
82102
service.removeFlags(ACCESS_KEY_FLAG_TYPE);
83103
}
@@ -87,6 +107,6 @@ private void handleBaseUpdated(MCRBase obj) {
87107
}
88108

89109
private void handleBaseDeleted(MCRBase obj) {
90-
MCRAccessKeyServiceFactory.getAccessKeyService().removeAccessKeysByReference(obj.getId().toString());
110+
accessKeyService.removeAccessKeysByReference(obj.getId().toString());
91111
}
92112
}

mycore-acl/src/main/java/org/mycore/mcr/acl/accesskey/MCRAccessKeyURIResolver.java

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
import org.mycore.mcr.acl.accesskey.dto.MCRAccessKeyDto;
2929
import org.mycore.mcr.acl.accesskey.mapper.MCRAccessKeyJsonMapper;
3030
import org.mycore.mcr.acl.accesskey.model.MCRAccessKey;
31-
import org.mycore.mcr.acl.accesskey.service.MCRAccessKeyServiceFactory;
31+
import org.mycore.mcr.acl.accesskey.service.MCRAccessKeyService;
32+
import org.mycore.mcr.acl.accesskey.service.MCRAccessKeyServiceProvider;
3233

3334
/**
3435
* Returns a JSON string with all {@link MCRAccessKey} for an given reference.
@@ -41,11 +42,29 @@ public class MCRAccessKeyURIResolver implements URIResolver {
4142

4243
private static final String ELEMENT_NAME = "accesskeys";
4344

45+
private final MCRAccessKeyService accessKeyService;
46+
47+
/**
48+
* Creates a new {@link MCRAccessKeyURIResolver} using the default
49+
* {@link MCRAccessKeyService} instance.
50+
*/
51+
public MCRAccessKeyURIResolver() {
52+
this(MCRAccessKeyServiceProvider.obtainInstance());
53+
}
54+
55+
/**
56+
* Creates a new {@link MCRAccessKeyURIResolver} with the specified access key service.
57+
*
58+
* @param accessKeyService the {@link MCRAccessKeyService} used to manage access key events
59+
*/
60+
public MCRAccessKeyURIResolver(MCRAccessKeyService accessKeyService) {
61+
this.accessKeyService = accessKeyService;
62+
}
63+
4464
@Override
4565
public Source resolve(String href, String base) {
4666
final String reference = extractReferenceFromHref(href);
47-
final List<MCRAccessKeyDto> accessKeyDtos
48-
= MCRAccessKeyServiceFactory.getAccessKeyService().findAccessKeysByReference(reference);
67+
final List<MCRAccessKeyDto> accessKeyDtos = accessKeyService.findAccessKeysByReference(reference);
4968
final String json = MCRAccessKeyJsonMapper.accessKeyDtosToJson(accessKeyDtos);
5069
return createResultSource(json, accessKeyDtos.size());
5170
}

mycore-acl/src/main/java/org/mycore/mcr/acl/accesskey/cli/MCRAccessKeyCommands.java

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818

1919
package org.mycore.mcr.acl.accesskey.cli;
2020

21-
import static java.nio.charset.StandardCharsets.UTF_8;
22-
2321
import java.io.IOException;
2422
import java.nio.file.Files;
2523
import java.nio.file.Path;
@@ -33,7 +31,11 @@
3331
import org.mycore.mcr.acl.accesskey.exception.MCRAccessKeyException;
3432
import org.mycore.mcr.acl.accesskey.exception.MCRAccessKeyNotFoundException;
3533
import org.mycore.mcr.acl.accesskey.mapper.MCRAccessKeyJsonMapper;
36-
import org.mycore.mcr.acl.accesskey.service.MCRAccessKeyServiceFactory;
34+
import org.mycore.mcr.acl.accesskey.service.MCRAccessKeyService;
35+
import org.mycore.mcr.acl.accesskey.service.MCRAccessKeyServiceProvider;
36+
import org.mycore.mcr.acl.accesskey.service.MCRAccessKeyUserService;
37+
38+
import static java.nio.charset.StandardCharsets.UTF_8;
3739

3840
/**
3941
* Command class for managing access keys in the system.
@@ -43,14 +45,16 @@ public class MCRAccessKeyCommands {
4345

4446
private static final Logger LOGGER = LogManager.getLogger();
4547

48+
private static final MCRAccessKeyService SERVICE = MCRAccessKeyServiceProvider.obtainInstance();
49+
4650
/**
4751
* Removes all access keys.
4852
*
49-
* @see org.mycore.mcr.acl.accesskey.service.MCRAccessKeyServiceImpl#removeAllAccessKeys()
53+
* @see org.mycore.mcr.acl.accesskey.service.MCRAccessKeyService#removeAllAccessKeys()
5054
*/
5155
@MCRCommand(syntax = "clear all access keys", help = "Clears all access keys")
5256
public static void removeAllAccessKeys() {
53-
MCRAccessKeyServiceFactory.getAccessKeyService().removeAllAccessKeys();
57+
SERVICE.removeAllAccessKeys();
5458
LOGGER.info("Cleared all access keys.");
5559
}
5660

@@ -61,7 +65,7 @@ public static void removeAllAccessKeys() {
6165
*/
6266
@MCRCommand(syntax = "clear all access keys for {0}", help = "Clears all access keys for reference {0}")
6367
public static void removeAccessKeysByReference(String reference) {
64-
MCRAccessKeyServiceFactory.getAccessKeyService().removeAccessKeysByReference(reference);
68+
SERVICE.removeAccessKeysByReference(reference);
6569
LOGGER.info("Cleared all access keys of {}.", reference);
6670
}
6771

@@ -78,7 +82,7 @@ public static void removeAccessKeysByReference(String reference) {
7882
public static void createAccessKey(String reference, String path) throws IOException {
7983
final MCRAccessKeyDto accessKeyDto = readAccessKeyFromFile(path);
8084
accessKeyDto.setReference(reference);
81-
MCRAccessKeyServiceFactory.getAccessKeyService().addAccessKey(accessKeyDto);
85+
SERVICE.addAccessKey(accessKeyDto);
8286
LOGGER.info("Created access key for {}.", reference);
8387
}
8488

@@ -95,12 +99,11 @@ public static void createAccessKey(String reference, String path) throws IOExcep
9599
help = "Updates an access key for reference {0} with (hashed) secret {1} from file {2} in JSON format")
96100
public static void updateAccessKey(String reference, String secret, String path) throws IOException {
97101
final MCRAccessKeyDto accessKeyDto = readAccessKeyFromFile(path);
98-
final MCRAccessKeyDto outdatedAccessKeyDto
99-
= MCRAccessKeyServiceFactory.getAccessKeyService().findAccessKeyByReferenceAndSecret(reference, secret);
102+
final MCRAccessKeyDto outdatedAccessKeyDto = SERVICE.findAccessKeyByReferenceAndSecret(reference, secret);
100103
if (outdatedAccessKeyDto == null) {
101104
throw new MCRAccessKeyNotFoundException("Access key does not exist");
102105
}
103-
MCRAccessKeyServiceFactory.getAccessKeyService().updateAccessKey(outdatedAccessKeyDto.getId(), accessKeyDto);
106+
SERVICE.updateAccessKey(outdatedAccessKeyDto.getId(), accessKeyDto);
104107
LOGGER.info("Updated access key ({}) for {}.", secret, reference);
105108
}
106109

@@ -114,12 +117,11 @@ public static void updateAccessKey(String reference, String secret, String path)
114117
@MCRCommand(syntax = "delete access key for {0} with secret {1}",
115118
help = "Deletes an access key for reference {0} with (processed) secret {1}")
116119
public static void removeAccessKey(String reference, String secret) {
117-
final MCRAccessKeyDto outdatedAccessKeyDto
118-
= MCRAccessKeyServiceFactory.getAccessKeyService().findAccessKeyByReferenceAndSecret(reference, secret);
120+
final MCRAccessKeyDto outdatedAccessKeyDto = SERVICE.findAccessKeyByReferenceAndSecret(reference, secret);
119121
if (outdatedAccessKeyDto == null) {
120122
throw new MCRAccessKeyNotFoundException("Access key does not exist");
121123
}
122-
MCRAccessKeyServiceFactory.getAccessKeyService().removeAccessKey(outdatedAccessKeyDto.getId());
124+
SERVICE.removeAccessKey(outdatedAccessKeyDto.getId());
123125
LOGGER.info("Deleted access key ({}) for {}.", secret, reference);
124126
}
125127

@@ -138,7 +140,7 @@ public static void importAccessKeysFromFile(String reference, String path) throw
138140
final List<MCRAccessKeyDto> accessKeyDtos
139141
= MCRAccessKeyJsonMapper.jsonToAccessKeyDtos(json).stream().peek(a -> a.setReference(reference)).toList();
140142
for (MCRAccessKeyDto accessKeyDto : accessKeyDtos) {
141-
MCRAccessKeyServiceFactory.getAccessKeyService().importAccessKey(accessKeyDto);
143+
SERVICE.importAccessKey(accessKeyDto);
142144
}
143145
LOGGER.info("Imported access keys for {} from file {}.", reference, path);
144146
}
@@ -154,8 +156,7 @@ public static void importAccessKeysFromFile(String reference, String path) throw
154156
@MCRCommand(syntax = "export access keys for {0} to file {1}",
155157
help = "Exports access keys for reference {0} to file {1} in JSON array format")
156158
public static void exportAccessKeysToFile(String reference, String path) throws IOException {
157-
final List<MCRAccessKeyDto> accessKeyDtos
158-
= MCRAccessKeyServiceFactory.getAccessKeyService().findAccessKeysByReference(reference);
159+
final List<MCRAccessKeyDto> accessKeyDtos = SERVICE.findAccessKeysByReference(reference);
159160
final String json = MCRAccessKeyJsonMapper.accessKeyDtosToJson(accessKeyDtos);
160161
Files.writeString(Path.of(path), json, UTF_8);
161162
LOGGER.info("Exported access keys for {} to file {}.", reference, path);
@@ -167,7 +168,7 @@ public static void exportAccessKeysToFile(String reference, String path) throws
167168
@MCRCommand(syntax = "clean up access key user attributes",
168169
help = "Cleans all access key secret attributes of users if the corresponding key does not exist.")
169170
public static void cleanUp() {
170-
MCRAccessKeyServiceFactory.getAccessKeyUserService().cleanUpUserAttributes();
171+
MCRAccessKeyUserService.obtainInstance().cleanUpUserAttributes();
171172
LOGGER.info("Cleaned up access keys.");
172173
}
173174

@@ -179,7 +180,7 @@ public static void cleanUp() {
179180
*/
180181
@MCRCommand(syntax = "hash access key secret {0} for {1}", help = "Hashes secret {0} for reference {1}")
181182
public static void processSecret(String secret, String reference) {
182-
final String result = MCRAccessKeyServiceFactory.getAccessKeyService().processSecret(reference, secret);
183+
final String result = SERVICE.processSecret(reference, secret);
183184
LOGGER.info("Processed secret for {}: '{}'.", reference, result);
184185
}
185186

mycore-acl/src/main/java/org/mycore/mcr/acl/accesskey/frontend/filter/MCRAccessKeyFilter.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import org.mycore.frontend.MCRFrontendUtil;
3030
import org.mycore.frontend.servlets.MCRServlet;
3131
import org.mycore.mcr.acl.accesskey.config.MCRAccessKeyConfig;
32-
import org.mycore.mcr.acl.accesskey.service.MCRAccessKeyServiceFactory;
32+
import org.mycore.mcr.acl.accesskey.service.MCRAccessKeySessionService;
3333

3434
import jakarta.servlet.Filter;
3535
import jakarta.servlet.FilterChain;
@@ -48,6 +48,25 @@ public class MCRAccessKeyFilter implements Filter {
4848

4949
private static final Logger LOGGER = LogManager.getLogger();
5050

51+
private MCRAccessKeySessionService sessionService;
52+
53+
/**
54+
* Creates a new {@link MCRAccessKeyFilter} using the default
55+
* {@link MCRAccessKeySessionService} instance.
56+
*/
57+
public MCRAccessKeyFilter() {
58+
this(MCRAccessKeySessionService.obtainInstance());
59+
}
60+
61+
/**
62+
* Creates a new {@link MCRAccessKeyFilter} with the given session service.
63+
*
64+
* @param sessionService the {@link MCRAccessKeySessionService} used to access and manage access key session
65+
*/
66+
public MCRAccessKeyFilter(MCRAccessKeySessionService sessionService) {
67+
this.sessionService = sessionService;
68+
}
69+
5170
@Override
5271
public void init(FilterConfig filterConfig) {
5372
if (LOGGER.isInfoEnabled() && !MCRAccessKeyConfig.getAllowedSessionPermissionTypes().isEmpty()) {
@@ -69,8 +88,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
6988
MCRServlet.initializeMCRSession(httpServletRequest, getFilterName());
7089
MCRFrontendUtil.configureSession(MCRSessionMgr.getCurrentSession(), httpServletRequest,
7190
(HttpServletResponse) response);
72-
MCRAccessKeyServiceFactory.getAccessKeySessionService()
73-
.activateAccessKey(objectId.toString(), secret);
91+
sessionService.activateAccessKey(objectId.toString(), secret);
7492
} catch (Exception e) {
7593
LOGGER.error("Cannot set access key '{}' for {} to session", secret, objectId, e);
7694
MCRTransactionManager.rollbackTransactions();

mycore-acl/src/main/java/org/mycore/mcr/acl/accesskey/persistence/MCRAccessKeyRepositoryImpl.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,5 +108,4 @@ public void flush() {
108108
private EntityManager getEntityManager() {
109109
return MCREntityManagerProvider.getCurrentEntityManager();
110110
}
111-
112111
}

mycore-acl/src/main/java/org/mycore/mcr/acl/accesskey/restapi/v2/MCRAccessKeyRestHelper.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import org.mycore.mcr.acl.accesskey.dto.MCRAccessKeyDto;
2727
import org.mycore.mcr.acl.accesskey.dto.MCRAccessKeyPartialUpdateDto;
2828
import org.mycore.mcr.acl.accesskey.service.MCRAccessKeyService;
29-
import org.mycore.mcr.acl.accesskey.service.MCRAccessKeyServiceFactory;
29+
import org.mycore.mcr.acl.accesskey.service.MCRAccessKeyServiceProvider;
3030

3131
import jakarta.servlet.http.HttpServletResponse;
3232
import jakarta.ws.rs.core.Response;
@@ -37,6 +37,8 @@
3737
*/
3838
public final class MCRAccessKeyRestHelper {
3939

40+
private static final MCRAccessKeyService SERVICE = MCRAccessKeyServiceProvider.obtainInstance();
41+
4042
private MCRAccessKeyRestHelper() {
4143

4244
}
@@ -53,18 +55,17 @@ private MCRAccessKeyRestHelper() {
5355
*/
5456
public static List<MCRAccessKeyDto> findAccessKeys(String reference, String permissions, int offset,
5557
int limit, HttpServletResponse response) {
56-
final MCRAccessKeyService service = MCRAccessKeyServiceFactory.getAccessKeyService();
5758
final List<MCRAccessKeyDto> accessKeyDtos = new ArrayList<>();
5859
if (!reference.isEmpty() && !permissions.isEmpty()) {
5960
Arrays.stream(permissions.split(","))
60-
.forEach(p -> accessKeyDtos.addAll(service.findAccessKeysByReferenceAndPermission(reference, p)));
61+
.forEach(p -> accessKeyDtos.addAll(SERVICE.findAccessKeysByReferenceAndPermission(reference, p)));
6162
} else if (!reference.isEmpty()) {
62-
accessKeyDtos.addAll(MCRAccessKeyServiceFactory.getAccessKeyService().findAccessKeysByReference(reference));
63+
accessKeyDtos.addAll(SERVICE.findAccessKeysByReference(reference));
6364
} else if (!permissions.isEmpty()) {
6465
Arrays.stream(permissions.split(","))
65-
.forEach(p -> accessKeyDtos.addAll(service.findAccessKeysByPermission(p)));
66+
.forEach(p -> accessKeyDtos.addAll(SERVICE.findAccessKeysByPermission(p)));
6667
} else {
67-
accessKeyDtos.addAll(service.listAllAccessKeys());
68+
accessKeyDtos.addAll(SERVICE.listAllAccessKeys());
6869
}
6970
response.setHeader(MCRAccessKeyRestConstants.HEADER_TOTAL_COUNT, Integer.toString(accessKeyDtos.size()));
7071
return accessKeyDtos.stream().sorted((a1, a2) -> a1.getCreated().compareTo(a2.getCreated())).skip(offset)
@@ -78,7 +79,7 @@ public static List<MCRAccessKeyDto> findAccessKeys(String reference, String perm
7879
* @return the access key
7980
*/
8081
public static MCRAccessKeyDto findAccessKey(UUID id) {
81-
return MCRAccessKeyServiceFactory.getAccessKeyService().findAccessKey(id);
82+
return SERVICE.findAccessKey(id);
8283
}
8384

8485
/**
@@ -89,8 +90,7 @@ public static MCRAccessKeyDto findAccessKey(UUID id) {
8990
* @return the response
9091
*/
9192
public static Response addAccessKey(MCRAccessKeyDto accessKeyDto, UriInfo uriInfo) {
92-
final MCRAccessKeyDto createdAccessKey
93-
= MCRAccessKeyServiceFactory.getAccessKeyService().addAccessKey(accessKeyDto);
93+
final MCRAccessKeyDto createdAccessKey = SERVICE.addAccessKey(accessKeyDto);
9494
return Response.created(uriInfo.getAbsolutePathBuilder().path(createdAccessKey.getId().toString()).build())
9595
.build();
9696
}
@@ -103,7 +103,7 @@ public static Response addAccessKey(MCRAccessKeyDto accessKeyDto, UriInfo uriInf
103103
* @return the response
104104
*/
105105
public static Response updateAccessKey(UUID id, MCRAccessKeyDto accessKeyDto) {
106-
MCRAccessKeyServiceFactory.getAccessKeyService().updateAccessKey(id, accessKeyDto);
106+
SERVICE.updateAccessKey(id, accessKeyDto);
107107
return Response.noContent().build();
108108
}
109109

@@ -115,7 +115,7 @@ public static Response updateAccessKey(UUID id, MCRAccessKeyDto accessKeyDto) {
115115
* @return the response
116116
*/
117117
public static Response partialUpdateAccessKey(UUID id, MCRAccessKeyPartialUpdateDto accessKeyDto) {
118-
MCRAccessKeyServiceFactory.getAccessKeyService().partialUpdateAccessKey(id, accessKeyDto);
118+
SERVICE.partialUpdateAccessKey(id, accessKeyDto);
119119
return Response.noContent().build();
120120
}
121121

@@ -126,7 +126,7 @@ public static Response partialUpdateAccessKey(UUID id, MCRAccessKeyPartialUpdate
126126
* @return the response
127127
*/
128128
public static Response removeAccessKey(UUID id) {
129-
MCRAccessKeyServiceFactory.getAccessKeyService().removeAccessKey(id);
129+
SERVICE.removeAccessKey(id);
130130
return Response.noContent().build();
131131
}
132132
}

0 commit comments

Comments
 (0)