mirror of
https://github.com/dedicatedcode/reitti.git
synced 2026-01-09 17:37:57 -05:00
Merge remote-tracking branch 'origin/main'
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
package com.dedicatedcode.reitti.config;
|
||||
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.core.annotation.AliasFor;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* Conditional annotation that checks if a property has a non-empty value.
|
||||
* This is a convenience annotation that combines ConditionalOnProperty with
|
||||
* matchIfMissing=false and havingValue="" (empty string) negated.
|
||||
*/
|
||||
@Target({ElementType.TYPE, ElementType.METHOD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@org.springframework.context.annotation.Conditional(ConditionalOnPropertyNotEmptyCondition.class)
|
||||
public @interface ConditionalOnPropertyNotEmpty {
|
||||
|
||||
/**
|
||||
* The name of the property to test.
|
||||
* @return the property name
|
||||
*/
|
||||
String name() default "";
|
||||
|
||||
/**
|
||||
* The name of the property to test (alias for name).
|
||||
* @return the property name
|
||||
*/
|
||||
String value() default "";
|
||||
|
||||
/**
|
||||
* A prefix that should be applied to each property name.
|
||||
* @return the prefix
|
||||
*/
|
||||
String prefix() default "";
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.dedicatedcode.reitti.config;
|
||||
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionMessage;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
|
||||
import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
|
||||
import org.springframework.context.annotation.ConditionContext;
|
||||
import org.springframework.core.annotation.AnnotationAttributes;
|
||||
import org.springframework.core.type.AnnotatedTypeMetadata;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* Condition that checks if a property has a non-empty value.
|
||||
*/
|
||||
public class ConditionalOnPropertyNotEmptyCondition extends SpringBootCondition {
|
||||
|
||||
@Override
|
||||
public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) {
|
||||
AnnotationAttributes attributes = AnnotationAttributes.fromMap(
|
||||
metadata.getAnnotationAttributes(ConditionalOnPropertyNotEmpty.class.getName()));
|
||||
|
||||
if (attributes == null) {
|
||||
return ConditionOutcome.noMatch("@ConditionalOnPropertyNotEmpty annotation not found");
|
||||
}
|
||||
|
||||
String propertyName = getPropertyName(attributes);
|
||||
String propertyValue = context.getEnvironment().getProperty(propertyName);
|
||||
|
||||
ConditionMessage.Builder message = ConditionMessage.forCondition(ConditionalOnPropertyNotEmpty.class);
|
||||
|
||||
if (!StringUtils.hasText(propertyValue)) {
|
||||
return ConditionOutcome.noMatch(message.because("property '" + propertyName + "' is empty or not set"));
|
||||
}
|
||||
|
||||
return ConditionOutcome.match(message.because("property '" + propertyName + "' has value: " + propertyValue));
|
||||
}
|
||||
|
||||
private String getPropertyName(AnnotationAttributes attributes) {
|
||||
String prefix = attributes.getString("prefix");
|
||||
String name = attributes.getString("name");
|
||||
String value = attributes.getString("value");
|
||||
|
||||
// Use 'value' if 'name' is not specified
|
||||
String propertyName = StringUtils.hasText(name) ? name : value;
|
||||
|
||||
if (StringUtils.hasText(prefix)) {
|
||||
propertyName = prefix + "." + propertyName;
|
||||
}
|
||||
|
||||
return propertyName;
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.dedicatedcode.reitti.controller.api;
|
||||
|
||||
import com.dedicatedcode.reitti.config.ConditionalOnPropertyNotEmpty;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.http.CacheControl;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.MediaType;
|
||||
@@ -18,14 +18,14 @@ import java.util.concurrent.TimeUnit;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/tiles")
|
||||
@ConditionalOnProperty(name = "reitti.ui.tiles.cache.url")
|
||||
@ConditionalOnPropertyNotEmpty("reitti.ui.tiles.cache.url")
|
||||
public class TileProxyController {
|
||||
private static final Logger log = LoggerFactory.getLogger(TileProxyController.class);
|
||||
|
||||
private final RestTemplate restTemplate;
|
||||
private final String tileCacheUrl;
|
||||
|
||||
public TileProxyController(@Value("${reitti.ui.tiles.cache.url:http://tile-cache}") String tileCacheUrl) {
|
||||
public TileProxyController(@Value("${reitti.ui.tiles.cache.url}") String tileCacheUrl) {
|
||||
this.tileCacheUrl = tileCacheUrl;
|
||||
this.restTemplate = new RestTemplate();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user