package org.jboss.windup.rules.apps.mavenize;
import com.tinkerpop.blueprints.Direction;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.frames.Adjacency;
import com.tinkerpop.frames.modules.javahandler.JavaHandler;
import com.tinkerpop.frames.modules.javahandler.JavaHandlerContext;
import com.tinkerpop.frames.modules.typedgraph.TypeValue;
import java.util.logging.Logger;
import org.apache.commons.lang3.StringUtils;
import org.jboss.forge.furnace.versions.ComparableVersion;
import org.jboss.windup.rules.apps.java.archives.model.ArchiveCoordinateModel;
import org.jboss.windup.util.Logging;
/**
* Serves only to identify the unique singleton object in the DB.
*
* @author <a href="http://ondra.zizka.cz/">Ondrej Zizka, zizka@seznam.cz</a>
*/
@TypeValue(GlobalBomModel.TYPE)
public interface GlobalBomModel extends PomXmlModel
{
String TYPE = "GlobalBom-";
String DEFINES = TYPE + "defines";
/**
* Adds a dependency to BOM. If the BOM already contains that G:A:C:P, sets the dependency version to the newer one.
*/
@JavaHandler
@Adjacency(label = DEFINES, direction = Direction.OUT)
void addNewerDependency(ArchiveCoordinateModel dependency);
public abstract class Impl implements GlobalBomModel, JavaHandlerContext<Vertex> {
private static final Logger LOG = Logging.get(MavenizeRuleProvider.class);
@Override
public void addNewerDependency(final ArchiveCoordinateModel newCoord){
LOG.info("Adding: " + newCoord.toString());
Vertex v = this.it();
final Iterable<ArchiveCoordinateModel> existingDeps = this.getDependencies();
for (ArchiveCoordinateModel dep : existingDeps)
{
LOG.info(" ---- Dep: " + dep.toString());
if(!StringUtils.equals(newCoord.getGroupId(), dep.getGroupId()))
continue;
if(!StringUtils.equals(newCoord.getArtifactId(), dep.getArtifactId()))
continue;
if(!StringUtils.equals(newCoord.getClassifier(), dep.getClassifier()))
continue;
if(!StringUtils.equals(newCoord.getPackaging(), dep.getPackaging()))
continue;
if(0 < compareVersions(newCoord.getVersion(), dep.getVersion()))
dep.setVersion(newCoord.getVersion());
return;
}
this.addDependency(newCoord);
LOG.info("Added: " + newCoord.toString());
}
/** Uses Forge's comprehension of version strings. */
private static int compareVersions(String aS, String bS)
{
ComparableVersion a = new ComparableVersion(aS);
ComparableVersion b = new ComparableVersion(bS);
return b.compareTo(a);
}
}
}