/******************************************************************************
* 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.blueprint.metadata;
import java.io.Serializable;
import java.util.Collection;
import java.util.Iterator;
import org.osgi.service.blueprint.reflect.BeanMetadata;
import org.osgi.service.blueprint.reflect.BeanProperty;
import org.osgi.service.blueprint.reflect.ComponentMetadata;
import org.osgi.service.blueprint.reflect.Metadata;
import org.osgi.service.blueprint.reflect.RefMetadata;
import org.osgi.service.blueprint.reflect.ReferenceListMetadata;
import org.osgi.service.blueprint.reflect.ReferenceListener;
import org.osgi.service.blueprint.reflect.ReferenceMetadata;
import org.osgi.service.blueprint.reflect.ServiceReferenceMetadata;
import org.osgi.service.blueprint.reflect.Target;
/**
* @author Costin Leau
*/
public class ImporterMetadataTest extends BaseMetadataTest {
@Override
protected String getConfig() {
return "/org/eclipse/gemini/blueprint/blueprint/config/importer-elements.xml";
}
private ServiceReferenceMetadata getReferenceMetadata(String name) {
ComponentMetadata metadata = blueprintContainer.getComponentMetadata(name);
assertTrue(metadata instanceof ServiceReferenceMetadata);
ServiceReferenceMetadata referenceMetadata = (ServiceReferenceMetadata) metadata;
assertEquals("the registered name doesn't match the component name", name, referenceMetadata.getId());
return referenceMetadata;
}
public void testSimpleBean() throws Exception {
ServiceReferenceMetadata metadata = getReferenceMetadata("simple");
System.out.println(metadata.getClass().getName());
assertNull(metadata.getFilter());
String intf = metadata.getInterface();
assertEquals(Cloneable.class.getName(), intf);
assertEquals(ReferenceMetadata.AVAILABILITY_MANDATORY, metadata.getAvailability());
assertEquals(0, metadata.getReferenceListeners().size());
}
public void testBeanWithOptions() throws Exception {
ServiceReferenceMetadata metadata = getReferenceMetadata("options");
assertEquals("(name=foo)", metadata.getFilter());
String intf = metadata.getInterface();
assertEquals(Serializable.class.getName(), intf);
assertEquals(ReferenceMetadata.AVAILABILITY_OPTIONAL, metadata.getAvailability());
Collection<ReferenceListener> listeners = metadata.getReferenceListeners();
assertEquals(1, listeners.size());
}
public void testMultipleInterfaces() throws Exception {
ServiceReferenceMetadata metadata = getReferenceMetadata("multipleInterfaces");
String intf = metadata.getInterface();
assertEquals(Cloneable.class.getName(), intf);
assertEquals(ReferenceMetadata.AVAILABILITY_MANDATORY, metadata.getAvailability());
assertEquals(0, metadata.getReferenceListeners().size());
}
public void testMultipleListeners() throws Exception {
ServiceReferenceMetadata metadata = getReferenceMetadata("multipleListeners");
Collection<ReferenceListener> listeners = metadata.getReferenceListeners();
assertEquals(3, listeners.size());
Iterator<ReferenceListener> iterator = listeners.iterator();
ReferenceListener listener = iterator.next();
assertEquals("bindM", listener.getBindMethod());
assertEquals("unbindM", listener.getUnbindMethod());
assertTrue(listener.getListenerComponent() instanceof RefMetadata);
listener = iterator.next();
assertTrue(listener.getListenerComponent() instanceof Target);
listener = iterator.next();
assertTrue(listener.getListenerComponent() instanceof RefMetadata);
}
public void testTimeout() throws Exception {
ServiceReferenceMetadata metadata = getReferenceMetadata("timeout");
assertTrue(metadata instanceof ReferenceMetadata);
assertEquals(1234, ((ReferenceMetadata) metadata).getTimeout());
}
public void testNestedMandatoryReference() throws Exception {
BeanMetadata metadata = (BeanMetadata) blueprintContainer.getComponentMetadata("nestedReference");
BeanProperty prop = (BeanProperty) metadata.getProperties().get(0);
Metadata value = prop.getValue();
assertTrue(value instanceof ReferenceMetadata);
ReferenceMetadata ref = (ReferenceMetadata) value;
assertEquals(1000, ref.getTimeout());
assertEquals(ReferenceMetadata.ACTIVATION_LAZY, ref.getActivation());
}
public void testNestedMandatoryCollectionReference() throws Exception {
BeanMetadata metadata = (BeanMetadata) blueprintContainer.getComponentMetadata("nestedCollectionReference");
BeanProperty prop = (BeanProperty) metadata.getProperties().get(0);
Metadata value = prop.getValue();
assertTrue(value instanceof ReferenceListMetadata);
ReferenceListMetadata ref = (ReferenceListMetadata) value;
assertEquals(ReferenceListMetadata.USE_SERVICE_REFERENCE, ref.getMemberType());
assertEquals(ReferenceMetadata.ACTIVATION_LAZY, ref.getActivation());
}
}