[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