Added: 
maven/components/branches/MNG-3932/maven-project-builder/src/test/java/org/apache/maven/project/builder/rules/ExecutionRuleTest.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-3932/maven-project-builder/src/test/java/org/apache/maven/project/builder/rules/ExecutionRuleTest.java?rev=739771&view=auto
==============================================================================
--- 
maven/components/branches/MNG-3932/maven-project-builder/src/test/java/org/apache/maven/project/builder/rules/ExecutionRuleTest.java
 (added)
+++ 
maven/components/branches/MNG-3932/maven-project-builder/src/test/java/org/apache/maven/project/builder/rules/ExecutionRuleTest.java
 Sun Feb  1 14:59:32 2009
@@ -0,0 +1,31 @@
+package org.apache.maven.project.builder.rules;
+
+import org.apache.maven.shared.model.ModelProperty;
+import org.apache.maven.project.builder.ProjectUri;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Arrays;
+
+public class ExecutionRuleTest {
+
+    @org.junit.Test
+    public void execute() throws IOException
+    {
+        List<ModelProperty> modelProperties = Arrays.asList(
+                new 
ModelProperty(ProjectUri.Build.Plugins.Plugin.Executions.Execution.xUri, null),
+                new 
ModelProperty(ProjectUri.Build.Plugins.Plugin.Executions.Execution.Goals.xURI, 
null),
+                new 
ModelProperty(ProjectUri.Build.Plugins.Plugin.Executions.Execution.Goals.goal, 
"parent-a"),
+                new 
ModelProperty(ProjectUri.Build.Plugins.Plugin.Executions.Execution.Goals.goal, 
"merged"),
+                new 
ModelProperty(ProjectUri.Build.Plugins.Plugin.Executions.Execution.Goals.goal, 
"parent-b"),
+                new 
ModelProperty(ProjectUri.Build.Plugins.Plugin.Executions.Execution.Goals.xURI, 
null),
+                new 
ModelProperty(ProjectUri.Build.Plugins.Plugin.Executions.Execution.Goals.goal, 
"child-b"),
+                new 
ModelProperty(ProjectUri.Build.Plugins.Plugin.Executions.Execution.Goals.goal, 
"merged"),
+                new 
ModelProperty(ProjectUri.Build.Plugins.Plugin.Executions.Execution.Goals.goal, 
"child-a"));
+
+        List<ModelProperty> mps = new ExecutionRule().execute(modelProperties);
+        for(ModelProperty mp : mps) {
+            //System.out.println(mp);
+        }
+    }
+}

Propchange: 
maven/components/branches/MNG-3932/maven-project-builder/src/test/projects/enforcer/enforcer-api/pom.xml
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Sun Feb  1 14:59:32 2009
@@ -1 +1 @@
-"Author Date Id Revision"
+Author Date Id Revision

Propchange: 
maven/components/branches/MNG-3932/maven-project-builder/src/test/projects/enforcer/enforcer-rules/pom.xml
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Sun Feb  1 14:59:32 2009
@@ -1 +1 @@
-"Author Date Id Revision"
+Author Date Id Revision

Propchange: 
maven/components/branches/MNG-3932/maven-project-builder/src/test/projects/enforcer/maven-enforcer-plugin/pom.xml
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Sun Feb  1 14:59:32 2009
@@ -1 +1 @@
-"Author Date Id Revision"
+Author Date Id Revision

Propchange: 
maven/components/branches/MNG-3932/maven-project-builder/src/test/projects/enforcer/pom.xml
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Sun Feb  1 14:59:32 2009
@@ -1 +1 @@
-"Author Date Id Revision"
+Author Date Id Revision

Propchange: 
maven/components/branches/MNG-3932/maven-project-builder/src/test/resources/test.txt
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/components/branches/MNG-3932/maven-project-spec.pdf
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-3932/maven-project-spec.pdf?rev=739771&r1=739770&r2=739771&view=diff
==============================================================================
Binary files - no diff available.

Modified: maven/components/branches/MNG-3932/maven-project-spec.tex
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-3932/maven-project-spec.tex?rev=739771&r1=739770&r2=739771&view=diff
==============================================================================
--- maven/components/branches/MNG-3932/maven-project-spec.tex (original)
+++ maven/components/branches/MNG-3932/maven-project-spec.tex Sun Feb  1 
14:59:32 2009
@@ -1,23 +1,29 @@
 
 \documentclass[12pt]{amsart}
-\usepackage{geometry} % see geometry.pdf on how to lay out the page. There's 
lots.
+\usepackage{geometry}
 \geometry{a4paper} % or letter or a5paper or ... etc
 % \geometry{landscape} % rotated page geometry
 
 % See the ``Article customise'' template for come common customisations
 
-\title{}
-\author{}
-\date{} % delete this line to display the current date
+\title{Maven Project Builder Specification}
+\author{Shane Isbell}
+\makeglossary
+
 
 \begin{document}
 
 \maketitle
 \tableofcontents
+\section{Introduction}
+\subsection{Purpose}
+The purpose of this document is to cover how the Maven project model is 
constructed and interpolated. Out of scope are issues such as dependency 
resolution.
+
+
 \section{Model Transformations}
 \subsection{Canonical Data Format}
 Maven supports a canonical data format for the pom that includes 465 model 
properties (we refer to each ordered pair of uri/values as a model property). 
-
+\glossary{doo}
 \begin{verbatim}
        http://apache.org/maven/project/modelVersion
        http://apache.org/maven/project/groupId
@@ -33,7 +39,7 @@
 
 Technically \begin{math}\mathcal{A}\end{math} is also ordered.
 
-Any one is free to create a transformer from any another format (yaml, .NET 
projects files, etc) to this canonical data format, giving them all the 
benefits of project inheritance and interpolation that Maven uses in building a 
project.
+Anyone is free to create a transformer from any another format (yaml, .NET 
projects files, etc) to this canonical data format, giving them all the 
benefits of project inheritance and interpolation that Maven uses in building a 
project.
 
 \subsubsection{Collections}
 A model property may  be specified as a collection, which allows specialized 
join rules for adding model properties. Collections of collections are allowed.
@@ -64,6 +70,7 @@
 \begin{enumerate}
 \item Let there be a collection of domain models (poms) denoted by set 
\begin{math}\mathcal{D}_{i}\end{math}, where for some \begin{math} n \in 
\mathbb{N} \end{math} the collection is ordered from most specific to least 
specific \begin{math}\mathcal{C} = \{\mathcal{D}_{0}, 
\mathcal{D}_{1},...,\mathcal{D}_{n} \} \end{math}.  
\begin{math}\mathcal{D}_{n}\end{math} is the SuperPom and must be contained 
within \begin{math}\mathcal{C}\end{math}, even if it is the only element.
 \item Let \begin{math}p_j\end{math} be an ordered pair (or model property). In 
the case of the pom, \begin{math}j=nodes + properties\end{math} of the pom. 
Define t as a function operating on elements of 
\begin{math}\mathcal{C}\end{math} that transforms each element to a set of 
model properties.  
\begin{math}\mathcal{D}'_{i}=t(\mathcal{D}_{i})=\{p_0,p_1,...p_m\}\end{math}. 
We end up with a transformed collection of domain models: 
\begin{math}\mathcal{C'} = \{\mathcal{D'}_{0}, 
\mathcal{D'}_{1},...,\mathcal{D'}_{n} \} \end{math}.  
+\item Add in mixin containing global setting profiles
 \item Next domain specific rules are applied (See section 3). Let tr be a 
domain transform rule: \begin{math}
 \forall_j \forall_i \mathcal{A}_{i,j}  \subseteq \mathcal{D'}_{i} \end{math} 
such that \begin{math}  \mathcal{A'}_{i,j} = \{tr(p_0), tr(p_1),...,tr(p_n))\}. 
\end{math} tr may change either the model property URI or value or may 
transform the property to a null value (remove it) or it could add additional 
model properties not from the original set.  We are left with \begin{math}
 \mathcal{C''} =  \forall_j \forall_i \bigcup_{i,j}(\mathcal{D'}_{i} \cup 
\mathcal{A'}_{i,j} - (\mathcal{D'}_{i} \cap\mathcal{A}_{i,j})) \end{math}. Thus 
\begin{math}\mathcal{C''} \end{math} is just a set of transformed and 
untransformed model properties from all of the domain models \begin{math}
@@ -72,10 +79,17 @@
 \item Model container rules are applied for collections and sets. The general 
sorting in the previous step doesn't know how to handle collections and sets 
and needs to delegate back to the domain specific model containers (Sections 
3.4 and 3.5)
 \item Model properties are sorted (see section 2.2) again. This is to maintain 
the original order of collections.
 \item Interpolates the model properties (Section 5)
+\item Determine active profile(s)
+\item Applies Profiles
+\item Interpolates the model properties
 \item Applies dependency management rules
 \item Applies plugin management rules
 \end{enumerate}
 
+The last four steps involve cross-applying elements of the pom into the same 
pom. Inheritance takes place prior to this type of cross-applying operation. 
These operations have characteristics very similar to mixins, as they are not 
complete pom models in themselves.
+
+Profiles may contain properties that are used in interpolating the containing 
pom. Thus interpolation is also done after cross-applying the profile.
+
 \subsection{Sorting}
 Let \begin{math}\mathcal{C''}\end{math} be the original set of model 
properties and let \begin{math}\mathcal{C'''}\end{math} be the new set, which 
is initially empty. Now iterate over each element (model property) of 
\begin{math}\mathcal{C''}\end{math} placing the model property into set  
\begin{math}\mathcal{C'''}\end{math}  according to the following rules:
 \begin{enumerate}
@@ -85,8 +99,11 @@
 
 \end{enumerate}
 
+\subsection{Model Containers}
+In addition to the general inheritance rules, there is also the concept of 
Model Containers, which allow the framework to delegate to specific model 
container implementations the decision of whether \#collections and \#sets 
should be joined, deleted, or have no operation applied. This will be covered 
more fully in section 3.
+
 \subsection{Mixins and Multiple Inheritance}
-Currently, Maven 3.0 supports linearlized inheritance, making mixins and 
multiple inheritance easy. Support for multiple inheritance would require an 
addition to the pom, within the parents section.
+Currently, Maven 3.0 supports linearlized inheritance, making mixins and 
multiple inheritance easy. Support for multiple inheritance would require an 
additional to the pom, within the parents section.
 
 \begin{verbatim}
 <parents>
@@ -125,28 +142,63 @@
 The only difference between a parent project and a mixin is that the mixin is 
abstract (not a complete model).
 
 \section{Maven Project Inheritance Rules}
-These rules outlined in this section are provided in the PomClassicTransformer 
class. The shared-model framework will delegate to this transformer for the 
processing of the Maven specific domain model rules.
+These rules outlined in this section are provided in the PomTransformer class. 
The maven-shared-model framework will delegate to this transformer for the 
processing of the Maven specific domain model rules.
 
 \subsection{Inheriting Version and Group Ids}
 If \emph{project.version} is not specified within the child pom, the child pom 
will use the \emph{project.parent.version} as its own version. Similarly, if 
\emph{project.groupId} is not within the child pom, the child pom will use the 
\emph{project.parent.groupId} as its own \emph{project.groupId}.
 
+\subsection{Inheriting URLs}
+
+\subsection{Properties Excluded From Being Overridden}
+If the child project defines any of the properties below, they are not 
overridden by or joined with elements of the parent pom(s). 
+
+\begin{enumerate}
+\item project.build.resources
+\item project.build.testResoures
+\item project.pluginRepositories 
+\item project.organization 
+\item project.licenses
+\item project.developers
+\item project.contributors
+\item project.mailingLists
+\item project.ciManagement
+\item project.issueManagement
+\item project.distributionsManagement.repository
+\item project.distributionsManagement.snapshotRepository
+\item project.distributionsManagement.site
+\end{enumerate}
+
 \subsection{Properties Excluded From Inheritance}
-A child project does not inherit the following properties from its specified 
parent project. All other properties are inherited, unless otherwise noted 
below.
+A child project does not inherit the following properties from its specified 
parent project\footnote{Technically, project.version, project.groupId and 
project.artifactId are not inherited from the parent pom. They do, however, 
have the values of project.parent.version, project.parent.groupId and 
project.parent.artifactId implicitly applied from the same pom.}. All other 
properties are inherited, unless otherwise noted below.
 \begin{enumerate}
 \item project.parent
-\item project.modules
 \item project.name
 \item project.packaging
 \item project.profiles
 \item project.version
 \item project.groupId
-\item project.build.resources
-\item project.build.testResources
-\item project.pluginRepositories
+\item project.prerequisites
+\item project.distributionManagement.relocation
 \end{enumerate}
 
-A parent project can set an inherited property within the 
\emph{project.build.plugins.plugin} or 
\emph{project.build.plugins.plugin.executions.execution} section of the pom to 
mark the member as private, thus preventing inheritance.
+\subsection{Marking Containers as Final (Or Not Inherited)}
+A parent project can set an inherited property within the following elements 
of the pom. This will mark the container as final, thus preventing inheritance:
+\begin{enumerate}
+\item project.build.plugins.plugin
+\item project.build.plugins.plugin.executions.execution
+\item project.build.pluginManagement.plugins.plugin
+\item project.build.pluginManagement.plugins.plugin.executions.execution
+\item project.profiles.profile.build.plugins.plugin
+\item project.profiles.profile.build.plugins.plugin.executions.execution
+\item project.profiles.profile.build.pluginManagement.plugins.plugin
+\item 
project.profiles.profile.build.pluginManagement.plugins.plugin.executions.execution
+\item project.reporting.plugins.plugin
+\item project.reporting.plugins.plugin.reportSets.reportSet
+\item project.profiles.profile.reporting.plugins.plugin
+\item project.profiles.profile.reporting.plugins.plugin.reportSets.reportSet
+\end{enumerate}
 
+Some examples demonstrating use within the project model:
 \begin{verbatim}
     <plugin>
         <groupId>org.apache.maven</groupId>
@@ -169,17 +221,9 @@
     </plugin>
 \end{verbatim}
 
-\subsection{Super Pom Rules}
-The super pom is implicitly  the parent of every project and functions as a 
normal parent project except that it allows the child project to inherit the 
following properties, which are normally excluded. If the child project defines 
the property,  it overrides all elements of the respective super pom property. 
There is no join of these three superPom-child collections.
-\begin{itemize}
-\item project.build.resources
-\item project.build.testResources
-\item project.pluginRepositories 
-\end{itemize}
-
 \subsection{Artifact Inheritance (Model Container)}
 \subsubsection{Defined Nodes}
-Within the project there are a number of nodes which contain artifactId, 
groupId and version. These nodes may be inherited or even joined.
+Within the project there are a number of nodes which contain artifactId, 
groupId and version. These nodes may be inherited or joined.
 \begin{enumerate}
 \item project.dependencies.dependency
 \item project.build.plugins.plugin
@@ -188,65 +232,97 @@
 \item project.dependencyManagement.dependencies.dependency
 \item project.build.pluginManagement.plugins.plugin
 \item project.build.pluginManagement.plugins.plugin.dependencies.dependency
+\item project.reporting.plugins.plugin
+\item project.build.extensions.extension
 \end{enumerate}
+
 \subsubsection{Rules}
 Let the parent project be \begin{math}\mathcal{A}\end{math} and the child 
project be  \begin{math}\mathcal{B}\end{math} . Let both \begin{math}\alpha_i 
\subset \mathcal{A}\end{math} and \begin{math}\beta_i \subset 
\mathcal{B}\end{math} be one of the elements listed above. For example,  
\begin{math}\alpha_1\end{math} would contain all the elements of a project 
dependency within the parent project.
 
-Both \begin{math}\alpha_i \subset \mathcal{A}\end{math} and 
\begin{math}\beta_i \subset \mathcal{A}\end{math}, contain at least the 
elements groupId and artifactId, with an implied version value of null, if 
version is not specified within the pom. Also note that only (1), (3), (5) and 
(7) have an element of type, otherwise the type value is considered null. More 
precisely we have:
+Both \begin{math}\alpha_i \subset \mathcal{A}\end{math} and 
\begin{math}\beta_i \subset \mathcal{A}\end{math}, contain at least the 
following elements:
+\begin{enumerate}
+\item project.groupId (required)
+\item project.artifactId (required)
+\item project.version (default value - null)
+\item project.type (default value - jar)
+\item project.classifier (default value - null)
+\end{enumerate}
+
+(1-3) may be values referencing project.parent.groupId, 
project.parent.artifactId, project.parent.version, where they are not 
explicitly defined.
+
+More precisely we have:
 
 \begin{math} \forall_i  \forall_j \alpha_i = \{\langle groupId, value_j 
\rangle_i, \langle artifactId, value_{j+1}\rangle_i, \langle version, 
value_{j+2}\rangle_i, \ldots\}.\end{math}
 
-The inheritance rules are:
+Now define the following rules:
 
 \begin{enumerate}
-\item
-\begin{math}
-groupId(value)^{\alpha_i} \neq groupId(value)^{\beta_i} \vee 
artifactId(value)^{\alpha_i} \neq artifactId(value)^{\beta_i}  \Rightarrow 
\mathcal{B}_{new} = \mathcal{B} \cup \alpha_i 
+\item 
+ \begin{math} R_1 \equiv  
+groupId(value)^{\alpha_i} = groupId(value)^{\beta_i}  \wedge 
artifactId(value)^{\alpha_i} = artifactId(value)^{\beta_i} \wedge 
type(value)^{\alpha_i} = type(value)^{\beta_i}  \wedge 
classifier(value)^{\alpha_i} = classifier(value)^{\beta_i} 
 \end{math}
-\item
-\begin{math}
-groupId(value)^{\alpha_i} = groupId(value)^{\beta_i}  \wedge 
artifactId(value)^{\alpha_i} = artifactId(value)^{\beta_i}  \wedge 
version(value)^{\alpha_i} \neq version(value)^{\beta_i}  \wedge  
type(value)^{\alpha_i} = type(value)^{\beta_i} \Rightarrow \mathcal{B}_{new} = 
\mathcal{B} - \alpha_i 
+\item 
+ \begin{math} R_2 \equiv  
+version(value)^{\alpha_i} = version(value)^{\beta_i} 
 \end{math}
+\end{enumerate}
+
+
+The inheritance rules are JOIN, NOP, and DELETE:
+
+\begin{enumerate}
 \item
 \begin{math}
-groupId(value)^{\alpha_i} = groupId(value)^{\beta_i}  \wedge 
artifactId(value)^{\alpha_i} = artifactId(value)^{\beta_i}  \wedge 
version(value)^{\alpha_i} \neq version(value)^{\beta_i}  \wedge  
type(value)^{\alpha_i} \neq type(value)^{\beta_i} \Rightarrow \mathcal{B}_{new} 
= \mathcal{B} \cup \alpha_i 
+R_1 \wedge R_2 \Rightarrow \mathcal{B}_{new} = \mathcal{B} \cup \alpha_i - 
(\alpha_i \cap \beta_i)
 \end{math}
 \item
 \begin{math}
-groupId(value)^{\alpha_i} = groupId(value)^{\beta_i}  \wedge 
artifactId(value)^{\alpha_i} = artifactId(value)^{\beta_i}  \wedge 
version(value)^{\alpha_i} = version(value)^{\beta_i}  \wedge 
type(value)^{\alpha_i} = type(value)^{\beta_i} \Rightarrow \mathcal{B}_{new} = 
\mathcal{B} \cup \alpha_i - (\alpha_i \cap \beta_i)
+\neg R_1\Rightarrow \mathcal{B}_{new} = \mathcal{B} \cup \alpha_i 
 \end{math}
 \item
 \begin{math}
-groupId(value)^{\alpha_i} = groupId(value)^{\beta_i}  \wedge 
artifactId(value)^{\alpha_i} = artifactId(value)^{\beta_i}  \wedge 
version(value)^{\alpha_i} = version(value)^{\beta_i}  \wedge 
type(value)^{\alpha_i} \neq type(value)^{\beta_i} \Rightarrow \mathcal{B}_{new} 
= \mathcal{B} \cup \alpha_i 
-\end{math}
-
+R_1 \wedge \neg R_2 \Rightarrow \mathcal{B}_{new} = \mathcal{B} \end{math}
 \end{enumerate}
 
-Or more simply:
+Note that model container rules are performed after basic sorting and 
collapsing of the model inheritance. So a NOP operation means that a model 
container from the parent is left within the model, meaning there is a union of 
the elements. A delete means that the model container from the parent is 
removed, leaving the set the same. 
 
+\subsubsection{Default Group IDs}
+To maintain backwards compatibility, the following elements are assigned a 
default groupId of \emph{org.apache.maven.plugins}, if the groupId is not 
specified. 
 \begin{enumerate}
-\item if either groupId or artifactId is different, then inherit the node.
-\item if groupId, artifactId and type match but the version doesn't, then 
don't inherit the node.
-\item if groupId and artifactId  match but the version and types don't, then 
inherit the node.
-\item if groupId, artifactId, version and type match, then inherit and join 
the node.
-\item if groupId, artifactId, version match but type doesn't, then inherit the 
node
+\item project.build.plugins.plugin
+\item project.profiles.profile.build.plugins.plugin
+\item project.build.pluginManagement.plugins.plugin
+\item project.build.profiles.profile.pluginManagement.plugins.plugin
+\item project.reporting.plugins.plugin
+\item project.profiles.profile.reporting.plugins.plugin
 \end{enumerate}
 
-
 \subsection{Id Inheritance (Model Container)}
 
 \subsubsection{Defined Nodes}
-Within the project there are a number of nodes which contain id. These nodes 
may be inherited or even joined.
+Within the project there are a number of nodes which contain id. Each of the 
nodes below is an element of a collection, meaning there may be more than one. 
The ID is used to determine whether the containers should be joined, rather 
than just added to the collection..
 \begin{enumerate}
 \item project.pluginRepositories.pluginRepository
 \item project.repositories.repository
 \item project.reporting.plugins.plugin.reportSets.reportSet
+\item project.profiles.profile
 \item project.build.plugins.plugin.executions.execution
 \end{enumerate}
 
 \subsubsection{Rules}
 If an id exists in both the parent and child pom and the ids are equal, then 
join the nodes, otherwise inherit the node. 
 
+\subsubsection{Plugin Execution ID Rules}
+If a Plugin Model Container is joined by ID, the following rules apply:
+
+\begin{enumerate}
+\item Can not have two or more execution elements lacking an ID.
+\item If default-execution-id is explicitly defined as the execution id, it is 
treated as not having an id for purposes of the above rule.
+\item Project.Build.Plugins.Plugin.Executions.Execution.Goals is always joined 
on an execution id match. Duplicate goals are removed.
+\end{enumerate}
+
+The above rules also apply to joining with a pluginManagement node.
+
 \subsection{Plugin Configuration Inheritance}
 Plugin nodes are treated as a set. If a child pom contains the same element as 
a parent pom, then the parent pom element will not be inherited/joined unless 
the child element contains a property combine.children="append". In this case, 
it will treat the element as a collection.
 
@@ -266,6 +342,8 @@
 
 If the parent pom contains an element that the child pom does not have, the 
element will be inherited.
 
+
+
 \section{Management Rules}
 \subsection{Dependency/Plugin Management}
 Dependency and plugin management are treated the same, so we will only cover 
dependency management. Our initial set has already been processed for 
inheritance and interpolated by the time these rules are applied. 
@@ -346,4 +424,106 @@
 \subsection{Interpolation and Profiles}
 Active profiles are applied prior to interpolation so that any 
\emph{project.profiles.profile.properties} defined within an active profile can 
be used as an interpolation property [Still to be implemented]
 
-\end{document}
+\section{Profiles}
+Profiles allow the developer to conditionally add project information to the 
project model. Each profile has an activation property, with an associated 
matcher.
+
+We have the following five matchers:
+\begin{enumerate}
+\item Default - allows to specify a profile that will be active (provided no 
other profiles are matched)
+\item File - allows matching of profile based on the existence or nonexistence 
of a file
+\item JDK - allows matching profile based on JDK
+\item Operating System - allows matching profile based on operating system
+\item Property - allows matching profile based a user or environmental variable
+\end{enumerate}
+
+\subsection{Default Profile Matcher}
+Occurs if 
+project/profiles/profile/activation/activeByDefault 
+exists in the profile. If no other profiles are matched this one will be used.
+
+\subsection{File}
+This matcher will check for the existence (or nonexistence) of files. If 
+\begin{itemize}
+\item project/profiles/profile/activation/file/missing does not exist or
+\item project/profiles/profile/activation/file/exists, 
+\end{itemize}
+
+the profile will activate.
+
+\subsection{JDK}
+This matcher will check if project/profiles/profile/activation/jdk value 
matches the current JDK version in use for the build.
+
+\section{Model Container Operations}
+\subsection{Definitions}
+\begin{description}
+\item[Mode Container Rule] Rule that determines whether the model properties 
between sets \begin{math} \mathcal{A}\end{math} and  \begin{math} 
\mathcal{B}\end{math} match.  
+\item[M-Operator] Model Container Operator - an operation on Rules. The result 
of the M-Operator is a set operation. Each resulting set of an M-Operator has 
to be equal to the resulting set of another M-Operator defined within the 
system.
+\end{description}
+\subsection{M-Operators}
+\subsubsection{Definitions}
+The Maven system defines the following operators:
+\begin{description}
+\item[JOIN]  M($\mathnormal{\mathcal{R}_{1},\mathcal{R}_{2} ) = \gamma - 
(\alpha_i \cap \beta_i)}$
+\item[NOP] M($\mathnormal{\neg \mathcal{R}_{1}, \mathcal{R}_{2})  = \gamma} $ 
+\item[DELETE] M($\mathnormal{\mathcal{R}_{1}, \neg \mathcal{R}_{2}) =  \gamma 
-\alpha_i} $ 
+\end{description}
+Note that $\mathnormal{\gamma=\mathcal{B}\cup \alpha_i}$. This is the set that 
results after basic sorting and inheritance have been applied to the models. 
+
+There are some interesting properties of the above definitions. For example,  
a JOIN is equivalent to a NOP when the intersection of the model containers is 
null, or a JOIN is equivalent to a DELETE if there is no child model container.
+
+Also these definitions allow us to clearly see how to undo an operation. For 
example, say we did a DELETE and now we want to revert the operation. We merely 
need to add back in the properties of the parent model container, giving us a 
NOP. To revert a JOIN, we add back in the intersection of the parent and child 
model containers.
+
+\subsubsection{Negation}
+Define negation on the operators as:
+\begin{enumerate}
+\item $\mathnormal{\neg M(\mathcal{R}_{1},\mathcal{R}_{2} ) 
=M(\mathcal{R}_{1},\neg \mathcal{R}_{2} ) }$
+\item $\mathnormal{\neg M(\neg \mathcal{R}_{1},\mathcal{R}_{2} ) =M(\neg 
\mathcal{R}_{1}, \mathcal{R}_{2} ) }$
+\item $\mathnormal{\neg M(\mathcal{R}_{1}, \neg \mathcal{R}_{2}) =  
M(\mathcal{R}_{1},\mathcal{R}_{2} )} $ 
+\end{enumerate}
+Negation of a JOIN is a DELETE, negation of a NOP is a NOP, negation of a 
DELETE is a JOIN. To understand the mechanics of negation, we need to look at 
the underlying set operations. 
+
+Take (3), where we negate a DELETE. Since we have defined a negation of a 
DELETE as a JOIN, the set operations for a negation would be to add in elements 
of the parent model container and then to remove the intersection of the child 
and parent model containers.
+\subsubsection{Addition}
+Define addition operators as:
+\begin{description}
+\item[Sum of JOINs] $\mathnormal{\sum_{i=1}^n \sum_{j=1}^m 
M(\mathcal{R}^{\alpha_{i} , \beta_{j}}_{1},\mathcal{R}^{\alpha_{i} , 
\beta_{j}}_{2} ) }$
+\item[Sum of NOPs] $\mathnormal{\sum_{i=1}^n \sum_{j=1}^m M(\neg 
\mathcal{R}^{\alpha_{i} , \beta_{j}}_{1},\mathcal{R}^{\alpha_{i} , 
\beta_{j}}_{2} ) }$
+\item[Sum  of DELETEs] $\mathnormal{\sum_{i=1}^n \sum_{j=1}^m 
M(\mathcal{R}^{\alpha_{i} , \beta_{j}}_{1},\neg \mathcal{R}^{\alpha_{i} , 
\beta_{j}}_{2} ) }$
+\end{description}
+
+Take the case of Sum of Joins. Let i = 1, meaning there is only one parent 
model container. Then we have:
+
+\begin{eqnarray}
+\sum_{i=1}^n \sum_{j=1}^m M(\mathcal{R}^{\alpha_{i} , 
\beta_{j}}_{1},\mathcal{R}^{\alpha_{i} , \beta_{j}}_{2} )  & = &
+\sum_{j=1}^m M(\mathcal{R}^{\alpha_{1} , 
\beta_{j}}_{1},\mathcal{R}^{\alpha_{1} , \beta_{j}}_{2} ) \\
+& = &
+\mathcal{B} \cup \alpha_{1}-(\alpha_{1} \cap \beta_{1}) - (\alpha_{1} \cap 
\beta_{2})  - \cdots - (\alpha_{1} \cap \beta_{m})  \\ & = &
+\mathcal{B} \cup \alpha_{1}-(\alpha_{1} \cap (\beta_{1} \cup \beta_{2}  \cup 
\cdots  \cup \beta_{m})
+\end{eqnarray}
+
+So we simplify the operation to just adding the parent model container to the 
child model, and then removing the intersection between that parent model 
container and the union of all child model container. Thus we can simply the 
calculation for multiple joins, allowing more efficient processing on the 
underlying data model.
+
+\appendix
+\section{Definitions}
+\begin{description}
+\item[Collection] Any model property with a URI ending in \#collection
+\item[Canonical Data Format] A set of model properties including all possible 
elements of the Maven model
+\item[Delete] Delete Model Container Action. Processing this rule on a model 
container will delete it's model properties from a model data source.
+\item[Element] A model property
+\item[Interpolation] 
+\item[Join] Join Model Container Action. Processing this rule on a model 
container will join it's model properties with another container's model 
properties.
+\item[Mixin]  An abstract model which needn't contain all the required 
elements of the model.
+\item[Model Container]  A container for a set of Model Properties associated 
with a specific URI.
+\item[Model Container Action]  One of the following actions: delete, join, nop 
that may be performed on a  Model Container.
+\item[Model Data Source] A class that provides operations for deleting, 
joining and querying Model Containers.
+\item[Model Property]  A property of the model that consists of a URI and a 
value, which may be null.
+\item[Model Transformer]  A class that is responsible for transforming from a 
model format to the 
+canonical data model. It can also optionally perform various domain specific 
rules and processing.
+\item[Node] A model container
+\item[NOP] No operation Model Container Action. Processing this rule on a 
model container will leave the model properties of the model container 
untouched.
+\item[Profile]  - Project information added the project model based on a 
Profile ActivationProperty
+\item[Profile Activation Property]  - Property that a developer can specify 
that triggers the applying of a profile to it's containing project model.
+\item[Set] Any model property with a URI ending in \#set
+\end{description}
+
+\end{document}
\ No newline at end of file

Modified: maven/components/branches/MNG-3932/maven-project/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-3932/maven-project/pom.xml?rev=739771&r1=739770&r2=739771&view=diff
==============================================================================
--- maven/components/branches/MNG-3932/maven-project/pom.xml (original)
+++ maven/components/branches/MNG-3932/maven-project/pom.xml Sun Feb  1 
14:59:32 2009
@@ -19,8 +19,7 @@
 under the License.
 -->
 
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
   <parent>
     <artifactId>maven</artifactId>
     <groupId>org.apache.maven</groupId>
@@ -28,7 +27,7 @@
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>maven-project</artifactId>
-  <name>Maven Project Builder</name>
+  <name>Maven Project</name>
   <description>This library is used to not only read Maven project object 
model files, but to assemble inheritence
     and to retrieve remote models as required.</description>
   <dependencies>

Propchange: maven/components/branches/MNG-3932/maven-project/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/profiles/DefaultMavenProfilesBuilder.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/profiles/DefaultMavenProfilesBuilder.java?rev=739771&r1=739770&r2=739771&view=diff
==============================================================================
--- 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/profiles/DefaultMavenProfilesBuilder.java
 (original)
+++ 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/profiles/DefaultMavenProfilesBuilder.java
 Sun Feb  1 14:59:32 2009
@@ -50,7 +50,7 @@
 
         ProfilesRoot profilesRoot = null;
 
-        if ( profilesXml.exists() )
+        if ( profilesXml.isFile() )
         {
             getLogger().debug( "reading: " + profilesXml.getAbsolutePath() );
 

Modified: 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/profiles/ProfilesConversionUtils.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/profiles/ProfilesConversionUtils.java?rev=739771&r1=739770&r2=739771&view=diff
==============================================================================
--- 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/profiles/ProfilesConversionUtils.java
 (original)
+++ 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/profiles/ProfilesConversionUtils.java
 Sun Feb  1 14:59:32 2009
@@ -78,6 +78,8 @@
                 os.setFamily( profileOs.getFamily() );
                 os.setName( profileOs.getName() );
                 os.setVersion( profileOs.getVersion() );
+
+                activation.setOs( os );
             }
 
             org.apache.maven.profiles.ActivationFile profileFile = 
profileActivation.getFile();
@@ -94,10 +96,6 @@
 
             profile.setActivation( activation );
         }
-        else
-        {
-            profile.setActivation( new AlwaysOnActivation() );
-        }
 
         profile.setProperties( profileXmlProfile.getProperties() );
 

Modified: 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/profiles/activation/CustomActivator.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/profiles/activation/CustomActivator.java?rev=739771&r1=739770&r2=739771&view=diff
==============================================================================
--- 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/profiles/activation/CustomActivator.java
 (original)
+++ 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/profiles/activation/CustomActivator.java
 Sun Feb  1 14:59:32 2009
@@ -20,7 +20,7 @@
  */
 
 import org.apache.maven.model.Activation;
-import org.apache.maven.model.ActivationCustom;
+//import org.apache.maven.model.ActivationCustom;
 import org.apache.maven.model.Profile;
 import org.codehaus.plexus.PlexusConstants;
 import org.codehaus.plexus.PlexusContainer;
@@ -58,6 +58,7 @@
     public boolean canDetermineActivation( Profile profile, 
ProfileActivationContext context )
         throws ProfileActivationException
     {
+        /*
         Activation activation = profile.getActivation();
 
         if ( activation != null )
@@ -74,10 +75,12 @@
                 }
             }
         }
+        */
 
         return false;
     }
 
+    /*
     private ProfileActivator loadProfileActivator( ActivationCustom custom, 
ProfileActivationContext context )
         throws ProfileActivationException
     {
@@ -117,15 +120,20 @@
 
         return activator;
     }
+    */
 
     public boolean isActive( Profile profile, ProfileActivationContext context 
)
         throws ProfileActivationException
     {
+        /*
         ActivationCustom custom = profile.getActivation().getCustom();
 
         ProfileActivator activator = loadProfileActivator( custom, context );
 
         return activator.isActive( profile, context );
+        */
+        
+        return false;
     }
 
     protected Logger getLogger()

Modified: 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/profiles/injection/DefaultProfileInjector.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/profiles/injection/DefaultProfileInjector.java?rev=739771&r1=739770&r2=739771&view=diff
==============================================================================
--- 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/profiles/injection/DefaultProfileInjector.java
 (original)
+++ 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/profiles/injection/DefaultProfileInjector.java
 Sun Feb  1 14:59:32 2009
@@ -26,7 +26,6 @@
 import org.codehaus.plexus.util.xml.Xpp3Dom;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -59,6 +58,7 @@
         injectModules( profile, model );
 
         model.setRepositories( ModelUtils.mergeRepositoryLists( 
profile.getRepositories(), model.getRepositories() ) );
+        model.setPluginRepositories( ModelUtils.mergeRepositoryLists( 
profile.getPluginRepositories(), model.getPluginRepositories() ) );
 
         injectReporting( profile, model );
 
@@ -397,7 +397,7 @@
             }
             else
             {
-                Map depsMap = new HashMap();
+                Map depsMap = new LinkedHashMap();
 
                 List deps = modelDepMgmt.getDependencies();
 
@@ -445,7 +445,7 @@
                     modelReporting.setOutputDirectory( 
profileReporting.getOutputDirectory() );
                 }
 
-                Map mergedReportPlugins = new HashMap();
+                Map mergedReportPlugins = new LinkedHashMap();
 
                 Map profileReportersByKey = 
profileReporting.getReportPluginsAsMap();
 
@@ -513,7 +513,7 @@
 
         recessive.setConfiguration( merge( dominantConfig, recessiveConfig ) );
 
-        Map mergedReportSets = new HashMap();
+        Map mergedReportSets = new LinkedHashMap();
 
         Map dominantReportSetsById = dominant.getReportSetsAsMap();
 

Modified: 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=739771&r1=739770&r2=739771&view=diff
==============================================================================
--- 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
 (original)
+++ 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
 Sun Feb  1 14:59:32 2009
@@ -23,7 +23,6 @@
 import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -308,6 +307,17 @@
             profileActivationContext = new DefaultProfileActivationContext( 
config.getExecutionProperties(), false );
         }
 
+        List<Profile> projectProfiles = new ArrayList<Profile>();
+
+        projectProfiles.addAll( profileAdvisor.applyActivatedProfiles( model,
+                                                                       
isReactorProject ? projectDescriptor : null,
+                                                                       
isReactorProject, profileActivationContext ) );
+
+        projectProfiles.addAll( profileAdvisor.applyActivatedExternalProfiles( 
model,
+                                                                               
isReactorProject ? projectDescriptor
+                                                                               
                : null,
+                                                                               
externalProfileManager ) );
+
         MavenProject project;
         
         try
@@ -327,12 +337,6 @@
         {
             throw new InvalidProjectModelException( projectId, e.getMessage(), 
projectDescriptor, e );
         }
-
-        List<Profile> projectProfiles = new ArrayList<Profile>();
-        
-        projectProfiles.addAll( profileAdvisor.applyActivatedProfiles( 
project.getModel(), project.getFile(), isReactorProject, 
profileActivationContext ) );
-        
-        projectProfiles.addAll( profileAdvisor.applyActivatedExternalProfiles( 
project.getModel(), project.getFile(), externalProfileManager ) );
         
         project.setActiveProfiles( projectProfiles );
 

Modified: 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/MavenProject.java?rev=739771&r1=739770&r2=739771&view=diff
==============================================================================
--- 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
 (original)
+++ 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
 Sun Feb  1 14:59:32 2009
@@ -114,7 +114,7 @@
 
     private List collectedProjects = Collections.EMPTY_LIST;
 
-    private List attachedArtifacts;
+    private List<Artifact> attachedArtifacts;
 
     private MavenProject executionProject;
 
@@ -1437,17 +1437,20 @@
 
         if ( attachedArtifacts.contains( artifact ) )
         {
-            throw new DuplicateArtifactAttachmentException( this, artifact );
+             //should add logger to this class:
+             System.out.println("[Warning] Duplicate artifact: " + 
artifact.toString());
+             return;
+            //throw new DuplicateArtifactAttachmentException( this, artifact );
         }
 
         getAttachedArtifacts().add( artifact );
     }
 
-    public List getAttachedArtifacts()
+    public List<Artifact> getAttachedArtifacts()
     {
         if ( attachedArtifacts == null )
         {
-            attachedArtifacts = new ArrayList();
+            attachedArtifacts = new ArrayList<Artifact>();
         }
         return attachedArtifacts;
     }

Modified: 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java?rev=739771&r1=739770&r2=739771&view=diff
==============================================================================
--- 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
 (original)
+++ 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
 Sun Feb  1 14:59:32 2009
@@ -457,8 +457,10 @@
      * @return {...@link Set} &lt; {...@link Artifact} >
      * @todo desperately needs refactoring. It's just here because it's 
implementation is maven-project specific
      */
-    public static Set<Artifact> createArtifacts( ArtifactFactory 
artifactFactory, List<Dependency> dependencies,
-                                                 String inheritedScope, 
ArtifactFilter dependencyFilter,
+    public static Set<Artifact> createArtifacts( ArtifactFactory 
artifactFactory, 
+                                                 List<Dependency> dependencies,
+                                                 String inheritedScope, 
+                                                 ArtifactFilter 
dependencyFilter,
                                                  MavenProject project )
         throws InvalidDependencyVersionException
     {

Propchange: 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/builder/Interpolator.java
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Sun Feb  1 14:59:32 2009
@@ -1 +1 @@
-"Author Date Id Revision"
+Author Date Id Revision

Modified: 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicDomainModel.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicDomainModel.java?rev=739771&r1=739770&r2=739771&view=diff
==============================================================================
--- 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicDomainModel.java
 (original)
+++ 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicDomainModel.java
 Sun Feb  1 14:59:32 2009
@@ -141,6 +141,11 @@
         this.parentFile = parentFile;
     }
     
+    /**
+     * This should only be set for projects that are in the build. Setting for 
poms in the repo may cause unstable behavior.
+     * 
+     * @param projectDirectory
+     */
     public void setProjectDirectory(File projectDirectory)
     {
         this.projectDirectory = projectDirectory;
@@ -153,7 +158,7 @@
 
     public boolean isPomInBuild()
     {
-        return projectDirectory != null && new File(projectDirectory, 
"pom.xml").exists();
+        return projectDirectory != null;
     }
 
     /**
@@ -290,7 +295,13 @@
             //TODO: Should add all collections from ProjectUri
             s.addAll(PomTransformer.URIS);
             
s.add(ProjectUri.Build.PluginManagement.Plugins.Plugin.Executions.xUri);
+            
s.add(ProjectUri.DependencyManagement.Dependencies.Dependency.Exclusions.xUri);
+            s.add(ProjectUri.Dependencies.Dependency.Exclusions.xUri);
             s.add(ProjectUri.Build.Plugins.Plugin.Executions.xUri);
+            
s.add(ProjectUri.Build.Plugins.Plugin.Executions.Execution.Goals.xURI);
+            s.add(ProjectUri.Reporting.Plugins.Plugin.ReportSets.xUri);
+            
s.add(ProjectUri.Reporting.Plugins.Plugin.ReportSets.ReportSet.configuration);
+            
s.add(ProjectUri.Build.Plugins.Plugin.Executions.Execution.configuration);
             modelProperties = ModelMarshaller.marshallXmlToModelProperties(
                 getInputStream(), ProjectUri.baseUri, s );
         }

Modified: 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java?rev=739771&r1=739770&r2=739771&view=diff
==============================================================================
--- 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java
 (original)
+++ 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java
 Sun Feb  1 14:59:32 2009
@@ -43,10 +43,9 @@
      * Returns a maven project for the specified input stream.
      *
      * @param pom                         input stream of the model
-     * @param inheritedModels             list of models containing additional 
parent models in order from most to least specialized
+     * @param mixins             list of models containing additional parent 
models in order from most to least specialized
      * @param interpolatorProperties      properties used for interpolation of 
properties within the model
      * @param resolver                    artifact resolver used in resolving 
artifacts
-     * @param baseDirectory               the base directory of the model
      * @param projectBuilderConfiguration
      * @return a maven project for the specified input stream
      * @throws IOException if there is a problem in the construction of the 
maven project

Modified: 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java?rev=739771&r1=739770&r2=739771&view=diff
==============================================================================
--- 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
 (original)
+++ 
maven/components/branches/MNG-3932/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
 Sun Feb  1 14:59:32 2009
@@ -43,6 +43,7 @@
 import org.apache.maven.project.builder.PomClassicDomainModel;
 import org.apache.maven.project.builder.PomClassicDomainModelFactory;
 import org.apache.maven.project.builder.PomClassicTransformer;
+import org.apache.maven.project.builder.PomTransformer;
 import org.apache.maven.project.builder.ProjectBuilder;
 import org.apache.maven.shared.model.DomainModel;
 import org.apache.maven.shared.model.InterpolatorProperty;
@@ -59,7 +60,7 @@
  * Default implementation of the project builder.
  */
 @Component(role = ProjectBuilder.class)
-public final class DefaultProjectBuilder
+public class DefaultProjectBuilder
     implements ProjectBuilder, LogEnabled
 {
     @Requirement
@@ -156,8 +157,7 @@
         
         PomClassicTransformer transformer = new PomClassicTransformer( new 
PomClassicDomainModelFactory() );
         
-        ModelTransformerContext ctx = new ModelTransformerContext(
-            Arrays.asList( new ArtifactModelContainerFactory(), new 
IdModelContainerFactory() ) );
+        ModelTransformerContext ctx = new 
ModelTransformerContext(PomTransformer.MODEL_CONTAINER_INFOS );
         
         PomClassicDomainModel transformedDomainModel = ( 
(PomClassicDomainModel) ctx.transform( domainModels,
                                                                                
                 transformer,
@@ -220,7 +220,7 @@
                 f = new File( f, "pom.xml" );
             }
             
-            return f.exists();
+            return f.isFile();
         }
         catch ( IOException e )
         {
@@ -290,7 +290,7 @@
             parentFile = new File( parentFile.getAbsolutePath(), "pom.xml" );
         }
 
-        if ( !parentFile.exists() )
+        if ( !parentFile.isFile() )
         {
             throw new IOException( "File does not exist: File = " + 
parentFile.getAbsolutePath() );
         }

Propchange: maven/components/branches/MNG-3932/maven-project/src/site/site.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision


Reply via email to