From: Mathieu Baudier Date: Wed, 16 Feb 2011 13:59:21 +0000 (+0000) Subject: Improve packaging (esp. security) X-Git-Tag: argeo-slc-2.1.7~1030 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=9485fdca99c408ae16fd077577973b80b7dde81f;hp=5904f7081e6903fb2ceb86741853b8a92751a4be;p=gpl%2Fargeo-slc.git Improve packaging (esp. security) git-svn-id: https://svn.argeo.org/slc/trunk@4150 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/demo/slc-client-rcp.product b/demo/slc-client-rcp.product new file mode 100644 index 000000000..9621e7cf8 --- /dev/null +++ b/demo/slc-client-rcp.product @@ -0,0 +1,274 @@ + + + + + + + + + + -console + -Dlog4j.configuration=file:${system_property:user.home}/dev/src/slc/demo/log4j.properties -Dorg.argeo.security.ui.initialPerspective=org.argeo.slc.client.ui.perspectives.slcExecution + -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dep/org.argeo.slc.dep.agent/pom.xml b/dep/org.argeo.slc.dep.agent/pom.xml index cc24140d4..786668f97 100644 --- a/dep/org.argeo.slc.dep.agent/pom.xml +++ b/dep/org.argeo.slc.dep.agent/pom.xml @@ -71,6 +71,13 @@ ${project.version} + + org.argeo.commons.security + org.argeo.security.activemq + ${version.argeo-commons} + pom + + org.springframework diff --git a/dep/org.argeo.slc.dep.backend/pom.xml b/dep/org.argeo.slc.dep.backend/pom.xml index 2593a7320..f2d5eba3c 100644 --- a/dep/org.argeo.slc.dep.backend/pom.xml +++ b/dep/org.argeo.slc.dep.backend/pom.xml @@ -9,16 +9,16 @@ org.argeo.slc.dep - org.argeo.slc.backend + org.argeo.slc.dep.backend SLC BACKEND Dependencies - - - - - - - - + + + + org.argeo.maven.plugins + maven-argeo-osgi-plugin + + + @@ -48,6 +48,11 @@ org.argeo.slc.dep.gis ${project.version} + + org.argeo.slc.dep + org.argeo.slc.dep.provided + ${project.version} + @@ -105,12 +110,6 @@ ${project.version} pom - - org.argeo.slc.eclipse - org.argeo.slc.eclipse.plugins.modules.bundles - ${project.version} - pom - @@ -134,12 +133,6 @@ ${project.version} pom - - org.argeo.slc.eclipse - org.argeo.slc.eclipse.plugins.modules.bundles - ${project.version} - pom - diff --git a/dep/org.argeo.slc.dep.gis/pom.xml b/dep/org.argeo.slc.dep.gis/pom.xml index 6894f5fc5..b3dafd106 100644 --- a/dep/org.argeo.slc.dep.gis/pom.xml +++ b/dep/org.argeo.slc.dep.gis/pom.xml @@ -57,11 +57,6 @@ org.hibernate com.springsource.org.hibernate - - - javax.xml.stream - com.springsource.javax.xml.stream - \ No newline at end of file diff --git a/dep/org.argeo.slc.dep.provided/pom.xml b/dep/org.argeo.slc.dep.provided/pom.xml new file mode 100644 index 000000000..0a417c3a7 --- /dev/null +++ b/dep/org.argeo.slc.dep.provided/pom.xml @@ -0,0 +1,50 @@ + + 4.0.0 + + org.argeo.slc + dep + 0.13.1-SNAPSHOT + .. + + + org.argeo.slc.dep + org.argeo.slc.dep.provided + SLC Dependencies Provided + Dependencies which may be provided by soem OSGi runtimes + + + org.apache.xmlcommons + com.springsource.org.apache.xmlcommons + + + + javax.activation + com.springsource.javax.activation + + + javax.annotation + com.springsource.javax.annotation + + + javax.transaction + com.springsource.javax.transaction + + + javax.xml.stream + com.springsource.javax.xml.stream + + + javax.xml.bind + com.springsource.javax.xml.bind + + + javax.xml.soap + com.springsource.javax.xml.soap + + + javax.xml.ws + com.springsource.javax.xml.ws + + + \ No newline at end of file diff --git a/dep/org.argeo.slc.dep.sdk.rap/pom.xml b/dep/org.argeo.slc.dep.sdk.rap/pom.xml index 4f6ca4d4d..c40ff685f 100644 --- a/dep/org.argeo.slc.dep.sdk.rap/pom.xml +++ b/dep/org.argeo.slc.dep.sdk.rap/pom.xml @@ -25,20 +25,20 @@ ${project.version} - org.argeo.slc.dep - org.argeo.slc.backend + org.argeo.slc.dep.sdk.rcp ${project.version} + + + org.argeo.commons.eclipse + org.argeo.eclipse.dep.rcp + + + org.argeo.slc.eclipse + org.argeo.slc.client.rcp + + - - - - - - \ No newline at end of file diff --git a/dep/org.argeo.slc.dep.sdk.rcp/pom.xml b/dep/org.argeo.slc.dep.sdk.rcp/pom.xml index 29baea42b..e786c765c 100644 --- a/dep/org.argeo.slc.dep.sdk.rcp/pom.xml +++ b/dep/org.argeo.slc.dep.sdk.rcp/pom.xml @@ -19,20 +19,67 @@ + + org.argeo.slc.eclipse + org.argeo.slc.client.ui + ${project.version} + + + org.argeo.slc.eclipse + org.argeo.slc.client.ui.dist + ${project.version} + + + + org.argeo.commons.security + org.argeo.security.ui.application + ${version.argeo-commons} + + org.argeo.slc.eclipse org.argeo.slc.client.rcp ${project.version} - org.argeo.slc.dep - org.argeo.slc.backend + org.argeo.slc.dep.backend ${project.version} + + + sdkWithModules + + true + + + + org.argeo.slc.eclipse + org.argeo.slc.eclipse.modules.bundles + ${project.version} + pom + + + + + sdkWithoutModules + + + release + + /srv/projects/slc/www/sdk + + + + org.argeo.slc.eclipse + org.argeo.slc.eclipse.modules.bundles + ${project.version} + pom + + + + \ No newline at end of file diff --git a/dep/org.argeo.slc.dep.sdk.rcp/slc-client-rcp.product b/dep/org.argeo.slc.dep.sdk.rcp/slc-client-rcp.product deleted file mode 100644 index ed313d77f..000000000 --- a/dep/org.argeo.slc.dep.sdk.rcp/slc-client-rcp.product +++ /dev/null @@ -1,262 +0,0 @@ - - - - - - - - - - -console - -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dep/org.argeo.slc.dep.server/pom.xml b/dep/org.argeo.slc.dep.server/pom.xml index fee0b63e6..6fe4f99a8 100644 --- a/dep/org.argeo.slc.dep.server/pom.xml +++ b/dep/org.argeo.slc.dep.server/pom.xml @@ -45,11 +45,6 @@ org.argeo.slc.support.jcr ${project.version} - - org.argeo.slc.runtime - org.argeo.slc.support.ws.client - ${project.version} - org.argeo.slc.runtime org.argeo.slc.repo @@ -69,6 +64,11 @@ ${version.argeo-commons} pom + + org.argeo.commons.security + org.argeo.security.ldap + ${version.argeo-commons} + @@ -101,10 +101,6 @@ - - javax.annotation - com.springsource.javax.annotation - javax.persistence com.springsource.javax.persistence diff --git a/dep/pom.xml b/dep/pom.xml index ea056d031..be5f94f71 100644 --- a/dep/pom.xml +++ b/dep/pom.xml @@ -15,6 +15,7 @@ org.argeo.slc.dep.server org.argeo.slc.dep.detached org.argeo.slc.dep.gis + org.argeo.slc.dep.provided org.argeo.slc.dep.backend org.argeo.slc.dep.sdk.rcp org.argeo.slc.dep.sdk.rap diff --git a/dist/org.argeo.slc.sdk/pom.xml b/dist/org.argeo.slc.sdk/pom.xml index 5b9ab2849..555b6c93f 100644 --- a/dist/org.argeo.slc.sdk/pom.xml +++ b/dist/org.argeo.slc.sdk/pom.xml @@ -143,8 +143,6 @@ org.argeo.slc.dep.sdk.rcp ${project.version} - diff --git a/eclipse/modules/pom.xml b/eclipse/modules/pom.xml index 258907dca..9fd4f84bf 100644 --- a/eclipse/modules/pom.xml +++ b/eclipse/modules/pom.xml @@ -17,7 +17,7 @@ maven-argeo-osgi-plugin true - org.argeo.slc.eclipse.plugins.modules.bundles + org.argeo.slc.eclipse.modules.bundles diff --git a/eclipse/plugins/org.argeo.slc.client.ui.dist/META-INF/MANIFEST.MF b/eclipse/plugins/org.argeo.slc.client.ui.dist/META-INF/MANIFEST.MF index 788114fb3..632f08d27 100644 --- a/eclipse/plugins/org.argeo.slc.client.ui.dist/META-INF/MANIFEST.MF +++ b/eclipse/plugins/org.argeo.slc.client.ui.dist/META-INF/MANIFEST.MF @@ -4,9 +4,11 @@ Bundle-Name: Dist Bundle-SymbolicName: org.argeo.slc.client.ui.dist;singleton:=true Bundle-Version: 0.13.1.SNAPSHOT Bundle-RequiredExecutionEnvironment: J2SE-1.5 -Require-Bundle: org.eclipse.ui;bundle-version="3.6.1", - org.eclipse.core.runtime;bundle-version="3.6.0" +Require-Bundle: org.eclipse.ui;resolution:=optional, + org.eclipse.rap.ui;resolution:=optional, + org.eclipse.core.runtime Bundle-Activator: org.argeo.slc.client.ui.dist.DistPlugin -Import-Package: aQute.lib.osgi, +Import-Package: aQute.lib.osgi;resolution:=optional, + org.apache.commons.logging;version="1.1.1", org.argeo.eclipse.ui Bundle-ActivationPolicy: lazy diff --git a/eclipse/plugins/org.argeo.slc.client.ui.dist/org.argeo.slc.client.ui.dist.jar b/eclipse/plugins/org.argeo.slc.client.ui.dist/org.argeo.slc.client.ui.dist.jar deleted file mode 100644 index 676dc7700..000000000 Binary files a/eclipse/plugins/org.argeo.slc.client.ui.dist/org.argeo.slc.client.ui.dist.jar and /dev/null differ diff --git a/eclipse/plugins/org.argeo.slc.client.ui.dist/pom.xml b/eclipse/plugins/org.argeo.slc.client.ui.dist/pom.xml new file mode 100644 index 000000000..937e35ddf --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.ui.dist/pom.xml @@ -0,0 +1,34 @@ + + 4.0.0 + + org.argeo.slc.eclipse + plugins + 0.13.1-SNAPSHOT + .. + + org.argeo.slc.client.ui.dist + SLC Client UI Distribution + jar + + + + + + org.argeo.commons.eclipse + org.argeo.eclipse.dep.rcp + ${version.argeo-commons} + provided + + + org.argeo.commons.eclipse + org.argeo.eclipse.ui + ${version.argeo-commons} + + + + org.argeo.dep.osgi + org.argeo.dep.osgi.bnd + + + diff --git a/eclipse/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/views/ModulesView.java b/eclipse/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/views/ModulesView.java index 013cc1521..d0fac981d 100644 --- a/eclipse/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/views/ModulesView.java +++ b/eclipse/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/views/ModulesView.java @@ -1,8 +1,15 @@ package org.argeo.slc.client.ui.dist.views; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; import java.util.Set; +import java.util.TreeMap; import java.util.TreeSet; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.argeo.eclipse.ui.TreeObject; import org.argeo.eclipse.ui.TreeParent; import org.argeo.slc.client.ui.dist.DistPlugin; @@ -18,10 +25,26 @@ import org.eclipse.ui.part.ViewPart; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; +import org.osgi.service.packageadmin.ExportedPackage; +import org.osgi.service.packageadmin.PackageAdmin; public class ModulesView extends ViewPart { + private final static Log log = LogFactory.getLog(ModulesView.class); + private TreeViewer viewer; + private PackageAdmin packageAdmin; + + private Comparator exportedPackageComparator = new Comparator() { + + public int compare(ExportedPackage o1, ExportedPackage o2) { + if (!o1.getName().equals(o2.getName())) + return o1.getName().compareTo(o2.getName()); + else + return o1.getVersion().compareTo(o2.getVersion()); + } + }; + @Override public void createPartControl(Composite parent) { viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); @@ -45,12 +68,102 @@ public class ModulesView extends ViewPart { if (parentElement instanceof BundleContext) { BundleContext bundleContext = (BundleContext) parentElement; Bundle[] bundles = bundleContext.getBundles(); - Set moduleNodes = new TreeSet(); + + TreeParent bundlesNode = new TreeParent("Bundles"); for (Bundle bundle : bundles) { if (bundle.getState() == Bundle.ACTIVE) - moduleNodes.add(new ModuleNode(bundle)); + bundlesNode.addChild(new BundleNode(bundle)); } - return moduleNodes.toArray(); + + // scan packages + ServiceReference paSr = bundleContext + .getServiceReference(PackageAdmin.class.getName()); + // TODO: make a cleaner referencing + packageAdmin = (PackageAdmin) bundleContext.getService(paSr); + + Bundle bundle1 = null; + Bundle bundle2 = null; + + Map> importedPackages = new HashMap>(); + Map> packages = new TreeMap>(); + for (Bundle bundle : bundles) { + if (bundle.getSymbolicName() + .equals("org.argeo.security.ui")) + bundle1 = bundle; + if (bundle.getSymbolicName().equals( + "org.argeo.security.equinox")) + bundle2 = bundle; + + ExportedPackage[] pkgs = packageAdmin + .getExportedPackages(bundle); + if (pkgs != null) + for (ExportedPackage pkg : pkgs) { + if (!packages.containsKey(pkg.getName())) + packages.put(pkg.getName(), + new TreeSet( + exportedPackageComparator)); + Set expPackages = (Set) packages + .get(pkg.getName()); + expPackages.add(pkg); + + // imported + for (Bundle b : pkg.getImportingBundles()) { + if (bundle.getBundleId() != b.getBundleId()) { + if (!importedPackages.containsKey(b)) + importedPackages + .put(b, + new TreeSet( + exportedPackageComparator)); + Set impPackages = (Set) importedPackages + .get(b); + impPackages.add(pkg); + } + } + } + } + + TreeParent mPackageNode = new TreeParent("Multiple Packages"); + TreeParent aPackageNode = new TreeParent("All Packages"); + for (String packageName : packages.keySet()) { + Set pkgs = packages.get(packageName); + if (pkgs.size() > 1) { + MultiplePackagesNode mpn = new MultiplePackagesNode( + packageName, pkgs); + mPackageNode.addChild(mpn); + aPackageNode.addChild(mpn); + } else { + aPackageNode.addChild(new ExportedPackageNode(pkgs + .iterator().next())); + } + } + + Map> traces1 = new TreeMap>(); + Map space1 = dependencySpace(bundle1, + importedPackages, traces1); + Map> traces2 = new TreeMap>(); + Map space2 = dependencySpace(bundle2, + importedPackages, traces2); + for (String key : space1.keySet()) { + if (space2.containsKey(key)) { + ExportedPackage pkg1 = space1.get(key); + ExportedPackage pkg2 = space2.get(key); + if (!pkg1.getVersion().equals(pkg2.getVersion())) { + log.debug("\n##" + pkg1 + " <> " + pkg2); + log.debug("# Traces for " + + bundle1.getSymbolicName()); + for (String trace : traces1.get(pkg1.getName())) { + log.debug(trace); + } + log.debug("# Traces for " + + bundle2.getSymbolicName()); + for (String trace : traces2.get(pkg2.getName())) { + log.debug(trace); + } + } + } + } + + return new Object[] { bundlesNode, mPackageNode, aPackageNode }; } else if (parentElement instanceof TreeParent) { return ((TreeParent) parentElement).getChildren(); } else { @@ -82,6 +195,40 @@ public class ModulesView extends ViewPart { } + protected Map dependencySpace(Bundle bundle, + Map> importedPackages, + Map> traces) { + log.debug("Dependency space for " + bundle.getSymbolicName()); + Map space = new TreeMap(); + fillDependencySpace(space, bundle, importedPackages, + bundle.getSymbolicName(), traces); + return space; + } + + /** Recursive */ + protected void fillDependencySpace(Map space, + Bundle bundle, Map> importedPackages, + String currTrace, Map> traces) { + if (importedPackages.containsKey(bundle)) { + Set imports = importedPackages.get(bundle); + // log.debug("## Fill dependency space for " + bundle + " : "); + for (ExportedPackage pkg : imports) { + if (!traces.containsKey(pkg.getName())) + traces.put(pkg.getName(), new TreeSet()); + traces.get(pkg.getName()).add(currTrace); + if (!space.containsKey(pkg.getName())) { + space.put(pkg.getName(), pkg); + Bundle exportingBundle = pkg.getExportingBundle(); + // if (bundle.getBundleId() != + // exportingBundle.getBundleId()) + fillDependencySpace(space, exportingBundle, + importedPackages, currTrace + " > " + + exportingBundle.getSymbolicName(), traces); + } + } + } + } + private class ModulesLabelProvider extends LabelProvider implements ITableLabelProvider { @@ -96,10 +243,10 @@ public class ModulesView extends ViewPart { } - class ModuleNode extends TreeParent { + class BundleNode extends TreeParent { private final Bundle bundle; - public ModuleNode(Bundle bundle) { + public BundleNode(Bundle bundle) { super(bundle.getSymbolicName()); this.bundle = bundle; @@ -167,4 +314,75 @@ public class ModulesView extends ViewPart { } } + + class MultiplePackagesNode extends TreeParent { + private String packageName; + private Set exportedPackages; + + public MultiplePackagesNode(String packageName, + Set exportedPackages) { + super(packageName); + this.packageName = packageName; + this.exportedPackages = exportedPackages; + for (ExportedPackage pkg : exportedPackages) { + addChild(new ExportedPackageNode(pkg)); + } + } + + } + + class ConflictingPackageNode extends TreeParent { + private ExportedPackage exportedPackage; + + public ConflictingPackageNode(ExportedPackage exportedPackage) { + super(exportedPackage.getName() + " - " + + exportedPackage.getVersion() + " (" + + exportedPackage.getExportingBundle() + ")"); + this.exportedPackage = exportedPackage; + + TreeParent bundlesNode = new TreeParent("Dependent Bundles"); + this.addChild(bundlesNode); + Map bundles = new TreeMap(); + for (Bundle b : exportedPackage.getImportingBundles()) { + bundles.put(b.getSymbolicName(), b); + } + for (String key : bundles.keySet()) { + addDependentBundles(bundlesNode, bundles.get(key)); + } + } + } + + protected void addDependentBundles(TreeParent parent, Bundle bundle) { + TreeParent bundleNode = new TreeParent(bundle.toString()); + parent.addChild(bundleNode); + Map bundles = new TreeMap(); + ExportedPackage[] pkgs = packageAdmin.getExportedPackages(bundle); + if (pkgs != null) + for (ExportedPackage pkg : pkgs) { + for (Bundle b : pkg.getImportingBundles()) { + if (!bundles.containsKey(b.getSymbolicName()) + && b.getBundleId() != bundle.getBundleId()) { + bundles.put(b.getSymbolicName(), b); + } + } + } + + for (String key : bundles.keySet()) { + addDependentBundles(bundleNode, bundles.get(key)); + } + } + + class ExportedPackageNode extends TreeParent { + private ExportedPackage exportedPackage; + + public ExportedPackageNode(ExportedPackage exportedPackage) { + super(exportedPackage.getName() + " - " + + exportedPackage.getVersion() + " (" + + exportedPackage.getExportingBundle() + ")"); + this.exportedPackage = exportedPackage; + for (Bundle bundle : exportedPackage.getImportingBundles()) { + addChild(new BundleNode(bundle)); + } + } + } } diff --git a/eclipse/plugins/pom.xml b/eclipse/plugins/pom.xml index ce8b8d2c4..2612c90f4 100644 --- a/eclipse/plugins/pom.xml +++ b/eclipse/plugins/pom.xml @@ -13,6 +13,7 @@ org.argeo.slc.client.ui + org.argeo.slc.client.ui.dist org.argeo.slc.client.rcp org.argeo.slc.client.rap diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 1754cbe0b..51d5311a8 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -1,4 +1,5 @@ - + 4.0.0 org.argeo.slc diff --git a/modules/server/org.argeo.slc.server.jackrabbit.pgsql/META-INF/spring/jackrabbit.xml b/modules/server/org.argeo.slc.server.jackrabbit.pgsql/META-INF/spring/jackrabbit.xml index 39daf0f94..eacbf848e 100644 --- a/modules/server/org.argeo.slc.server.jackrabbit.pgsql/META-INF/spring/jackrabbit.xml +++ b/modules/server/org.argeo.slc.server.jackrabbit.pgsql/META-INF/spring/jackrabbit.xml @@ -20,10 +20,10 @@ - - - - - + + + classpath:/org/argeo/slc/repo/repo.cnd + + \ No newline at end of file diff --git a/modules/server/org.argeo.slc.server.repo/META-INF/spring/maven.xml b/modules/server/org.argeo.slc.server.repo/META-INF/spring/maven.xml index 45fcf7bc8..6f482bcad 100644 --- a/modules/server/org.argeo.slc.server.repo/META-INF/spring/maven.xml +++ b/modules/server/org.argeo.slc.server.repo/META-INF/spring/maven.xml @@ -18,6 +18,7 @@ org.osgi:org.osgi.core org.easymock:easymock + com.springsource.org.apache.xmlcommons diff --git a/runtime/org.argeo.slc.core/pom.xml b/runtime/org.argeo.slc.core/pom.xml index 4cf39434b..f64673e6d 100644 --- a/runtime/org.argeo.slc.core/pom.xml +++ b/runtime/org.argeo.slc.core/pom.xml @@ -67,12 +67,10 @@ com.springsource.slf4j.org.apache.commons.logging - org.apache.log4j - com.springsource.org.apache.log4j - - - org.slf4j - com.springsource.slf4j.log4j + org.argeo.commons.basic + org.argeo.basic.dep.log4j + 0.2.3-SNAPSHOT + pom diff --git a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/RepoNodes.java b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/RepoNodes.java new file mode 100644 index 000000000..723554afb --- /dev/null +++ b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/RepoNodes.java @@ -0,0 +1,6 @@ +package org.argeo.slc.repo; + +public interface RepoNodes { + + public final static String SLC_ARTIFACT = "slc:artifact"; +} diff --git a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/RepoProperties.java b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/RepoProperties.java new file mode 100644 index 000000000..c70615973 --- /dev/null +++ b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/RepoProperties.java @@ -0,0 +1,10 @@ +package org.argeo.slc.repo; + +public interface RepoProperties { + // slc:artifact + public final static String SLC_ARTIFACT_ID = "slc:artifactId"; + public final static String SLC_GROUP_ID = "slc:groupId"; + public final static String SLC_ARTIFACT_VERSION = "slc:artifactVersion"; + public final static String SLC_ARTIFACT_EXTENSION = "slc:artifactExtension"; + public final static String SLC_ARTIFACT_CLASSIFIER = "slc:artifactClassifier"; +} diff --git a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/maven/ImportMavenDependencies.java b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/maven/ImportMavenDependencies.java index bf5d98ac9..c4020d92f 100644 --- a/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/maven/ImportMavenDependencies.java +++ b/runtime/org.argeo.slc.repo/src/main/java/org/argeo/slc/repo/maven/ImportMavenDependencies.java @@ -2,18 +2,24 @@ package org.argeo.slc.repo.maven; import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.FileInputStream; import java.util.Comparator; import java.util.HashSet; import java.util.Properties; import java.util.Set; import java.util.TreeSet; +import javax.jcr.Binary; +import javax.jcr.Node; +import javax.jcr.Property; import javax.jcr.Session; +import javax.jcr.nodetype.NodeType; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.argeo.jcr.JcrUtils; import org.argeo.slc.SlcException; import org.argeo.slc.aether.AetherTemplate; import org.sonatype.aether.artifact.Artifact; @@ -32,9 +38,11 @@ public class ImportMavenDependencies implements Runnable { private Set excludedArtifacts = new HashSet(); private Session jcrSession; + private String artifactBasePath = "/slc/repo/artifacts"; public void run() { Set artifacts = resolveDistribution(); + syncDistribution(artifacts); } public Set resolveDistribution() { @@ -90,7 +98,57 @@ public class ImportMavenDependencies implements Runnable { } protected void syncDistribution(Set artifacts) { + Long begin = System.currentTimeMillis(); + try { + JcrUtils.mkdirs(jcrSession, artifactBasePath); + for (Artifact artifact : artifacts) { + String parentPath = artifactBasePath + '/' + + artifactParentPath(artifact); + Node parentNode; + if (!jcrSession.itemExists(parentPath)) { + parentNode = JcrUtils.mkdirs(jcrSession, parentPath, + NodeType.NT_FOLDER, false); + } else { + parentNode = jcrSession.getNode(parentPath); + } + + File file = artifact.getFile(); + Node fileNode; + if (!parentNode.hasNode(file.getName())) { + fileNode = createFileNode(parentNode, file); + } else { + fileNode = parentNode.getNode(file.getName()); + } + } + + Long duration = (System.currentTimeMillis() - begin) / 1000; + if (log.isDebugEnabled()) + log.debug("Synchronized distribution in " + duration + "s"); + } catch (Exception e) { + throw new SlcException("Cannot synchronize distribution", e); + } + } + protected String artifactParentPath(Artifact artifact) { + return artifact.getGroupId().replace('.', '/') + '/' + + artifact.getArtifactId() + '/' + artifact.getVersion(); + } + + protected Node createFileNode(Node parentNode, File file) { + try { + Node fileNode = parentNode + .addNode(file.getName(), NodeType.NT_FILE); + Node contentNode = fileNode.addNode(Node.JCR_CONTENT, + NodeType.NT_RESOURCE); + Binary binary = jcrSession.getValueFactory().createBinary( + new FileInputStream(file)); + contentNode.setProperty(Property.JCR_DATA, binary); + binary.dispose(); + return fileNode; + } catch (Exception e) { + throw new SlcException("Cannot create file node based on " + file + + " under " + parentNode, e); + } } /** Recursively adds non optional dependencies */ diff --git a/runtime/org.argeo.slc.repo/src/main/resources/org/argeo/slc/repo/repo.cnd b/runtime/org.argeo.slc.repo/src/main/resources/org/argeo/slc/repo/repo.cnd index c2e701924..7a53ca0c2 100644 --- a/runtime/org.argeo.slc.repo/src/main/resources/org/argeo/slc/repo/repo.cnd +++ b/runtime/org.argeo.slc.repo/src/main/resources/org/argeo/slc/repo/repo.cnd @@ -1,49 +1,39 @@ - + -[sebi:ebi] > nt:base -// -// GENERIC -// -- sebi:ebiTag (STRING) primary m -- sebi:ebiName (STRING) m -- sebi:ebiUniqueId (LONG) m -- sebi:ebiRpStatus (STRING) m -- sebi:ebiRpAssociatedVersion (STRING) m -- sebi:ebiOrbisModule (STRING) m -- sebi:ebiTracedTo (STRING) m +[slc:artifact] > nt:base +mixin +- slc:artifactId (STRING) primary m +- slc:groupId (STRING) m +- slc:artifactVersion (STRING) m +- slc:artifactExtension (STRING) m +- slc:artifactClassifier (STRING) ='' m a -// BPR are sometimes missing -- sebi:ebiBpr (STRING) -- sebi:bprProcessCode (STRING) -- sebi:appendixBRef (STRING) +[slc:jarArtifact] > slc:artifact +mixin -- sebi:ebiRequirementText (STRING) m -- sebi:ebiRpDate (DATE) m -- sebi:sebiCreationDate (DATE) m -- sebi:sebiLastUpdate (DATE) m -- sebi:sebiLastUpdateUser (STRING) +[slc:bundleArtifact] > slc:jarArtifact, slc:bundle +mixin +- slc:Bundle-Version (STRING) m +- slc:Bundle-Name (STRING) +- slc:Bundle-Description (STRING) +- slc:Bundle-Vendor (STRING) +- slc:Bundle-License (STRING) ++ slc:Import-Package (slc:importedPackage) multiple ++ slc:Export-Package (slc:exportedPackage) multiple ++ slc:Require-Bundle (slc:bundle) multiple -// 'TWIN' FIELDS -- sebi:bprProcessCodeSebi (STRING) -- sebi:appendixBRefSebi (STRING) +[slc:bundle] > nt:base +mixin +- slc:Bundle-SymbolicName (STRING) primary m -// -// AP-HP specific -// -- sebi:ebiRpVersionLastUpdate (STRING) -- sebi:isOutsideAphp (BOOLEAN) = 'false' m a -- sebi:forseenDelivSprint (DATE) -- sebi:forseenDelivSprintLastUpdate (DATE) -- sebi:projectStatus (STRING) -- sebi:aphpDelivDate (DATE) -- sebi:effectiveDelivSprint (STRING) -- sebi:effectiveDelivSprintLastUpdate (DATE) -- sebi:ebiNameFr (STRING) = '' m a -- sebi:ebiDescLastUpdate (DATE) -- sebi:ebiDescFr (STRING) = '' m a -- sebi:ebiDescFrLastUpdate (DATE) -- sebi:consultant (STRING) -- sebi:solutionManager (STRING) -- sebi:productOwner (STRING) -- sebi:tpoRef (STRING) -- sebi:comments (STRING) = '' m a +[slc:javaPackage] > nt:base +mixin +- slc:name (STRING) m + +[slc:exportedPackage] > slc:javaPackage +mixin ++ slc:uses (slc:javaPackage) multiple + +[slc:importedPackage] > slc:javaPackage +mixin ++ slc:version (STRING) ='0.0.0' m a diff --git a/runtime/org.argeo.slc.support.activemq/pom.xml b/runtime/org.argeo.slc.support.activemq/pom.xml index ff10dd3a9..5303b7180 100644 --- a/runtime/org.argeo.slc.support.activemq/pom.xml +++ b/runtime/org.argeo.slc.support.activemq/pom.xml @@ -79,10 +79,6 @@ - - javax.activation - com.springsource.javax.activation - org.apache.geronimo.specs com.springsource.javax.management.j2ee @@ -95,14 +91,6 @@ javax.xml.rpc com.springsource.javax.xml.rpc - - javax.xml.soap - com.springsource.javax.xml.soap - - - javax.transaction - com.springsource.javax.transaction - javax.servlet com.springsource.javax.servlet diff --git a/runtime/org.argeo.slc.support.castor/pom.xml b/runtime/org.argeo.slc.support.castor/pom.xml index ae112ec25..6887117fd 100644 --- a/runtime/org.argeo.slc.support.castor/pom.xml +++ b/runtime/org.argeo.slc.support.castor/pom.xml @@ -86,11 +86,6 @@ com.springsource.org.apache.xalan - - javax.xml.stream - com.springsource.javax.xml.stream - - org.argeo.slc.runtime diff --git a/runtime/org.argeo.slc.support.hibernate/pom.xml b/runtime/org.argeo.slc.support.hibernate/pom.xml index fafa6ffde..b9263025b 100644 --- a/runtime/org.argeo.slc.support.hibernate/pom.xml +++ b/runtime/org.argeo.slc.support.hibernate/pom.xml @@ -32,10 +32,6 @@ ${project.version} - - javax.transaction - com.springsource.javax.transaction - org.hibernate com.springsource.org.hibernate @@ -94,5 +90,11 @@ test + + javax.transaction + com.springsource.javax.transaction + test + +