# ------------------------------------------------------------------
# General mangen properties example
# ------------------------------------------------------------------

# Determines which OSGi release level to create the bundle jars against. Current
# valid values are '3' and '4' (default is '3')
mangen.osgi.level=3


# Determines whether to automatically process any inner jars found, including
# generation of a suitable "Bundle-Classpath" header. Valid values are 'true' or
# 'false' (default is 'false').
#TODO: not implemented yet
#mangen.innerjar.auto=true

# Default is to fail (exit code = 3) on errors, can be disabled
#mangen.failonerror=off
# Optionally can be made to fail (exit code = 5) if there are warnings
#mangen.failonwarning=on

#
# The concept of rulesets is to make it easier to group whole sets of rules for
# use e.g. here it's used to separate general rules, OSGi R3 vs. OSGi R4
# specific rules, and an app. specific rule to ignore all Ant packages found
# in packages. Without rulesets, the sequential numbering means that mixing
# and matching various rules requires a lot of manual renumbering.
#
# Note also the use of ${var} expansion, which follows the same model as used
# for Oscar properties (http://oscar.objectweb.org/)
#
mangen.rulesets=mangen-rule-initial- ,  mangen-rule-R${mangen.osgi.level}- , mangen-rule- , mangen-rule-final-

# Standard JDK javax.* packages
mangen.jdk.javax.packages=javax\\.accessibility,javax\\.crypto,javax\\.crypto\\.interfaces,javax\\.crypto\\.spec,javax\\.imageio,javax\\.imageio\\.event,javax\\.imageio\\.metadata,javax\\.imageio\\.plugins\\.jpeg,javax\\.imageio\\.spi,javax\\.imageio\\.stream,javax\\.naming,javax\\.naming\\.directory,javax\\.naming\\.event,javax\\.naming\\.ldap,javax\\.naming\\.spi,javax\\.net,javax\\.net\\.ssl,javax\\.print,javax\\.print\\.attribute,javax\\.print\\.attribute\\.standard,javax\\.print\\.event,javax\\.rmi,javax\\.rmi\\.CORBA,javax\\.security\\.auth,javax\\.security\\.auth\\.callback,javax\\.security\\.auth\\.kerberos,javax\\.security\\.auth\\.login,javax\\.security\\.auth\\.spi,javax\\.security\\.auth\\.x500,javax\\.security\\.cert,javax\\.sound\\.midi,javax\\.sound\\.midi\\.spi,javax\\.sound\\.sampled,javax\\.sound\\.sampled\\.spi,javax\\.sql,javax\\.swing,javax\\.swing\\.border,javax\\.swing\\.colorchooser,javax\\.swing\\.event,javax\\.swing\\.filechooser,javax\\.swing\\.plaf,javax\\.swing\\.plaf\\.basic,javax\\.swing\\.plaf\\.metal,javax\\.swing\\.plaf\\.multi,javax\\.swing\\.table,javax\\.swing\\.text,javax\\.swing\\.text\\.html,javax\\.swing\\.text\\.html\\.parser,javax\\.swing\\.text\\.rtf,javax\\.swing\\.tree,javax\\.swing\\.undo,javax\\.transaction,javax\\.transaction\\.xa,javax\\.xml\\.parsers,javax\\.xml\\.transform,javax\\.xml\\.transform\\.dom,javax\\.xml\\.transform\\.sax,javax\\.xml\\.transform\\.stream,org\\.ietf\\.jgss,org\\.omg\\.CORBA,org\\.omg\\.CORBA_2_3,org\\.omg\\.CORBA_2_3\\.portable,org\\.omg\\.CORBA\\.DynAnyPackage,org\\.omg\\.CORBA\\.ORBPackage,org\\.omg\\.CORBA\\.portable,org\\.omg\\.CORBA\\.TypeCodePackage,org\\.omg\\.CosNaming,org\\.omg\\.CosNaming\\.NamingContextExtPackage,org\\.omg\\.CosNaming\\.NamingContextPackage,org\\.omg\\.Dynamic,org\\.omg\\.DynamicAny,org\\.omg\\.DynamicAny\\.DynAnyFactoryPackage,org\\.omg\\.DynamicAny\\.DynAnyPackage,org\\.omg\\.IOP,org\\.omg\\.IOP\\.CodecFactoryPackage,org\\.omg\\.IOP\\.CodecPackage,org\\.omg\\.Messaging,org\\.omg\\.PortableInterceptor,org\\.omg\\.PortableInterceptor\\.ORBInitInfoPackage,org\\.omg\\.PortableServer,org\\.omg\\.PortableServer\\.CurrentPackage,org\\.omg\\.PortableServer\\.POAManagerPackage,org\\.omg\\.PortableServer\\.POAPackage,org\\.omg\\.PortableServer\\.portable,org\\.omg\\.PortableServer\\.ServantLocatorPackage,org\\.omg\\.SendingContext,org\\.omg\\.stub\\.java\\.rmi,org\\.w3c\\.dom,org\\.xml\\.sax,org\\.xml\\.sax\\.ext,org\\.xml\\.sax\\.helpers
# R3 treats any standard JDK classes as system packages 
mangen.R3.syspackages=java\\..*,sun\\..*,com\\.sun\\..*,${mangen.jdk.javax.packages}
# R4 system packages are only considered to be java.*
mangen.R4.syspackages=java\\..*

# Initial rule to "process" each bundle's JAR. Without this, no class scanning 
# will be done. Hence this will nearly always be the first rule.
mangen-rule-initial-0=ProcessBundles
# App specific rule to ignore Ant packages
mangen-rule-initial-1=Ignore imports(org\\.apache\\.tools\\.ant.*)


# R3 rule to ignore all standard JDK classes.
#
#   The rule contains an option, in this case imports(), which contains a comma
#   separate list of option qualifiers, in this case a set of regex patterns to 
#   match against package name.
#
#   Care needs to be taken with delimitter chars - ',' and space (' ') should
#   not be used except as shown since the tokenizer needs them for parsing.
#   
mangen-rule-R3-0=Ignore imports(${mangen.R3.syspackages})
mangen-rule-R3-1=DontImportOwnExports
mangen-rule-R3-2=ResolveImportsToExports sys-packages(${mangen.R3.syspackages})

# R4 rule is only to ignore java.* classes
mangen-rule-R4-0=Ignore imports(${mangen.R4.syspackages})
mangen-rule-R4-1=DontImportOwnExports
mangen-rule-R4-2=ResolveImportsToExports sys-packages(${mangen.R4.syspackages})

# General rules. These use the default rule name and will also be used if no
# "mangen.rulesets" property is specified.
#mangen-rule-0=Merge existing imports(.*) exports(.*)
mangen-rule-0=Merge fixed imports(.*) exports(.*)

# The AttribuetStamp rule allows atrtibutes to be supplied to be include with
# mangen generated package names. Shown commented out here to give an example
#
#mangen-rule-1=AttributeStamp imports(org\\.osgi\\.framework;version="1.2.0") exports(org\\.osgi\\.service\\.cm;version="2.0.0") 

# Final rules. We use these here to run a rule that will force an update to the 
# bundle manifests. The "overwrite" option tells mangen to overwrite the bundle
# with the new version.
#
mangen-rule-final-0=UpdateBundles 
#mangen-rule-final-0=UpdateBundles overwrite 

#
# Details of which mangen reports need to be run
#
mangen-report-0=RuleReport 
#mangen-report-1=BundleReport  show-local-rules show-differences
mangen-report-1=BundleReport  show-local-rules

#-----------------------------------------------------------------------------
#
# Properties below this section should not be changed without a good 
# understanding of mangen's internal operation
#

# Specifies which scanner class to use.
#mangen.scanner.class=org.apache.felix.tool.mangen.BCELScanner
mangen.scanner.class=org.apache.felix.tool.mangen.ASMClassScanner

# Diagnostic tracing
#mangen.trace=on


