FELIX-4378 : generate a metatype properties file if label/description are missing on @Component or @Property

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1559099 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java
index 29ce548..b1fb78b 100644
--- a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java
+++ b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java
@@ -224,7 +224,7 @@
         }
 
         // and generate files
-        result.setMetatypeFiles(MetaTypeIO.generateDescriptors(module, this.options, this.logger));
+        result.setMetatypeFiles(MetaTypeIO.generateDescriptors(module, this.project, this.options, this.logger));
         result.setScrFiles(ComponentDescriptorIO.generateDescriptorFiles(module, this.options, logger));
 
         return result;
@@ -310,13 +310,9 @@
             ocd.setId( componentDesc.getName() );
             if ( componentDesc.getLabel() != null ) {
                 ocd.setName( componentDesc.getLabel() );
-            } else {
-                ocd.setName( "%" + componentDesc.getName() + ".name");
             }
             if ( componentDesc.getDescription() != null ) {
                 ocd.setDescription( componentDesc.getDescription() );
-            } else {
-                ocd.setDescription( "%" + componentDesc.getName() + ".description");
             }
 
             // Factory pid
@@ -525,13 +521,9 @@
 
                         if (pd.getLabel() != null ) {
                             ad.setName(pd.getLabel());
-                        } else {
-                            ad.setName("%" + pd.getName() + ".name");
                         }
                         if (pd.getDescription() != null ) {
                             ad.setDescription(pd.getDescription());
-                        } else {
-                            ad.setDescription("%" + pd.getName() + ".description");
                         }
 
                         if ( pd.getUnbounded() == PropertyUnbounded.DEFAULT ) {
diff --git a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/MetaTypeIO.java b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/MetaTypeIO.java
index e9c9ca9..49b55e8 100644
--- a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/MetaTypeIO.java
+++ b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/MetaTypeIO.java
@@ -31,6 +31,7 @@
 
 import org.apache.felix.scrplugin.Log;
 import org.apache.felix.scrplugin.Options;
+import org.apache.felix.scrplugin.Project;
 import org.apache.felix.scrplugin.SCRDescriptorException;
 import org.apache.felix.scrplugin.helper.ComponentContainer;
 import org.apache.felix.scrplugin.helper.ComponentContainerUtil;
@@ -78,6 +79,7 @@
     private static final String OPTION_ELEMENT_QNAME = OPTION_ELEMENT;
 
     public static List<String> generateDescriptors(final DescriptionContainer module,
+            final Project project,
             final Options options,
             final Log logger)
     throws SCRDescriptorException {
@@ -93,6 +95,9 @@
         final File parentDir = mtDir.getParentFile();
 
         if (components.size() > 0) {
+            // check for metatype.properties
+            final File mtProps = new File(project.getClassesDirectory(), "OSGI-INF" + File.separator + "metatype" + File.separator + "metatype.properties");
+            final boolean oldStyle = mtProps.exists();
             mtDir.mkdirs();
 
             final List<String> fileNames = new ArrayList<String>();
@@ -107,16 +112,44 @@
                 for(final ComponentContainer cc : ccc.components) {
                     final MetatypeContainer mc = cc.getMetatypeContainer();
 
+                    if ( mc.getName() == null ) {
+                        if ( oldStyle ) {
+                            mc.setName( "%" + cc.getComponentDescription().getName() + ".name");
+                        } else {
+                            mc.setName("Component " + cc.getComponentDescription().getName());
+                        }
+                    }
                     if ( mc.getName() != null && mc.getName().startsWith("%") ) {
                         allInlined = false;
                     }
+                    if ( mc.getDescription() == null ) {
+                        if ( oldStyle ) {
+                            mc.setDescription("%" + cc.getComponentDescription().getName() + ".description");
+                        } else {
+                            mc.setDescription("Description for " + cc.getComponentDescription().getName());
+                        }
+                    }
                     if ( mc.getDescription() != null && mc.getDescription().startsWith("%") ) {
                         allInlined = false;
                     }
                     for(final MetatypeAttributeDefinition mad : mc.getProperties()) {
+                        if ( mad.getName() == null ) {
+                            if ( oldStyle ) {
+                                mad.setName("%" + mad.getId() + ".name");
+                            } else {
+                                mad.setName("Property " + mad.getId());
+                            }
+                        }
                         if ( mad.getName() != null && mad.getName().startsWith("%") ) {
                             allInlined = false;
                         }
+                        if ( mad.getDescription() == null ) {
+                            if ( oldStyle ) {
+                                mad.setDescription("%" + mad.getId() + ".description");
+                            } else {
+                                mad.setDescription("Description for " + mad.getId());
+                            }
+                        }
                         if ( mad.getDescription() != null && mad.getDescription().startsWith("%") ) {
                             allInlined = false;
                         }