package org.jboss.windup.rules.apps.mavenize;
import java.util.Iterator;
import java.util.logging.Logger;
import org.jboss.windup.graph.GraphContext;
import org.jboss.windup.graph.service.GraphService;
import org.jboss.windup.rules.apps.java.archives.model.ArchiveCoordinateModel;
import org.jboss.windup.util.Logging;
/**
* Contains methods for searching and creating {@link ArchiveCoordinateModel}s.
*
* @author <a href="http://ondra.zizka.cz/">Ondrej Zizka, zizka@seznam.cz</a>
*/
public class ArchiveCoordinateService extends GraphService<ArchiveCoordinateModel>
{
private static final Logger LOG = Logging.get(ArchiveCoordinateService.class);
public ArchiveCoordinateService(GraphContext context, Class<ArchiveCoordinateModel> type)
{
super(context, type);
}
/**
* Returns a single ArchiveCoordinateModel with given G:A:V. Creates it if it does not already exist.
*
*/
public ArchiveCoordinateModel getSingleOrCreate(String groupId, String artifactId, String version)
{
ArchiveCoordinateModel archive = findSingle(groupId, artifactId, version);
if (archive != null)
return archive;
else
return create().setGroupId(groupId).setArtifactId(artifactId).setVersion(version);
}
/**
* Returns a single ArchiveCoordinateModel with given G:A:V.
*
* @return null if none found; Logs a WARNING if multiple are found.
*/
public ArchiveCoordinateModel findSingle(String groupId, String artifactId, String version)
{
Iterable<ArchiveCoordinateModel> archives = findByGAV(groupId, artifactId, version);
Iterator<ArchiveCoordinateModel> it = archives.iterator();
if (!it.hasNext())
return null;
ArchiveCoordinateModel archive = it.next();
if (it.hasNext())
LOG.warning(String.format("There are multiple %s's like this: %s:%s:%s",
ArchiveCoordinateModel.class.getSimpleName(), groupId, artifactId, version));
return archive;
}
/**
* Finds all {@link ArchiveCoordinateModel}s with the given G:A:V.
*/
public Iterable<ArchiveCoordinateModel> findByGAV(String groupId, String artifactId, String version)
{
final Iterable<ArchiveCoordinateModel> archives = findAllByProperties(
new String[] { ArchiveCoordinateModel.GROUP_ID, ArchiveCoordinateModel.ARTIFACT_ID, ArchiveCoordinateModel.VERSION },
new String[] { groupId, artifactId, version });
return archives;
}
}