@Test
  public void testSetPropertiesAfterStop() throws Exception {
    Bundle bundle = installBundle(getBundleArchiveA());
    try {
      bundle.start();
      BundleContext bundleContext = bundle.getBundleContext();
      assertNotNull(bundleContext);

      ServiceRegistration registration =
          bundleContext.registerService(BundleContext.class.getName(), bundleContext, null);
      assertNotNull(registration);

      bundle.stop();

      try {
        registration.setProperties(new Hashtable<String, Object>());
        fail("Should not be here!");
      } catch (IllegalStateException t) {
        // expected
      }
      assertNoServiceEvent();
    } finally {
      bundle.uninstall();
    }
  }
 public void updated(Dictionary<String, ?> config) throws ConfigurationException {
   if (config != null) {
     Integer filterPriority = (Integer) config.get(FILTER_PRIORITY);
     String applicationName = (String) config.get(APPLICATION_NAME);
     setPriority(filterPriority);
     setApplicationName(applicationName);
   }
   synchronized (this) {
     filterFactoryServiceRegistration.setProperties(config);
   }
 }
  @Test
  public void testModifyServiceProperties() throws Exception {
    Bundle bundle = installBundle(getBundleArchiveA());
    try {
      bundle.start();
      BundleContext context = bundle.getBundleContext();
      assertNotNull(context);
      assertNoServiceEvent();

      String filter = "(&(objectClass=org.osgi.framework.BundleContext)(foo=bar))";
      context.addServiceListener(this, filter);

      Hashtable<String, Object> props = new Hashtable<String, Object>();
      props.put("foo", "bar");
      ServiceRegistration sreg =
          context.registerService(BundleContext.class.getName(), context, props);
      ServiceReference sref = sreg.getReference();

      assertServiceEvent(ServiceEvent.REGISTERED, sref);

      props.put("xxx", "yyy");
      sreg.setProperties(props);
      assertServiceEvent(ServiceEvent.MODIFIED, sref);

      props.put("foo", "notbar");
      sreg.setProperties(props);
      assertServiceEvent(ServiceEvent.MODIFIED_ENDMATCH, sref);

      props.put("foo", "bar");
      sreg.setProperties(props);
      assertServiceEvent(ServiceEvent.MODIFIED, sref);

      sreg.unregister();
      assertServiceEvent(ServiceEvent.UNREGISTERING, sref);
    } finally {
      bundle.uninstall();
    }
  }
  private BundleContext assertServiceLifecycle(
      Bundle bundle, Dictionary<String, Object> properties, boolean events) throws Exception {
    assertNoServiceEvent();

    BundleContext bundleContext = bundle.getBundleContext();
    ServiceRegistration registration =
        bundleContext.registerService(BundleContext.class.getName(), bundleContext, properties);
    ServiceReference reference = registration.getReference();

    if (events) assertServiceEvent(ServiceEvent.REGISTERED, reference);
    else assertNoServiceEvent();

    registration.setProperties(properties);
    if (events) assertServiceEvent(ServiceEvent.MODIFIED, reference);
    else assertNoServiceEvent();

    registration.unregister();
    if (events) assertServiceEvent(ServiceEvent.UNREGISTERING, reference);
    else assertNoServiceEvent();

    registration =
        bundleContext.registerService(BundleContext.class.getName(), bundleContext, properties);
    reference = registration.getReference();
    if (events) assertServiceEvent(ServiceEvent.REGISTERED, reference);
    else assertNoServiceEvent();

    bundle.stop();
    if (events) assertServiceEvent(ServiceEvent.UNREGISTERING, reference);
    else assertNoServiceEvent();

    try {
      bundleContext.addServiceListener(this);
      fail("Should not be here!");
    } catch (IllegalStateException t) {
      // expected
    }

    bundle.start();
    bundleContext = bundle.getBundleContext();
    assertNotNull(bundleContext);

    return bundleContext;
  }
 /**
  * update the properties of the remote service.
  *
  * @param properties a set of property key/value pairs to be updated.
  * @see
  *     org.eclipse.ecf.remoteservice.IRemoteServiceRegistration#setProperties(java.util.Dictionary)
  */
 public void setProperties(final Dictionary properties) {
   reg.setProperties(properties);
 }
  @Test
  public void testSetProperties() throws Exception {
    Bundle bundle = installBundle(getBundleArchiveA());
    try {
      bundle.start();
      BundleContext bundleContext = bundle.getBundleContext();
      assertNotNull(bundleContext);

      String propertyA = "org.jboss.osgi.test.PropertyA";
      String propertyALower = "org.jboss.osgi.test.propertya";

      Hashtable<String, Object> properties = new Hashtable<String, Object>();
      properties.put(propertyA, "testA");
      ServiceRegistration registration =
          bundleContext.registerService(BundleContext.class.getName(), bundleContext, properties);
      assertNotNull(registration);
      ServiceReference reference = registration.getReference();
      assertNotNull(reference);
      assertEquals("testA", reference.getProperty(propertyA));
      assertEquals("testA", reference.getProperty(propertyALower));

      Object serviceID = reference.getProperty(Constants.SERVICE_ID);
      Object objectClass = reference.getProperty(Constants.OBJECTCLASS);

      assertAllReferences(bundleContext, null, "(" + propertyA + "=testA)", reference);
      assertAllReferences(bundleContext, null, "(" + propertyALower + "=testA)", reference);
      assertAllReferences(
          bundleContext, null, "(" + Constants.SERVICE_ID + "=" + serviceID + ")", reference);

      bundleContext.addServiceListener(this);

      properties = new Hashtable<String, Object>();
      properties.put(propertyA, "testAChanged");
      registration.setProperties(properties);
      assertServiceEvent(ServiceEvent.MODIFIED, reference);
      assertEquals("testAChanged", reference.getProperty(propertyA));
      assertNoAllReferences(bundleContext, null, "(" + propertyA + "=testA)");
      assertNoAllReferences(bundleContext, null, "(" + propertyALower + "=testA)");
      assertAllReferences(bundleContext, null, "(" + propertyA + "=testAChanged)", reference);
      assertAllReferences(bundleContext, null, "(" + propertyALower + "=testAChanged)", reference);

      registration.setProperties(null);
      assertServiceEvent(ServiceEvent.MODIFIED, reference);
      assertNull(reference.getProperty(propertyA));
      assertNoAllReferences(bundleContext, null, "(" + propertyA + "=testA)");
      assertNoAllReferences(bundleContext, null, "(" + propertyALower + "=testA)");
      assertNoAllReferences(bundleContext, null, "(" + propertyA + "=testAChanged)");
      assertNoAllReferences(bundleContext, null, "(" + propertyALower + "=testAChanged)");

      properties = new Hashtable<String, Object>();
      properties.put(propertyA, "testA2");
      properties.put(Constants.SERVICE_ID, "rubbish1");
      properties.put(Constants.OBJECTCLASS, "rubbish2");
      registration.setProperties(properties);
      assertServiceEvent(ServiceEvent.MODIFIED, reference);
      assertEquals("testA2", reference.getProperty(propertyA));
      assertEquals("testA2", reference.getProperty(propertyALower));
      assertEquals(serviceID, reference.getProperty(Constants.SERVICE_ID));
      assertEquals(serviceID, reference.getProperty(Constants.SERVICE_ID.toLowerCase()));
      assertEquals(objectClass, reference.getProperty(Constants.OBJECTCLASS));
      assertEquals(objectClass, reference.getProperty(Constants.OBJECTCLASS.toLowerCase()));

      try {
        assertNoAllReferences(bundleContext, null, "(" + Constants.SERVICE_ID + "=rubbish1)");
        fail("NumberFormatException expected");
      } catch (NumberFormatException ex) {
        // expected
      }

      assertAllReferences(
          bundleContext, null, "(" + Constants.SERVICE_ID + "=" + serviceID + ")", reference);

      properties = new Hashtable<String, Object>();
      properties.put("a", "1");
      properties.put("A", "2");
      try {
        registration.setProperties(properties);
        fail("Should not be here!");
      } catch (IllegalArgumentException t) {
        // expected
      }
      assertNoServiceEvent();

      registration.unregister();
      assertServiceEvent(ServiceEvent.UNREGISTERING, reference);

      try {
        registration.setProperties(new Hashtable<String, Object>());
        fail("Should not be here!");
      } catch (IllegalStateException t) {
        // expected
      }
      assertNoServiceEvent();
    } finally {
      bundle.uninstall();
    }
  }
 public void setProperties(Dictionary properties) {
   delegate.setProperties(properties);
 }