You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2009/04/15 17:53:45 UTC
svn commit: r765248 - in
/geronimo/sandbox/blueprint/org.apache.felix.blueprint/src:
main/java/org/apache/felix/blueprint/reflect/
test/java/org/apache/felix/blueprint/ test/resources/
Author: gawor
Date: Wed Apr 15 15:53:44 2009
New Revision: 765248
URL: http://svn.apache.org/viewvc?rev=765248&view=rev
Log:
basic tests for handling custom nodes and attributes
Added:
geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/resources/test-custom-nodes.xml (with props)
Modified:
geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/reflect/ComponentMetadataImpl.java
geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/reflect/LocalComponentMetadataImpl.java
geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/java/org/apache/felix/blueprint/ParserTest.java
Modified: geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/reflect/ComponentMetadataImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/reflect/ComponentMetadataImpl.java?rev=765248&r1=765247&r2=765248&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/reflect/ComponentMetadataImpl.java (original)
+++ geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/reflect/ComponentMetadataImpl.java Wed Apr 15 15:53:44 2009
@@ -19,6 +19,7 @@
package org.apache.felix.blueprint.reflect;
import java.util.Collections;
+import java.util.HashSet;
import java.util.Set;
import org.osgi.service.blueprint.reflect.ComponentMetadata;
@@ -33,7 +34,15 @@
private String name;
private Set<String> explicitDependencies;
-
+
+ protected ComponentMetadataImpl() {
+ }
+
+ protected ComponentMetadataImpl(ComponentMetadata source) {
+ name = source.getName();
+ explicitDependencies = new HashSet<String>(source.getExplicitDependencies());
+ }
+
public String getName() {
return name;
}
Modified: geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/reflect/LocalComponentMetadataImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/reflect/LocalComponentMetadataImpl.java?rev=765248&r1=765247&r2=765248&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/reflect/LocalComponentMetadataImpl.java (original)
+++ geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/main/java/org/apache/felix/blueprint/reflect/LocalComponentMetadataImpl.java Wed Apr 15 15:53:44 2009
@@ -53,6 +53,15 @@
propertyInjectionMetadata = new ArrayList<PropertyInjectionMetadata>();
}
+ public LocalComponentMetadataImpl(LocalComponentMetadata source) {
+ super(source);
+ initMethodName = source.getInitMethodName();
+ destroyMethodName = source.getDestroyMethodName();
+ className = source.getClassName();
+ scope = source.getScope();
+ isLazy = source.isLazy();
+ }
+
public String getClassName() {
return className;
}
Modified: geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/java/org/apache/felix/blueprint/ParserTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/java/org/apache/felix/blueprint/ParserTest.java?rev=765248&r1=765247&r2=765248&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/java/org/apache/felix/blueprint/ParserTest.java (original)
+++ geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/java/org/apache/felix/blueprint/ParserTest.java Wed Apr 15 15:53:44 2009
@@ -18,6 +18,8 @@
*/
package org.apache.felix.blueprint;
+import java.net.URI;
+import java.net.URL;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
@@ -25,7 +27,10 @@
import junit.framework.TestCase;
import org.apache.felix.blueprint.context.Parser;
+import org.apache.felix.blueprint.reflect.LocalComponentMetadataImpl;
import org.osgi.service.blueprint.namespace.ComponentDefinitionRegistry;
+import org.osgi.service.blueprint.namespace.NamespaceHandler;
+import org.osgi.service.blueprint.namespace.ParserContext;
import org.osgi.service.blueprint.reflect.ArrayValue;
import org.osgi.service.blueprint.reflect.ComponentMetadata;
import org.osgi.service.blueprint.reflect.ComponentValue;
@@ -33,8 +38,13 @@
import org.osgi.service.blueprint.reflect.LocalComponentMetadata;
import org.osgi.service.blueprint.reflect.NullValue;
import org.osgi.service.blueprint.reflect.ParameterSpecification;
+import org.osgi.service.blueprint.reflect.PropertyInjectionMetadata;
import org.osgi.service.blueprint.reflect.ReferenceValue;
import org.osgi.service.blueprint.reflect.TypedStringValue;
+import org.osgi.service.blueprint.reflect.Value;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
/**
* TODO: constructor injection
@@ -118,13 +128,136 @@
parser.parse(Arrays.asList( getClass().getResource("/test.xml") ));
ComponentDefinitionRegistry registry = parser.getRegistry();
assertNotNull(registry);
-
}
+ public void testCustomNodes() throws Exception {
+ Parser parser = new Parser();
+ parser.setNamespaceHandlerRegistry(new TestNamespaceHandlerRegistry());
+ parser.parse(Arrays.asList( getClass().getResource("/test-custom-nodes.xml") ));
+ ComponentDefinitionRegistry registry = parser.getRegistry();
+
+ ComponentMetadata metadata;
+
+ metadata = registry.getComponentDefinition("fooService");
+ assertNotNull(metadata);
+ assertTrue(metadata instanceof MyLocalComponentMetadata);
+ MyLocalComponentMetadata comp1 = (MyLocalComponentMetadata) metadata;
+ assertEquals(true, comp1.getCacheReturnValues());
+ assertEquals("getVolatile", comp1.getOperation());
+
+ metadata = registry.getComponentDefinition("barService");
+ assertNotNull(metadata);
+ assertTrue(metadata instanceof LocalComponentMetadata);
+ LocalComponentMetadata comp2 = (LocalComponentMetadata) metadata;
+ assertEquals(1, comp2.getPropertyInjectionMetadata().size());
+ PropertyInjectionMetadata propertyMetadata = (PropertyInjectionMetadata)comp2.getPropertyInjectionMetadata().iterator().next();
+ assertEquals("localCache", propertyMetadata.getName());
+ Value propertyValue = propertyMetadata.getValue();
+ assertTrue(propertyValue instanceof ComponentValue);
+ ComponentValue componentValue = (ComponentValue) propertyValue;
+ assertTrue(componentValue.getComponentMetadata() instanceof LocalComponentMetadata);
+ LocalComponentMetadata innerComp = (LocalComponentMetadata) componentValue.getComponentMetadata();
+ assertEquals("org.apache.geronimo.CacheProperty", innerComp.getClassName());
+
+ metadata = registry.getComponentDefinition("myCache");
+ assertNotNull(metadata);
+ assertTrue(metadata instanceof LocalComponentMetadata);
+ LocalComponentMetadata comp3 = (LocalComponentMetadata) metadata;
+ assertEquals("org.apache.geronimo.Cache", comp3.getClassName());
+ }
protected Parser parse(String name) throws Exception {
Parser parser = new Parser();
parser.parse(Arrays.asList( getClass().getResource(name) ));
return parser;
}
+
+ private static class TestNamespaceHandlerRegistry implements NamespaceHandlerRegistry {
+
+ public void destroy() {
+ }
+
+ public NamespaceHandler getNamespaceHandler(URI uri) {
+ URI u = URI.create("http://cache.org");
+ if (u.equals(uri)) {
+ return new TestNamespaceHandler();
+ } else {
+ return null;
+ }
+ }
+
+ }
+
+ private static class TestNamespaceHandler implements NamespaceHandler {
+
+ public ComponentMetadata decorate(Node node,
+ ComponentMetadata component,
+ ParserContext context) {
+ //System.out.println("decorate: " + node + " " + component + " " + context.getEnclosingComponent().getName());
+
+ if (node instanceof Attr) {
+ Attr attr = (Attr) node;
+ MyLocalComponentMetadata decoratedComp = new MyLocalComponentMetadata((LocalComponentMetadata)component);
+ decoratedComp.setCacheReturnValues(Boolean.parseBoolean(attr.getValue()));
+ return decoratedComp;
+ } else if (node instanceof Element) {
+ Element element = (Element) node;
+ MyLocalComponentMetadata decoratedComp = (MyLocalComponentMetadata) component;
+ decoratedComp.setOperation(element.getAttribute("name"));
+ return decoratedComp;
+ } else {
+ throw new RuntimeException("Unhandled node: " + node);
+ }
+ }
+
+ public URL getSchemaLocation(String namespace) {
+ return null;
+ }
+
+ public ComponentMetadata parse(Element element, ParserContext context) {
+ String comp = (context.getEnclosingComponent() == null) ? null : context.getEnclosingComponent().getName();
+ //System.out.println("parse: " + element.getLocalName() + " " + comp);
+
+ String className;
+ if (context.getEnclosingComponent() == null) {
+ className = "org.apache.geronimo.Cache";
+ } else {
+ className = "org.apache.geronimo.CacheProperty";
+ }
+
+ LocalComponentMetadataImpl p = new LocalComponentMetadataImpl();
+ p.setName(element.getAttribute("id"));
+ p.setClassName(className);
+
+ return p;
+ }
+
+ }
+
+ private static class MyLocalComponentMetadata extends LocalComponentMetadataImpl {
+
+ private boolean cacheReturnValues;
+ private String operation;
+
+ public MyLocalComponentMetadata(LocalComponentMetadata impl) {
+ super(impl);
+ }
+
+ public boolean getCacheReturnValues() {
+ return cacheReturnValues;
+ }
+
+ public void setCacheReturnValues(boolean value) {
+ cacheReturnValues = value;
+ }
+
+ public void setOperation(String operation) {
+ this.operation = operation;
+ }
+
+ public String getOperation() {
+ return this.operation;
+ }
+ }
+
}
Added: geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/resources/test-custom-nodes.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/resources/test-custom-nodes.xml?rev=765248&view=auto
==============================================================================
--- geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/resources/test-custom-nodes.xml (added)
+++ geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/resources/test-custom-nodes.xml Wed Apr 15 15:53:44 2009
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<components xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:cache="http://cache.org"
+ xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 ../../main/resources/org/apache/felix/blueprint/blueprint.xsd">
+
+ <cache:lru-cache id="myCache" />
+
+ <component id="fooService" class="FooServiceImpl" cache:cache-return-values="true">
+ <cache:operation name="getVolatile" />
+
+ <property name="myProp" value="12" />
+ </component>
+
+ <component id="barService" class="BarServiceImpl">
+ <property name="localCache">
+ <cache:lru-cache />
+ </property>
+ </component>
+
+</components>
\ No newline at end of file
Propchange: geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/resources/test-custom-nodes.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/resources/test-custom-nodes.xml
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/sandbox/blueprint/org.apache.felix.blueprint/src/test/resources/test-custom-nodes.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml