]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/maven/proxy/MavenProxyServiceImpl.java
19df339a27b44b96c74c65853fcfb31be45e1e34
[gpl/argeo-slc.git] / runtime / org.argeo.slc.repo / src / main / java / org / argeo / slc / repo / maven / proxy / MavenProxyServiceImpl.java
1 package org.argeo.slc.repo.maven.proxy;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import javax.jcr.Node;
7 import javax.jcr.NodeIterator;
8 import javax.jcr.RepositoryException;
9
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;
19
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);
25
26 private List<RemoteRepository> defaultRepositories = new ArrayList<RemoteRepository>();
27
28 @Override
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
36 .getId());
37 proxiedRepository.setProperty(SLC_URL, repository.getUrl());
38 proxiedRepository.setProperty(SLC_TYPE,
39 repository.getContentType());
40 }
41 }
42 }
43
44 /**
45 * Retrieve and add this file to the repository
46 */
47 protected String retrieve(String path) {
48 try {
49 Node node = null;
50 baseUrls: for (String baseUrl : getBaseUrls()) {
51 node = proxyUrl(baseUrl, path);
52 if (node != null)
53 break baseUrls;
54 }
55
56 if (node != null)
57 return node.getIdentifier();
58 else {
59 log.warn("Could not proxy " + path);
60 return null;
61 }
62 } catch (RepositoryException e) {
63 throw new SlcException("Cannot proxy " + path, e);
64 }
65 }
66
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);
75 }
76 return baseUrls;
77 }
78
79 /** The JCR path where this file could be found */
80 public String getNodePath(String path) {
81 return RepoConstants.ARTIFACTS_BASE_PATH + path;
82 }
83
84 public void setDefaultRepositories(
85 List<RemoteRepository> defaultRepositories) {
86 this.defaultRepositories = defaultRepositories;
87 }
88
89 }