core/src/main/java/org/commonjava/indy/core/ctl/ReplicationController.java
private List<? extends ArtifactStore> getRemoteStores( final ReplicationDTO dto )
        throws IndyWorkflowException
    {
        final String apiUrl = dto.getApiUrl();

        String remotesUrl = null;
        String groupsUrl = null;
        String hostedUrl = null;
        try
        {
            remotesUrl = buildUrl( apiUrl, "/admin/remotes" );
            groupsUrl = buildUrl( apiUrl, "/admin/groups" );
            hostedUrl = buildUrl( apiUrl, "/admin/hosted" );
        }
        catch ( final MalformedURLException e )
        {
            throw new IndyWorkflowException(
                                              "Failed to construct store definition-retrieval URL from api-base: {}. Reason: {}",
                                              e, apiUrl, e.getMessage() );
        }

        //        logger.info( "\n\n\n\n\n[AutoProx] Checking URL: {} from:", new Throwable(), url );
        final List<ArtifactStore> result = new ArrayList<ArtifactStore>();

        addStoresFrom( result, remotesUrl, dto, RemoteRepository.class );
        addStoresFrom( result, groupsUrl, dto, Group.class );
        addStoresFrom( result, hostedUrl, dto, HostedRepository.class );

        return result;
    }
private List<? extends ArtifactStore> getRemoteStores( final ReplicationDTO dto )
        throws IndyWorkflowException
    {
        final String apiUrl = dto.getApiUrl();

        String remotesUrl = null;
        String groupsUrl = null;
        String hostedUrl = null;
        try
        {
            remotesUrl = buildUrl( apiUrl, "/admin/remotes" );
            groupsUrl = buildUrl( apiUrl, "/admin/groups" );
            hostedUrl = buildUrl( apiUrl, "/admin/hosted" );
        }
        catch ( final MalformedURLException e )
        {
            throw new IndyWorkflowException(
                                              "Failed to construct store definition-retrieval URL from api-base: {}. Reason: {}",
                                              e, apiUrl, e.getMessage() );
        }

        //        logger.info( "\n\n\n\n\n[AutoProx] Checking URL: {} from:", new Throwable(), url );
        final List<ArtifactStore> result = new ArrayList<ArtifactStore>();

        addStoresFrom( result, remotesUrl, dto, RemoteRepository.class );
        addStoresFrom( result, groupsUrl, dto, Group.class );
        addStoresFrom( result, hostedUrl, dto, HostedRepository.class );

        return result;
    }
FIXME: Find a better solution to the passed-in generic deserialization problem...erasure is a mother...