diff options
author | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2009-10-30 22:10:11 +0000 |
---|---|---|
committer | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2009-10-30 22:10:11 +0000 |
commit | ef25a099e9ea2064b9523ec33a15f114ee52ce45 (patch) | |
tree | 8bba02f2ca100c9331fb24d018293ae10cc6395c /java/sca/modules/implementation-osgi/src | |
parent | d058702bea1602cdb0f4a7887419c0db1104a0a9 (diff) |
Propagate osgi properties for OSGi remote services
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@831468 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca/modules/implementation-osgi/src')
5 files changed, 128 insertions, 16 deletions
diff --git a/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiImplementationFactory.java b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiImplementationFactory.java index 0a83624e76..be39e4d3e0 100644 --- a/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiImplementationFactory.java +++ b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiImplementationFactory.java @@ -19,6 +19,10 @@ package org.apache.tuscany.sca.implementation.osgi; +import java.util.Collection; + +import org.osgi.framework.ServiceReference; + /** * The factory interface to create OSGiImplementation instances */ @@ -34,4 +38,7 @@ public interface OSGiImplementationFactory { * @return */ OSGiProperty createOSGiProperty(); + OSGiProperty createOSGiProperty(String name, String stringValue, String type); + OSGiProperty createOSGiProperty(String name, Object value); + Collection<OSGiProperty> createOSGiProperties(ServiceReference reference); } diff --git a/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiProperty.java b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiProperty.java index e0b7f43add..ebe4ef2dbc 100644 --- a/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiProperty.java +++ b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiProperty.java @@ -26,6 +26,8 @@ import javax.xml.namespace.QName; */ public interface OSGiProperty { String NAME = "name"; + String TYPE = "type"; + String VALUE = "value"; QName PROPERTY_QNAME = new QName(OSGiImplementation.SCA11_TUSCANY_NS, "osgi.property"); String REMOTE_CONFIG_SCA = "org.osgi.sca"; @@ -169,11 +171,16 @@ public interface OSGiProperty { public final String SERVICE_IMPORTED_CONFIGS = "service.imported.configs"; - String getValue(); - - void setValue(String value); + Object getValue(); + void setValue(Object value); String getName(); void setName(String name); + + String getType(); + void setType(String type); + + String getStringValue(); + void setStringValue(String value); } diff --git a/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/impl/OSGiImplementationFactoryImpl.java b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/impl/OSGiImplementationFactoryImpl.java index 9fab65272f..2978e8e823 100644 --- a/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/impl/OSGiImplementationFactoryImpl.java +++ b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/impl/OSGiImplementationFactoryImpl.java @@ -19,10 +19,15 @@ package org.apache.tuscany.sca.implementation.osgi.impl; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + import org.apache.tuscany.sca.core.ExtensionPointRegistry; import org.apache.tuscany.sca.implementation.osgi.OSGiImplementation; import org.apache.tuscany.sca.implementation.osgi.OSGiImplementationFactory; import org.apache.tuscany.sca.implementation.osgi.OSGiProperty; +import org.osgi.framework.ServiceReference; /** * @@ -40,4 +45,72 @@ public class OSGiImplementationFactoryImpl implements OSGiImplementationFactory return new OSGiPropertyImpl(); } + public OSGiProperty createOSGiProperty(String propName, String propValue, String propType) { + OSGiProperty prop = new OSGiPropertyImpl(); + if (propType == null) { + propType = "String"; + } + prop.setName(propName); + prop.setStringValue(propValue); + prop.setType(propType); + + Object value = propValue; + if ("Integer".equals(propType)) { + value = Integer.valueOf(propValue); + } else if ("Long".equals(propType)) { + value = Long.valueOf(propValue); + } else if ("Float".equals(propType)) { + value = Float.valueOf(propValue); + } else if ("Double".equals(propType)) { + value = Double.valueOf(propValue); + } else if ("Short".equals(propType)) { + value = Short.valueOf(propValue); + } else if ("Character".equals(propType)) { + value = propValue.charAt(0); + } else if ("Byte".equals(propType)) { + value = Byte.valueOf(propValue); + } else if ("Boolean".equals(propType)) { + value = Boolean.valueOf(propValue); + } else if ("String+".equals(propType)) { + value = propValue.split(" "); + } else { + // String + value = propValue; + } + prop.setValue(value); + return prop; + } + + public OSGiProperty createOSGiProperty(String propName, Object value) { + OSGiProperty prop = new OSGiPropertyImpl(); + prop.setName(propName); + prop.setValue(value); + + if (value instanceof String[]) { + StringBuffer sb = new StringBuffer(); + for (String s : (String[])value) { + sb.append(s).append(' '); + } + if (sb.length() > 0) { + sb.deleteCharAt(sb.length() - 1); + } + prop.setStringValue(sb.toString()); + prop.setType("String+"); + } else if (value != null) { + prop.setStringValue(String.valueOf(value)); + prop.setType(value.getClass().getSimpleName()); + } + return prop; + } + + public Collection<OSGiProperty> createOSGiProperties(ServiceReference reference) { + List<OSGiProperty> props = new ArrayList<OSGiProperty>(); + for(String key: reference.getPropertyKeys()) { + Object value = reference.getProperty(key); + OSGiProperty prop = createOSGiProperty(key, value); + props.add(prop); + } + return props; + } + } diff --git a/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/impl/OSGiPropertyImpl.java b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/impl/OSGiPropertyImpl.java index ec8b98f53f..b3e934a970 100644 --- a/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/impl/OSGiPropertyImpl.java +++ b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/impl/OSGiPropertyImpl.java @@ -25,13 +25,15 @@ import org.apache.tuscany.sca.implementation.osgi.OSGiProperty; * Implementation of OSGiProperty */ public class OSGiPropertyImpl implements OSGiProperty { + private String name; + private String type; + private Object value; + private String stringValue; + public OSGiPropertyImpl() { super(); } - private String name; - private String value; - public String getName() { return name; } @@ -40,12 +42,28 @@ public class OSGiPropertyImpl implements OSGiProperty { this.name = name; } - public String getValue() { + public Object getValue() { return value; } - public void setValue(String value) { + public void setValue(Object value) { this.value = value; } + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getStringValue() { + return stringValue; + } + + public void setStringValue(String stringValue) { + this.stringValue = stringValue; + } + } diff --git a/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiPropertyProcessor.java b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiPropertyProcessor.java index 9bd469df06..595547f9e7 100644 --- a/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiPropertyProcessor.java +++ b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiPropertyProcessor.java @@ -23,6 +23,8 @@ import static javax.xml.stream.XMLStreamConstants.END_ELEMENT; import static javax.xml.stream.XMLStreamConstants.START_ELEMENT; import static org.apache.tuscany.sca.implementation.osgi.OSGiProperty.NAME; import static org.apache.tuscany.sca.implementation.osgi.OSGiProperty.PROPERTY_QNAME; +import static org.apache.tuscany.sca.implementation.osgi.OSGiProperty.TYPE; +import static org.apache.tuscany.sca.implementation.osgi.OSGiProperty.VALUE; import javax.xml.namespace.QName; import javax.xml.stream.XMLStreamException; @@ -57,14 +59,18 @@ public class OSGiPropertyProcessor implements StAXArtifactProcessor<OSGiProperty case START_ELEMENT: QName name = reader.getName(); if (PROPERTY_QNAME.equals(name)) { - prop = factory.createOSGiProperty(); - prop.setName(reader.getAttributeValue(null, NAME)); - // After the following call, the reader will be positioned at END_ELEMENT - String text = reader.getElementText(); - if (text != null) { - text = text.trim(); + String propName = reader.getAttributeValue(null, NAME); + String propValue = reader.getAttributeValue(null, VALUE); + String propType = reader.getAttributeValue(null, TYPE); + + if (propValue == null) { + propValue = reader.getElementText(); + } + if (propValue != null) { + propValue = propValue.trim(); } - prop.setValue(text); + + prop = factory.createOSGiProperty(propName, propValue, propType); return prop; } break; @@ -90,7 +96,8 @@ public class OSGiPropertyProcessor implements StAXArtifactProcessor<OSGiProperty public void write(OSGiProperty model, XMLStreamWriter writer, ProcessorContext context) throws ContributionWriteException, XMLStreamException { writer.writeStartElement(PROPERTY_QNAME.getNamespaceURI(), PROPERTY_QNAME.getLocalPart()); writer.writeAttribute(NAME, model.getName()); - writer.writeCharacters(model.getValue()); + writer.writeAttribute(TYPE, model.getName()); + writer.writeCharacters(model.getStringValue()); writer.writeEndElement(); } |