Fix issue Felix-936.
Now, abstract and concrete classes can also be exposed as services is they are specified in the 'specifications' attribute.

Update package version to 1.3.0

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@743789 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/ipojo/core/pom.xml b/ipojo/core/pom.xml
index 1c0b460..8f9de84 100644
--- a/ipojo/core/pom.xml
+++ b/ipojo/core/pom.xml
@@ -31,7 +31,7 @@
 	<version>1.3.0-SNAPSHOT</version>
 	
 	<properties>
-		<ipojo.package.version>1.2.0</ipojo.package.version>
+		<ipojo.package.version>1.3.0</ipojo.package.version>
 	</properties>
 	
 	<dependencies>
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
index 4030075..91578fc 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
@@ -463,7 +463,7 @@
          * Creates a PrimitiveTypeDescription object.
          * @param factory the factory attached to this component type description.
          */
-        public PrimitiveTypeDescription(Factory factory) {
+        public PrimitiveTypeDescription(IPojoFactory factory) {
             super(factory);
         }
 
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/HandlerManagerFactory.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/HandlerManagerFactory.java
index 153ad66..6da7ce2 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/HandlerManagerFactory.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/HandlerManagerFactory.java
@@ -182,7 +182,7 @@
          * @param factory the factory.

          * @see ComponentTypeDescription#ComponentTypeDescription(Factory)

          */

-        public HandlerTypeDescription(Factory factory) {

+        public HandlerTypeDescription(IPojoFactory factory) {

             super(factory);

         }

 

diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/architecture/ComponentTypeDescription.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/architecture/ComponentTypeDescription.java
index 0813853..cb26e98 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/architecture/ComponentTypeDescription.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/architecture/ComponentTypeDescription.java
@@ -23,6 +23,7 @@
 
 import org.apache.felix.ipojo.ComponentFactory;
 import org.apache.felix.ipojo.Factory;
+import org.apache.felix.ipojo.IPojoFactory;
 import org.apache.felix.ipojo.metadata.Attribute;
 import org.apache.felix.ipojo.metadata.Element;
 import org.osgi.framework.BundleContext;
@@ -48,15 +49,23 @@
     /**
      * Represented factory.
      */
-    private final Factory m_factory;
+    private final IPojoFactory m_factory;
     
     /**
      * Constructor.
      * @param factory : represented factory.
      */
-    public ComponentTypeDescription(Factory factory) {
+    public ComponentTypeDescription(IPojoFactory factory) {
         m_factory = factory;
     }
+    
+    /**
+     * Gets the attached factory.
+     * @return the factory
+     */
+    public IPojoFactory getFactory() {
+        return m_factory;
+    }
 
     /**
      * Gets a printable form of the current component type description.
@@ -109,10 +118,7 @@
      * @param pd : the property to add
      */
     public void addProperty(PropertyDescription pd) { //NOPMD remove the instance name of the 'name' property.
-        String name = pd.getName();
-//        if ("name".equals(name)) {
-//            pd = new PropertyDescription(name, pd.getType(), null); //NOPMD Instance name case.
-//        } 
+        String name = pd.getName(); 
         
         // Check if the property is not already in the array
         for (int i = 0; i < m_properties.length; i++) {
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
index db8bbe5..5730806 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
@@ -41,6 +41,7 @@
 import org.apache.felix.ipojo.parser.ParseException;
 import org.apache.felix.ipojo.parser.ParseUtils;
 import org.apache.felix.ipojo.parser.PojoMetadata;
+import org.apache.felix.ipojo.util.Logger;
 import org.apache.felix.ipojo.util.Property;
 import org.osgi.framework.Bundle;
 
@@ -511,7 +512,7 @@
         PojoMetadata manipulation = getFactory().getPojoMetadata();
 
         for (int i = 0; i < provides.length; i++) {
-         // First : create the serviceSpecification list
+            // First : create the serviceSpecification list
             String[] serviceSpecification = manipulation.getInterfaces();
             String parent = manipulation.getSuperClass();
             Set all = null;
@@ -532,8 +533,9 @@
             if (serviceSpecificationStr != null) {
                 List itfs = ParseUtils.parseArraysAsList(serviceSpecificationStr);
                 for (int j = 0; j < itfs.size(); j++) {
-                    if (! all.contains(itfs.get(j))) {
-                        throw new ConfigurationException("The specification " + itfs.get(j) + " is not implemented by " + metadata.getAttribute("classname"));
+                    if (! all.contains(itfs.get(j)) && ! parent.equals((String) itfs.get(i))) {
+                        desc.getFactory().getLogger().log(Logger.WARNING, "The specification " + itfs.get(j) + " is not implemented by " + metadata.getAttribute("classname") + 
+                                " it might be a superclass.");
                     }
                 }
                 all = new HashSet(itfs);