You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sl...@apache.org on 2008/04/21 15:56:56 UTC
svn commit: r650147 - in
/incubator/tuscany/java/sca/tools/registry-inspector/src:
main/java/org/apache/tuscany/sca/tools/inspector/
test/java/org/apache/tuscany/sca/tools/inspector/
Author: slaws
Date: Mon Apr 21 06:56:51 2008
New Revision: 650147
URL: http://svn.apache.org/viewvc?rev=650147&view=rev
Log:
Added the code to print out composites using the composite processor
Added:
incubator/tuscany/java/sca/tools/registry-inspector/src/main/java/org/apache/tuscany/sca/tools/inspector/RuntimeInspector.java (with props)
Modified:
incubator/tuscany/java/sca/tools/registry-inspector/src/main/java/org/apache/tuscany/sca/tools/inspector/AssemblyInspector.java
incubator/tuscany/java/sca/tools/registry-inspector/src/test/java/org/apache/tuscany/sca/tools/inspector/RegistryInspectorTestCase.java
Modified: incubator/tuscany/java/sca/tools/registry-inspector/src/main/java/org/apache/tuscany/sca/tools/inspector/AssemblyInspector.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tools/registry-inspector/src/main/java/org/apache/tuscany/sca/tools/inspector/AssemblyInspector.java?rev=650147&r1=650146&r2=650147&view=diff
==============================================================================
--- incubator/tuscany/java/sca/tools/registry-inspector/src/main/java/org/apache/tuscany/sca/tools/inspector/AssemblyInspector.java (original)
+++ incubator/tuscany/java/sca/tools/registry-inspector/src/main/java/org/apache/tuscany/sca/tools/inspector/AssemblyInspector.java Mon Apr 21 06:56:51 2008
@@ -34,252 +34,50 @@
import java.util.List;
import java.util.Set;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.node.SCANode2;
import org.apache.tuscany.sca.node.impl.NodeImpl;
import org.w3c.dom.Node;
/**
- * An implementation of the ExtensionPointRegistryInspector service.
+ * Prints out the composite XML.
*/
public class AssemblyInspector {
- private boolean useGetters = false;
- private PrintWriter out;
- private int indent;
-
-
- void indent() {
- for (int i = 0; i < indent; i++) {
- out.print(" ");
- }
- }
public String assemblyAsString(SCANode2 node) {
StringBuffer assemblyString = new StringBuffer();
- this.out = new PrintWriter(new OutputStreamWriter(System.out), true);
- // Get the interesting extension points out of the registry and print them out
+ // get at the node internals
+ Composite composite = ((NodeImpl)node).getComposite();
+ ExtensionPointRegistry registry = ((NodeImpl)node).getExtensionPointRegistry();
+
+ // Get the output factory
+ ModelFactoryExtensionPoint modelFactories = registry.getExtensionPoint(ModelFactoryExtensionPoint.class);
+ XMLOutputFactory outputFactory = modelFactories.getFactory(XMLOutputFactory.class);
+ StAXArtifactProcessorExtensionPoint staxProcessors = registry.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
+ StAXArtifactProcessor<Composite> compositeProcessor = (StAXArtifactProcessor<Composite>)staxProcessors.getProcessor(Composite.class);
+ // Write the composite
try {
- Composite composite = ((NodeImpl)node).getComposite();
-
- print(composite);
-
-
- } catch (Exception ex) {
- System.out.println(ex.toString());
+ XMLStreamWriter writer = outputFactory.createXMLStreamWriter(System.out);
+ compositeProcessor.write(composite, writer);
+ } catch (Exception e) {
+ assemblyString.append(e.toString());
}
return assemblyString.toString();
}
- /**
- * Print an object.
- *
- * @param object
- */
- public void print(Object object) {
- Set<Integer> objects = new HashSet<Integer>();
- print(object, objects);
- }
-
- /**
- * Print an object.
- *
- * @param object
- */
- private void print(Object object, Set<Integer> printed) {
- if (object == null) {
- return;
- }
- int id = System.identityHashCode(object);
- if (printed.contains(id)) {
-
- // If we've already printed an object, print just it's HashCode
- indent();
- out.println("<" + object.getClass().getName() + " IDREF=\"" + id + "\"/>");
- } else {
- printed.add(id);
- try {
-
- // Print the object class name
- indent();
- out.println("<" + object.getClass().getName() + " ID=\"" + id + "\">");
-
- // Get the object's properties
- ValueAccessor accessor = useGetters ? new PropertyAccessor(object) : new FieldAccessor(object);
- for (int i = 0; i < accessor.size(); i++) {
- try {
-
- // Get the value of each property
- Object value = accessor.getValue(i);
- if (value != null) {
-
- // Convert array value into a list
- if (value.getClass().isArray()) {
- value = Arrays.asList((Object[])value);
- }
-
- // Print elements in a list
- if (value instanceof List) {
- if (!((List)value).isEmpty()) {
- indent++;
- indent();
- out.println("<" + accessor.getName(i) + ">");
- // Print each element, recursively
- for (Object element : (List)value) {
- indent++;
- print(element, printed);
- indent--;
- }
- indent();
- out.println("</" + accessor.getName(i) + ">");
- indent--;
- }
- } else {
- Class<?> valueClass = value.getClass();
-
- // Print a primitive, java built in type or
- // enum, using toString()
- if (valueClass.isPrimitive() || valueClass.getName().startsWith("java.")
- || valueClass.getName().startsWith("javax.")
- || valueClass.isEnum()) {
- if (!accessor.getName(i).equals("class")) {
- if (!(Boolean.FALSE.equals(value))) {
- indent++;
- indent();
- out.println("<" + accessor.getName(i) + ">" + value.toString() + "</" + accessor.getName(i) + ">" );
- indent--;
- }
- }
- } else if (value instanceof Node) {
- indent++;
- indent();
- out.println("<" + accessor.getName(i) + ">" + value.toString() + "</" + accessor.getName(i) + ">");
- indent--;
- } else {
-
- // Print an object, recursively
- indent++;
- indent();
- out.println("<" + accessor.getName(i) + ">");
- indent++;
- print(value, printed);
- indent--;
- indent();
- out.println("</" + accessor.getName(i) + ">");
- indent--;
- }
- }
- }
- } catch (Exception e) {
- }
- }
- indent();
- out.println("</" + object.getClass().getName() + ">");
- } catch (Exception e) {
- indent();
- out.println(e);
- }
- }
- }
-
- public static interface ValueAccessor {
- int size();
-
- String getName(int i);
-
- Object getValue(int i) throws Exception;
- }
-
- /**
- * Java field reflection based value accessor
- */
- private static class FieldAccessor implements ValueAccessor {
-
- private Object object;
- private List<Field> fields;
-
- public FieldAccessor(Object object) {
- this.fields = getAllFields(object.getClass());
- this.object = object;
- }
-
- public String getName(int i) {
- return fields.get(i).getName();
- }
-
- public Object getValue(int i) throws Exception {
- return fields.get(i).get(object);
- }
- public int size() {
- return fields.size();
- }
-
- }
-
- /**
- * JavaBean-based value accessor
- */
- private static class PropertyAccessor implements ValueAccessor {
-
- private Object object;
- private PropertyDescriptor[] fields;
-
- public PropertyAccessor(Object object) throws IntrospectionException {
- BeanInfo beanInfo = Introspector.getBeanInfo(object.getClass());
- this.fields = beanInfo.getPropertyDescriptors();
- this.object = object;
- }
-
- public String getName(int i) {
- return fields[i].getName();
- }
-
- public Object getValue(int i) throws Exception {
- Method getter = fields[i].getReadMethod();
- if (getter != null) {
- return getter.invoke(object);
- }
- return null;
- }
-
- public int size() {
- return fields.length;
- }
-
- }
-
- /**
- * Returns a collection of fields declared by a class
- * or one of its supertypes
- */
- private static List<Field> getAllFields(Class<?> clazz) {
- return getAllFields(clazz, new ArrayList<Field>());
- }
-
- /**
- * Recursively evaluates the type hierarchy to return all fields
- */
- private static List<Field> getAllFields(Class<?> clazz, List<Field> fields) {
- if (clazz == null || clazz.isArray() || Object.class.equals(clazz)) {
- return fields;
- }
- fields = getAllFields(clazz.getSuperclass(), fields);
- Field[] declaredFields = clazz.getDeclaredFields();
- for (final Field field : declaredFields) {
- AccessController.doPrivileged(new PrivilegedAction<Object>() {
- public Object run() {
- field.setAccessible(true); // ignore Java accessibility
- return null;
- }
- });
- fields.add(field);
- }
- return fields;
- }
-
}
Added: incubator/tuscany/java/sca/tools/registry-inspector/src/main/java/org/apache/tuscany/sca/tools/inspector/RuntimeInspector.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tools/registry-inspector/src/main/java/org/apache/tuscany/sca/tools/inspector/RuntimeInspector.java?rev=650147&view=auto
==============================================================================
--- incubator/tuscany/java/sca/tools/registry-inspector/src/main/java/org/apache/tuscany/sca/tools/inspector/RuntimeInspector.java (added)
+++ incubator/tuscany/java/sca/tools/registry-inspector/src/main/java/org/apache/tuscany/sca/tools/inspector/RuntimeInspector.java Mon Apr 21 06:56:51 2008
@@ -0,0 +1,285 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.tools.inspector;
+
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.node.SCANode2;
+import org.apache.tuscany.sca.node.impl.NodeImpl;
+import org.w3c.dom.Node;
+
+
+/**
+ * Prints out the assembly and the runtime hierarchy as XML
+ */
+public class RuntimeInspector {
+
+ private boolean useGetters = false;
+ private PrintWriter out;
+ private int indent;
+
+
+ void indent() {
+ for (int i = 0; i < indent; i++) {
+ out.print(" ");
+ }
+ }
+
+ public String runtimeAsString(SCANode2 node) {
+ StringBuffer assemblyString = new StringBuffer();
+ this.out = new PrintWriter(new OutputStreamWriter(System.out), true);
+
+ // Get the interesting extension points out of the registry and print them out
+
+ try {
+ Composite composite = ((NodeImpl)node).getComposite();
+
+ print(composite);
+
+
+ } catch (Exception ex) {
+ System.out.println(ex.toString());
+ }
+
+ return assemblyString.toString();
+ }
+
+ /**
+ * Print an object.
+ *
+ * @param object
+ */
+ public void print(Object object) {
+ Set<Integer> objects = new HashSet<Integer>();
+ print(object, objects);
+ }
+
+ /**
+ * Print an object.
+ *
+ * @param object
+ */
+ private void print(Object object, Set<Integer> printed) {
+ if (object == null) {
+ return;
+ }
+ int id = System.identityHashCode(object);
+ if (printed.contains(id)) {
+
+ // If we've already printed an object, print just it's HashCode
+ indent();
+ out.println("<" + object.getClass().getName() + " IDREF=\"" + id + "\"/>");
+ } else {
+ printed.add(id);
+ try {
+
+ // Print the object class name
+ indent();
+ out.println("<" + object.getClass().getName() + " ID=\"" + id + "\">");
+
+ // Get the object's properties
+ ValueAccessor accessor = useGetters ? new PropertyAccessor(object) : new FieldAccessor(object);
+ for (int i = 0; i < accessor.size(); i++) {
+ try {
+
+ // Get the value of each property
+ Object value = accessor.getValue(i);
+ if (value != null) {
+
+ // Convert array value into a list
+ if (value.getClass().isArray()) {
+ value = Arrays.asList((Object[])value);
+ }
+
+ // Print elements in a list
+ if (value instanceof List) {
+ if (!((List)value).isEmpty()) {
+ indent++;
+ indent();
+ out.println("<" + accessor.getName(i) + ">");
+ // Print each element, recursively
+ for (Object element : (List)value) {
+ indent++;
+ print(element, printed);
+ indent--;
+ }
+ indent();
+ out.println("</" + accessor.getName(i) + ">");
+ indent--;
+ }
+ } else {
+ Class<?> valueClass = value.getClass();
+
+ // Print a primitive, java built in type or
+ // enum, using toString()
+ if (valueClass.isPrimitive() || valueClass.getName().startsWith("java.")
+ || valueClass.getName().startsWith("javax.")
+ || valueClass.isEnum()) {
+ if (!accessor.getName(i).equals("class")) {
+ if (!(Boolean.FALSE.equals(value))) {
+ indent++;
+ indent();
+ out.println("<" + accessor.getName(i) + ">" + value.toString() + "</" + accessor.getName(i) + ">" );
+ indent--;
+ }
+ }
+ } else if (value instanceof Node) {
+ indent++;
+ indent();
+ out.println("<" + accessor.getName(i) + ">" + value.toString() + "</" + accessor.getName(i) + ">");
+ indent--;
+ } else {
+
+ // Print an object, recursively
+ indent++;
+ indent();
+ out.println("<" + accessor.getName(i) + ">");
+ indent++;
+ print(value, printed);
+ indent--;
+ indent();
+ out.println("</" + accessor.getName(i) + ">");
+ indent--;
+ }
+ }
+ }
+ } catch (Exception e) {
+ }
+ }
+ indent();
+ out.println("</" + object.getClass().getName() + ">");
+ } catch (Exception e) {
+ indent();
+ out.println(e);
+ }
+ }
+ }
+
+ public static interface ValueAccessor {
+ int size();
+
+ String getName(int i);
+
+ Object getValue(int i) throws Exception;
+ }
+
+ /**
+ * Java field reflection based value accessor
+ */
+ private static class FieldAccessor implements ValueAccessor {
+
+ private Object object;
+ private List<Field> fields;
+
+ public FieldAccessor(Object object) {
+ this.fields = getAllFields(object.getClass());
+ this.object = object;
+ }
+
+ public String getName(int i) {
+ return fields.get(i).getName();
+ }
+
+ public Object getValue(int i) throws Exception {
+ return fields.get(i).get(object);
+ }
+
+ public int size() {
+ return fields.size();
+ }
+
+ }
+
+ /**
+ * JavaBean-based value accessor
+ */
+ private static class PropertyAccessor implements ValueAccessor {
+
+ private Object object;
+ private PropertyDescriptor[] fields;
+
+ public PropertyAccessor(Object object) throws IntrospectionException {
+ BeanInfo beanInfo = Introspector.getBeanInfo(object.getClass());
+ this.fields = beanInfo.getPropertyDescriptors();
+ this.object = object;
+ }
+
+ public String getName(int i) {
+ return fields[i].getName();
+ }
+
+ public Object getValue(int i) throws Exception {
+ Method getter = fields[i].getReadMethod();
+ if (getter != null) {
+ return getter.invoke(object);
+ }
+ return null;
+ }
+
+ public int size() {
+ return fields.length;
+ }
+
+ }
+
+ /**
+ * Returns a collection of fields declared by a class
+ * or one of its supertypes
+ */
+ private static List<Field> getAllFields(Class<?> clazz) {
+ return getAllFields(clazz, new ArrayList<Field>());
+ }
+
+ /**
+ * Recursively evaluates the type hierarchy to return all fields
+ */
+ private static List<Field> getAllFields(Class<?> clazz, List<Field> fields) {
+ if (clazz == null || clazz.isArray() || Object.class.equals(clazz)) {
+ return fields;
+ }
+ fields = getAllFields(clazz.getSuperclass(), fields);
+ Field[] declaredFields = clazz.getDeclaredFields();
+ for (final Field field : declaredFields) {
+ AccessController.doPrivileged(new PrivilegedAction<Object>() {
+ public Object run() {
+ field.setAccessible(true); // ignore Java accessibility
+ return null;
+ }
+ });
+ fields.add(field);
+ }
+ return fields;
+ }
+
+}
Propchange: incubator/tuscany/java/sca/tools/registry-inspector/src/main/java/org/apache/tuscany/sca/tools/inspector/RuntimeInspector.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/tools/registry-inspector/src/main/java/org/apache/tuscany/sca/tools/inspector/RuntimeInspector.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/tools/registry-inspector/src/test/java/org/apache/tuscany/sca/tools/inspector/RegistryInspectorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tools/registry-inspector/src/test/java/org/apache/tuscany/sca/tools/inspector/RegistryInspectorTestCase.java?rev=650147&r1=650146&r2=650147&view=diff
==============================================================================
--- incubator/tuscany/java/sca/tools/registry-inspector/src/test/java/org/apache/tuscany/sca/tools/inspector/RegistryInspectorTestCase.java (original)
+++ incubator/tuscany/java/sca/tools/registry-inspector/src/test/java/org/apache/tuscany/sca/tools/inspector/RegistryInspectorTestCase.java Mon Apr 21 06:56:51 2008
@@ -68,6 +68,10 @@
System.out.println(registryInspector.registryAsString(node));
+ RuntimeInspector runtimeInspector = new RuntimeInspector();
+
+ System.out.println(runtimeInspector.runtimeAsString(node));
+
AssemblyInspector assemblyInspector = new AssemblyInspector();
System.out.println(assemblyInspector.assemblyAsString(node));
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org