class DelegatingLocalArtifactRepository extends MavenArtifactRepository {
    private LocalArtifactRepository buildReactor;

    private LocalArtifactRepository ideWorkspace;

    private ArtifactRepository userLocalArtifactRepository;

    public DelegatingLocalArtifactRepository(ArtifactRepository artifactRepository) {
        this.userLocalArtifactRepository = artifactRepository;
    }

    public void setBuildReactor(LocalArtifactRepository localRepository) {
        this.buildReactor = localRepository;
    }

    public void setIdeWorkspace(LocalArtifactRepository localRepository) {
        this.ideWorkspace = localRepository;
    }

    /**
     * @deprecated instead use {@link #getIdeWorkspace()}
     */
    @Deprecated
    public LocalArtifactRepository getIdeWorspace() {
        return ideWorkspace;
    }

    public LocalArtifactRepository getIdeWorkspace() {
        return getIdeWorspace();
    }

    @Override
    public Artifact find(Artifact artifact) {
        if (!artifact.isRelease() && buildReactor != null) {
            artifact = buildReactor.find(artifact);
        }

        if (!artifact.isResolved() && ideWorkspace != null) {
            artifact = ideWorkspace.find(artifact);
        }

        if (!artifact.isResolved()) {
            artifact = userLocalArtifactRepository.find(artifact);
        }

        return artifact;
    }

    @Override
    public List<String> findVersions(Artifact artifact) {
        Collection<String> versions = new LinkedHashSet<>();

        if (buildReactor != null) {
            versions.addAll(buildReactor.findVersions(artifact));
        }

        if (ideWorkspace != null) {
            versions.addAll(ideWorkspace.findVersions(artifact));
        }

        versions.addAll(userLocalArtifactRepository.findVersions(artifact));

        return Collections.unmodifiableList(new ArrayList<>(versions));
    }

    public String pathOfLocalRepositoryMetadata(ArtifactMetadata metadata, ArtifactRepository repository) {
        return userLocalArtifactRepository.pathOfLocalRepositoryMetadata(metadata, repository);
    }

    public String getId() {
        return userLocalArtifactRepository.getId();
    }

    @Override
    public String pathOf(Artifact artifact) {
        return userLocalArtifactRepository.pathOf(artifact);
    }

    @Override
    public String getBasedir() {
        return (userLocalArtifactRepository != null) ? userLocalArtifactRepository.getBasedir() : null;
    }

    @Override
    public ArtifactRepositoryLayout getLayout() {
        return userLocalArtifactRepository.getLayout();
    }

    @Override
    public ArtifactRepositoryPolicy getReleases() {
        return userLocalArtifactRepository.getReleases();
    }

    @Override
    public ArtifactRepositoryPolicy getSnapshots() {
        return userLocalArtifactRepository.getSnapshots();
    }

    @Override
    public String getKey() {
        return userLocalArtifactRepository.getKey();
    }

    @Override
    public String getUrl() {
        return userLocalArtifactRepository.getUrl();
    }

    @Override
    public int hashCode() {
        int hash = 17;
        hash = hash * 31 + (buildReactor == null ? 0 : buildReactor.hashCode());
        hash = hash * 31 + (ideWorkspace == null ? 0 : ideWorkspace.hashCode());
        hash = hash * 31 + (userLocalArtifactRepository == null ? 0 : userLocalArtifactRepository.hashCode());

        return hash;
    }

    @Override
    public boolean equals(Object obj) {<FILL_FUNCTION_BODY>}
}

        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }

        DelegatingLocalArtifactRepository other = (DelegatingLocalArtifactRepository) obj;

        return eq(buildReactor, other.buildReactor)
                && eq(ideWorkspace, other.ideWorkspace)
                && eq(userLocalArtifactRepository, other.userLocalArtifactRepository);
    
<methods>public void <init>() ,public void <init>(java.lang.String, java.lang.String, org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout, org.apache.maven.artifact.repository.ArtifactRepositoryPolicy, org.apache.maven.artifact.repository.ArtifactRepositoryPolicy) ,public boolean equals(java.lang.Object) ,public org.apache.maven.artifact.Artifact find(org.apache.maven.artifact.Artifact) ,public List<java.lang.String> findVersions(org.apache.maven.artifact.Artifact) ,public org.apache.maven.artifact.repository.Authentication getAuthentication() ,public java.lang.String getBasedir() ,public java.lang.String getId() ,public java.lang.String getKey() ,public org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout getLayout() ,public List<org.apache.maven.artifact.repository.ArtifactRepository> getMirroredRepositories() ,public java.lang.String getProtocol() ,public org.apache.maven.repository.Proxy getProxy() ,public org.apache.maven.artifact.repository.ArtifactRepositoryPolicy getReleases() ,public org.apache.maven.artifact.repository.ArtifactRepositoryPolicy getSnapshots() ,public java.lang.String getUrl() ,public int hashCode() ,public boolean isBlacklisted() ,public boolean isBlocked() ,public boolean isProjectAware() ,public boolean isUniqueVersion() ,public java.lang.String pathOf(org.apache.maven.artifact.Artifact) ,public java.lang.String pathOfLocalRepositoryMetadata(org.apache.maven.artifact.metadata.ArtifactMetadata, org.apache.maven.artifact.repository.ArtifactRepository) ,public java.lang.String pathOfRemoteRepositoryMetadata(org.apache.maven.artifact.metadata.ArtifactMetadata) ,public void setAuthentication(org.apache.maven.artifact.repository.Authentication) ,public void setBlacklisted(boolean) ,public void setBlocked(boolean) ,public void setId(java.lang.String) ,public void setLayout(org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout) ,public void setMirroredRepositories(List<org.apache.maven.artifact.repository.ArtifactRepository>) ,public void setProxy(org.apache.maven.repository.Proxy) ,public void setReleaseUpdatePolicy(org.apache.maven.artifact.repository.ArtifactRepositoryPolicy) ,public void setSnapshotUpdatePolicy(org.apache.maven.artifact.repository.ArtifactRepositoryPolicy) ,public void setUrl(java.lang.String) ,public java.lang.String toString() <variables>private static final java.lang.String LS,private org.apache.maven.artifact.repository.Authentication authentication,private java.lang.String basedir,private boolean blocked,private java.lang.String id,private org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout layout,private List<org.apache.maven.artifact.repository.ArtifactRepository> mirroredRepositories,private java.lang.String protocol,private org.apache.maven.repository.Proxy proxy,private org.apache.maven.artifact.repository.ArtifactRepositoryPolicy releases,private org.apache.maven.artifact.repository.ArtifactRepositoryPolicy snapshots,private java.lang.String url