/****************************************************************************** * 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.service.importer.support; import java.beans.PropertyEditor; import java.beans.PropertyEditorSupport; import org.eclipse.gemini.blueprint.service.importer.ImportedOsgiServiceProxy; import org.osgi.framework.ServiceReference; /** * {@link PropertyEditor} that converts an <osgi:reference> element into a * {@link ServiceReference}. That is, it allows conversion between a * Spring-managed OSGi service to a Spring-managed ServiceReference. * * <p/> Automatically registered by * {@link org.eclipse.gemini.blueprint.context.ConfigurableOsgiBundleApplicationContext} * implementations. * * @author Costin Leau * @see ImportedOsgiServiceProxy */ public class ServiceReferenceEditor extends PropertyEditorSupport { /** * {@inheritDoc} * * <p/> Converts the given text value to a ServiceReference. */ public void setAsText(String text) throws IllegalArgumentException { throw new IllegalArgumentException("this property editor works only with " + ImportedOsgiServiceProxy.class.getName()); } /** * {@inheritDoc} * * <p/> Converts the given value to a ServiceReference. */ public void setValue(Object value) { // nulls allowed if (value == null) { super.setValue(null); return; } if (value instanceof ImportedOsgiServiceProxy) { ImportedOsgiServiceProxy serviceProxy = (ImportedOsgiServiceProxy) value; super.setValue(serviceProxy.getServiceReference()); return; } if (value instanceof ServiceReference) { super.setValue(value); return; } throw new IllegalArgumentException("Expected a service of type " + ImportedOsgiServiceProxy.class.getName() + " but received type " + value.getClass()); } /** * {@inheritDoc} * * <p/> This implementation returns <code>null</code> to indicate that * there is no appropriate text representation. */ public String getAsText() { return null; } }