[jboss-svn-commits] JBL Code SVN: r14329 - in labs/jbossrules/trunk/drools-compiler/src: test/java/org/drools/brms/modeldriven and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Aug 17 03:00:33 EDT 2007
Author: michael.neale at jboss.com
Date: 2007-08-17 03:00:33 -0400 (Fri, 17 Aug 2007)
New Revision: 14329
Added:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/DataEnumLoader.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/DataEnumLoaderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/SampleDataSource.java
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/brms/modeldriven/
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/brms/modeldriven/Some.enumeration
Log:
JBRULES-1090
Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/DataEnumLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/DataEnumLoader.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/DataEnumLoader.java 2007-08-17 07:00:33 UTC (rev 14329)
@@ -0,0 +1,89 @@
+package org.drools.brms.server.util;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.mvel.MVEL;
+
+/**
+ * Use mvel to load up map/list of valid items for fields - used by the Guided rule editor.
+ */
+public class DataEnumLoader {
+
+ private final List errors;
+ private final Map data;
+
+ /**
+ * This is the source of the asset, which is an MVEL map (minus the outer "[") of course.
+ */
+ public DataEnumLoader(String mvelSource) {
+ errors = new ArrayList();
+ this.data = loadEnum(mvelSource);
+ }
+
+ private Map loadEnum(String mvelSource) {
+ final Object mvelData;
+ try {
+ MVEL mvel = new MVEL();
+
+ mvelData = MVEL.eval("[ " + mvelSource + " ]", new HashMap());
+ } catch (RuntimeException e) {
+ addError("Unable to load enumeration data.");
+ addError(e.getMessage());
+ addError("Error type: " + e.getClass().getName());
+ return Collections.EMPTY_MAP;
+ }
+ if (!(mvelData instanceof Map)) {
+ addError("The expression is not a map, it is a " + mvelData.getClass().getName());
+ return Collections.EMPTY_MAP;
+ }
+ Map map = (Map) mvelData;
+ for (Iterator iter = map.keySet().iterator(); iter.hasNext();) {
+ String key = (String) iter.next();
+ Object list = map.get(key);
+ if (!(list instanceof List)) {
+ if (list == null) {
+ addError("The item with " + key + " is null.");
+ } else {
+ addError("The item with " + key + " is not a list, it is a " + list.getClass().getName());
+ }
+ return Collections.EMPTY_MAP;
+ }
+ List items = (List) list;
+ List newItems = new ArrayList();
+ for (int i = 0; i < items.size(); i++) {
+ Object listItem = items.get(i);
+ if (!(listItem instanceof String)) {
+ newItems.add(listItem.toString());
+ } else {
+ newItems.add(listItem);
+ }
+ }
+ map.put(key, newItems);
+ }
+ return map;
+ }
+
+ private void addError(String string) {
+ this.errors.add(string);
+ }
+
+ /**
+ * Return a list of any errors found.
+ */
+ public List getErrors() {
+ return this.errors;
+ }
+
+ /**
+ * Return the map of Fact.field to List (of Strings).
+ */
+ public Map getData() {
+ return this.data;
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/DataEnumLoader.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/DataEnumLoaderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/DataEnumLoaderTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/DataEnumLoaderTest.java 2007-08-17 07:00:33 UTC (rev 14329)
@@ -0,0 +1,66 @@
+package org.drools.brms.modeldriven;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+import junit.framework.TestCase;
+
+import org.drools.brms.server.util.DataEnumLoader;
+import org.mvel.MVEL;
+
+public class DataEnumLoaderTest extends TestCase {
+
+ public void testEnumGeneration() throws Exception {
+ Object result = MVEL.eval("[2, 3, 4, ]", new HashMap());
+ assertTrue(result instanceof List);
+ List l = (List) result;
+ assertEquals(3, l.size());
+
+ result = MVEL.eval("['Person.age' : [2, 3], 'Person.name' : ['qqq', 'ccc']]", new HashMap());
+
+ DataEnumLoader loader = new DataEnumLoader(readLines().toString());
+
+
+ Map enumeration = (Map) loader.getData();
+ assertEquals(loader.getErrors().toString(), 0, loader.getErrors().size());
+ assertEquals(3, enumeration.size());
+
+ List list = (List) enumeration.get("Person.age");
+ assertEquals(4, list.size());
+ assertEquals("1", list.get(0));
+ assertEquals("2", list.get(1));
+
+ list = (List) enumeration.get("Person.rating");
+ assertEquals(2, list.size());
+ assertEquals("High", list.get(0));
+ assertEquals("Low", list.get(1));
+
+
+ loader = new DataEnumLoader("");
+ assertEquals(1, loader.getErrors().size());
+
+ loader = new DataEnumLoader("goober poo error");
+ assertEquals(0, loader.getData().size());
+ assertFalse(loader.getErrors().size() == 0);
+
+
+ }
+
+
+ private StringBuffer readLines() throws IOException {
+ BufferedReader r = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream("Some.enumeration")));
+ String line = "";
+ StringBuffer buf = new StringBuffer();
+ while ((line = r.readLine()) != null) {
+ buf.append(line); buf.append('\n');
+ }
+ return buf;
+ }
+
+
+}
Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/DataEnumLoaderTest.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/SampleDataSource.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/SampleDataSource.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/SampleDataSource.java 2007-08-17 07:00:33 UTC (rev 14329)
@@ -0,0 +1,15 @@
+package org.drools.brms.modeldriven;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SampleDataSource {
+
+ public static List getData() {
+ return new ArrayList() {{
+ add("Hello");
+ add("World");
+ }};
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/SampleDataSource.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/brms/modeldriven/Some.enumeration
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/brms/modeldriven/Some.enumeration (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/brms/modeldriven/Some.enumeration 2007-08-17 07:00:33 UTC (rev 14329)
@@ -0,0 +1,4 @@
+'Person.age' : [1, 2, 3, 4]
+'Person.rating' : ["High", "Low"]
+/* and this shows how to get data from some external source */
+'Person.something' : (new org.drools.brms.modeldriven.SampleDataSource()).getData()
Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/brms/modeldriven/Some.enumeration
___________________________________________________________________
Name: svn:eol-style
+ native
More information about the jboss-svn-commits
mailing list