You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by si...@apache.org on 2009/11/23 14:03:43 UTC

svn commit: r883330 - in /labs/magma/trunk/foundation-basics/src: main/java/org/apache/magma/settings/ test/java/org/apache/magma/settings/ test/resources/META-INF/

Author: simoneg
Date: Mon Nov 23 13:03:43 2009
New Revision: 883330

URL: http://svn.apache.org/viewvc?rev=883330&view=rev
Log:
LABS-365 : support for "not" and "last"

Added:
    labs/magma/trunk/foundation-basics/src/test/resources/META-INF/specialchars.properties
Modified:
    labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/settings/ContextSettingsHolder.java
    labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/settings/ContextSettingsHolderTest.java
    labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/settings/PerformanceTest.java

Modified: labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/settings/ContextSettingsHolder.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/settings/ContextSettingsHolder.java?rev=883330&r1=883329&r2=883330&view=diff
==============================================================================
--- labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/settings/ContextSettingsHolder.java (original)
+++ labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/settings/ContextSettingsHolder.java Mon Nov 23 13:03:43 2009
@@ -63,7 +63,9 @@
 	 */
 	protected void buildMatrix() {
 		for (Map.Entry<Object, Object> entry : properties.entrySet()) {
-			String[] parts = tokenize((String)entry.getKey(), (String)entry.getValue());
+			String key = (String)entry.getKey();
+			if (key.startsWith(".")) key = key.substring(1);
+			String[] parts = tokenize(key, (String)entry.getValue());
 			String discriminator = parts[parts.length - 2];
 			List<String[]> list = firstLookup.get(discriminator);
 			if (list == null) {
@@ -186,15 +188,38 @@
 		int total = -1;
 		int upto = 0;
 		int pos = 1;
+		boolean done = false;
+		List<String> notted = null;
+		List<String> lasted = null;
+		String acpart = parts[upto];
 		for (String seg : mc) {
 			pos++;
-			if (parts[upto].equals(seg)) {
-				upto++;
-				total += pos;
-				if (upto == parts.length - 2) return total;
+			if (acpart.charAt(0) == '!') {
+				if (notted == null) notted = new ArrayList<String>();
+				notted.add(acpart.substring(1));
+				acpart = parts[++upto];
+				done = (upto == parts.length - 2);
+			} else {
+				if (notted != null && notted.contains(seg)) return -1;
+				if (lasted != null && lasted.contains(seg)) return -1;
+				if (acpart.charAt(0) == '#') acpart = acpart.substring(1); 
+				if (acpart.equals(seg)) {
+					notted = null;
+					if (parts[upto].charAt(0) == '#') {
+						if (lasted == null) lasted = new ArrayList<String>();
+						lasted.add(acpart);
+					}
+					if (upto == parts.length - 3 && lasted != null && lasted.size() > 0) {
+						done = true;
+					} else {
+						acpart = parts[++upto];
+						total += pos;
+						if (upto == parts.length - 2) return total;
+					}
+				}
 			}
 		}
-		return -1;		
+		return done ? total : -1;		
 	}
 
 	/**

Modified: labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/settings/ContextSettingsHolderTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/settings/ContextSettingsHolderTest.java?rev=883330&r1=883329&r2=883330&view=diff
==============================================================================
--- labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/settings/ContextSettingsHolderTest.java (original)
+++ labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/settings/ContextSettingsHolderTest.java Mon Nov 23 13:03:43 2009
@@ -1,6 +1,7 @@
 package org.apache.magma.settings;
 
 import static org.hamcrest.CoreMatchers.equalTo;
+import static org.junit.Assert.*;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.apache.magma.settings.ContextSettingsHolder.stringify;
@@ -106,4 +107,72 @@
 		assertTrue(score1 + " is not > than " + score2, score1 > score2);		
 	}
 	
+	@Test
+	public void testNot() throws Exception {
+		SubRunningContext mc = RunningContext.get();
+		mc.push("BahHtmlProducer");
+		mc.push("BeanFormProducer");
+		mc.push("UserBean");
+		mc.push("BeanFormProducer");
+		mc.push("UserBean");
+		mc.push("field1");
+		mc.push("field1");
+		mc.push("field2");
+		mc.push("field2");
+		mc.push("field2");
+		
+		int score = 0;
+		score = getScore(tokenize("UserBean.field2.key", "key"), stringify(mc));
+		assertTrue("It should match this without any not", score > 0);
+		score = getScore(tokenize("UserBean.!field2.key", "key"), stringify(mc));
+		assertTrue("It should NOT match this with !field2", score < 0);
+		score = getScore(tokenize("UserBean.!unexistant.key", "key"), stringify(mc));
+		assertTrue("It should match with !unexistant", score > 0);
+		score = getScore(tokenize("UserBean.!unexistant.field1.!field2.key", "key"), stringify(mc));
+		assertTrue("It should NOT match this with !unexistant but !field2", score < 0);
+		score = getScore(tokenize("UserBean.!field1.UserBean.key", "key"), stringify(mc));
+		assertTrue("It should match with !field1 placed where there is none", score > 0);
+		score = getScore(tokenize("!UserBean.!field1.!field2.key", "key"), stringify(mc));
+		assertTrue("It should NOT match with all nots", score < 0);
+	}
+
+	@Test
+	public void testEnd() throws Exception {
+		SubRunningContext mc = RunningContext.get();
+		mc.push("BahHtmlProducer");
+		mc.push("BeanFormProducer");
+		mc.push("UserBean");
+		mc.push("BeanFormProducer");
+		mc.push("UserBean");
+		mc.push("field1");
+		mc.push("field1");
+		mc.push("field2");
+		mc.push("field2");
+		mc.push("field2");
+		
+		int score = 0;
+		score = getScore(tokenize("UserBean.field2.key", "key"), stringify(mc));
+		assertTrue("It should match this without any ended", score > 0);
+		score = getScore(tokenize("#UserBean.field2.key", "key"), stringify(mc));
+		assertTrue("It should NOT match this with #UserBean", score < 0);
+		score = getScore(tokenize("UserBean.#unexistant.key", "key"), stringify(mc));
+		assertTrue("It should NOT match with #unexistant", score < 0);
+		score = getScore(tokenize("UserBean.field1.#field2.key", "key"), stringify(mc));
+		assertTrue("It should NOT match with #field2", score < 0);
+		score = getScore(tokenize("#BahHtmlProducer.UserBean.UserBean.key", "key"), stringify(mc));
+		assertTrue("It should match with #BahHtmlProducer cause it is unique", score > 0);
+		score = getScore(tokenize("#UserBean.#field1.#field2.key", "key"), stringify(mc));
+		assertTrue("It should NOT match with all nots", score < 0);
+	}
+	
+	@Test
+	public void charsPermitted() throws Exception {
+		SettingsHolder cth = new SettingsHolder();
+		cth.overrideWith(getClass().getResource("/META-INF/specialchars.properties"));
+		cth.inited();
+		
+		assertTrue("Does not support #", cth.get("test.#pound.key") != null);
+		assertTrue("Does not support !", cth.get("test.!exclamation.key") != null);
+	}
+	
 }

Modified: labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/settings/PerformanceTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/settings/PerformanceTest.java?rev=883330&r1=883329&r2=883330&view=diff
==============================================================================
--- labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/settings/PerformanceTest.java (original)
+++ labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/settings/PerformanceTest.java Mon Nov 23 13:03:43 2009
@@ -29,8 +29,10 @@
 			String ele = "";
 			for (int k = 0; k < elements.length; k++) {
 				boolean add = (i & (1 << (k + 2))) != 0;
-				if (add) 
+				if (add) {
+					if ((i % elements.length) == k) ele+='!';
 					ele += elements[k] + ".";
+				}
 			}
 			if ((i & 1) != 0) {
 				ele += "notfound.";
@@ -40,6 +42,7 @@
 			} else {
 				ele += "incorrect";
 			}
+			//System.out.println(i + " : " + ele);
 			lh.override(ele, "ele " + i);
 		}
 		lh.inited();
@@ -78,8 +81,8 @@
 		System.out.println(nt.totals());
 		System.out.println("Positives : " + positives + "   Negatives : " + negatives);
 		System.out.println("Cache size : " + lh.cache.size());
-		assertEquals(600001, positives);
-		assertEquals(399999, negatives);
+		assertEquals(584616, positives);
+		assertEquals(415384, negatives);
 		assertTrue("Poor performances", nt.totalIterationsPerSecond() > 150000d);
 	}
 	

Added: labs/magma/trunk/foundation-basics/src/test/resources/META-INF/specialchars.properties
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-basics/src/test/resources/META-INF/specialchars.properties?rev=883330&view=auto
==============================================================================
--- labs/magma/trunk/foundation-basics/src/test/resources/META-INF/specialchars.properties (added)
+++ labs/magma/trunk/foundation-basics/src/test/resources/META-INF/specialchars.properties Mon Nov 23 13:03:43 2009
@@ -0,0 +1,2 @@
+test.#pound.key=val
+test.!exclamation.key=val
\ No newline at end of file



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org