[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