1 package org
.argeo
.slc
.repo
.maven
;
3 import java
.util
.ArrayList
;
7 import javax
.jcr
.NodeIterator
;
8 import javax
.jcr
.RepositoryException
;
9 import javax
.jcr
.Session
;
10 import javax
.jcr
.nodetype
.NodeType
;
11 import javax
.jcr
.security
.AccessControlException
;
12 import javax
.jcr
.security
.Privilege
;
14 import org
.argeo
.api
.cms
.CmsLog
;
15 import org
.argeo
.cms
.ArgeoNames
;
16 import org
.argeo
.jcr
.JcrUtils
;
17 import org
.argeo
.jcr
.proxy
.AbstractUrlProxy
;
18 import org
.argeo
.slc
.SlcConstants
;
19 import org
.argeo
.slc
.SlcException
;
20 import org
.argeo
.slc
.SlcNames
;
21 import org
.argeo
.slc
.SlcTypes
;
22 import org
.argeo
.slc
.repo
.MavenProxyService
;
23 import org
.argeo
.slc
.repo
.RepoConstants
;
24 import org
.eclipse
.aether
.repository
.RemoteRepository
;
26 /** Synchronises the node repository with remote Maven repositories */
27 public class MavenProxyServiceImpl
extends AbstractUrlProxy
implements MavenProxyService
, ArgeoNames
, SlcNames
{
28 private final static CmsLog log
= CmsLog
.getLog(MavenProxyServiceImpl
.class);
30 private List
<RemoteRepository
> defaultRepositories
= new ArrayList
<RemoteRepository
>();
32 /** Initialises the artifacts area. */
34 protected void beforeInitSessionSave(Session session
) throws RepositoryException
{
35 JcrUtils
.addPrivilege(session
, "/", SlcConstants
.USER_ANONYMOUS
, Privilege
.JCR_READ
);
37 JcrUtils
.addPrivilege(session
, "/", SlcConstants
.ROLE_SLC
, Privilege
.JCR_ALL
);
38 } catch (AccessControlException e
) {
39 if (log
.isTraceEnabled())
40 log
.trace("Cannot give jcr:all privileges to " + SlcConstants
.ROLE_SLC
);
43 JcrUtils
.mkdirsSafe(session
, RepoConstants
.DEFAULT_ARTIFACTS_BASE_PATH
);
44 Node proxiedRepositories
= JcrUtils
.mkdirsSafe(session
, RepoConstants
.PROXIED_REPOSITORIES
);
45 for (RemoteRepository repository
: defaultRepositories
) {
46 if (!proxiedRepositories
.hasNode(repository
.getId())) {
47 Node proxiedRepository
= proxiedRepositories
.addNode(repository
.getId());
48 proxiedRepository
.addMixin(NodeType
.MIX_REFERENCEABLE
);
49 JcrUtils
.urlToAddressProperties(proxiedRepository
, repository
.getUrl());
50 // proxiedRepository.setProperty(SLC_URL, repository.getUrl());
51 proxiedRepository
.setProperty(SLC_TYPE
, repository
.getContentType());
57 * Retrieve and add this file to the repository
60 protected Node
retrieve(Session session
, String path
) {
62 if (session
.hasPendingChanges())
63 throw new SlcException("Session has pending changed");
65 for (Node proxiedRepository
: getBaseUrls(session
)) {
66 String baseUrl
= JcrUtils
.urlFromAddressProperties(proxiedRepository
);
67 node
= proxyUrl(session
, baseUrl
, path
);
69 node
.addMixin(SlcTypes
.SLC_KNOWN_ORIGIN
);
70 Node origin
= node
.addNode(SLC_ORIGIN
, SlcTypes
.SLC_PROXIED
);
71 origin
.setProperty(SLC_PROXY
, proxiedRepository
);
72 JcrUtils
.urlToAddressProperties(origin
, baseUrl
+ path
);
73 if (log
.isDebugEnabled())
74 log
.debug("Imported " + baseUrl
+ path
+ " to " + node
);
78 if (log
.isDebugEnabled())
79 log
.warn("No proxy found for " + path
);
81 } catch (Exception e
) {
82 throw new SlcException("Cannot proxy " + path
, e
);
86 protected synchronized List
<Node
> getBaseUrls(Session session
) throws RepositoryException
{
87 List
<Node
> baseUrls
= new ArrayList
<Node
>();
88 for (NodeIterator nit
= session
.getNode(RepoConstants
.PROXIED_REPOSITORIES
).getNodes(); nit
.hasNext();) {
89 Node proxiedRepository
= nit
.nextNode();
90 baseUrls
.add(proxiedRepository
);
95 public void setDefaultRepositories(List
<RemoteRepository
> defaultRepositories
) {
96 this.defaultRepositories
= defaultRepositories
;