You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by da...@apache.org on 2005/06/08 00:32:52 UTC

svn commit: r189461 [3/3] - in /cocoon/whiteboard/osgi: ./ ant/ ant/html_template/ ant/src/ ant/src/org/ ant/src/org/knopflerfish/ ant/src/org/knopflerfish/ant/ ant/src/org/knopflerfish/ant/taskdefs/ ant/src/org/knopflerfish/ant/taskdefs/bundle/ bundles/ bundles/cocoon/ bundles/cocoon/src/ bundles/cocoon_testcase/ bundles/cocoon_testcase/src/ bundles/cocoon_testcase/src/org/ bundles/cocoon_testcase/src/org/apache/ bundles/cocoon_testcase/src/org/apache/cocoon/ bundles/cocoon_testcase/src/org/apache/cocoon/service/ bundles/cocoon_testcase/src/org/apache/cocoon/service/cocoon_testcase/ bundles/cocoon_testcase/src/org/apache/cocoon/service/cocoon_testcase/impl/ bundles/test/ bundles/test/src/ bundles/test/src/org/ bundles/test/src/org/apache/ bundles/test/src/org/apache/cocoon/ bundles/test/src/org/apache/cocoon/service/ bundles/test/src/org/apache/cocoon/service/test/ bundles/test/src/org/apache/cocoon/service/test/impl/ jars-external/ jars-external/junit/ jars/ legal/

Added: cocoon/whiteboard/osgi/ant/src/org/knopflerfish/ant/taskdefs/bundle/EE.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/ant/src/org/knopflerfish/ant/taskdefs/bundle/EE.java?rev=189461&view=auto
==============================================================================
--- cocoon/whiteboard/osgi/ant/src/org/knopflerfish/ant/taskdefs/bundle/EE.java (added)
+++ cocoon/whiteboard/osgi/ant/src/org/knopflerfish/ant/taskdefs/bundle/EE.java Tue Jun  7 15:32:48 2005
@@ -0,0 +1,1152 @@
+/*
+ * Copyright (c) 2003, KNOPFLERFISH project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * - Redistributions of source code must retain the above copyright notice, 
+ *   this list of conditions and the following disclaimer. 
+ * 
+ * - Redistributions in binary form must reproduce the above copyright notice, 
+ *   this list of conditions and the following disclaimer in the documentation 
+ *   and/or other materials provided with the distribution. 
+ * 
+ * - Neither the name of the KNOPFLERFISH project nor the names of its 
+ *   contributors may be used to endorse or promote products derived 
+ *   from this software without specific prior written permission. 
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.knopflerfish.ant.taskdefs.bundle;
+
+import java.util.Hashtable;
+
+/**
+ * Utility class with static methods for checking classes with
+ * the standard OSGi profiles. See r3.book.pdf för details.
+ */
+public class EE {
+  
+  
+
+  final static String[] EE_MINIMUM = {
+    "java.io.BufferedInputStream",
+    "java.io.FilterInputStream",
+    "java.io.InputStream",
+    "java.io.IOException",
+    "java.io.Serializable",
+    "java.io.PrintStream",
+    "java.io.FilterOutputStream",
+    "java.io.OutputStream",
+    "java.io.PrintWriter",
+    "java.io.Writer",
+    "java.io.UnsupportedEncodingException",
+    "java.io.BufferedOutputStream",
+    "java.io.BufferedReader",
+    "java.io.Reader",
+    "java.io.BufferedWriter",
+    "java.io.ByteArrayInputStream",
+    "java.io.ByteArrayOutputStream",
+    "java.io.CharConversionException",
+    "java.io.DataInput",
+    "java.io.DataInputStream",
+    "java.io.DataOutput",
+    "java.io.DataOutputStream",
+    "java.io.EOFException",
+    "java.io.Externalizable",
+    "java.io.ObjectInput",
+    "java.io.ObjectOutput",
+    "java.io.File",
+    "java.io.FileDescriptor",
+    "java.io.SyncFailedException",
+    "java.io.FileInputStream",
+    "java.io.FileNotFoundException",
+    "java.io.FileOutputStream",
+    "java.io.FilePermission",
+    "java.io.FileReader",
+    "java.io.InputStreamReader",
+    "java.io.FileWriter",
+    "java.io.OutputStreamWriter",
+    "java.io.InterruptedIOException",
+    "java.io.InvalidClassException",
+    "java.io.ObjectStreamException",
+    "java.io.InvalidObjectException",
+    "java.io.NotActiveException",
+    "java.io.NotSerializableException",
+    "java.io.ObjectInputStream$GetField",
+    "java.io.ObjectInputStream",
+    "java.io.ObjectStreamConstants",
+    "java.io.StreamCorruptedException",
+    "java.io.ObjectStreamClass",
+    "java.io.OptionalDataException",
+    "java.io.ObjectInputValidation",
+    "java.io.SerializablePermission",
+    "java.io.ObjectStreamField",
+    "java.io.ObjectOutputStream$PutField",
+    "java.io.ObjectOutputStream",
+    "java.io.PushbackInputStream",
+    "java.io.RandomAccessFile",
+    "java.io.StringReader",
+    "java.io.StringWriter",
+    "java.io.UTFDataFormatException",
+    "java.io.WriteAbortedException",
+    "java.lang.ref.PhantomReference",
+    "java.lang.ref.Reference",
+    "java.lang.ref.ReferenceQueue",
+    "java.lang.ref.SoftReference",
+    "java.lang.ref.WeakReference",
+    "java.lang.reflect.Constructor",
+    "java.lang.reflect.AccessibleObject",
+    "java.lang.reflect.Member",
+    "java.lang.reflect.Field",
+    "java.lang.reflect.Method",
+    "java.lang.reflect.InvocationTargetException",
+    "java.lang.reflect.Array",
+    "java.lang.reflect.InvocationHandler",
+    "java.lang.reflect.Modifier",
+    "java.lang.reflect.Proxy",
+    "java.lang.reflect.ReflectPermission",
+    "java.lang.reflect.UndeclaredThrowableException",
+    "java.lang.Object",
+    "java.lang.Exception",
+    "java.lang.Throwable",
+    "java.lang.CloneNotSupportedException",
+    "java.lang.Class",
+    "java.lang.String",
+    "java.lang.Comparable",
+    "java.lang.InterruptedException",
+    "java.lang.ClassNotFoundException",
+    "java.lang.ClassLoader",
+    "java.lang.NoSuchMethodException",
+    "java.lang.SecurityException",
+    "java.lang.RuntimeException",
+    "java.lang.NoSuchFieldException",
+    "java.lang.IllegalAccessException",
+    "java.lang.InstantiationException",
+    "java.lang.ClassFormatError",
+    "java.lang.LinkageError",
+    "java.lang.Error",
+    "java.lang.IllegalArgumentException",
+    "java.lang.StringBuffer",
+    "java.lang.AbstractMethodError",
+    "java.lang.IncompatibleClassChangeError",
+    "java.lang.ArithmeticException",
+    "java.lang.ArrayIndexOutOfBoundsException",
+    "java.lang.IndexOutOfBoundsException",
+    "java.lang.ArrayStoreException",
+    "java.lang.Boolean",
+    "java.lang.Byte",
+    "java.lang.Number",
+    "java.lang.NumberFormatException",
+    "java.lang.Character",
+    "java.lang.ClassCastException",
+    "java.lang.ClassCircularityError",
+    "java.lang.Cloneable",
+    "java.lang.Double",
+    "java.lang.ExceptionInInitializerError",
+    "java.lang.Float",
+    "java.lang.IllegalAccessError",
+    "java.lang.IllegalMonitorStateException",
+    "java.lang.IllegalStateException",
+    "java.lang.IllegalThreadStateException",
+    "java.lang.InstantiationError",
+    "java.lang.Integer",
+    "java.lang.InternalError",
+    "java.lang.VirtualMachineError",
+    "java.lang.Long",
+    "java.lang.Math",
+    "java.lang.NegativeArraySizeException",
+    "java.lang.NoClassDefFoundError",
+    "java.lang.NoSuchFieldError",
+    "java.lang.NoSuchMethodError",
+    "java.lang.NullPointerException",
+    "java.lang.OutOfMemoryError",
+    "java.lang.Process",
+    "java.lang.Runnable",
+    "java.lang.Runtime",
+    "java.lang.RuntimePermission",
+    "java.lang.SecurityManager",
+    "java.lang.Thread",
+    "java.lang.ThreadGroup",
+    "java.lang.Short",
+    "java.lang.System",
+    "java.lang.Void",
+    "java.lang.StackOverflowError",
+    "java.lang.StringIndexOutOfBoundsException",
+    "java.lang.ThreadDeath",
+    "java.lang.UnknownError",
+    "java.lang.UnsatisfiedLinkError",
+    "java.lang.UnsupportedOperationException",
+    "java.lang.VerifyError",
+    "java.net.URL",
+    "java.net.URLStreamHandlerFactory",
+    "java.net.MalformedURLException",
+    "java.net.URLStreamHandler",
+    "java.net.URLConnection",
+    "java.net.InetAddress",
+    "java.net.FileNameMap",
+    "java.net.ContentHandlerFactory",
+    "java.net.UnknownHostException",
+    "java.net.ContentHandler",
+    "java.net.Authenticator",
+    "java.net.PasswordAuthentication",
+    "java.net.BindException",
+    "java.net.SocketException",
+    "java.net.ConnectException",
+    "java.net.DatagramPacket",
+    "java.net.DatagramSocket",
+    "java.net.DatagramSocketImpl",
+    "java.net.SocketOptions",
+    "java.net.HttpURLConnection",
+    "java.net.ProtocolException",
+    "java.net.JarURLConnection",
+    "java.net.MulticastSocket",
+    "java.net.NetPermission",
+    "java.net.NoRouteToHostException",
+    "java.net.ServerSocket",
+    "java.net.Socket",
+    "java.net.SocketImpl",
+    "java.net.SocketImplFactory",
+    "java.net.SocketPermission",
+    "java.net.URLDecoder",
+    "java.net.URLEncoder",
+    "java.net.UnknownServiceException",
+    "java.security.cert.Certificate",
+    "java.security.ProtectionDomain",
+    "java.security.CodeSource",
+    "java.security.PermissionCollection",
+    "java.security.Permission",
+    "java.security.BasicPermission",
+    "java.security.AccessControlContext",
+    "java.security.AccessControlException",
+    "java.security.AccessController",
+    "java.security.PrivilegedAction",
+    "java.security.PrivilegedExceptionAction",
+    "java.security.PrivilegedActionException",
+    "java.security.AllPermission",
+    "java.security.Permissions",
+    "java.security.Policy",
+    "java.security.Principal",
+    "java.security.Security",
+    "java.security.SecurityPermission",
+    "java.security.UnresolvedPermission",
+    "java.util.zip.CRC32",
+    "java.util.zip.Checksum",
+    "java.util.zip.DataFormatException",
+    "java.util.zip.Inflater",
+    "java.util.zip.InflaterInputStream",
+    "java.util.zip.ZipConstants",
+    "java.util.zip.ZipEntry",
+    "java.util.zip.ZipException",
+    "java.util.zip.ZipFile",
+    "java.util.zip.ZipInputStream",
+    "java.util.Comparator",
+    "java.util.Enumeration",
+    "java.util.Properties",
+    "java.util.Hashtable",
+    "java.util.Dictionary",
+    "java.util.Map$Entry",
+    "java.util.Map",
+    "java.util.Set",
+    "java.util.Collection",
+    "java.util.Iterator",
+    "java.util.AbstractCollection",
+    "java.util.AbstractList",
+    "java.util.List",
+    "java.util.ListIterator",
+    "java.util.AbstractMap",
+    "java.util.AbstractSequentialList",
+    "java.util.AbstractSet",
+    "java.util.ArrayList",
+    "java.util.Arrays",
+    "java.util.Calendar",
+    "java.util.TimeZone",
+    "java.util.Date",
+    "java.util.Collections",
+    "java.util.Random",
+    "java.util.SortedMap",
+    "java.util.SortedSet",
+    "java.util.ConcurrentModificationException",
+    "java.util.EventListener",
+    "java.util.EventObject",
+    "java.util.GregorianCalendar",
+    "java.util.ListResourceBundle",
+    "java.util.ResourceBundle",
+    "java.util.MissingResourceException",
+    "java.util.Locale",
+    "java.util.NoSuchElementException",
+    "java.util.PropertyPermission",
+    "java.util.PropertyResourceBundle",
+    "java.util.SimpleTimeZone",
+    "java.util.StringTokenizer",
+    "java.util.Vector",
+    "java.util.WeakHashMap",
+  };
+
+  final static String[] EE_FOUNDATION = {
+    "java.io.BufferedInputStream",
+    "java.io.FilterInputStream",
+    "java.io.InputStream",
+    "java.io.IOException",
+    "java.io.Serializable",
+    "java.io.PrintStream",
+    "java.io.FilterOutputStream",
+    "java.io.OutputStream",
+    "java.io.PrintWriter",
+    "java.io.Writer",
+    "java.io.UnsupportedEncodingException",
+    "java.io.ObjectStreamException",
+    "java.io.BufferedOutputStream",
+    "java.io.BufferedReader",
+    "java.io.Reader",
+    "java.io.BufferedWriter",
+    "java.io.ByteArrayInputStream",
+    "java.io.ByteArrayOutputStream",
+    "java.io.CharArrayReader",
+    "java.io.CharArrayWriter",
+    "java.io.CharConversionException",
+    "java.io.DataInput",
+    "java.io.DataInputStream",
+    "java.io.DataOutput",
+    "java.io.DataOutputStream",
+    "java.io.EOFException",
+    "java.io.Externalizable",
+    "java.io.ObjectInput",
+    "java.io.ObjectOutput",
+    "java.io.File",
+    "java.io.FilenameFilter",
+    "java.io.FileFilter",
+    "java.io.FileDescriptor",
+    "java.io.SyncFailedException",
+    "java.io.FileInputStream",
+    "java.io.FileNotFoundException",
+    "java.io.FileOutputStream",
+    "java.io.FilePermission",
+    "java.io.FileReader",
+    "java.io.InputStreamReader",
+    "java.io.FileWriter",
+    "java.io.OutputStreamWriter",
+    "java.io.FilterReader",
+    "java.io.FilterWriter",
+    "java.io.InterruptedIOException",
+    "java.io.InvalidClassException",
+    "java.io.InvalidObjectException",
+    "java.io.LineNumberReader",
+    "java.io.NotActiveException",
+    "java.io.NotSerializableException",
+    "java.io.ObjectInputStream$GetField",
+    "java.io.ObjectInputStream",
+    "java.io.ObjectStreamConstants",
+    "java.io.StreamCorruptedException",
+    "java.io.ObjectStreamClass",
+    "java.io.OptionalDataException",
+    "java.io.ObjectInputValidation",
+    "java.io.SerializablePermission",
+    "java.io.ObjectStreamField",
+    "java.io.ObjectOutputStream",
+    "java.io.ObjectOutputStream$PutField",
+    "java.io.PipedInputStream",
+    "java.io.PipedOutputStream",
+    "java.io.PipedReader",
+    "java.io.PipedWriter",
+    "java.io.PushbackInputStream",
+    "java.io.PushbackReader",
+    "java.io.RandomAccessFile",
+    "java.io.SequenceInputStream",
+    "java.io.StreamTokenizer",
+    "java.io.StringReader",
+    "java.io.StringWriter",
+    "java.io.UTFDataFormatException",
+    "java.io.WriteAbortedException",
+    "java.lang.ref.PhantomReference",
+    "java.lang.ref.Reference",
+    "java.lang.ref.ReferenceQueue",
+    "java.lang.ref.SoftReference",
+    "java.lang.ref.WeakReference",
+    "java.lang.reflect.Constructor",
+    "java.lang.reflect.AccessibleObject",
+    "java.lang.reflect.Member",
+    "java.lang.reflect.Field",
+    "java.lang.reflect.Method",
+    "java.lang.reflect.InvocationTargetException",
+    "java.lang.reflect.Array",
+    "java.lang.reflect.InvocationHandler",
+    "java.lang.reflect.Modifier",
+    "java.lang.reflect.Proxy",
+    "java.lang.reflect.ReflectPermission",
+    "java.lang.reflect.UndeclaredThrowableException",
+    "java.lang.Object",
+    "java.lang.Exception",
+    "java.lang.Throwable",
+    "java.lang.CloneNotSupportedException",
+    "java.lang.Class",
+    "java.lang.String",
+    "java.lang.Comparable",
+    "java.lang.InterruptedException",
+    "java.lang.ClassNotFoundException",
+    "java.lang.ClassLoader",
+    "java.lang.NoSuchMethodException",
+    "java.lang.SecurityException",
+    "java.lang.RuntimeException",
+    "java.lang.NoSuchFieldException",
+    "java.lang.IllegalAccessException",
+    "java.lang.InstantiationException",
+    "java.lang.Package",
+    "java.lang.StringBuffer",
+    "java.lang.Cloneable",
+    "java.lang.ClassFormatError",
+    "java.lang.LinkageError",
+    "java.lang.Error",
+    "java.lang.IllegalArgumentException",
+    "java.lang.NumberFormatException",
+    "java.lang.AbstractMethodError",
+    "java.lang.IncompatibleClassChangeError",
+    "java.lang.ArithmeticException",
+    "java.lang.ArrayIndexOutOfBoundsException",
+    "java.lang.IndexOutOfBoundsException",
+    "java.lang.ArrayStoreException",
+    "java.lang.Boolean",
+    "java.lang.Byte",
+    "java.lang.Number",
+    "java.lang.Character$Subset",
+    "java.lang.Character$UnicodeBlock",
+    "java.lang.Character",
+    "java.lang.ClassCastException",
+    "java.lang.ClassCircularityError",
+    "java.lang.Compiler",
+    "java.lang.Double",
+    "java.lang.ExceptionInInitializerError",
+    "java.lang.Float",
+    "java.lang.IllegalAccessError",
+    "java.lang.IllegalMonitorStateException",
+    "java.lang.IllegalStateException",
+    "java.lang.IllegalThreadStateException",
+    "java.lang.InheritableThreadLocal",
+    "java.lang.ThreadLocal",
+    "java.lang.InstantiationError",
+    "java.lang.Integer",
+    "java.lang.InternalError",
+    "java.lang.VirtualMachineError",
+    "java.lang.Long",
+    "java.lang.Math",
+    "java.lang.NegativeArraySizeException",
+    "java.lang.NoClassDefFoundError",
+    "java.lang.Process",
+    "java.lang.NoSuchFieldError",
+    "java.lang.NoSuchMethodError",
+    "java.lang.NullPointerException",
+    "java.lang.OutOfMemoryError",
+    "java.lang.Runnable",
+    "java.lang.Runtime",
+    "java.lang.Thread",
+    "java.lang.ThreadGroup",
+    "java.lang.RuntimePermission",
+    "java.lang.SecurityManager",
+    "java.lang.Short",
+    "java.lang.StackOverflowError",
+    "java.lang.StrictMath",
+    "java.lang.StringIndexOutOfBoundsException",
+    "java.lang.System",
+    "java.lang.ThreadDeath",
+    "java.lang.UnknownError",
+    "java.lang.UnsatisfiedLinkError",
+    "java.lang.UnsupportedClassVersionError",
+    "java.lang.UnsupportedOperationException",
+    "java.lang.VerifyError",
+    "java.lang.Void",
+    "java.math.BigInteger",
+    "java.net.URL",
+    "java.net.URLStreamHandlerFactory",
+    "java.net.MalformedURLException",
+    "java.net.URLStreamHandler",
+    "java.net.URLConnection",
+    "java.net.InetAddress",
+    "java.net.FileNameMap",
+    "java.net.ContentHandlerFactory",
+    "java.net.UnknownHostException",
+    "java.net.ContentHandler",
+    "java.net.Authenticator",
+    "java.net.PasswordAuthentication",
+    "java.net.BindException",
+    "java.net.SocketException",
+    "java.net.ConnectException",
+    "java.net.DatagramPacket",
+    "java.net.DatagramSocket",
+    "java.net.DatagramSocketImplFactory",
+    "java.net.DatagramSocketImpl",
+    "java.net.SocketOptions",
+    "java.net.HttpURLConnection",
+    "java.net.ProtocolException",
+    "java.net.JarURLConnection",
+    "java.net.MulticastSocket",
+    "java.net.NetPermission",
+    "java.net.NoRouteToHostException",
+    "java.net.ServerSocket",
+    "java.net.Socket",
+    "java.net.SocketImpl",
+    "java.net.SocketImplFactory",
+    "java.net.SocketPermission",
+    "java.net.URLClassLoader",
+    "java.net.URLDecoder",
+    "java.net.URLEncoder",
+    "java.net.UnknownServiceException",
+    "java.security.acl.Acl",
+    "java.security.acl.Owner",
+    "java.security.acl.AclEntry",
+    "java.security.acl.NotOwnerException",
+    "java.security.acl.Permission",
+    "java.security.acl.LastOwnerException",
+    "java.security.acl.AclNotFoundException",
+    "java.security.acl.Group",
+    "java.security.cert.Certificate$CertificateRep",
+    "java.security.cert.Certificate",
+    "java.security.cert.CertificateEncodingException",
+    "java.security.cert.CertificateException",
+    "java.security.cert.CRL",
+    "java.security.cert.CRLException",
+    "java.security.cert.CertificateExpiredException",
+    "java.security.cert.CertificateFactory",
+    "java.security.cert.CertificateFactorySpi",
+    "java.security.cert.CertificateNotYetValidException",
+    "java.security.cert.CertificateParsingException",
+    "java.security.cert.X509CRL",
+    "java.security.cert.X509Extension",
+    "java.security.cert.X509CRLEntry",
+    "java.security.cert.X509Certificate",
+    "java.security.interfaces.DSAKey",
+    "java.security.interfaces.DSAParams",
+    "java.security.interfaces.DSAKeyPairGenerator",
+    "java.security.interfaces.DSAPrivateKey",
+    "java.security.interfaces.DSAPublicKey",
+    "java.security.interfaces.RSAKey",
+    "java.security.interfaces.RSAPrivateCrtKey",
+    "java.security.interfaces.RSAPrivateKey",
+    "java.security.interfaces.RSAPublicKey",
+    "java.security.spec.AlgorithmParameterSpec",
+    "java.security.spec.InvalidParameterSpecException",
+    "java.security.spec.KeySpec",
+    "java.security.spec.InvalidKeySpecException",
+    "java.security.spec.DSAParameterSpec",
+    "java.security.spec.DSAPrivateKeySpec",
+    "java.security.spec.DSAPublicKeySpec",
+    "java.security.spec.EncodedKeySpec",
+    "java.security.spec.PKCS8EncodedKeySpec",
+    "java.security.spec.RSAKeyGenParameterSpec",
+    "java.security.spec.RSAPrivateCrtKeySpec",
+    "java.security.spec.RSAPrivateKeySpec",
+    "java.security.spec.RSAPublicKeySpec",
+    "java.security.spec.X509EncodedKeySpec",
+    "java.security.ProtectionDomain",
+    "java.security.CodeSource",
+    "java.security.PermissionCollection",
+    "java.security.Permission",
+    "java.security.Guard",
+    "java.security.GeneralSecurityException",
+    "java.security.PublicKey",
+    "java.security.Key",
+    "java.security.NoSuchAlgorithmException",
+    "java.security.InvalidKeyException",
+    "java.security.KeyException",
+    "java.security.NoSuchProviderException",
+    "java.security.SignatureException",
+    "java.security.BasicPermission",
+    "java.security.SecureClassLoader",
+    "java.security.AccessControlContext",
+    "java.security.DomainCombiner",
+    "java.security.AccessControlException",
+    "java.security.AccessController",
+    "java.security.PrivilegedAction",
+    "java.security.PrivilegedExceptionAction",
+    "java.security.PrivilegedActionException",
+    "java.security.AlgorithmParameterGenerator",
+    "java.security.AlgorithmParameterGeneratorSpi",
+    "java.security.AlgorithmParameters",
+    "java.security.AlgorithmParametersSpi",
+    "java.security.Provider",
+    "java.security.SecureRandom",
+    "java.security.SecureRandomSpi",
+    "java.security.InvalidAlgorithmParameterException",
+    "java.security.AllPermission",
+    "java.security.Certificate",
+    "java.security.Principal",
+    "java.security.DigestException",
+    "java.security.DigestInputStream",
+    "java.security.MessageDigest",
+    "java.security.MessageDigestSpi",
+    "java.security.DigestOutputStream",
+    "java.security.GuardedObject",
+    "java.security.Identity",
+    "java.security.IdentityScope",
+    "java.security.KeyManagementException",
+    "java.security.InvalidParameterException",
+    "java.security.KeyFactory",
+    "java.security.KeyFactorySpi",
+    "java.security.PrivateKey",
+    "java.security.KeyPair",
+    "java.security.KeyPairGenerator",
+    "java.security.KeyPairGeneratorSpi",
+    "java.security.KeyStore",
+    "java.security.KeyStoreSpi",
+    "java.security.KeyStoreException",
+    "java.security.UnrecoverableKeyException",
+    "java.security.Permissions",
+    "java.security.Policy",
+    "java.security.ProviderException",
+    "java.security.Security",
+    "java.security.SecurityPermission",
+    "java.security.Signature",
+    "java.security.SignatureSpi",
+    "java.security.SignedObject",
+    "java.security.Signer",
+    "java.security.UnresolvedPermission",
+    "java.text.resources.BreakIteratorRules",
+    "java.text.resources.BreakIteratorRules_th",
+    "java.text.Annotation",
+    "java.text.AttributedCharacterIterator$Attribute",
+    "java.text.AttributedCharacterIterator",
+    "java.text.CharacterIterator",
+    "java.text.AttributedString",
+    "java.text.BreakIterator",
+    "java.text.ChoiceFormat",
+    "java.text.NumberFormat",
+    "java.text.Format",
+    "java.text.FieldPosition",
+    "java.text.ParsePosition",
+    "java.text.ParseException",
+    "java.text.CollationElementIterator",
+    "java.text.RuleBasedCollator",
+    "java.text.Collator",
+    "java.text.CollationKey",
+    "java.text.DateFormat",
+    "java.text.DateFormatSymbols",
+    "java.text.DecimalFormat",
+    "java.text.DecimalFormatSymbols",
+    "java.text.MessageFormat",
+    "java.text.SimpleDateFormat",
+    "java.text.StringCharacterIterator",
+    "java.util.jar.Attributes$Name",
+    "java.util.jar.Attributes",
+    "java.util.jar.JarEntry",
+    "java.util.jar.Manifest",
+    "java.util.jar.JarFile",
+    "java.util.jar.JarException",
+    "java.util.jar.JarInputStream",
+    "java.util.jar.JarOutputStream",
+    "java.util.zip.ZipEntry",
+    "java.util.zip.ZipConstants",
+    "java.util.zip.ZipFile",
+    "java.util.zip.ZipException",
+    "java.util.zip.ZipInputStream",
+    "java.util.zip.InflaterInputStream",
+    "java.util.zip.Inflater",
+    "java.util.zip.DataFormatException",
+    "java.util.zip.ZipOutputStream",
+    "java.util.zip.DeflaterOutputStream",
+    "java.util.zip.Deflater",
+    "java.util.zip.Adler32",
+    "java.util.zip.Checksum",
+    "java.util.zip.CRC32",
+    "java.util.zip.CheckedInputStream",
+    "java.util.zip.CheckedOutputStream",
+    "java.util.zip.GZIPInputStream",
+    "java.util.zip.GZIPOutputStream",
+    "java.util.Locale",
+    "java.util.Comparator",
+    "java.util.Enumeration",
+    "java.util.MissingResourceException",
+    "java.util.Properties",
+    "java.util.Hashtable",
+    "java.util.Dictionary",
+    "java.util.Map$Entry",
+    "java.util.Map",
+    "java.util.Set",
+    "java.util.Collection",
+    "java.util.Iterator",
+    "java.util.Random",
+    "java.util.Date",
+    "java.util.Calendar",
+    "java.util.TimeZone",
+    "java.util.ListResourceBundle",
+    "java.util.ResourceBundle",
+    "java.util.AbstractCollection",
+    "java.util.AbstractList",
+    "java.util.List",
+    "java.util.ListIterator",
+    "java.util.AbstractMap",
+    "java.util.AbstractSequentialList",
+    "java.util.AbstractSet",
+    "java.util.ArrayList",
+    "java.util.Arrays",
+    "java.util.BitSet",
+    "java.util.Collections",
+    "java.util.SortedMap",
+    "java.util.SortedSet",
+    "java.util.ConcurrentModificationException",
+    "java.util.EmptyStackException",
+    "java.util.EventListener",
+    "java.util.EventObject",
+    "java.util.GregorianCalendar",
+    "java.util.HashMap",
+    "java.util.HashSet",
+    "java.util.LinkedList",
+    "java.util.NoSuchElementException",
+    "java.util.Observable",
+    "java.util.Observer",
+    "java.util.PropertyPermission",
+    "java.util.PropertyResourceBundle",
+    "java.util.SimpleTimeZone",
+    "java.util.Stack",
+    "java.util.Vector",
+    "java.util.StringTokenizer",
+    "java.util.Timer",
+    "java.util.TimerTask",
+    "java.util.TooManyListenersException",
+    "java.util.TreeMap",
+    "java.util.TreeSet",
+    "java.util.WeakHashMap",
+    "javax.microedition.io.Connection",
+    "javax.microedition.io.ConnectionNotFoundException",
+    "javax.microedition.io.Connector",
+    "javax.microedition.io.ContentConnection",
+    "javax.microedition.io.StreamConnection",
+    "javax.microedition.io.InputConnection",
+    "javax.microedition.io.OutputConnection",
+    "javax.microedition.io.Datagram",
+    "javax.microedition.io.DatagramConnection",
+    "javax.microedition.io.HttpConnection",
+    "javax.microedition.io.StreamConnectionNotifier",
+  };
+
+
+  final static String[] EE_SMF = {
+    "java.io.BufferedInputStream",
+    "java.io.BufferedOutputStream",
+    "java.io.BufferedReader",
+    "java.io.BufferedWriter$1",
+    "java.io.BufferedWriter",
+    "java.io.ByteArrayInputStream",
+    "java.io.ByteArrayOutputStream",
+    "java.io.CharConversionException",
+    "java.io.DataInput",
+    "java.io.DataInputStream",
+    "java.io.DataOutput",
+    "java.io.DataOutputStream",
+    "java.io.EmulatedFields$ObjectSlot",
+    "java.io.EmulatedFields",
+    "java.io.EmulatedFieldsForDumping",
+    "java.io.EmulatedFieldsForLoading",
+    "java.io.EOFException",
+    "java.io.Externalizable",
+    "java.io.File$1",
+    "java.io.File$2",
+    "java.io.File",
+    "java.io.FileDescriptor",
+    "java.io.FileInputStream",
+    "java.io.FileNotFoundException",
+    "java.io.FileOutputStream",
+    "java.io.FilePermission$1",
+    "java.io.FilePermission",
+    "java.io.FilePermissionCollection",
+    "java.io.FileReader",
+    "java.io.FileWriter",
+    "java.io.FilterInputStream",
+    "java.io.FilterOutputStream",
+    "java.io.InputStream",
+    "java.io.InputStreamReader$1",
+    "java.io.InputStreamReader",
+    "java.io.InterruptedIOException",
+    "java.io.InvalidClassException",
+    "java.io.InvalidObjectException",
+    "java.io.IOException",
+    "java.io.NotActiveException",
+    "java.io.NotSerializableException",
+    "java.io.ObjectInput",
+    "java.io.ObjectInputStream$1",
+    "java.io.ObjectInputStream$2",
+    "java.io.ObjectInputStream$GetField",
+    "java.io.ObjectInputStream$InputValidationDesc",
+    "java.io.ObjectInputStream",
+    "java.io.ObjectInputValidation",
+    "java.io.ObjectOutput",
+    "java.io.ObjectOutputStream$1",
+    "java.io.ObjectOutputStream$2",
+    "java.io.ObjectOutputStream$PutField",
+    "java.io.ObjectOutputStream",
+    "java.io.ObjectStreamClass$1",
+    "java.io.ObjectStreamClass$2",
+    "java.io.ObjectStreamClass$3",
+    "java.io.ObjectStreamClass$4",
+    "java.io.ObjectStreamClass$5",
+    "java.io.ObjectStreamClass$6",
+    "java.io.ObjectStreamClass",
+    "java.io.ObjectStreamConstants",
+    "java.io.ObjectStreamException",
+    "java.io.ObjectStreamField$1",
+    "java.io.ObjectStreamField",
+    "java.io.OptionalDataException",
+    "java.io.OutputStream",
+    "java.io.OutputStreamWriter$1",
+    "java.io.OutputStreamWriter",
+    "java.io.PrintStream$1",
+    "java.io.PrintStream",
+    "java.io.PrintWriter$1",
+    "java.io.PrintWriter",
+    "java.io.PushbackInputStream",
+    "java.io.RandomAccessFile",
+    "java.io.Reader",
+    "java.io.Serializable",
+    "java.io.SerializablePermission",
+    "java.io.StreamCorruptedException",
+    "java.io.StringReader",
+    "java.io.StringWriter",
+    "java.io.SyncFailedException",
+    "java.io.UnsupportedEncodingException",
+    "java.io.UTFDataFormatException",
+    "java.io.WriteAbortedException",
+    "java.io.Writer",
+    "java.lang.AbstractMethodError",
+    "java.lang.ArithmeticException",
+    "java.lang.ArrayIndexOutOfBoundsException",
+    "java.lang.ArrayStoreException",
+    "java.lang.Boolean",
+    "java.lang.Byte",
+    "java.lang.Character",
+    "java.lang.Class",
+    "java.lang.ClassCastException",
+    "java.lang.ClassCircularityError",
+    "java.lang.ClassFormatError",
+    "java.lang.ClassLoader$1",
+    "java.lang.ClassLoader$2",
+    "java.lang.ClassLoader",
+    "java.lang.ClassNotFoundException",
+    "java.lang.Cloneable",
+    "java.lang.CloneNotSupportedException",
+    "java.lang.Comparable",
+    "java.lang.Double",
+    "java.lang.Error",
+    "java.lang.Exception",
+    "java.lang.ExceptionInInitializerError",
+    "java.lang.Float",
+    "java.lang.IllegalAccessError",
+    "java.lang.IllegalAccessException",
+    "java.lang.IllegalArgumentException",
+    "java.lang.IllegalMonitorStateException",
+    "java.lang.IllegalStateException",
+    "java.lang.IllegalThreadStateException",
+    "java.lang.IncompatibleClassChangeError",
+    "java.lang.IndexOutOfBoundsException",
+    "java.lang.InstantiationError",
+    "java.lang.InstantiationException",
+    "java.lang.Integer",
+    "java.lang.InternalError",
+    "java.lang.InterruptedException",
+    "java.lang.LinkageError",
+    "java.lang.Long",
+    "java.lang.Math",
+    "java.lang.NegativeArraySizeException",
+    "java.lang.NoClassDefFoundError",
+    "java.lang.NoSuchFieldError",
+    "java.lang.NoSuchFieldException",
+    "java.lang.NoSuchMethodError",
+    "java.lang.NoSuchMethodException",
+    "java.lang.NullPointerException",
+    "java.lang.Number",
+    "java.lang.NumberFormatException",
+    "java.lang.Object",
+    "java.lang.OutOfMemoryError",
+    "java.lang.Process",
+    "java.lang.ref.PhantomReference",
+    "java.lang.ref.Reference",
+    "java.lang.ref.ReferenceQueue",
+    "java.lang.ref.SoftReference",
+    "java.lang.ref.WeakReference",
+    "java.lang.reflect.AccessibleObject",
+    "java.lang.reflect.Array",
+    "java.lang.reflect.Constructor",
+    "java.lang.reflect.Field",
+    "java.lang.reflect.InvocationHandler",
+    "java.lang.reflect.InvocationTargetException",
+    "java.lang.reflect.Member",
+    "java.lang.reflect.Method",
+    "java.lang.reflect.Modifier",
+    "java.lang.reflect.Proxy",
+    "java.lang.reflect.ReflectPermission",
+    "java.lang.reflect.UndeclaredThrowableException",
+    "java.lang.Runnable",
+    "java.lang.Runtime",
+    "java.lang.RuntimeException",
+    "java.lang.RuntimePermission",
+    "java.lang.SecurityException",
+    "java.lang.SecurityManager$1",
+    "java.lang.SecurityManager$2",
+    "java.lang.SecurityManager",
+    "java.lang.Short",
+    "java.lang.StackOverflowError",
+    "java.lang.StackTraceElement",
+    "java.lang.String$CaseInsensitiveComparator",
+    "java.lang.String",
+    "java.lang.StringBuffer",
+    "java.lang.StringIndexOutOfBoundsException",
+    "java.lang.System",
+    "java.lang.Thread",
+    "java.lang.ThreadDeath",
+    "java.lang.ThreadGroup",
+    "java.lang.Throwable",
+    "java.lang.UnknownError",
+    "java.lang.UnsatisfiedLinkError",
+    "java.lang.UnsupportedOperationException",
+    "java.lang.VerifyError",
+    "java.lang.VirtualMachineError",
+    "java.lang.Void",
+    "java.net.Authenticator",
+    "java.net.BindException",
+    "java.net.ConnectException",
+    "java.net.ContentHandler",
+    "java.net.ContentHandlerFactory",
+    "java.net.DatagramPacket",
+    "java.net.DatagramSocket$1",
+    "java.net.DatagramSocket",
+    "java.net.DatagramSocketImpl",
+    "java.net.FileNameMap",
+    "java.net.HttpURLConnection",
+    "java.net.InetAddress$1",
+    "java.net.InetAddress$Cache",
+    "java.net.InetAddress$CacheElement",
+    "java.net.InetAddress",
+    "java.net.JarURLConnection",
+    "java.net.MalformedURLException",
+    "java.net.MulticastSocket",
+    "java.net.NetPermission",
+    "java.net.NoRouteToHostException",
+    "java.net.PasswordAuthentication",
+    "java.net.PlainDatagramSocketImpl$1",
+    "java.net.PlainDatagramSocketImpl",
+    "java.net.PlainSocketImpl$1",
+    "java.net.PlainSocketImpl$2",
+    "java.net.PlainSocketImpl$3",
+    "java.net.PlainSocketImpl",
+    "java.net.ProtocolException",
+    "java.net.ServerSocket",
+    "java.net.Socket",
+    "java.net.SocketException",
+    "java.net.SocketImpl",
+    "java.net.SocketImplFactory",
+    "java.net.SocketInputStream",
+    "java.net.SocketOptions",
+    "java.net.SocketOutputStream",
+    "java.net.SocketPermission",
+    "java.net.SocketPermissionCollection",
+    "java.net.Socks4Message",
+    "java.net.UnknownHostException",
+    "java.net.UnknownServiceException",
+    "java.net.URL$1",
+    "java.net.URL",
+    "java.net.URLConnection$1",
+    "java.net.URLConnection$2",
+    "java.net.URLConnection$DefaultContentHandler",
+    "java.net.URLConnection",
+    "java.net.URLDecoder",
+    "java.net.URLEncoder",
+    "java.net.URLStreamHandler",
+    "java.net.URLStreamHandlerFactory",
+    "java.security.AccessControlContext",
+    "java.security.AccessControlException",
+    "java.security.AccessController",
+    "java.security.AllPermission",
+    "java.security.AllPermissionCollection",
+    "java.security.BasicPermission",
+    "java.security.BasicPermissionCollection",
+    "java.security.cert.Certificate",
+    "java.security.CodeSource",
+    "java.security.Permission",
+    "java.security.PermissionCollection$1",
+    "java.security.PermissionCollection",
+    "java.security.Permissions$PermissionsEnumeration",
+    "java.security.Permissions",
+    "java.security.PermissionsHash",
+    "java.security.Policy",
+    "java.security.Principal",
+    "java.security.PrivilegedAction",
+    "java.security.PrivilegedActionException",
+    "java.security.PrivilegedExceptionAction",
+    "java.security.ProtectionDomain$1",
+    "java.security.ProtectionDomain",
+    "java.security.Security",
+    "java.security.SecurityPermission",
+    "java.security.UnresolvedPermission",
+    "java.security.UnresolvedPermissionCollection$1",
+    "java.security.UnresolvedPermissionCollection",
+    "java.util.AbstractCollection",
+    "java.util.AbstractList$FullListIterator",
+    "java.util.AbstractList$SimpleListIterator",
+    "java.util.AbstractList$SubList$SubListIterator",
+    "java.util.AbstractList$SubList",
+    "java.util.AbstractList",
+    "java.util.AbstractMap$1",
+    "java.util.AbstractMap$2",
+    "java.util.AbstractMap$3",
+    "java.util.AbstractMap$4",
+    "java.util.AbstractMap",
+    "java.util.AbstractSequentialList",
+    "java.util.AbstractSet",
+    "java.util.ArrayList",
+    "java.util.Arrays$ArrayList",
+    "java.util.Arrays",
+    "java.util.Calendar",
+    "java.util.Collection",
+    "java.util.Collections$1",
+    "java.util.Collections$2",
+    "java.util.Collections$3",
+    "java.util.Collections$4",
+    "java.util.Collections$5",
+    "java.util.Collections$6",
+    "java.util.Collections$7",
+    "java.util.Collections$8",
+    "java.util.Collections$9",
+    "java.util.Collections$CopiesList",
+    "java.util.Collections$EmptyList",
+    "java.util.Collections$EmptyMap",
+    "java.util.Collections$EmptySet",
+    "java.util.Collections$ReverseComparator",
+    "java.util.Collections$SingletonList",
+    "java.util.Collections$SingletonMap",
+    "java.util.Collections$SingletonSet",
+    "java.util.Collections$SynchronizedCollection",
+    "java.util.Collections$SynchronizedList",
+    "java.util.Collections$SynchronizedMap",
+    "java.util.Collections$SynchronizedSet",
+    "java.util.Collections$SynchronizedSortedMap",
+    "java.util.Collections$SynchronizedSortedSet",
+    "java.util.Collections$UnmodifiableCollection",
+    "java.util.Collections$UnmodifiableList",
+    "java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry",
+    "java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet",
+    "java.util.Collections$UnmodifiableMap",
+    "java.util.Collections$UnmodifiableSet",
+    "java.util.Collections$UnmodifiableSortedMap",
+    "java.util.Collections$UnmodifiableSortedSet",
+    "java.util.Collections",
+    "java.util.Comparator",
+    "java.util.ConcurrentModificationException",
+    "java.util.Date",
+    "java.util.Dictionary",
+    "java.util.Enumeration",
+    "java.util.EventListener",
+    "java.util.EventObject",
+    "java.util.GregorianCalendar",
+    "java.util.HashMapEntry",
+    "java.util.Hashtable$1",
+    "java.util.Hashtable$2",
+    "java.util.Hashtable$3",
+    "java.util.Hashtable$4",
+    "java.util.Hashtable$5",
+    "java.util.Hashtable$6",
+    "java.util.Hashtable$EmptyEnumerator",
+    "java.util.Hashtable$HashEnumerator",
+    "java.util.Hashtable$HashIterator",
+    "java.util.Hashtable",
+    "java.util.Iterator",
+    "java.util.List",
+    "java.util.ListIterator",
+    "java.util.ListResourceBundle$1",
+    "java.util.ListResourceBundle",
+    "java.util.Locale$1",
+    "java.util.Locale",
+    "java.util.Map$Entry",
+    "java.util.Map",
+    "java.util.MapEntry$Type",
+    "java.util.MapEntry",
+    "java.util.MissingResourceException",
+    "java.util.NoSuchElementException",
+    "java.util.Properties$1",
+    "java.util.Properties",
+    "java.util.PropertyPermission",
+    "java.util.PropertyPermissionCollection",
+    "java.util.PropertyResourceBundle$1",
+    "java.util.PropertyResourceBundle",
+    "java.util.Random",
+    "java.util.ResourceBundle$1",
+    "java.util.ResourceBundle$MissingBundle",
+    "java.util.ResourceBundle",
+    "java.util.Set",
+    "java.util.SimpleTimeZone",
+    "java.util.SortedMap",
+    "java.util.SortedSet",
+    "java.util.StringTokenizer",
+    "java.util.TimeZone$1",
+    "java.util.TimeZone",
+    "java.util.TimeZones",
+    "java.util.Vector$1",
+    "java.util.Vector",
+    "java.util.WeakHashMap$1",
+    "java.util.WeakHashMap$HashIterator",
+    "java.util.WeakHashMap$KeyEntry",
+    "java.util.WeakHashMap$WeakHashMapEntry",
+    "java.util.WeakHashMap",
+    "java.util.zip.Checksum",
+    "java.util.zip.CRC32",
+    "java.util.zip.DataFormatException",
+    "java.util.zip.Inflater",
+    "java.util.zip.InflaterInputStream",
+    "java.util.zip.ZipConstants",
+    "java.util.zip.ZipEntry",
+    "java.util.zip.ZipException",
+    "java.util.zip.ZipFile$ZFEnum",
+    "java.util.zip.ZipFile",
+    "java.util.zip.ZipInputStream",
+  };
+
+  static Hashtable foundationMap = new Hashtable();
+  static Hashtable minimumMap    = new Hashtable();
+  static Hashtable smfMap        = new Hashtable();
+
+
+  /**
+   * Check if a class is allowed by the "Foundation" profile.
+   */
+  public static boolean isFoundation(String className) {
+    return foundationMap.containsKey(className);
+  }
+
+  /**
+   * Check if a class is allowed by the "Mimimum" profile.
+   */
+  public static boolean isMinimum(String className) {
+    return minimumMap.containsKey(className);
+  }
+
+  /**
+   * Check if a class is allowed by the "Mimimum" profile.
+   */
+  public static boolean isSMF(String className) {
+    return smfMap.containsKey(className);
+  }
+
+
+  static {
+    for(int i = 0; i < EE_FOUNDATION.length; i++) {
+      foundationMap.put(EE_FOUNDATION[i], "");
+    }
+
+    for(int i = 0; i < EE_MINIMUM.length; i++) {
+      minimumMap.put(EE_MINIMUM[i], "");
+    }
+    for(int i = 0; i < EE_MINIMUM.length; i++) {
+      smfMap.put(EE_MINIMUM[i], "");
+    }
+  }
+
+}

Added: cocoon/whiteboard/osgi/ant/src/org/knopflerfish/ant/taskdefs/bundle/OBRExtractorTask.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/ant/src/org/knopflerfish/ant/taskdefs/bundle/OBRExtractorTask.java?rev=189461&view=auto
==============================================================================
--- cocoon/whiteboard/osgi/ant/src/org/knopflerfish/ant/taskdefs/bundle/OBRExtractorTask.java (added)
+++ cocoon/whiteboard/osgi/ant/src/org/knopflerfish/ant/taskdefs/bundle/OBRExtractorTask.java Tue Jun  7 15:32:48 2005
@@ -0,0 +1,390 @@
+/*
+ * Copyright (c) 2003, KNOPFLERFISH project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * - Redistributions of source code must retain the above copyright notice, 
+ *   this list of conditions and the following disclaimer. 
+ * 
+ * - Redistributions in binary form must reproduce the above copyright notice, 
+ *   this list of conditions and the following disclaimer in the documentation 
+ *   and/or other materials provided with the distribution. 
+ * 
+ * - Neither the name of the KNOPFLERFISH project nor the names of its 
+ *   contributors may be used to endorse or promote products derived 
+ *   from this software without specific prior written permission. 
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.knopflerfish.ant.taskdefs.bundle;
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.DirectoryScanner;
+import org.apache.tools.ant.types.FileSet;
+import org.apache.tools.ant.util.FileUtils;
+import org.apache.tools.ant.util.StringUtils;
+import org.apache.tools.ant.util.JavaEnvUtils;
+
+import org.apache.bcel.Constants;
+import org.apache.bcel.classfile.*;
+import org.apache.bcel.generic.Type;
+import org.apache.bcel.generic.BasicType;
+
+import java.io.*;
+import java.util.*;
+import java.util.jar.*;
+import java.util.zip.*;
+
+/**
+ * <p>
+ * Task that analyzes a set of bundle jar files and builds OBR XML 
+ * documentation from these bundles. 
+ * </p>
+ *
+ * <p>
+ * Bundle jar files files are analyzed using the static manifest attributes.
+ * </p>
+ *
+ * <h3>Parameters</h3>
+ *
+ * <table border=>
+ *  <tr>
+ *   <td valign=top><b>Attribute</b></td>
+ *   <td valign=top><b>Description</b></td>
+ *   <td valign=top><b>Required</b></td>
+ *  </tr>
+ *
+ *  <tr>
+ *   <td valign=top>baseDir</td>
+ *   <td valign=top>
+ *    Base directory for scanning for jar files.
+ *   </td>
+ *   <td valign=top>No.<br> Default value is "."</td>
+ *  </tr>
+ *
+ *  <tr>
+ *   <td valign=top>baseURL</td>
+ *   <td valign=top>
+ *    Base URL for generated bundleupdate locations.
+ *   </td>
+ *   <td valign=top>No.<br> Default value is ""</td>
+ *  </tr>
+ *
+ *  <tr>
+ *   <td valign=top>outFile</td>
+ *   <td valign=top>
+ *    File name of generated repository XML file
+ *   </td>
+ *   <td valign=top>No.<br> Default value is "repository.xml"</td>
+ *  </tr>
+ *
+ *  <tr>
+ *   <td valign=top>repoName</td>
+ *   <td valign=top>
+ *    Repository name
+ *   </td>
+ *   <td valign=top>No.<br> Default value is "Knopflerfish bundle repository"</td>
+ *  </tr>
+ *
+ * <h3>Parameters specified as nested elements</h3>
+ * <h4>fileset</h4>
+ *
+ * (required)<br>
+ * <p>
+ * All jar files must be specified as a fileset. If there exists
+ * jar files 
+ * <code>[prefix]_all-[suffix].jar</code> and 
+ * <code>[prefix]-[suffix].jar</code>, 
+ * <b>only</b> 
+ * <code>[prefix]-_all-[suffix].jar</code> will be included.
+ * </p>
+ *
+ */
+public class OBRExtractorTask extends Task {
+  
+  private Vector    filesets = new Vector();
+  private FileUtils fileUtils;
+  
+  private File   baseDir             = new File(".");
+  private String baseURL             = "";
+  private String outFile             = "repository.xml";
+  private String repoName            = "Knopflerfish bundle repository";
+  private String repoXSLURL          = "";
+ 
+  public OBRExtractorTask() {
+
+    fileUtils = FileUtils.newFileUtils();
+
+  }
+
+  public void setBaseDir(String s) {
+    this.baseDir = new File((new File(s)).getAbsolutePath());
+  }
+
+  public void setBaseURL(String s) {
+    this.baseURL = s;
+  }
+
+  public void setRepoXSLURL(String s) {
+    this.repoXSLURL = s;
+  }
+  
+  public void setOutFile(String s) {
+    this.outFile = s;
+  }
+
+  public void setRepoName(String s) {
+    this.repoName = s;
+  }
+  
+  public void addFileset(FileSet set) {
+    filesets.addElement(set);
+  }
+
+  // File -> BundleInfo
+  Map jarMap = new HashMap();
+  
+  // Implements Task
+  public void execute() throws BuildException {
+    if (filesets.size() == 0) {
+      throw new BuildException("No fileset specified");
+    }
+    
+    jarMap = new HashMap();
+    
+    System.out.println("loading bundle info...");
+    
+    try {
+      for (int i = 0; i < filesets.size(); i++) {
+        FileSet          fs      = (FileSet) filesets.elementAt(i);
+        DirectoryScanner ds      = fs.getDirectoryScanner(project);
+        File             projDir = fs.getDir(project);
+	
+        String[] srcFiles = ds.getIncludedFiles();
+        String[] srcDirs  = ds.getIncludedDirectories();
+        
+        for (int j = 0; j < srcFiles.length ; j++) {
+          File file = new File(projDir, srcFiles[j]); 
+          if(file.getName().endsWith(".jar")) {
+            jarMap.put(file, new BundleInfo(file));
+          }
+        }
+      }
+      
+      Set removeSet = new HashSet();
+      
+      for(Iterator it = jarMap.keySet().iterator(); it.hasNext();) {
+        File       file = (File)it.next();
+        String name = file.getAbsolutePath();
+        if(-1 != name.indexOf("_all-")) {
+          File f2 = new File(Util.replace(name, "_all-", "-"));
+          removeSet.add(f2);
+          System.out.println("skip " + f2);
+        }
+      }
+      
+      if(removeSet.size() > 0) {
+        System.out.println("skipping " + removeSet.size() + " bundles");
+      }
+      
+      for(Iterator it = removeSet.iterator(); it.hasNext();) {
+        File f = (File)it.next();
+        jarMap.remove(f);
+      }
+      
+      System.out.println("analyzing " + jarMap.size() + " bundles");
+      
+      for(Iterator it = jarMap.keySet().iterator(); it.hasNext();) {
+        File       file = (File)it.next();
+        BundleInfo info = (BundleInfo)jarMap.get(file);
+        
+        info.load();
+      }
+      
+      System.out.println("writing bundle OBR to " + outFile);      
+      
+      OutputStream out = null;
+      try {
+        out = new FileOutputStream(outFile);
+        PrintStream ps = new PrintStream(out);
+        
+        ps.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+        if(repoXSLURL != null && !"".equals(repoXSLURL)) {
+          ps.println("<?xml-stylesheet type=\"text/xsl\" href=\"" + 
+                     repoXSLURL + "\"?>");
+        }
+        ps.println("");
+        ps.println("<!-- Generated by " + getClass().getName() + 
+                   " -->");
+        ps.println("");
+        ps.println("<bundles>");
+        ps.print(" <repository-bundle-name>");
+        ps.print(repoName);
+        ps.println("</repository-bundle-name>");
+        ps.println(" <date>" + (new Date()) + "</date>");
+        ps.println(" <dtd-version>1.0</dtd-version>");
+        
+        for(Iterator it = jarMap.keySet().iterator(); it.hasNext();) {
+          File       file = (File)it.next();
+          BundleInfo info = (BundleInfo)jarMap.get(file);
+          
+          info.writeBundleXML(ps);
+        }
+        ps.println("</bundles>");
+        ps.close();
+      } catch (Exception e) {
+        e.printStackTrace();
+      } finally {
+        try { out.close(); } catch (Exception ignored) { }
+      }
+      
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw new BuildException("Failed to extract bundle info: " + e, e);
+    }
+  }
+  
+  class BundleInfo {
+    File       file;
+    Attributes attribs;
+    String path;
+    Map pkgExportMap;
+    Map pkgImportMap;
+
+    public BundleInfo(File file) throws IOException  {
+      this.file = file;
+      path = Util.replace(file.getCanonicalPath().substring(1 + baseDir.getCanonicalPath().length()), "\\", "/");
+    }
+    
+    public void load() throws Exception {
+      JarFile    jarFile      = new JarFile(file);
+      Manifest   mf           = jarFile.getManifest();
+      attribs                 = mf.getMainAttributes();
+
+      pkgExportMap     = parseNames(attribs.getValue("Export-Package"));
+      pkgImportMap     = parseNames(attribs.getValue("Import-Package"));
+      
+    }
+
+    
+    Map parseNames(String s) {
+      
+      Map map = new TreeMap();
+
+      //      System.out.println(file + ": " + s);
+      if(s != null) {
+        s = s.trim();
+        String[] lines = Util.splitwords(s, ",", '\"');
+        for(int i = 0; i < lines.length; i++) {
+          String[] words = Util.splitwords(lines[i].trim(), ";", '\"');
+          if(words.length < 1) {
+            throw new RuntimeException("bad package spec '" + s + "'"); 
+          }
+          String spec = ArrayInt.UNDEF;
+          String name = words[0].trim();
+          
+          for(int j = 1; j < words.length; j++) {
+            String[] info = Util.splitwords(words[j], "=", '\"');
+            
+            if(info.length == 2) {
+              if("specification-version".equals(info[0].trim())) {
+                spec = info[1].trim();
+              }
+            }
+          }
+          
+          ArrayInt version = new ArrayInt(spec);
+          
+          map.put(name, spec);
+        }
+      }
+      
+      return map;
+    }
+    
+    public void writeBundleXML(PrintStream out) throws IOException {
+      
+      out.println("");
+      out.println(" <!-- " + path + " -->");
+      out.println(" <bundle>");
+
+      printAttrib(out, "bundle-name",        "Bundle-Name");
+      printAttrib(out, "bundle-version",     "Bundle-Version");
+      printAttrib(out, "bundle-docurl",      "Bundle-DocURL");
+      printAttrib(out, "bundle-category",    "Bundle-Category");
+      printAttrib(out, "bundle-vendor",      "Bundle-Vendor");
+      printAttrib(out, "bundle-description",    "Bundle-Description");
+      printAttrib(out, "bundle-subversionurl",  "Bundle-SubversionURL");
+      printAttrib(out, "bundle-apivendor",      "Bundle-APIVendor");
+      printAttrib(out, "bundle-uuid",           "Bundle-UUID");
+      printAttrib(out, "application-icon",      "Application-Icon");
+
+      
+      out.print("  <bundle-updatelocation>");
+      out.print(baseURL + path);
+      out.println("</bundle-updatelocation>");
+
+      dumpPackages(out, "export-package", pkgExportMap);
+      dumpPackages(out, "import-package", pkgImportMap);
+
+      out.print("  <bundle-filesize>");
+      out.print(Long.toString(file.length()));
+      out.println("</bundle-filesize>");
+      
+
+      out.println(" </bundle>");
+
+    }
+
+    void dumpPackages(PrintStream out, String tag, Map map) {
+      for(Iterator it = map.keySet().iterator(); it.hasNext();) {
+        String pkg  = (String)it.next();
+        String spec = (String)map.get(pkg);
+        boolean bSkip = false;
+        if("import-package".equals(tag)) {
+          String exportSpec = (String)pkgExportMap.get(pkg);
+          if(exportSpec != null && spec.equals(exportSpec)) {
+            // Skip import of exported packages
+            bSkip = true;
+          }
+        }
+        if(bSkip) {
+          out.println("  <!-- skip import " + pkg + "; " + spec + " -->");
+        } else {
+          out.print("  <" + tag + " package=\"" + pkg + "\"");
+          if("".equals(spec)) {
+            out.println("/>");
+          } else {
+            out.println("\n                  specification-version=\"" + spec + "\"/>");
+          }
+        }
+      }
+    }
+    
+    void printAttrib(PrintStream out, String tag, String key) {
+      String val = attribs.getValue(key);
+      if(val == null) {
+        val = "";
+      }
+      out.println("  <" + tag + ">" +  val + "</" + tag + ">");
+    }
+  }
+}
+
+

Added: cocoon/whiteboard/osgi/ant/src/org/knopflerfish/ant/taskdefs/bundle/OSGiPackage.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/ant/src/org/knopflerfish/ant/taskdefs/bundle/OSGiPackage.java?rev=189461&view=auto
==============================================================================
--- cocoon/whiteboard/osgi/ant/src/org/knopflerfish/ant/taskdefs/bundle/OSGiPackage.java (added)
+++ cocoon/whiteboard/osgi/ant/src/org/knopflerfish/ant/taskdefs/bundle/OSGiPackage.java Tue Jun  7 15:32:48 2005
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2004, KNOPFLERFISH project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ *
+ * - Neither the name of the KNOPFLERFISH project nor the names of its
+ *   contributors may be used to endorse or promote products derived
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.knopflerfish.ant.taskdefs.bundle;
+
+
+/**
+ * @author Kaspar Weilenmann &lt;kaspar@weilenmann.se&gt;
+ */
+public class OSGiPackage {
+
+  // private fields
+
+  private String name = null;
+  private String version = null;
+
+
+  // public methods
+
+  public String getName() { return name; }
+  public void setName(String name) { this.name = name; }
+
+  public String getVersion() { return version; }
+  public void setVersion(String version) { this.version = version; }
+
+} // OSGiPackage

Added: cocoon/whiteboard/osgi/ant/src/org/knopflerfish/ant/taskdefs/bundle/Util.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/ant/src/org/knopflerfish/ant/taskdefs/bundle/Util.java?rev=189461&view=auto
==============================================================================
--- cocoon/whiteboard/osgi/ant/src/org/knopflerfish/ant/taskdefs/bundle/Util.java (added)
+++ cocoon/whiteboard/osgi/ant/src/org/knopflerfish/ant/taskdefs/bundle/Util.java Tue Jun  7 15:32:48 2005
@@ -0,0 +1,273 @@
+/*
+ * Copyright (c) 2003, KNOPFLERFISH project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * - Redistributions of source code must retain the above copyright notice, 
+ *   this list of conditions and the following disclaimer. 
+ * 
+ * - Redistributions in binary form must reproduce the above copyright notice, 
+ *   this list of conditions and the following disclaimer in the documentation 
+ *   and/or other materials provided with the distribution. 
+ * 
+ * - Neither the name of the KNOPFLERFISH project nor the names of its 
+ *   contributors may be used to endorse or promote products derived 
+ *   from this software without specific prior written permission. 
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.knopflerfish.ant.taskdefs.bundle;
+
+import java.net.*;
+import java.io.*;
+import java.util.*;
+
+/**
+ * Misc static utility code.
+ */
+public class Util {
+  public static byte [] loadURL(URL url) throws IOException {
+    int     bufSize = 1024 * 2;
+    byte [] buf     = new byte[bufSize];
+    
+    ByteArrayOutputStream bout = new ByteArrayOutputStream();
+    BufferedInputStream   in   = new BufferedInputStream(url.openStream());
+    int n;
+    while ((n = in.read(buf)) > 0) {
+      bout.write(buf, 0, n);
+    }
+    try { in.close(); } catch (Exception ignored) { } 
+    return bout.toByteArray();
+  }
+
+  public static String loadFile(String fname) throws IOException {
+    byte[] bytes = loadURL(new URL("file:" + fname));
+    return new String(bytes);
+  }
+
+
+  /**
+   * Load entire contents of a file or URL into a string.
+   */
+  public static String load(String fileOrURL) throws IOException {
+    try {
+      URL url = new URL(fileOrURL);
+      
+      return new String(loadURL(url));
+    } catch (Exception e) {
+      return loadFile(fileOrURL);
+    }
+  }
+
+  /**
+   * Create a Set from a comma-separated string.
+   */
+  public static Set makeSetFromStringList(String s) {
+    Set set = new HashSet();
+
+    String[] sa = Util.splitwords(s, ",", '"');
+    for(int i = 0; i < sa.length; i++) {
+      set.add(sa[i]);
+    }
+    
+    return set;
+  }
+
+
+
+  public static String getRelativePath(File fromFile,
+				       File toFile) {
+    File fromDir = fromFile.isDirectory() 
+      ? fromFile
+      : fromFile.getParentFile();
+
+    File toDir = toFile.isDirectory() 
+      ? toFile
+      : toFile.getParentFile();
+    
+
+    File dir = fromDir;
+
+    String relPath = "";
+
+    while(dir != null && !dir.equals(toDir)) {
+      relPath += "../";
+      dir = dir.getParentFile();
+    }
+
+    if(dir == null) {
+      throw new RuntimeException(toFile + " is not in parent of " + fromFile);
+    }
+    return relPath + toFile.toString();
+  }
+
+  // String manipulation functions below by Erik Wistrand
+  
+  
+  /**
+   * Replace all occurences of a substring with another string.
+   *
+   * <p>
+   * If no replacements are needed, the methods returns the original string.
+   * </p>
+   *
+   * @param s  Source string which will be scanned and modified. 
+   *           If <tt>null</tt>, return <tt>null</tt>
+   * @param v1 String to be replaced with <tt>v2</tt>.
+   *           If <tt>null</tt>, return original string.
+   * @param v2 String replacing <tt>v1</tt>. 
+   *           If <tt>null</tt>, return original string.
+   * @return   Modified string.
+   */
+  public static String replace(final String s, 
+			       final String v1, 
+			       final String v2) {
+
+    if(s == null 
+       || v1 == null 
+       || v2 == null 
+       || v1.length() == 0 
+       || v1.equals(v2)) {
+      return s;
+    }
+
+    int ix       = 0;
+    int v1Len    = v1.length(); 
+    int n        = 0;
+
+    while(-1 != (ix = s.indexOf(v1, ix))) {
+      n++;
+      ix += v1Len;
+    }
+    
+    if(n == 0) {
+      return s;
+    }
+    
+    int     start  = 0;
+    int     v2Len  = v2.length();
+    char[]  r      = new char[s.length() + n * (v2Len - v1Len)];
+    int     rPos   = 0;
+    
+    while(-1 != (ix = s.indexOf(v1, start))) {
+      while(start < ix) r[rPos++] = s.charAt(start++);
+      for(int j = 0; j < v2Len; j++) {
+	r[rPos++] = v2.charAt(j);
+      }
+      start += v1Len;
+    }
+    
+    ix = s.length(); 
+    while(start < ix) r[rPos++] = s.charAt(start++);
+    
+    return new String(r);
+  }
+
+  /**
+   * Split a string into words separated by whitespace 
+   * SPACE | TAB | NEWLINE | CR
+
+   * Citation chars '"' may be used to group words 
+   * with embedded whitespace.
+   * </p>
+   */
+  public static String [] splitwords(String s) {
+    return splitwords(s, " \t\n\r", '"');
+  }
+  
+  /**
+   * Split a string into words separated by whitespace.
+   * Citation chars '"' may be used to group words with embedded
+   * whitespace.
+   *
+   * @param s          String to split.
+   * @param whiteSpace whitespace to use for splitting. Any of the
+   *                   characters in the whiteSpace string are considered
+   *                   whitespace between words and will be removed
+   *                   from the result.
+   * @param citchar    citation char used for enclosing words containing
+   *                   whitespace
+   */
+  public static String [] splitwords(String s, 
+				     String whiteSpace,
+				     char   citchar) {
+    boolean       bCit  = false;        // true when inside citation chars.
+    Vector        v     = new Vector(); // (String) individual words after splitting
+    StringBuffer  buf   = null; 
+    int           i     = 0; 
+    
+    while(i < s.length()) {
+      char c = s.charAt(i);
+
+      if(bCit || whiteSpace.indexOf(c) == -1) {
+	// Build up word until we breaks on 
+	// either a citation char or whitespace
+	if(c == citchar) {
+	  bCit = !bCit;
+	} else {
+	  if(buf == null) {
+	    buf = new StringBuffer();
+	  }
+	  buf.append(c);
+	}
+	i++;
+      } else {	
+	// found whitespace or end of citation, append word if we have one
+	if(buf != null) {
+	  v.addElement(buf.toString());
+	  buf = null;
+	}
+
+	// and skip whitespace so we start clean on a word or citation char
+	while((i < s.length()) && (-1 != whiteSpace.indexOf(s.charAt(i)))) {
+	  i++;
+	}
+      }
+    }
+    // Add possible remaining word
+    if(buf != null) {
+      v.addElement(buf.toString());
+    }
+    
+    // Copy back into an array
+    String [] r = new String[v.size()];
+    v.copyInto(r);
+    
+    return r;
+  }
+
+
+  
+  static void writeStringToFile(File outFile, String s) throws IOException {
+    FileWriter writer   = null;
+    
+    try {
+      writer = new FileWriter(outFile);
+      writer.write(s, 0, s.length());
+      //      System.out.println("wrote " + outFile);
+      
+    } finally {
+      try { writer.close(); } catch (Exception ignored) { }
+    }
+  }
+
+}
+
+
+
+
+

Added: cocoon/whiteboard/osgi/bundles/cocoon/build.xml
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/bundles/cocoon/build.xml?rev=189461&view=auto
==============================================================================
--- cocoon/whiteboard/osgi/bundles/cocoon/build.xml (added)
+++ cocoon/whiteboard/osgi/bundles/cocoon/build.xml Tue Jun  7 15:32:48 2005
@@ -0,0 +1,64 @@
+<?xml version="1.0"?>
+
+<!DOCTYPE project [
+  <!ENTITY bundlebuild_include  SYSTEM "../../ant/bundlebuild_include.xml">
+]>
+
+<project name="cocoon" default="all">
+
+  <property name = "cocoon.trunk"        location="../../../trunk"/>
+  <property name = "cocoon.lib"          location="${cocoon.trunk}/lib"/>
+  <property name = "cocoon.lib.cocoon"   location="${cocoon.trunk}/build/cocoon-2.2.0-dev/cocoon.jar"/>
+  <property name = "cocoon.lib.core"     location="${cocoon.lib}/core"/>
+  <property name = "cocoon.lib.endorsed" location="${cocoon.lib}/endorsed"/>
+
+  <path id="cocoon.libs">
+    <fileset file="${cocoon.lib.cocoon}"/>
+    <fileset dir="${cocoon.lib.core}"/>
+    <fileset dir="${cocoon.lib.endorsed}"/>
+  </path>
+
+  <property name = "topdir"       location="../.."/>
+
+  <property name="bundle.activator"      value=""/>
+  <property name="bundle.description"    value="Cocoon bundle"/>
+  <property name="bundle.vendor"         value="Cocoon"/>
+  <property name="bundle.category"       value="library"/>
+  <property name="bundle.version"        value="1.0.0"/>
+
+  <property name="api.pattern"        value="org.apache.**"/>
+
+  <pathconvert property="bundle.classpath" pathsep=",">
+    <path refid="cocoon.libs"/>
+    <mapper type="flatten"/>
+  </pathconvert>
+
+  <property name="export.package"        value="org.apache.avalon.framework.context,org.apache.avalon.framework.logger,org.apache.avalon.framework.service,org.apache.cocoon,org.apache.cocoon.components.blocks,org.apache.cocoon.components.modules.input,org.apache.cocoon.components.pipeline.impl,org.apache.cocoon.components.source.impl,org.apache.cocoon.core,org.apache.cocoon.environment,org.apache.cocoon.environment.impl,org.apache.cocoon.generation,org.apache.cocoon.matching,org.apache.cocoon.reading,org.apache.cocoon.serialization,org.apache.cocoon.transformation,org.apache.cocoon.util.log,org.apache.avalon.excalibur.logger,org.apache.excalibur.source,org.apache.log"/>
+
+  <property name = "bundle.build.lib"    value = "false"/>
+  <property name = "bundle.build.api"    value = "false"/>
+  <property name = "bundle.build.impl"   value = "false"/>
+  <property name = "bundle.build.all"    value = "true"/>
+
+  <property name="do.bundle.custom.pre" value="true"/>
+
+  <target name="bundle.custom.pre" depends="copy.libs">
+    <echo message="Bundle-Classpath=${bundle.classpath}"/>
+  </target>
+
+  <target name="copy.libs">
+    <mkdir dir="resources"/>
+    <copy todir="resources">
+      <fileset file="${cocoon.lib.cocoon}"/>
+      <fileset dir="${cocoon.lib.core}"/>
+      <fileset dir="${cocoon.lib.endorsed}"/>
+    </copy>
+  </target>
+
+  <target name="delete.libs">
+    <delete dir="resources"/>
+  </target>
+
+  &bundlebuild_include;
+
+</project>

Added: cocoon/whiteboard/osgi/bundles/cocoon_testcase/build.xml
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/bundles/cocoon_testcase/build.xml?rev=189461&view=auto
==============================================================================
--- cocoon/whiteboard/osgi/bundles/cocoon_testcase/build.xml (added)
+++ cocoon/whiteboard/osgi/bundles/cocoon_testcase/build.xml Tue Jun  7 15:32:48 2005
@@ -0,0 +1,69 @@
+<?xml version="1.0"?>
+
+<!DOCTYPE project [
+  <!ENTITY bundlebuild_include  SYSTEM "../../ant/bundlebuild_include.xml">
+]>
+
+<project name="cocoon_testcase" default="all">
+
+  <property name="cocoon.trunk"          location="../../../trunk"/>
+  <property name="lib.cocoon_testcase"   location="${cocoon.trunk}/build/cocoon-2.2.0-dev/cocoon-testcase.jar"/>
+
+  <property name = "topdir"              location="../.."/>
+
+  <path id="bundle.compile.path">
+   <pathelement location="resources/cocoon-testcase.jar"/>
+   <pathelement location="lib/cocoon.jar"/>
+   <pathelement location="lib/avalon-framework-api-4.1.5.jar"/>
+   <pathelement location="lib/avalon-framework-impl-4.1.5.jar"/>
+   <pathelement location="lib/excalibur-sourceresolve-1.1.jar"/>
+   <pathelement location="lib/junit.jar"/>
+  </path>
+
+  <property name="bundle.description"    value="Cocoon testcase bundle"/>
+  <property name="bundle.vendor"         value="Cocoon"/>
+  <property name="bundle.category"       value="tests"/>
+  <property name="bundle.version"        value="1.0.0"/>
+
+  <property name="impl.pattern"          value="org/apache/cocoon/**"/>
+  <property name="bundle.classpath"      value=".,cocoon-testcase.jar"/>
+  <property name="import.package"        value="junit.framework,org.knopflerfish.service.junit,org.apache.avalon.framework.context,org.apache.avalon.framework.logger,org.apache.avalon.framework.service,org.apache.cocoon,org.apache.cocoon.components.blocks,org.apache.cocoon.components.modules.input,org.apache.cocoon.components.pipeline.impl,org.apache.cocoon.components.source.impl,org.apache.cocoon.core,org.apache.cocoon.environment,org.apache.cocoon.environment.impl,org.apache.cocoon.generation,org.apache.cocoon.matching,org.apache.cocoon.reading,org.apache.cocoon.serialization,org.apache.cocoon.transformation,org.apache.cocoon.util.log,org.apache.avalon.excalibur.logger,org.apache.excalibur.source,org.apache.log"/>
+
+  <property name="do.bundle.custom.pre"  value="true"/>
+
+  <target name="bundle.custom.pre">
+    <mkdir dir="resources"/>
+    <copy todir="resources"              file="${lib.cocoon_testcase}"/>
+    <mkdir dir="lib"/>
+    <unzip src="${topdir}/jars-external/junit/junit_all-1.0.0.jar"
+           dest="lib">
+      <fileset file="junit.jar"/>
+    </unzip>
+    <unzip src="${topdir}/jars/cocoon/cocoon_all-1.0.0.jar"
+           dest="lib">
+      <fileset dir=".">
+        <include name="cocoon.jar"/>
+        <include name="avalon-framework-api-4.1.5.jar"/>
+        <include name="avalon-framework-impl-4.1.5.jar"/>
+        <include name="excalibur-sourceresolve-1.1.jar"/>
+      </fileset>
+    </unzip>
+  </target>
+
+  <property name="do.bundle.custom.post"  value="true"/>
+
+  <target name="bundle.custom.post">
+    <delete dir="resources"/>
+    <delete dir="lib"/>
+  </target>
+
+  &bundlebuild_include;
+
+</project>
+
+
+
+
+
+
+

Added: cocoon/whiteboard/osgi/bundles/cocoon_testcase/src/org/apache/cocoon/service/cocoon_testcase/impl/Activator.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/bundles/cocoon_testcase/src/org/apache/cocoon/service/cocoon_testcase/impl/Activator.java?rev=189461&view=auto
==============================================================================
--- cocoon/whiteboard/osgi/bundles/cocoon_testcase/src/org/apache/cocoon/service/cocoon_testcase/impl/Activator.java (added)
+++ cocoon/whiteboard/osgi/bundles/cocoon_testcase/src/org/apache/cocoon/service/cocoon_testcase/impl/Activator.java Tue Jun  7 15:32:48 2005
@@ -0,0 +1,42 @@
+/*
+ * Copyright 1999-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.service.cocoon_testcase.impl;
+
+import java.util.Hashtable;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import org.apache.cocoon.test.components.blocks.BlocksManagerTestCase;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+
+/**
+ * Activator which register the a test case
+ */
+public class Activator implements BundleActivator {
+  
+  public void start(BundleContext bc) {
+      TestSuite suite = new TestSuite(BlocksManagerTestCase.class);
+
+      Hashtable props = new Hashtable();
+      props.put("service.pid", suite.getName());
+    
+      bc.registerService(Test.class.getName(), suite, props);
+  }
+
+  public void stop(BundleContext bc) {
+  }
+}

Added: cocoon/whiteboard/osgi/bundles/test/build.xml
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/bundles/test/build.xml?rev=189461&view=auto
==============================================================================
--- cocoon/whiteboard/osgi/bundles/test/build.xml (added)
+++ cocoon/whiteboard/osgi/bundles/test/build.xml Tue Jun  7 15:32:48 2005
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+
+<!DOCTYPE project [
+  <!ENTITY bundlebuild_include  SYSTEM "../../ant/bundlebuild_include.xml">
+]>
+
+<project name="test" default="all">
+
+  <property name = "topdir"       location="../.."/>
+
+  <property name  = "impl.pattern"
+            value = "org/apache/cocoon/service/test/impl/*"/>
+
+
+  <path id="bundle.compile.path">
+    <pathelement location="${topdir}/jars/test/test-1.0.0.jar"/>
+  </path>
+
+
+  <property name="bundle.description"    value="Test bundle"/>
+  <property name="bundle.vendor"         value="Cocoon"/>
+  <property name="bundle.category"       value="example"/>
+  <property name="bundle.version"        value="1.0.0"/>
+
+  &bundlebuild_include;
+
+</project>

Added: cocoon/whiteboard/osgi/bundles/test/src/org/apache/cocoon/service/test/impl/Activator.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/bundles/test/src/org/apache/cocoon/service/test/impl/Activator.java?rev=189461&view=auto
==============================================================================
--- cocoon/whiteboard/osgi/bundles/test/src/org/apache/cocoon/service/test/impl/Activator.java (added)
+++ cocoon/whiteboard/osgi/bundles/test/src/org/apache/cocoon/service/test/impl/Activator.java Tue Jun  7 15:32:48 2005
@@ -0,0 +1,40 @@
+/*
+ * Copyright 1999-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.service.test.impl;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+
+/**
+ * Activator which just test that it is activated.
+ */
+public class Activator implements BundleActivator {
+  
+  static BundleContext bc;
+
+  public void start(BundleContext bc) {
+    System.out.println("start " + getClass().getName());
+
+    this.bc = bc;
+  }
+
+  public void stop(BundleContext bc) {
+    System.out.println("stop " + getClass().getName());
+
+    this.bc = null;
+  }
+}

Added: cocoon/whiteboard/osgi/framework.jar
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/framework.jar?rev=189461&view=auto
==============================================================================
Binary file - no diff available.

Propchange: cocoon/whiteboard/osgi/framework.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: cocoon/whiteboard/osgi/init.xargs
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/init.xargs?rev=189461&view=auto
==============================================================================
--- cocoon/whiteboard/osgi/init.xargs (added)
+++ cocoon/whiteboard/osgi/init.xargs Tue Jun  7 15:32:48 2005
@@ -0,0 +1,25 @@
+# Minimal start command file
+
+-Dorg.knopflerfish.verbosity=0
+-Dorg.knopflerfish.gosg.jars=file:jars/
+-Dorg.knopflerfish.framework.debug.packages=false
+-Dorg.knopflerfish.framework.debug.errors=true
+-Dorg.knopflerfish.framework.debug.classloader=false
+-Dorg.knopflerfish.framework.system.export.all_13=false
+-Dorg.osgi.framework.system.packages=
+
+-Dorg.knopflerfish.startlevel.use=true
+
+-init
+
+-install http://www.knopflerfish.org/releases/1.3.3/jars/log/log_api-1.0.0.jar
+-install http://www.knopflerfish.org/releases/1.3.3/jars/console/console_api-1.0.0.jar
+-istart  http://www.knopflerfish.org/releases/1.3.3/jars/cm/cm_api-1.0.0.jar
+-istart  http://www.knopflerfish.org/releases/1.3.3/jars/log/log-1.0.0.jar
+-istart  http://www.knopflerfish.org/releases/1.3.3/jars/console/console-1.0.0.jar
+-istart  http://www.knopflerfish.org/releases/1.3.3/jars/consoletty/consoletty-1.0.0.jar
+-istart  http://www.knopflerfish.org/releases/1.3.3/jars/frameworkcommands/frameworkcommands-1.0.0.jar
+-istart  http://www.knopflerfish.org/releases/1.3.3/jars/logcommands/logcommands-1.0.0.jar
+-istart  http://www.knopflerfish.org/releases/1.3.3/jars/useradmin/useradmin_api-1.0.0.jar
+
+-launch

Added: cocoon/whiteboard/osgi/jars-external/junit/junit_all-1.0.0.jar
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/jars-external/junit/junit_all-1.0.0.jar?rev=189461&view=auto
==============================================================================
Binary file - no diff available.

Propchange: cocoon/whiteboard/osgi/jars-external/junit/junit_all-1.0.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: cocoon/whiteboard/osgi/legal/knopflerfish.license.txt
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/legal/knopflerfish.license.txt?rev=189461&view=auto
==============================================================================
--- cocoon/whiteboard/osgi/legal/knopflerfish.license.txt (added)
+++ cocoon/whiteboard/osgi/legal/knopflerfish.license.txt Tue Jun  7 15:32:48 2005
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2003-2004, KNOPFLERFISH project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ *   copyright notice, this list of conditions and the following
+ *   disclaimer in the documentation and/or other materials
+ *   provided with the distribution.
+ *
+ * - Neither the name of the KNOPFLERFISH project nor the names of its
+ *   contributors may be used to endorse or promote products derived
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */

Added: cocoon/whiteboard/osgi/legal/osgi_copyright.txt
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/legal/osgi_copyright.txt?rev=189461&view=auto
==============================================================================
--- cocoon/whiteboard/osgi/legal/osgi_copyright.txt (added)
+++ cocoon/whiteboard/osgi/legal/osgi_copyright.txt Tue Jun  7 15:32:48 2005
@@ -0,0 +1,65 @@
+Copyright (c) 2000, 2003
+
+The Open Services Gateway Initiative
+Bishop Ranch 2
+2694 Bishop Drive
+Suite 275
+San Ramon
+CA 94583 USA
+
+All Rights Reserved.
+
+LEGAL TERMS AND CONDITIONS REGARDING SPECIFICATION
+
+Implementation of certain elements of the Open Services Gateway
+Initiative (OSGi) Specification may be subject to third party
+intellectual property rights, including without limitation, patent
+rights (such a third party may or may not be a member of OSGi).  OSGi is
+not responsible and shall not be held responsible in any manner for
+identifying or failing to identify any or all such third party
+intellectual property rights.
+
+THE RECIPIENT ACKNOWLEDGES AND AGREES THAT THE SPECIFICATION IS PROVIDED
+"AS IS" AND WITH NO WARRANTIES WHATSOEVER, WHETHER EXPRESS, IMPLIED OR
+STATUTORY, INCLUDING, BUT NOT LIMITED TO ANY WARRANTY OF
+MERCHANTABILITY, NONINFRINGEMENT, FITNESS OF ANY PARTICULAR PURPOSE, OR
+ANY WARRANTY OTHERWISE ARISING OUT OF ANY PROPOSAL, SPECIFICATION, OR
+SAMPLE.  THE RECIPIENT'S USE OF THE SPECIFICATION IS SOLELY AT THE
+RECIPIENT'S OWN RISK.  THE RECIPIENT'S USE OF THE SPECIFICATION IS
+SUBJECT TO THE RECIPIENT'S OSGi MEMBER AGREEMENT, IN THE EVENT THAT THE
+RECIPIENT IS AN OSGi MEMBER.  IN NO EVENT SHALL OSGi BE LIABLE OR
+OBLIGATED TO THE RECIPIENT OR ANY THIRD PARTY IN ANY MANNER FOR ANY
+SPECIAL, NON-COMPENSATORY, CONSEQUENTIAL, INDIRECT, INCIDENTAL,
+STATUTORY OR PUNITIVE DAMAGES OF ANY KIND, INCLUDING, WITHOUT
+LIMITATION, LOST PROFITS AND LOST REVENUE, REGARDLESS OF THE FORM OF
+ACTION, WHETHER IN CONTRACT, TORT, NEGLIGENCE, STRICT PRODUCT LIABILITY,
+OR OTHERWISE, EVEN IF OSGi HAS BEEN INFORMED OF OR IS AWARE OF THE
+POSSIBILITY OF ANY SUCH DAMAGES IN ADVANCE.
+
+THE LIMITATIONS SET FORTH ABOVE SHALL BE DEEMED TO APPLY TO THE MAXIMUM
+EXTENT PERMITTED BY APPLICABLE LAW AND NOTWITHSTANDING THE FAILURE OF
+THE ESSENTIAL PURPOSE OF ANY LIMITED REMEDIES AVAILABLE TO THE
+RECIPIENT.  THE RECIPIENT ACKNOWLEDGES AND AGREES THAT THE RECIPIENT HAS
+FULLY CONSIDERED THE FOREGOING ALLOCATION OF RISK AND FINDS IT
+REASONABLE, AND THAT THE FOREGOING LIMITATIONS ARE AN ESSENTIAL BASIS OF
+THE BARGAIN BETWEEN THE RECIPIENT AND OSGi.  IF THE RECIPIENT USES THE
+SPECIFICATION, THE RECIPIENT AGREES TO ALL OF THE FOREGOING TERMS AND
+CONDITIONS.  IF THE RECIPIENT DOES NOT AGREE TO THESE TERMS AND
+CONDITIONS, THE RECIPIENT SHOULD NOT USE THE SPECIFICATION AND SHOULD
+CONTACT OSGi IMMEDIATELY.
+
+Trademarks
+
+OSGi(TM) is a trademark, registered trademark, or service mark of The
+Open Services Gateway Initiative in the US and other countries.  Java is
+a trademark, registered trademark, or service mark of Sun Microsystems,
+Inc.  in the US and other countries.  All other trademarks, registered
+trademarks, or service marks used in this document are the property of
+their respective owners and are hereby recognized.
+
+Feedback
+
+This specification can be downloaded from the OSGi web site:
+http://www.osgi.org.  Comments about this specification can be mailed
+to: speccomments@mail.osgi.org
+

Added: cocoon/whiteboard/osgi/props.xargs
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/props.xargs?rev=189461&view=auto
==============================================================================
--- cocoon/whiteboard/osgi/props.xargs (added)
+++ cocoon/whiteboard/osgi/props.xargs Tue Jun  7 15:32:48 2005
@@ -0,0 +1,42 @@
+#
+# Properties used by both init.xargs and restart.xargs
+#
+
+# The Service Platform ID should be used by bundles needing to
+# a unique ID for the platform itself
+-Dorg.osgi.provisioning.spid=knopflerfish
+
+# Initial startup verbosity, 0 is low verbosity
+-Dorg.knopflerfish.verbosity=0
+
+
+# URL to bundle repository
+-Doscar.repository.url=http://www.knopflerfish.org/repo/repository.xml
+
+# Various debug flags
+-Dorg.knopflerfish.framework.debug.packages=false
+-Dorg.knopflerfish.framework.debug.errors=true
+-Dorg.knopflerfish.framework.debug.classloader=false
+-Dorg.knopflerfish.framework.debug.startlevel=false
+-Dorg.knopflerfish.framework.debug.ldap=false
+
+# Comma-separated list of packges exported by system classloader
+-Dorg.osgi.framework.system.packages=
+
+# Web server properties
+-Dorg.knopflerfish.http.dnslookup=false
+-Dorg.osgi.service.http.port=8080
+
+-Dorg.knopflerfish.startlevel.use=true
+
+# Log service properties
+-Dorg.knopflerfish.log.out=false
+-Dorg.knopflerfish.log.level=info
+-Dorg.knopflerfish.log.grabio=true
+-Dorg.knopflerfish.log.file=true
+
+#consoletelnet properties
+-Dorg.knopflerfish.consoletelnet.user=admin
+-Dorg.knopflerfish.consoletelnet.pwd=admin
+-Dorg.knopflerfish.consoletelnet.port=23
+

Added: cocoon/whiteboard/osgi/restart.xargs
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/restart.xargs?rev=189461&view=auto
==============================================================================
--- cocoon/whiteboard/osgi/restart.xargs (added)
+++ cocoon/whiteboard/osgi/restart.xargs Tue Jun  7 15:32:48 2005
@@ -0,0 +1,4 @@
+# load common properties
+-xargs props.xargs
+
+-launch 0