1 package org
.argeo
.slc
.repo
.maven
.proxy
;
3 import java
.util
.ArrayList
;
7 import javax
.jcr
.NodeIterator
;
8 import javax
.jcr
.RepositoryException
;
10 import org
.apache
.commons
.logging
.Log
;
11 import org
.apache
.commons
.logging
.LogFactory
;
12 import org
.argeo
.jcr
.ArgeoNames
;
13 import org
.argeo
.jcr
.JcrUtils
;
14 import org
.argeo
.jcr
.proxy
.AbstractUrlProxy
;
15 import org
.argeo
.slc
.SlcException
;
16 import org
.argeo
.slc
.jcr
.SlcNames
;
17 import org
.argeo
.slc
.repo
.RepoConstants
;
18 import org
.sonatype
.aether
.repository
.RemoteRepository
;
20 /** Synchronizes the node repository with remote Maven repositories */
21 public class MavenProxyServiceImpl
extends AbstractUrlProxy
implements
22 MavenProxyService
, ArgeoNames
, SlcNames
{
23 private final static Log log
= LogFactory
24 .getLog(MavenProxyServiceImpl
.class);
26 private List
<RemoteRepository
> defaultRepositories
= new ArrayList
<RemoteRepository
>();
29 protected void beforeInitSessionSave() throws RepositoryException
{
30 JcrUtils
.mkdirs(getJcrAdminSession(), RepoConstants
.ARTIFACTS_BASE_PATH
);
31 Node proxiedRepositories
= JcrUtils
.mkdirs(getJcrAdminSession(),
32 RepoConstants
.PROXIED_REPOSITORIES
);
33 for (RemoteRepository repository
: defaultRepositories
) {
34 if (!proxiedRepositories
.hasNode(repository
.getId())) {
35 Node proxiedRepository
= proxiedRepositories
.addNode(repository
37 proxiedRepository
.setProperty(SLC_URL
, repository
.getUrl());
38 proxiedRepository
.setProperty(SLC_TYPE
,
39 repository
.getContentType());
45 * Retrieve and add this file to the repository
47 protected String
retrieve(String path
) {
50 baseUrls
: for (String baseUrl
: getBaseUrls()) {
51 node
= proxyUrl(baseUrl
, path
);
57 return node
.getIdentifier();
59 log
.warn("Could not proxy " + path
);
62 } catch (RepositoryException e
) {
63 throw new SlcException("Cannot proxy " + path
, e
);
67 protected synchronized List
<String
> getBaseUrls()
68 throws RepositoryException
{
69 List
<String
> baseUrls
= new ArrayList
<String
>();
70 for (NodeIterator nit
= getJcrAdminSession().getNode(
71 RepoConstants
.PROXIED_REPOSITORIES
).getNodes(); nit
.hasNext();) {
72 Node proxiedRepository
= nit
.nextNode();
73 String repoUrl
= proxiedRepository
.getProperty(SLC_URL
).getString();
74 baseUrls
.add(repoUrl
);
79 /** The JCR path where this file could be found */
80 public String
getNodePath(String path
) {
81 return RepoConstants
.ARTIFACTS_BASE_PATH
+ path
;
84 public void setDefaultRepositories(
85 List
<RemoteRepository
> defaultRepositories
) {
86 this.defaultRepositories
= defaultRepositories
;