[jboss-svn-commits] JBL Code SVN: r9337 - in labs/jbossrules/trunk/drools-jbrms/src/main: resources and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Feb 5 07:04:04 EST 2007


Author: michael.neale at jboss.com
Date: 2007-02-05 07:04:04 -0500 (Mon, 05 Feb 2007)
New Revision: 9337

Added:
   labs/jbossrules/trunk/drools-jbrms/src/main/resources/AssetListTable.properties
Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/TableDisplayHandler.java
Log:
table configs dynamically loaded

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/TableDisplayHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/TableDisplayHandler.java	2007-02-05 11:59:58 UTC (rev 9336)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/TableDisplayHandler.java	2007-02-05 12:04:04 UTC (rev 9337)
@@ -1,17 +1,25 @@
 package org.drools.brms.server.util;
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.text.DateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Properties;
+import java.util.Set;
+import java.util.StringTokenizer;
 
-import javax.jcr.RepositoryException;
-
 import org.drools.brms.client.rpc.TableConfig;
 import org.drools.brms.client.rpc.TableDataResult;
 import org.drools.brms.client.rpc.TableDataRow;
 import org.drools.repository.AssetItem;
+import org.drools.repository.RulesRepositoryException;
 
 import com.google.gwt.user.client.rpc.SerializableException;
 
@@ -27,32 +35,35 @@
 public class TableDisplayHandler {
 
     
+    private RowLoader ASSET_LIST = new RowLoader(TableDisplayHandler.class.getResourceAsStream( "/AssetListTable.properties" ));
+    
     public TableDataResult loadRuleListTable(List list) throws SerializableException {
         List data = new ArrayList();
         
         for ( Iterator iter = list.iterator(); iter.hasNext(); ) {
             AssetItem rule = (AssetItem) iter.next();
             TableDataRow row = new TableDataRow();
-            try {
-
                 
-                row.id = rule.getNode().getUUID();
+                row.id = rule.getUUID();
                 row.format = rule.getFormat();
                 row.values = new String[4];
-                row.values[0] = rule.getName();
-                row.values[1] = formatDate(rule.getLastModified());
-                row.values[2] = rule.getStateDescription();                
-                row.values[3] = rule.getVersionNumber();
+
+                
+                row.values = ASSET_LIST.getRow( rule );
+//                row.values[0] = rule.getName();
+//                row.values[1] = formatDate(rule.getLastModified());
+//                row.values[2] = rule.getStateDescription();                
+//                row.values[3] = rule.getVersionNumber();
                 data.add( row );
-            } catch ( RepositoryException e ) {
-                throw new SerializableException(e.getMessage());
-            }            
+         
         }
         TableDataResult result = new TableDataResult();
         result.data = (TableDataRow[]) data.toArray( new TableDataRow[data.size()] );
         return result;        
     }
     
+
+    
     public String formatDate(Calendar cal) {
         DateFormat localFormat = DateFormat.getDateInstance();
         
@@ -62,13 +73,135 @@
     public TableConfig loadTableConfig(String listName) {
         final TableConfig config = new TableConfig();
 
-        config.headers = new String[]{"name", 
-                                      "last modified", 
-                                      "state", 
-                                      "version"};
+//        config.headers = new String[]{"name", 
+//                                      "last modified", 
+//                                      "state", 
+//                                      "version"};
+        config.headers = ASSET_LIST.getHeaders();
         config.rowsPerPage = 30;
         return config;
     }
     
+
     
+    static class RowLoader {
+        
+        
+        private String[] headers;
+        private List extractors;
+        
+        public String[] getHeaders() {
+            return headers;
+        }
+        
+        public String[] getRow(AssetItem item)  {
+            String[] row = new String[headers.length];
+            for ( int i = 0; i < row.length; i++ ) {
+                Method meth = (Method) extractors.get( i );
+                try {
+                    Object val = meth.invoke( item, (Object[]) null );
+                    if (val instanceof String) {
+                        row[i] = (String) val;
+                    } else if (val instanceof Calendar) {
+                        row[i] = DateFormat.getDateInstance().format( (( Calendar ) val).getTime() );
+                    } else {
+                        row[i] = val.toString();
+                    }
+                } catch (Exception e) {
+                    if (e instanceof RuntimeException) throw (RuntimeException) e;
+                    throw new RulesRepositoryException ( e );
+                }
+            }
+            return row;
+        }
+        
+        public RowLoader(InputStream in) {
+            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
+            List fields = new ArrayList();
+            extractors = new ArrayList();
+            String line;
+            
+            try {
+            
+            while ( (line = reader.readLine())  != null) {
+                if (!line.startsWith( "#" ) && !line.trim().equals( "" )) {
+                    StringTokenizer tok = new StringTokenizer(line, "=");
+                    String field = tok.nextToken();
+                    String method = tok.nextToken();
+                    fields.add( field );
+                    
+                    final Method meth = AssetItem.class.getMethod( method, new Class[] {} );
+                    
+                    extractors.add( meth );
+//                    
+//                    if (meth.getReturnType() == String.class) {
+//                        extractors.add( new ValueExtractor() {
+//                            public String getValue(AssetItem obj) {
+//                                return (String) meth.invoke( obj, null );
+//                            }
+//                        });
+//                    } else if (meth.getReturnType() == Calendar.class) {
+//                        extractors.add( new ValueExtractor() {
+//                            public String getValue(AssetItem obj) {
+//                                Calendar cal = (Calendar) meth.invoke( obj, null );
+//                                return DateFormat.getDateInstance().format( cal.getTime() );
+//                                
+//                            }                            
+//                        });
+//                    } else {
+//                        extractors.add( new ValueExtractor() {
+//
+//                            public String getValue(AssetItem obj) {
+//                                Object r = meth.invoke( obj, null );
+//                                return r.toString();
+//                            }
+//                            
+//                        });
+//                    }
+                    
+                   
+                    
+                }
+            }
+            } catch (Exception e) {
+                if (e instanceof RuntimeException) {
+                    throw (RuntimeException) e;
+                } 
+                throw new RulesRepositoryException( e );
+            }
+            headers = (String[]) fields.toArray( new String[fields.size()] );            
+        }
+        
+        
+        
+    }
+    
+    static interface ValueExtractor {
+        public String getValue(AssetItem obj);
+    }
+    
+    static class StringExtractor implements ValueExtractor {
+
+        
+        private Method meth;
+
+        public StringExtractor(Method meth) {
+            this.meth = meth;
+        }
+        
+        public String getValue(AssetItem obj) {
+            try {
+                return (String) meth.invoke( obj, null );
+            } catch ( Exception e ) {
+                if (e instanceof RuntimeException) {
+                    throw (RuntimeException) e;
+                }
+                throw new RulesRepositoryException( e );
+            }
+        }
+        
+        
+    }
+    
+    
 }

Added: labs/jbossrules/trunk/drools-jbrms/src/main/resources/AssetListTable.properties
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/resources/AssetListTable.properties	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/resources/AssetListTable.properties	2007-02-05 12:04:04 UTC (rev 9337)
@@ -0,0 +1,13 @@
+#
+# This is the configuration for the asset list table.
+# It can access any field on the AssetItem object by the method name.
+# It will intelligently convert types as appropriate.
+#
+# Underscores "_" are automatically converted to spaces.
+#
+# @author Michael Neale
+#
+Name=getName
+Last Modified=getLastModified
+Status=getStateDescription
+Version=getVersionNumber
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/resources/AssetListTable.properties
___________________________________________________________________
Name: svn:eol-style
   + native




More information about the jboss-svn-commits mailing list