FELIX-4294: added getClassName,getId,getServices methods. renamed propertiesToString method name to appendProperties. Modified getName method.
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1550887 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ComponentImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ComponentImpl.java
index 25674d8..6742228 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ComponentImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ComponentImpl.java
@@ -21,6 +21,7 @@
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Arrays;
@@ -1094,9 +1095,9 @@
}
public String getName() {
+ StringBuffer sb = new StringBuffer();
Object serviceName = m_serviceName;
if (serviceName instanceof String[]) {
- StringBuffer sb = new StringBuffer();
String[] names = (String[]) serviceName;
for (int i = 0; i < names.length; i++) {
if (i > 0) {
@@ -1104,35 +1105,67 @@
}
sb.append(names[i]);
}
- sb.append('(');
- sb.append(propertiesToString());
- sb.append(')');
- return sb.toString();
- }
- else if (serviceName instanceof String) {
- return serviceName.toString() + "(" + propertiesToString() + ")";
- }
- else {
+ appendProperties(sb);
+ } else if (serviceName instanceof String) {
+ sb.append(serviceName.toString());
+ appendProperties(sb);
+ } else {
Object implementation = m_implementation;
if (implementation != null) {
- return implementation.toString();
+ if (implementation instanceof Class) {
+ sb.append(((Class) implementation).getName());
+ } else {
+ // If the implementation instance does not override "toString", just display
+ // the class name, else display the component using its toString method
+ try {
+ Method m = implementation.getClass().getMethod("toString", new Class[0]);
+ if (m.getDeclaringClass().equals(Object.class)) {
+ sb.append(implementation.getClass().getName());
+ } else {
+ sb.append(implementation.toString());
+ }
+ } catch (java.lang.NoSuchMethodException e) {
+ // Just display the class name
+ sb.append(implementation.getClass().getName());
+ }
+ }
+ } else {
+ sb.append(super.toString());
}
- else {
- return super.toString();
+ }
+ return sb.toString();
+ }
+
+ public String getClassName() {
+ Object serviceInstance = m_serviceInstance;
+ if (serviceInstance != null) {
+ return serviceInstance.getClass().getName();
+ }
+
+ Object implementation = m_implementation;
+ if (implementation != null) {
+ if (implementation instanceof Class) {
+ return ((Class) implementation).getName();
}
+ return implementation.getClass().getName();
+ }
+
+ Object instanceFactory = m_instanceFactory;
+ if (instanceFactory != null) {
+ return instanceFactory.getClass().getName();
+ } else {
+ // Unexpected ...
+ return getClass().getName();
}
}
- private String propertiesToString() {
- StringBuffer result = new StringBuffer();
+ private void appendProperties(StringBuffer result) {
Dictionary properties = calculateServiceProperties();
if (properties != null) {
+ result.append("(");
Enumeration enumeration = properties.keys();
while (enumeration.hasMoreElements()) {
Object key = enumeration.nextElement();
- if (result.length() > 0) {
- result.append(',');
- }
result.append(key.toString());
result.append('=');
Object value = properties.get(key);
@@ -1150,15 +1183,32 @@
else {
result.append(value.toString());
}
+ if (enumeration.hasMoreElements()) {
+ result.append(',');
+ }
}
+ result.append(")");
}
- return result.toString();
}
public int getState() {
return (isRegistered() ? 1 : 0);
}
+ public long getId() {
+ return m_id;
+ }
+
+ public synchronized String[] getServices() {
+ if (m_serviceName instanceof String[]) {
+ return (String[]) m_serviceName;
+ } else if (m_serviceName instanceof String) {
+ return new String[] { (String) m_serviceName };
+ } else {
+ return null;
+ }
+ }
+
public DependencyManager getDependencyManager() {
return m_manager;
}