1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.logging.log4j.catalog.api.annotation;
17
18 import java.util.Map;
19
20 import org.apache.logging.log4j.LogManager;
21 import org.apache.logging.log4j.Logger;
22 import org.springframework.context.annotation.Condition;
23 import org.springframework.context.annotation.ConditionContext;
24 import org.springframework.core.env.Environment;
25 import org.springframework.core.type.AnnotatedTypeMetadata;
26
27
28
29
30 public class JdbcUrlCondition implements Condition {
31
32 private static final Logger LOGGER = LogManager.getLogger(JdbcUrlCondition.class);
33 @Override
34 public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
35 Environment env = context.getEnvironment();
36 Map<String, Object> map = metadata.getAnnotationAttributes(JdbcUrl.class.getName());
37 if (map != null && map.containsKey("value")) {
38 String value = map.get("value").toString();
39 String jdbcUrl = env.getProperty("jdbcUrl");
40 Boolean isEmbedded = Boolean.parseBoolean(env.getProperty("isEmbedded"));
41 boolean result;
42 if (value.equals("hsqldb")) {
43 result = jdbcUrl == null || isEmbedded;
44 } else if (jdbcUrl == null || isEmbedded) {
45 result = false;
46 } else if (!jdbcUrl.startsWith("jdbc:")) {
47 result = false;
48 } else {
49 result = jdbcUrl.substring(5).toLowerCase().startsWith(value.toLowerCase());
50 }
51 LOGGER.debug("Returning {} for {}", result, value);
52 return result;
53 }
54 LOGGER.debug("No data provided");
55 return false;
56 }
57 }