Skip to content
This repository has been archived by the owner on Nov 30, 2021. It is now read-only.

Commit

Permalink
Bug 1172746 - Project's pom.xml file does not retain tags like <exclu…
Browse files Browse the repository at this point in the history
…sion>, <optional> and <scope> in the "dependencies" section

(cherry picked from commit 0a62e6a)
  • Loading branch information
Rikkola committed Jan 4, 2015
1 parent 28a6ddc commit 6094251
Show file tree
Hide file tree
Showing 4 changed files with 225 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,20 @@
public class Dependency
extends GAV {

private String scope;

public Dependency() {
}

public Dependency(GAV gav) {
super(gav.getGroupId(), gav.getArtifactId(), gav.getVersion());
}

public String getScope() {
return scope;
}

public void setScope(String scope) {
this.scope = scope;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
/*
* Copyright 2015 JBoss Inc
*
* Licensed 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.
*/

package org.guvnor.common.services.project.backend.server;

import java.util.Iterator;
import java.util.List;

import org.apache.maven.model.Model;
import org.guvnor.common.services.project.model.Dependency;

class DependencyUpdater {

private Model model;

DependencyUpdater(Model model) {
this.model = model;
}

void updateDependencies(List<Dependency> dependencies) {
removeAllThatDoNotExist(dependencies);
addTheOnesThatDoNotExist(dependencies);
updateTheRest(dependencies);
}

private void updateTheRest(List<Dependency> dependencies) {
for (Dependency dependency : dependencies) {
for (org.apache.maven.model.Dependency modelDep : model.getDependencies()) {
if (hasSameID(dependency, modelDep)) {
updateDependency(dependency, modelDep);
}
}
}
}

private void addTheOnesThatDoNotExist(List<Dependency> dependencies) {
for (Dependency dependency : dependencies) {
if (!depsContains(model.getDependencies(), dependency)) {
model.addDependency(fromClientModelToPom(dependency));
}
}
}

private void removeAllThatDoNotExist(List<Dependency> dependencies) {
Iterator<org.apache.maven.model.Dependency> iterator = model.getDependencies().iterator();
while (iterator.hasNext()) {
org.apache.maven.model.Dependency dependency = iterator.next();
if (!depsContains(dependencies, dependency)) {
iterator.remove();
}
}
}

private org.apache.maven.model.Dependency fromClientModelToPom(org.guvnor.common.services.project.model.Dependency from) {
org.apache.maven.model.Dependency dependency = updateDependency(from, new org.apache.maven.model.Dependency());

return dependency;
}

private org.apache.maven.model.Dependency updateDependency(org.guvnor.common.services.project.model.Dependency from, org.apache.maven.model.Dependency dependency) {

dependency.setArtifactId(from.getArtifactId());
dependency.setGroupId(from.getGroupId());
dependency.setVersion(from.getVersion());
dependency.setScope(from.getScope());
return dependency;
}

private boolean depsContains(List<org.guvnor.common.services.project.model.Dependency> dependencies, org.apache.maven.model.Dependency dependency) {
for (org.guvnor.common.services.project.model.Dependency modelDep : dependencies) {
if (hasSameID(modelDep, dependency)) {
return true;
}
}
return false;
}

private boolean depsContains(List<org.apache.maven.model.Dependency> dependencies, org.guvnor.common.services.project.model.Dependency dependency) {
for (org.apache.maven.model.Dependency modelDep : dependencies) {
if (hasSameID(dependency, modelDep)) {
return true;
}
}
return false;
}

private boolean hasSameID(org.guvnor.common.services.project.model.Dependency dependency, org.apache.maven.model.Dependency modelDep) {
return dependency.getArtifactId().equals(modelDep.getArtifactId()) && dependency.getGroupId().equals(modelDep.getGroupId());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,30 +21,29 @@
import java.util.Properties;
import javax.enterprise.context.Dependent;

import org.apache.maven.model.*;
import org.apache.maven.model.Build;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Model;
import org.apache.maven.model.Parent;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.Repository;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import org.guvnor.common.services.project.model.GAV;
import org.guvnor.common.services.project.model.POM;

import javax.enterprise.context.Dependent;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.Properties;

@Dependent
public class POMContentHandler {

private static String MULTI_MODULE = "pom";
private static String PACKAGING = "kjar";
private static String KIE_PLUGIN_VERSION_FILENAME = "/kie-plugin-version.properties";
private static String MULTI_MODULE = "pom";
private static String PACKAGING = "kjar";
private static String KIE_PLUGIN_VERSION_FILENAME = "/kie-plugin-version.properties";
private static String KIE_PLUGIN_VERSION_PROPERTY_NAME = "kie_plugin_version";

private static String kieMavenPluginGroupId = "org.kie";
private static String kieMavenPluginGroupId = "org.kie";
private static String kieMavenPluginArtifactId = "kie-maven-plugin";
private static String kieMavenPluginVersion = getKiePluginVersion();
private static String kieMavenPluginVersion = getKiePluginVersion();

private static Plugin kieMavenPlugin = getKieMavenPlugin();

Expand Down Expand Up @@ -79,7 +78,7 @@ private String toString(POM pom,
}
} else { // If it is a kjar

if(isPackagingSet(model)){
if (isPackagingNotSet(model)) {
// Currently we only support multimodules and kjars.
// But since the user can change and customers have actually changed the packaging to jar
// we do not overwrite the setting.
Expand All @@ -104,10 +103,7 @@ private String toString(POM pom,
build.addPlugin(kieMavenPlugin);
}

model.getDependencies().clear();
for (org.guvnor.common.services.project.model.Dependency dependency : pom.getDependencies()) {
model.addDependency(fromClientModelToPom(dependency));
}
new DependencyUpdater(model).updateDependencies(pom.getDependencies());

}

Expand All @@ -117,12 +113,12 @@ private String toString(POM pom,
return stringWriter.toString();
}

private boolean isPackagingSet(Model model) {
private boolean isPackagingNotSet(Model model) {
return model.getPackaging() == null || model.getPackaging().isEmpty();
}

/**
* @param gavModel The model that is saved
* @param gavModel The model that is saved
* @param originalPomAsText The original pom in text form, since the guvnor POM model does not cover all the pom.xml features.
* @return pom.xml for saving, The original pom.xml with the fields edited in gavModel replaced.
* @throws IOException
Expand Down Expand Up @@ -164,7 +160,7 @@ public POM toModel(String pomAsString)
gavModel.getModules().clear();
for (String module : model.getModules()) {
gavModel.getModules().add(module);
gavModel.setMultiModule( true );
gavModel.setMultiModule(true);
}
for (Repository repository : model.getRepositories()) {
gavModel.addRepository(fromPomModelToClientModel(repository));
Expand Down Expand Up @@ -193,16 +189,7 @@ private org.guvnor.common.services.project.model.Dependency fromPomModelToClient
dependency.setArtifactId(from.getArtifactId());
dependency.setGroupId(from.getGroupId());
dependency.setVersion(from.getVersion());

return dependency;
}

private Dependency fromClientModelToPom(org.guvnor.common.services.project.model.Dependency from) {
Dependency dependency = new Dependency();

dependency.setArtifactId(from.getArtifactId());
dependency.setGroupId(from.getGroupId());
dependency.setVersion(from.getVersion());
dependency.setScope(from.getScope());

return dependency;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
/*
* Copyright 2015 JBoss Inc
*
* Licensed 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.
*/

package org.guvnor.common.services.project.backend.server;

import java.util.ArrayList;
import java.util.Collections;

import org.apache.maven.model.Model;
import org.guvnor.common.services.project.model.Dependency;
import org.junit.Test;

import static org.junit.Assert.*;

public class DependencyUpdaterTest {

@Test
public void testAdd() throws Exception {

Model model = new Model();
ArrayList<Dependency> dependencies = new ArrayList<Dependency>();
dependencies.add(makeWorkbenchDependency("group", "artifact-id", "1.0"));

assertTrue(model.getDependencies().isEmpty());

new DependencyUpdater(model).updateDependencies(dependencies);

assertEquals(1, model.getDependencies().size());
assertEquals("group", model.getDependencies().get(0).getGroupId());
assertEquals("artifact-id", model.getDependencies().get(0).getArtifactId());
assertEquals("1.0", model.getDependencies().get(0).getVersion());
}

@Test
public void testRemove() throws Exception {

Model model = new Model();

model.getDependencies().add(makeMavenDependency("group", "artifact-id", "1.0"));

assertFalse(model.getDependencies().isEmpty());

new DependencyUpdater(model).updateDependencies(Collections.EMPTY_LIST);

assertTrue(model.getDependencies().isEmpty());
}

@Test
public void testUpdate() throws Exception {
Model model = new Model();
model.getDependencies().add(makeMavenDependency("group", "artifact-id", "1.0"));

ArrayList<Dependency> dependencies = new ArrayList<Dependency>();
dependencies.add(makeWorkbenchDependency("group", "artifact-id", "2.0"));

assertFalse(model.getDependencies().isEmpty());

new DependencyUpdater(model).updateDependencies(dependencies);

assertEquals(1, model.getDependencies().size());
assertEquals("group", model.getDependencies().get(0).getGroupId());
assertEquals("artifact-id", model.getDependencies().get(0).getArtifactId());
assertEquals("2.0", model.getDependencies().get(0).getVersion());
}

private org.apache.maven.model.Dependency makeMavenDependency(String group, String artifactId, String version) {
org.apache.maven.model.Dependency dependency = new org.apache.maven.model.Dependency();
dependency.setGroupId(group);
dependency.setArtifactId(artifactId);
dependency.setVersion(version);
return dependency;
}

private Dependency makeWorkbenchDependency(String group, String artifactId, String version) {
Dependency dependency = new Dependency();
dependency.setGroupId(group);
dependency.setArtifactId(artifactId);
dependency.setVersion(version);
return dependency;
}
}

0 comments on commit 6094251

Please sign in to comment.