You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by si...@apache.org on 2009/02/26 04:14:14 UTC
svn commit: r747993 - in /maven/components/trunk:
maven-project-builder/src/main/java/org/apache/maven/project/builder/
maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/
maven-project/src/main/java/org/apache/maven/profiles/...
Author: sisbell
Date: Thu Feb 26 03:14:14 2009
New Revision: 747993
URL: http://svn.apache.org/viewvc?rev=747993&view=rev
Log:
Replaced old profile code with new.
Added:
maven/components/trunk/maven-project/src/test/resources-project-builder/empty-distMng-repo-url/
maven/components/trunk/maven-project/src/test/resources-project-builder/empty-distMng-repo-url/pom.xml
Modified:
maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java
maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/OperatingSystemMatcher.java
maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/PropertyMatcher.java
maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java
Modified: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java?rev=747993&r1=747992&r2=747993&view=diff
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java (original)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java Thu Feb 26 03:14:14 2009
@@ -227,6 +227,7 @@
ModelContainerAction action = pluginContainer.containerAction( managementContainer );
+ //Join Execution Containers
if ( action.equals( ModelContainerAction.JOIN ) || action.equals( ModelContainerAction.DELETE ) )
{
ModelDataSource pluginDatasource = new DefaultModelDataSource( pluginContainer.getProperties(), PomTransformer.MODEL_CONTAINER_FACTORIES );
Modified: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/OperatingSystemMatcher.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/OperatingSystemMatcher.java?rev=747993&r1=747992&r2=747993&view=diff
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/OperatingSystemMatcher.java (original)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/OperatingSystemMatcher.java Thu Feb 26 03:14:14 2009
@@ -45,7 +45,16 @@
|| (key.equals("${os.family}") && property.getUri().equals(ProjectUri.Profiles.Profile.Activation.Os.family))
|| (key.equals("${os.name}") && property.getUri().equals(ProjectUri.Profiles.Profile.Activation.Os.name)) )
{
- return interpolatorProperty.getValue().equals(property.getResolvedValue());
+
+ if(property.getResolvedValue().startsWith("!"))
+ {
+ return !interpolatorProperty.getValue().equals(property.getResolvedValue());
+ }
+ else
+ {
+ return interpolatorProperty.getValue().equals(property.getResolvedValue());
+ }
+
}
}
return true;
Modified: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/PropertyMatcher.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/PropertyMatcher.java?rev=747993&r1=747992&r2=747993&view=diff
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/PropertyMatcher.java (original)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/profile/PropertyMatcher.java Thu Feb 26 03:14:14 2009
@@ -25,10 +25,16 @@
}
}
- if(name == null || value == null) {
+ if(name == null )
+ {
return false;
}
+ if(value == null)
+ {
+ return !name.startsWith("!");
+ }
+
for(InterpolatorProperty ip : properties) {
if(ip.getKey().equals("${" + name + "}")) {
return ip.getValue().equals(value);
Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java?rev=747993&r1=747992&r2=747993&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java Thu Feb 26 03:14:14 2009
@@ -23,21 +23,29 @@
import org.apache.maven.model.Model;
import org.apache.maven.model.Profile;
import org.apache.maven.model.Parent;
+import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
import org.apache.maven.profiles.activation.DefaultProfileActivationContext;
import org.apache.maven.profiles.activation.ProfileActivationContext;
import org.apache.maven.profiles.activation.ProfileActivationException;
-import org.apache.maven.profiles.activation.ProfileActivator;
+import org.apache.maven.shared.model.ModelContainer;
+import org.apache.maven.shared.model.ModelProperty;
+import org.apache.maven.shared.model.ModelMarshaller;
+import org.apache.maven.shared.model.InterpolatorProperty;
+import org.apache.maven.project.builder.factories.IdModelContainerFactory;
+import org.apache.maven.project.builder.ProjectUri;
+import org.apache.maven.project.builder.PomTransformer;
+import org.apache.maven.project.builder.PomInterpolatorTag;
+import org.apache.maven.project.builder.profile.*;
import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.MutablePlexusContainer;
-import org.codehaus.plexus.component.repository.exception.ComponentLifecycleException;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.util.xml.pull.XmlSerializer;
+import org.codehaus.plexus.util.xml.pull.MXSerializer;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.Map.Entry;
+import java.io.*;
+import java.lang.reflect.Method;
+
public class DefaultProfileManager
implements ProfileManager
@@ -258,49 +266,79 @@
}
}
+ private static List<ActiveProfileMatcher> matchers = Arrays.asList(new FileMatcher(),
+ new JdkMatcher(), new OperatingSystemMatcher(), new PropertyMatcher());
+
private boolean isActive( Profile profile, ProfileActivationContext context )
throws ProfileActivationException
{
- List<ProfileActivator> activators = null;
-
+ //TODO: Using reflection now. Need to replace with custom mapper
+ StringWriter writer = new StringWriter();
+ XmlSerializer serializer = new MXSerializer();
+ serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-indentation", " " );
+ serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n" );
try
{
- activators = container.lookupList( ProfileActivator.class );
+ serializer.setOutput( writer );
+ serializer.startDocument("UTF-8", null );
+ } catch (IOException e) {
+
+ }
+
+ try {
+ MavenXpp3Writer w = new MavenXpp3Writer();
+ Class c = Class.forName("org.apache.maven.model.io.xpp3.MavenXpp3Writer");
+
+ Class partypes[] = new Class[3];
+ partypes[0] = Profile.class;
+ partypes[1] = String.class;
+ partypes[2] = XmlSerializer.class;
+
+ Method meth = c.getDeclaredMethod(
+ "writeProfile", partypes);
+ meth.setAccessible(true);
+
+ Object arglist[] = new Object[3];
+ arglist[0] = profile;
+ arglist[1] = "profile";
+ arglist[2] = serializer;
+
+ meth.invoke(w, arglist);
+ serializer.endDocument();
+ } catch (Exception e)
+ {
+ throw new ProfileActivationException(e.getMessage(), e);
+ }
+
+ List<InterpolatorProperty> interpolatorProperties = new ArrayList<InterpolatorProperty>();
+ interpolatorProperties.addAll(InterpolatorProperty.toInterpolatorProperties(
+ context.getExecutionProperties(),
+ PomInterpolatorTag.EXECUTION_PROPERTIES.name()));
- for ( ProfileActivator activator : activators )
- {
- if ( activator.canDetermineActivation( profile, context ) )
- {
- if ( activator.isActive( profile, context ) )
- {
- container.getLogger().debug(
- "Profile: " + profile.getId() + " is active. (source: " + profile.getSource() + ")" );
- return true;
- }
- }
- }
-
- return false;
- }
- catch ( ComponentLookupException e )
- {
- throw new ProfileActivationException( "Cannot retrieve list of profile activators.", e );
- }
- finally
+ List<ModelProperty> p;
+ try
+ {
+ p = ModelMarshaller.marshallXmlToModelProperties(new ByteArrayInputStream(writer.getBuffer().toString().getBytes()),
+ ProjectUri.Profiles.Profile.xUri, PomTransformer.URIS);
+ } catch (IOException e) {
+ throw new ProfileActivationException(e.getMessage());
+ }
+ //Serializer adds in extra node, strip it out
+ List<ModelProperty> p2 = new ArrayList<ModelProperty>();
+ for(ModelProperty mp : p)
+ {
+ p2.add(new ModelProperty(mp.getUri().replaceFirst("profile/", ""), mp.getResolvedValue()));
+ }
+
+ ModelContainer mc = new IdModelContainerFactory(ProjectUri.Profiles.Profile.xUri).create(p2);
+ for(ActiveProfileMatcher matcher : matchers)
{
- container.getContext().put( "SystemProperties", null );
- if ( activators != null )
+ if(matcher.isMatch(mc, interpolatorProperties))
{
- try
- {
- container.releaseAll( activators );
- }
- catch ( ComponentLifecycleException e )
- {
- container.getLogger().debug( "Error releasing profile activators - ignoring.", e );
- }
+ return true;
}
}
+ return false;
}
/* (non-Javadoc)
@@ -341,18 +379,6 @@
return profileActivationContext.getActiveByDefaultProfileIds();
}
- private static String getVersion( Model model )
- {
- Parent parent = model.getParent();
-
- String version = model.getVersion();
- if ( ( parent != null ) && ( version == null ) )
- {
- version = parent.getVersion();
- }
-
- return version;
- }
public static String getGroupId( Model model )
{
Modified: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java?rev=747993&r1=747992&r2=747993&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java (original)
+++ maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java Thu Feb 26 03:14:14 2009
@@ -81,6 +81,19 @@
}
/**
+ * Will throw exception if url is empty. MNG-4050
+ *
+ * @throws Exception
+ */
+ /*
+ public void testEmptyUrl()
+ throws Exception
+ {
+ buildPomFromMavenProject( "empty-distMng-repo-url", null );
+ }
+ */
+
+ /**
* Will throw exception if doesn't find parent(s) in build
*
* @throws Exception
Added: maven/components/trunk/maven-project/src/test/resources-project-builder/empty-distMng-repo-url/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/resources-project-builder/empty-distMng-repo-url/pom.xml?rev=747993&view=auto
==============================================================================
--- maven/components/trunk/maven-project/src/test/resources-project-builder/empty-distMng-repo-url/pom.xml (added)
+++ maven/components/trunk/maven-project/src/test/resources-project-builder/empty-distMng-repo-url/pom.xml Thu Feb 26 03:14:14 2009
@@ -0,0 +1,15 @@
+<project >
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-parent</artifactId>
+ <packaging>pom</packaging>
+ <version>11</version>
+
+ <distributionManagement>
+ <repository>
+ <id>dummy</id>
+ <name>Dummy to avoid accidental deploys</name>
+ <url />
+ </repository>
+ </distributionManagement>
+</project>