You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2014/06/17 14:50:54 UTC
svn commit: r1603153 -
/sling/trunk/contrib/crankstart/sling-extensions/src/main/java/org/apache/sling/crankstart/extensions/sling/CrankstartInventoryPrinter.java
Author: bdelacretaz
Date: Tue Jun 17 12:50:53 2014
New Revision: 1603153
URL: http://svn.apache.org/r1603153
Log:
Improved fragment bundles handling
Modified:
sling/trunk/contrib/crankstart/sling-extensions/src/main/java/org/apache/sling/crankstart/extensions/sling/CrankstartInventoryPrinter.java
Modified: sling/trunk/contrib/crankstart/sling-extensions/src/main/java/org/apache/sling/crankstart/extensions/sling/CrankstartInventoryPrinter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/crankstart/sling-extensions/src/main/java/org/apache/sling/crankstart/extensions/sling/CrankstartInventoryPrinter.java?rev=1603153&r1=1603152&r2=1603153&view=diff
==============================================================================
--- sling/trunk/contrib/crankstart/sling-extensions/src/main/java/org/apache/sling/crankstart/extensions/sling/CrankstartInventoryPrinter.java (original)
+++ sling/trunk/contrib/crankstart/sling-extensions/src/main/java/org/apache/sling/crankstart/extensions/sling/CrankstartInventoryPrinter.java Tue Jun 17 12:50:53 2014
@@ -20,7 +20,12 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.URL;
+import java.util.Collection;
+import java.util.Dictionary;
import java.util.Enumeration;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.concurrent.atomic.AtomicInteger;
import org.apache.commons.io.IOUtils;
import org.apache.felix.inventory.Format;
@@ -32,6 +37,7 @@ import org.apache.felix.scr.annotations.
import org.apache.felix.scr.annotations.Service;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
import org.osgi.service.component.ComponentContext;
@Component
@@ -70,14 +76,24 @@ public class CrankstartInventoryPrinter
private void bundles(PrintWriter out) throws IOException {
int ok = 0;
int errors = 0;
+ final AtomicInteger warnings = new AtomicInteger();
+
+ // Get the list of Maven coordinates from any fragment bundles,
+ // so that we can ignore their entries when returned by the
+ // bundles that they are attached to
+ final Set<String> fragmentCoords = new TreeSet<String>();
for(Bundle b : bundleContext.getBundles()) {
- final String coords = mavenCoordinates(b);
+ if(isFragment(b)) {
+ fragmentCoords.add(mavenCoordinates(b, null, warnings));
+ }
+ }
+
+ for(Bundle b : bundleContext.getBundles()) {
+ final String coords = mavenCoordinates(b, fragmentCoords, warnings);
if(coords.length() == 0) {
errors++;
- out.print("# ERROR: Maven coordinates not found for bundle ");
- out.print(b.getSymbolicName());
- out.print(" version ");
- out.print(b.getVersion());
+ out.print("# ERROR: Maven coordinates not found for ");
+ out.print(getBundleInfo(b));
out.println();
} else {
ok++;
@@ -92,39 +108,60 @@ public class CrankstartInventoryPrinter
out.print(ok);
out.print(" bundles processed sucessfully, ");
out.print(errors);
- out.println(" errors.");
+ out.print(" errors, ");
+ out.print(warnings.get());
+ out.print(" warnings.");
+ out.println();
}
- private String mavenCoordinates(Bundle b) throws IOException {
+ private static boolean isFragment(final Bundle bundle) {
+ Dictionary<?, ?> headerMap = bundle.getHeaders();
+ return headerMap.get(Constants.FRAGMENT_HOST) != null;
+ }
+
+ private String mavenCoordinates(Bundle b, Collection<String> fragmentCoordinates, AtomicInteger warningsCounter) throws IOException {
final StringBuilder sb = new StringBuilder();
@SuppressWarnings("unchecked")
final Enumeration<URL> entries = b.findEntries("META-INF/maven", "pom.properties", true);
- int count=0;
+ // Get the pom.properties from the bundle itself, ignoring any attached fragments
while(entries != null && entries.hasMoreElements()) {
final URL u = entries.nextElement();
java.util.Properties props = new java.util.Properties();
InputStream is = null;
try {
is = u.openStream();
- props.load(u.openStream());
- sb.append("mvn:")
+ props.load(is);
+ final StringBuilder thisBundle = new StringBuilder();
+ thisBundle.append("mvn:")
.append(props.get("groupId"))
.append("/")
.append(props.get("artifactId"))
.append("/")
.append(props.get("version"));
+
+ if(fragmentCoordinates != null && !isFragment(b) && fragmentCoordinates.contains(thisBundle.toString())) {
+ // fragment bundle - ignore
+ } else {
+ if(sb.length() > 0) {
+ warningsCounter.incrementAndGet();
+ sb.append(" WARN - multiple non-fragment entries?? ");
+ sb.append(getBundleInfo(b)).append(" ");
+ }
+ sb.append(thisBundle);
+ }
} finally {
IOUtils.closeQuietly(is);
}
- count++;
}
- if(count > 1) {
- sb.append(" WARNING - multiple entries, how to handle that?");
- }
-
+ return sb.toString();
+ }
+
+ private static String getBundleInfo(Bundle b) {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("bundle ").append(b.getSymbolicName()).append(" (").append(b.getBundleId()).append(")");
return sb.toString();
}