From a0e3d0027832e595d5d3ece5b40e41146e931c5c Mon Sep 17 00:00:00 2001 From: Vincent Siveton Date: Tue, 8 Jan 2008 13:42:18 +0000 Subject: [PATCH] o merged from r609976 (MNG-2809: Can't activate a profile by checking for the presence of a file in ${user.home}) o added new test class git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@609980 13f79535-47bb-0310-9956-ffa450edef68 --- .../activation/FileProfileActivator.java | 24 +++++++- .../activation/FileProfileActivatorTest.java | 58 +++++++++++++++++++ 2 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 maven-project/src/test/java/org/apache/maven/profiles/activation/FileProfileActivatorTest.java diff --git a/maven-project/src/main/java/org/apache/maven/profiles/activation/FileProfileActivator.java b/maven-project/src/main/java/org/apache/maven/profiles/activation/FileProfileActivator.java index 9cb11d2fd4..7919185496 100644 --- a/maven-project/src/main/java/org/apache/maven/profiles/activation/FileProfileActivator.java +++ b/maven-project/src/main/java/org/apache/maven/profiles/activation/FileProfileActivator.java @@ -19,10 +19,16 @@ package org.apache.maven.profiles.activation; * under the License. */ +import java.io.IOException; + import org.apache.maven.model.Activation; import org.apache.maven.model.ActivationFile; import org.apache.maven.model.Profile; import org.codehaus.plexus.util.FileUtils; +import org.codehaus.plexus.util.StringUtils; +import org.codehaus.plexus.util.interpolation.EnvarBasedValueSource; +import org.codehaus.plexus.util.interpolation.MapBasedValueSource; +import org.codehaus.plexus.util.interpolation.RegexBasedInterpolator; public class FileProfileActivator implements ProfileActivator @@ -44,21 +50,33 @@ public class FileProfileActivator // check if the file exists, if it does then the profile will be active String fileString = actFile.getExists(); - if ( ( fileString != null ) && !"".equals( fileString ) ) + RegexBasedInterpolator interpolator = new RegexBasedInterpolator(); + try { + interpolator.addValueSource( new EnvarBasedValueSource() ); + } + catch ( IOException e ) + { + // ignored + } + interpolator.addValueSource( new MapBasedValueSource( System.getProperties() ) ); + + if ( StringUtils.isNotEmpty( fileString ) ) + { + fileString = StringUtils.replace( interpolator.interpolate( fileString, "" ), "\\", "/" ); return FileUtils.fileExists( fileString ); } // check if the file is missing, if it is then the profile will be active fileString = actFile.getMissing(); - if ( ( fileString != null ) && !"".equals( fileString ) ) + if ( StringUtils.isNotEmpty( fileString ) ) { + fileString = StringUtils.replace( interpolator.interpolate( fileString, "" ), "\\", "/" ); return !FileUtils.fileExists( fileString ); } } return false; } - } diff --git a/maven-project/src/test/java/org/apache/maven/profiles/activation/FileProfileActivatorTest.java b/maven-project/src/test/java/org/apache/maven/profiles/activation/FileProfileActivatorTest.java new file mode 100644 index 0000000000..d445fac1a8 --- /dev/null +++ b/maven-project/src/test/java/org/apache/maven/profiles/activation/FileProfileActivatorTest.java @@ -0,0 +1,58 @@ +package org.apache.maven.profiles.activation; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.util.Properties; + +import junit.framework.TestCase; + +import org.apache.maven.model.Activation; +import org.apache.maven.model.Profile; + +/** + * Test case for the {@link FileProfileActivator}. + * + * @author Vincent Siveton + * @version $Id$ + */ +public class FileProfileActivatorTest + extends TestCase +{ + private FileProfileActivator activator = new FileProfileActivator(); + + public void testFileActivationProfile() + throws ProfileActivationException + { + org.apache.maven.model.ActivationFile activationFile = new org.apache.maven.model.ActivationFile(); + // Assume that junit exists + activationFile.setExists( "${user.home}/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar" ); + + Activation fileActivation = new Activation(); + fileActivation.setFile( activationFile ); + + Profile profile = new Profile(); + profile.setActivation( fileActivation ); + + Properties props = new Properties(); + ProfileActivationContext ctx = new DefaultProfileActivationContext( props, false ); + + assertTrue( activator.isActive( profile, ctx ) ); + } +}