From 4ac2a19a837b35ff63fcb8b59323fdf09a445e67 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sun, 26 May 2013 14:09:46 +0000 Subject: [PATCH] Introduce RPM Factory git-svn-id: https://svn.argeo.org/slc/trunk@6302 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- runtime/org.argeo.slc.rpmfactory/.classpath | 7 + runtime/org.argeo.slc.rpmfactory/.project | 28 ++++ .../.settings/org.eclipse.jdt.core.prefs | 7 + .../.settings/org.eclipse.pde.core.prefs | 3 + .../org.argeo.slc.rpmfactory/build.properties | 4 + runtime/org.argeo.slc.rpmfactory/pom.xml | 55 ++++++++ .../slc/rpmfactory/MavenProxyService.java | 22 +++ .../argeo/slc/rpmfactory/RpmRepository.java | 8 ++ .../core/MavenProxyServiceImpl.java | 129 ++++++++++++++++++ runtime/pom.xml | 1 + 10 files changed, 264 insertions(+) create mode 100644 runtime/org.argeo.slc.rpmfactory/.classpath create mode 100644 runtime/org.argeo.slc.rpmfactory/.project create mode 100644 runtime/org.argeo.slc.rpmfactory/.settings/org.eclipse.jdt.core.prefs create mode 100644 runtime/org.argeo.slc.rpmfactory/.settings/org.eclipse.pde.core.prefs create mode 100644 runtime/org.argeo.slc.rpmfactory/build.properties create mode 100644 runtime/org.argeo.slc.rpmfactory/pom.xml create mode 100644 runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/MavenProxyService.java create mode 100644 runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/RpmRepository.java create mode 100644 runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/MavenProxyServiceImpl.java diff --git a/runtime/org.argeo.slc.rpmfactory/.classpath b/runtime/org.argeo.slc.rpmfactory/.classpath new file mode 100644 index 000000000..8cf7f48a0 --- /dev/null +++ b/runtime/org.argeo.slc.rpmfactory/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/runtime/org.argeo.slc.rpmfactory/.project b/runtime/org.argeo.slc.rpmfactory/.project new file mode 100644 index 000000000..f32b7a9b1 --- /dev/null +++ b/runtime/org.argeo.slc.rpmfactory/.project @@ -0,0 +1,28 @@ + + + org.argeo.slc.rpmfactory + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/runtime/org.argeo.slc.rpmfactory/.settings/org.eclipse.jdt.core.prefs b/runtime/org.argeo.slc.rpmfactory/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..c537b6306 --- /dev/null +++ b/runtime/org.argeo.slc.rpmfactory/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/runtime/org.argeo.slc.rpmfactory/.settings/org.eclipse.pde.core.prefs b/runtime/org.argeo.slc.rpmfactory/.settings/org.eclipse.pde.core.prefs new file mode 100644 index 000000000..f29e940a0 --- /dev/null +++ b/runtime/org.argeo.slc.rpmfactory/.settings/org.eclipse.pde.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +pluginProject.extensions=false +resolve.requirebundle=false diff --git a/runtime/org.argeo.slc.rpmfactory/build.properties b/runtime/org.argeo.slc.rpmfactory/build.properties new file mode 100644 index 000000000..5fc538bc8 --- /dev/null +++ b/runtime/org.argeo.slc.rpmfactory/build.properties @@ -0,0 +1,4 @@ +source.. = src/main/java/ +output.. = target/classes/ +bin.includes = META-INF/,\ + . diff --git a/runtime/org.argeo.slc.rpmfactory/pom.xml b/runtime/org.argeo.slc.rpmfactory/pom.xml new file mode 100644 index 000000000..bb8b16133 --- /dev/null +++ b/runtime/org.argeo.slc.rpmfactory/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + + org.argeo.slc + runtime + 1.1.13-SNAPSHOT + .. + + org.argeo.slc.rpmfactory + SLC RPM Factory + + + + org.apache.felix + maven-bundle-plugin + + + + + org.argeo.slc.rpmfactory.* + + + * + + + + + + + + + + org.argeo.slc + org.argeo.slc.repo + 1.1.13-SNAPSHOT + + + org.argeo.slc + org.argeo.slc.support.jcr + 1.1.13-SNAPSHOT + + + + + org.argeo.tp + org.apache.commons.io + + + org.argeo.tp + slf4j.org.apache.commons.logging + + + \ No newline at end of file diff --git a/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/MavenProxyService.java b/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/MavenProxyService.java new file mode 100644 index 000000000..d2469f829 --- /dev/null +++ b/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/MavenProxyService.java @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2007-2012 Argeo GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.argeo.slc.rpmfactory; + +import org.argeo.jcr.proxy.ResourceProxy; + +/** Marker interface (useful for OSGi servcies references), maybe extended later */ +public interface MavenProxyService extends ResourceProxy { +} diff --git a/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/RpmRepository.java b/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/RpmRepository.java new file mode 100644 index 000000000..d15940bcc --- /dev/null +++ b/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/RpmRepository.java @@ -0,0 +1,8 @@ +package org.argeo.slc.rpmfactory; + +public interface RpmRepository { + public String getId(); + + public String getUrl(); + +} diff --git a/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/MavenProxyServiceImpl.java b/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/MavenProxyServiceImpl.java new file mode 100644 index 000000000..4f8a022d0 --- /dev/null +++ b/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/MavenProxyServiceImpl.java @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2007-2012 Argeo GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.argeo.slc.rpmfactory.core; + +import java.util.ArrayList; +import java.util.List; + +import javax.jcr.Node; +import javax.jcr.NodeIterator; +import javax.jcr.RepositoryException; +import javax.jcr.Session; +import javax.jcr.nodetype.NodeType; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.jcr.ArgeoNames; +import org.argeo.jcr.JcrUtils; +import org.argeo.jcr.proxy.AbstractUrlProxy; +import org.argeo.slc.SlcException; +import org.argeo.slc.jcr.SlcNames; +import org.argeo.slc.jcr.SlcTypes; +import org.argeo.slc.repo.RepoConstants; +import org.argeo.slc.rpmfactory.MavenProxyService; +import org.argeo.slc.rpmfactory.RpmRepository; + +/** Synchronizes the node repository with remote Maven repositories */ +public class MavenProxyServiceImpl extends AbstractUrlProxy implements + MavenProxyService, ArgeoNames, SlcNames { + private final static Log log = LogFactory + .getLog(MavenProxyServiceImpl.class); + + private List defaultRepositories = new ArrayList(); + + private String artifactsBasePath = RepoConstants.DEFAULT_ARTIFACTS_BASE_PATH; + + /** Inititalizes the artifacts area. */ + @Override + protected void beforeInitSessionSave(Session session) + throws RepositoryException { + JcrUtils.mkdirsSafe(session, RepoConstants.DEFAULT_ARTIFACTS_BASE_PATH); + Node proxiedRepositories = JcrUtils.mkdirsSafe(session, + RepoConstants.PROXIED_REPOSITORIES); + for (RpmRepository repository : defaultRepositories) { + if (!proxiedRepositories.hasNode(repository.getId())) { + Node proxiedRepository = proxiedRepositories.addNode(repository + .getId()); + proxiedRepository.addMixin(NodeType.MIX_REFERENCEABLE); + JcrUtils.urlToAddressProperties(proxiedRepository, + repository.getUrl()); + // proxiedRepository.setProperty(SLC_URL, repository.getUrl()); + // proxiedRepository.setProperty(SLC_TYPE, + // repository.getContentType()); + } + } + } + + /** + * Retrieve and add this file to the repository + */ + @Override + protected Node retrieve(Session session, String path) { + try { + if (session.hasPendingChanges()) + throw new SlcException("Session has pending changed"); + Node node = null; + for (Node proxiedRepository : getBaseUrls(session)) { + String baseUrl = JcrUtils + .urlFromAddressProperties(proxiedRepository); + node = proxyUrl(session, baseUrl, path); + if (node != null) { + node.addMixin(SlcTypes.SLC_KNOWN_ORIGIN); + Node origin = node + .addNode(SLC_ORIGIN, SlcTypes.SLC_PROXIED); + origin.setProperty(SLC_PROXY, proxiedRepository); + JcrUtils.urlToAddressProperties(origin, baseUrl + path); + if (log.isDebugEnabled()) + log.debug("Imported " + baseUrl + path + " to " + node); + return node; + } + } + if (log.isDebugEnabled()) + log.warn("No proxy found for " + path); + return null; + } catch (Exception e) { + throw new SlcException("Cannot proxy " + path, e); + } + } + + protected synchronized List getBaseUrls(Session session) + throws RepositoryException { + List baseUrls = new ArrayList(); + for (NodeIterator nit = session.getNode( + RepoConstants.PROXIED_REPOSITORIES).getNodes(); nit.hasNext();) { + Node proxiedRepository = nit.nextNode(); + baseUrls.add(proxiedRepository); + } + return baseUrls; + } + + /** The JCR path where this file could be found */ + public String getNodePath(String path) { + if (artifactsBasePath.equals(RepoConstants.DEFAULT_ARTIFACTS_BASE_PATH)) + return path; + else + return artifactsBasePath + path; + } + + public void setDefaultRepositories(List defaultRepositories) { + this.defaultRepositories = defaultRepositories; + } + + public void setArtifactsBasePath(String artifactsBasePath) { + this.artifactsBasePath = artifactsBasePath; + } + +} diff --git a/runtime/pom.xml b/runtime/pom.xml index d89cfcd87..7320304bc 100644 --- a/runtime/pom.xml +++ b/runtime/pom.xml @@ -27,5 +27,6 @@ org.argeo.slc.launcher org.argeo.slc.lib.detached org.argeo.slc.repo + org.argeo.slc.rpmfactory -- 2.39.2