Skip to content

Commit dc1ed1a

Browse files
Michael BreuMichael Breu
authored andcommitted
Fixing Architecture: from @ConditionalOnProperty to @conditional
1 parent a3e11f6 commit dc1ed1a

10 files changed

+60
-20
lines changed

src/main/java/de/tum/cit/aet/artemis/core/config/ArtemisConfigHelper.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import static de.tum.cit.aet.artemis.core.config.Constants.HYPERION_ENABLED_PROPERTY_NAME;
66
import static de.tum.cit.aet.artemis.core.config.Constants.NEBULA_ENABLED_PROPERTY_NAME;
77
import static de.tum.cit.aet.artemis.core.config.Constants.PASSKEY_ENABLED_PROPERTY_NAME;
8+
import static de.tum.cit.aet.artemis.core.config.Constants.SHARING_ENABLED_PROPERTY_NAME;
89

910
import org.springframework.core.env.Environment;
1011

@@ -25,6 +26,16 @@ public boolean isPasskeyEnabled(Environment environment) {
2526
return getPropertyOrExitArtemis(PASSKEY_ENABLED_PROPERTY_NAME, environment);
2627
}
2728

29+
/**
30+
* Check if the Sharing feature is enabled.
31+
*
32+
* @param environment the Spring environment
33+
* @return true if the Sjaromg feature is enabled, false otherwise
34+
*/
35+
public boolean isSharingEnabled(Environment environment) {
36+
return getPropertyOrExitArtemis(SHARING_ENABLED_PROPERTY_NAME, environment);
37+
}
38+
2839
/**
2940
* Check if the Atlas module is enabled.
3041
*

src/main/java/de/tum/cit/aet/artemis/core/config/Constants.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,11 @@ public final class Constants {
460460
*/
461461
public static final String PASSKEY_ENABLED_PROPERTY_NAME = "artemis.user-management.passkey.enabled";
462462

463+
/**
464+
* The name of the property used to enable or disable the passkey authentication functionality.
465+
*/
466+
public static final String SHARING_ENABLED_PROPERTY_NAME = "artemis.sharing.enabled";
467+
463468
/**
464469
* The name of the property used to enable or disable nebula functionalities.
465470
*/

src/main/java/de/tum/cit/aet/artemis/core/config/RestTemplateConfiguration.java

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

1111
import jakarta.validation.constraints.NotNull;
1212

13-
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
1413
import org.springframework.context.annotation.Bean;
1514
import org.springframework.context.annotation.Conditional;
1615
import org.springframework.context.annotation.Configuration;
@@ -28,6 +27,7 @@
2827
import de.tum.cit.aet.artemis.iris.config.PyrisAuthorizationInterceptor;
2928
import de.tum.cit.aet.artemis.nebula.config.NebulaEnabled;
3029
import de.tum.cit.aet.artemis.programming.service.jenkins.JenkinsAuthorizationInterceptor;
30+
import de.tum.cit.aet.artemis.programming.service.sharing.SharingEnabled;
3131

3232
/**
3333
* For now only provides a basic {@link org.springframework.web.client.RestTemplate RestTemplate} bean. Can be extended
@@ -72,10 +72,7 @@ public RestTemplate apollonRestTemplate() {
7272
* @return a RestTemplate with short timeouts for sharing platform integration
7373
*/
7474
@Bean
75-
@ConditionalOnProperty(name = "artemis.sharing.enabled", // property key
76-
havingValue = "true", // required value
77-
matchIfMissing = false // default behavior if property is absent
78-
)
75+
@Conditional(SharingEnabled.class)
7976
public RestTemplate sharingRestTemplate() {
8077
return createShortTimeoutRestTemplate();
8178
}

src/main/java/de/tum/cit/aet/artemis/core/web/SharingSupportResource.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import org.codeability.sharing.plugins.api.SharingPluginConfig;
1010
import org.slf4j.Logger;
1111
import org.slf4j.LoggerFactory;
12-
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
12+
import org.springframework.context.annotation.Conditional;
1313
import org.springframework.context.annotation.Lazy;
1414
import org.springframework.http.HttpStatus;
1515
import org.springframework.http.ResponseEntity;
@@ -20,13 +20,14 @@
2020
import org.springframework.web.bind.annotation.RestController;
2121

2222
import de.tum.cit.aet.artemis.programming.service.sharing.SharingConnectorService;
23+
import de.tum.cit.aet.artemis.programming.service.sharing.SharingEnabled;
2324

2425
/**
2526
* REST controller for the exchange of configuration data between artemis and the sharing platform.
2627
*/
2728
@RestController
2829
@RequestMapping("api/core/sharing/")
29-
@ConditionalOnProperty(name = "artemis.sharing.enabled", havingValue = "true", matchIfMissing = false)
30+
@Conditional(SharingEnabled.class)
3031
@Lazy
3132
public class SharingSupportResource {
3233

src/main/java/de/tum/cit/aet/artemis/programming/service/sharing/ExerciseSharingService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
import org.slf4j.LoggerFactory;
4343
import org.springframework.beans.factory.annotation.Qualifier;
4444
import org.springframework.beans.factory.annotation.Value;
45-
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
45+
import org.springframework.context.annotation.Conditional;
4646
import org.springframework.context.annotation.Lazy;
4747
import org.springframework.core.io.Resource;
4848
import org.springframework.stereotype.Service;
@@ -67,7 +67,7 @@
6767
* service for sharing exercises via the sharing platform.
6868
*/
6969
@Service
70-
@ConditionalOnProperty(name = "artemis.sharing.enabled", havingValue = "true", matchIfMissing = false)
70+
@Conditional(SharingEnabled.class)
7171
@Lazy
7272
public class ExerciseSharingService {
7373

src/main/java/de/tum/cit/aet/artemis/programming/service/sharing/ProgrammingExerciseImportFromSharingService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import java.net.URISyntaxException;
55

66
import org.eclipse.jgit.api.errors.GitAPIException;
7-
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
7+
import org.springframework.context.annotation.Conditional;
88
import org.springframework.context.annotation.Lazy;
99
import org.springframework.stereotype.Service;
1010

@@ -14,7 +14,7 @@
1414
import de.tum.cit.aet.artemis.programming.service.ProgrammingExerciseImportFromFileService;
1515

1616
@Service
17-
@ConditionalOnProperty(name = "artemis.sharing.enabled", havingValue = "true", matchIfMissing = false)
17+
@Conditional(SharingEnabled.class)
1818
@Lazy
1919
public class ProgrammingExerciseImportFromSharingService {
2020

src/main/java/de/tum/cit/aet/artemis/programming/service/sharing/SharingConnectorService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import org.slf4j.LoggerFactory;
1818
import org.springframework.beans.factory.annotation.Qualifier;
1919
import org.springframework.beans.factory.annotation.Value;
20-
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
20+
import org.springframework.context.annotation.Conditional;
2121
import org.springframework.context.annotation.Lazy;
2222
import org.springframework.scheduling.TaskScheduler;
2323
import org.springframework.stereotype.Service;
@@ -30,7 +30,7 @@
3030
* @see <a href="https://sharing-codeability.uibk.ac.at/sharing/codeability-sharing-platform/-/wikis/technical/Plugin-Interface">Plugin Tutorial</a>
3131
*/
3232
@Service
33-
@ConditionalOnProperty(name = "artemis.sharing.enabled", havingValue = "true", matchIfMissing = false)
33+
@Conditional(SharingEnabled.class)
3434
@Lazy
3535
public class SharingConnectorService {
3636

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package de.tum.cit.aet.artemis.programming.service.sharing;
2+
3+
import org.springframework.context.annotation.Condition;
4+
import org.springframework.context.annotation.ConditionContext;
5+
import org.springframework.core.type.AnnotatedTypeMetadata;
6+
7+
import de.tum.cit.aet.artemis.core.config.ArtemisConfigHelper;
8+
9+
/**
10+
* Condition to check if the Passkey feature is enabled.
11+
* Based on this condition, Spring components concerning Passkey functionality can be enabled or disabled.
12+
*/
13+
public class SharingEnabled implements Condition {
14+
15+
private final ArtemisConfigHelper artemisConfigHelper;
16+
17+
public SharingEnabled() {
18+
this.artemisConfigHelper = new ArtemisConfigHelper();
19+
}
20+
21+
@Override
22+
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
23+
return artemisConfigHelper.isSharingEnabled(context.getEnvironment());
24+
}
25+
}

src/main/java/de/tum/cit/aet/artemis/programming/service/sharing/SharingHealthIndicator.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package de.tum.cit.aet.artemis.programming.service.sharing;
22

3+
import static de.tum.cit.aet.artemis.core.config.Constants.PROFILE_CORE;
4+
35
import java.time.Instant;
46
import java.time.ZoneId;
57
import java.time.ZonedDateTime;
@@ -8,31 +10,29 @@
810
import java.util.Optional;
911

1012
import org.apache.commons.collections4.list.UnmodifiableList;
11-
import org.slf4j.Logger;
12-
import org.slf4j.LoggerFactory;
1313
import org.springframework.beans.factory.annotation.Value;
1414
import org.springframework.boot.actuate.health.Health;
1515
import org.springframework.boot.actuate.health.HealthIndicator;
1616
import org.springframework.context.annotation.Lazy;
17+
import org.springframework.context.annotation.Profile;
1718
import org.springframework.stereotype.Component;
1819

1920
/**
2021
* Health indicator that shows the status of the Sharing Platform connector.
2122
*/
2223
@Component
24+
@Profile({ PROFILE_CORE })
2325
@Lazy
2426
public class SharingHealthIndicator implements HealthIndicator {
2527

2628
private static final ZoneId UTC = ZoneId.of("UTC");
2729

2830
private static final DateTimeFormatter TIME_STAMP_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yy HH:mm:ss");
2931

30-
private static final Logger log = LoggerFactory.getLogger(SharingHealthIndicator.class);
31-
3232
@Value("${artemis.sharing.enabled:'undefined'}")
3333
private String sharingEnabled;
3434

35-
private Optional<SharingConnectorService> sharingConnectorService;
35+
private final Optional<SharingConnectorService> sharingConnectorService;
3636

3737
public SharingHealthIndicator(Optional<SharingConnectorService> sharingConnectorService) {
3838
this.sharingConnectorService = sharingConnectorService;

src/main/java/de/tum/cit/aet/artemis/programming/web/ExerciseSharingResource.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import org.eclipse.jgit.api.errors.GitAPIException;
1919
import org.slf4j.Logger;
2020
import org.slf4j.LoggerFactory;
21-
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
21+
import org.springframework.context.annotation.Conditional;
2222
import org.springframework.context.annotation.Lazy;
2323
import org.springframework.core.io.InputStreamResource;
2424
import org.springframework.core.io.Resource;
@@ -38,6 +38,7 @@
3838
import de.tum.cit.aet.artemis.programming.service.sharing.ExerciseSharingService;
3939
import de.tum.cit.aet.artemis.programming.service.sharing.ProgrammingExerciseImportFromSharingService;
4040
import de.tum.cit.aet.artemis.programming.service.sharing.SharingConnectorService;
41+
import de.tum.cit.aet.artemis.programming.service.sharing.SharingEnabled;
4142
import de.tum.cit.aet.artemis.programming.service.sharing.SharingException;
4243
import de.tum.cit.aet.artemis.programming.service.sharing.SharingSetupInfo;
4344
import tech.jhipster.web.util.ResponseUtil;
@@ -47,7 +48,7 @@
4748
*/
4849
@RestController
4950
@RequestMapping("api/programming/sharing/")
50-
@ConditionalOnProperty(name = "artemis.sharing.enabled", havingValue = "true", matchIfMissing = false)
51+
@Conditional(SharingEnabled.class)
5152
@Lazy
5253
public class ExerciseSharingResource {
5354

0 commit comments

Comments
 (0)