Return-Path: X-Original-To: apmail-felix-commits-archive@www.apache.org Delivered-To: apmail-felix-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 9C4609103 for ; Fri, 11 May 2012 20:19:51 +0000 (UTC) Received: (qmail 92571 invoked by uid 500); 11 May 2012 20:19:51 -0000 Delivered-To: apmail-felix-commits-archive@felix.apache.org Received: (qmail 92533 invoked by uid 500); 11 May 2012 20:19:51 -0000 Mailing-List: contact commits-help@felix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@felix.apache.org Delivered-To: mailing list commits@felix.apache.org Received: (qmail 92485 invoked by uid 99); 11 May 2012 20:19:51 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 11 May 2012 20:19:51 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 11 May 2012 20:19:34 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 76EB42388BA6 for ; Fri, 11 May 2012 20:19:11 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1337360 [4/7] - in /felix/trunk/framework: ./ src/main/java/org/apache/felix/framework/ src/main/java/org/apache/felix/framework/resolver/ src/main/java/org/apache/felix/framework/wiring/ src/main/java/org/osgi/framework/ src/main/java/org... Date: Fri, 11 May 2012 20:19:07 -0000 To: commits@felix.apache.org From: rickhall@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120511201911.76EB42388BA6@eris.apache.org> Modified: felix/trunk/framework/src/main/java/org/osgi/framework/ServiceEvent.java URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/osgi/framework/ServiceEvent.java?rev=1337360&r1=1337359&r2=1337360&view=diff ============================================================================== --- felix/trunk/framework/src/main/java/org/osgi/framework/ServiceEvent.java (original) +++ felix/trunk/framework/src/main/java/org/osgi/framework/ServiceEvent.java Fri May 11 20:19:02 2012 @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved. + * Copyright (c) OSGi Alliance (2000, 2012). 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,10 +22,9 @@ import java.util.EventObject; /** * An event from the Framework describing a service lifecycle change. *

- * {@code ServiceEvent} objects are delivered to - * {@code ServiceListener}s and {@code AllServiceListener}s when a - * change occurs in this service's lifecycle. A type code is used to identify - * the event type for future extendability. + * {@code ServiceEvent} objects are delivered to {@code ServiceListener}s and + * {@code AllServiceListener}s when a change occurs in this service's lifecycle. + * A type code is used to identify the event type for future extendability. * *

* OSGi Alliance reserves the right to extend the set of types. @@ -33,20 +32,20 @@ import java.util.EventObject; * @Immutable * @see ServiceListener * @see AllServiceListener - * @version $Id: 2b9458d90004411b6ca0cb4b361bc282b04c85eb $ + * @version $Id: 49e34e0ad5564d6f4ca0ab0053b272c22b9fb917 $ */ public class ServiceEvent extends EventObject { - static final long serialVersionUID = 8792901483909409299L; + static final long serialVersionUID = 8792901483909409299L; /** * Reference to the service that had a change occur in its lifecycle. */ - private final ServiceReference< ? > reference; + private final ServiceReference reference; /** * Type of service lifecycle change. */ - private final int type; + private final int type; /** * This service has been registered. @@ -56,7 +55,7 @@ public class ServiceEvent extends EventO * * @see BundleContext#registerService(String[],Object,Dictionary) */ - public final static int REGISTERED = 0x00000001; + public final static int REGISTERED = 0x00000001; /** * The properties of a registered service have been modified. @@ -64,9 +63,9 @@ public class ServiceEvent extends EventO * This event is synchronously delivered after the service * properties have been modified. * - * @see ServiceRegistration#setProperties + * @see ServiceRegistration#setProperties(Dictionary) */ - public final static int MODIFIED = 0x00000002; + public final static int MODIFIED = 0x00000002; /** * This service is in the process of being unregistered. @@ -75,16 +74,16 @@ public class ServiceEvent extends EventO * has completed unregistering. * *

- * If a bundle is using a service that is {@code UNREGISTERING}, the - * bundle should release its use of the service when it receives this event. - * If the bundle does not release its use of the service when it receives - * this event, the Framework will automatically release the bundle's use of - * the service while completing the service unregistration operation. + * If a bundle is using a service that is {@code UNREGISTERING}, the bundle + * should release its use of the service when it receives this event. If the + * bundle does not release its use of the service when it receives this + * event, the Framework will automatically release the bundle's use of the + * service while completing the service unregistration operation. * - * @see ServiceRegistration#unregister - * @see BundleContext#ungetService + * @see ServiceRegistration#unregister() + * @see BundleContext#ungetService(ServiceReference) */ - public final static int UNREGISTERING = 0x00000004; + public final static int UNREGISTERING = 0x00000004; /** * The properties of a registered service have been modified and the new @@ -92,23 +91,23 @@ public class ServiceEvent extends EventO *

* This event is synchronously delivered after the service * properties have been modified. This event is only delivered to listeners - * which were added with a non-{@code null} filter where the filter - * matched the service properties prior to the modification but the filter - * does not match the modified service properties. + * which were added with a non-{@code null} filter where the filter matched + * the service properties prior to the modification but the filter does not + * match the modified service properties. * - * @see ServiceRegistration#setProperties + * @see ServiceRegistration#setProperties(Dictionary) * @since 1.5 */ - public final static int MODIFIED_ENDMATCH = 0x00000008; + public final static int MODIFIED_ENDMATCH = 0x00000008; /** * Creates a new service event object. * * @param type The event type. - * @param reference A {@code ServiceReference} object to the service - * that had a lifecycle change. + * @param reference A {@code ServiceReference} object to the service that + * had a lifecycle change. */ - public ServiceEvent(int type, ServiceReference< ? > reference) { + public ServiceEvent(int type, ServiceReference reference) { super(reference); this.reference = reference; this.type = type; @@ -122,17 +121,17 @@ public class ServiceEvent extends EventO * * @return Reference to the service that had a lifecycle change. */ - public ServiceReference< ? > getServiceReference() { + public ServiceReference getServiceReference() { return reference; } /** * Returns the type of event. The event type values are: *

    - *
  • {@link #REGISTERED}
  • - *
  • {@link #MODIFIED}
  • - *
  • {@link #MODIFIED_ENDMATCH}
  • - *
  • {@link #UNREGISTERING}
  • + *
  • {@link #REGISTERED}
  • + *
  • {@link #MODIFIED}
  • + *
  • {@link #MODIFIED_ENDMATCH}
  • + *
  • {@link #UNREGISTERING}
  • *
* * @return Type of service lifecycle change. Modified: felix/trunk/framework/src/main/java/org/osgi/framework/ServiceException.java URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/osgi/framework/ServiceException.java?rev=1337360&r1=1337359&r2=1337360&view=diff ============================================================================== --- felix/trunk/framework/src/main/java/org/osgi/framework/ServiceException.java (original) +++ felix/trunk/framework/src/main/java/org/osgi/framework/ServiceException.java Fri May 11 20:19:02 2012 @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2007, 2010). All Rights Reserved. + * Copyright (c) OSGi Alliance (2007, 2012). 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. @@ -20,18 +20,17 @@ package org.osgi.framework; * A service exception used to indicate that a service problem occurred. * *

- * A {@code ServiceException} object is created by the Framework or - * service implementation to denote an exception condition in the service. A - * type code is used to identify the exception type for future extendability. - * Service implementations may also create subclasses of - * {@code ServiceException}. When subclassing, the subclass should set - * the type to {@link #SUBCLASSED} to indicate that - * {@code ServiceException} has been subclassed. + * A {@code ServiceException} object is created by the Framework or service + * implementation to denote an exception condition in the service. A type code + * is used to identify the exception type for future extendability. Service + * implementations may also create subclasses of {@code ServiceException}. When + * subclassing, the subclass should set the type to {@link #SUBCLASSED} to + * indicate that {@code ServiceException} has been subclassed. * *

* This exception conforms to the general purpose exception chaining mechanism. * - * @version $Id: 453b6021eed4543f754e20696b9f8b33a7e121ee $ + * @version $Id: 9f763412635f59585bb615cbc449fc7ab72b7103 $ * @since 1.5 */ @@ -67,7 +66,7 @@ public class ServiceException extends Ru /** * An error occurred invoking a remote service. */ - public static final int REMOTE = 5; + public static final int REMOTE = 5; /** * The service factory resulted in a recursive call to itself for the * requesting bundle. @@ -97,8 +96,8 @@ public class ServiceException extends Ru } /** - * Creates a {@code ServiceException} with the specified message, - * type and exception cause. + * Creates a {@code ServiceException} with the specified message, type and + * exception cause. * * @param msg The associated message. * @param type The type for this exception. @@ -110,8 +109,7 @@ public class ServiceException extends Ru } /** - * Creates a {@code ServiceException} with the specified message and - * type. + * Creates a {@code ServiceException} with the specified message and type. * * @param msg The message. * @param type The type for this exception. @@ -122,8 +120,8 @@ public class ServiceException extends Ru } /** - * Returns the type for this exception or {@code UNSPECIFIED} if the - * type was unspecified or unknown. + * Returns the type for this exception or {@code UNSPECIFIED} if the type + * was unspecified or unknown. * * @return The type of this exception. */ Modified: felix/trunk/framework/src/main/java/org/osgi/framework/ServiceFactory.java URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/osgi/framework/ServiceFactory.java?rev=1337360&r1=1337359&r2=1337360&view=diff ============================================================================== --- felix/trunk/framework/src/main/java/org/osgi/framework/ServiceFactory.java (original) +++ felix/trunk/framework/src/main/java/org/osgi/framework/ServiceFactory.java Fri May 11 20:19:02 2012 @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved. + * Copyright (c) OSGi Alliance (2000, 2012). 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. @@ -43,9 +43,9 @@ package org.osgi.framework; * concurrently call a {@code ServiceFactory}. * * @param Type of Service - * @see BundleContext#getService + * @see BundleContext#getService(ServiceReference) * @ThreadSafe - * @version $Id: 94cd1a0127aaad9beb484f557342a8fbd0be2322 $ + * @version $Id: 535776e702ec5ace54f577218ff8f7920741558b $ */ public interface ServiceFactory { @@ -85,7 +85,7 @@ public interface ServiceFactory { * requested service. * @return A service object that must be an instance of all * the classes named when the service was registered. - * @see BundleContext#getService + * @see BundleContext#getService(ServiceReference) */ public S getService(Bundle bundle, ServiceRegistration registration); @@ -108,8 +108,7 @@ public interface ServiceFactory { * @param service The service object returned by a previous call to the * {@link #getService(Bundle, ServiceRegistration) getService} * method. - * @see BundleContext#ungetService + * @see BundleContext#ungetService(ServiceReference) */ - public void ungetService(Bundle bundle, ServiceRegistration registration, - S service); + public void ungetService(Bundle bundle, ServiceRegistration registration, S service); } Modified: felix/trunk/framework/src/main/java/org/osgi/framework/ServiceListener.java URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/osgi/framework/ServiceListener.java?rev=1337360&r1=1337359&r2=1337360&view=diff ============================================================================== --- felix/trunk/framework/src/main/java/org/osgi/framework/ServiceListener.java (original) +++ felix/trunk/framework/src/main/java/org/osgi/framework/ServiceListener.java Fri May 11 20:19:02 2012 @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved. + * Copyright (c) OSGi Alliance (2000, 2012). 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. @@ -19,39 +19,37 @@ package org.osgi.framework; import java.util.EventListener; /** - * A {@code ServiceEvent} listener. {@code ServiceListener} is a - * listener interface that may be implemented by a bundle developer. When a + * A {@code ServiceEvent} listener. {@code ServiceListener} is a listener + * interface that may be implemented by a bundle developer. When a * {@code ServiceEvent} is fired, it is synchronously delivered to a - * {@code ServiceListener}. The Framework may deliver - * {@code ServiceEvent} objects to a {@code ServiceListener} out - * of order and may concurrently call and/or reenter a - * {@code ServiceListener}. + * {@code ServiceListener}. The Framework may deliver {@code ServiceEvent} + * objects to a {@code ServiceListener} out of order and may concurrently call + * and/or reenter a {@code ServiceListener}. * *

- * A {@code ServiceListener} object is registered with the Framework - * using the {@code BundleContext.addServiceListener} method. - * {@code ServiceListener} objects are called with a - * {@code ServiceEvent} object when a service is registered, modified, or - * is in the process of unregistering. + * A {@code ServiceListener} object is registered with the Framework using the + * {@code BundleContext.addServiceListener} method. {@code ServiceListener} + * objects are called with a {@code ServiceEvent} object when a service is + * registered, modified, or is in the process of unregistering. * *

- * {@code ServiceEvent} object delivery to {@code ServiceListener} - * objects is filtered by the filter specified when the listener was registered. - * If the Java Runtime Environment supports permissions, then additional - * filtering is done. {@code ServiceEvent} objects are only delivered to - * the listener if the bundle which defines the listener object's class has the - * appropriate {@code ServicePermission} to get the service using at - * least one of the named classes under which the service was registered. + * {@code ServiceEvent} object delivery to {@code ServiceListener} objects is + * filtered by the filter specified when the listener was registered. If the + * Java Runtime Environment supports permissions, then additional filtering is + * done. {@code ServiceEvent} objects are only delivered to the listener if the + * bundle which defines the listener object's class has the appropriate + * {@code ServicePermission} to get the service using at least one of the named + * classes under which the service was registered. * *

- * {@code ServiceEvent} object delivery to {@code ServiceListener} - * objects is further filtered according to package sources as defined in + * {@code ServiceEvent} object delivery to {@code ServiceListener} objects is + * further filtered according to package sources as defined in * {@link ServiceReference#isAssignableTo(Bundle, String)}. * * @see ServiceEvent * @see ServicePermission * @ThreadSafe - * @version $Id: d73f8e9b4babc8b53b5d1cbe7b17b732f54bb2a3 $ + * @version $Id: 601dfda6183ab7f18cd3916958a39734ea141c25 $ */ public interface ServiceListener extends EventListener { Modified: felix/trunk/framework/src/main/java/org/osgi/framework/ServicePermission.java URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/osgi/framework/ServicePermission.java?rev=1337360&r1=1337359&r2=1337360&view=diff ============================================================================== --- felix/trunk/framework/src/main/java/org/osgi/framework/ServicePermission.java (original) +++ felix/trunk/framework/src/main/java/org/osgi/framework/ServicePermission.java Fri May 11 20:19:02 2012 @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved. + * Copyright (c) OSGi Alliance (2000, 2012). 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. @@ -41,66 +41,64 @@ import java.util.Set; /** * A bundle's authority to register or get a service. *

    - *
  • The {@code register} action allows a bundle to register a service on - * the specified names. - *
  • The {@code get} action allows a bundle to detect a service and get - * it. + *
  • The {@code register} action allows a bundle to register a service on the + * specified names. + *
  • The {@code get} action allows a bundle to detect a service and get it. *
* Permission to get a service is required in order to detect events regarding * the service. Untrusted bundles should not be able to detect the presence of - * certain services unless they have the appropriate - * {@code ServicePermission} to get the specific service. + * certain services unless they have the appropriate {@code ServicePermission} + * to get the specific service. * * @ThreadSafe - * @version $Id: 1b6ee9543f4cbc16add8dc8c40dfa9a6dfee7aa2 $ + * @version $Id: 96438ad164d7f0f4273787226298bf8208cf0034 $ */ public final class ServicePermission extends BasicPermission { - static final long serialVersionUID = -7662148639076511574L; + static final long serialVersionUID = -7662148639076511574L; /** * The action string {@code get}. */ - public final static String GET = "get"; + public final static String GET = "get"; /** * The action string {@code register}. */ - public final static String REGISTER = "register"; + public final static String REGISTER = "register"; - private final static int ACTION_GET = 0x00000001; - private final static int ACTION_REGISTER = 0x00000002; - private final static int ACTION_ALL = ACTION_GET - | ACTION_REGISTER; - final static int ACTION_NONE = 0; + private final static int ACTION_GET = 0x00000001; + private final static int ACTION_REGISTER = 0x00000002; + private final static int ACTION_ALL = ACTION_GET | ACTION_REGISTER; + final static int ACTION_NONE = 0; /** * The actions mask. */ - transient int action_mask; + transient int action_mask; /** * The actions in canonical form. * * @serial */ - private volatile String actions = null; + private volatile String actions = null; /** * The service used by this ServicePermission. Must be null if not * constructed with a service. */ - transient final ServiceReference< ? > service; + transient final ServiceReference service; /** * The object classes for this ServicePermission. Must be null if not * constructed with a service. */ - transient final String[] objectClass; + transient final String[] objectClass; /** * If this ServicePermission was constructed with a filter, this holds a * Filter matching object used to evaluate the filter in implies. */ - transient Filter filter; + transient Filter filter; /** * This map holds the properties of the permission, used to match a filter @@ -112,13 +110,13 @@ public final class ServicePermission ext /** * True if constructed with a name and the name is "*" or ends with ".*". */ - private transient boolean wildcard; + private transient boolean wildcard; /** * If constructed with a name and the name ends with ".*", this contains the * name without the final "*". */ - private transient String prefix; + private transient String prefix; /** * Create a new ServicePermission. @@ -139,9 +137,9 @@ public final class ServicePermission ext * * * * - * For the {@code get} action, the name can also be a filter - * expression. The filter gives access to the service properties as well as - * the following attributes: + * For the {@code get} action, the name can also be a filter expression. The + * filter gives access to the service properties as well as the following + * attributes: *
    *
  • signer - A Distinguished Name chain used to sign the bundle * publishing the service. Wildcards in a DN are not matched according to @@ -159,33 +157,29 @@ public final class ServicePermission ext * Service properties names are case insensitive. * *

    - * There are two possible actions: {@code get} and - * {@code register}. The {@code get} permission allows the owner - * of this permission to obtain a service with this name. The - * {@code register} permission allows the bundle to register a service - * under that name. + * There are two possible actions: {@code get} and {@code register}. The + * {@code get} permission allows the owner of this permission to obtain a + * service with this name. The {@code register} permission allows the bundle + * to register a service under that name. * * @param name The service class name * @param actions {@code get},{@code register} (canonical order) * @throws IllegalArgumentException If the specified name is a filter - * expression and either the specified action is not - * {@code get} or the filter has an invalid syntax. + * expression and either the specified action is not {@code get} or + * the filter has an invalid syntax. */ public ServicePermission(String name, String actions) { this(name, parseActions(actions)); - if ((filter != null) - && ((action_mask & ACTION_ALL) != ACTION_GET)) { - throw new IllegalArgumentException( - "invalid action string for filter expression"); + if ((filter != null) && ((action_mask & ACTION_ALL) != ACTION_GET)) { + throw new IllegalArgumentException("invalid action string for filter expression"); } } /** - * Creates a new requested {@code ServicePermission} object to be used - * by code that must perform {@code checkPermission} for the - * {@code get} action. {@code ServicePermission} objects created - * with this constructor cannot be added to a {@code ServicePermission} - * permission collection. + * Creates a new requested {@code ServicePermission} object to be used by + * code that must perform {@code checkPermission} for the {@code get} + * action. {@code ServicePermission} objects created with this constructor + * cannot be added to a {@code ServicePermission} permission collection. * * @param reference The requested service. * @param actions The action {@code get}. @@ -193,12 +187,11 @@ public final class ServicePermission ext * {@code get} or reference is {@code null}. * @since 1.5 */ - public ServicePermission(ServiceReference< ? > reference, String actions) { + public ServicePermission(ServiceReference reference, String actions) { super(createName(reference)); setTransients(null, parseActions(actions)); this.service = reference; - this.objectClass = (String[]) reference - .getProperty(Constants.OBJECTCLASS); + this.objectClass = (String[]) reference.getProperty(Constants.OBJECTCLASS); if ((action_mask & ACTION_ALL) != ACTION_GET) { throw new IllegalArgumentException("invalid action string"); } @@ -210,7 +203,7 @@ public final class ServicePermission ext * @param reference ServiceReference to use to create permission name. * @return permission name. */ - private static String createName(ServiceReference< ? > reference) { + private static String createName(ServiceReference reference) { if (reference == null) { throw new IllegalArgumentException("reference must not be null"); } @@ -248,8 +241,7 @@ public final class ServicePermission ext String name = getName(); int l = name.length(); /* if "*" or endsWith ".*" */ - wildcard = ((name.charAt(l - 1) == '*') && ((l == 1) || (name - .charAt(l - 2) == '.'))); + wildcard = ((name.charAt(l - 1) == '*') && ((l == 1) || (name.charAt(l - 2) == '.'))); if (wildcard && (l > 1)) { prefix = name.substring(0, l - 1); } @@ -281,9 +273,7 @@ public final class ServicePermission ext char c; // skip whitespace - while ((i != -1) - && ((c = a[i]) == ' ' || c == '\r' || c == '\n' - || c == '\f' || c == '\t')) + while ((i != -1) && ((c = a[i]) == ' ' || c == '\r' || c == '\n' || c == '\f' || c == '\t')) i--; // check for the known strings @@ -295,8 +285,7 @@ public final class ServicePermission ext matchlen = 3; mask |= ACTION_GET; - } - else + } else if (i >= 7 && (a[i - 7] == 'r' || a[i - 7] == 'R') && (a[i - 6] == 'e' || a[i - 6] == 'E') && (a[i - 5] == 'g' || a[i - 5] == 'G') @@ -308,11 +297,9 @@ public final class ServicePermission ext matchlen = 8; mask |= ACTION_REGISTER; - } - else { + } else { // parse error - throw new IllegalArgumentException("invalid permission: " - + actions); + throw new IllegalArgumentException("invalid permission: " + actions); } // make sure we didn't just match the tail of a word @@ -322,7 +309,7 @@ public final class ServicePermission ext switch (a[i - matchlen]) { case ',' : seencomma = true; - /* FALLTHROUGH */ + /* FALLTHROUGH */ case ' ' : case '\r' : case '\n' : @@ -330,8 +317,7 @@ public final class ServicePermission ext case '\t' : break; default : - throw new IllegalArgumentException( - "invalid permission: " + actions); + throw new IllegalArgumentException("invalid permission: " + actions); } i--; } @@ -363,18 +349,16 @@ public final class ServicePermission ext try { return FrameworkUtil.createFilter(filterString); - } - catch (InvalidSyntaxException e) { - IllegalArgumentException iae = new IllegalArgumentException( - "invalid filter"); + } catch (InvalidSyntaxException e) { + IllegalArgumentException iae = new IllegalArgumentException("invalid filter"); iae.initCause(e); throw iae; } } /** - * Determines if a {@code ServicePermission} object "implies" the - * specified permission. + * Determines if a {@code ServicePermission} object "implies" the specified + * permission. * * @param p The target permission to check. * @return {@code true} if the specified permission is implied by this @@ -432,13 +416,11 @@ public final class ServicePermission ext int pl = prefix.length(); for (int i = 0, l = requestedNames.length; i < l; i++) { String requestedName = requestedNames[i]; - if ((requestedName.length() > pl) - && requestedName.startsWith(prefix)) { + if ((requestedName.length() > pl) && requestedName.startsWith(prefix)) { return true; } } - } - else { + } else { String name = getName(); for (int i = 0, l = requestedNames.length; i < l; i++) { if (requestedNames[i].equals(name)) { @@ -499,8 +481,8 @@ public final class ServicePermission ext * * @param obj The object to test for equality. * @return true if obj is a {@code ServicePermission}, and has the same - * class name and actions as this {@code ServicePermission} - * object; {@code false} otherwise. + * class name and actions as this {@code ServicePermission} object; + * {@code false} otherwise. */ public boolean equals(Object obj) { if (obj == this) { @@ -513,10 +495,7 @@ public final class ServicePermission ext ServicePermission sp = (ServicePermission) obj; - return (action_mask == sp.action_mask) - && getName().equals(sp.getName()) - && ((service == sp.service) || ((service != null) && (service - .compareTo(sp.service) == 0))); + return (action_mask == sp.action_mask) && getName().equals(sp.getName()) && ((service == sp.service) || ((service != null) && (service.compareTo(sp.service) == 0))); } /** @@ -537,8 +516,7 @@ public final class ServicePermission ext * WriteObject is called to save the state of this permission to a stream. * The actions are serialized, and the superclass takes care of the name. */ - private synchronized void writeObject(java.io.ObjectOutputStream s) - throws IOException { + private synchronized void writeObject(java.io.ObjectOutputStream s) throws IOException { if (service != null) { throw new NotSerializableException("cannot serialize"); } @@ -553,8 +531,7 @@ public final class ServicePermission ext * readObject is called to restore the state of this permission from a * stream. */ - private synchronized void readObject(java.io.ObjectInputStream s) - throws IOException, ClassNotFoundException { + private synchronized void readObject(java.io.ObjectInputStream s) throws IOException, ClassNotFoundException { // Read in the action, then initialize the rest s.defaultReadObject(); setTransients(parseFilter(getName()), parseActions(actions)); @@ -598,13 +575,13 @@ public final class ServicePermission ext } return properties = new Properties(props, service); } - + static private final class Properties extends AbstractMap { - private final Map properties; - private final ServiceReference< ? > service; + private final Map properties; + private final ServiceReference service; private transient volatile Set> entries; - Properties(Map properties, ServiceReference< ? > service) { + Properties(Map properties, ServiceReference service) { this.properties = properties; this.service = service; entries = null; @@ -629,8 +606,7 @@ public final class ServicePermission ext if (entries != null) { return entries; } - Set> all = new HashSet>( - properties.entrySet()); + Set> all = new HashSet>(properties.entrySet()); add: for (String key : service.getPropertyKeys()) { for (String k : properties.keySet()) { if (key.equalsIgnoreCase(k)) { @@ -641,7 +617,7 @@ public final class ServicePermission ext } return entries = Collections.unmodifiableSet(all); } - + static private final class Entry implements Map.Entry { private final String k; private final Object v; @@ -650,22 +626,27 @@ public final class ServicePermission ext this.k = key; this.v = value; } + public String getKey() { return k; } + public Object getValue() { return v; } + public Object setValue(Object value) { throw new UnsupportedOperationException(); } + public String toString() { return k + "=" + v; } + public int hashCode() { - return ((k == null) ? 0 : k.hashCode()) - ^ ((v == null) ? 0 : v.hashCode()); + return ((k == null) ? 0 : k.hashCode()) ^ ((v == null) ? 0 : v.hashCode()); } + public boolean equals(Object obj) { if (obj == this) { return true; @@ -673,7 +654,7 @@ public final class ServicePermission ext if (!(obj instanceof Map.Entry)) { return false; } - Map.Entry< ? , ? > e = (Map.Entry< ? , ? >) obj; + Map.Entry e = (Map.Entry) obj; final Object key = e.getKey(); if ((k == key) || ((k != null) && k.equals(key))) { final Object value = e.getValue(); @@ -695,7 +676,7 @@ public final class ServicePermission ext * @see java.security.PermissionCollection */ final class ServicePermissionCollection extends PermissionCollection { - static final long serialVersionUID = 662615640374640621L; + static final long serialVersionUID = 662615640374640621L; /** * Table of permissions. * @@ -709,7 +690,7 @@ final class ServicePermissionCollection * @serial * @GuardedBy this */ - private boolean all_allowed; + private boolean all_allowed; /** * Table of permissions with filter expressions. @@ -733,26 +714,22 @@ final class ServicePermissionCollection * @param permission The Permission object to add. * @throws IllegalArgumentException If the specified permission is not a * ServicePermission object. - * @throws SecurityException If this - * {@code ServicePermissionCollection} object has been marked - * read-only. + * @throws SecurityException If this {@code ServicePermissionCollection} + * object has been marked read-only. */ public void add(final Permission permission) { if (!(permission instanceof ServicePermission)) { - throw new IllegalArgumentException("invalid permission: " - + permission); + throw new IllegalArgumentException("invalid permission: " + permission); } if (isReadOnly()) { - throw new SecurityException("attempt to add a Permission to a " - + "readonly PermissionCollection"); + throw new SecurityException("attempt to add a Permission to a " + "readonly PermissionCollection"); } final ServicePermission sp = (ServicePermission) permission; if (sp.service != null) { - throw new IllegalArgumentException("cannot add to collection: " - + sp); + throw new IllegalArgumentException("cannot add to collection: " + sp); } - + final String name = sp.getName(); final Filter f = sp.filter; synchronized (this) { @@ -763,25 +740,21 @@ final class ServicePermissionCollection if (pc == null) { filterPermissions = pc = new HashMap(); } - } - else { + } else { pc = permissions; } final ServicePermission existing = pc.get(name); - + if (existing != null) { final int oldMask = existing.action_mask; final int newMask = sp.action_mask; if (oldMask != newMask) { - pc - .put(name, new ServicePermission(name, oldMask - | newMask)); + pc.put(name, new ServicePermission(name, oldMask | newMask)); } - } - else { + } else { pc.put(name, sp); } - + if (!all_allowed) { if (name.equals("*")) { all_allowed = true; @@ -795,9 +768,8 @@ final class ServicePermissionCollection * {@code permission}. * * @param permission The Permission object to compare. - * @return {@code true} if {@code permission} is a proper - * subset of a permission in the set; {@code false} - * otherwise. + * @return {@code true} if {@code permission} is a proper subset of a + * permission in the set; {@code false} otherwise. */ public boolean implies(final Permission permission) { if (!(permission instanceof ServicePermission)) { @@ -823,7 +795,7 @@ final class ServicePermissionCollection } } } - + String[] requestedNames = requested.objectClass; /* if requested permission not created with ServiceReference */ if (requestedNames == null) { @@ -846,7 +818,7 @@ final class ServicePermissionCollection } perms = pc.values(); } - + /* iterate one by one over filteredPermissions */ for (ServicePermission perm : perms) { if (perm.implies0(requested, effective)) { @@ -865,8 +837,7 @@ final class ServicePermissionCollection * @param effective The effective actions. * @return The new effective actions. */ - private int effective(String requestedName, final int desired, - int effective) { + private int effective(String requestedName, final int desired, int effective) { final Map pc = permissions; ServicePermission sp = pc.get(requestedName); // strategy: @@ -899,10 +870,10 @@ final class ServicePermissionCollection */ return effective; } - + /** - * Returns an enumeration of all the {@code ServicePermission} - * objects in the container. + * Returns an enumeration of all the {@code ServicePermission} objects in + * the container. * * @return Enumeration of all the ServicePermission objects. */ @@ -914,17 +885,13 @@ final class ServicePermissionCollection } return Collections.enumeration(all); } - + /* serialization logic */ - private static final ObjectStreamField[] serialPersistentFields = { - new ObjectStreamField("permissions", Hashtable.class), - new ObjectStreamField("all_allowed", Boolean.TYPE), + private static final ObjectStreamField[] serialPersistentFields = {new ObjectStreamField("permissions", Hashtable.class), new ObjectStreamField("all_allowed", Boolean.TYPE), new ObjectStreamField("filterPermissions", HashMap.class) }; - private synchronized void writeObject(ObjectOutputStream out) - throws IOException { - Hashtable hashtable = new Hashtable( - permissions); + private synchronized void writeObject(ObjectOutputStream out) throws IOException { + Hashtable hashtable = new Hashtable(permissions); ObjectOutputStream.PutField pfields = out.putFields(); pfields.put("permissions", hashtable); pfields.put("all_allowed", all_allowed); @@ -932,15 +899,12 @@ final class ServicePermissionCollection out.writeFields(); } - private synchronized void readObject(java.io.ObjectInputStream in) - throws IOException, ClassNotFoundException { + private synchronized void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException { ObjectInputStream.GetField gfields = in.readFields(); - Hashtable hashtable = (Hashtable) gfields - .get("permissions", null); + Hashtable hashtable = (Hashtable) gfields.get("permissions", null); permissions = new HashMap(hashtable); all_allowed = gfields.get("all_allowed", false); - HashMap fp = (HashMap) gfields - .get("filterPermissions", null); + HashMap fp = (HashMap) gfields.get("filterPermissions", null); filterPermissions = fp; } } Modified: felix/trunk/framework/src/main/java/org/osgi/framework/ServiceReference.java URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/osgi/framework/ServiceReference.java?rev=1337360&r1=1337359&r2=1337360&view=diff ============================================================================== --- felix/trunk/framework/src/main/java/org/osgi/framework/ServiceReference.java (original) +++ felix/trunk/framework/src/main/java/org/osgi/framework/ServiceReference.java Fri May 11 20:19:02 2012 @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved. + * Copyright (c) OSGi Alliance (2000, 2012). 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. @@ -26,36 +26,36 @@ import java.util.Dictionary; * {@code BundleContext.getServiceReference} and * {@code BundleContext.getServiceReferences} methods. *

    - * A {@code ServiceReference} object may be shared between bundles and can - * be used to examine the properties of the service and to get the service - * object. + * A {@code ServiceReference} object may be shared between bundles and can be + * used to examine the properties of the service and to get the service object. *

    * Every service registered in the Framework has a unique * {@code ServiceRegistration} object and may have multiple, distinct - * {@code ServiceReference} objects referring to it. - * {@code ServiceReference} objects associated with a - * {@code ServiceRegistration} object have the same {@code hashCode} - * and are considered equal (more specifically, their {@code equals()} - * method will return {@code true} when compared). + * {@code ServiceReference} objects referring to it. {@code ServiceReference} + * objects associated with a {@code ServiceRegistration} object have the same + * {@code hashCode} and are considered equal (more specifically, their + * {@code equals()} method will return {@code true} when compared). *

    * If the same service object is registered multiple times, * {@code ServiceReference} objects associated with different * {@code ServiceRegistration} objects are not equal. * * @param Type of Service. - * @see BundleContext#getServiceReference - * @see BundleContext#getServiceReferences - * @see BundleContext#getService + * @see BundleContext#getServiceReference(Class) + * @see BundleContext#getServiceReference(String) + * @see BundleContext#getServiceReferences(Class, String) + * @see BundleContext#getServiceReferences(String, String) + * @see BundleContext#getService(ServiceReference) * @ThreadSafe * @noimplement - * @version $Id: 771b9b4d4f65dbe593154d02912edba51a085b0c $ + * @version $Id: 75352193f9f11a2c19692890153c6ff91611023b $ */ public interface ServiceReference extends Comparable { /** * Returns the property value to which the specified property key is mapped - * in the properties {@code Dictionary} object of the service - * referenced by this {@code ServiceReference} object. + * in the properties {@code Dictionary} object of the service referenced by + * this {@code ServiceReference} object. * *

    * Property keys are case-insensitive. @@ -63,32 +63,31 @@ public interface ServiceReference ext *

    * This method must continue to return property values after the service has * been unregistered. This is so references to unregistered services (for - * example, {@code ServiceReference} objects stored in the log) can - * still be interrogated. + * example, {@code ServiceReference} objects stored in the log) can still be + * interrogated. * * @param key The property key. - * @return The property value to which the key is mapped; {@code null} - * if there is no property named after the key. + * @return The property value to which the key is mapped; {@code null} if + * there is no property named after the key. */ public Object getProperty(String key); /** - * Returns an array of the keys in the properties {@code Dictionary} - * object of the service referenced by this {@code ServiceReference} - * object. + * Returns an array of the keys in the properties {@code Dictionary} object + * of the service referenced by this {@code ServiceReference} object. * *

    * This method will continue to return the keys after the service has been * unregistered. This is so references to unregistered services (for - * example, {@code ServiceReference} objects stored in the log) can - * still be interrogated. + * example, {@code ServiceReference} objects stored in the log) can still be + * interrogated. * *

    * This method is case-preserving ; this means that every key in the * returned array must have the same case as the corresponding key in the * properties {@code Dictionary} that was passed to the * {@link BundleContext#registerService(String[],Object,Dictionary)} or - * {@link ServiceRegistration#setProperties} methods. + * {@link ServiceRegistration#setProperties(Dictionary)} methods. * * @return An array of property keys. */ @@ -104,21 +103,20 @@ public interface ServiceReference ext * unregistered. * * @return The bundle that registered the service referenced by this - * {@code ServiceReference} object; {@code null} if that - * service has already been unregistered. + * {@code ServiceReference} object; {@code null} if that service has + * already been unregistered. * @see BundleContext#registerService(String[],Object,Dictionary) */ public Bundle getBundle(); /** * Returns the bundles that are using the service referenced by this - * {@code ServiceReference} object. Specifically, this method returns - * the bundles whose usage count for that service is greater than zero. + * {@code ServiceReference} object. Specifically, this method returns the + * bundles whose usage count for that service is greater than zero. * * @return An array of bundles whose usage count for the service referenced - * by this {@code ServiceReference} object is greater than - * zero; {@code null} if no bundles are currently using that - * service. + * by this {@code ServiceReference} object is greater than zero; + * {@code null} if no bundles are currently using that service. * * @since 1.1 */ @@ -126,17 +124,16 @@ public interface ServiceReference ext /** * Tests if the bundle that registered the service referenced by this - * {@code ServiceReference} and the specified bundle use the same - * source for the package of the specified class name. + * {@code ServiceReference} and the specified bundle use the same source for + * the package of the specified class name. *

    * This method performs the following checks: *

      *
    1. Get the package name from the specified class name.
    2. *
    3. For the bundle that registered the service referenced by this - * {@code ServiceReference} (registrant bundle); find the source for - * the package. If no source is found then return {@code true} if the - * registrant bundle is equal to the specified bundle; otherwise return - * {@code false}.
    4. + * {@code ServiceReference} (registrant bundle); find the source for the + * package. If no source is found then return {@code true} if the registrant + * bundle is equal to the specified bundle; otherwise return {@code false}. *
    5. If the package source of the registrant bundle is equal to the * package source of the specified bundle then return {@code true}; * otherwise return {@code false}.
    6. @@ -145,11 +142,11 @@ public interface ServiceReference ext * @param bundle The {@code Bundle} object to check. * @param className The class name to check. * @return {@code true} if the bundle which registered the service - * referenced by this {@code ServiceReference} and the - * specified bundle use the same source for the package of the - * specified class name. Otherwise {@code false} is returned. - * @throws IllegalArgumentException If the specified {@code Bundle} was - * not created by the same framework instance as this + * referenced by this {@code ServiceReference} and the specified + * bundle use the same source for the package of the specified class + * name. Otherwise {@code false} is returned. + * @throws IllegalArgumentException If the specified {@code Bundle} was not + * created by the same framework instance as this * {@code ServiceReference}. * @since 1.3 */ @@ -162,24 +159,23 @@ public interface ServiceReference ext *

      * If this {@code ServiceReference} and the specified * {@code ServiceReference} have the same {@link Constants#SERVICE_ID - * service id} they are equal. This {@code ServiceReference} is less - * than the specified {@code ServiceReference} if it has a lower + * service id} they are equal. This {@code ServiceReference} is less than + * the specified {@code ServiceReference} if it has a lower * {@link Constants#SERVICE_RANKING service ranking} and greater if it has a - * higher service ranking. Otherwise, if this {@code ServiceReference} - * and the specified {@code ServiceReference} have the same + * higher service ranking. Otherwise, if this {@code ServiceReference} and + * the specified {@code ServiceReference} have the same * {@link Constants#SERVICE_RANKING service ranking}, this * {@code ServiceReference} is less than the specified - * {@code ServiceReference} if it has a higher - * {@link Constants#SERVICE_ID service id} and greater if it has a lower - * service id. + * {@code ServiceReference} if it has a higher {@link Constants#SERVICE_ID + * service id} and greater if it has a lower service id. * * @param reference The {@code ServiceReference} to be compared. * @return Returns a negative integer, zero, or a positive integer if this - * {@code ServiceReference} is less than, equal to, or greater - * than the specified {@code ServiceReference}. + * {@code ServiceReference} is less than, equal to, or greater than + * the specified {@code ServiceReference}. * @throws IllegalArgumentException If the specified - * {@code ServiceReference} was not created by the same - * framework instance as this {@code ServiceReference}. + * {@code ServiceReference} was not created by the same framework + * instance as this {@code ServiceReference}. * @since 1.4 */ public int compareTo(Object reference); Modified: felix/trunk/framework/src/main/java/org/osgi/framework/ServiceRegistration.java URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/osgi/framework/ServiceRegistration.java?rev=1337360&r1=1337359&r2=1337360&view=diff ============================================================================== --- felix/trunk/framework/src/main/java/org/osgi/framework/ServiceRegistration.java (original) +++ felix/trunk/framework/src/main/java/org/osgi/framework/ServiceRegistration.java Fri May 11 20:19:02 2012 @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved. + * Copyright (c) OSGi Alliance (2000, 2012). 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. @@ -23,31 +23,28 @@ import java.util.Dictionary; * *

      * The Framework returns a {@code ServiceRegistration} object when a - * {@code BundleContext.registerService} method invocation is successful. - * The {@code ServiceRegistration} object is for the private use of the - * registering bundle and should not be shared with other bundles. + * {@code BundleContext.registerService} method invocation is successful. The + * {@code ServiceRegistration} object is for the private use of the registering + * bundle and should not be shared with other bundles. *

      - * The {@code ServiceRegistration} object may be used to update the - * properties of the service or to unregister the service. + * The {@code ServiceRegistration} object may be used to update the properties + * of the service or to unregister the service. * * @param Type of Service. * @see BundleContext#registerService(String[],Object,Dictionary) * @ThreadSafe * @noimplement - * @version $Id: dc742ff3749821529f9ae62e05d9bd5d8eca00d7 $ + * @version $Id: a84248da0db0538708d2394a9478153e06b8afb9 $ */ public interface ServiceRegistration { /** - * Returns a {@code ServiceReference} object for a service being - * registered. + * Returns a {@code ServiceReference} object for a service being registered. *

      - * The {@code ServiceReference} object may be shared with other - * bundles. + * The {@code ServiceReference} object may be shared with other bundles. * - * @throws IllegalStateException If this - * {@code ServiceRegistration} object has already been - * unregistered. + * @throws IllegalStateException If this {@code ServiceRegistration} object + * has already been unregistered. * @return {@code ServiceReference} object. */ public ServiceReference getReference(); @@ -72,43 +69,41 @@ public interface ServiceRegistration * be made to this object after calling this method. To update the * service's properties this method should be called again. * - * @throws IllegalStateException If this {@code ServiceRegistration} - * object has already been unregistered. - * @throws IllegalArgumentException If {@code properties} contains - * case variants of the same key name. + * @throws IllegalStateException If this {@code ServiceRegistration} object + * has already been unregistered. + * @throws IllegalArgumentException If {@code properties} contains case + * variants of the same key name. */ - public void setProperties(Dictionary properties); + public void setProperties(Dictionary properties); /** - * Unregisters a service. Remove a {@code ServiceRegistration} object - * from the Framework service registry. All {@code ServiceReference} - * objects associated with this {@code ServiceRegistration} object - * can no longer be used to interact with the service once unregistration is - * complete. + * Unregisters a service. Remove a {@code ServiceRegistration} object from + * the Framework service registry. All {@code ServiceReference} objects + * associated with this {@code ServiceRegistration} object can no longer be + * used to interact with the service once unregistration is complete. * *

      * The following steps are required to unregister a service: *

        - *
      1. The service is removed from the Framework service registry so that - * it can no longer be obtained. + *
      2. The service is removed from the Framework service registry so that it + * can no longer be obtained. *
      3. A service event of type {@link ServiceEvent#UNREGISTERING} is fired * so that bundles using this service can release their use of the service. * Once delivery of the service event is complete, the - * {@code ServiceReference} objects for the service may no longer be - * used to get a service object for the service. + * {@code ServiceReference} objects for the service may no longer be used to + * get a service object for the service. *
      4. For each bundle whose use count for this service is greater than * zero:
        * The bundle's use count for this service is set to zero.
        * If the service was registered with a {@link ServiceFactory} object, the - * {@code ServiceFactory.ungetService} method is called to release - * the service object for the bundle. + * {@code ServiceFactory.ungetService} method is called to release the + * service object for the bundle. *
      * - * @throws IllegalStateException If this - * {@code ServiceRegistration} object has already been - * unregistered. - * @see BundleContext#ungetService - * @see ServiceFactory#ungetService + * @throws IllegalStateException If this {@code ServiceRegistration} object + * has already been unregistered. + * @see BundleContext#ungetService(ServiceReference) + * @see ServiceFactory#ungetService(Bundle, ServiceRegistration, Object) */ public void unregister(); } Modified: felix/trunk/framework/src/main/java/org/osgi/framework/SignerProperty.java URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/osgi/framework/SignerProperty.java?rev=1337360&r1=1337359&r2=1337360&view=diff ============================================================================== --- felix/trunk/framework/src/main/java/org/osgi/framework/SignerProperty.java (original) +++ felix/trunk/framework/src/main/java/org/osgi/framework/SignerProperty.java Fri May 11 20:19:02 2012 @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2009, 2010). All Rights Reserved. + * Copyright (c) OSGi Alliance (2009, 2012). 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. @@ -26,7 +26,7 @@ import java.util.Map; * during filter expression evaluation in the permission implies method. * * @Immutable - * @version $Id: 3589831a7594cf36e645a51ab9b9ae5ebfd80beb $ + * @version $Id: 94eea19050b84907f1257d7a12ebf8ab404f4473 $ */ final class SignerProperty { private final Bundle bundle; @@ -70,20 +70,17 @@ final class SignerProperty { SignerProperty other = (SignerProperty) o; Bundle matchBundle = bundle != null ? bundle : other.bundle; String matchPattern = bundle != null ? other.pattern : pattern; - Map> signers = matchBundle - .getSignerCertificates(Bundle.SIGNERS_TRUSTED); + Map> signers = matchBundle.getSignerCertificates(Bundle.SIGNERS_TRUSTED); for (List signerCerts : signers.values()) { List dnChain = new ArrayList(signerCerts.size()); for (X509Certificate signerCert : signerCerts) { dnChain.add(signerCert.getSubjectDN().getName()); } try { - if (FrameworkUtil.matchDistinguishedNameChain(matchPattern, - dnChain)) { + if (FrameworkUtil.matchDistinguishedNameChain(matchPattern, dnChain)) { return true; } - } - catch (IllegalArgumentException e) { + } catch (IllegalArgumentException e) { continue; // bad pattern } } @@ -107,8 +104,7 @@ final class SignerProperty { if (bundle == null) { return false; } - Map> signers = bundle - .getSignerCertificates(Bundle.SIGNERS_TRUSTED); + Map> signers = bundle.getSignerCertificates(Bundle.SIGNERS_TRUSTED); return !signers.isEmpty(); } } Modified: felix/trunk/framework/src/main/java/org/osgi/framework/SynchronousBundleListener.java URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/osgi/framework/SynchronousBundleListener.java?rev=1337360&r1=1337359&r2=1337360&view=diff ============================================================================== --- felix/trunk/framework/src/main/java/org/osgi/framework/SynchronousBundleListener.java (original) +++ felix/trunk/framework/src/main/java/org/osgi/framework/SynchronousBundleListener.java Fri May 11 20:19:02 2012 @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved. + * Copyright (c) OSGi Alliance (2001, 2011). 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. @@ -17,38 +17,37 @@ package org.osgi.framework; /** - * A synchronous {@code BundleEvent} listener. - * {@code SynchronousBundleListener} is a listener interface that may be - * implemented by a bundle developer. When a {@code BundleEvent} is fired, - * it is synchronously delivered to a {@code SynchronousBundleListener}. - * The Framework may deliver {@code BundleEvent} objects to a - * {@code SynchronousBundleListener} out of order and may concurrently call - * and/or reenter a {@code SynchronousBundleListener}. + * A synchronous {@code BundleEvent} listener. {@code SynchronousBundleListener} + * is a listener interface that may be implemented by a bundle developer. When a + * {@code BundleEvent} is fired, it is synchronously delivered to a + * {@code SynchronousBundleListener}. The Framework may deliver + * {@code BundleEvent} objects to a {@code SynchronousBundleListener} out of + * order and may concurrently call and/or reenter a + * {@code SynchronousBundleListener}. * *

      * For {@code BundleEvent} types {@link BundleEvent#STARTED STARTED} and * {@link BundleEvent#LAZY_ACTIVATION LAZY_ACTIVATION}, the Framework must not * hold the referenced bundle's "state change" lock when the - * {@code BundleEvent} is delivered to a - * {@code SynchronousBundleListener}. For the other - * {@code BundleEvent} types, the Framework must hold the referenced + * {@code BundleEvent} is delivered to a {@code SynchronousBundleListener}. For + * the other {@code BundleEvent} types, the Framework must hold the referenced * bundle's "state change" lock when the {@code BundleEvent} is * delivered to a {@code SynchronousBundleListener}. A - * {@code SynchronousBundleListener} cannot directly call life cycle - * methods on the referenced bundle when the Framework is holding the referenced - * bundle's "state change" lock. + * {@code SynchronousBundleListener} cannot directly call life cycle methods on + * the referenced bundle when the Framework is holding the referenced bundle's + * "state change" lock. * *

      - * A {@code SynchronousBundleListener} object is registered with the - * Framework using the {@link BundleContext#addBundleListener} method. + * A {@code SynchronousBundleListener} object is registered with the Framework + * using the {@link BundleContext#addBundleListener(BundleListener)} method. * {@code SynchronousBundleListener} objects are called with a * {@code BundleEvent} object when a bundle has been installed, resolved, * starting, started, stopping, stopped, updated, unresolved, or uninstalled. *

      * Unlike normal {@code BundleListener} objects, - * {@code SynchronousBundleListener}s are synchronously called during - * bundle lifecycle processing. The bundle lifecycle processing will not proceed - * until all {@code SynchronousBundleListener}s have completed. + * {@code SynchronousBundleListener}s are synchronously called during bundle + * lifecycle processing. The bundle lifecycle processing will not proceed until + * all {@code SynchronousBundleListener}s have completed. * {@code SynchronousBundleListener} objects will be called prior to * {@code BundleListener} objects. *

      @@ -58,7 +57,7 @@ package org.osgi.framework; * @since 1.1 * @see BundleEvent * @ThreadSafe - * @version $Id: b22484f48ebdcb2141da9bba9eb65f5c40e0f520 $ + * @version $Id: 74246f4ceeba7f9a5ee198048522f93d4691c51a $ */ public interface SynchronousBundleListener extends BundleListener { Added: felix/trunk/framework/src/main/java/org/osgi/framework/UnfilteredServiceListener.java URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/osgi/framework/UnfilteredServiceListener.java?rev=1337360&view=auto ============================================================================== --- felix/trunk/framework/src/main/java/org/osgi/framework/UnfilteredServiceListener.java (added) +++ felix/trunk/framework/src/main/java/org/osgi/framework/UnfilteredServiceListener.java Fri May 11 20:19:02 2012 @@ -0,0 +1,73 @@ +/* + * Copyright (c) OSGi Alliance (2011). 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. + * 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.osgi.framework; + +import org.osgi.framework.hooks.service.ListenerHook; + +/** + * A {@code ServiceEvent} listener that does not filter based upon any + * filter string specified to + * {@link BundleContext#addServiceListener(ServiceListener, String)}. Using an + * {@code UnfilteredServiceListener} and specifying a filter string to + * {@link BundleContext#addServiceListener(ServiceListener, String)} allows the + * listener to receive all {@code ServiceEvent} objects while still advising + * {@link ListenerHook} implementation of the service interests in the filter + * string. + * + * For example, an implementation of Declarative Services would add an + * {@code UnfilteredServiceListener} with a filter string listing all the + * services referenced by all the service components. The Declarative Services + * implementation would receive all {@code ServiceEvent} objects for internal + * processing and a Remote Services discovery service implementation can observe + * the service interests of the service components using a {@link ListenerHook}. + * When the set of service components being processed changes, the Declarative + * Services implementation would re-add the {@code UnfilteredServiceListener} + * with an updated filter string. + * + *

      + * When a {@code ServiceEvent} is fired, it is synchronously delivered to an + * {@code UnfilteredServiceListener}. The Framework may deliver + * {@code ServiceEvent} objects to an {@code UnfilteredServiceListener} out of + * order and may concurrently call and/or reenter an + * {@code UnfilteredServiceListener}. + * + *

      + * An {@code UnfilteredServiceListener} object is registered with the Framework + * using the {@code BundleContext.addServiceListener} method. + * {@code UnfilteredServiceListener} objects are called with a + * {@code ServiceEvent} object when a service is registered, modified, or is in + * the process of unregistering. + * + *

      + * {@code ServiceEvent} object delivery to {@code UnfilteredServiceListener} + * objects are not filtered by the filter specified when the listener was + * registered. If the Java Runtime Environment supports permissions, then some + * filtering is done. {@code ServiceEvent} objects are only delivered to the + * listener if the bundle which defines the listener object's class has the + * appropriate {@code ServicePermission} to get the service using at least one + * of the named classes under which the service was registered. + * + * @see ServiceEvent + * @see ServicePermission + * @ThreadSafe + * @since 1.7 + * @version $Id: 543a345802f8dc7a49d29e8fb7aee7004ee2b329 $ + */ + +public interface UnfilteredServiceListener extends ServiceListener { + // This is a marker interface +} Modified: felix/trunk/framework/src/main/java/org/osgi/framework/Version.java URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/osgi/framework/Version.java?rev=1337360&r1=1337359&r2=1337360&view=diff ============================================================================== --- felix/trunk/framework/src/main/java/org/osgi/framework/Version.java (original) +++ felix/trunk/framework/src/main/java/org/osgi/framework/Version.java Fri May 11 20:19:02 2012 @@ -1,6 +1,6 @@ /* - * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved. - * + * Copyright (c) OSGi Alliance (2004, 2012). 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. * You may obtain a copy of the License at @@ -20,7 +20,7 @@ import java.util.NoSuchElementException; import java.util.StringTokenizer; /** - * Version identifier for bundles and packages. + * Version identifier for capabilities such as bundles and packages. * *

      * Version identifiers have four components. @@ -28,8 +28,8 @@ import java.util.StringTokenizer; *

    7. Major version. A non-negative integer.
    8. *
    9. Minor version. A non-negative integer.
    10. *
    11. Micro version. A non-negative integer.
    12. - *
    13. Qualifier. A text string. See {@code Version(String)} for the - * format of the qualifier string.
    14. + *
    15. Qualifier. A text string. See {@code Version(String)} for the format of + * the qualifier string.
    16. *
    * *

    @@ -37,7 +37,7 @@ import java.util.StringTokenizer; * * @since 1.3 * @Immutable - * @version $Id: a71e2e2d7685e65b5bbe375efdf97fda16eff0a5 $ + * @version $Id: a0b5a865f7fbf2b3dcb77a13b2e99da0b64702bb $ */ public class Version implements Comparable { @@ -46,7 +46,8 @@ public class Version implements Comparab private final int micro; private final String qualifier; private static final String SEPARATOR = "."; - private transient String versionString; + private transient String versionString /* default to null */; + private transient int hash /* default to 0 */; /** * The empty version "0.0.0". @@ -76,8 +77,8 @@ public class Version implements Comparab * @param minor Minor component of the version identifier. * @param micro Micro component of the version identifier. * @param qualifier Qualifier component of the version identifier. If - * {@code null} is specified, then the qualifier will be set to - * the empty string. + * {@code null} is specified, then the qualifier will be set to the + * empty string. * @throws IllegalArgumentException If the numerical components are negative * or the qualifier string is invalid. */ @@ -90,15 +91,14 @@ public class Version implements Comparab this.minor = minor; this.micro = micro; this.qualifier = qualifier; - versionString = null; validate(); } /** - * Created a version identifier from the specified string. + * Creates a version identifier from the specified string. * *

    - * Here is the grammar for version strings. + * Version string grammar: * *

     	 * version ::= major('.'minor('.'micro('.'qualifier)?)?)?
    @@ -110,9 +110,8 @@ public class Version implements Comparab
     	 * alpha ::= [a..zA..Z]
     	 * 
    * - * There must be no whitespace in version. - * - * @param version String representation of the version identifier. + * @param version String representation of the version identifier. There + * must be no whitespace in the argument. * @throws IllegalArgumentException If {@code version} is improperly * formatted. */ @@ -124,31 +123,28 @@ public class Version implements Comparab try { StringTokenizer st = new StringTokenizer(version, SEPARATOR, true); - maj = Integer.parseInt(st.nextToken()); + maj = parseInt(st.nextToken(), version); if (st.hasMoreTokens()) { // minor st.nextToken(); // consume delimiter - min = Integer.parseInt(st.nextToken()); + min = parseInt(st.nextToken(), version); if (st.hasMoreTokens()) { // micro st.nextToken(); // consume delimiter - mic = Integer.parseInt(st.nextToken()); + mic = parseInt(st.nextToken(), version); - if (st.hasMoreTokens()) { // qualifier + if (st.hasMoreTokens()) { // qualifier separator st.nextToken(); // consume delimiter qual = st.nextToken(""); // remaining string if (st.hasMoreTokens()) { // fail safe - throw new IllegalArgumentException( - "invalid format: " + version); + throw new IllegalArgumentException("invalid version \"" + version + "\": invalid format"); } } } } - } - catch (NoSuchElementException e) { - IllegalArgumentException iae = new IllegalArgumentException( - "invalid format: " + version); + } catch (NoSuchElementException e) { + IllegalArgumentException iae = new IllegalArgumentException("invalid version \"" + version + "\": invalid format"); iae.initCause(e); throw iae; } @@ -157,11 +153,27 @@ public class Version implements Comparab minor = min; micro = mic; qualifier = qual; - versionString = null; validate(); } /** + * Parse numeric component into an int. + * + * @param value Numeric component + * @param version Complete version string for exception message, if any + * @return int value of numeric component + */ + private static int parseInt(String value, String version) { + try { + return Integer.parseInt(value); + } catch (NumberFormatException e) { + IllegalArgumentException iae = new IllegalArgumentException("invalid version \"" + version + "\": non-numeric \"" + value + "\""); + iae.initCause(e); + throw iae; + } + } + + /** * Called by the Version constructors to validate the version components. * * @throws IllegalArgumentException If the numerical components are negative @@ -169,17 +181,15 @@ public class Version implements Comparab */ private void validate() { if (major < 0) { - throw new IllegalArgumentException("negative major"); + throw new IllegalArgumentException("invalid version \"" + toString0() + "\": negative number \"" + major + "\""); } if (minor < 0) { - throw new IllegalArgumentException("negative minor"); + throw new IllegalArgumentException("invalid version \"" + toString0() + "\": negative number \"" + minor + "\""); } if (micro < 0) { - throw new IllegalArgumentException("negative micro"); + throw new IllegalArgumentException("invalid version \"" + toString0() + "\": negative number \"" + micro + "\""); } - char[] chars = qualifier.toCharArray(); - for (int i = 0, length = chars.length; i < length; i++) { - char ch = chars[i]; + for (char ch : qualifier.toCharArray()) { if (('A' <= ch) && (ch <= 'Z')) { continue; } @@ -192,8 +202,7 @@ public class Version implements Comparab if ((ch == '_') || (ch == '-')) { continue; } - throw new IllegalArgumentException("invalid qualifier: " - + qualifier); + throw new IllegalArgumentException("invalid version \"" + toString0() + "\": invalid qualifier \"" + qualifier + "\""); } } @@ -205,10 +214,9 @@ public class Version implements Comparab * * @param version String representation of the version identifier. Leading * and trailing whitespace will be ignored. - * @return A {@code Version} object representing the version - * identifier. If {@code version} is {@code null} or - * the empty string then {@code emptyVersion} will be - * returned. + * @return A {@code Version} object representing the version identifier. If + * {@code version} is {@code null} or the empty string then + * {@code emptyVersion} will be returned. * @throws IllegalArgumentException If {@code version} is improperly * formatted. */ @@ -265,13 +273,22 @@ public class Version implements Comparab * Returns the string representation of this version identifier. * *

    - * The format of the version string will be {@code major.minor.micro} - * if qualifier is the empty string or - * {@code major.minor.micro.qualifier} otherwise. + * The format of the version string will be {@code major.minor.micro} if + * qualifier is the empty string or {@code major.minor.micro.qualifier} + * otherwise. * * @return The string representation of this version identifier. */ public String toString() { + return toString0(); + } + + /** + * Internal toString behavior + * + * @return The string representation of this version identifier. + */ + String toString0() { if (versionString != null) { return versionString; } @@ -295,8 +312,15 @@ public class Version implements Comparab * @return An integer which is a hash code value for this object. */ public int hashCode() { - return (major << 24) + (minor << 16) + (micro << 8) - + qualifier.hashCode(); + if (hash != 0) { + return hash; + } + int h = 31 * 17; + h = 31 * h + major; + h = 31 * h + minor; + h = 31 * h + micro; + h = 31 * h + qualifier.hashCode(); + return hash = h; } /** @@ -308,9 +332,8 @@ public class Version implements Comparab * is equal (using {@code String.equals}). * * @param object The {@code Version} object to be compared. - * @return {@code true} if {@code object} is a - * {@code Version} and is equal to this object; - * {@code false} otherwise. + * @return {@code true} if {@code object} is a {@code Version} and is equal + * to this object; {@code false} otherwise. */ public boolean equals(Object object) { if (object == this) { // quicktest @@ -322,15 +345,14 @@ public class Version implements Comparab } Version other = (Version) object; - return (major == other.major) && (minor == other.minor) - && (micro == other.micro) && qualifier.equals(other.qualifier); + return (major == other.major) && (minor == other.minor) && (micro == other.micro) && qualifier.equals(other.qualifier); } /** * Compares this {@code Version} object to another {@code Version}. * *

    - * A version is considered to be less than another version if its + * A version is considered to be less than another version if its * major component is less than the other version's major component, or the * major components are equal and its minor component is less than the other * version's minor component, or the major and minor components are equal