/******************************************************************************
* Copyright (c) 2006, 2010 VMware Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Apache License v2.0 which accompanies this distribution.
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html and the Apache License v2.0
* is available at http://www.opensource.org/licenses/apache2.0.php.
* You may elect to redistribute this code under either of these licenses.
*
* Contributors:
* VMware Inc.
*****************************************************************************/
package org.eclipse.gemini.blueprint.mock;
import java.util.Dictionary;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration;
/**
* ServiceRegistration mock.
*
* <p/> The mock allows the service properties modification (through
* {@link #setProperties(Dictionary)}) as long as the underlying reference is
* of type {@link MockServiceReference}.
*
* @author Costin Leau
*
*/
public class MockServiceRegistration implements ServiceRegistration {
private ServiceReference reference;
/**
* Constructs a new <code>MockServiceRegistration</code> instance using
* defaults.
*
*/
public MockServiceRegistration() {
this(null);
}
/**
* Constructs a new <code>MockServiceRegistration</code> instance with the
* given properties.
*
* @param props registration properties
*/
public MockServiceRegistration(Dictionary props) {
this(null, props);
}
/**
* Constructs a new <code>MockServiceRegistration</code> instance using
* the given class names and properties.
*
* @param clazz
* @param props
*/
public MockServiceRegistration(String[] clazz, Dictionary props) {
reference = new MockServiceReference(null, props, this, clazz);
}
public ServiceReference getReference() {
return reference;
}
/**
* Sets the service reference associated with this registration.
*
* @param reference service reference
*/
public void setReference(ServiceReference reference) {
this.reference = reference;
}
public void setProperties(Dictionary props) {
if (reference instanceof MockServiceReference)
((MockServiceReference) reference).setProperties(props);
else
throw new IllegalArgumentException("cannot update properties - service reference is not a "
+ MockServiceReference.class.getName());
}
public void unregister() {
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj instanceof MockServiceRegistration)
return this.reference.equals(((MockServiceRegistration) obj).reference);
return false;
}
public int hashCode() {
return MockServiceRegistration.class.hashCode() * 13 + reference.hashCode();
}
}