[jboss-svn-commits] JBL Code SVN: r8385 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/client/rpc main/java/org/drools/brms/client/rpc/mock main/java/org/drools/brms/client/ruleeditor main/java/org/drools/brms/server main/java/org/drools/brms/server/util test/java/org/drools/brms test/java/org/drools/brms/server test/java/org/drools/brms/server/util

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Dec 18 12:16:01 EST 2006


Author: michael.neale at jboss.com
Date: 2006-12-18 12:15:47 -0500 (Mon, 18 Dec 2006)
New Revision: 8385

Added:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/MetaDataMapper.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/MetaDataMapperTest.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/TestBean.java
Removed:
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/AppTest.java
Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/MetaData.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RuleAsset.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/mock/MockRepositoryServiceAsync.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/MetaDataWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java
Log:
updated for automatic meta data mapping, improved tests

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/MetaData.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/MetaData.java	2006-12-18 17:05:19 UTC (rev 8384)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/MetaData.java	2006-12-18 17:15:47 UTC (rev 8385)
@@ -1,5 +1,7 @@
 package org.drools.brms.client.rpc;
 
+import java.util.Date;
+
 import com.google.gwt.user.client.rpc.IsSerializable;
 
 /**
@@ -16,11 +18,11 @@
     public String title = "";
     public String state = "";
 
-    public String lastModifiedDate = "";
+    public Date lastModifiedDate;
     public String lastContributor = "";
     public String versionNumber;
     public String   lastCheckinComment = "";
-    public String createdDate = "";
+    public Date createdDate;
     
     public String packageName = "";
     public String[] categories = new String[0];
@@ -35,6 +37,9 @@
     public String coverage = "";
     public String publisher = "";   
     
+    public Date dateEffective;
+    public Date dateExpired;
+    
     /** used to flag dirty - ie needs to be spanked. Or saved to the repo, whatever */
     public boolean dirty = false;
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RuleAsset.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RuleAsset.java	2006-12-18 17:05:19 UTC (rev 8384)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RuleAsset.java	2006-12-18 17:15:47 UTC (rev 8385)
@@ -14,8 +14,7 @@
     
     public MetaData metaData;
     public IsSerializable content;
-    public String dateEffective;
-    public String dateExpired;
+
     public String uuid;
 
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/mock/MockRepositoryServiceAsync.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/mock/MockRepositoryServiceAsync.java	2006-12-18 17:05:19 UTC (rev 8384)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/mock/MockRepositoryServiceAsync.java	2006-12-18 17:15:47 UTC (rev 8385)
@@ -1,5 +1,7 @@
 package org.drools.brms.client.rpc.mock;
 
+import java.util.Date;
+
 import org.drools.brms.client.rpc.MetaData;
 import org.drools.brms.client.rpc.RepositoryServiceAsync;
 import org.drools.brms.client.rpc.RuleAsset;
@@ -140,6 +142,7 @@
         meta.categories = new String[] {"Approval", "Age related"};
         meta.name = "age rejection 1";
         meta.versionNumber = "2";
+        meta.createdDate = new Date();
         if (uuid.endsWith( "1" )) {
             meta.format = "DRL";
             TextData text = new TextData();
@@ -151,6 +154,7 @@
         }
         
         asset.metaData = meta;
+        
         final AsyncCallback finalCb = cb;
         Timer t = new Timer() {
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/MetaDataWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/MetaDataWidget.java	2006-12-18 17:05:19 UTC (rev 8384)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/MetaDataWidget.java	2006-12-18 17:15:47 UTC (rev 8385)
@@ -1,5 +1,7 @@
 package org.drools.brms.client.ruleeditor;
 
+import java.util.Date;
+
 import org.drools.brms.client.common.FormStyleLayout;
 import org.drools.brms.client.rpc.MetaData;
 
@@ -40,11 +42,11 @@
             }            
         }, "A short description of the subject matter."));            
         
-        addAttribute("Last modified on:", readOnlyText(data.lastModifiedDate));
+        addAttribute("Last modified on:", readOnlyDate(data.lastModifiedDate));
         addAttribute("Last modified by:", readOnlyText(data.lastContributor));
         addAttribute("Checkin note:", readOnlyText( data.lastCheckinComment ));
         addAttribute("Created by:", readOnlyText(data.creator));
-        addAttribute("Created on:", readOnlyText( data.createdDate ));
+        addAttribute("Created on:", readOnlyDate( data.createdDate ));
         addAttribute("Version number:", readOnlyText("" + data.versionNumber));
         addAttribute("Package:", readOnlyText(data.packageName));
         
@@ -85,11 +87,22 @@
 
 
 
+    private Widget readOnlyDate(Date lastModifiedDate) {
+        if (lastModifiedDate == null) {
+            return null;
+        } else {
+            return new Label(lastModifiedDate.toLocaleString());
+        }
+    }
+
+
     private Label readOnlyText(String text) {
         Label lbl = new Label(text);
         lbl.setWidth( "100%" );
         return lbl;
     }
+    
+    
 
 
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java	2006-12-18 17:05:19 UTC (rev 8384)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java	2006-12-18 17:15:47 UTC (rev 8385)
@@ -3,6 +3,7 @@
 import java.text.DateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 
@@ -18,6 +19,7 @@
 import org.drools.brms.client.rpc.RuleContentText;
 import org.drools.brms.client.rpc.TableConfig;
 import org.drools.brms.client.rpc.TableDataResult;
+import org.drools.brms.server.util.MetaDataMapper;
 import org.drools.repository.AssetItem;
 import org.drools.repository.CategorisableItem;
 import org.drools.repository.CategoryItem;
@@ -47,6 +49,8 @@
      */
     public static Repository repository;
 
+    private MetaDataMapper metaDataMapper;
+
     
     public String[] loadChildCategories(String categoryPath) {
 
@@ -203,10 +207,6 @@
         
         asset.metaData = popuplateMetaData( item );
         
-        
-        asset.dateEffective = formatDate( item.getDateEffective() );
-        asset.dateExpired = formatDate( item.getDateExpired() );
-        
         //TODO: this could be refactored to there are different loadXXX methods, or 
         //use polymorphism or something, in any case avoiding this dirty if statement...
         //as we know at the "client" what we should be loaded from the format string.
@@ -244,10 +244,9 @@
      * @param item
      * @return
      */
-    MetaData popuplateMetaData(CategorisableItem item) {
+    MetaData popuplateMetaData(AssetItem item) {
         MetaData meta = new MetaData();
-        meta.name = item.getName();
-        meta.title = item.getTitle();
+
         
         List cats = item.getCategories();
         meta.categories = new String[cats.size()];
@@ -257,24 +256,31 @@
         }
         
         meta.state = (item.getState() != null) ? item.getState().getName() : "";
+
+        getMetaDataMapper().copyToMetaData( meta, item );
         
-        meta.coverage = item.getCoverage();
-        meta.creator = item.getCreator();
-        meta.description = item.getDescription();
-        meta.externalRelation = item.getExternalRelation();
-        meta.externalSource = item.getExternalSource();
-        meta.format = item.getFormat();
-        meta.lastCheckinComment = item.getCheckinComment();
-        meta.lastContributor = item.getLastContributor();
-        meta.lastModifiedDate = formatDate(item.getLastModified());
-        meta.createdDate = formatDate( item.getCreatedDate() );
-        meta.versionNumber = item.getVersionNumber();
+        meta.createdDate = calendarToDate(item.getCreatedDate());
+        meta.dateEffective = calendarToDate( item.getDateEffective() );
+        meta.dateExpired = calendarToDate( item.getDateExpired() );
         
+
         
         
         return meta;
     }
 
+    private Date calendarToDate(Calendar createdDate) {
+        if (createdDate == null) return null;
+        return createdDate.getTime();
+    }
+
+    private MetaDataMapper getMetaDataMapper() {
+        if (this.metaDataMapper == null) {
+            this.metaDataMapper = new MetaDataMapper();
+        }
+        return this.metaDataMapper;
+    }
+
     public void checkinVersion(RuleAsset asset) throws SerializableException {
         
         

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/MetaDataMapper.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/MetaDataMapper.java	2006-12-18 17:05:19 UTC (rev 8384)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/MetaDataMapper.java	2006-12-18 17:15:47 UTC (rev 8385)
@@ -0,0 +1,147 @@
+package org.drools.brms.server.util;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.drools.brms.client.rpc.MetaData;
+import org.drools.repository.RulesRepositoryException;
+
+/**
+ * This utility uses reflection to map from the MetaData DTO to 
+ * the AssetItem back end class, to adhere to the DRY principle.
+ * 
+ * AssetItem is not a remotable instance, but MetaData is.
+ * 
+ * @author Michael Neale
+ */
+public class MetaDataMapper {
+
+    private Map readMappings;
+    private Map writeMappings;
+    
+    
+    public void copyFromMetaData(MetaData data, Object target) {
+        if ( this.writeMappings == null ) {
+            this.writeMappings = loadWriteMappings( data,
+                                              target.getClass() );
+        }
+        
+        for ( Iterator iter = writeMappings.entrySet().iterator(); iter.hasNext(); ) {
+            Map.Entry e = (Map.Entry) iter.next();
+            Field f = (Field) e.getKey();
+            Method m = (Method) e.getValue();
+
+            try {
+                if (f.getType() == Date.class) {
+                    
+                }
+                m.invoke( target, new Object[] {f.get( data )} ) ;
+            } catch ( IllegalArgumentException e1 ) {
+                throw new RulesRepositoryException(e1);
+            } catch ( IllegalAccessException e1 ) {
+                throw new RulesRepositoryException(e1);
+            } catch ( InvocationTargetException e1 ) {
+                throw new RulesRepositoryException(e1);
+            }
+
+        }        
+        
+    }
+    
+    private Map loadWriteMappings(MetaData data,
+                                  Class bean) {
+        Map mappings = new HashMap();
+        Field fields[] = data.getClass().getFields();
+        for ( int i = 0; i < fields.length; i++ ) {
+            Field f = fields[i];
+            String old = f.getName();
+            String name = Character.toUpperCase( old.charAt( 0 ) ) + old.substring( 1 );
+
+            name = "update" + name;
+
+
+            Method m;
+            try {
+                m = bean.getMethod( name, new Class[] {f.getType()} );
+                mappings.put( f,
+                                  m );
+            } catch ( SecurityException e ) {
+                throw new RulesRepositoryException( "Unable to map meta data",
+                                                    e );
+            } catch ( NoSuchMethodException e ) {
+                //ignore
+            }
+
+        }
+        return mappings;
+    }
+
+    public void copyToMetaData(MetaData data,
+                               Object source) {
+        if ( this.readMappings == null ) {
+            this.readMappings = loadReadMappings( data,
+                                              source.getClass() );
+        }
+
+        for ( Iterator iter = readMappings.entrySet().iterator(); iter.hasNext(); ) {
+            Map.Entry e = (Map.Entry) iter.next();
+            Field f = (Field) e.getKey();
+            Method m = (Method) e.getValue();
+
+            try {
+                f.set( data, m.invoke( source, null ) );
+            } catch ( IllegalArgumentException e1 ) {
+                throw new RulesRepositoryException(e1);
+            } catch ( IllegalAccessException e1 ) {
+                throw new RulesRepositoryException(e1);
+            } catch ( InvocationTargetException e1 ) {
+                throw new RulesRepositoryException(e1);
+            }
+
+        }
+
+    }
+
+    private Map loadReadMappings(MetaData data,
+                            Class bean) {
+
+        Map mappings = new HashMap();
+        Field fields[] = data.getClass().getFields();
+        for ( int i = 0; i < fields.length; i++ ) {
+            Field f = fields[i];
+            String old = f.getName();
+            String name = Character.toUpperCase( old.charAt( 0 ) ) + old.substring( 1 );
+
+            if ( f.getType() == Boolean.class ) {
+                name = "is" + name;
+            } else {
+                name = "get" + name;
+            }
+
+            Method m;
+            try {
+                m = bean.getMethod( name, null );
+                if (f.getType() == m.getReturnType())
+                {
+                    mappings.put( f,
+                                  m );
+                }
+            } catch ( SecurityException e ) {
+                throw new RulesRepositoryException( "Unable to map meta data",
+                                                    e );
+            } catch ( NoSuchMethodException e ) {
+                //ignore
+            }
+
+        }
+        return mappings;
+
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/MetaDataMapper.java
___________________________________________________________________
Name: svn:eol-style
   + native

Deleted: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/AppTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/AppTest.java	2006-12-18 17:05:19 UTC (rev 8384)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/AppTest.java	2006-12-18 17:15:47 UTC (rev 8385)
@@ -1,39 +0,0 @@
-package org.drools.brms;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-/**
- * Unit test for simple App.
- */
-public class AppTest 
-    extends TestCase
-{
-    /**
-     * Create the test case
-     *
-     * @param testName name of the test case
-     */
-    public AppTest( String testName )
-    {
-        
-        super( testName );
-    }
-
-    /**
-     * @return the suite of tests being tested
-     */
-    public static Test suite()
-    {
-        return new TestSuite( AppTest.class );
-    }
-
-    /**
-     * Rigourous Test :-)
-     */
-    public void testApp()
-    {
-        assertTrue( true );
-    }
-}

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java	2006-12-18 17:05:19 UTC (rev 8384)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java	2006-12-18 17:15:47 UTC (rev 8385)
@@ -158,7 +158,9 @@
       assertEquals("testLoadRuleAsset", asset.metaData.name);
       assertEquals("testLoadRuleAsset", asset.metaData.title);
       assertEquals("testLoadRuleAsset", asset.metaData.packageName);
-   
+      assertNotNull(asset.metaData.createdDate);
+      
+      
       AssetItem rule = impl.repo.loadPackage( "testLoadRuleAsset" ).loadAsset( "testLoadRuleAsset" );
       rule.updateState( "whee" );
       rule.checkin( "changed state" );

Added: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/MetaDataMapperTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/MetaDataMapperTest.java	2006-12-18 17:05:19 UTC (rev 8384)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/MetaDataMapperTest.java	2006-12-18 17:15:47 UTC (rev 8385)
@@ -0,0 +1,36 @@
+package org.drools.brms.server.util;
+
+import junit.framework.TestCase;
+
+import org.drools.brms.client.rpc.MetaData;
+
+public class MetaDataMapperTest extends TestCase {
+
+    public void testMapping() {
+        MetaData data = new MetaData();
+        assertEquals("", data.coverage);
+        TestBean bean = new TestBean();
+        
+        MetaDataMapper mapper = new MetaDataMapper();
+        mapper.copyToMetaData( data, bean );
+        
+        assertEquals("42", data.publisher);
+        assertEquals("42", data.creator);
+        assertEquals("", data.coverage);
+        
+        data.publisher = "abc";
+        data.creator = "def";
+        
+        mapper.copyFromMetaData( data, bean );
+        
+        assertEquals("abc", bean.getPublisher());
+        assertEquals("def", bean.getCreator());
+        
+        assertFalse(data.dirty);
+        
+    }
+    
+
+    
+
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/MetaDataMapperTest.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/TestBean.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/TestBean.java	2006-12-18 17:05:19 UTC (rev 8384)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/TestBean.java	2006-12-18 17:15:47 UTC (rev 8385)
@@ -0,0 +1,37 @@
+package org.drools.brms.server.util;
+
+import java.util.Calendar;
+
+public class TestBean {
+    
+    
+    private String publisher = "42";
+    private String creator = "42";
+    private Calendar created = Calendar.getInstance();
+    
+    public String getPublisher() {
+        return publisher;
+    }
+    
+    public String getCreator() {
+        return creator;
+    }
+    
+    /** this should be ignored */
+    public void getCoverage() {
+        
+    }
+    
+    public void updatePublisher(String pub) {
+        this.publisher = pub;
+    }
+    
+    public void updateCreator(String c) {
+        this.creator = c;
+    }
+    
+    public Calendar getCreatedDate() {
+        return created ;
+    }
+    
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/TestBean.java
___________________________________________________________________
Name: svn:eol-style
   + native




More information about the jboss-svn-commits mailing list