You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by da...@apache.org on 2011/03/18 15:15:34 UTC

svn commit: r1082930 - in /aries/trunk/spi-fly: spi-fly-core/src/main/java/org/apache/aries/spifly/api/SpiFlyConstants.java spi-fly-static/src/main/java/org/apache/aries/spifly/statictool/Main.java

Author: davidb
Date: Fri Mar 18 14:15:34 2011
New Revision: 1082930

URL: http://svn.apache.org/viewvc?rev=1082930&view=rev
Log:
More changes to the static tool. WIP

Modified:
    aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/api/SpiFlyConstants.java
    aries/trunk/spi-fly/spi-fly-static/src/main/java/org/apache/aries/spifly/statictool/Main.java

Modified: aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/api/SpiFlyConstants.java
URL: http://svn.apache.org/viewvc/aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/api/SpiFlyConstants.java?rev=1082930&r1=1082929&r2=1082930&view=diff
==============================================================================
--- aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/api/SpiFlyConstants.java (original)
+++ aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/api/SpiFlyConstants.java Fri Mar 18 14:15:34 2011
@@ -22,5 +22,7 @@ public interface SpiFlyConstants {
     String SPI_CONSUMER_HEADER = "SPI-Consumer";
     String SPI_PROVIDER_HEADER = "SPI-Provider";
 
+    String PROCESSED_SPI_CONSUMER_HEADER = "X-SpiFly-Processed-SPI-Consumer";
+
     String SPI_PROVIDER_URL = "spi.provider.url";
 }

Modified: aries/trunk/spi-fly/spi-fly-static/src/main/java/org/apache/aries/spifly/statictool/Main.java
URL: http://svn.apache.org/viewvc/aries/trunk/spi-fly/spi-fly-static/src/main/java/org/apache/aries/spifly/statictool/Main.java?rev=1082930&r1=1082929&r2=1082930&view=diff
==============================================================================
--- aries/trunk/spi-fly/spi-fly-static/src/main/java/org/apache/aries/spifly/statictool/Main.java (original)
+++ aries/trunk/spi-fly/spi-fly-static/src/main/java/org/apache/aries/spifly/statictool/Main.java Fri Mar 18 14:15:34 2011
@@ -24,6 +24,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.jar.Attributes;
 import java.util.jar.JarEntry;
 import java.util.jar.JarInputStream;
 import java.util.jar.JarOutputStream;
@@ -58,25 +59,45 @@ public class Main {
         String consumerHeader = manifest.getMainAttributes().getValue(SpiFlyConstants.SPI_CONSUMER_HEADER);
         if (consumerHeader != null) {
             weaveDir(tempDir, consumerHeader);
-            // jar(tempDir, newJar);
+
+            manifest.getMainAttributes().remove(new Attributes.Name(SpiFlyConstants.SPI_CONSUMER_HEADER));
+            manifest.getMainAttributes().putValue(SpiFlyConstants.PROCESSED_SPI_CONSUMER_HEADER, consumerHeader);
+            
+            File newJar = getNewJarFile(jarFile);
+            jar(newJar, tempDir, manifest);
         }
         delTree(tempDir);
-        // finally - clean up
+    }
+
+    private static File getNewJarFile(File jarFile) {
+        String s = jarFile.getAbsolutePath();
+        int idx = s.lastIndexOf('.');
+        s = s.substring(0, idx);
+        s += "_spifly.jar";
+        return new File(s);
     }
 
     private static void weaveDir(File dir, String consumerHeader) throws IOException {
+        String dirName = dir.getAbsolutePath();
+        
         DirTree dt = new DirTree(dir);
         for (File f : dt.getFiles()) {
             if (!f.getName().endsWith(".class"))
                 continue;
             
+            String className = f.getAbsolutePath().substring(dirName.length());
+            if (className.startsWith(File.separator)) 
+                className = className.substring(1);
+            className = className.substring(0, className.length() - ".class".length());
+            className = className.replace(File.separator, ".");
+            
             WeavingData[] wd = ConsumerHeaderProcessor.processHeader(consumerHeader);
             InputStream is = new FileInputStream(f);
             byte[] b;
             try {
                 ClassReader cr = new ClassReader(is);
-                ClassWriter cw = new ClassWriter(0);
-                ClassVisitor cv = new TCCLSetterVisitor(cw, null, wd); 
+                ClassWriter cw = new ClassWriter(0);                
+                ClassVisitor cv = new TCCLSetterVisitor(cw, className, wd); 
                 cr.accept(cv, 0);
                 b = cw.toByteArray();
             } finally {