summaryrefslogtreecommitdiffstats
path: root/java/sca/modules/implementation-osgi/src
diff options
context:
space:
mode:
authorrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2009-10-30 22:10:11 +0000
committerrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2009-10-30 22:10:11 +0000
commitef25a099e9ea2064b9523ec33a15f114ee52ce45 (patch)
tree8bba02f2ca100c9331fb24d018293ae10cc6395c /java/sca/modules/implementation-osgi/src
parentd058702bea1602cdb0f4a7887419c0db1104a0a9 (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')
-rw-r--r--java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiImplementationFactory.java7
-rw-r--r--java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/OSGiProperty.java13
-rw-r--r--java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/impl/OSGiImplementationFactoryImpl.java73
-rw-r--r--java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/impl/OSGiPropertyImpl.java28
-rw-r--r--java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiPropertyProcessor.java23
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();
}