Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.r_osgi/.classpath2
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.r_osgi/.settings/org.eclipse.jdt.core.prefs43
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.r_osgi/META-INF/MANIFEST.MF6
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.r_osgi/src/org/eclipse/ecf/internal/provider/r_osgi/R_OSGiRemoteServiceContainer.java89
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.r_osgi/src/org/eclipse/ecf/internal/provider/r_osgi/RemoteServiceRegistrationImpl.java7
5 files changed, 132 insertions, 15 deletions
diff --git a/providers/bundles/org.eclipse.ecf.provider.r_osgi/.classpath b/providers/bundles/org.eclipse.ecf.provider.r_osgi/.classpath
index 6f3b481ac..64c5e31b7 100644
--- a/providers/bundles/org.eclipse.ecf.provider.r_osgi/.classpath
+++ b/providers/bundles/org.eclipse.ecf.provider.r_osgi/.classpath
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/CDC-1.1%Foundation-1.1"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
diff --git a/providers/bundles/org.eclipse.ecf.provider.r_osgi/.settings/org.eclipse.jdt.core.prefs b/providers/bundles/org.eclipse.ecf.provider.r_osgi/.settings/org.eclipse.jdt.core.prefs
index e6127aa4b..d6d45f117 100644
--- a/providers/bundles/org.eclipse.ecf.provider.r_osgi/.settings/org.eclipse.jdt.core.prefs
+++ b/providers/bundles/org.eclipse.ecf.provider.r_osgi/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,3 @@
-#Fri Oct 15 17:09:07 PDT 2010
eclipse.preferences.version=1
org.eclipse.jdt.core.builder.cleanOutputFolder=clean
org.eclipse.jdt.core.builder.duplicateResourceTask=warning
@@ -7,10 +6,19 @@ org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
org.eclipse.jdt.core.circularClasspath=error
org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+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.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.compliance=1.5
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -27,6 +35,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=
org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
@@ -34,6 +43,7 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
@@ -41,7 +51,9 @@ org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
@@ -50,25 +62,41 @@ org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
@@ -78,17 +106,20 @@ org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
org.eclipse.jdt.core.compiler.problem.unusedImport=error
org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
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.3
+org.eclipse.jdt.core.compiler.source=1.5
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
diff --git a/providers/bundles/org.eclipse.ecf.provider.r_osgi/META-INF/MANIFEST.MF b/providers/bundles/org.eclipse.ecf.provider.r_osgi/META-INF/MANIFEST.MF
index 986c7d10a..c4efb202b 100644
--- a/providers/bundles/org.eclipse.ecf.provider.r_osgi/META-INF/MANIFEST.MF
+++ b/providers/bundles/org.eclipse.ecf.provider.r_osgi/META-INF/MANIFEST.MF
@@ -2,11 +2,12 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %plugin.name
Bundle-SymbolicName: org.eclipse.ecf.provider.r_osgi;singleton:=true
-Bundle-Version: 3.5.400.qualifier
+Bundle-Version: 3.5.500.qualifier
Import-Package: org.eclipse.ecf.core.util.reflection,
org.eclipse.ecf.remoteservice.asyncproxy;version="1.0.0",
org.eclipse.equinox.concurrent.future;version="1.0.0",
org.osgi.framework;version="1.3.0",
+ org.osgi.framework.wiring,
org.osgi.util.tracker;version="1.3.3"
Require-Bundle: org.eclipse.ecf;bundle-version="3.1.0",
org.eclipse.ecf.provider,
@@ -17,8 +18,7 @@ Bundle-Activator: org.eclipse.ecf.internal.provider.r_osgi.Activator
Eclipse-LazyStart: true
Export-Package: org.eclipse.ecf.provider.r_osgi.identity;version="3.2.0"
Bundle-Vendor: %plugin.provider
-Bundle-RequiredExecutionEnvironment: CDC-1.1/Foundation-1.1,
- J2SE-1.3
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-ActivationPolicy: lazy
Bundle-Localization: plugin
DynamicImport-Package: *
diff --git a/providers/bundles/org.eclipse.ecf.provider.r_osgi/src/org/eclipse/ecf/internal/provider/r_osgi/R_OSGiRemoteServiceContainer.java b/providers/bundles/org.eclipse.ecf.provider.r_osgi/src/org/eclipse/ecf/internal/provider/r_osgi/R_OSGiRemoteServiceContainer.java
index e20a2427a..4ff69d358 100644
--- a/providers/bundles/org.eclipse.ecf.provider.r_osgi/src/org/eclipse/ecf/internal/provider/r_osgi/R_OSGiRemoteServiceContainer.java
+++ b/providers/bundles/org.eclipse.ecf.provider.r_osgi/src/org/eclipse/ecf/internal/provider/r_osgi/R_OSGiRemoteServiceContainer.java
@@ -13,6 +13,8 @@ package org.eclipse.ecf.internal.provider.r_osgi;
import ch.ethz.iks.r_osgi.*;
import java.io.IOException;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import java.util.*;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -27,6 +29,8 @@ import org.eclipse.ecf.remoteservice.events.IRemoteServiceUnregisteredEvent;
import org.eclipse.equinox.concurrent.future.*;
import org.osgi.framework.*;
import org.osgi.framework.Constants;
+import org.osgi.framework.wiring.BundleCapability;
+import org.osgi.framework.wiring.BundleRevision;
import org.osgi.util.tracker.ServiceTracker;
import org.osgi.util.tracker.ServiceTrackerCustomizer;
@@ -267,9 +271,11 @@ class R_OSGiRemoteServiceContainer implements IOSGiRemoteServiceContainerAdapter
if (clazz == null) {
results.add(createLocalRemoteServiceReference(ref));
} else {
- IRemoteFilter rf = createRemoteFilter(filter != null ? "(&" + filter + "(" //$NON-NLS-1$ //$NON-NLS-2$
- + Constants.OBJECTCLASS + "=" + clazz + "))" : "(" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- + Constants.OBJECTCLASS + "=" + clazz + ")"); //$NON-NLS-1$//$NON-NLS-2$
+ IRemoteFilter rf = createRemoteFilter(filter != null
+ ? "(&" + filter + "(" //$NON-NLS-1$ //$NON-NLS-2$
+ + Constants.OBJECTCLASS + "=" + clazz + "))" //$NON-NLS-1$//$NON-NLS-2$
+ : "(" //$NON-NLS-1$
+ + Constants.OBJECTCLASS + "=" + clazz + ")"); //$NON-NLS-1$//$NON-NLS-2$
if (rf.match(refProperties)) {
results.add(createLocalRemoteServiceReference(ref));
}
@@ -372,6 +378,65 @@ class R_OSGiRemoteServiceContainer implements IOSGiRemoteServiceContainerAdapter
return registerRemoteService(clazzes, service, properties, bundleContext);
}
+ private String getPackageName(String className) {
+ int lastDotIndex = className.lastIndexOf("."); //$NON-NLS-1$
+ if (lastDotIndex == -1)
+ return ""; //$NON-NLS-1$
+ return className.substring(0, lastDotIndex);
+ }
+
+ private Version getPackageVersion(final Object service, String serviceInterface, String packageName) {
+ List<Class> interfaces = new ArrayList<Class>();
+ Class<?> serviceClass = service.getClass();
+ while (!serviceClass.equals(Object.class)) {
+ interfaces.addAll(Arrays.asList(serviceClass.getInterfaces()));
+ serviceClass = serviceClass.getSuperclass();
+ }
+ Class[] interfaceClasses = interfaces.toArray(new Class[interfaces.size()]);
+
+ if (interfaceClasses == null)
+ return null;
+ Class interfaceClass = null;
+ for (int i = 0; i < interfaceClasses.length; i++)
+ if (interfaceClasses[i].getName().equals(serviceInterface))
+ interfaceClass = interfaceClasses[i];
+ if (interfaceClass == null)
+ return null;
+ Bundle providingBundle = FrameworkUtil.getBundle(interfaceClass);
+ if (providingBundle == null)
+ return null;
+ return getVersionForPackage(providingBundle, packageName);
+ }
+
+ private Version getVersionForMatchingCapability(String packageName, BundleCapability capability) {
+ // If it's a package namespace (Import-Package)
+ Map<String, Object> attributes = capability.getAttributes();
+ // Then we get the package attribute
+ String p = (String) attributes.get(BundleRevision.PACKAGE_NAMESPACE);
+ // And compare it to the package name
+ if (p != null && packageName.equals(p))
+ return (Version) attributes.get(Constants.VERSION_ATTRIBUTE);
+ return null;
+ }
+
+ private Version getVersionForPackage(final Bundle providingBundle, String packageName) {
+ Version result = null;
+ BundleRevision providingBundleRevision = AccessController.doPrivileged(new PrivilegedAction<BundleRevision>() {
+ public BundleRevision run() {
+ return providingBundle.adapt(BundleRevision.class);
+ }
+ });
+ if (providingBundleRevision == null)
+ return null;
+ List<BundleCapability> providerCapabilities = providingBundleRevision.getDeclaredCapabilities(BundleRevision.PACKAGE_NAMESPACE);
+ for (BundleCapability c : providerCapabilities) {
+ result = getVersionForMatchingCapability(packageName, c);
+ if (result != null)
+ return result;
+ }
+ return result;
+ }
+
private IRemoteServiceRegistration registerRemoteService(final String[] clazzes, final Object service, final Dictionary properties, final BundleContext aContext) {
if (containerID == null) {
throw new IllegalStateException("Container is not connected"); //$NON-NLS-1$
@@ -395,6 +460,16 @@ class R_OSGiRemoteServiceContainer implements IOSGiRemoteServiceContainerAdapter
serviceRanking = (serviceRanking == null) ? new Integer(0) : serviceRanking;
props.put(org.eclipse.ecf.remoteservice.Constants.SERVICE_RANKING, serviceRanking);
+ for (String clazz : clazzes) {
+ // Add osgi-standard remote service version for each package
+ String packageName = getPackageName(clazz);
+ String packageVersionKey = "endpoint.package.version." + packageName; //$NON-NLS-1$
+ Version packageVersion = getPackageVersion(service, clazz, packageName);
+ if (packageVersion != null) {
+ props.put(packageVersionKey, packageVersion.toString());
+ }
+ }
+
final ServiceRegistration reg = aContext.registerService(clazzes, service, props);
// Set ECF remote service id property based upon local service property
reg.setProperties(prepareProperties(reg.getReference()));
@@ -403,7 +478,7 @@ class R_OSGiRemoteServiceContainer implements IOSGiRemoteServiceContainerAdapter
remoteServicesRegs.put(reg.getReference(), reg);
}
// Construct a IRemoteServiceID, and provide to new registration impl instance
- return new RemoteServiceRegistrationImpl(createRemoteServiceID(containerID, (Long) reg.getReference().getProperty(Constants.SERVICE_ID)), reg);
+ return new RemoteServiceRegistrationImpl(this, createRemoteServiceID(containerID, (Long) reg.getReference().getProperty(Constants.SERVICE_ID)), reg);
}
Dictionary prepareProperties(ServiceReference reference) {
@@ -794,4 +869,10 @@ class R_OSGiRemoteServiceContainer implements IOSGiRemoteServiceContainerAdapter
return false;
}
+ void removeRegistration(ServiceRegistration reg) {
+ synchronized (remoteServicesRegs) {
+ remoteServicesRegs.remove(reg.getReference());
+ }
+ }
+
}
diff --git a/providers/bundles/org.eclipse.ecf.provider.r_osgi/src/org/eclipse/ecf/internal/provider/r_osgi/RemoteServiceRegistrationImpl.java b/providers/bundles/org.eclipse.ecf.provider.r_osgi/src/org/eclipse/ecf/internal/provider/r_osgi/RemoteServiceRegistrationImpl.java
index 26a63d262..640bd76a0 100644
--- a/providers/bundles/org.eclipse.ecf.provider.r_osgi/src/org/eclipse/ecf/internal/provider/r_osgi/RemoteServiceRegistrationImpl.java
+++ b/providers/bundles/org.eclipse.ecf.provider.r_osgi/src/org/eclipse/ecf/internal/provider/r_osgi/RemoteServiceRegistrationImpl.java
@@ -29,6 +29,8 @@ final class RemoteServiceRegistrationImpl implements IRemoteServiceRegistration
private ServiceRegistration reg;
private IRemoteServiceReference remoteReference;
+ private R_OSGiRemoteServiceContainer container;
+
/**
* constructor.
*
@@ -37,9 +39,11 @@ final class RemoteServiceRegistrationImpl implements IRemoteServiceRegistration
* @param reg
* the R-OSGi internal service registration.
*/
- public RemoteServiceRegistrationImpl(final IRemoteServiceID remoteServiceID, final ServiceRegistration reg) {
+ public RemoteServiceRegistrationImpl(final R_OSGiRemoteServiceContainer container, final IRemoteServiceID remoteServiceID, final ServiceRegistration reg) {
Assert.isNotNull(remoteServiceID);
Assert.isNotNull(reg);
+ Assert.isNotNull(container);
+ this.container = container;
this.remoteServiceID = remoteServiceID;
this.reg = reg;
this.remoteReference = new LocalRemoteServiceReferenceImpl(remoteServiceID, reg.getReference());
@@ -105,6 +109,7 @@ final class RemoteServiceRegistrationImpl implements IRemoteServiceRegistration
* @see org.eclipse.ecf.remoteservice.IRemoteServiceRegistration#unregister()
*/
public void unregister() {
+ container.removeRegistration(reg);
try {
reg.unregister();
} catch (IllegalStateException e) {

Back to the top