Author: sisbell
Date: Tue Jun 17 15:10:22 2008
New Revision: 668853
URL: http://svn.apache.org/viewvc?rev=668853&view=rev
Log:
Code for maven projetc building.
Added:
maven/sandbox/trunk/maven/maven-project-builder/
maven/sandbox/trunk/maven/maven-project-builder/maven-project-builder.iml
maven/sandbox/trunk/maven/maven-project-builder/pom.xml
maven/sandbox/trunk/maven/maven-project-builder/src/
maven/sandbox/trunk/maven/maven-project-builder/src/main/
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/ArtifactModelContainerFactory.java
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/IdModelContainerFactory.java
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomClassicDomainModel.java
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/ProjectUri.java
maven/sandbox/trunk/maven/maven-project-builder/src/test/
Added: maven/sandbox/trunk/maven/maven-project-builder/maven-project-builder.iml
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/maven/maven-project-builder/maven-project-builder.iml?rev=668853&view=auto
==============================================================================
--- maven/sandbox/trunk/maven/maven-project-builder/maven-project-builder.iml
(added)
+++ maven/sandbox/trunk/maven/maven-project-builder/maven-project-builder.iml
Tue Jun 17 15:10:22 2008
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module relativePaths="true" type="JAVA_MODULE" version="4">
+ <component name="NewModuleRootManager" inherit-compiler-output="true">
+ <exclude-output />
+ <content url="file://$MODULE_DIR$">
+ <sourceFolder url="file://$MODULE_DIR$/src/main/java"
isTestSource="false" />
+ </content>
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ <orderEntry type="module" module-name="maven-shared-model" />
+ <orderEntry type="module" module-name="maven-model" />
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root
url="jar://$localRepository$/net/sf/kxml/kxml2/2.2.2/kxml2-2.2.2.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntryProperties />
+ </component>
+</module>
+
Added: maven/sandbox/trunk/maven/maven-project-builder/pom.xml
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/maven/maven-project-builder/pom.xml?rev=668853&view=auto
==============================================================================
--- maven/sandbox/trunk/maven/maven-project-builder/pom.xml (added)
+++ maven/sandbox/trunk/maven/maven-project-builder/pom.xml Tue Jun 17 15:10:22
2008
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project 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">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project-builder</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <name>maven-project-builder</name>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-shared-model</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>net.sf.kxml</groupId>
+ <artifactId>kxml2</artifactId>
+ <version>2.2.2</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.4</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
\ No newline at end of file
Added:
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/ArtifactModelContainerFactory.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/ArtifactModelContainerFactory.java?rev=668853&view=auto
==============================================================================
---
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/ArtifactModelContainerFactory.java
(added)
+++
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/ArtifactModelContainerFactory.java
Tue Jun 17 15:10:22 2008
@@ -0,0 +1,93 @@
+package org.apache.maven.project.builder;
+
+import org.apache.maven.shared.model.*;
+import java.util.*;
+
+public final class ArtifactModelContainerFactory implements
ModelContainerFactory {
+
+ private static final Collection<String> uris =
Collections.unmodifiableList(Arrays.asList(
+ ProjectUri.DependencyManagement.Dependencies.Dependency.xUri,
+ ProjectUri.Dependencies.Dependency.xUri,
+
ProjectUri.Profiles.Profile.DependencyManagement.Dependencies.Dependency.xUri,
+ ProjectUri.Profiles.Profile.Dependencies.Dependency.xUri,
+ ProjectUri.Build.PluginManagement.Plugins.Plugin.xUri,
+
ProjectUri.Build.PluginManagement.Plugins.Plugin.Dependencies.Dependency.xUri,
+ ProjectUri.Build.Plugins.Plugin.xUri,
+ ProjectUri.Build.Plugins.Plugin.Dependencies.Dependency.xUri,
+
ProjectUri.Build.Plugins.Plugin.Dependencies.Dependency.Exclusions.Exclusion.xUri
+ ));
+
+ public Collection<String> getUris() {
+ return uris;
+ }
+
+ public ModelContainer create(List<ModelProperty> modelProperties) {
+ if (modelProperties == null || modelProperties.size() == 0) {
+ throw new IllegalArgumentException("modelProperties: null or
empty");
+ }
+ return new ArtifactModelContainer(modelProperties);
+ }
+
+ private static class ArtifactModelContainer implements ModelContainer {
+
+ private String groupId;
+
+ private String artifactId;
+
+ private String version;
+
+ private List<ModelProperty> properties;
+
+ private ArtifactModelContainer(List<ModelProperty> properties) {
+ this.properties = new ArrayList<ModelProperty>(properties);
+ //Collections.sort(this.properties, new ModelPropertyComparator());
+ this.properties = Collections.unmodifiableList(this.properties);
+
+ for (ModelProperty mp : properties) {
+ if (mp.getUri().endsWith("version")) {
+ this.version = mp.getValue();
+ } else if (mp.getUri().endsWith("artifactId")) {
+ this.artifactId = mp.getValue();
+ } else if (mp.getUri().endsWith("groupId")) {
+ this.groupId = mp.getValue();
+ }
+ }
+ if (groupId == null) {
+ throw new IllegalArgumentException("properties does not
contain group id:");
+ }
+
+ if (artifactId == null) {
+ throw new IllegalArgumentException("properties does not
contain artifact id");
+ }
+ }
+
+ public ModelContainerAction containerAction(ModelContainer
modelContainer) {
+ if (modelContainer == null) {
+ throw new IllegalArgumentException("modelContainer: null");
+ }
+
+ if (!(modelContainer instanceof ArtifactModelContainer)) {
+ throw new IllegalArgumentException("modelContainer: wrong
type");
+ }
+
+ ArtifactModelContainer c = (ArtifactModelContainer) modelContainer;
+ if (c.groupId.equals(groupId) && c.artifactId.equals(artifactId)) {
+ return (c.version.equals(version)) ? ModelContainerAction.JOIN
: ModelContainerAction.DELETE;
+ } else {
+ return ModelContainerAction.NOP;
+ }
+ }
+
+ public ModelContainer createNewInstance(List<ModelProperty>
modelProperties) {
+ return new ArtifactModelContainer(modelProperties);
+ }
+
+ public List<ModelProperty> getProperties() {
+ return properties;
+ }
+
+ public String toString() {
+ return "Group ID = " + groupId + ", Artifact ID = " + artifactId +
", Version = " + version;
+ }
+ }
+ }
Added:
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/IdModelContainerFactory.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/IdModelContainerFactory.java?rev=668853&view=auto
==============================================================================
---
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/IdModelContainerFactory.java
(added)
+++
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/IdModelContainerFactory.java
Tue Jun 17 15:10:22 2008
@@ -0,0 +1,77 @@
+package org.apache.maven.project.builder;
+
+import org.apache.maven.shared.model.*;
+import java.util.*;
+
+public class IdModelContainerFactory implements ModelContainerFactory {
+
+ private static final Collection<String> uris =
Collections.unmodifiableList(Arrays.asList(
+ ProjectUri.Build.Plugins.Plugin.Executions.Execution.xUri,
+
ProjectUri.Build.PluginManagement.Plugins.Plugin.Executions.Execution.xUri,
+ ProjectUri.PluginRepositories.PluginRepository.xUri,
+ ProjectUri.Repositories.Repository.xUri,
+ ProjectUri.Reporting.Plugins.Plugin.ReportSets.ReportSet.xUri,
+ ProjectUri.Profiles.Profile.xUri
+ ));
+
+ public Collection<String> getUris() {
+ return uris;
+ }
+
+ public ModelContainer create(List<ModelProperty> modelProperties) {
+ if (modelProperties == null || modelProperties.size() == 0) {
+ throw new IllegalArgumentException("modelProperties: null or
empty");
+ }
+ return new IdModelContainer(modelProperties);
+ }
+
+ private static class IdModelContainer implements ModelContainer {
+
+ private String id;
+
+ private List<ModelProperty> properties;
+
+ private IdModelContainer(List<ModelProperty> properties) {
+ this.properties = new ArrayList<ModelProperty>(properties);
+ this.properties = Collections.unmodifiableList(this.properties);
+
+ for (ModelProperty mp : properties) {
+ if (mp.getUri().endsWith("id")) {
+ this.id = mp.getValue();
+ }
+ }
+
+ // if (id == null) {
+ // throw new IllegalArgumentException("properties does not
contain id");
+ // }
+ }
+
+ public ModelContainerAction containerAction(ModelContainer
modelContainer) {
+ if (modelContainer == null) {
+ throw new IllegalArgumentException("modelContainer: null");
+ }
+
+ if (!(modelContainer instanceof IdModelContainer)) {
+ throw new IllegalArgumentException("modelContainer: wrong
type");
+ }
+
+ IdModelContainer c = (IdModelContainer) modelContainer;
+ if(c.id == null || id == null) {
+ return ModelContainerAction.NOP;
+ }
+ return (c.id.equals(id)) ? ModelContainerAction.JOIN :
ModelContainerAction.NOP;
+ }
+
+ public ModelContainer createNewInstance(List<ModelProperty>
modelProperties) {
+ return new IdModelContainer(modelProperties);
+ }
+
+ public List<ModelProperty> getProperties() {
+ return properties;
+ }
+
+ public String toString() {
+ return "ID = " + id;
+ }
+ }
+}
Added:
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomClassicDomainModel.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomClassicDomainModel.java?rev=668853&view=auto
==============================================================================
---
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomClassicDomainModel.java
(added)
+++
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomClassicDomainModel.java
Tue Jun 17 15:10:22 2008
@@ -0,0 +1,60 @@
+package org.apache.maven.project.builder;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
+import org.apache.maven.shared.model.InputStreamDomainModel;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+
+import java.io.*;
+import java.util.Arrays;
+
+/**
+ * Provides a wrapper for the maven model.
+ */
+public final class PomClassicDomainModel implements InputStreamDomainModel {
+
+ private byte[] inputStream;
+
+ /**
+ * Constructor
+ *
+ * @param model maven model
+ */
+ public PomClassicDomainModel(Model model) throws IOException {
+ if (model == null) {
+ throw new IllegalArgumentException("model: null");
+ }
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ MavenXpp3Writer writer = new MavenXpp3Writer();
+ writer.write(new OutputStreamWriter(baos), model);
+ inputStream = baos.toByteArray();
+ }
+
+ public PomClassicDomainModel(InputStream inputStream) throws IOException {
+ if (inputStream == null) {
+ throw new IllegalArgumentException("inputStream: null");
+ }
+ this.inputStream = IOUtil.toByteArray(inputStream);
+ }
+
+ /**
+ * Returns maven model
+ *
+ * @return maven model
+ */
+ public Model getModel() throws IOException {
+ try {
+ return new MavenXpp3Reader().read(new StringReader(new
String(inputStream)));
+ }
+ catch (XmlPullParserException e) {
+ throw new IOException(e);
+ }
+ }
+
+ public InputStream getInputStream() {
+ return new ByteArrayInputStream(Arrays.copyOf(inputStream,
inputStream.length));
+ }
+}
Added:
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java?rev=668853&view=auto
==============================================================================
---
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java
(added)
+++
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java
Tue Jun 17 15:10:22 2008
@@ -0,0 +1,103 @@
+package org.apache.maven.project.builder;
+
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+
+import org.apache.maven.shared.model.*;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.*;
+
+/**
+ * Provides methods for transforming model properties into a domain model for
the pom classic format and vice versa.
+ */
+public final class PomClassicTransformer implements ModelTransformer {
+
+ private Set<String> uris;
+
+ public PomClassicTransformer() {
+
+ }
+
+ public String getBaseUri() {
+ return ProjectUri.baseUri;
+ }
+
+ public PomClassicTransformer(Set<String> uris) {
+ this.uris = new HashSet<String>(Arrays.asList(
+ "http://apache.org/maven/project/build/resources#collection",
+
"http://apache.org/maven/project/build/plugins/plugin/dependencies/dependency/exclusions#collection",
+
"http://apache.org/maven/project/profiles/profile/build/pluginManagement/plugins#collection",
+
"http://apache.org/maven/project/profiles/profile/build/plugins/plugin/dependencies/dependency/exclusions#collection",
+
"http://apache.org/maven/project/profiles/profile/reporting/plugins#collection",
+
"http://apache.org/maven/project/dependencyManagement/dependencies/dependency/exclusions#collection",
+
"http://apache.org/maven/project/profiles/profile/build/testResources#collection",
+
"http://apache.org/maven/project/reporting/plugins/plugin/reportSets#collection",
+
"http://apache.org/maven/project/pluginRepositories#collection",
+
"http://apache.org/maven/project/profiles/profile/build/pluginManagement/plugins/plugin/dependencies#collection",
+
"http://apache.org/maven/project/profiles/profile/build/resources#collection",
+
"http://apache.org/maven/project/profiles/profile/build/pluginManagement/plugins/plugin/dependencies/dependency/exclusions#collection",
+ "http://apache.org/maven/project/licenses#collection",
+
"http://apache.org/maven/project/build/plugins/plugin/dependencies#collection",
+
"http://apache.org/maven/project/profiles/profile/dependencyManagement/dependencies/dependency/exclusions#collection",
+
"http://apache.org/maven/project/dependencies/dependency/exclusions#collection",
+
"http://apache.org/maven/project/profiles/profile/build/plugins/plugin/dependencies#collection",
+
"http://apache.org/maven/project/build/testResources#collection",
+
"http://apache.org/maven/project/profiles/profile/pluginRepositories#collection",
+
"http://apache.org/maven/project/build/pluginManagement/plugins#collection",
+ "http://apache.org/maven/project/profiles#collection",
+ "http://apache.org/maven/project/reporting/plugins#collection",
+
"http://apache.org/maven/project/build/pluginManagement/plugins/plugin/dependencies/dependency/exclusions#collection",
+
"http://apache.org/maven/project/build/pluginManagement/plugins/plugin/executions#collection",
+
"http://apache.org/maven/project/profiles/profile/dependencies/dependency/exclusions#collection",
+ "http://apache.org/maven/project/dependencies#collection",
+ "http://apache.org/maven/project/contributors#collection",
+ "http://apache.org/maven/project/developers#collection",
+ "http://apache.org/maven/project/build/plugins#collection",
+
"http://apache.org/maven/project/profiles/profile/build/pluginManagement/plugins/plugin/executions#collection",
+
"http://apache.org/maven/project/profiles/profile/dependencies#collection",
+ "http://apache.org/maven/project/mailingLists#collection",
+
"http://apache.org/maven/project/profiles/profile/dependencyManagement/dependencies#collection",
+
"http://apache.org/maven/project/profiles/profile/repositories#collection",
+ "http://apache.org/maven/project/build/extensions#collection",
+
"http://apache.org/maven/project/build/plugins/plugin/executions#collection",
+ "http://apache.org/maven/project/repositories#collection",
+
"http://apache.org/maven/project/ciManagement/notifiers#collection",
+
"http://apache.org/maven/project/dependencyManagement/dependencies#collection",
+
"http://apache.org/maven/project/build/pluginManagement/plugins/plugin/dependencies#collection",
+
"http://apache.org/maven/project/profiles/profile/reporting/plugins/plugin/reportSets#collection",
+
"http://apache.org/maven/project/profiles/profile/build/plugins#collection",
+
"http://apache.org/maven/project/profiles/profile/build/plugins/plugin/executions#collection"
+ ));
+ }
+
+ public DomainModel transformToDomainModel(List<ModelProperty> properties)
throws IOException {
+ if (properties == null) {
+ throw new IllegalArgumentException("properties: null");
+ }
+ String xml = null;
+ try {
+ xml = ModelMarshaller.unmarshalModelPropertiesToXml(properties,
ProjectUri.baseUri);
+ return new PomClassicDomainModel(new MavenXpp3Reader().read(new
StringReader(xml)));
+ } catch (XmlPullParserException e) {
+ throw new IOException(e + ":" + xml);
+ }
+ }
+
+ public List<ModelProperty> transformToModelProperties(List<DomainModel>
domainModels) throws IOException {
+ if (domainModels == null || domainModels.isEmpty()) {
+ throw new IllegalArgumentException("domainModels: null or empty");
+ }
+ List<ModelProperty> modelProperties = new ArrayList<ModelProperty>();
+ for (DomainModel domainModel : domainModels) {
+ if (!(domainModel instanceof PomClassicDomainModel)) {
+ throw new IllegalArgumentException("domainModels: Invalid
domain model");
+ }
+
modelProperties.addAll(ModelMarshaller.marshallXmlToModelProperties(
+ ((PomClassicDomainModel) domainModel).getInputStream(),
ProjectUri.baseUri, uris));
+ }
+ return modelProperties;
+ }
+}
+
Added:
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java?rev=668853&view=auto
==============================================================================
---
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java
(added)
+++
maven/sandbox/trunk/maven/maven-project-builder/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java
Tue Jun 17 15:10:22 2008
@@ -0,0 +1,41 @@
+package org.apache.maven.project.builder;
+
+//import org.apache.maven.model.Model;
+//import org.apache.maven.model.Parent;
+import org.apache.maven.shared.model.*;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.File;
+import java.util.*;
+
+public class ProjectBuilder {
+/*
+ private final File localRepository;
+
+ public ProjectBuilder(File localRepository) {
+ this.localRepository = localRepository;
+ }
+
+ private List<DomainModel>
getDomainModelParentsFromRepository(PomClassicDomainModel domainModel) throws
IOException {
+ Parent parent = domainModel.getModel().getParent();
+ // ArtifactRepositoryLayout layout = DefaultArtifactRepositoryLayout();
+ }
+
+ public MavenProject buildFrom(InputStream pom,
Collection<InterpolatorProperty> interpolatorProperties)
+ throws IOException {
+
+
+ List<DomainModel> domainModels =
this.getDomainModelParentsFromRepository(new PomClassicDomainModel(pom));
+
+ PomClassicTransformer transformer = new PomClassicTransformer(null);
+ ModelTransformerContext ctx = new ModelTransformerContext(
+ (Collection) Arrays.asList(new
ArtifactModelContainerFactory()));
+ PomClassicDomainModel domainmodel = (PomClassicDomainModel)
ctx.transform(domainModels, transformer,
+ transformer, interpolatorProperties);
+ Model model = domainmodel.getModel();
+
+ return new MavenProject(model);
+ }
+*/
+}