Author: dblevins
Date: Sat May 31 19:49:59 2008
New Revision: 662130

URL: http://svn.apache.org/viewvc?rev=662130&view=rev
Log:
OPENEJB-814: CMP2 <cmp-field> declarations are optional

Added:
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java
Modified:
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
    
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/CmpField.java
    
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EntityBean.java

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java?rev=662130&r1=662129&r2=662130&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
 Sat May 31 19:49:59 2008
@@ -185,6 +185,7 @@
         if (appModule.getCmpMappings() != null) {
             try {
                 String cmpMappingsXml = 
JpaJaxbUtil.marshal(EntityMappings.class, appModule.getCmpMappings());
+                System.out.println(cmpMappingsXml);
                 appInfo.cmpMappingsXml = cmpMappingsXml;
             } catch (JAXBException e) {
                 throw new OpenEJBException("Unable to marshal cmp entity 
mappings", e);

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java?rev=662130&r1=662129&r2=662130&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
 Sat May 31 19:49:59 2008
@@ -17,6 +17,7 @@
 package org.apache.openejb.config;
 
 import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.util.Strings;
 import org.apache.openejb.core.cmp.jpa.JpaCmpEngine;
 import org.apache.openejb.core.cmp.CmpUtil;
 import org.apache.openejb.jee.CmpField;
@@ -69,6 +70,7 @@
 import java.util.Arrays;
 import java.util.TreeMap;
 import java.lang.reflect.Modifier;
+import java.lang.reflect.Method;
 
 public class CmpJpaConversion implements DynamicDeployer {
     private static final String CMP_PERSISTENCE_UNIT_NAME = "cmp";
@@ -185,7 +187,7 @@
         for (Entity entity : entityMappings.getEntity()) {
             entitiesByName.put(entity.getName(), entity);
         }
-        
+
         for (org.apache.openejb.jee.EnterpriseBean enterpriseBean : 
ejbJar.getEnterpriseBeans()) {
             // skip all non-CMP beans
             if (!(enterpriseBean instanceof EntityBean) || ((EntityBean) 
enterpriseBean).getPersistenceType() != PersistenceType.CONTAINER) {
@@ -459,6 +461,33 @@
             allFields.add(cmpField.getFieldName());
         }
 
+        // Add the cmp-field declarations for all the cmp fields that
+        // weren't explicitly declared in the ejb-jar.xml
+        try {
+            Class<?> beanClass = classLoader.loadClass(bean.getEjbClass());
+            for (Method method : beanClass.getMethods()) {
+                if (!Modifier.isAbstract(method.getModifiers())) continue;
+                if (method.getParameterTypes().length != 0) continue;
+                if (method.getReturnType().equals(Void.TYPE)) continue;
+
+                String name = method.getName();
+
+                if (name.startsWith("get")){
+                    name = name.substring("get".length(), name.length());
+                } else if (name.startsWith("is")){
+                    name = name.substring("is".length(), name.length());
+                } else continue;
+
+                name = Strings.lcfirst(name);
+                if (!allFields.contains(name)){
+                    allFields.add(name);
+                    bean.addCmpField(name);
+                }
+            }
+        } catch (ClassNotFoundException e) {
+            // class was already loaded in validation phase
+        }
+
         //
         // id: the primary key
         //

Added: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java?rev=662130&view=auto
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java
 (added)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java
 Sat May 31 19:49:59 2008
@@ -0,0 +1,73 @@
+/**
+ * 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.openejb.util;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class Strings {
+
+
+    public static String lc(String string){
+        return lowercase(string);
+    }
+
+    public static String lowercase(String string) {
+        if (string == null) return null;
+
+        StringBuilder sb = new StringBuilder(string);
+        for (int i = 0; i < sb.length(); i++) {
+              sb.setCharAt(i, Character.toLowerCase(sb.charAt(i)));
+        }
+        return sb.toString();
+    }
+
+    public static String uc(String string){
+        return uppercase(string);
+    }
+
+    public static String uppercase(String string) {
+        if (string == null) return null;
+
+        StringBuilder sb = new StringBuilder(string);
+        for (int i = 0; i < sb.length(); i++) {
+              sb.setCharAt(i, Character.toUpperCase(sb.charAt(i)));
+        }
+        return sb.toString();
+    }
+
+    public static String ucfirst(String string){
+        if (string == null) return null;
+
+        StringBuilder sb = new StringBuilder(string);
+        if (sb.length() > 0){
+            sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
+        }
+        return sb.toString();
+    }
+
+    public static String lcfirst(String string){
+        if (string == null) return null;
+
+        StringBuilder sb = new StringBuilder(string);
+        if (sb.length() > 0){
+            sb.setCharAt(0, Character.toLowerCase(sb.charAt(0)));
+        }
+        return sb.toString();
+    }
+
+}

Modified: 
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/CmpField.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/CmpField.java?rev=662130&r1=662129&r2=662130&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/CmpField.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/CmpField.java
 Sat May 31 19:49:59 2008
@@ -51,6 +51,13 @@
     @XmlID
     protected String id;
 
+    public CmpField() {
+    }
+
+    public CmpField(String fieldName) {
+        this.fieldName = fieldName;
+    }
+
     public List<Text> getDescription() {
         if (description == null) {
             description = new ArrayList<Text>();

Modified: 
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EntityBean.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EntityBean.java?rev=662130&r1=662129&r2=662130&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EntityBean.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EntityBean.java
 Sat May 31 19:49:59 2008
@@ -406,6 +406,16 @@
         return this.cmpField;
     }
 
+    public void addCmpField(String fieldName) {
+        if (fieldName == null) return;
+
+        for (CmpField field : cmpField) {
+            if (fieldName.equals(field.getFieldName())) return;
+        }
+        
+        cmpField.add(new CmpField(fieldName));
+    }
+
     public String getPrimkeyField() {
         return primkeyField;
     }


Reply via email to