-
Notifications
You must be signed in to change notification settings - Fork 1.8k
/
PreconditionLogic.java
62 lines (50 loc) · 2.29 KB
/
PreconditionLogic.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package liquibase.precondition;
import liquibase.GlobalConfiguration;
import liquibase.database.Database;
import liquibase.exception.ValidationErrors;
import liquibase.parser.ChangeLogParserConfiguration;
import liquibase.parser.core.ParsedNode;
import liquibase.parser.core.ParsedNodeException;
import liquibase.resource.ResourceAccessor;
import java.util.ArrayList;
import java.util.List;
/**
* Marker interface for precondition logic tags (and,or, not)
*/
public abstract class PreconditionLogic extends AbstractPrecondition {
private List<Precondition> nestedPreconditions = new ArrayList<>();
public List<Precondition> getNestedPreconditions() {
return this.nestedPreconditions;
}
public void addNestedPrecondition(Precondition precondition) {
if (precondition != null) {
nestedPreconditions.add(precondition);
}
}
@Override
public ValidationErrors validate(Database database) {
final ValidationErrors validationErrors = new ValidationErrors();
for (Precondition precondition : getNestedPreconditions()) {
validationErrors.addAll(precondition.validate(database));
}
return validationErrors;
}
@Override
public void load(ParsedNode parsedNode, ResourceAccessor resourceAccessor) throws ParsedNodeException {
super.load(parsedNode, resourceAccessor);
for (ParsedNode child : parsedNode.getChildren()) {
addNestedPrecondition(toPrecondition(child, resourceAccessor));
}
}
protected Precondition toPrecondition(ParsedNode node, ResourceAccessor resourceAccessor) throws ParsedNodeException {
Precondition precondition = PreconditionFactory.getInstance().create(node.getName());
if (precondition == null) {
if (node.getChildren() != null && node.getChildren().size() > 0 && ChangeLogParserConfiguration.CHANGELOG_PARSE_MODE.getCurrentValue().equals(ChangeLogParserConfiguration.ChangelogParseMode.STRICT)) {
throw new ParsedNodeException("Unknown precondition '" + node.getName() + "'. Check for spelling or capitalization errors and missing extensions such as liquibase-commercial.");
}
return null;
}
precondition.load(node, resourceAccessor);
return precondition;
}
}