1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package io.wcm.devops.conga.tooling.maven.plugin.validation;
21
22 import org.apache.commons.lang3.StringUtils;
23 import org.apache.maven.plugin.MojoFailureException;
24
25 import com.github.jknack.handlebars.Handlebars;
26
27 import io.wcm.devops.conga.generator.handlebars.HandlebarsManager;
28 import io.wcm.devops.conga.generator.plugins.handlebars.escaping.NoneEscapingStrategy;
29 import io.wcm.devops.conga.generator.util.FileUtil;
30 import io.wcm.devops.conga.model.reader.ModelReader;
31 import io.wcm.devops.conga.model.reader.RoleReader;
32 import io.wcm.devops.conga.model.role.Role;
33 import io.wcm.devops.conga.model.role.RoleFile;
34 import io.wcm.devops.conga.resource.Resource;
35
36
37
38
39 public final class RoleTemplateFileValidator implements DefinitionValidator<Void> {
40
41 private final ModelReader<Role> modelReader = new RoleReader();
42
43 private final HandlebarsManager handlebarsManager;
44
45
46
47
48 public RoleTemplateFileValidator(HandlebarsManager handlebarsManager) {
49 this.handlebarsManager = handlebarsManager;
50 }
51
52 @Override
53 @SuppressWarnings("PMD.PreserveStackTrace")
54 public Void validate(Resource resource, String pathForLog) throws MojoFailureException {
55 try {
56 Role role = modelReader.read(resource);
57 for (RoleFile roleFile : role.getFiles()) {
58
59
60 String templateFile = FileUtil.getTemplatePath(role, roleFile);
61 if (StringUtils.isNotEmpty(templateFile)) {
62 Handlebars handlebars = handlebarsManager.get(NoneEscapingStrategy.NAME, roleFile.getCharset());
63 handlebars.compile(templateFile);
64 }
65
66
67 boolean hasTemplate = StringUtils.isNotEmpty(roleFile.getTemplate());
68 boolean hasUrl = StringUtils.isNotEmpty(roleFile.getUrl());
69 boolean hasSymlinkTarget = StringUtils.isNotEmpty(roleFile.getSymlinkTarget());
70 if ((hasTemplate && hasUrl) || (hasTemplate && hasSymlinkTarget) || (hasUrl && hasSymlinkTarget)) {
71 throw new IllegalArgumentException("Only one of the attributes 'template', 'url', 'symlinkTarget' is allowed for a file definition.");
72 }
73
74 }
75 }
76 catch (Exception ex) {
77 throw new MojoFailureException("Role definition " + pathForLog + " is invalid:\n" + ex.getMessage());
78 }
79 return null;
80 }
81
82 }