com.springsource.bundlor.internal
Class StandardBundleTransformer

java.lang.Object
  extended by com.springsource.bundlor.internal.StandardBundleTransformer
All Implemented Interfaces:
BundleTransformer

public class StandardBundleTransformer
extends java.lang.Object
implements BundleTransformer

Standard implementation of BundleTransformer.

Concurrent Semantics
Threadsafe.

Author:
Rob Harrop, Andy Wilkinson, Ben Hale, Christian Dupuis

Nested Class Summary
private static interface StandardBundleTransformer.AnalysisStateTemplate
           
 
Field Summary
private  java.util.List<ArtefactAnalyser> artifactAnalyzers
           
private  ManifestCreator manifestCreator
           
private  java.util.List<ManifestModifier> manifestModifiers
           
private  java.util.List<ManifestReader> manifestReaders
           
private  java.util.List<ManifestTemplateModifier> manifestTemplateModifiers
           
private  ReadablePartialManifestFactory partialManifestFactory
           
private  java.util.List<PartialManifestModifier> partialManifestModifiers
           
 
Constructor Summary
StandardBundleTransformer(java.util.List<ArtefactAnalyser> artifactAnalyzers, java.util.List<ManifestReader> manifestReaders, java.util.List<ManifestModifier> manifestModifiers, java.util.List<ManifestTemplateModifier> manifestTemplateModifiers, java.util.List<PartialManifestModifier> partialManifestModifiers, java.util.List<TemplateHeaderReader> templateHeaderReaders, ReadablePartialManifestFactory partialManifestFactory)
          Creates a new transformer.
 
Method Summary
private  void analyseEntryWithTemplate(java.lang.String artifactName, PartialManifest partialManifest, StandardBundleTransformer.AnalysisStateTemplate analysisStateTemplate)
           
private  void analyzeClassFolder(java.io.File classFolder, java.lang.String classFolderName, PartialManifest partialManifest)
           
private  void analyzeEntries(java.util.jar.JarFile inputJar, PartialManifest partialManifest)
           
private  void analyzeEntries(PartialManifest partialManifest, java.lang.String... classPaths)
           
private  void analyzeEntry(java.lang.String artefactName, java.io.InputStream in, PartialManifest partialManifest)
           
private  void copy(java.io.InputStream in, java.io.OutputStream out)
           
 com.springsource.util.osgi.manifest.BundleManifest generateManifest(com.springsource.util.parser.manifest.ManifestContents existingManifest, com.springsource.util.parser.manifest.ManifestContents manifestTemplate, java.lang.String... classPaths)
          Generates the BundleManifest for classes on the file system using the supplied manifest template
 com.springsource.util.osgi.manifest.BundleManifest generateManifest(java.lang.String inputPath, com.springsource.util.parser.manifest.ManifestContents manifestTemplate)
          Generates the BundleManifest for a JAR using the supplied manifest template
private  com.springsource.util.osgi.manifest.BundleManifest generateManifest(java.lang.String inputPath, com.springsource.util.parser.manifest.ManifestContents manifestTemplate, boolean merge)
           
private  java.util.jar.JarFile loadJar(java.lang.String inputPath)
           
 Result merge(java.lang.String inputPath, com.springsource.util.parser.manifest.ManifestContents manifestTemplate, java.lang.String outputPath)
          Transforms a JAR, merging its existing manifest with the manifest generated using the supplied manifest template
 com.springsource.util.osgi.manifest.BundleManifest mergeManifest(java.lang.String inputPath, com.springsource.util.parser.manifest.ManifestContents manifestTemplate)
          Generates the BundleManifest for a JAR, merging its existing manifest with the manifest generated using the supplied manifest template
private  void modifyManifest(com.springsource.util.parser.manifest.ManifestContents manifest)
           
private  void modifyManifestTemplate(com.springsource.util.parser.manifest.ManifestContents manifestTemplate)
           
private  void modifyPartialManifest(ReadablePartialManifest partialManifest, boolean merge)
           
private  void readManifests(com.springsource.util.parser.manifest.ManifestContents jarManifest, com.springsource.util.parser.manifest.ManifestContents manifestTemplate)
           
 Result transform(java.lang.String inputPath, com.springsource.util.parser.manifest.ManifestContents manifestTemplate, java.lang.String outputPath)
          Transforms a JAR, adding in the manifest generated using the supplied manifest template
private  void writeOutputJar(java.lang.String inputPath, com.springsource.util.osgi.manifest.BundleManifest manifest, java.lang.String outputPath)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

artifactAnalyzers

private final java.util.List<ArtefactAnalyser> artifactAnalyzers

manifestReaders

private final java.util.List<ManifestReader> manifestReaders

manifestTemplateModifiers

private final java.util.List<ManifestTemplateModifier> manifestTemplateModifiers

partialManifestModifiers

private final java.util.List<PartialManifestModifier> partialManifestModifiers

manifestModifiers

private final java.util.List<ManifestModifier> manifestModifiers

partialManifestFactory

private final ReadablePartialManifestFactory partialManifestFactory

manifestCreator

private final ManifestCreator manifestCreator
Constructor Detail

StandardBundleTransformer

public StandardBundleTransformer(java.util.List<ArtefactAnalyser> artifactAnalyzers,
                                 java.util.List<ManifestReader> manifestReaders,
                                 java.util.List<ManifestModifier> manifestModifiers,
                                 java.util.List<ManifestTemplateModifier> manifestTemplateModifiers,
                                 java.util.List<PartialManifestModifier> partialManifestModifiers,
                                 java.util.List<TemplateHeaderReader> templateHeaderReaders,
                                 ReadablePartialManifestFactory partialManifestFactory)
Creates a new transformer.

Parameters:
artifactAnalyzers - A collection of artifact analyzers used to find requirements for the manifest
manifestReaders - A collection of readers of the jar manifest and manifest template
manifestModifiers - A collection of modifiers used to change the input manifest
manifestTemplateModifiers - A collection of modifiers used change the manifest template
partialManifestModifiers - A collection of modifiers used to change the partial manifest
templateHeaderReaders - A collection of objects that read template headers for functionality
partialManifestFactory - The factory used to create partial manifests
Method Detail

generateManifest

public com.springsource.util.osgi.manifest.BundleManifest generateManifest(java.lang.String inputPath,
                                                                           com.springsource.util.parser.manifest.ManifestContents manifestTemplate)
Description copied from interface: BundleTransformer
Generates the BundleManifest for a JAR using the supplied manifest template

Specified by:
generateManifest in interface BundleTransformer
Parameters:
inputPath - the path to the input JAR
manifestTemplate - the manifest template
Returns:
the resulting BundleManifest

mergeManifest

public com.springsource.util.osgi.manifest.BundleManifest mergeManifest(java.lang.String inputPath,
                                                                        com.springsource.util.parser.manifest.ManifestContents manifestTemplate)
Description copied from interface: BundleTransformer
Generates the BundleManifest for a JAR, merging its existing manifest with the manifest generated using the supplied manifest template

Specified by:
mergeManifest in interface BundleTransformer
Parameters:
inputPath - the path to the input JAR
manifestTemplate - the manifest template
Returns:
the resulting BundleManifest

generateManifest

public com.springsource.util.osgi.manifest.BundleManifest generateManifest(com.springsource.util.parser.manifest.ManifestContents existingManifest,
                                                                           com.springsource.util.parser.manifest.ManifestContents manifestTemplate,
                                                                           java.lang.String... classPaths)
Description copied from interface: BundleTransformer
Generates the BundleManifest for classes on the file system using the supplied manifest template

Specified by:
generateManifest in interface BundleTransformer
Parameters:
existingManifest - the existing manifest
manifestTemplate - the manifest template
classPaths - the paths to all class folders to scan for inclusion in scanning
Returns:
the resulting BundleManifest

transform

public Result transform(java.lang.String inputPath,
                        com.springsource.util.parser.manifest.ManifestContents manifestTemplate,
                        java.lang.String outputPath)
Description copied from interface: BundleTransformer
Transforms a JAR, adding in the manifest generated using the supplied manifest template

Specified by:
transform in interface BundleTransformer
Parameters:
inputPath - the path to the input JAR
manifestTemplate - the manifest template
outputPath - the path to which the transformed JAR should be written
Returns:
the resulting bundle

merge

public Result merge(java.lang.String inputPath,
                    com.springsource.util.parser.manifest.ManifestContents manifestTemplate,
                    java.lang.String outputPath)
Description copied from interface: BundleTransformer
Transforms a JAR, merging its existing manifest with the manifest generated using the supplied manifest template

Specified by:
merge in interface BundleTransformer
Parameters:
inputPath - the path to the input JAR
manifestTemplate - the manifest template
outputPath - the path to which the transformed JAR should be written
Returns:
the resulting bundle

generateManifest

private com.springsource.util.osgi.manifest.BundleManifest generateManifest(java.lang.String inputPath,
                                                                            com.springsource.util.parser.manifest.ManifestContents manifestTemplate,
                                                                            boolean merge)

readManifests

private void readManifests(com.springsource.util.parser.manifest.ManifestContents jarManifest,
                           com.springsource.util.parser.manifest.ManifestContents manifestTemplate)

modifyManifest

private void modifyManifest(com.springsource.util.parser.manifest.ManifestContents manifest)

modifyManifestTemplate

private void modifyManifestTemplate(com.springsource.util.parser.manifest.ManifestContents manifestTemplate)

modifyPartialManifest

private void modifyPartialManifest(ReadablePartialManifest partialManifest,
                                   boolean merge)

loadJar

private java.util.jar.JarFile loadJar(java.lang.String inputPath)

analyzeEntries

private void analyzeEntries(java.util.jar.JarFile inputJar,
                            PartialManifest partialManifest)

analyzeEntries

private void analyzeEntries(PartialManifest partialManifest,
                            java.lang.String... classPaths)

analyzeClassFolder

private void analyzeClassFolder(java.io.File classFolder,
                                java.lang.String classFolderName,
                                PartialManifest partialManifest)

analyzeEntry

private void analyzeEntry(java.lang.String artefactName,
                          java.io.InputStream in,
                          PartialManifest partialManifest)

writeOutputJar

private void writeOutputJar(java.lang.String inputPath,
                            com.springsource.util.osgi.manifest.BundleManifest manifest,
                            java.lang.String outputPath)

copy

private void copy(java.io.InputStream in,
                  java.io.OutputStream out)
           throws java.io.IOException
Throws:
java.io.IOException

analyseEntryWithTemplate

private void analyseEntryWithTemplate(java.lang.String artifactName,
                                      PartialManifest partialManifest,
                                      StandardBundleTransformer.AnalysisStateTemplate analysisStateTemplate)