1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.model.profile.activation;
20
21 import javax.inject.Inject;
22 import javax.inject.Named;
23 import javax.inject.Singleton;
24
25 import java.io.File;
26
27 import org.apache.maven.model.Activation;
28 import org.apache.maven.model.ActivationFile;
29 import org.apache.maven.model.Profile;
30 import org.apache.maven.model.building.ModelProblem.Severity;
31 import org.apache.maven.model.building.ModelProblem.Version;
32 import org.apache.maven.model.building.ModelProblemCollector;
33 import org.apache.maven.model.building.ModelProblemCollectorRequest;
34 import org.apache.maven.model.path.ProfileActivationFilePathInterpolator;
35 import org.apache.maven.model.profile.ProfileActivationContext;
36 import org.codehaus.plexus.interpolation.InterpolationException;
37 import org.codehaus.plexus.util.StringUtils;
38
39
40
41
42
43
44
45
46
47
48 @Named("file")
49 @Singleton
50 public class FileProfileActivator implements ProfileActivator {
51
52 @Inject
53 private ProfileActivationFilePathInterpolator profileActivationFilePathInterpolator;
54
55 public FileProfileActivator setProfileActivationFilePathInterpolator(
56 ProfileActivationFilePathInterpolator profileActivationFilePathInterpolator) {
57 this.profileActivationFilePathInterpolator = profileActivationFilePathInterpolator;
58 return this;
59 }
60
61 @Override
62 public boolean isActive(Profile profile, ProfileActivationContext context, ModelProblemCollector problems) {
63 Activation activation = profile.getActivation();
64
65 if (activation == null) {
66 return false;
67 }
68
69 ActivationFile file = activation.getFile();
70
71 if (file == null) {
72 return false;
73 }
74
75 String path;
76 boolean missing;
77
78 if (StringUtils.isNotEmpty(file.getExists())) {
79 path = file.getExists();
80 missing = false;
81 } else if (StringUtils.isNotEmpty(file.getMissing())) {
82 path = file.getMissing();
83 missing = true;
84 } else {
85 return false;
86 }
87
88 try {
89 path = profileActivationFilePathInterpolator.interpolate(path, context);
90 } catch (InterpolationException e) {
91 problems.add(new ModelProblemCollectorRequest(Severity.ERROR, Version.BASE)
92 .setMessage("Failed to interpolate file location " + path + " for profile " + profile.getId() + ": "
93 + e.getMessage())
94 .setLocation(file.getLocation(missing ? "missing" : "exists"))
95 .setException(e));
96 return false;
97 }
98
99 if (path == null) {
100 return false;
101 }
102
103 File f = new File(path);
104
105 if (!f.isAbsolute()) {
106 return false;
107 }
108
109 boolean fileExists = f.exists();
110
111 return missing ? !fileExists : fileExists;
112 }
113
114 @Override
115 public boolean presentInConfig(Profile profile, ProfileActivationContext context, ModelProblemCollector problems) {
116 Activation activation = profile.getActivation();
117
118 if (activation == null) {
119 return false;
120 }
121
122 ActivationFile file = activation.getFile();
123
124 if (file == null) {
125 return false;
126 }
127 return true;
128 }
129 }