[MRELEASE-952] Replace JDom as XML transformer
Introduce Factory
git-svn-id: https://svn.apache.org/repos/asf/maven/release/trunk@1744457 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/maven-release-manager/src/main/components-fragment.xml b/maven-release-manager/src/main/components-fragment.xml
index 23c614c..8a9758c 100644
--- a/maven-release-manager/src/main/components-fragment.xml
+++ b/maven-release-manager/src/main/components-fragment.xml
@@ -153,6 +153,10 @@
<role>org.apache.maven.shared.release.scm.ScmRepositoryConfigurator</role>
</requirement>
<requirement>
+ <role>org.apache.maven.shared.release.transform.ModelETLFactory</role>
+ <field-name>modelETLFactories</field-name>
+ </requirement>
+ <requirement>
<role>org.apache.maven.shared.release.scm.ScmTranslator</role>
<field-name>scmTranslators</field-name>
</requirement>
@@ -210,6 +214,10 @@
<role>org.apache.maven.shared.release.scm.ScmRepositoryConfigurator</role>
</requirement>
<requirement>
+ <role>org.apache.maven.shared.release.transform.ModelETLFactory</role>
+ <field-name>modelETLFactories</field-name>
+ </requirement>
+ <requirement>
<role>org.apache.maven.shared.release.scm.ScmTranslator</role>
<field-name>scmTranslators</field-name>
</requirement>
@@ -226,6 +234,10 @@
<requirement>
<role>org.apache.maven.shared.release.scm.ScmRepositoryConfigurator</role>
</requirement>
+ <requirement>
+ <role>org.apache.maven.shared.release.transform.ModelETLFactory</role>
+ <field-name>modelETLFactories</field-name>
+ </requirement>
</requirements>
</component>
<component>
@@ -253,6 +265,10 @@
<role>org.apache.maven.shared.release.scm.ScmRepositoryConfigurator</role>
</requirement>
<requirement>
+ <role>org.apache.maven.shared.release.transform.ModelETLFactory</role>
+ <field-name>modelETLFactories</field-name>
+ </requirement>
+ <requirement>
<role>org.apache.maven.shared.release.scm.ScmTranslator</role>
<field-name>scmTranslators</field-name>
</requirement>
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java
index 1b3f24d..df24c8b 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java
@@ -54,8 +54,11 @@
import org.apache.maven.shared.release.scm.ReleaseScmRepositoryException;
import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
import org.apache.maven.shared.release.scm.ScmTranslator;
+import org.apache.maven.shared.release.transform.ModelETLRequest;
import org.apache.maven.shared.release.transform.MavenCoordinate;
-import org.apache.maven.shared.release.transform.jdom.JDomModelETL;
+import org.apache.maven.shared.release.transform.ModelETL;
+import org.apache.maven.shared.release.transform.ModelETLFactory;
+import org.apache.maven.shared.release.transform.jdom.JDomModelETLFactory;
import org.apache.maven.shared.release.util.ReleaseUtil;
import org.codehaus.plexus.util.StringUtils;
@@ -71,6 +74,10 @@
* Tool that gets a configured SCM repository from release configuration.
*/
private ScmRepositoryConfigurator scmRepositoryConfigurator;
+
+ private Map<String, ModelETLFactory> modelETLFactories;
+
+ private String defaultModelETLFactoryHint = JDomModelETLFactory.ROLE_HINT;
/**
* SCM URL translators mapped by provider name.
@@ -169,11 +176,13 @@
throws ReleaseExecutionException, ReleaseFailureException
{
File pomFile = ReleaseUtil.getStandardPom( project );
+
+ ModelETLRequest request = new ModelETLRequest();
+ request.setLineSeparator( ls );
+ request.setProject( project );
+ request.setReleaseDescriptor( releaseDescriptor );
- JDomModelETL etl = new JDomModelETL();
- etl.setLs( ls );
- etl.setProject( project );
- etl.setReleaseDescriptor( releaseDescriptor );
+ ModelETL etl = modelETLFactories.get( defaultModelETLFactoryHint ).newInstance( request );
etl.extract( pomFile );
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/ModelETL.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/ModelETL.java
new file mode 100644
index 0000000..465cf95
--- /dev/null
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/ModelETL.java
@@ -0,0 +1,43 @@
+package org.apache.maven.shared.release.transform;
+
+/*
+ * 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.io.File;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.shared.release.ReleaseExecutionException;
+
+/**
+ *
+ * @author Robert Scholte
+ * @since 3.0
+ */
+public interface ModelETL
+{
+ void extract( File pomFile ) throws ReleaseExecutionException;
+
+ void transform();
+
+ void load( File pomFile ) throws ReleaseExecutionException;
+
+ // will be removed once transform() is implemented
+ @Deprecated
+ Model getModel();
+}
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/ModelETLFactory.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/ModelETLFactory.java
new file mode 100644
index 0000000..9bce93d
--- /dev/null
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/ModelETLFactory.java
@@ -0,0 +1,30 @@
+package org.apache.maven.shared.release.transform;
+
+/*
+ * 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.
+ */
+
+/**
+ *
+ * @author Robert Scholte
+ * @since 3.0
+ */
+public interface ModelETLFactory
+{
+ ModelETL newInstance( ModelETLRequest request );
+}
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/ModelETLRequest.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/ModelETLRequest.java
new file mode 100644
index 0000000..6cc41c6
--- /dev/null
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/ModelETLRequest.java
@@ -0,0 +1,67 @@
+package org.apache.maven.shared.release.transform;
+
+/*
+ * 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 org.apache.maven.project.MavenProject;
+import org.apache.maven.shared.release.config.ReleaseDescriptor;
+
+/**
+ *
+ * @author Robert Scholte
+ * @since 3.0
+ */
+public class ModelETLRequest
+{
+ private String lineSeparator;
+
+ private MavenProject project;
+
+ private ReleaseDescriptor releaseDescriptor;
+
+ public String getLineSeparator()
+ {
+ return lineSeparator;
+ }
+
+ public void setLineSeparator( String lineSeparator )
+ {
+ this.lineSeparator = lineSeparator;
+ }
+
+ public MavenProject getProject()
+ {
+ return project;
+ }
+
+ public void setProject( MavenProject project )
+ {
+ this.project = project;
+ }
+
+ public ReleaseDescriptor getReleaseDescriptor()
+ {
+ return releaseDescriptor;
+ }
+
+ public void setReleaseDescriptor( ReleaseDescriptor releaseDescriptor )
+ {
+ this.releaseDescriptor = releaseDescriptor;
+ }
+}
\ No newline at end of file
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModelETL.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModelETL.java
index a65326c..988ec1f 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModelETL.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModelETL.java
@@ -32,6 +32,7 @@
import org.apache.maven.project.MavenProject;
import org.apache.maven.shared.release.ReleaseExecutionException;
import org.apache.maven.shared.release.config.ReleaseDescriptor;
+import org.apache.maven.shared.release.transform.ModelETL;
import org.apache.maven.shared.release.util.ReleaseUtil;
import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.WriterFactory;
@@ -53,7 +54,7 @@
* @author Robert Scholte
* @since 3.0
*/
-public class JDomModelETL
+public class JDomModelETL implements ModelETL
{
private ReleaseDescriptor releaseDescriptor;
@@ -160,7 +161,7 @@
writePom( targetFile, document, releaseDescriptor, project.getModelVersion(), intro, outtro );
}
- // will be removed once transform() is implemented
+ @Override
public Model getModel()
{
return new JDomModel( document );
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModelETLFactory.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModelETLFactory.java
new file mode 100644
index 0000000..f3e41bb
--- /dev/null
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModelETLFactory.java
@@ -0,0 +1,46 @@
+package org.apache.maven.shared.release.transform.jdom;
+
+/*
+ * 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 org.apache.maven.shared.release.transform.ModelETLRequest;
+import org.apache.maven.shared.release.transform.ModelETLFactory;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * @author Robert Scholte
+ * @since 3.0
+ */
+@Component( role = ModelETLFactory.class, hint = JDomModelETLFactory.ROLE_HINT )
+public class JDomModelETLFactory implements ModelETLFactory
+{
+ public static final String ROLE_HINT = "jdom-sax";
+
+ @Override
+ public JDomModelETL newInstance( ModelETLRequest request )
+ {
+ JDomModelETL result = new JDomModelETL();
+
+ result.setLs( request.getLineSeparator() );
+ result.setProject( request.getProject() );
+ result.setReleaseDescriptor( request.getReleaseDescriptor() );
+
+ return result;
+ }
+}