addons/relate/common/src/main/java/org/commonjava/indy/relate/util/RelateGenerationManager.java
public Transfer generateRelationshipFile( Transfer transfer, TransferOperation op )
    {
        final Logger logger = LoggerFactory.getLogger( getClass() );
        if ( !config.isEnabled() )
        {
            logger.debug( "Relate Add-on is not enabled." );
            return null;
        }

        logger.debug( "Relate generation for {}", transfer );

        if ( transfer == null )
        {
            logger.debug( "No transfer. No .rel generation performed." );
            return null;
        }

        String txfrPath = transfer.getPath();
        if ( !txfrPath.endsWith( ".pom" ) )
        {
            logger.debug( "This is not a pom transfer." );
            return null;
        }

        ArtifactPathInfo artPathInfo = ArtifactPathInfo.parse( txfrPath );
        if ( artPathInfo == null )
        {
            logger.debug( "Not an artifact download ({}). No .rel generation performed.", txfrPath );
            return null;
        }

        ConcreteResource pomResource = transfer.getResource();

        StoreKey storeKey = StoreKey.fromString( transfer.getLocation().getName() );
        ArtifactStore store;
        try
        {
            store = storeManager.getArtifactStore( storeKey );
        }
        catch ( final IndyDataException ex )
        {
            logger.error( "Error retrieving artifactStore with key " + storeKey, ex );
            return null;
        }

        logger.debug( "Generate .rel corresponding to associated POM download: {}/{}", storeKey,
                      pomResource.getPath() );

        try
        {
            URI source = new URI( pomResource.getLocation().getUri() + REL_SUFFIX );

            ProjectVersionRef ref = artPathInfo.getProjectId();

            // get all groups that this store is a member of
            Set<ArtifactStore> stores = new HashSet<>();
            stores.add( store );
            stores.addAll( storeManager.query().getGroupsContaining( store.getKey() ) );

            List<? extends Location> supplementalLocations =
                            LocationUtils.toLocations( stores.toArray( new ArtifactStore[0] ) );

            MavenPomView pomView = mavenPomReader.read( ref, transfer, supplementalLocations, ALL_PROFILES );

            EProjectDirectRelationships rel =
                            mavenModelProcessor.readRelationships( pomView, source, new ModelProcessorConfig() );

            Transfer transferRel = transfer.getSiblingMeta( REL_SUFFIX );
            writeRelationships( rel, transferRel, op );

            return transferRel;
        }
        catch ( Exception e )
        {
            logger.error( "Error generating .rel file for " + txfrPath + " from store " + store, e );
            return null;
        }
    }
public Transfer generateRelationshipFile( Transfer transfer, TransferOperation op )
    {
        final Logger logger = LoggerFactory.getLogger( getClass() );
        if ( !config.isEnabled() )
        {
            logger.debug( "Relate Add-on is not enabled." );
            return null;
        }

        logger.debug( "Relate generation for {}", transfer );

        if ( transfer == null )
        {
            logger.debug( "No transfer. No .rel generation performed." );
            return null;
        }

        String txfrPath = transfer.getPath();
        if ( !txfrPath.endsWith( ".pom" ) )
        {
            logger.debug( "This is not a pom transfer." );
            return null;
        }

        ArtifactPathInfo artPathInfo = ArtifactPathInfo.parse( txfrPath );
        if ( artPathInfo == null )
        {
            logger.debug( "Not an artifact download ({}). No .rel generation performed.", txfrPath );
            return null;
        }

        ConcreteResource pomResource = transfer.getResource();

        StoreKey storeKey = StoreKey.fromString( transfer.getLocation().getName() );
        ArtifactStore store;
        try
        {
            store = storeManager.getArtifactStore( storeKey );
        }
        catch ( final IndyDataException ex )
        {
            logger.error( "Error retrieving artifactStore with key " + storeKey, ex );
            return null;
        }

        logger.debug( "Generate .rel corresponding to associated POM download: {}/{}", storeKey,
                      pomResource.getPath() );

        try
        {
            URI source = new URI( pomResource.getLocation().getUri() + REL_SUFFIX );

            ProjectVersionRef ref = artPathInfo.getProjectId();

            // get all groups that this store is a member of
            Set<ArtifactStore> stores = new HashSet<>();
            stores.add( store );
            stores.addAll( storeManager.query().getGroupsContaining( store.getKey() ) );

            List<? extends Location> supplementalLocations =
                            LocationUtils.toLocations( stores.toArray( new ArtifactStore[0] ) );

            MavenPomView pomView = mavenPomReader.read( ref, transfer, supplementalLocations, ALL_PROFILES );

            EProjectDirectRelationships rel =
                            mavenModelProcessor.readRelationships( pomView, source, new ModelProcessorConfig() );

            Transfer transferRel = transfer.getSiblingMeta( REL_SUFFIX );
            writeRelationships( rel, transferRel, op );

            return transferRel;
        }
        catch ( Exception e )
        {
            logger.error( "Error generating .rel file for " + txfrPath + " from store " + store, e );
            return null;
        }
    }
Generate relationship file for pom transfer.
@param transfer
@param op
@return transfer pointing to the generated rel file.