1 package org.apache.maven.profiles.activation;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.IOException;
23
24 import org.apache.maven.model.Activation;
25 import org.apache.maven.model.ActivationFile;
26 import org.apache.maven.model.Profile;
27 import org.codehaus.plexus.interpolation.EnvarBasedValueSource;
28 import org.codehaus.plexus.interpolation.InterpolationException;
29 import org.codehaus.plexus.interpolation.MapBasedValueSource;
30 import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
31 import org.codehaus.plexus.logging.LogEnabled;
32 import org.codehaus.plexus.logging.Logger;
33 import org.codehaus.plexus.util.FileUtils;
34 import org.codehaus.plexus.util.StringUtils;
35
36 public class FileProfileActivator
37 extends DetectedProfileActivator
38 implements LogEnabled
39 {
40 private Logger logger;
41
42 protected boolean canDetectActivation( Profile profile )
43 {
44 return profile.getActivation() != null && profile.getActivation().getFile() != null;
45 }
46
47 public boolean isActive( Profile profile )
48 {
49 Activation activation = profile.getActivation();
50
51 ActivationFile actFile = activation.getFile();
52
53 if ( actFile != null )
54 {
55
56 String fileString = actFile.getExists();
57
58 RegexBasedInterpolator interpolator = new RegexBasedInterpolator();
59 try
60 {
61 interpolator.addValueSource( new EnvarBasedValueSource() );
62 }
63 catch ( IOException e )
64 {
65
66 }
67 interpolator.addValueSource( new MapBasedValueSource( System.getProperties() ) );
68
69 try
70 {
71 if ( StringUtils.isNotEmpty( fileString ) )
72 {
73 fileString = StringUtils.replace( interpolator.interpolate( fileString, "" ), "\\", "/" );
74 return FileUtils.fileExists( fileString );
75 }
76
77
78 fileString = actFile.getMissing();
79
80 if ( StringUtils.isNotEmpty( fileString ) )
81 {
82 fileString = StringUtils.replace( interpolator.interpolate( fileString, "" ), "\\", "/" );
83 return !FileUtils.fileExists( fileString );
84 }
85 }
86 catch ( InterpolationException e )
87 {
88 if ( logger.isDebugEnabled() )
89 {
90 logger.debug( "Failed to interpolate missing file location for profile activator: " + fileString, e );
91 }
92 else
93 {
94 logger.warn( "Failed to interpolate missing file location for profile activator: " + fileString + ". Run in debug mode (-X) for more information." );
95 }
96 }
97 }
98
99 return false;
100 }
101
102 public void enableLogging( Logger logger )
103 {
104 this.logger = logger;
105 }
106 }