From 18b75ba105ec2e868cb0c13dff1662e73813b678 Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Tue, 22 Aug 2017 07:45:55 -0500 Subject: Update OSGi APIs for R7 Change-Id: Id406562887a18b3afb377f0b8cfa38dddefd837f Signed-off-by: Thomas Watson --- bundles/org.eclipse.osgi.services/.classpath | 2 +- .../.settings/.api_filters | 15 ++ .../.settings/org.eclipse.jdt.core.prefs | 6 +- .../org.eclipse.osgi.services/META-INF/MANIFEST.MF | 6 +- .../src/org/osgi/service/device/Driver.java | 6 +- .../src/org/osgi/service/device/DriverLocator.java | 4 +- .../org/osgi/service/device/DriverSelector.java | 4 +- .../src/org/osgi/service/device/Match.java | 4 +- .../src/org/osgi/service/device/package-info.java | 5 +- .../src/org/osgi/service/device/packageinfo | 1 - .../src/org/osgi/service/event/EventConstants.java | 4 +- .../org/osgi/service/event/EventProperties.java | 14 +- .../org/osgi/service/event/TopicPermission.java | 4 +- .../src/org/osgi/service/event/packageinfo | 1 - .../src/org/osgi/service/log/LogEntry.java | 8 +- .../org/osgi/service/metatype/MetaTypeService.java | 16 +- .../org/osgi/service/metatype/package-info.java | 15 +- .../src/org/osgi/service/metatype/packageinfo | 1 - .../service/provisioning/ProvisioningService.java | 6 +- .../osgi/service/provisioning/package-info.java | 5 +- .../src/org/osgi/service/provisioning/packageinfo | 1 - .../src/org/osgi/service/upnp/UPnPAction.java | 4 +- .../src/org/osgi/service/upnp/UPnPDevice.java | 4 +- .../org/osgi/service/upnp/UPnPEventListener.java | 2 +- .../src/org/osgi/service/upnp/UPnPException.java | 4 +- .../org/osgi/service/upnp/UPnPStateVariable.java | 4 +- .../src/org/osgi/service/upnp/package-info.java | 5 +- .../src/org/osgi/service/upnp/packageinfo | 1 - .../src/org/osgi/service/useradmin/Role.java | 4 +- .../src/org/osgi/service/useradmin/User.java | 4 +- .../org/osgi/service/useradmin/UserAdminEvent.java | 8 +- .../service/useradmin/UserAdminPermission.java | 35 ++- .../org/osgi/service/useradmin/package-info.java | 5 +- .../src/org/osgi/service/useradmin/packageinfo | 1 - .../org/osgi/service/wireadmin/BasicEnvelope.java | 5 +- .../src/org/osgi/service/wireadmin/Wire.java | 6 +- .../src/org/osgi/service/wireadmin/WireAdmin.java | 6 +- .../org/osgi/service/wireadmin/WireAdminEvent.java | 8 +- .../org/osgi/service/wireadmin/WirePermission.java | 35 ++- .../org/osgi/service/wireadmin/package-info.java | 5 +- .../src/org/osgi/service/wireadmin/packageinfo | 1 - bundles/org.eclipse.osgi.util/META-INF/MANIFEST.MF | 2 +- .../src/org/osgi/util/measurement/Measurement.java | 10 +- .../src/org/osgi/util/measurement/State.java | 7 +- .../src/org/osgi/util/measurement/Unit.java | 25 ++- .../org/osgi/util/measurement/package-info.java | 5 +- .../src/org/osgi/util/measurement/packageinfo | 1 - .../src/org/osgi/util/position/package-info.java | 5 +- .../src/org/osgi/util/position/packageinfo | 1 - .../src/org/osgi/util/promise/Deferred.java | 46 +++- .../src/org/osgi/util/promise/PromiseImpl.java | 247 +++++++++++++-------- .../src/org/osgi/util/promise/Promises.java | 138 +++++++++--- .../src/org/osgi/util/xml/XMLParserActivator.java | 67 +++--- .../src/org/osgi/util/xml/package-info.java | 5 +- .../src/org/osgi/util/xml/packageinfo | 1 - .../osgi/src/org/osgi/service/log/LogEntry.java | 8 +- .../src/org/osgi/service/resolver/Resolver.java | 10 +- 57 files changed, 554 insertions(+), 299 deletions(-) delete mode 100644 bundles/org.eclipse.osgi.services/src/org/osgi/service/device/packageinfo delete mode 100644 bundles/org.eclipse.osgi.services/src/org/osgi/service/event/packageinfo delete mode 100644 bundles/org.eclipse.osgi.services/src/org/osgi/service/metatype/packageinfo delete mode 100644 bundles/org.eclipse.osgi.services/src/org/osgi/service/provisioning/packageinfo delete mode 100644 bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/packageinfo delete mode 100644 bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/packageinfo delete mode 100644 bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/packageinfo delete mode 100644 bundles/org.eclipse.osgi.util/src/org/osgi/util/measurement/packageinfo delete mode 100644 bundles/org.eclipse.osgi.util/src/org/osgi/util/position/packageinfo delete mode 100644 bundles/org.eclipse.osgi.util/src/org/osgi/util/xml/packageinfo diff --git a/bundles/org.eclipse.osgi.services/.classpath b/bundles/org.eclipse.osgi.services/.classpath index 09b9f31b1..7ecc55afe 100644 --- a/bundles/org.eclipse.osgi.services/.classpath +++ b/bundles/org.eclipse.osgi.services/.classpath @@ -1,6 +1,6 @@ - + diff --git a/bundles/org.eclipse.osgi.services/.settings/.api_filters b/bundles/org.eclipse.osgi.services/.settings/.api_filters index 5799d5790..fc3708d1c 100644 --- a/bundles/org.eclipse.osgi.services/.settings/.api_filters +++ b/bundles/org.eclipse.osgi.services/.settings/.api_filters @@ -36,4 +36,19 @@ + + + + + + + + + + + + + + + diff --git a/bundles/org.eclipse.osgi.services/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.osgi.services/.settings/org.eclipse.jdt.core.prefs index ee22cd460..0b08c1840 100644 --- a/bundles/org.eclipse.osgi.services/.settings/org.eclipse.jdt.core.prefs +++ b/bundles/org.eclipse.osgi.services/.settings/org.eclipse.jdt.core.prefs @@ -13,9 +13,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.compliance=1.7 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -113,6 +113,6 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.5 +org.eclipse.jdt.core.compiler.source=1.7 org.eclipse.jdt.core.incompatibleJDKLevel=ignore org.eclipse.jdt.core.incompleteClasspath=error diff --git a/bundles/org.eclipse.osgi.services/META-INF/MANIFEST.MF b/bundles/org.eclipse.osgi.services/META-INF/MANIFEST.MF index a14ee70e1..81d50913a 100644 --- a/bundles/org.eclipse.osgi.services/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.osgi.services/META-INF/MANIFEST.MF @@ -21,7 +21,7 @@ Export-Package: org.osgi.service.cm;version="1.5";uses:="org.osgi.framework", org.osgi.service.http.runtime.dto;version="1.0";uses:="org.osgi.dto,org.osgi.framework.dto", org.osgi.service.http.whiteboard;version="1.0", org.osgi.service.log;version="1.4";uses:="org.osgi.framework", - org.osgi.service.metatype;version="1.3";uses:="org.osgi.framework", + org.osgi.service.metatype;version="1.4";uses:="org.osgi.framework", org.osgi.service.provisioning;version="1.2", org.osgi.service.upnp;version="1.2", org.osgi.service.useradmin;version="1.1";uses:="org.osgi.framework", @@ -40,7 +40,7 @@ Import-Package: javax.servlet;resolution:=optional, org.osgi.service.event;version="[1.3,1.4)", org.osgi.service.http;version="[1.2,1.3)", org.osgi.service.log;version="[1.4,1.5)", - org.osgi.service.metatype;version="[1.3,1.4)", + org.osgi.service.metatype;version="[1.4,1.5)", org.osgi.service.provisioning;version="[1.2,1.3)", org.osgi.service.upnp;version="[1.2,1.3)", org.osgi.service.useradmin;version="[1.1,1.2)", @@ -49,4 +49,4 @@ Import-Package: javax.servlet;resolution:=optional, org.osgi.util.promise;version="[1.0,2.0)" DynamicImport-Package: javax.servlet, javax.servlet.http -Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/Driver.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/Driver.java index db46dfadf..d15f3a264 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/Driver.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/Driver.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2000, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2000, 2015). 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. @@ -71,7 +71,7 @@ public interface Driver { * @throws java.lang.Exception if this Driver service cannot examine the * Device service */ - public int match(ServiceReference reference) throws Exception; + public int match(ServiceReference reference) throws Exception; /** * Attaches this Driver service to the Device service represented by the @@ -104,5 +104,5 @@ public interface Driver { * @throws java.lang.Exception if the driver cannot attach to the given * device and does not know of a more suitable driver */ - public String attach(ServiceReference reference) throws Exception; + public String attach(ServiceReference reference) throws Exception; } diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/DriverLocator.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/DriverLocator.java index fdbe1a5d8..78eb7d03b 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/DriverLocator.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/DriverLocator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2000, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2000, 2015). 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. @@ -48,7 +48,7 @@ public interface DriverLocator { * {@code null} if this Driver Locator service does not know of any * such drivers */ - public String[] findDrivers(Dictionary props); + public String[] findDrivers(Dictionary props); /** * Get an {@code InputStream} from which the driver bundle providing a diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/DriverSelector.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/DriverSelector.java index 179ecc7fc..41d24b1bc 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/DriverSelector.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/DriverSelector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2001, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2001, 2015). 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. @@ -50,5 +50,5 @@ public interface DriverSelector { * @return index into the array of {@code Match} objects, or * {@code SELECT_NONE} if no Driver service should be attached */ - public int select(ServiceReference reference, Match[] matches); + public int select(ServiceReference reference, Match[] matches); } diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/Match.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/Match.java index d16251848..e1218a1e2 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/Match.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/Match.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2001, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2001, 2015). 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. @@ -35,7 +35,7 @@ public interface Match { * * @return {@code ServiceReference} object to a Driver service. */ - public ServiceReference getDriver(); + public ServiceReference getDriver(); /** * Return the match value of this object. diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/package-info.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/package-info.java index 92de050fb..78617d061 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/package-info.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2010, 2012). All Rights Reserved. + * Copyright (c) OSGi Alliance (2010, 2016). 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. @@ -32,9 +32,10 @@ *

* {@code Import-Package: org.osgi.service.device; version="[1.1,1.2)"} * - * @version 1.1 * @author $Id$ */ +@Version("1.1") package org.osgi.service.device; +import org.osgi.annotation.versioning.Version; diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/packageinfo b/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/packageinfo deleted file mode 100644 index 3987f9c4e..000000000 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/device/packageinfo +++ /dev/null @@ -1 +0,0 @@ -version 1.1 diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/event/EventConstants.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/event/EventConstants.java index d002775d3..b9345200f 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/event/EventConstants.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/event/EventConstants.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2005, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2005, 2014). 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. @@ -237,7 +237,7 @@ public interface EventConstants { * This constant was released with an incorrectly spelled name. It has been * replaced by {@link #EXCEPTION_CLASS} * - * @deprecated As of 1.1, replaced by EXCEPTION_CLASS + * @deprecated As of 1.1. Replaced by {@link #EXCEPTION_CLASS}. */ public static final String EXECPTION_CLASS = "exception.class"; } diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/event/EventProperties.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/event/EventProperties.java index 548895a00..1ecc2e9ea 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/event/EventProperties.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/event/EventProperties.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2010, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2010, 2015). 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. @@ -109,6 +109,7 @@ public class EventProperties implements Map { * * @throws UnsupportedOperationException if called. */ + @Override public void clear() { properties.clear(); } @@ -119,6 +120,7 @@ public class EventProperties implements Map { * @param name The property name. * @return {@code true} If the property is present, {@code false} otherwise. */ + @Override public boolean containsKey(Object name) { return properties.containsKey(name); } @@ -129,6 +131,7 @@ public class EventProperties implements Map { * @param value The property value. * @return {@code true} If the value is present, {@code false} otherwise. */ + @Override public boolean containsValue(Object value) { return properties.containsValue(value); } @@ -138,6 +141,7 @@ public class EventProperties implements Map { * * @return A set containing the property name/value pairs. */ + @Override public Set> entrySet() { return properties.entrySet(); } @@ -148,6 +152,7 @@ public class EventProperties implements Map { * @param name The name of the specified property. * @return The value of the specified property. */ + @Override public Object get(Object name) { return properties.get(name); } @@ -158,6 +163,7 @@ public class EventProperties implements Map { * @return {@code true} If this properties is empty, {@code false} * otherwise. */ + @Override public boolean isEmpty() { return properties.isEmpty(); } @@ -167,6 +173,7 @@ public class EventProperties implements Map { * * @return The names of the properties. */ + @Override public Set keySet() { return properties.keySet(); } @@ -176,6 +183,7 @@ public class EventProperties implements Map { * * @throws UnsupportedOperationException if called. */ + @Override public Object put(String key, Object value) { return properties.put(key, value); } @@ -185,6 +193,7 @@ public class EventProperties implements Map { * * @throws UnsupportedOperationException if called. */ + @Override public void putAll(Map map) { properties.putAll(map); } @@ -194,6 +203,7 @@ public class EventProperties implements Map { * * @throws UnsupportedOperationException if called. */ + @Override public Object remove(Object key) { return properties.remove(key); } @@ -203,6 +213,7 @@ public class EventProperties implements Map { * * @return The number of properties. */ + @Override public int size() { return properties.size(); } @@ -212,6 +223,7 @@ public class EventProperties implements Map { * * @return The values of the properties. */ + @Override public Collection values() { return properties.values(); } diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/event/TopicPermission.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/event/TopicPermission.java index dbe0829e7..a315cdc5c 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/event/TopicPermission.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/event/TopicPermission.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2005, 2015). All Rights Reserved. + * Copyright (c) OSGi Alliance (2005, 2016). 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. @@ -289,7 +289,7 @@ public final class TopicPermission extends Permission { public String getActions() { String result = actions; if (result == null) { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); boolean comma = false; int mask = getActionsMask(); if ((mask & ACTION_PUBLISH) == ACTION_PUBLISH) { diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/event/packageinfo b/bundles/org.eclipse.osgi.services/src/org/osgi/service/event/packageinfo deleted file mode 100644 index 6435862fd..000000000 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/event/packageinfo +++ /dev/null @@ -1 +0,0 @@ -version 1.3.1 diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/log/LogEntry.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/log/LogEntry.java index 6b3ee59f7..9dca75876 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/log/LogEntry.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/log/LogEntry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2000, 2016). All Rights Reserved. + * Copyright (c) OSGi Alliance (2000, 2017). 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,11 +68,11 @@ public interface LogEntry { int getLevel(); /** - * Returns the human readable message associated with this {@code LogEntry} + * Returns the formatted message associated with this {@code LogEntry} * object. * - * @return {@code String} containing the message associated with this - * {@code LogEntry} object. + * @return {@code String} containing the formatted message associated with + * this {@code LogEntry} object. */ String getMessage(); diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeService.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeService.java index 3a507c14a..c5c96a364 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeService.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeService.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2005, 2015). All Rights Reserved. + * Copyright (c) OSGi Alliance (2005, 2017). 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. @@ -55,17 +55,27 @@ public interface MetaTypeService { /** * Capability name for meta type document processors. - * *

* Used in {@code Provide-Capability} and {@code Require-Capability} * manifest headers with the {@code osgi.extender} namespace. For example: * *

 	 * Require-Capability: osgi.extender;
-	 *  filter:="(&(osgi.extender=osgi.metatype)(version>=1.3)(!(version>=2.0)))"
+	 *  filter:="(&(osgi.extender=osgi.metatype)(version>=1.4)(!(version>=2.0)))"
 	 * 
* * @since 1.3 */ public static final String METATYPE_CAPABILITY_NAME = "osgi.metatype"; + + /** + * Compile time constant for the Specification Version of MetaType Service. + *

+ * Used in {@code Version} and {@code Requirement} annotations. The value of + * this compile time constant will change when the specification version of + * MetaType Service is updated. + * + * @since 1.4 + */ + public static final String METATYPE_SPECIFICATION_VERSION = "1.4.0"; } diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/metatype/package-info.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/metatype/package-info.java index ca1a06007..c55119ecb 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/metatype/package-info.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/metatype/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2010, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2010, 2017). 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. @@ -15,28 +15,27 @@ */ /** - * Metatype Package Version 1.3. - * + * Metatype Package Version 1.4. *

* Bundles wishing to use this package must list the package in the * Import-Package header of the bundle's manifest. This package has two types of * users: the consumers that use the API in this package and the providers that * implement the API in this package. - * *

* Example import for consumers using the API in this package: *

- * {@code Import-Package: org.osgi.service.metatype; version="[1.3,2.0)"} + * {@code Import-Package: org.osgi.service.metatype; version="[1.4,2.0)"} *

* Example import for providers implementing the API in this package: *

- * {@code Import-Package: org.osgi.service.metatype; version="[1.3,1.4)"} + * {@code Import-Package: org.osgi.service.metatype; version="[1.4,1.5)"} * * @author $Id$ */ -@Version("1.3") +@Version(METATYPE_SPECIFICATION_VERSION) package org.osgi.service.metatype; -import org.osgi.annotation.versioning.Version; +import static org.osgi.service.metatype.MetaTypeService.METATYPE_SPECIFICATION_VERSION; +import org.osgi.annotation.versioning.Version; diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/metatype/packageinfo b/bundles/org.eclipse.osgi.services/src/org/osgi/service/metatype/packageinfo deleted file mode 100644 index 0117a56c1..000000000 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/metatype/packageinfo +++ /dev/null @@ -1 +0,0 @@ -version 1.3 diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/provisioning/ProvisioningService.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/provisioning/ProvisioningService.java index 475106113..7fb7e78e0 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/provisioning/ProvisioningService.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/provisioning/ProvisioningService.java @@ -166,7 +166,7 @@ public interface ProvisioningService { * * @return A reference to the Provisioning Dictionary. */ - public Dictionary getInformation(); + public Dictionary getInformation(); /** * Replaces the Provisioning Information dictionary with the key/value pairs @@ -178,7 +178,7 @@ public interface ProvisioningService { * keys are values that are of an invalid type will be silently * ignored. */ - public void setInformation(Dictionary info); + public void setInformation(Dictionary info); /** * Adds the key/value pairs contained in {@code info} to the Provisioning @@ -189,7 +189,7 @@ public interface ProvisioningService { * the Provisioning Information dictionary. Any keys are values that * are of an invalid type will be silently ignored. */ - public void addInformation(Dictionary info); + public void addInformation(Dictionary info); /** * Processes the {@code ZipInputStream} and extracts information to add to diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/provisioning/package-info.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/provisioning/package-info.java index d47e07a89..8d2cafd1a 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/provisioning/package-info.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/provisioning/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2010, 2012). All Rights Reserved. + * Copyright (c) OSGi Alliance (2010, 2016). 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. @@ -32,9 +32,10 @@ *

* {@code Import-Package: org.osgi.service.provisioning; version="[1.2,1.3)"} * - * @version 1.2 * @author $Id$ */ +@Version("1.2") package org.osgi.service.provisioning; +import org.osgi.annotation.versioning.Version; diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/provisioning/packageinfo b/bundles/org.eclipse.osgi.services/src/org/osgi/service/provisioning/packageinfo deleted file mode 100644 index ef7df68cb..000000000 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/provisioning/packageinfo +++ /dev/null @@ -1 +0,0 @@ -version 1.2 diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPAction.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPAction.java index f1ba100ae..1dcd11587 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPAction.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPAction.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2002, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2002, 2015). 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. @@ -138,5 +138,5 @@ public interface UPnPAction { * * @see UPnPStateVariable */ - Dictionary invoke(Dictionary args) throws Exception; + Dictionary invoke(Dictionary args) throws Exception; } diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPDevice.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPDevice.java index a09c1c2f3..fe7d6d7d5 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPDevice.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPDevice.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2002, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2002, 2015). 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. @@ -287,5 +287,5 @@ public interface UPnPDevice { * Strings * */ - Dictionary getDescriptions(String locale); + Dictionary getDescriptions(String locale); } diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPEventListener.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPEventListener.java index 80582d96d..fab5adc95 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPEventListener.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPEventListener.java @@ -81,5 +81,5 @@ public interface UPnPEventListener { * * */ - void notifyUPnPEvent(String deviceId, String serviceId, Dictionary events); + void notifyUPnPEvent(String deviceId, String serviceId, Dictionary events); } diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPException.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPException.java index ffd3b84b0..c37703795 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPException.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2005, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2005, 2014). 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. @@ -107,7 +107,7 @@ public class UPnPException extends Exception { * * @return The UPnPErrorCode defined by a UPnP Forum working committee or * specified by a UPnP vendor. - * @deprecated As of version 1.2, replaced by {@link #getUPnPErrorCode()} + * @deprecated As of 1.2. Replaced by {@link #getUPnPErrorCode()}. */ public int getUPnPError_Code() { return getUPnPErrorCode(); diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPStateVariable.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPStateVariable.java index 1ebafb56d..f15242294 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPStateVariable.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPStateVariable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2002, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2002, 2015). 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. @@ -285,7 +285,7 @@ public interface UPnPStateVariable { * * @return A class object corresponding to the Java type of this argument. */ - Class getJavaDataType(); + Class getJavaDataType(); /** * Returns the UPnP type of this state variable. Valid types are defined as diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/package-info.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/package-info.java index 141651627..15372d222 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/package-info.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2010, 2012). All Rights Reserved. + * Copyright (c) OSGi Alliance (2010, 2016). 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. @@ -32,9 +32,10 @@ *

* {@code Import-Package: org.osgi.service.upnp; version="[1.2,1.3)"} * - * @version 1.2 * @author $Id$ */ +@Version("1.2") package org.osgi.service.upnp; +import org.osgi.annotation.versioning.Version; diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/packageinfo b/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/packageinfo deleted file mode 100644 index ef7df68cb..000000000 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/upnp/packageinfo +++ /dev/null @@ -1 +0,0 @@ -version 1.2 diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Role.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Role.java index c366d5a63..aff70c8ad 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Role.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Role.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2001, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2001, 2015). 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. @@ -113,5 +113,5 @@ public interface Role { * @return {@code Dictionary} containing the properties of this {@code Role} * object. */ - public Dictionary getProperties(); + public Dictionary getProperties(); } diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/User.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/User.java index 0520ec2dd..4a13bb52e 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/User.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/User.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2001, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2001, 2015). 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 +68,7 @@ public interface User extends Role { * @return {@code Dictionary} object containing the credentials of this * {@code User} object. */ - public Dictionary getCredentials(); + public Dictionary getCredentials(); /** * Checks to see if this {@code User} object has a credential with the diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminEvent.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminEvent.java index 606618cc7..3750d209c 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminEvent.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2001, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2001, 2015). 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. @@ -37,7 +37,7 @@ import org.osgi.framework.ServiceReference; * @author $Id$ */ public class UserAdminEvent { - private ServiceReference ref; + private ServiceReference ref; private int type; private Role role; /** @@ -71,7 +71,7 @@ public class UserAdminEvent { * @param type The event type. * @param role The {@code Role} object on which this event occurred. */ - public UserAdminEvent(ServiceReference ref, int type, Role role) { + public UserAdminEvent(ServiceReference ref, int type, Role role) { this.ref = ref; this.type = type; this.role = role; @@ -83,7 +83,7 @@ public class UserAdminEvent { * * @return The User Admin service's {@code ServiceReference} object. */ - public ServiceReference getServiceReference() { + public ServiceReference getServiceReference() { return ref; } diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminPermission.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminPermission.java index 536a2ac22..b950fbd87 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminPermission.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminPermission.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2001, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2001, 2016). 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,8 +20,11 @@ import java.io.IOException; import java.security.BasicPermission; import java.security.Permission; import java.security.PermissionCollection; +import java.util.ArrayList; +import java.util.Collections; import java.util.Enumeration; import java.util.Hashtable; +import java.util.List; /** * Permission to configure and access the {@link Role} objects managed by a User @@ -323,6 +326,7 @@ public final class UserAdminPermission extends BasicPermission { * @return {@code true} if the specified permission is implied by this * object; {@code false} otherwise. */ + @Override public boolean implies(Permission p) { if (p instanceof UserAdminPermission) { UserAdminPermission requested = (UserAdminPermission) p; @@ -345,10 +349,11 @@ public final class UserAdminPermission extends BasicPermission { * * @return the canonical string representation of the actions. */ + @Override public String getActions() { String result = actions; if (result == null) { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); boolean comma = false; int mask = getActionsMask(); if ((mask & ACTION_CHANGE_CREDENTIAL) == ACTION_CHANGE_CREDENTIAL) { @@ -378,6 +383,7 @@ public final class UserAdminPermission extends BasicPermission { * @return a new {@code PermissionCollection} object suitable for storing * {@code UserAdminPermission} objects. */ + @Override public PermissionCollection newPermissionCollection() { return new UserAdminPermissionCollection(); } @@ -393,6 +399,7 @@ public final class UserAdminPermission extends BasicPermission { * object, and has the same name and actions as this * {@code UserAdminPermission} object. */ + @Override public boolean equals(Object obj) { if (obj == this) { return true; @@ -411,6 +418,7 @@ public final class UserAdminPermission extends BasicPermission { * * @return A hash code value for this object. */ + @Override public int hashCode() { int h = 31 * 17 + getName().hashCode(); h = 31 * h + getActions().hashCode(); @@ -446,8 +454,9 @@ public final class UserAdminPermission extends BasicPermission { * {@code UserAdminPermission} object. * @see "org.osgi.service.permissionadmin.PermissionInfo.getEncoded()" */ + @Override public String toString() { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); sb.append('('); sb.append(getClass().getName()); sb.append(" \""); @@ -475,7 +484,7 @@ final class UserAdminPermissionCollection extends PermissionCollection { * @serial * @GuardedBy this */ - private final Hashtable permissions; + private final Hashtable permissions; /** * Boolean saying if "*" is in the collection. * @@ -488,7 +497,7 @@ final class UserAdminPermissionCollection extends PermissionCollection { * Creates an empty {@code UserAdminPermissionCollection} object. */ public UserAdminPermissionCollection() { - permissions = new Hashtable(); + permissions = new Hashtable<>(); all_allowed = false; } @@ -503,6 +512,7 @@ final class UserAdminPermissionCollection extends PermissionCollection { * @throws SecurityException If this {@code UserAdminPermissionCollection} * object has been marked readonly */ + @Override public void add(Permission permission) { if (!(permission instanceof UserAdminPermission)) throw new IllegalArgumentException("Invalid permission: " + permission); @@ -512,7 +522,7 @@ final class UserAdminPermissionCollection extends PermissionCollection { final UserAdminPermission uap = (UserAdminPermission) permission; final String name = uap.getName(); synchronized (this) { - final UserAdminPermission existing = (UserAdminPermission) permissions.get(name); + final UserAdminPermission existing = permissions.get(name); if (existing != null) { int oldMask = existing.getActionsMask(); int newMask = uap.getActionsMask(); @@ -539,6 +549,7 @@ final class UserAdminPermissionCollection extends PermissionCollection { * @return true if the given permission is implied by this * {@code PermissionCollection}, false otherwise. */ + @Override public boolean implies(Permission permission) { if (!(permission instanceof UserAdminPermission)) { return false; @@ -552,7 +563,7 @@ final class UserAdminPermissionCollection extends PermissionCollection { // Short circuit if the "*" Permission was added. // desired can only be ACTION_NONE when name is "admin". if (all_allowed && (desired != UserAdminPermission.ACTION_NONE)) { - x = (UserAdminPermission) permissions.get("*"); + x = permissions.get("*"); if (x != null) { effective |= x.getActionsMask(); if ((effective & desired) == desired) { @@ -564,7 +575,7 @@ final class UserAdminPermissionCollection extends PermissionCollection { // Check for full match first. Then work our way up the // name looking for matches on a.b.* - x = (UserAdminPermission) permissions.get(name); + x = permissions.get(name); } if (x != null) { // we have a direct hit! @@ -579,7 +590,7 @@ final class UserAdminPermissionCollection extends PermissionCollection { while ((last = name.lastIndexOf(".", offset)) != -1) { name = name.substring(0, last + 1) + "*"; synchronized (this) { - x = (UserAdminPermission) permissions.get(name); + x = permissions.get(name); } if (x != null) { effective |= x.getActionsMask(); @@ -600,7 +611,9 @@ final class UserAdminPermissionCollection extends PermissionCollection { * * @return an enumeration of all the {@code UserAdminPermission} objects. */ - public Enumeration elements() { - return permissions.elements(); + @Override + public Enumeration elements() { + List all = new ArrayList(permissions.values()); + return Collections.enumeration(all); } } diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/package-info.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/package-info.java index b79edb198..408a5172f 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/package-info.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2010, 2012). All Rights Reserved. + * Copyright (c) OSGi Alliance (2010, 2016). 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. @@ -32,9 +32,10 @@ *

* {@code Import-Package: org.osgi.service.useradmin; version="[1.1,1.2)"} * - * @version 1.1 * @author $Id$ */ +@Version("1.1") package org.osgi.service.useradmin; +import org.osgi.annotation.versioning.Version; diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/packageinfo b/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/packageinfo deleted file mode 100644 index 3987f9c4e..000000000 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/useradmin/packageinfo +++ /dev/null @@ -1 +0,0 @@ -version 1.1 diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/BasicEnvelope.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/BasicEnvelope.java index e7f7111ce..2c6074365 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/BasicEnvelope.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/BasicEnvelope.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2002, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2002, 2015). 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. @@ -45,6 +45,7 @@ public class BasicEnvelope implements Envelope { /** * @see org.osgi.service.wireadmin.Envelope#getValue() */ + @Override public Object getValue() { return value; } @@ -52,6 +53,7 @@ public class BasicEnvelope implements Envelope { /** * @see org.osgi.service.wireadmin.Envelope#getIdentification() */ + @Override public Object getIdentification() { return identification; } @@ -59,6 +61,7 @@ public class BasicEnvelope implements Envelope { /** * @see org.osgi.service.wireadmin.Envelope#getScope() */ + @Override public String getScope() { return scope; } diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Wire.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Wire.java index de75c27d5..f1c12931b 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Wire.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Wire.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2002, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2002, 2015). 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. @@ -118,7 +118,7 @@ public interface Wire { * {@link WireConstants#WIREADMIN_CONSUMER_FLAVORS} property or the * value of the property is not of type {@code Class[]}. */ - public Class[] getFlavors(); + public Class[] getFlavors(); /** * Update the value. @@ -216,7 +216,7 @@ public interface Wire { * @return The properties for this {@code Wire} object. The returned * {@code Dictionary} must be read only. */ - public Dictionary getProperties(); + public Dictionary getProperties(); /** * Return the calculated scope of this {@code Wire} object. diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdmin.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdmin.java index 783de096c..47b38d0f1 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdmin.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdmin.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2002, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2002, 2015). 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. @@ -90,7 +90,7 @@ public interface WireAdmin { * @throws java.lang.IllegalArgumentException If {@code properties} contains * invalid wire types or case variants of the same key name. */ - public Wire createWire(String producerPID, String consumerPID, Dictionary properties); + public Wire createWire(String producerPID, String consumerPID, Dictionary properties); /** * Delete a {@code Wire} object. @@ -132,7 +132,7 @@ public interface WireAdmin { * @throws java.lang.IllegalArgumentException If {@code properties} contains * invalid wire types or case variants of the same key name. */ - public void updateWire(Wire wire, Dictionary properties); + public void updateWire(Wire wire, Dictionary properties); /** * Return the {@code Wire} objects that match the given {@code filter}. diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdminEvent.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdminEvent.java index 665e72cdd..9b407189c 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdminEvent.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdminEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2002, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2002, 2015). 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. @@ -60,7 +60,7 @@ public class WireAdminEvent { /** * The WireAdmin service which created this event. */ - private final ServiceReference reference; + private final ServiceReference reference; /** * The {@code Wire} object associated with this event. */ @@ -205,7 +205,7 @@ public class WireAdminEvent { * @param exception An exception associated with this event. This may be * {@code null} if no exception is associated with this event. */ - public WireAdminEvent(ServiceReference reference, int type, Wire wire, Throwable exception) { + public WireAdminEvent(ServiceReference reference, int type, Wire wire, Throwable exception) { this.reference = reference; this.wire = wire; this.type = type; @@ -219,7 +219,7 @@ public class WireAdminEvent { * @return The {@code ServiceReference} object for the Wire Admin service * that created this event. */ - public ServiceReference getServiceReference() { + public ServiceReference getServiceReference() { return reference; } diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WirePermission.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WirePermission.java index ecf1b5fa8..53e2f6000 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WirePermission.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WirePermission.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2002, 2015). All Rights Reserved. + * Copyright (c) OSGi Alliance (2002, 2016). 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,8 +20,11 @@ import java.io.IOException; import java.security.BasicPermission; import java.security.Permission; import java.security.PermissionCollection; +import java.util.ArrayList; +import java.util.Collections; import java.util.Enumeration; import java.util.Hashtable; +import java.util.List; /** * Permission for the scope of a {@code Wire} object. When a {@code Envelope} @@ -190,6 +193,7 @@ final public class WirePermission extends BasicPermission { * @return {@code true} if the specified permission is implied by this * object; {@code false} otherwise. */ + @Override public boolean implies(Permission p) { if (p instanceof WirePermission) { WirePermission requested = (WirePermission) p; @@ -206,10 +210,11 @@ final public class WirePermission extends BasicPermission { * * @return The canonical string representation of the actions. */ + @Override public String getActions() { String result = actions; if (result == null) { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); boolean comma = false; int mask = getActionsMask(); if ((mask & ACTION_PRODUCE) == ACTION_PRODUCE) { @@ -233,6 +238,7 @@ final public class WirePermission extends BasicPermission { * @return A new {@code PermissionCollection} object suitable for storing * {@code WirePermission} objects. */ + @Override public PermissionCollection newPermissionCollection() { return new WirePermissionCollection(); } @@ -248,6 +254,7 @@ final public class WirePermission extends BasicPermission { * name and actions as this {@code WirePermission} object; * {@code false} otherwise. */ + @Override public boolean equals(Object obj) { if (obj == this) { return true; @@ -264,6 +271,7 @@ final public class WirePermission extends BasicPermission { * * @return Hash code value for this object. */ + @Override public int hashCode() { int h = 31 * 17 + getName().hashCode(); h = 31 * h + getActions().hashCode(); @@ -278,8 +286,9 @@ final public class WirePermission extends BasicPermission { * * @return information about this {@code Permission} object. */ + @Override public String toString() { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); sb.append('('); sb.append(getClass().getName()); sb.append(" \""); @@ -330,7 +339,7 @@ final class WirePermissionCollection extends PermissionCollection { * @GuardedBy this * @serial */ - private final Hashtable permissions; + private final Hashtablepermissions; /** * Boolean saying if "*" is in the collection. * @@ -344,7 +353,7 @@ final class WirePermissionCollection extends PermissionCollection { * */ public WirePermissionCollection() { - permissions = new Hashtable(); + permissions = new Hashtable<>(); all_allowed = false; } @@ -359,6 +368,7 @@ final class WirePermissionCollection extends PermissionCollection { * @throws SecurityException If this PermissionCollection has been marked * read-only. */ + @Override public void add(Permission permission) { if (!(permission instanceof WirePermission)) { throw new IllegalArgumentException("invalid permission: " + permission); @@ -369,7 +379,7 @@ final class WirePermissionCollection extends PermissionCollection { WirePermission wp = (WirePermission) permission; String name = wp.getName(); synchronized (this) { - WirePermission existing = (WirePermission) permissions.get(name); + WirePermission existing = permissions.get(name); if (existing != null) { int oldMask = existing.getActionsMask(); int newMask = wp.getActionsMask(); @@ -396,6 +406,7 @@ final class WirePermissionCollection extends PermissionCollection { * @return {@code true} if {@code permission} is a proper subset of a * permission in the set; {@code false} otherwise. */ + @Override public boolean implies(Permission permission) { if (!(permission instanceof WirePermission)) { return false; @@ -408,7 +419,7 @@ final class WirePermissionCollection extends PermissionCollection { synchronized (this) { // short circuit if the "*" Permission was added if (all_allowed) { - x = (WirePermission) permissions.get("*"); + x = permissions.get("*"); if (x != null) { effective |= x.getActionsMask(); if ((effective & desired) == desired) @@ -418,7 +429,7 @@ final class WirePermissionCollection extends PermissionCollection { // strategy: // Check for full match first. Then work our way up the // name looking for matches on a.b.* - x = (WirePermission) permissions.get(name); + x = permissions.get(name); } if (x != null) { // we have a direct hit! @@ -433,7 +444,7 @@ final class WirePermissionCollection extends PermissionCollection { while ((last = name.lastIndexOf(".", offset)) != -1) { name = name.substring(0, last + 1) + "*"; synchronized (this) { - x = (WirePermission) permissions.get(name); + x = permissions.get(name); } if (x != null) { effective |= x.getActionsMask(); @@ -453,7 +464,9 @@ final class WirePermissionCollection extends PermissionCollection { * * @return Enumeration of all the Permission objects. */ - public Enumeration elements() { - return permissions.elements(); + @Override + public Enumeration elements() { + List all = new ArrayList(permissions.values()); + return Collections.enumeration(all); } } diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/package-info.java b/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/package-info.java index b5af96bb0..6058a3d18 100644 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/package-info.java +++ b/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2010, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2010, 2016). 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. @@ -32,9 +32,10 @@ *

* {@code Import-Package: org.osgi.service.wireadmin; version="[1.0,1.1)"} * - * @version 1.0.1 * @author $Id$ */ +@Version("1.0.1") package org.osgi.service.wireadmin; +import org.osgi.annotation.versioning.Version; diff --git a/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/packageinfo b/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/packageinfo deleted file mode 100644 index b3d1f97f7..000000000 --- a/bundles/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/packageinfo +++ /dev/null @@ -1 +0,0 @@ -version 1.0.1 diff --git a/bundles/org.eclipse.osgi.util/META-INF/MANIFEST.MF b/bundles/org.eclipse.osgi.util/META-INF/MANIFEST.MF index f58db0c5e..fd4880949 100644 --- a/bundles/org.eclipse.osgi.util/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.osgi.util/META-INF/MANIFEST.MF @@ -9,7 +9,7 @@ Bundle-Localization: plugin Bundle-DocUrl: http://www.eclipse.org Bundle-ContactAddress: www.eclipse.org Export-Package: org.osgi.util.function;version="1.1", - org.osgi.util.measurement;version="1.0.1", + org.osgi.util.measurement;version="1.0.2", org.osgi.util.position;version="1.0.1";uses:="org.osgi.util.measurement", org.osgi.util.promise;version="1.1";uses:="org.osgi.util.function", org.osgi.util.xml;version="1.0.1";uses:="org.osgi.framework,javax.xml.parsers" diff --git a/bundles/org.eclipse.osgi.util/src/org/osgi/util/measurement/Measurement.java b/bundles/org.eclipse.osgi.util/src/org/osgi/util/measurement/Measurement.java index 5d6be0f87..4a8cf6629 100644 --- a/bundles/org.eclipse.osgi.util/src/org/osgi/util/measurement/Measurement.java +++ b/bundles/org.eclipse.osgi.util/src/org/osgi/util/measurement/Measurement.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2002, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2002, 2016). 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. @@ -47,7 +47,7 @@ package org.osgi.util.measurement; * @Immutable * @author $Id$ */ -public class Measurement implements Comparable { +public class Measurement implements Comparable { private final double value; private final double error; private final long time; @@ -362,10 +362,11 @@ public class Measurement implements Comparable { * @return a {@code String} object representing this {@code Measurement} * object. */ + @Override public String toString() { String result = name; if (result == null) { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); sb.append(value); if (error != 0.0d) { sb.append(" +/- "); @@ -408,6 +409,7 @@ public class Measurement implements Comparable { * {@code Measurement} object is not equal to the {@code Unit} * object of this object. */ + @Override public int compareTo(Object obj) { if (this == obj) { return 0; @@ -437,6 +439,7 @@ public class Measurement implements Comparable { * * @return A hash code value for this object. */ + @Override public int hashCode() { int h = hashCode; if (h == 0) { @@ -463,6 +466,7 @@ public class Measurement implements Comparable { * @return {@code true} if this object is equal to the specified object; * {@code false} otherwise. */ + @Override public boolean equals(Object obj) { if (this == obj) { return true; diff --git a/bundles/org.eclipse.osgi.util/src/org/osgi/util/measurement/State.java b/bundles/org.eclipse.osgi.util/src/org/osgi/util/measurement/State.java index 415613f39..e9fcca59e 100644 --- a/bundles/org.eclipse.osgi.util/src/org/osgi/util/measurement/State.java +++ b/bundles/org.eclipse.osgi.util/src/org/osgi/util/measurement/State.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2002, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2002, 2016). 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. @@ -91,8 +91,9 @@ public class State { * * @return a {@code String} object representing this object. */ + @Override public String toString() { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); sb.append(value); if (name != null) { sb.append(" \""); @@ -107,6 +108,7 @@ public class State { * * @return A hash code value for this object. */ + @Override public int hashCode() { int hash = 31 * 17 + value; if (name != null) { @@ -123,6 +125,7 @@ public class State { * @return {@code true} if this object is equal to the specified object; * {@code false} otherwise. */ + @Override public boolean equals(Object obj) { if (this == obj) { return true; diff --git a/bundles/org.eclipse.osgi.util/src/org/osgi/util/measurement/Unit.java b/bundles/org.eclipse.osgi.util/src/org/osgi/util/measurement/Unit.java index e97563d26..64d749c23 100644 --- a/bundles/org.eclipse.osgi.util/src/org/osgi/util/measurement/Unit.java +++ b/bundles/org.eclipse.osgi.util/src/org/osgi/util/measurement/Unit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2002, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2002, 2016). 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. @@ -16,7 +16,8 @@ package org.osgi.util.measurement; -import java.util.Hashtable; +import java.util.HashMap; +import java.util.Map; /** * A unit system for measurements. @@ -250,8 +251,8 @@ public class Unit { */ private final static Unit[] allUnits = new Unit[] {m, s, kg, K, A, mol, cd, rad, m_s, m_s2, m2, m3, Hz, N, Pa, J, W, C, V, F, Ohm, S, Wb, T, lx, Gy, kat, unity}; - /* @GuardedBy("this") */ - private static Hashtable base; + /* @GuardedBy("Unit.class") */ + private static Map base; private final String name; private final long type; @@ -289,6 +290,7 @@ public class Unit { * @return true if the specified {@code Unit} object is equal to this * {@code Unit} object. */ + @Override public boolean equals(Object obj) { if (this == obj) { return true; @@ -304,6 +306,7 @@ public class Unit { * * @return This object's hash code. */ + @Override public int hashCode() { return 31 * 17 + (int) (type ^ (type >>> 32)); } @@ -399,13 +402,13 @@ public class Unit { static synchronized Unit find(long type) { if (base == null) { int size = allUnits.length; - base = new Hashtable(size << 1); + base = new HashMap<>(size << 1); for (int i = 0; i < size; i++) { base.put(allUnits[i], allUnits[i]); } } Unit unit = new Unit(null, type); - Unit out = (Unit) base.get(unit); + Unit out = base.get(unit); if (out == null) { base.put(unit, unit); out = unit; @@ -418,6 +421,7 @@ public class Unit { * * @return A {@code String} object representing the {@code Unit} */ + @Override public String toString() { return name; } @@ -431,8 +435,8 @@ public class Unit { int _mol = (int) (((type >> mol_SHIFT) & MASK) - ZERO); int _cd = (int) (((type >> cd_SHIFT) & MASK) - ZERO); int _rad = (int) (((type >> rad_SHIFT) & MASK) - ZERO); - StringBuffer numerator = new StringBuffer(); - StringBuffer denominator = new StringBuffer(); + StringBuilder numerator = new StringBuilder(); + StringBuilder denominator = new StringBuilder(); addSIname(_m, "m", numerator, denominator); addSIname(_s, "s", numerator, denominator); addSIname(_kg, "kg", numerator, denominator); @@ -451,9 +455,10 @@ public class Unit { return numerator.toString(); } - private static void addSIname(int si, String name, StringBuffer numerator, StringBuffer denominator) { + private static void addSIname(int si, String name, StringBuilder numerator, + StringBuilder denominator) { if (si != 0) { - StringBuffer sb = (si > 0) ? numerator : denominator; + StringBuilder sb = (si > 0) ? numerator : denominator; if (sb.length() > 0) { sb.append("*"); } diff --git a/bundles/org.eclipse.osgi.util/src/org/osgi/util/measurement/package-info.java b/bundles/org.eclipse.osgi.util/src/org/osgi/util/measurement/package-info.java index 7603bac0b..bac289ab2 100644 --- a/bundles/org.eclipse.osgi.util/src/org/osgi/util/measurement/package-info.java +++ b/bundles/org.eclipse.osgi.util/src/org/osgi/util/measurement/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2010, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2010, 2016). 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,9 +26,10 @@ *

* {@code Import-Package: org.osgi.util.measurement; version="[1.0,2.0)"} * - * @version 1.0.1 * @author $Id$ */ +@Version("1.0.2") package org.osgi.util.measurement; +import org.osgi.annotation.versioning.Version; diff --git a/bundles/org.eclipse.osgi.util/src/org/osgi/util/measurement/packageinfo b/bundles/org.eclipse.osgi.util/src/org/osgi/util/measurement/packageinfo deleted file mode 100644 index c2664475c..000000000 --- a/bundles/org.eclipse.osgi.util/src/org/osgi/util/measurement/packageinfo +++ /dev/null @@ -1 +0,0 @@ -version 1.0.1 \ No newline at end of file diff --git a/bundles/org.eclipse.osgi.util/src/org/osgi/util/position/package-info.java b/bundles/org.eclipse.osgi.util/src/org/osgi/util/position/package-info.java index 63af1b6e6..b67b8069b 100644 --- a/bundles/org.eclipse.osgi.util/src/org/osgi/util/position/package-info.java +++ b/bundles/org.eclipse.osgi.util/src/org/osgi/util/position/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2010, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2010, 2016). 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,9 +26,10 @@ *

* {@code Import-Package: org.osgi.util.position; version="[1.0,2.0)"} * - * @version 1.0.1 * @author $Id$ */ +@Version("1.0.1") package org.osgi.util.position; +import org.osgi.annotation.versioning.Version; diff --git a/bundles/org.eclipse.osgi.util/src/org/osgi/util/position/packageinfo b/bundles/org.eclipse.osgi.util/src/org/osgi/util/position/packageinfo deleted file mode 100644 index c2664475c..000000000 --- a/bundles/org.eclipse.osgi.util/src/org/osgi/util/position/packageinfo +++ /dev/null @@ -1 +0,0 @@ -version 1.0.1 \ No newline at end of file diff --git a/bundles/org.eclipse.osgi.util/src/org/osgi/util/promise/Deferred.java b/bundles/org.eclipse.osgi.util/src/org/osgi/util/promise/Deferred.java index 004925fa1..25c7442d3 100644 --- a/bundles/org.eclipse.osgi.util/src/org/osgi/util/promise/Deferred.java +++ b/bundles/org.eclipse.osgi.util/src/org/osgi/util/promise/Deferred.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2014, 2016). All Rights Reserved. + * Copyright (c) OSGi Alliance (2014, 2017). 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. @@ -16,7 +16,10 @@ package org.osgi.util.promise; -import static org.osgi.util.promise.PromiseImpl.requireNonNull; +import static java.util.Objects.requireNonNull; + +import java.util.concurrent.Executor; +import java.util.concurrent.ScheduledExecutorService; /** * A Deferred Promise resolution. @@ -42,14 +45,49 @@ public class Deferred { private final PromiseImpl promise; /** - * Create a new Deferred with an associated Promise. + * Create a new Deferred. + *

+ * The default callback executor and default scheduled executor will be + * used. */ public Deferred() { - promise = new PromiseImpl<>(); + this(null, null); + } + + /** + * Create a new Deferred with the specified callback executor. + *

+ * The default scheduled executor will be used. + * + * @param callbackExecutor The executor to use for callbacks. {@code null} + * can be specified for the default callback executor. + * @since 1.1 + */ + public Deferred(Executor callbackExecutor) { + this(callbackExecutor, null); + } + + /** + * Create a new Deferred with the specified callback and scheduled + * executors. + * + * @param callbackExecutor The executor to use for callbacks. {@code null} + * can be specified for the default callback executor. + * @param scheduledExecutor The scheduled executor for use for scheduled + * operations. {@code null} can be specified for the default + * scheduled executor. + * @since 1.1 + */ + public Deferred(Executor callbackExecutor, + ScheduledExecutorService scheduledExecutor) { + promise = new PromiseImpl<>(callbackExecutor, scheduledExecutor); } /** * Returns the Promise associated with this Deferred. + *

+ * All Promise objects created by the associated Promise will use the + * executors of the associated Promise. * * @return The Promise associated with this Deferred. */ diff --git a/bundles/org.eclipse.osgi.util/src/org/osgi/util/promise/PromiseImpl.java b/bundles/org.eclipse.osgi.util/src/org/osgi/util/promise/PromiseImpl.java index 2afb3771f..1a65fc8ef 100644 --- a/bundles/org.eclipse.osgi.util/src/org/osgi/util/promise/PromiseImpl.java +++ b/bundles/org.eclipse.osgi.util/src/org/osgi/util/promise/PromiseImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2014, 2016). All Rights Reserved. + * Copyright (c) OSGi Alliance (2014, 2017). 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. @@ -16,6 +16,8 @@ package org.osgi.util.promise; +import static java.util.Objects.requireNonNull; + import java.lang.reflect.InvocationTargetException; import java.util.NoSuchElementException; import java.util.concurrent.BlockingQueue; @@ -23,11 +25,13 @@ import java.util.concurrent.CancellationException; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executor; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.RunnableScheduledFuture; +import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.SynchronousQueue; @@ -42,17 +46,25 @@ import org.osgi.util.function.Predicate; /** * Promise implementation. - * *

* This class is not used directly by clients. Clients should use * {@link Deferred} to create a resolvable {@link Promise}. * * @param The result type associated with the Promise. - * * @ThreadSafe * @author $Id$ */ final class PromiseImpl implements Promise { + /** + * The executor to use for callbacks. If {@code null}, the default callback + * executor is used. + */ + private final Executor callbackExecutor; + /** + * The executor to use for scheduled operations. If {@code null}, the + * default scheduled executor is used. + */ + private final ScheduledExecutorService scheduledExecutor; /** * A ConcurrentLinkedQueue to hold the callbacks for this Promise, so no * additional synchronization is required to write to or read from the @@ -91,8 +103,17 @@ final class PromiseImpl implements Promise { /** * Initialize this Promise. + * + * @param callbackExecutor The executor to use for callbacks. {@code null} + * can be specified for the default callback executor. + * @param scheduledExecutor The scheduled executor for use for scheduled + * operations. {@code null} can be specified for the default + * scheduled executor. */ - PromiseImpl() { + PromiseImpl(Executor callbackExecutor, + ScheduledExecutorService scheduledExecutor) { + this.callbackExecutor = callbackExecutor; + this.scheduledExecutor = scheduledExecutor; callbacks = new ConcurrentLinkedQueue<>(); resolved = new CountDownLatch(1); } @@ -102,13 +123,21 @@ final class PromiseImpl implements Promise { * * @param v The value of this resolved Promise. * @param f The failure of this resolved Promise. + * @param callbackExecutor The executor to use for callbacks. {@code null} + * can be specified for the default callback executor. + * @param scheduledExecutor The scheduled executor for use for scheduled + * operations. {@code null} can be specified for the default + * scheduled executor. */ - PromiseImpl(T v, Throwable f) { + PromiseImpl(T v, Throwable f, Executor callbackExecutor, + ScheduledExecutorService scheduledExecutor) { if (f == null) { value = v; } else { fail = f; } + this.callbackExecutor = callbackExecutor; + this.scheduledExecutor = scheduledExecutor; callbacks = new ConcurrentLinkedQueue<>(); resolved = new CountDownLatch(0); } @@ -163,24 +192,6 @@ final class PromiseImpl implements Promise { } } - /** - * Call any registered callbacks if this Promise is resolved. - */ - private void notifyCallbacks() { - if (resolved.getCount() != 0) { - return; // return if not resolved - } - - /* - * Note: multiple threads can be in this method removing callbacks from - * the queue and executing them, so the order in which callbacks are - * executed cannot be specified. - */ - for (Runnable callback = callbacks.poll(); callback != null; callback = callbacks.poll()) { - Callbacks.execute(callback); - } - } - /** * {@inheritDoc} */ @@ -244,24 +255,83 @@ final class PromiseImpl implements Promise { return this; } + /** + * Call any registered callbacks if this Promise is resolved. + */ + private void notifyCallbacks() { + if (resolved.getCount() != 0) { + return; // return if not resolved + } + + /* + * Note: multiple threads can be in this method removing callbacks from + * the queue and executing them, so the order in which callbacks are + * executed cannot be specified. + */ + Executor executor = callbackExecutor; + for (Runnable callback = callbacks.poll(); callback != null; callback = callbacks.poll()) { + if (executor == null) { + executor = DefaultExecutors.callbackExecutor(); + } + try { + try { + executor.execute(callback); + } catch (RejectedExecutionException e) { + callback.run(); + } + } catch (Throwable t) { + uncaughtException(t); + } + } + } + + /** + * Handle an uncaught exception from a Runnable. + * + * @param t The uncaught exception. + * @since 1.1 + */ + static void uncaughtException(Throwable t) { + try { + Thread thread = Thread.currentThread(); + thread.getUncaughtExceptionHandler().uncaughtException(thread, t); + } catch (Throwable ignored) { + // we ignore this + } + } + /** * {@inheritDoc} */ @Override public Promise then(Success success, Failure failure) { - PromiseImpl chained = new PromiseImpl<>(); + PromiseImpl chained = new PromiseImpl<>(callbackExecutor, + scheduledExecutor); onResolve(chained.new Then<>(this, success, failure)); return chained; } /** * {@inheritDoc} + * + * @since 1.1 */ @Override public Promise then(Success success) { return then(success, null); } + /** + * {@inheritDoc} + */ + @Override + public Promise then(Callback callback) { + PromiseImpl chained = new PromiseImpl<>(callbackExecutor, + scheduledExecutor); + onResolve(chained.new Chain(this, callback)); + return chained; + } + /** * A callback used to chain promises for the {@link #then(Success, Failure)} * method. @@ -356,16 +426,6 @@ final class PromiseImpl implements Promise { } } - /** - * {@inheritDoc} - */ - @Override - public Promise then(Callback callback) { - PromiseImpl chained = new PromiseImpl<>(); - onResolve(chained.new Chain(this, callback)); - return chained; - } - /** * Resolve this Promise with the specified Promise. * @@ -386,7 +446,8 @@ final class PromiseImpl implements Promise { * resolved. */ Promise resolveWith(Promise with) { - PromiseImpl chained = new PromiseImpl<>(); + PromiseImpl chained = new PromiseImpl<>(callbackExecutor, + scheduledExecutor); with.onResolve(new ResolveWith(with, chained)); return chained; } @@ -424,7 +485,8 @@ final class PromiseImpl implements Promise { */ @Override public Promise filter(Predicate predicate) { - PromiseImpl chained = new PromiseImpl<>(); + PromiseImpl chained = new PromiseImpl<>(callbackExecutor, + scheduledExecutor); onResolve(chained.new Filter(this, predicate)); return chained; } @@ -464,7 +526,8 @@ final class PromiseImpl implements Promise { */ @Override public Promise map(Function mapper) { - PromiseImpl chained = new PromiseImpl<>(); + PromiseImpl chained = new PromiseImpl<>(callbackExecutor, + scheduledExecutor); onResolve(chained.new Map<>(this, mapper)); return chained; } @@ -504,7 +567,8 @@ final class PromiseImpl implements Promise { */ @Override public Promise flatMap(Function> mapper) { - PromiseImpl chained = new PromiseImpl<>(); + PromiseImpl chained = new PromiseImpl<>(callbackExecutor, + scheduledExecutor); onResolve(chained.new FlatMap<>(this, mapper)); return chained; } @@ -548,7 +612,8 @@ final class PromiseImpl implements Promise { */ @Override public Promise recover(Function, ? extends T> recovery) { - PromiseImpl chained = new PromiseImpl<>(); + PromiseImpl chained = new PromiseImpl<>(callbackExecutor, + scheduledExecutor); onResolve(chained.new Recover(this, recovery)); return chained; } @@ -591,7 +656,8 @@ final class PromiseImpl implements Promise { */ @Override public Promise recoverWith(Function, Promise> recovery) { - PromiseImpl chained = new PromiseImpl<>(); + PromiseImpl chained = new PromiseImpl<>(callbackExecutor, + scheduledExecutor); onResolve(chained.new RecoverWith(this, recovery)); return chained; } @@ -635,7 +701,8 @@ final class PromiseImpl implements Promise { */ @Override public Promise fallbackTo(Promise fallback) { - PromiseImpl chained = new PromiseImpl<>(); + PromiseImpl chained = new PromiseImpl<>(callbackExecutor, + scheduledExecutor); onResolve(chained.new FallbackTo(this, fallback)); return chained; } @@ -665,6 +732,29 @@ final class PromiseImpl implements Promise { } } + /** + * Schedule a operation on the scheduled executor. + * + * @since 1.1 + */ + ScheduledFuture< ? > schedule(Runnable operation, long delay, + TimeUnit unit) { + ScheduledExecutorService executor = scheduledExecutor; + if (executor == null) { + executor = DefaultExecutors.scheduledExecutor(); + } + try { + try { + return executor.schedule(operation, delay, unit); + } catch (RejectedExecutionException e) { + operation.run(); + } + } catch (Throwable t) { + uncaughtException(t); + } + return null; + } + /** * {@inheritDoc} * @@ -672,7 +762,8 @@ final class PromiseImpl implements Promise { */ @Override public Promise timeout(long millis) { - PromiseImpl chained = new PromiseImpl<>(); + PromiseImpl chained = new PromiseImpl<>(callbackExecutor, + scheduledExecutor); if (!isDone()) { onResolve(chained.new Timeout(millis, TimeUnit.MILLISECONDS)); } @@ -691,7 +782,7 @@ final class PromiseImpl implements Promise { private final ScheduledFuture< ? > future; Timeout(long timeout, TimeUnit unit) { - future = Callbacks.schedule(new TimeoutAction(), timeout, unit); + future = schedule(new TimeoutAction(), timeout, unit); } @Override @@ -701,15 +792,16 @@ final class PromiseImpl implements Promise { } } } - + /** * Callback used to fail the Promise if the timeout expires. * * @Immutable + * @since 1.1 */ private final class TimeoutAction implements Runnable { TimeoutAction() {} - + @Override public void run() { tryResolve(null, new TimeoutException()); @@ -723,7 +815,8 @@ final class PromiseImpl implements Promise { */ @Override public Promise delay(long millis) { - PromiseImpl chained = new PromiseImpl<>(); + PromiseImpl chained = new PromiseImpl<>(callbackExecutor, + scheduledExecutor); onResolve(new Delay(chained.new Chain(this), millis, TimeUnit.MILLISECONDS)); return chained; @@ -736,76 +829,54 @@ final class PromiseImpl implements Promise { * @Immutable * @since 1.1 */ - private static final class Delay implements Runnable { - private final Runnable callback; + private final class Delay implements Runnable { + private final Runnable operation; private final long delay; private final TimeUnit unit; - Delay(Runnable callback, long delay, TimeUnit unit) { - this.callback = callback; + Delay(Runnable operation, long delay, TimeUnit unit) { + this.operation = operation; this.delay = delay; this.unit = unit; } @Override public void run() { - Callbacks.schedule(callback, delay, unit); + schedule(operation, delay, unit); } } /** - * Callback handler used to asynchronously execute callbacks. + * Default executors for callbacks. * * @Immutable * @since 1.1 */ - private static final class Callbacks + private static final class DefaultExecutors implements ThreadFactory, RejectedExecutionHandler, Runnable { - private static final Callbacks callbacks; + private static final DefaultExecutors callbacks; private static final ScheduledExecutor scheduledExecutor; private static final ThreadPoolExecutor callbackExecutor; static { - callbacks = new Callbacks(); + callbacks = new DefaultExecutors(); scheduledExecutor = new ScheduledExecutor(2, callbacks); callbackExecutor = new ThreadPoolExecutor(0, 64, 60L, TimeUnit.SECONDS, new SynchronousQueue(), callbacks, callbacks); } - /** - * Schedule a callback on the scheduled executor - */ - static ScheduledFuture< ? > schedule(Runnable callback, long delay, - TimeUnit unit) { - try { - return scheduledExecutor.schedule(callback, delay, unit); - } catch (RejectedExecutionException e) { - callbacks.rejectedExecution(callback, scheduledExecutor); - return null; - } + static Executor callbackExecutor() { + return callbackExecutor; } - /** - * Execute a callback on the callback executor - */ - static void execute(Runnable callback) { - callbackExecutor.execute(callback); - } - - static void uncaughtException(Throwable t) { - try { - Thread thread = Thread.currentThread(); - thread.getUncaughtExceptionHandler().uncaughtException(thread, - t); - } catch (Throwable ignored) { - // we ignore this - } + static ScheduledExecutorService scheduledExecutor() { + return scheduledExecutor; } private final AtomicBoolean shutdownHookInstalled; private final ThreadFactory delegateThreadFactory; - private Callbacks() { + private DefaultExecutors() { shutdownHookInstalled = new AtomicBoolean(); delegateThreadFactory = Executors.defaultThreadFactory(); } @@ -929,13 +1000,14 @@ final class PromiseImpl implements Promise { * A holder of the result of a promise. * * @NotThreadSafe + * @since 1.1 */ static final class Result

{ Throwable fail; P value; - + Result() {} - + static Result collect(Promise< ? extends R> promise) { Result result = new Result<>(); final boolean interrupted = Thread.interrupted(); @@ -954,11 +1026,4 @@ final class PromiseImpl implements Promise { return result; } } - - static V requireNonNull(V value) { - if (value != null) { - return value; - } - throw new NullPointerException(); - } } diff --git a/bundles/org.eclipse.osgi.util/src/org/osgi/util/promise/Promises.java b/bundles/org.eclipse.osgi.util/src/org/osgi/util/promise/Promises.java index 7067fe50a..394bce4bb 100644 --- a/bundles/org.eclipse.osgi.util/src/org/osgi/util/promise/Promises.java +++ b/bundles/org.eclipse.osgi.util/src/org/osgi/util/promise/Promises.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2014, 2016). All Rights Reserved. + * Copyright (c) OSGi Alliance (2014, 2017). 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. @@ -16,7 +16,7 @@ package org.osgi.util.promise; -import static org.osgi.util.promise.PromiseImpl.requireNonNull; +import static java.util.Objects.requireNonNull; import java.util.ArrayList; import java.util.Arrays; @@ -38,43 +38,42 @@ public class Promises { } /** - * Create a new Promise that has been resolved with the specified value. + * Returns a new Promise that has been resolved with the specified value. * * @param The value type associated with the returned Promise. * @param value The value of the resolved Promise. * @return A new Promise that has been resolved with the specified value. */ public static Promise resolved(T value) { - return new PromiseImpl<>(value, null); + return new PromiseImpl<>(value, null, null, null); } /** - * Create a new Promise that has been resolved with the specified failure. + * Returns a new Promise that has been resolved with the specified failure. * * @param The value type associated with the returned Promise. * @param failure The failure of the resolved Promise. Must not be - * {@code null}. + * {@code null}. * @return A new Promise that has been resolved with the specified failure. */ public static Promise failed(Throwable failure) { - return new PromiseImpl<>(null, requireNonNull(failure)); + return new PromiseImpl<>(null, requireNonNull(failure), null, null); } /** - * Create a new Promise that is a latch on the resolution of the specified + * Returns a new Promise that is a latch on the resolution of the specified * Promises. - * *

- * The new Promise acts as a gate and must be resolved after all of the + * The returned Promise acts as a gate and must be resolved after all of the * specified Promises are resolved. * * @param The value type of the List value associated with the returned - * Promise. + * Promise. * @param A subtype of the value type of the List value associated with - * the returned Promise. + * the returned Promise. * @param promises The Promises which must be resolved before the returned - * Promise must be resolved. Must not be {@code null} and all of the - * elements in the collection must not be {@code null}. + * Promise must be resolved. Must not be {@code null} and all of + * the elements in the collection must not be {@code null}. * @return A Promise that is resolved only when all the specified Promises * are resolved. The returned Promise must be successfully resolved * with a List of the values in the order of the specified Promises @@ -87,33 +86,67 @@ public class Promises { * Promises which resolved with a failure. */ public static Promise> all(Collection> promises) { + return all(new Deferred>(), promises); + } + + /** + * Resolves the Promise returned by the specified Deferred when the + * specified Promises are all resolved. + *

+ * The returned Promise acts as a gate and must be resolved after all of the + * specified Promises are resolved. + * + * @param The value type of the List value associated with the returned + * Promise. + * @param A subtype of the value type of the List value associated with + * the returned Promise. + * @param deferred The specified Deferred is used to obtain and resolve the + * returned Promise. Must not be {@code null} and must not have + * already resolved the returned Promise. + * @param promises The Promises which must be resolved before the returned + * Promise must be resolved. Must not be {@code null} and all of + * the elements in the collection must not be {@code null}. + * @return The Promise from the specified Deferred. It is resolved only when + * all the specified Promises are resolved. The returned Promise + * must be successfully resolved with a List of the values in the + * order of the specified Promises if all the specified Promises are + * successfully resolved. The List in the returned Promise is the + * property of the caller and is modifiable. The returned Promise + * must be resolved with a failure of + * {@link FailedPromisesException} if any of the specified Promises + * are resolved with a failure. The failure + * {@link FailedPromisesException} must contain all of the specified + * Promises which resolved with a failure. + * @since 1.1 + */ + public static Promise> all( + Deferred> deferred, Collection> promises) { if (promises.isEmpty()) { List result = new ArrayList<>(); - return resolved(result); - } - /* make a copy and capture the ordering */ - List> list = new ArrayList>( - promises); - PromiseImpl> chained = new PromiseImpl<>(); - All all = new All<>(chained, list); - for (Promise promise : list) { - promise.onResolve(all); + deferred.resolve(result); + } else { + /* make a copy and capture the ordering */ + List> list = new ArrayList>( + promises); + All all = new All<>(deferred, list); + for (Promise< ? extends T> promise : list) { + promise.onResolve(all); + } } - return chained; + return deferred.getPromise(); } /** - * Create a new Promise that is a latch on the resolution of the specified + * Returns a new Promise that is a latch on the resolution of the specified * Promises. - * *

* The new Promise acts as a gate and must be resolved after all of the * specified Promises are resolved. * * @param The value type associated with the specified Promises. * @param promises The Promises which must be resolved before the returned - * Promise must be resolved. Must not be {@code null} and all of the - * arguments must not be {@code null}. + * Promise must be resolved. Must not be {@code null} and all of + * the arguments must not be {@code null}. * @return A Promise that is resolved only when all the specified Promises * are resolved. The returned Promise must be successfully resolved * with a List of the values in the order of the specified Promises @@ -133,17 +166,55 @@ public class Promises { } /** - * A callback used to resolve a Promise when the specified list of Promises + * Resolves the Promise returned by the specified Deferred when the + * specified Promises are all resolved. + *

+ * The new Promise acts as a gate and must be resolved after all of the + * specified Promises are resolved. + * + * @param The value type associated with the specified Promises. + * @param deferred The specified Deferred is used to obtain and resolve the + * returned Promise. Must not be {@code null} and must not have + * already resolved the returned Promise. + * @param promises The Promises which must be resolved before the returned + * Promise must be resolved. Must not be {@code null} and all of + * the arguments must not be {@code null}. + * @return The Promise from the specified Deferred. It is resolved only when + * all the specified Promises are resolved. The returned Promise + * must be successfully resolved with a List of the values in the + * order of the specified Promises if all the specified Promises are + * successfully resolved. The List in the returned Promise is the + * property of the caller and is modifiable. The returned Promise + * must be resolved with a failure of + * {@link FailedPromisesException} if any of the specified Promises + * are resolved with a failure. The failure + * {@link FailedPromisesException} must contain all of the specified + * Promises which resolved with a failure. + * @since 1.1 + */ + @SafeVarargs + public static Promise> all(Deferred> deferred, + Promise< ? extends T>... promises) { + @SuppressWarnings("unchecked") + List> list = Arrays.asList((Promise[]) promises); + return all(deferred, list); + } + + /** + * A callback used to resolve a Deferred when the specified list of Promises * are resolved for the {@link Promises#all(Collection)} method. * * @ThreadSafe */ private static final class All implements Runnable { - private final PromiseImpl> chained; + private final Deferred> chained; private final List> promises; private final AtomicInteger promiseCount; - All(PromiseImpl> chained, List> promises) { + All(Deferred> chained, List> promises) { + if (chained.getPromise().isDone()) { + throw new IllegalStateException("Already resolved"); + } this.chained = chained; this.promises = promises; this.promiseCount = new AtomicInteger(promises.size()); @@ -169,10 +240,9 @@ public class Promises { } } if (failed.isEmpty()) { - chained.tryResolve(value, null); + chained.resolve(value); } else { - chained.tryResolve(null, - new FailedPromisesException(failed, cause)); + chained.fail(new FailedPromisesException(failed, cause)); } } } diff --git a/bundles/org.eclipse.osgi.util/src/org/osgi/util/xml/XMLParserActivator.java b/bundles/org.eclipse.osgi.util/src/org/osgi/util/xml/XMLParserActivator.java index c73b3c061..64be3f5cf 100644 --- a/bundles/org.eclipse.osgi.util/src/org/osgi/util/xml/XMLParserActivator.java +++ b/bundles/org.eclipse.osgi.util/src/org/osgi/util/xml/XMLParserActivator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2002, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2002, 2015). 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. @@ -91,9 +91,9 @@ import org.osgi.framework.ServiceRegistration; * @ThreadSafe * @author $Id$ */ -public class XMLParserActivator implements BundleActivator, ServiceFactory { +public class XMLParserActivator implements BundleActivator, ServiceFactory { /** Context of this bundle */ - private volatile BundleContext context; + private volatile BundleContext bundleContext; /** * Filename containing the SAX Parser Factory Class name. Also used as the * basis for the {@code SERVICE_PID} registration property. @@ -150,8 +150,9 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory { * bundle's listeners, unregister all services registered by this * bundle, and release all services used by this bundle. */ + @Override public void start(BundleContext context) throws Exception { - this.context = context; + this.bundleContext = context; Bundle parserBundle = context.getBundle(); // check for sax parsers registerSAXParsers(getParserFactoryClassNames(parserBundle.getResource(SAXCLASSFILE))); @@ -169,6 +170,7 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory { * the bundle's listeners, unregister all services registered by the * bundle, and release all services used by the bundle. */ + @Override public void stop(BundleContext context) throws Exception { // framework will automatically unregister the parser services } @@ -183,11 +185,11 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory { * @return A List of strings containing the parser class names. * @throws IOException if there is a problem reading the URL input stream */ - private List getParserFactoryClassNames(URL parserUrl) throws IOException { + private List getParserFactoryClassNames(URL parserUrl) throws IOException { if (parserUrl == null) { - return Collections.EMPTY_LIST; + return Collections.emptyList(); } - List v = new ArrayList(1); + List v = new ArrayList(1); String parserFactoryClassName = null; InputStream is = parserUrl.openStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); @@ -220,17 +222,17 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory { * containing the names of the parser Factory Classes * @throws FactoryConfigurationError if thrown from {@code getFactory} */ - private void registerSAXParsers(List parserFactoryClassNames) throws FactoryConfigurationError { - Iterator e = parserFactoryClassNames.iterator(); + private void registerSAXParsers(List parserFactoryClassNames) throws FactoryConfigurationError { + Iterator e = parserFactoryClassNames.iterator(); int index = 0; while (e.hasNext()) { - String parserFactoryClassName = (String) e.next(); + String parserFactoryClassName = e.next(); // create a sax parser factory just to get it's default // properties. It will never be used since // this class will operate as a service factory and give each // service requestor it's own SaxParserFactory SAXParserFactory factory = (SAXParserFactory) getFactory(parserFactoryClassName); - Hashtable properties = new Hashtable(7); + Hashtable properties = new Hashtable(7); // figure out the default properties of the parser setDefaultSAXProperties(factory, properties, index); // store the parser factory class name in the properties so that @@ -238,7 +240,7 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory { // to return a parser factory properties.put(FACTORYNAMEKEY, parserFactoryClassName); // register the factory as a service - context.registerService(SAXFACTORYNAME, this, properties); + bundleContext.registerService(SAXFACTORYNAME, this, properties); index++; } } @@ -259,9 +261,9 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory { * @param factory The {@code SAXParserFactory} object * @param props {@code Hashtable} of service properties. */ - private void setDefaultSAXProperties(SAXParserFactory factory, Hashtable props, int index) { + private void setDefaultSAXProperties(SAXParserFactory factory, Hashtable props, int index) { props.put(Constants.SERVICE_DESCRIPTION, SAXFACTORYDESCRIPTION); - props.put(Constants.SERVICE_PID, SAXFACTORYNAME + "." + context.getBundle().getBundleId() + "." + index); + props.put(Constants.SERVICE_PID, SAXFACTORYNAME + "." + bundleContext.getBundle().getBundleId() + "." + index); setSAXProperties(factory, props); } @@ -285,7 +287,7 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory { * @param factory - the SAXParserFactory object * @param properties - the properties object for the service */ - public void setSAXProperties(SAXParserFactory factory, Hashtable properties) { + public void setSAXProperties(SAXParserFactory factory, Hashtable properties) { // check if this parser can be configured to validate boolean validating = true; factory.setValidating(true); @@ -308,8 +310,8 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory { factory.setValidating(validating); factory.setNamespaceAware(namespaceaware); // set the OSGi service properties - properties.put(PARSER_NAMESPACEAWARE, new Boolean(namespaceaware)); - properties.put(PARSER_VALIDATING, new Boolean(validating)); + properties.put(PARSER_NAMESPACEAWARE, Boolean.valueOf(namespaceaware)); + properties.put(PARSER_VALIDATING, Boolean.valueOf(validating)); } /** @@ -319,17 +321,17 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory { * containing the names of the parser Factory Classes * @throws FactoryConfigurationError if thrown from {@code getFactory} */ - private void registerDOMParsers(List parserFactoryClassNames) throws FactoryConfigurationError { - Iterator e = parserFactoryClassNames.iterator(); + private void registerDOMParsers(List parserFactoryClassNames) throws FactoryConfigurationError { + Iterator e = parserFactoryClassNames.iterator(); int index = 0; while (e.hasNext()) { - String parserFactoryClassName = (String) e.next(); + String parserFactoryClassName = e.next(); // create a dom parser factory just to get it's default // properties. It will never be used since // this class will operate as a service factory and give each // service requestor it's own DocumentBuilderFactory DocumentBuilderFactory factory = (DocumentBuilderFactory) getFactory(parserFactoryClassName); - Hashtable properties = new Hashtable(7); + Hashtable properties = new Hashtable(7); // figure out the default properties of the parser setDefaultDOMProperties(factory, properties, index); // store the parser factory class name in the properties so that @@ -337,7 +339,7 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory { // to return a parser factory properties.put(FACTORYNAMEKEY, parserFactoryClassName); // register the factory as a service - context.registerService(DOMFACTORYNAME, this, properties); + bundleContext.registerService(DOMFACTORYNAME, this, properties); index++; } } @@ -356,9 +358,9 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory { * @param factory The {@code DocumentBuilderFactory} object * @param props {@code Hashtable} of service properties. */ - private void setDefaultDOMProperties(DocumentBuilderFactory factory, Hashtable props, int index) { + private void setDefaultDOMProperties(DocumentBuilderFactory factory, Hashtable props, int index) { props.put(Constants.SERVICE_DESCRIPTION, DOMFACTORYDESCRIPTION); - props.put(Constants.SERVICE_PID, DOMFACTORYNAME + "." + context.getBundle().getBundleId() + "." + index); + props.put(Constants.SERVICE_PID, DOMFACTORYNAME + "." + bundleContext.getBundle().getBundleId() + "." + index); setDOMProperties(factory, props); } @@ -382,7 +384,7 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory { * @param factory - the DocumentBuilderFactory object * @param props - Hashtable of service properties. */ - public void setDOMProperties(DocumentBuilderFactory factory, Hashtable props) { + public void setDOMProperties(DocumentBuilderFactory factory, Hashtable props) { // check if this parser can be configured to validate boolean validating = true; factory.setValidating(true); @@ -405,8 +407,8 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory { factory.setValidating(validating); factory.setNamespaceAware(namespaceaware); // set the OSGi service properties - props.put(PARSER_VALIDATING, new Boolean(validating)); - props.put(PARSER_NAMESPACEAWARE, new Boolean(namespaceaware)); + props.put(PARSER_VALIDATING, Boolean.valueOf(validating)); + props.put(PARSER_NAMESPACEAWARE, Boolean.valueOf(namespaceaware)); } /** @@ -419,7 +421,7 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory { */ private Object getFactory(String parserFactoryClassName) throws FactoryConfigurationError { try { - return context.getBundle().loadClass(parserFactoryClassName).newInstance(); + return bundleContext.getBundle().loadClass(parserFactoryClassName).newInstance(); } catch (RuntimeException e) { throw e; } catch (Exception e) { @@ -448,8 +450,9 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory { * @return A new, configured XML Parser Factory object or null if a * configuration error was encountered */ - public Object getService(Bundle bundle, ServiceRegistration registration) { - ServiceReference sref = registration.getReference(); + @Override + public Object getService(Bundle bundle, ServiceRegistration registration) { + ServiceReference sref = registration.getReference(); String parserFactoryClassName = (String) sref.getProperty(FACTORYNAMEKEY); // need to set factory properties Object factory = getFactory(parserFactoryClassName); @@ -474,6 +477,8 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory { * @param service The XML Parser Factory object returned by a previous call * to the {@code getService} method. */ - public void ungetService(Bundle bundle, ServiceRegistration registration, Object service) { + @Override + public void ungetService(Bundle bundle, ServiceRegistration registration, Object service) { + // nothing to do } } diff --git a/bundles/org.eclipse.osgi.util/src/org/osgi/util/xml/package-info.java b/bundles/org.eclipse.osgi.util/src/org/osgi/util/xml/package-info.java index 8d3c57bb5..1f05ed780 100644 --- a/bundles/org.eclipse.osgi.util/src/org/osgi/util/xml/package-info.java +++ b/bundles/org.eclipse.osgi.util/src/org/osgi/util/xml/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2010, 2013). All Rights Reserved. + * Copyright (c) OSGi Alliance (2010, 2016). 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,9 +26,10 @@ *

* {@code Import-Package: org.osgi.util.xml; version="[1.0,2.0)"} * - * @version 1.0.1 * @author $Id$ */ +@Version("1.0.1") package org.osgi.util.xml; +import org.osgi.annotation.versioning.Version; diff --git a/bundles/org.eclipse.osgi.util/src/org/osgi/util/xml/packageinfo b/bundles/org.eclipse.osgi.util/src/org/osgi/util/xml/packageinfo deleted file mode 100644 index c2664475c..000000000 --- a/bundles/org.eclipse.osgi.util/src/org/osgi/util/xml/packageinfo +++ /dev/null @@ -1 +0,0 @@ -version 1.0.1 \ No newline at end of file diff --git a/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/log/LogEntry.java b/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/log/LogEntry.java index 6b3ee59f7..9dca75876 100644 --- a/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/log/LogEntry.java +++ b/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/log/LogEntry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) OSGi Alliance (2000, 2016). All Rights Reserved. + * Copyright (c) OSGi Alliance (2000, 2017). 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,11 +68,11 @@ public interface LogEntry { int getLevel(); /** - * Returns the human readable message associated with this {@code LogEntry} + * Returns the formatted message associated with this {@code LogEntry} * object. * - * @return {@code String} containing the message associated with this - * {@code LogEntry} object. + * @return {@code String} containing the formatted message associated with + * this {@code LogEntry} object. */ String getMessage(); diff --git a/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/resolver/Resolver.java b/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/resolver/Resolver.java index 555f3cd15..b51c25d7a 100644 --- a/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/resolver/Resolver.java +++ b/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/resolver/Resolver.java @@ -77,13 +77,15 @@ public interface Resolver { Map> resolve(ResolveContext context) throws ResolutionException; /** - * Resolves a given dynamic requirement dynamically for the given host - * wiring using the given resolve context and return any new resources and - * wires to the caller. + * Resolves a given requirement dynamically for the given host wiring using + * the given resolve context and return any new resources and wires to the + * caller. *

* The requirement must be a {@link Wiring#getResourceRequirements(String) * requirement} of the wiring and must use the - * {@link PackageNamespace#PACKAGE_NAMESPACE package} namespace. + * {@link PackageNamespace#PACKAGE_NAMESPACE package} namespace with a + * {@link Namespace#REQUIREMENT_RESOLUTION_DIRECTIVE resolution} of type + * {@link PackageNamespace#RESOLUTION_DYNAMIC dynamic}. *

* The resolve context is not asked for * {@link ResolveContext#getMandatoryResources() mandatory} resources or for -- cgit v1.2.3