You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ri...@apache.org on 2009/04/10 13:33:28 UTC

svn commit: r763912 [1/2] - in /geronimo/sandbox/gawor/rfc124: extender/src/main/java/org/apache/geronimo/osgi/context/ extender/src/main/java/org/apache/geronimo/osgi/reflect/ rfc124-api/src/main/java/org/osgi/service/blueprint/reflect/

Author: rickmcguire
Date: Fri Apr 10 11:33:27 2009
New Revision: 763912

URL: http://svn.apache.org/viewvc?rev=763912&view=rev
Log:
fix some errors in the api classes and add concrete reflection api classes

Added:
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ArrayValueImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/BindingListenerMetadataImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/CollectionBasedServiceReferenceComponentMetadataImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ComponentMetadataImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ComponentValueImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ConstructorInjectionMetadataImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ListValueImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/LocalComponentMetadataImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MapValueImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MetadataUtil.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MethodInjectionMetadataImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/NullValueImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ParameterSpecificationImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/PropertiesValueImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/PropertyInjectionMetadataImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ReferenceNameValueImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ReferenceValueImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/RegistrationListenerMetadataImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ServiceExportComponentMetadataImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ServiceReferenceComponentMetadataImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/SetValueImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/TypedStringValueImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/UnaryServiceReferenceComponentMetadataImpl.java   (with props)
    geronimo/sandbox/gawor/rfc124/rfc124-api/src/main/java/org/osgi/service/blueprint/reflect/PropertyInjectionMetadata.java
      - copied, changed from r763906, geronimo/sandbox/gawor/rfc124/rfc124-api/src/main/java/org/osgi/service/blueprint/reflect/PropertiesInjectionMetadata.java
Removed:
    geronimo/sandbox/gawor/rfc124/rfc124-api/src/main/java/org/osgi/service/blueprint/reflect/PropertiesInjectionMetadata.java
Modified:
    geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/context/ModuleContextImpl.java
    geronimo/sandbox/gawor/rfc124/rfc124-api/src/main/java/org/osgi/service/blueprint/reflect/CollectionBasedServiceReferenceComponentMetadata.java
    geronimo/sandbox/gawor/rfc124/rfc124-api/src/main/java/org/osgi/service/blueprint/reflect/LocalComponentMetadata.java

Modified: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/context/ModuleContextImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/context/ModuleContextImpl.java?rev=763912&r1=763911&r2=763912&view=diff
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/context/ModuleContextImpl.java (original)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/context/ModuleContextImpl.java Fri Apr 10 11:33:27 2009
@@ -32,7 +32,7 @@
         this.bundleContext = bundleContext;
         System.out.println("Module context created: " + this.bundleContext);
     }
-    
+
     public BundleContext getBundleContext() {
         return this.bundleContext;
     }
@@ -60,7 +60,7 @@
     public Collection getReferencedServicesMetadata() {
         return null;
     }
-        
+
     public void destroy() {
         System.out.println("Module context destroyed: " + this.bundleContext);
     }

Added: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ArrayValueImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ArrayValueImpl.java?rev=763912&view=auto
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ArrayValueImpl.java (added)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ArrayValueImpl.java Fri Apr 10 11:33:27 2009
@@ -0,0 +1,65 @@
+/**
+ *  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.geronimo.osgi.reflect;
+
+import org.osgi.service.blueprint.reflect.ArrayValue;
+import org.osgi.service.blueprint.reflect.Value;
+
+
+public class ArrayValueImpl implements ArrayValue {
+    private String valueType;
+    private Value[] array;
+
+    public ArrayValueImpl() {
+        array = new Value[0];
+    }
+
+    public ArrayValueImpl(ArrayValue source) {
+        Value[] valueArray = source.getArray();
+
+        array = new Value[valueArray.length];
+        for (int i = 0; i < valueArray.length; i++) {
+            array[i] = MetadataUtil.cloneValue(valueArray[i]);
+        }
+
+        valueType = source.getValueType();
+    }
+
+    /**
+     * The value-type specified for the list elements, or null if none given
+     */
+	public String getValueType() {
+        return valueType;
+    }
+
+    public void setValueType(String type) {
+        valueType = type;
+    }
+
+    /**
+     * The array of Value objects
+     */
+    public Value[] getArray() {
+        return array;
+    }
+
+    public void setValueArray(Value[] array) {
+        this.array = array;
+    }
+}
+

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ArrayValueImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ArrayValueImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ArrayValueImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/BindingListenerMetadataImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/BindingListenerMetadataImpl.java?rev=763912&view=auto
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/BindingListenerMetadataImpl.java (added)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/BindingListenerMetadataImpl.java Fri Apr 10 11:33:27 2009
@@ -0,0 +1,87 @@
+/**
+ *  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.geronimo.osgi.reflect;
+
+import org.osgi.service.blueprint.reflect.BindingListenerMetadata;
+import org.osgi.service.blueprint.reflect.Value;
+
+
+public class BindingListenerMetadataImpl implements BindingListenerMetadata {
+    private Value listenerComponent;
+    private String bindMethodName;
+    private String unbindMethodName;
+
+    public BindingListenerMetadataImpl()
+    {
+    }
+
+    public BindingListenerMetadataImpl(BindingListenerMetadata source) {
+        listenerComponent = MetadataUtil.cloneValue(source.getListenerComponent());
+        bindMethodName = source.getBindMethodName();
+        unbindMethodName = source.getUnbindMethodName();
+    }
+
+
+
+    /**
+     * The component instance that will receive bind and unbind
+     * events. The returned value must reference a component and therefore be
+     * either a ComponentValue, ReferenceValue, or ReferenceNameValue.
+     *
+     * @return the listener component reference.
+     */
+    public Value getListenerComponent() {
+        return listenerComponent;
+    }
+
+    public void setListenerComponent(Value v) {
+        listenerComponent = v;
+    }
+
+
+    /**
+     * The name of the method to invoke on the listener component when
+     * a matching service is bound to the reference
+     *
+     * @return the bind callback method name.
+     */
+    public String getBindMethodName() {
+        return bindMethodName;
+    }
+
+    public void setBindMethodName(String name) {
+        bindMethodName = name;
+    }
+
+
+
+    /**
+     * The name of the method to invoke on the listener component when
+     * a service is unbound from the reference.
+     *
+     * @return the unbind callback method name.
+     */
+    public String getUnbindMethodName() {
+        return unbindMethodName;
+    }
+
+    public void setUnbindMethodName(String name) {
+        unbindMethodName = name;
+    }
+}
+

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/BindingListenerMetadataImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/BindingListenerMetadataImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/BindingListenerMetadataImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/CollectionBasedServiceReferenceComponentMetadataImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/CollectionBasedServiceReferenceComponentMetadataImpl.java?rev=763912&view=auto
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/CollectionBasedServiceReferenceComponentMetadataImpl.java (added)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/CollectionBasedServiceReferenceComponentMetadataImpl.java Fri Apr 10 11:33:27 2009
@@ -0,0 +1,103 @@
+/**
+ *  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.geronimo.osgi.reflect;
+
+import java.util.List;
+
+import org.osgi.service.blueprint.reflect.CollectionBasedServiceReferenceComponentMetadata;
+import org.osgi.service.blueprint.reflect.Value;
+
+public class CollectionBasedServiceReferenceComponentMetadataImpl extends ServiceReferenceComponentMetadataImpl implements CollectionBasedServiceReferenceComponentMetadata {
+    private Value comparator;
+    private Class collectionType = List.class;
+    private int orderingBasis;
+    private int memberType;
+
+    public CollectionBasedServiceReferenceComponentMetadataImpl() {
+        this((String)null);
+    }
+
+    public CollectionBasedServiceReferenceComponentMetadataImpl(String name) {
+        super(name);
+    }
+
+
+    public CollectionBasedServiceReferenceComponentMetadataImpl(CollectionBasedServiceReferenceComponentMetadata source) {
+        super(source);
+
+        comparator = MetadataUtil.cloneValue(source.getComparator());
+        collectionType = source.getCollectionType();
+        orderingBasis = source.getOrderingComparisonBasis();
+    }
+
+    /**
+     * The comparator specified for ordering the collection, or null if no
+     * comparator was specified.
+     *
+     * @return if a comparator was specified then a Value object identifying the
+     * comparator (a ComponentValue, ReferenceValue, or ReferenceNameValue) is
+     * returned. If no comparator was specified then null will be returned.
+     */
+    public Value getComparator() {
+        return comparator;
+    }
+
+    public void setComparator(Value comparator) {
+        this.comparator = comparator;
+    }
+
+
+    /**
+     * The type of collection to be created.
+     *
+     * @return Class object for the specified collection type (List, Set).
+     */
+    public Class getCollectionType() {
+        return collectionType;
+    }
+
+
+    public void setCollectionType(Class type) {
+        collectionType = type;
+    }
+
+
+    /**
+     * The basis on which to perform natural ordering, if specified.
+     *
+     * @return one of ORDER_BASIS_SERVICES and ORDER_BASIS_SERVICE_REFERENCES
+     */
+    public int getOrderingComparisonBasis() {
+        return orderingBasis;
+    }
+
+    public void setOrderingComparisonBasis(int b) {
+        orderingBasis = b;
+    }
+
+    /**
+     * Whether the collection will contain service instances, or service references
+     */
+    public int getMemberType() {
+        return memberType;
+    }
+
+    public void setMemberType(int memberType) {
+           this.memberType = memberType;
+    }
+}

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/CollectionBasedServiceReferenceComponentMetadataImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/CollectionBasedServiceReferenceComponentMetadataImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/CollectionBasedServiceReferenceComponentMetadataImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ComponentMetadataImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ComponentMetadataImpl.java?rev=763912&view=auto
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ComponentMetadataImpl.java (added)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ComponentMetadataImpl.java Fri Apr 10 11:33:27 2009
@@ -0,0 +1,78 @@
+/**
+ *  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.geronimo.osgi.reflect;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.osgi.service.blueprint.reflect.ComponentMetadata;
+
+public class ComponentMetadataImpl implements ComponentMetadata {
+    // the name of the component;
+    private String name;
+    // the dependency set
+    private Set dependencies;
+
+    protected ComponentMetadataImpl() {
+        this((String)null);
+    }
+
+    protected ComponentMetadataImpl(String name) {
+        this.name = name;
+        dependencies = new HashSet();
+    }
+
+    protected ComponentMetadataImpl(ComponentMetadata source) {
+        name = source.getName();
+        dependencies = new HashSet(source.getExplicitDependencies());
+    }
+
+
+
+    /**
+     * The name of the component.
+     *
+     * @return component name. The component name may be null if this is an anonymously
+     * defined inner component.
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * The names of any components listed in a "depends-on" attribute for this
+     * component.
+     *
+     * @return an immutable set of component names for components that we have explicitly
+     * declared a dependency on, or an empty set if none.
+     */
+    public Set getExplicitDependencies() {
+        return dependencies;
+    }
+
+
+    /**
+     * Add a new dependency to the explicit list.
+     *
+     * @param name   The new dependency name.
+     */
+    public void addDependency(String name) {
+        dependencies.add(name);
+    }
+}
+

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ComponentMetadataImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ComponentMetadataImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ComponentMetadataImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ComponentValueImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ComponentValueImpl.java?rev=763912&view=auto
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ComponentValueImpl.java (added)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ComponentValueImpl.java Fri Apr 10 11:33:27 2009
@@ -0,0 +1,39 @@
+/**
+ *  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.geronimo.osgi.reflect;
+
+import org.osgi.service.blueprint.reflect.ComponentMetadata;
+import org.osgi.service.blueprint.reflect.ComponentValue;
+
+
+public class ComponentValueImpl implements ComponentValue {
+    private ComponentMetadata componentMetadata;
+
+    public ComponentValueImpl(ComponentMetadata meta) {
+        componentMetadata = meta;
+    }
+
+    public ComponentValueImpl(ComponentValue source) {
+        componentMetadata = MetadataUtil.cloneComponentMetadata(source.getComponentMetadata());
+    }
+
+    public ComponentMetadata getComponentMetadata() {
+        return componentMetadata;
+    }
+}
+

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ComponentValueImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ComponentValueImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ComponentValueImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ConstructorInjectionMetadataImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ConstructorInjectionMetadataImpl.java?rev=763912&view=auto
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ConstructorInjectionMetadataImpl.java (added)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ConstructorInjectionMetadataImpl.java Fri Apr 10 11:33:27 2009
@@ -0,0 +1,58 @@
+/**
+ *  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.geronimo.osgi.reflect;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.osgi.service.blueprint.reflect.*;
+
+public class ConstructorInjectionMetadataImpl implements ConstructorInjectionMetadata {
+    private List parameterSpecifications = new ArrayList();
+
+    public ConstructorInjectionMetadataImpl() {
+
+    }
+
+    public ConstructorInjectionMetadataImpl(ConstructorInjectionMetadata source) {
+        Iterator i = source.getParameterSpecifications().iterator();
+        while (i.hasNext()) {
+            parameterSpecifications.add(new ParameterSpecificationImpl((ParameterSpecification)i.next()));
+        }
+    }
+
+
+    /**
+     * The parameter specifications that determine which constructor to invoke
+     * and what arguments to pass to it.
+     *
+     * @return an immutable list of ParameterSpecification, or an empty list if the
+     * default constructor is to be invoked. The list is ordered by ascending parameter index.
+     * I.e., the first parameter is first in the list, and so on.
+     */
+    public List getParameterSpecifications() {
+        return parameterSpecifications;
+    }
+
+    public void addParameterSpecification(ParameterSpecification p) {
+        parameterSpecifications.add(p);
+    }
+
+}
+

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ConstructorInjectionMetadataImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ConstructorInjectionMetadataImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ConstructorInjectionMetadataImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ListValueImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ListValueImpl.java?rev=763912&view=auto
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ListValueImpl.java (added)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ListValueImpl.java Fri Apr 10 11:33:27 2009
@@ -0,0 +1,64 @@
+/**
+ *  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.geronimo.osgi.reflect;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.osgi.service.blueprint.reflect.*;
+
+
+public class ListValueImpl implements ListValue {
+    private List list;
+    private String valueType;
+
+    public ListValueImpl(List list) {
+        this.list = list;
+    }
+
+    public ListValueImpl(ListValue source) {
+        this.list = new ArrayList();
+        Iterator i = source.getList().iterator();
+        while (i.hasNext()) {
+            list.add(MetadataUtil.cloneValue((Value)i.next()));
+        }
+        valueType = source.getValueType();
+    }
+
+
+    /**
+     * The List (of Value objects) for this List-based value
+     */
+    public List getList() {
+        return list;
+    }
+
+    /**
+     * The value-type specified for the list elements, or null if none given
+     */
+	public String getValueType() {
+        return valueType;
+    }
+
+    public void setValueType(String type) {
+        valueType = type;
+    }
+}
+
+

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ListValueImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ListValueImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ListValueImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/LocalComponentMetadataImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/LocalComponentMetadataImpl.java?rev=763912&view=auto
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/LocalComponentMetadataImpl.java (added)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/LocalComponentMetadataImpl.java Fri Apr 10 11:33:27 2009
@@ -0,0 +1,258 @@
+/**
+ *  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.geronimo.osgi.reflect;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.osgi.service.blueprint.reflect.ConstructorInjectionMetadata;
+import org.osgi.service.blueprint.reflect.LocalComponentMetadata;
+import org.osgi.service.blueprint.reflect.MethodInjectionMetadata;
+import org.osgi.service.blueprint.reflect.ParameterSpecification;
+import org.osgi.service.blueprint.reflect.PropertyInjectionMetadata;
+import org.osgi.service.blueprint.reflect.Value;
+
+
+public class LocalComponentMetadataImpl extends ComponentMetadataImpl implements LocalComponentMetadata {
+    // the constructor metadata impl information.
+    private ConstructorInjectionMetadataImpl constructorInjection;
+    // the component class name
+    private String className;
+    private String initMethod;
+    private String destroyMethod;
+    private String scope;
+    private boolean lazy;
+    private Collection propertyInjection;
+    private Value factoryComponent;
+    private MethodInjectionMetadata factoryMethod;
+
+    public LocalComponentMetadataImpl() {
+        this((String)null);
+    }
+
+    public LocalComponentMetadataImpl(String name) {
+        super(name);
+        // create a new one of these, even if empty
+        propertyInjection = new ArrayList();
+        scope = SCOPE_SINGLETON;
+        // we always have something here
+        constructorInjection = new ConstructorInjectionMetadataImpl();
+    }
+
+
+    public LocalComponentMetadataImpl(LocalComponentMetadata source) {
+        super(source);
+        constructorInjection = new ConstructorInjectionMetadataImpl(source.getConstructorInjectionMetadata());
+        initMethod = source.getInitMethodName();
+        destroyMethod = source.getDestroyMethodName();
+        scope = source.getScope();
+        lazy = source.isLazy();
+        propertyInjection = new ArrayList();
+        // we need to deep copy this collection to replace with our own version
+        Iterator propertySource = source.getPropertyInjectionMetadata().iterator();
+        while (propertySource.hasNext()) {
+            propertyInjection.add(new PropertyInjectionMetadataImpl((PropertyInjectionMetadata)propertySource.next()));
+        }
+        factoryComponent = MetadataUtil.cloneValue(source.getFactoryComponent());
+    }
+
+
+    /**
+     * The constructor injection metadata for this component.
+     *
+     * @return the constructor injection metadata. This is guaranteed to be
+     * non-null and will refer to the default constructor if no explicit
+     * constructor injection was specified for the component.
+     */
+    public ConstructorInjectionMetadata getConstructorInjectionMetadata() {
+        return constructorInjection;
+    }
+
+
+    /**
+     * A couple of convenience methods to make components
+     * easier to construct.
+     *
+     * @param spec   The Parameter spect to add.
+     */
+    public void addConstructorArg(ParameterSpecification spec) {
+		constructorInjection.addParameterSpecification(spec);
+	}
+
+    /**
+     * convenience method for String-based values
+     *
+     * @param value  The string source value.
+     * @param index  The index position
+     */
+	public void addConstructorArg(String value, int index) {
+        ParameterSpecificationImpl spec = new ParameterSpecificationImpl();
+        spec.setIndex(index);
+        spec.setValue(new TypedStringValueImpl(value));
+	}
+
+
+    /**
+     * The name of the class type specified for this component.
+     *
+     * @return the name of the component class. If no class was specified
+     * in the component definition (because the a factory component is used
+     * instead) then this method will return null.
+     */
+    public String getClassName() {
+        return className;
+    }
+
+    public void setClassName(String name) {
+        this.className = name;
+    }
+
+    /**
+     * The name of the init method specified for this component, if any.
+     *
+     * @return the method name of the specified init method, or null if
+     * no init method was specified.
+     */
+    public String getInitMethodName() {
+        return initMethod;
+    }
+
+    public void setInitMethodName(String name) {
+        this.initMethod = name;
+    }
+
+
+    /**
+     * Is this component to be lazily instantiated?
+     *
+     * @return true, iff this component definition specifies lazy
+     * instantiation.
+     */
+    public boolean isLazy() {
+        return lazy;
+    }
+
+    public void setLazy(boolean lazy) {
+        this.lazy = lazy;
+    }
+
+
+    /**
+     * The name of the destroy method specified for this component, if any.
+     *
+     * @return the method name of the specified destroy method, or null if no
+     * destroy method was specified.
+     */
+    public String getDestroyMethodName() {
+        return destroyMethod;
+    }
+
+
+    public void setDestroyMethodName(String name) {
+        destroyMethod = name;
+    }
+
+    /**
+     * The component instance on which to invoke the factory method (if specified).
+     *
+     * @return when a factory method and factory component has been specified for this
+     * component, this operation returns the metadata specifying the component on which
+     * the factory method is to be invoked. When no factory component has been specified
+     * this operation will return null. A return value of null with a non-null factory method
+     * indicates that the factory method should be invoked as a static method on the
+     * component class itself.
+     */
+    public Value getFactoryComponent() {
+        return factoryComponent;
+    }
+
+    public void setFactoryComponent(Value m) {
+        factoryComponent = m;
+    }
+
+
+
+    /**
+     * The property injection metadata for this component.
+     *
+     * @return an immutable collection of PropertyInjectionMetadata, with one entry for each property to be injected. If
+     * no property injection was specified for this component then an empty collection
+     * will be returned.
+     *
+     */
+    public Collection getPropertyInjectionMetadata() {
+        return propertyInjection;
+    }
+
+    public void addProperty(PropertyInjectionMetadata m) {
+        propertyInjection.add(m);
+    }
+
+    public void replaceProperty(PropertyInjectionMetadata m) {
+        String name = m.getName();
+        // remove any matching item and replace with the new one
+        Iterator i = propertyInjection.iterator();
+        while (i.hasNext()) {
+            PropertyInjectionMetadata current = (PropertyInjectionMetadata)i.next();
+            if (current.getName().equals(name)) {
+                i.remove();
+                break;
+            }
+        }
+        propertyInjection.add(m);
+    }
+
+    public void addProperty(String name, Value value) {
+        addProperty(new PropertyInjectionMetadataImpl(name, value));
+    }
+
+    public void addProperty(String name, String value) {
+        addProperty(new PropertyInjectionMetadataImpl(name, new TypedStringValueImpl(value)));
+    }
+
+    /**
+     * The metadata describing how to create the component instance by invoking a
+     * method (as opposed to a constructor) if factory methods are used.
+     *
+     * @return the method injection metadata for the specified factory method, or null if no
+     * factory method is used for this component.
+     */
+    public MethodInjectionMetadata getFactoryMethodMetadata() {
+        return factoryMethod;
+    }
+
+    public void setFactoryMethodMetadata(MethodInjectionMetadata factoryMethod) {
+        this.factoryMethod = factoryMethod;
+    }
+
+
+    /**
+     * The specified scope for the component lifecycle.
+     *
+     * @return a String indicating the scope specified for the component.
+     *
+     * @see #SCOPE_SINGLETON
+     * @see #SCOPE_PROTOTYPE
+     * @see #SCOPE_BUNDLE
+     */
+    public String getScope() {
+        return scope;
+    }
+}
+

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/LocalComponentMetadataImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/LocalComponentMetadataImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/LocalComponentMetadataImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MapValueImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MapValueImpl.java?rev=763912&view=auto
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MapValueImpl.java (added)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MapValueImpl.java Fri Apr 10 11:33:27 2009
@@ -0,0 +1,78 @@
+/**
+ *  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.geronimo.osgi.reflect;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.osgi.service.blueprint.reflect.*;
+
+public class MapValueImpl implements MapValue {
+    private Map map;
+    private String valueType;
+    private String keyType;
+
+    public MapValueImpl(Map map) {
+        this.map = map;
+    }
+
+    public MapValueImpl(MapValue source) {
+        this.map = new HashMap();
+        // both the values and the keys are Value types, so we need to deep copy them
+        Iterator i = source.getMap().entrySet().iterator();
+        while (i.hasNext()) {
+            Entry entry = (Entry)i.next();
+            map.put(MetadataUtil.cloneValue((Value)entry.getKey()), MetadataUtil.cloneValue((Value)entry.getValue()));
+        }
+        valueType = source.getValueType();
+        keyType = source.getKeyType();
+    }
+
+
+    /**
+     * The Map of Value->Value mappings for this map-based value
+     */
+    public Map getMap() {
+        return map;
+    }
+
+    /**
+     * The value-type specified for the list elements, or null if none given
+     */
+	public String getValueType() {
+        return valueType;
+    }
+
+    public void setValueType(String type) {
+        valueType = type;
+    }
+
+	/**
+	 * The key-type specified for map keys, or null if none given
+	 */
+	public String getKeyType() {
+        return keyType;
+    }
+
+    public void setKeyType(String type) {
+        keyType = type;
+    }
+}
+

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MapValueImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MapValueImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MapValueImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MetadataUtil.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MetadataUtil.java?rev=763912&view=auto
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MetadataUtil.java (added)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MetadataUtil.java Fri Apr 10 11:33:27 2009
@@ -0,0 +1,114 @@
+/**
+ *  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.geronimo.osgi.reflect;
+
+import org.osgi.service.blueprint.reflect.ArrayValue;
+import org.osgi.service.blueprint.reflect.CollectionBasedServiceReferenceComponentMetadata;
+import org.osgi.service.blueprint.reflect.ComponentMetadata;
+import org.osgi.service.blueprint.reflect.ComponentValue;
+import org.osgi.service.blueprint.reflect.ListValue;
+import org.osgi.service.blueprint.reflect.LocalComponentMetadata;
+import org.osgi.service.blueprint.reflect.MapValue;
+import org.osgi.service.blueprint.reflect.NullValue;
+import org.osgi.service.blueprint.reflect.PropertiesValue;
+import org.osgi.service.blueprint.reflect.ReferenceNameValue;
+import org.osgi.service.blueprint.reflect.ReferenceValue;
+import org.osgi.service.blueprint.reflect.ServiceExportComponentMetadata;
+import org.osgi.service.blueprint.reflect.SetValue;
+import org.osgi.service.blueprint.reflect.TypedStringValue;
+import org.osgi.service.blueprint.reflect.UnaryServiceReferenceComponentMetadata;
+import org.osgi.service.blueprint.reflect.Value;
+
+
+/**
+ * A utility class that handles cloning various polymorphic
+ * bits of metadata into concrete class implementations.
+ */
+public class MetadataUtil {
+    static public Value cloneValue(Value source) {
+        if (source instanceof ArrayValue) {
+            return new ArrayValueImpl((ArrayValue)source);
+        }
+        else if (source instanceof ComponentValue) {
+            return new ComponentValueImpl((ComponentValue)source);
+        }
+        else if (source instanceof ListValue) {
+            return new ListValueImpl((ListValue)source);
+        }
+        else if (source instanceof SetValue) {
+            return new SetValueImpl((SetValue)source);
+        }
+        else if (source instanceof MapValue) {
+            return new MapValueImpl((MapValue)source);
+        }
+        else if (source instanceof NullValue) {
+            return new NullValueImpl();
+        }
+        else if (source instanceof PropertiesValue) {
+            return new PropertiesValueImpl((PropertiesValue)source);
+        }
+        else if (source instanceof PropertiesValue) {
+            return new PropertiesValueImpl((PropertiesValue)source);
+        }
+        else if (source instanceof ReferenceNameValue) {
+            return new ReferenceNameValueImpl((ReferenceNameValue)source);
+        }
+        else if (source instanceof ReferenceValue) {
+            return new ReferenceValueImpl((ReferenceValue)source);
+        }
+        else if (source instanceof TypedStringValue) {
+            return new TypedStringValueImpl((TypedStringValue)source);
+        }
+
+        throw new RuntimeException("Unknown Value type received: " + source.getClass().getName());
+    }
+
+
+    /**
+     * Clone a component metadata item, returning a mutable
+     * instance.
+     *
+     * @param source The source metadata item.
+     *
+     * @return A mutable instance of this metadata item.
+     */
+    static public ComponentMetadata cloneComponentMetadata(ComponentMetadata source) {
+        if (source instanceof LocalComponentMetadata) {
+            return new LocalComponentMetadataImpl((LocalComponentMetadata)source);
+        }
+        else if (source instanceof CollectionBasedServiceReferenceComponentMetadata) {
+            return new CollectionBasedServiceReferenceComponentMetadataImpl((CollectionBasedServiceReferenceComponentMetadata)source);
+        }
+        else if (source instanceof CollectionBasedServiceReferenceComponentMetadata) {
+            return new CollectionBasedServiceReferenceComponentMetadataImpl((CollectionBasedServiceReferenceComponentMetadata)source);
+        }
+        else if (source instanceof ServiceExportComponentMetadata) {
+            return new ServiceExportComponentMetadataImpl((ServiceExportComponentMetadata)source);
+        }
+        else if (source instanceof ServiceExportComponentMetadata) {
+            return new ServiceExportComponentMetadataImpl((ServiceExportComponentMetadata)source);
+        }
+        else if (source instanceof UnaryServiceReferenceComponentMetadata) {
+            return new UnaryServiceReferenceComponentMetadataImpl((UnaryServiceReferenceComponentMetadata)source);
+        }
+
+        throw new RuntimeException("Unknown ComponentMetadata type received: " + source.getClass().getName());
+    }
+
+}
+

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MetadataUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MetadataUtil.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MetadataUtil.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MethodInjectionMetadataImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MethodInjectionMetadataImpl.java?rev=763912&view=auto
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MethodInjectionMetadataImpl.java (added)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MethodInjectionMetadataImpl.java Fri Apr 10 11:33:27 2009
@@ -0,0 +1,75 @@
+/**
+ *  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.geronimo.osgi.reflect;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.osgi.service.blueprint.reflect.*;
+
+
+public class MethodInjectionMetadataImpl implements MethodInjectionMetadata {
+    private String name;
+    private List parameterSpecifications = new ArrayList();
+
+    public MethodInjectionMetadataImpl() {
+    }
+
+    public MethodInjectionMetadataImpl(MethodInjectionMetadata source) {
+        name = source.getName();
+        Iterator i = source.getParameterSpecifications().iterator();
+        while (i.hasNext()) {
+            parameterSpecifications.add(new ParameterSpecificationImpl((ParameterSpecification)i.next()));
+        }
+    }
+
+
+    /**
+     * The name of the method to be invoked.
+     *
+     * @return the method name, overloaded methods are disambiguated by
+     * parameter specifications.
+     */
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+
+    /**
+     * The parameter specifications that determine which method to invoke
+     * (in the case of overloading) and what arguments to pass to it.
+     *
+     * @return an immutable List of ParameterSpecification, or an empty list if the
+     * method takes no arguments. The list is ordered by ascending parameter index.
+     * I.e., the first parameter is first in the list, and so on.
+     */
+    public List getParameterSpecifications() {
+        return parameterSpecifications;
+    }
+
+    public void addParameterSpecification(ParameterSpecification p) {
+        parameterSpecifications.add(p);
+    }
+
+}
+

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MethodInjectionMetadataImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MethodInjectionMetadataImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/MethodInjectionMetadataImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/NullValueImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/NullValueImpl.java?rev=763912&view=auto
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/NullValueImpl.java (added)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/NullValueImpl.java Fri Apr 10 11:33:27 2009
@@ -0,0 +1,26 @@
+/**
+ *  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.geronimo.osgi.reflect;
+
+import org.osgi.service.blueprint.reflect.NullValue;
+
+
+public class NullValueImpl implements NullValue {
+    public NullValueImpl() {}
+}
+

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/NullValueImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/NullValueImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/NullValueImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ParameterSpecificationImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ParameterSpecificationImpl.java?rev=763912&view=auto
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ParameterSpecificationImpl.java (added)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ParameterSpecificationImpl.java Fri Apr 10 11:33:27 2009
@@ -0,0 +1,88 @@
+/**
+ *  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.geronimo.osgi.reflect;
+
+import org.osgi.service.blueprint.reflect.ParameterSpecification;
+import org.osgi.service.blueprint.reflect.Value;
+
+
+public class ParameterSpecificationImpl implements ParameterSpecification {
+    private Value value;
+    private String typeName;
+    private int index;
+
+    public ParameterSpecificationImpl() {
+    }
+
+    public ParameterSpecificationImpl(ParameterSpecification source) {
+        value = MetadataUtil.cloneValue(source.getValue());
+        typeName = source.getTypeName();
+        index = source.getIndex();
+    }
+
+
+    /**
+     * The value to inject into the parameter.
+     *
+     * @return the parameter value
+     */
+    public Value getValue() {
+        return value;
+    }
+
+    public void setValue(Value value) {
+        this.value = value;
+    }
+
+
+    /**
+     * The type to convert the value into when invoking the constructor or
+     * factory method. If no explicit type was specified on the component
+     * definition then this method returns null.
+     *
+     * @return the explicitly specified type to convert the value into, or
+     * null if no type was specified in the component definition.
+     */
+    public String getTypeName() {
+        return typeName;
+    }
+
+    public void setTypeName(String typeName) {
+        this.typeName = typeName;
+    }
+
+
+    /**
+     * The (zero-based) index into the parameter list of the method or
+     * constructor to be invoked for this parameter. This is determined
+     * either by explicitly specifying the index attribute in the component
+     * declaration, or by declaration order of constructor-arg elements if the
+     * index was not explicitly set.
+     *
+     * @return the zero-based parameter index
+     */
+    public int getIndex() {
+        return index;
+    }
+
+    public void setIndex(int index) {
+        this.index = index;
+    }
+
+}
+

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ParameterSpecificationImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ParameterSpecificationImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ParameterSpecificationImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/PropertiesValueImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/PropertiesValueImpl.java?rev=763912&view=auto
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/PropertiesValueImpl.java (added)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/PropertiesValueImpl.java Fri Apr 10 11:33:27 2009
@@ -0,0 +1,40 @@
+/**
+ *  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.geronimo.osgi.reflect;
+
+import java.util.Properties;
+
+import org.osgi.service.blueprint.reflect.PropertiesValue;
+
+
+public class PropertiesValueImpl implements PropertiesValue {
+    private Properties properties;
+
+    public PropertiesValueImpl(Properties properties) {
+        this.properties = properties;
+    }
+
+    public PropertiesValueImpl(PropertiesValue source) {
+        properties = new Properties(source.getPropertiesValue());
+    }
+
+    public Properties getPropertiesValue() {
+        return properties;
+    }
+}
+

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/PropertiesValueImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/PropertiesValueImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/PropertiesValueImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/PropertyInjectionMetadataImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/PropertyInjectionMetadataImpl.java?rev=763912&view=auto
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/PropertyInjectionMetadataImpl.java (added)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/PropertyInjectionMetadataImpl.java Fri Apr 10 11:33:27 2009
@@ -0,0 +1,68 @@
+/**
+ *  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.geronimo.osgi.reflect;
+
+import org.osgi.service.blueprint.reflect.PropertyInjectionMetadata;
+import org.osgi.service.blueprint.reflect.Value;
+
+
+public class PropertyInjectionMetadataImpl implements PropertyInjectionMetadata {
+    private String name;
+    private Value value;
+
+    public PropertyInjectionMetadataImpl() {
+    }
+
+    public PropertyInjectionMetadataImpl(String name, Value value) {
+        this.name = name;
+        this.value = value;
+    }
+
+    public PropertyInjectionMetadataImpl(PropertyInjectionMetadata source) {
+        name = source.getName();
+        value = MetadataUtil.cloneValue(source.getValue());
+    }
+
+    /**
+     * The name of the property to be injected, following JavaBeans conventions.
+     *
+     * @return the property name.
+     */
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * The value to inject the property with.
+     *
+     * @return the property value.
+     */
+    public Value getValue() {
+        return value;
+    }
+
+
+    public void setValue(Value value) {
+        this.value = value;
+    }
+}
+

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/PropertyInjectionMetadataImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/PropertyInjectionMetadataImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/PropertyInjectionMetadataImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ReferenceNameValueImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ReferenceNameValueImpl.java?rev=763912&view=auto
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ReferenceNameValueImpl.java (added)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ReferenceNameValueImpl.java Fri Apr 10 11:33:27 2009
@@ -0,0 +1,38 @@
+/**
+ *  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.geronimo.osgi.reflect;
+
+import org.osgi.service.blueprint.reflect.ReferenceNameValue;
+
+
+public class ReferenceNameValueImpl implements ReferenceNameValue {
+    private String referenceName;
+
+    public ReferenceNameValueImpl(String name) {
+        referenceName = name;
+    }
+
+    public ReferenceNameValueImpl(ReferenceNameValue source) {
+        referenceName = source.getReferenceName();
+    }
+
+    public String getReferenceName() {
+        return referenceName;
+    }
+}
+

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ReferenceNameValueImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ReferenceNameValueImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ReferenceNameValueImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ReferenceValueImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ReferenceValueImpl.java?rev=763912&view=auto
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ReferenceValueImpl.java (added)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ReferenceValueImpl.java Fri Apr 10 11:33:27 2009
@@ -0,0 +1,41 @@
+/**
+ *  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.geronimo.osgi.reflect;
+
+import org.osgi.service.blueprint.reflect.ReferenceValue;
+
+public class ReferenceValueImpl implements ReferenceValue {
+    private String componentName;
+
+    public ReferenceValueImpl(String name) {
+        componentName = name;
+    }
+
+    public ReferenceValueImpl(ReferenceValue source) {
+        componentName = source.getComponentName();
+    }
+
+
+    /**
+     * The name of the referenced component.
+     */
+    public String getComponentName() {
+        return componentName;
+    }
+}
+

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ReferenceValueImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ReferenceValueImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ReferenceValueImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/RegistrationListenerMetadataImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/RegistrationListenerMetadataImpl.java?rev=763912&view=auto
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/RegistrationListenerMetadataImpl.java (added)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/RegistrationListenerMetadataImpl.java Fri Apr 10 11:33:27 2009
@@ -0,0 +1,83 @@
+/**
+ *  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.geronimo.osgi.reflect;
+
+import org.osgi.service.blueprint.reflect.RegistrationListenerMetadata;
+import org.osgi.service.blueprint.reflect.Value;
+
+public class RegistrationListenerMetadataImpl implements RegistrationListenerMetadata {
+    private Value listenerComponent;
+    private String registrationMethodName;
+    private String unregistrationMethodName;
+
+    public RegistrationListenerMetadataImpl() {
+    }
+
+    public RegistrationListenerMetadataImpl(RegistrationListenerMetadata source) {
+        listenerComponent = MetadataUtil.cloneValue(source.getListenerComponent());
+        registrationMethodName = source.getRegistrationMethodName();
+        unregistrationMethodName = source.getUnregistrationMethodName();
+    }
+
+
+    /**
+     * The component instance that will receive registration and unregistration
+     * events. The returned value must reference a component and therefore be
+     * either a ComponentValue, ReferenceValue, or ReferenceNameValue.
+     *
+     * @return the listener component reference.
+     */
+    public Value getListenerComponent() {
+        return listenerComponent;
+    }
+
+    public void setListenerComponent(Value v) {
+        listenerComponent = v;
+    }
+
+
+    /**
+     * The name of the method to invoke on the listener component when
+     * the exported service is registered with the service registry.
+     *
+     * @return the registration callback method name.
+     */
+    public String getRegistrationMethodName() {
+        return registrationMethodName;
+    }
+
+    public void setRegistrationMethodName(String name) {
+        registrationMethodName = name;
+    }
+
+
+    /**
+     * The name of the method to invoke on the listener component when
+     * the exported service is unregistered from the service registry.
+     *
+     * @return the unregistration callback method name.
+     */
+    public String getUnregistrationMethodName() {
+        return unregistrationMethodName;
+    }
+
+    public void setUnregistrationMethodName(String name) {
+        unregistrationMethodName = name;
+    }
+}
+

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/RegistrationListenerMetadataImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/RegistrationListenerMetadataImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/RegistrationListenerMetadataImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ServiceExportComponentMetadataImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ServiceExportComponentMetadataImpl.java?rev=763912&view=auto
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ServiceExportComponentMetadataImpl.java (added)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ServiceExportComponentMetadataImpl.java Fri Apr 10 11:33:27 2009
@@ -0,0 +1,155 @@
+/**
+ *  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.geronimo.osgi.reflect;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import org.osgi.service.blueprint.reflect.RegistrationListenerMetadata;
+import org.osgi.service.blueprint.reflect.ServiceExportComponentMetadata;
+import org.osgi.service.blueprint.reflect.Value;
+
+
+public class ServiceExportComponentMetadataImpl extends ComponentMetadataImpl implements ServiceExportComponentMetadata {
+    private Map serviceProperties;
+    private Value exportedComponent;
+    private int ranking = 0;
+    private Set interfaceNames;
+    private Collection registrationListeners;
+    private int exportMode = EXPORT_MODE_DISABLED;
+
+
+    public ServiceExportComponentMetadataImpl() {
+        this((String)null);
+    }
+
+    public ServiceExportComponentMetadataImpl(String name) {
+        super(name);
+        // create a new one of these, even if empty
+        serviceProperties = new HashMap();
+        interfaceNames = new HashSet();
+        registrationListeners = new ArrayList();
+    }
+
+
+    public ServiceExportComponentMetadataImpl(ServiceExportComponentMetadata source) {
+        super(source);
+        serviceProperties = new HashMap(source.getServiceProperties());
+        exportedComponent = MetadataUtil.cloneValue(exportedComponent);
+        ranking = source.getRanking();
+        interfaceNames = new HashSet(source.getInterfaceNames());
+        Iterator i = source.getRegistrationListeners().iterator();
+        registrationListeners = new ArrayList();
+        while (i.hasNext()) {
+            registrationListeners.add(new RegistrationListenerMetadataImpl((RegistrationListenerMetadata)i.next()));
+        }
+        exportMode = source.getAutoExportMode();
+    }
+
+
+
+    /**
+     * The user declared properties to be advertised with the service.
+     *
+     * @return Map containing the set of user declared service properties (may be
+     * empty if no properties were specified).
+     */
+    public Map getServiceProperties() {
+        return serviceProperties;
+    }
+
+    public void setServiceProperties(Map p) {
+        serviceProperties = p;
+    }
+
+    /**
+     * The component that is to be exported as a service. Value must refer to a component and
+     * therefore be either a ComponentValue or ReferenceValue.
+     *
+     * @return the component to be exported as a service.
+     */
+    public Value getExportedComponent() {
+        return exportedComponent;
+    }
+
+    public void setExportedComponent(Value v) {
+        exportedComponent = v;
+    }
+
+    /**
+     * The ranking value to use when advertising the service
+     *
+     * @return service ranking
+     */
+    public int getRanking() {
+        return ranking;
+    }
+
+    public void setRanking(int ranking) {
+        this.ranking = ranking;
+    }
+
+    /**
+     * The type names of the set of interface types that the service should be advertised
+     * as supporting.
+     *
+     * @return an immutable set of (String) type names, or an empty set if using auto-export
+     */
+    public Set getInterfaceNames() {
+        return interfaceNames;
+    }
+
+    public void addInterfaceName(String name) {
+        interfaceNames.add(name);
+    }
+
+
+    /**
+     * The listeners that have registered to be notified when the exported service
+     * is registered and unregistered with the framework.
+     *
+     * @return an immutable collection of RegistrationListenerMetadata
+     */
+    public Collection getRegistrationListeners() {
+        return registrationListeners;
+    }
+
+    public void addRegistrationListener(RegistrationListenerMetadata l) {
+        registrationListeners.add(l);
+    }
+
+    /**
+     * Return the auto-export mode specified.
+     *
+     * @return One of EXPORT_MODE_DISABLED, EXPORT_MODE_INTERFACES, EXPORT_MODE_CLASS_HIERARCHY, EXPORT_MODE_ALL
+     */
+    public int getAutoExportMode() {
+        return exportMode;
+    }
+
+
+    public void setAutoExportMode(int mode) {
+        exportMode = mode;
+    }
+}
+

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ServiceExportComponentMetadataImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ServiceExportComponentMetadataImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ServiceExportComponentMetadataImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ServiceReferenceComponentMetadataImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ServiceReferenceComponentMetadataImpl.java?rev=763912&view=auto
==============================================================================
--- geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ServiceReferenceComponentMetadataImpl.java (added)
+++ geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ServiceReferenceComponentMetadataImpl.java Fri Apr 10 11:33:27 2009
@@ -0,0 +1,130 @@
+/**
+ *  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.geronimo.osgi.reflect;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.osgi.service.blueprint.reflect.BindingListenerMetadata;
+import org.osgi.service.blueprint.reflect.ServiceReferenceComponentMetadata;
+
+public class ServiceReferenceComponentMetadataImpl extends ComponentMetadataImpl implements ServiceReferenceComponentMetadata {
+    private Collection bindingListeners = new ArrayList();
+    private int serviceAvailability = MANDATORY_AVAILABILITY;
+    private Set interfaceNames = new HashSet();
+    private String filter;
+    private String componentName;
+
+
+    public ServiceReferenceComponentMetadataImpl() {
+        this((String)null);
+    }
+
+    public ServiceReferenceComponentMetadataImpl(String name) {
+        super(name);
+    }
+
+
+    public ServiceReferenceComponentMetadataImpl(ServiceReferenceComponentMetadata source) {
+        super(source);
+
+        Iterator i = source.getBindingListeners().iterator();
+        while (i.hasNext()) {
+            bindingListeners.add(new BindingListenerMetadataImpl((BindingListenerMetadata)i.next()));
+        }
+
+        interfaceNames.addAll(source.getInterfaceNames());
+        serviceAvailability = source.getServiceAvailabilitySpecification();
+        filter = source.getFilter();
+        componentName = source.getComponentName();
+    }
+
+
+    /**
+     * The set of listeners registered to receive bind and unbind events for
+     * backing services.
+     *
+     * @return an immutable collection of registered BindingListenerMetadata
+     */
+    public Collection getBindingListeners() {
+        return bindingListeners;
+    }
+
+    public void addBindingListener(BindingListenerMetadata listener) {
+        bindingListeners.add(listener);
+    }
+
+
+    /**
+     * Whether or not a matching service is required at all times.
+     *
+     * @return one of MANDATORY_AVAILABILITY or OPTIONAL_AVAILABILITY
+     */
+    public int getServiceAvailabilitySpecification() {
+        return serviceAvailability;
+    }
+
+    public void setServiceAvailabilitySpecification(int s) {
+        serviceAvailability = s;
+    }
+
+    /**
+     * The interface types that the matching service must support
+     *
+     * @return an immutable set of type names
+     */
+    public Set getInterfaceNames() {
+        return interfaceNames;
+    }
+
+    public void addInterfaceName(String name) {
+        interfaceNames.add(name);
+    }
+
+
+    /**
+     * The filter expression that a matching service must pass
+     *
+     * @return filter expression
+     */
+    public String getFilter() {
+        return filter;
+    }
+
+    public void setFilter(String filter) {
+        this.filter = filter;
+    }
+
+	/**
+	 * The value of the component name attribute, if specified.
+	 *
+	 * @return the component name attribute value, or null if the attribute was not specified
+	 */
+	public String getComponentName() {
+        return componentName;
+    }
+
+    public void setComponentName(String name) {
+        componentName = name;
+    }
+
+}
+

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ServiceReferenceComponentMetadataImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ServiceReferenceComponentMetadataImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/gawor/rfc124/extender/src/main/java/org/apache/geronimo/osgi/reflect/ServiceReferenceComponentMetadataImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain