Modified: 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/packageadmin/PackageAdmin.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/org.osgi.core/src/main/java/org/osgi/service/packageadmin/PackageAdmin.java?rev=782737&r1=782736&r2=782737&view=diff
==============================================================================
--- 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/packageadmin/PackageAdmin.java
 (original)
+++ 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/packageadmin/PackageAdmin.java
 Mon Jun  8 19:31:06 2009
@@ -1,7 +1,5 @@
 /*
- * $Header: 
/cvshome/build/org.osgi.service.packageadmin/src/org/osgi/service/packageadmin/PackageAdmin.java,v
 1.19 2006/06/16 16:31:49 hargrave Exp $
- * 
- * Copyright (c) OSGi Alliance (2001, 2006). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2009). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -29,7 +27,8 @@
  * If present, there will only be a single instance of this service registered
  * with the Framework.
  * 
- * @version $Revision: 1.19 $
+ * @ThreadSafe
+ * @version $Revision: 6779 $
  * @see org.osgi.service.packageadmin.ExportedPackage
  * @see org.osgi.service.packageadmin.RequiredBundle
  */
@@ -38,8 +37,8 @@
         * Gets the exported packages for the specified bundle.
         * 
         * @param bundle The bundle whose exported packages are to be returned, 
or
-        *        <code>null</code> if all exported packages are to be returned.
-        *        If the specified bundle is the system bundle (that is, the 
bundle
+        *        <code>null</code> if all exported packages are to be 
returned. If
+        *        the specified bundle is the system bundle (that is, the bundle
         *        with id zero), this method returns all the packages known to 
be
         *        exported by the system bundle. This will include the package
         *        specified by the 
<code>org.osgi.framework.system.packages</code>
@@ -48,6 +47,9 @@
         * 
         * @return An array of exported packages, or <code>null</code> if the
         *         specified bundle has no exported packages.
+        * @throws IllegalArgumentException If the specified 
<code>Bundle</code> was
+        *         not created by the same framework instance that registered 
this
+        *         <code>PackageAdmin</code> service.
         */
        public ExportedPackage[] getExportedPackages(Bundle bundle);
 
@@ -93,8 +95,8 @@
         * following steps on a separate thread:
         * 
         * <ol>
-        * <li>Compute a graph of bundles starting with the specified bundles. 
If
-        * no bundles are specified, compute a graph of bundles starting with 
bundle
+        * <li>Compute a graph of bundles starting with the specified bundles. 
If no
+        * bundles are specified, compute a graph of bundles starting with 
bundle
         * updated or uninstalled since the last call to this method. Add to the
         * graph any bundle that is wired to a package that is currently 
exported by
         * a bundle in the graph. The graph is fully constructed when there is 
no
@@ -105,9 +107,9 @@
         * <li>Each bundle in the graph that is in the <code>ACTIVE</code> state
         * will be stopped as described in the <code>Bundle.stop</code> method.
         * 
-        * <li>Each bundle in the graph that is in the <code>RESOLVED</code>
-        * state is unresolved and thus moved to the <code>INSTALLED</code> 
state.
-        * The effect of this step is that bundles in the graph are no longer
+        * <li>Each bundle in the graph that is in the <code>RESOLVED</code> 
state
+        * is unresolved and thus moved to the <code>INSTALLED</code> state. The
+        * effect of this step is that bundles in the graph are no longer
         * <code>RESOLVED</code>.
         * 
         * <li>Each bundle in the graph that is in the <code>UNINSTALLED</code>
@@ -137,8 +139,11 @@
         *        removed, or <code>null</code> for all bundles updated or
         *        uninstalled since the last call to this method.
         * @throws SecurityException If the caller does not have
-        *         <code>AdminPermission[System Bundle,RESOLVE]</code> and the
-        *         Java runtime environment supports permissions.
+        *         <code>AdminPermission[System Bundle,RESOLVE]</code> and the 
Java
+        *         runtime environment supports permissions.
+        * @throws IllegalArgumentException If the specified 
<code>Bundle</code>s
+        *         were not created by the same framework instance that 
registered
+        *         this <code>PackageAdmin</code> service.
         */
        public void refreshPackages(Bundle[] bundles);
 
@@ -155,12 +160,15 @@
         * be refreshed, stopped, or started. This method will not return until 
the
         * operation has completed.
         * 
-        * @param bundles The bundles to resolve or <code>null</code> to resolve
-        *        all unresolved bundles installed in the Framework.
+        * @param bundles The bundles to resolve or <code>null</code> to 
resolve all
+        *        unresolved bundles installed in the Framework.
         * @return <code>true</code> if all specified bundles are resolved;
         * @throws SecurityException If the caller does not have
-        *         <code>AdminPermission[System Bundle,RESOLVE]</code> and the
-        *         Java runtime environment supports permissions.
+        *         <code>AdminPermission[System Bundle,RESOLVE]</code> and the 
Java
+        *         runtime environment supports permissions.
+        * @throws IllegalArgumentException If the specified 
<code>Bundle</code>s
+        *         were not created by the same framework instance that 
registered
+        *         this <code>PackageAdmin</code> service.
         * @since 1.2
         */
        public boolean resolveBundles(Bundle[] bundles);
@@ -203,8 +211,8 @@
 
        /**
         * Returns an array of attached fragment bundles for the specified 
bundle.
-        * If the specified bundle is a fragment then <code>null</code> is
-        * returned. If no fragments are attached to the specified bundle then
+        * If the specified bundle is a fragment then <code>null</code> is 
returned.
+        * If no fragments are attached to the specified bundle then
         * <code>null</code> is returned.
         * <p>
         * This method does not attempt to resolve the specified bundle. If the
@@ -215,19 +223,24 @@
         * @return An array of fragment bundles or <code>null</code> if the 
bundle
         *         does not have any attached fragment bundles or the bundle is 
not
         *         resolved.
+        * @throws IllegalArgumentException If the specified 
<code>Bundle</code> was
+        *         not created by the same framework instance that registered 
this
+        *         <code>PackageAdmin</code> service.
         * @since 1.2
         */
        public Bundle[] getFragments(Bundle bundle);
 
        /**
-        * Returns an array containing the host bundle to which the specified
-        * fragment bundle is attached or <code>null</code> if the specified
-        * bundle is not attached to a host or is not a fragment bundle. A 
fragment
-        * may only be attached to a single host bundle.
-        * 
-        * @param bundle The bundle whose host bundle is to be returned.
-        * @return An array containing the host bundle or <code>null</code> if 
the
-        *         bundle does not have a host bundle.
+        * Returns the host bundles to which the specified fragment bundle is
+        * attached.
+        * 
+        * @param bundle The fragment bundle whose host bundles are to be 
returned.
+        * @return An array containing the host bundles to which the specified
+        *         fragment is attached or <code>null</code> if the specified 
bundle
+        *         is not a fragment or is not attached to any host bundles.
+        * @throws IllegalArgumentException If the specified 
<code>Bundle</code> was
+        *         not created by the same framework instance that registered 
this
+        *         <code>PackageAdmin</code> service.
         * @since 1.2
         */
        public Bundle[] getHosts(Bundle bundle);
@@ -241,7 +254,8 @@
         * @param clazz The class object from which to locate the bundle.
         * @return The bundle from which the specified class is loaded or
         *         <code>null</code> if the class was not loaded by a bundle 
class
-        *         loader.
+        *         loader created by the same framework instance that registered
+        *         this <code>PackageAdmin</code> service.
         * @since 1.2
         */
        public Bundle getBundle(Class clazz);
@@ -272,6 +286,9 @@
         * 
         * @param bundle The bundle for which to return the special type.
         * @return The special type of the bundle.
+        * @throws IllegalArgumentException If the specified 
<code>Bundle</code> was
+        *         not created by the same framework instance that registered 
this
+        *         <code>PackageAdmin</code> service.
         * @since 1.2
         */
        public int getBundleType(Bundle bundle);

Modified: 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/packageadmin/RequiredBundle.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/org.osgi.core/src/main/java/org/osgi/service/packageadmin/RequiredBundle.java?rev=782737&r1=782736&r2=782737&view=diff
==============================================================================
--- 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/packageadmin/RequiredBundle.java
 (original)
+++ 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/packageadmin/RequiredBundle.java
 Mon Jun  8 19:31:06 2009
@@ -1,7 +1,5 @@
 /*
- * $Header: 
/cvshome/build/org.osgi.service.packageadmin/src/org/osgi/service/packageadmin/RequiredBundle.java,v
 1.11 2006/06/16 16:31:49 hargrave Exp $
- * 
- * Copyright (c) OSGi Alliance (2004, 2006). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2008). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -44,7 +42,8 @@
  * and <code>getRequiringBundles()</code> return <code>null</code>.
  * 
  * @since 1.2
- * @version $Revision: 1.11 $
+ * @ThreadSafe
+ * @version $Revision: 5673 $
  */
 public interface RequiredBundle {
        /**
@@ -72,7 +71,8 @@
         * 
         * @return An array of bundles currently requiring this required 
bundle, or
         *         <code>null</code> if this <code>RequiredBundle</code> object
-        *         has become stale.
+        *         has become stale. The array will be empty if no bundles 
require
+        *         this required package.
         */
        public Bundle[] getRequiringBundles();
 
@@ -89,7 +89,7 @@
         * Returns <code>true</code> if the bundle associated with this
         * <code>RequiredBundle</code> object has been updated or uninstalled.
         * 
-        * @return <code>true</code> if the reqiured bundle has been updated or
+        * @return <code>true</code> if the required bundle has been updated or
         *         uninstalled, or if the <code>RequiredBundle</code> object has
         *         become stale; <code>false</code> otherwise.
         */

Added: 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/packageadmin/package.html
URL: 
http://svn.apache.org/viewvc/felix/trunk/org.osgi.core/src/main/java/org/osgi/service/packageadmin/package.html?rev=782737&view=auto
==============================================================================
--- 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/packageadmin/package.html
 (added)
+++ 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/packageadmin/package.html
 Mon Jun  8 19:31:06 2009
@@ -0,0 +1,11 @@
+<!-- $Revision: 6204 $ -->
+<BODY>
+<p>Package Admin Package Version 1.2.
+<p>Bundles wishing to use this package must list the package
+in the Import-Package header of the bundle's manifest.
+For example:
+<pre>
+Import-Package: org.osgi.service.packageadmin; version=&quot;[1.2,2.0)&quot;
+</pre>
+</BODY>
+

Added: 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/packageadmin/packageinfo
URL: 
http://svn.apache.org/viewvc/felix/trunk/org.osgi.core/src/main/java/org/osgi/service/packageadmin/packageinfo?rev=782737&view=auto
==============================================================================
--- 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/packageadmin/packageinfo
 (added)
+++ 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/packageadmin/packageinfo
 Mon Jun  8 19:31:06 2009
@@ -0,0 +1 @@
+version 1.2

Modified: 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/permissionadmin/PermissionAdmin.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/org.osgi.core/src/main/java/org/osgi/service/permissionadmin/PermissionAdmin.java?rev=782737&r1=782736&r2=782737&view=diff
==============================================================================
--- 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/permissionadmin/PermissionAdmin.java
 (original)
+++ 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/permissionadmin/PermissionAdmin.java
 Mon Jun  8 19:31:06 2009
@@ -1,7 +1,5 @@
 /*
- * $Header: 
/cvshome/build/org.osgi.service.permissionadmin/src/org/osgi/service/permissionadmin/PermissionAdmin.java,v
 1.12 2006/06/16 16:31:44 hargrave Exp $
- * 
- * Copyright (c) OSGi Alliance (2001, 2006). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,39 +22,41 @@
  * in the OSGi environment.
  * <p>
  * Access to the Permission Admin service is protected by corresponding
- * <code>ServicePermission</code>. In addition <code>AdminPermission</code> is
- * required to actually set permissions.
+ * <code>ServicePermission</code>. In addition <code>AdminPermission</code>
+ * is required to actually set permissions.
  * 
  * <p>
  * Bundle permissions are managed using a permission table. A bundle's location
  * serves as the key into this permission table. The value of a table entry is
- * the set of permissions (of type <code>PermissionInfo</code>) granted to the
- * bundle named by the given location. A bundle may have an entry in the
+ * the set of permissions (of type <code>PermissionInfo</code>) granted to
+ * the bundle named by the given location. A bundle may have an entry in the
  * permission table prior to being installed in the Framework.
  * 
  * <p>
- * The permissions specified in <code>setDefaultPermissions</code> are used as 
the
- * default permissions which are granted to all bundles that do not have an
+ * The permissions specified in <code>setDefaultPermissions</code> are used as
+ * the default permissions which are granted to all bundles that do not have an
  * entry in the permission table.
  * 
  * <p>
  * Any changes to a bundle's permissions in the permission table will take
- * effect no later than when bundle's 
<code>java.security.ProtectionDomain</code>
- * is next involved in a permission check, and will be made persistent.
+ * effect no later than when bundle's
+ * <code>java.security.ProtectionDomain</code> is next involved in a
+ * permission check, and will be made persistent.
  * 
  * <p>
  * Only permission classes on the system classpath or from an exported package
  * are considered during a permission check. Additionally, only permission
- * classes that are subclasses of <code>java.security.Permission</code> and 
define
- * a 2-argument constructor that takes a <i>name </i> string and an <i>actions
- * </i> string can be used.
+ * classes that are subclasses of <code>java.security.Permission</code> and
+ * define a 2-argument constructor that takes a <i>name </i> string and an
+ * <i>actions </i> string can be used.
  * <p>
  * Permissions implicitly granted by the Framework (for example, a bundle's
  * permission to access its persistent storage area) cannot be changed, and are
- * not reflected in the permissions returned by <code>getPermissions</code> and
- * <code>getDefaultPermissions</code>.
+ * not reflected in the permissions returned by <code>getPermissions</code>
+ * and <code>getDefaultPermissions</code>.
  * 
- * @version $Revision: 1.12 $
+ * @ThreadSafe
+ * @version $Revision: 5673 $
  */
 public interface PermissionAdmin {
        /**
@@ -66,8 +66,8 @@
         *        returned.
         * 
         * @return The permissions assigned to the bundle with the specified
-        *         location, or <code>null</code> if that bundle has not been 
assigned
-        *         any permissions.
+        *         location, or <code>null</code> if that bundle has not been
+        *         assigned any permissions.
         */
        PermissionInfo[] getPermissions(String location);
 
@@ -77,10 +77,11 @@
         * 
         * @param location The location of the bundle that will be assigned the
         *        permissions.
-        * @param permissions The permissions to be assigned, or 
<code>null</code> if
-        *        the specified location is to be removed from the permission 
table.
+        * @param permissions The permissions to be assigned, or 
<code>null</code>
+        *        if the specified location is to be removed from the permission
+        *        table.
         * @throws SecurityException If the caller does not have
-        *            <code>AllPermission</code>.
+        *         <code>AllPermission</code>.
         */
        void setPermissions(String location, PermissionInfo[] permissions);
 
@@ -115,7 +116,7 @@
         * @param permissions The default permissions, or <code>null</code> if 
the
         *        default permissions are to be removed from the permission 
table.
         * @throws SecurityException If the caller does not have
-        *            <code>AllPermission</code>.
+        *         <code>AllPermission</code>.
         */
        void setDefaultPermissions(PermissionInfo[] permissions);
 }

Modified: 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/permissionadmin/PermissionInfo.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/org.osgi.core/src/main/java/org/osgi/service/permissionadmin/PermissionInfo.java?rev=782737&r1=782736&r2=782737&view=diff
==============================================================================
--- 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/permissionadmin/PermissionInfo.java
 (original)
+++ 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/permissionadmin/PermissionInfo.java
 Mon Jun  8 19:31:06 2009
@@ -1,7 +1,5 @@
 /*
- * $Header: 
/cvshome/build/org.osgi.service.permissionadmin/src/org/osgi/service/permissionadmin/PermissionInfo.java,v
 1.16 2006/06/16 16:31:44 hargrave Exp $
- * 
- * Copyright (c) OSGi Alliance (2001, 2006). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2009). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,8 +22,8 @@
  * <p>
  * This class encapsulates three pieces of information: a Permission <i>type
  * </i> (class name), which must be a subclass of
- * <code>java.security.Permission</code>, and the <i>name </i> and <i>actions
- * </i> arguments passed to its constructor.
+ * <code>java.security.Permission</code>, and the <i>name</i> and 
<i>actions</i>
+ * arguments passed to its constructor.
  * 
  * <p>
  * In order for a permission represented by a <code>PermissionInfo</code> to be
@@ -35,22 +33,23 @@
  * <code>PermissionInfo</code> may be delayed until the package containing its
  * Permission class has been exported by a bundle.
  * 
- * @version $Revision: 1.16 $
+ * @Immutable
+ * @version $Revision: 6492 $
  */
 public class PermissionInfo {
-       private String  type;
-       private String  name;
-       private String  actions;
+       private final String    type;
+       private final String    name;
+       private final String    actions;
 
        /**
-        * Constructs a <code>PermissionInfo</code> from the specified type, 
name, and
-        * actions.
+        * Constructs a <code>PermissionInfo</code> from the specified type, 
name,
+        * and actions.
         * 
         * @param type The fully qualified class name of the permission 
represented
         *        by this <code>PermissionInfo</code>. The class must be a 
subclass
         *        of <code>java.security.Permission</code> and must define a
-        *        2-argument constructor that takes a <i>name </i> string and an
-        *        <i>actions </i> string.
+        *        2-argument constructor that takes a <i>name</i> string and an
+        *        <i>actions</i> string.
         * 
         * @param name The permission name that will be passed as the first 
argument
         *        to the constructor of the <code>Permission</code> class 
identified
@@ -60,10 +59,9 @@
         *        argument to the constructor of the <code>Permission</code> 
class
         *        identified by <code>type</code>.
         * 
-        * @throws java.lang.NullPointerException if <code>type</code> is
-        *            <code>null</code>.
-        * @throws java.lang.IllegalArgumentException if <code>action</code> is 
not
-        *            <code>null</code> and <code>name</code> is 
<code>null</code>.
+        * @throws NullPointerException If <code>type</code> is 
<code>null</code>.
+        * @throws IllegalArgumentException If <code>action</code> is not
+        *         <code>null</code> and <code>name</code> is <code>null</code>.
         */
        public PermissionInfo(String type, String name, String actions) {
                this.type = type;
@@ -78,15 +76,15 @@
        }
 
        /**
-        * Constructs a <code>PermissionInfo</code> object from the specified 
encoded
-        * <code>PermissionInfo</code> string. White space in the encoded
+        * Constructs a <code>PermissionInfo</code> object from the specified
+        * encoded <code>PermissionInfo</code> string. White space in the 
encoded
         * <code>PermissionInfo</code> string is ignored.
         * 
         * 
         * @param encodedPermission The encoded <code>PermissionInfo</code>.
         * @see #getEncoded
-        * @throws java.lang.IllegalArgumentException If the 
-        *            <code>encodedPermission</code> is not properly formatted.
+        * @throws IllegalArgumentException If the specified
+        *         <code>encodedPermission</code> is not properly formatted.
         */
        public PermissionInfo(String encodedPermission) {
                if (encodedPermission == null) {
@@ -95,20 +93,22 @@
                if (encodedPermission.length() == 0) {
                        throw new IllegalArgumentException("empty encoded 
permission");
                }
+               String parsedType = null;
+               String parsedName = null;
+               String parsedActions = null;
                try {
                        char[] encoded = encodedPermission.toCharArray();
                        int length = encoded.length;
                        int pos = 0;
-                       
+
                        /* skip whitespace */
                        while (Character.isWhitespace(encoded[pos])) {
                                pos++;
                        }
-                       
+
                        /* the first character must be '(' */
                        if (encoded[pos] != '(') {
-                               throw new IllegalArgumentException(
-                                               "expecting open parenthesis");
+                               throw new IllegalArgumentException("expecting 
open parenthesis");
                        }
                        pos++;
 
@@ -116,22 +116,23 @@
                        while (Character.isWhitespace(encoded[pos])) {
                                pos++;
                        }
-                       
+
                        /* type is not quoted or encoded */
                        int begin = pos;
-                       while (!Character.isWhitespace(encoded[pos]) && 
(encoded[pos] != ')')) {
+                       while (!Character.isWhitespace(encoded[pos])
+                                       && (encoded[pos] != ')')) {
                                pos++;
                        }
                        if (pos == begin || encoded[begin] == '"') {
                                throw new IllegalArgumentException("expecting 
type");
                        }
-                       this.type = new String(encoded, begin, pos - begin);
-                       
+                       parsedType = new String(encoded, begin, pos - begin);
+
                        /* skip whitespace */
                        while (Character.isWhitespace(encoded[pos])) {
                                pos++;
                        }
-                       
+
                        /* type may be followed by name which is quoted and 
encoded */
                        if (encoded[pos] == '"') {
                                pos++;
@@ -142,7 +143,7 @@
                                        }
                                        pos++;
                                }
-                               this.name = unescapeString(encoded, begin, pos);
+                               parsedName = unescapeString(encoded, begin, 
pos);
                                pos++;
 
                                if (Character.isWhitespace(encoded[pos])) {
@@ -150,8 +151,11 @@
                                        while 
(Character.isWhitespace(encoded[pos])) {
                                                pos++;
                                        }
-                                       
-                                       /* name may be followed by actions 
which is quoted and encoded */
+
+                                       /*
+                                        * name may be followed by actions 
which is quoted and
+                                        * encoded
+                                        */
                                        if (encoded[pos] == '"') {
                                                pos++;
                                                begin = pos;
@@ -161,7 +165,7 @@
                                                        }
                                                        pos++;
                                                }
-                                               this.actions = 
unescapeString(encoded, begin, pos);
+                                               parsedActions = 
unescapeString(encoded, begin, pos);
                                                pos++;
 
                                                /* skip whitespace */
@@ -171,7 +175,7 @@
                                        }
                                }
                        }
-                       
+
                        /* the final character must be ')' */
                        char c = encoded[pos];
                        pos++;
@@ -179,12 +183,17 @@
                                pos++;
                        }
                        if ((c != ')') || (pos != length)) {
-                               throw new IllegalArgumentException("expecting 
close parenthesis");
+                               throw new IllegalArgumentException(
+                                               "expecting close parenthesis");
                        }
                }
                catch (ArrayIndexOutOfBoundsException e) {
                        throw new IllegalArgumentException("parsing terminated 
abruptly");
                }
+
+               type = parsedType;
+               name = parsedName;
+               actions = parsedActions;
        }
 
        /**
@@ -210,15 +219,17 @@
         * (type &quot;name&quot; &quot;actions&quot;)
         * </pre>
         * 
-        * where <i>name</i> and <i>actions</i> are strings that are encoded for
-        * proper parsing. Specifically, the <code>"</code>,<code>\</code>, 
carriage
-        * return, and linefeed characters are escaped using <code>\"</code>,
-        * <code>\\</code>,<code>\r</code>, and <code>\n</code>, respectively.
+        * where <i>name</i> and <i>actions</i> are strings that must be 
encoded for
+        * proper parsing. Specifically, the <code>&quot;</code>,<code>\</code>,
+        * carriage return, and line feed characters must be escaped using
+        * <code>\&quot;</code>, <code>\\</code>,<code>\r</code>, and
+        * <code>\n</code>, respectively.
         * 
         * <p>
-        * The encoded string contains no leading or trailing whitespace
-        * characters. A single space character is used between <i>type</i> and 
-        * &quot;<i>name</i>&quot; and between &quot;<i>name</i>&quot; and 
&quot;<i>actions</i>&quot;.
+        * The encoded string contains no leading or trailing whitespace 
characters.
+        * A single space character is used between <i>type</i> and
+        * &quot;<i>name</i>&quot; and between &quot;<i>name</i>&quot; and
+        * &quot;<i>actions</i>&quot;.
         * 
         * @return The string encoding of this <code>PermissionInfo</code>.
         */
@@ -244,9 +255,9 @@
        }
 
        /**
-        * Returns the string representation of this 
<code>PermissionInfo</code>. The
-        * string is created by calling the <code>getEncoded</code> method on 
this
-        * <code>PermissionInfo</code>.
+        * Returns the string representation of this 
<code>PermissionInfo</code>.
+        * The string is created by calling the <code>getEncoded</code> method 
on
+        * this <code>PermissionInfo</code>.
         * 
         * @return The string representation of this 
<code>PermissionInfo</code>.
         */
@@ -270,8 +281,8 @@
         * <code>PermissionInfo</code>.
         * 
         * @return The name of the permission represented by this
-        *         <code>PermissionInfo</code>, or <code>null</code> if the 
permission
-        *         does not have a name.
+        *         <code>PermissionInfo</code>, or <code>null</code> if the
+        *         permission does not have a name.
         */
        public final String getName() {
                return name;
@@ -282,8 +293,8 @@
         * <code>PermissionInfo</code>.
         * 
         * @return The actions of the permission represented by this
-        *         <code>PermissionInfo</code>, or <code>null</code> if the 
permission
-        *         does not have any actions associated with it.
+        *         <code>PermissionInfo</code>, or <code>null</code> if the
+        *         permission does not have any actions associated with it.
         */
        public final String getActions() {
                return actions;
@@ -297,9 +308,10 @@
         * 
         * @param obj The object to test for equality with this
         *        <code>PermissionInfo</code> object.
-        * @return <code>true</code> if <code>obj</code> is a 
<code>PermissionInfo</code>,
-        *         and has the same type, name and actions as this
-        *         <code>PermissionInfo</code> object; <code>false</code> 
otherwise.
+        * @return <code>true</code> if <code>obj</code> is a
+        *         <code>PermissionInfo</code>, and has the same type, name and
+        *         actions as this <code>PermissionInfo</code> object;
+        *         <code>false</code> otherwise.
         */
        public boolean equals(Object obj) {
                if (obj == this) {
@@ -315,8 +327,7 @@
                }
                if (name != null) {
                        if (actions != null) {
-                               return name.equals(other.name) && actions
-                                               .equals(other.actions);
+                               return name.equals(other.name) && 
actions.equals(other.actions);
                        }
                        else {
                                return name.equals(other.name);
@@ -333,14 +344,14 @@
         * @return A hash code value for this object.
         */
        public int hashCode() {
-               int hash = type.hashCode();
+               int h = 31 * 17 + type.hashCode();
                if (name != null) {
-                       hash ^= name.hashCode();
+                       h = 31 * h + name.hashCode();
                        if (actions != null) {
-                               hash ^= actions.hashCode();
+                               h = 31 * h + actions.hashCode();
                        }
                }
-               return hash;
+               return h;
        }
 
        /**
@@ -400,7 +411,7 @@
                        }
                        output.append(c);
                }
-               
+
                return output.toString();
        }
 }

Added: 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/permissionadmin/package.html
URL: 
http://svn.apache.org/viewvc/felix/trunk/org.osgi.core/src/main/java/org/osgi/service/permissionadmin/package.html?rev=782737&view=auto
==============================================================================
--- 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/permissionadmin/package.html
 (added)
+++ 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/permissionadmin/package.html
 Mon Jun  8 19:31:06 2009
@@ -0,0 +1,11 @@
+<!-- $Revision: 6204 $ -->
+<BODY>
+<p>Permission Admin Package Version 1.2.
+<p>Bundles wishing to use this package must list the package
+in the Import-Package header of the bundle's manifest.
+For example:
+<pre>
+Import-Package: org.osgi.service.permissionadmin; version=&quot;[1.2,2.0)&quot;
+</pre>
+</BODY>
+

Added: 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/permissionadmin/packageinfo
URL: 
http://svn.apache.org/viewvc/felix/trunk/org.osgi.core/src/main/java/org/osgi/service/permissionadmin/packageinfo?rev=782737&view=auto
==============================================================================
--- 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/permissionadmin/packageinfo
 (added)
+++ 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/permissionadmin/packageinfo
 Mon Jun  8 19:31:06 2009
@@ -0,0 +1 @@
+version 1.2

Modified: 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/startlevel/StartLevel.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/org.osgi.core/src/main/java/org/osgi/service/startlevel/StartLevel.java?rev=782737&r1=782736&r2=782737&view=diff
==============================================================================
--- 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/startlevel/StartLevel.java
 (original)
+++ 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/startlevel/StartLevel.java
 Mon Jun  8 19:31:06 2009
@@ -1,7 +1,5 @@
 /*
- * $Header: 
/cvshome/build/org.osgi.service.startlevel/src/org/osgi/service/startlevel/StartLevel.java,v
 1.19 2007/02/09 03:20:24 hargrave Exp $
- * 
- * Copyright (c) OSGi Alliance (2002, 2007). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2009). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -68,7 +66,8 @@
  * The StartLevel service can be used by management bundles to alter the active
  * start level of the framework.
  * 
- * @version $Revision: 1.19 $
+ * @ThreadSafe
+ * @version $Revision: 6747 $
  */
 public interface StartLevel {
        /**
@@ -152,7 +151,9 @@
         * @param bundle The target bundle.
         * @return The start level value of the specified Bundle.
         * @throws java.lang.IllegalArgumentException If the specified bundle 
has
-        *         been uninstalled.
+        *         been uninstalled or if the specified bundle was not created 
by
+        *         the same framework instance that registered this
+        *         <code>StartLevel</code> service.
         */
        public int getBundleStartLevel(Bundle bundle);
 
@@ -183,11 +184,13 @@
         * @param bundle The target bundle.
         * @param startlevel The new start level for the specified Bundle.
         * @throws IllegalArgumentException If the specified bundle has been
-        *         uninstalled or if the specified start level is less than or 
equal
-        *         to zero, or the specified bundle is the system bundle.
+        *         uninstalled, or if the specified start level is less than or
+        *         equal to zero, or if the specified bundle is the system 
bundle,
+        *         or if the specified bundle was not created by the same 
framework
+        *         instance that registered this <code>StartLevel</code> 
service.
         * @throws SecurityException If the caller does not have
-        *         <code>AdminPermission[bundle,EXECUTE]</code> and the Java
-        *         runtime environment supports permissions.
+        *         <code>AdminPermission[bundle,EXECUTE]</code> and the Java 
runtime
+        *         environment supports permissions.
         */
        public void setBundleStartLevel(Bundle bundle, int startlevel);
 
@@ -218,7 +221,7 @@
         * been called to assign a different initial bundle start level value.
         * 
         * <p>
-        * Thie method does not change the start level values of installed 
bundles.
+        * This method does not change the start level values of installed 
bundles.
         * 
         * @param startlevel The initial start level for newly installed 
bundles.
         * @throws IllegalArgumentException If the specified start level is less
@@ -241,7 +244,9 @@
         *         indicates the bundle is to be started. <code>false</code>
         *         otherwise.
         * @throws java.lang.IllegalArgumentException If the specified bundle 
has
-        *         been uninstalled.
+        *         been uninstalled or if the specified bundle was not created 
by
+        *         the same framework instance that registered this
+        *         <code>StartLevel</code> service.
         * @see Bundle#START_TRANSIENT
         */
        public boolean isBundlePersistentlyStarted(Bundle bundle);
@@ -254,11 +259,13 @@
         * activation policy is to be used when the bundle is started.
         * 
         * @param bundle The bundle whose autostart setting is to be examined.
-        * @return <code>true</code> if the bundle’s autostart setting 
indicates
-        *         the activation policy declared in the manifest must be used.
+        * @return <code>true</code> if the bundle's autostart setting 
indicates the
+        *         activation policy declared in the manifest must be used.
         *         <code>false</code> if the bundle must be eagerly activated.
         * @throws java.lang.IllegalArgumentException If the specified bundle 
has
-        *         been uninstalled.
+        *         been uninstalled or if the specified bundle was not created 
by
+        *         the same framework instance that registered this
+        *         <code>StartLevel</code> service.
         * @since 1.1
         * @see Bundle#START_ACTIVATION_POLICY
         */

Added: 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/startlevel/package.html
URL: 
http://svn.apache.org/viewvc/felix/trunk/org.osgi.core/src/main/java/org/osgi/service/startlevel/package.html?rev=782737&view=auto
==============================================================================
--- 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/startlevel/package.html
 (added)
+++ 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/startlevel/package.html
 Mon Jun  8 19:31:06 2009
@@ -0,0 +1,11 @@
+<!-- $Revision: 6204 $ -->
+<BODY>
+<p>Start Level Package Version 1.1.
+<p>Bundles wishing to use this package must list the package
+in the Import-Package header of the bundle's manifest.
+For example:
+<pre>
+Import-Package: org.osgi.service.startlevel; version=&quot;[1.1,2.0)&quot;
+</pre>
+</BODY>
+

Added: 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/startlevel/packageinfo
URL: 
http://svn.apache.org/viewvc/felix/trunk/org.osgi.core/src/main/java/org/osgi/service/startlevel/packageinfo?rev=782737&view=auto
==============================================================================
--- 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/startlevel/packageinfo 
(added)
+++ 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/startlevel/packageinfo 
Mon Jun  8 19:31:06 2009
@@ -0,0 +1 @@
+version 1.1

Modified: 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/AbstractURLStreamHandlerService.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/AbstractURLStreamHandlerService.java?rev=782737&r1=782736&r2=782737&view=diff
==============================================================================
--- 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/AbstractURLStreamHandlerService.java
 (original)
+++ 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/AbstractURLStreamHandlerService.java
 Mon Jun  8 19:31:06 2009
@@ -1,7 +1,5 @@
 /*
- * $Header: 
/cvshome/build/org.osgi.service.url/src/org/osgi/service/url/AbstractURLStreamHandlerService.java,v
 1.8 2006/06/16 16:31:31 hargrave Exp $
- * 
- * Copyright (c) OSGi Alliance (2002, 2006). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,15 +19,16 @@
 import java.net.*;
 
 /**
- * Abstract implementation of the <code>URLStreamHandlerService</code> 
interface.
- * All the methods simply invoke the corresponding methods on
- * <code>java.net.URLStreamHandler</code> except for <code>parseURL</code> and
- * <code>setURL</code>, which use the <code>URLStreamHandlerSetter</code>
+ * Abstract implementation of the <code>URLStreamHandlerService</code>
+ * interface. All the methods simply invoke the corresponding methods on
+ * <code>java.net.URLStreamHandler</code> except for <code>parseURL</code>
+ * and <code>setURL</code>, which use the <code>URLStreamHandlerSetter</code>
  * parameter. Subclasses of this abstract class should not need to override the
  * <code>setURL</code> and <code>parseURL(URLStreamHandlerSetter,...)</code>
  * methods.
  * 
- * @version $Revision: 1.8 $
+ * @ThreadSafe
+ * @version $Revision: 5673 $
  */
 public abstract class AbstractURLStreamHandlerService extends URLStreamHandler
                implements URLStreamHandlerService {
@@ -43,7 +42,7 @@
         * The <code>URLStreamHandlerSetter</code> object passed to the parseURL
         * method.
         */
-       protected URLStreamHandlerSetter        realHandler;
+       protected volatile URLStreamHandlerSetter       realHandler;
 
        /**
         * Parse a URL using the <code>URLStreamHandlerSetter</code> object. 
This
@@ -51,8 +50,8 @@
         * <code>URLStreamHandlerSetter</code> object and then calls
         * <code>parseURL(URL,String,int,int)</code>.
         * 
-        * @param realHandler The object on which the <code>setURL</code> 
method must
-        *        be invoked for the specified URL.
+        * @param realHandler The object on which the <code>setURL</code> method
+        *        must be invoked for the specified URL.
         * @see "java.net.URLStreamHandler.parseURL"
         */
        public void parseURL(URLStreamHandlerSetter realHandler, URL u,

Modified: 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/URLConstants.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/URLConstants.java?rev=782737&r1=782736&r2=782737&view=diff
==============================================================================
--- 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/URLConstants.java 
(original)
+++ 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/URLConstants.java 
Mon Jun  8 19:31:06 2009
@@ -1,7 +1,5 @@
 /*
- * $Header: 
/cvshome/build/org.osgi.service.url/src/org/osgi/service/url/URLConstants.java,v
 1.10 2006/12/01 06:38:45 hargrave Exp $
- * 
- * Copyright (c) OSGi Alliance (2002, 2006). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,23 +22,23 @@
  * services.
  * 
  * <p>
- * The values associated with these keys are of type 
<code>java.lang.String[]</code>
- * or <code>java.lang.String</code>,
- * unless otherwise indicated.
+ * The values associated with these keys are of type
+ * <code>java.lang.String[]</code> or <code>java.lang.String</code>, unless
+ * otherwise indicated.
  * 
- * @version $Revision: 1.10 $
+ * @version $Revision: 5673 $
  */
 public interface URLConstants {
        /**
         * Service property naming the protocols serviced by a
-        * URLStreamHandlerService. The property's value is 
-        * a protocol name or an array of protocol names.
+        * URLStreamHandlerService. The property's value is a protocol name or 
an
+        * array of protocol names.
         */
        public static final String      URL_HANDLER_PROTOCOL    = 
"url.handler.protocol";
        /**
         * Service property naming the MIME types serviced by a
-        * java.net.ContentHandler. The property's value is a
-        * MIME type or an array of MIME types.
+        * java.net.ContentHandler. The property's value is a MIME type or an 
array
+        * of MIME types.
         */
        public static final String      URL_CONTENT_MIMETYPE    = 
"url.content.mimetype";
 }

Modified: 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/URLStreamHandlerService.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/URLStreamHandlerService.java?rev=782737&r1=782736&r2=782737&view=diff
==============================================================================
--- 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/URLStreamHandlerService.java
 (original)
+++ 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/URLStreamHandlerService.java
 Mon Jun  8 19:31:06 2009
@@ -1,7 +1,5 @@
 /*
- * $Header: 
/cvshome/build/org.osgi.service.url/src/org/osgi/service/url/URLStreamHandlerService.java,v
 1.9 2006/07/11 00:53:59 hargrave Exp $
- * 
- * Copyright (c) OSGi Alliance (2002, 2006). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,17 +23,19 @@
  * <code>java.net.URLStreamHandler</code> methods.
  * <p>
  * The important differences between this interface and the
- * <code>URLStreamHandler</code> class are that the <code>setURL</code> method 
is
- * absent and the <code>parseURL</code> method takes a
+ * <code>URLStreamHandler</code> class are that the <code>setURL</code>
+ * method is absent and the <code>parseURL</code> method takes a
  * {...@link URLStreamHandlerSetter} object as the first argument. Classes
  * implementing this interface must call the <code>setURL</code> method on the
- * <code>URLStreamHandlerSetter</code> object received in the 
<code>parseURL</code>
- * method instead of <code>URLStreamHandler.setURL</code> to avoid a
+ * <code>URLStreamHandlerSetter</code> object received in the
+ * <code>parseURL</code> method instead of
+ * <code>URLStreamHandler.setURL</code> to avoid a
  * <code>SecurityException</code>.
  * 
  * @see AbstractURLStreamHandlerService
  * 
- * @version $Revision: 1.9 $
+ * @ThreadSafe
+ * @version $Revision: 5673 $
  */
 public interface URLStreamHandlerService {
        /**
@@ -45,11 +45,11 @@
 
        /**
         * Parse a URL. This method is called by the 
<code>URLStreamHandler</code>
-        * proxy, instead of <code>java.net.URLStreamHandler.parseURL</code>, 
passing
-        * a <code>URLStreamHandlerSetter</code> object.
+        * proxy, instead of <code>java.net.URLStreamHandler.parseURL</code>,
+        * passing a <code>URLStreamHandlerSetter</code> object.
         * 
-        * @param realHandler The object on which <code>setURL</code> must be 
invoked
-        *        for this URL.
+        * @param realHandler The object on which <code>setURL</code> must be
+        *        invoked for this URL.
         * @see "java.net.URLStreamHandler.parseURL"
         */
        public void parseURL(URLStreamHandlerSetter realHandler, URL u,

Modified: 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/URLStreamHandlerSetter.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/URLStreamHandlerSetter.java?rev=782737&r1=782736&r2=782737&view=diff
==============================================================================
--- 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/URLStreamHandlerSetter.java
 (original)
+++ 
felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/URLStreamHandlerSetter.java
 Mon Jun  8 19:31:06 2009
@@ -1,7 +1,5 @@
 /*
- * $Header: 
/cvshome/build/org.osgi.service.url/src/org/osgi/service/url/URLStreamHandlerSetter.java,v
 1.9 2006/07/11 00:53:59 hargrave Exp $
- * 
- * Copyright (c) OSGi Alliance (2002, 2006). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,16 +20,19 @@
 
 /**
  * Interface used by <code>URLStreamHandlerService</code> objects to call the
- * <code>setURL</code> method on the proxy <code>URLStreamHandler</code> 
object.
+ * <code>setURL</code> method on the proxy <code>URLStreamHandler</code>
+ * object.
  * 
  * <p>
  * Objects of this type are passed to the
- * {...@link URLStreamHandlerService#parseURL} method. Invoking the 
<code>setURL</code>
- * method on the <code>URLStreamHandlerSetter</code> object will invoke the
- * <code>setURL</code> method on the proxy <code>URLStreamHandler</code> 
object that
- * is actually registered with <code>java.net.URL</code> for the protocol.
+ * {...@link URLStreamHandlerService#parseURL} method. Invoking the
+ * <code>setURL</code> method on the <code>URLStreamHandlerSetter</code>
+ * object will invoke the <code>setURL</code> method on the proxy
+ * <code>URLStreamHandler</code> object that is actually registered with
+ * <code>java.net.URL</code> for the protocol.
  * 
- * @version $Revision: 1.9 $
+ * @ThreadSafe
+ * @version $Revision: 5673 $
  */
 public interface URLStreamHandlerSetter {
        /**

Added: felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/package.html
URL: 
http://svn.apache.org/viewvc/felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/package.html?rev=782737&view=auto
==============================================================================
--- felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/package.html 
(added)
+++ felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/package.html 
Mon Jun  8 19:31:06 2009
@@ -0,0 +1,10 @@
+<!-- $Revision: 6204 $ -->
+<BODY>
+<p>URL Stream and Content Handlers Package Version 1.0.
+<p>Bundles wishing to use this package must list the package
+in the Import-Package header of the bundle's manifest.
+For example:
+<pre>
+Import-Package: org.osgi.service.url; version=&quot;[1.0,2.0)&quot;
+</pre>
+</BODY>

Added: felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/packageinfo
URL: 
http://svn.apache.org/viewvc/felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/packageinfo?rev=782737&view=auto
==============================================================================
--- felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/packageinfo 
(added)
+++ felix/trunk/org.osgi.core/src/main/java/org/osgi/service/url/packageinfo 
Mon Jun  8 19:31:06 2009
@@ -0,0 +1 @@
+version 1.0


Reply via email to