You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hivemind.apache.org by kn...@apache.org on 2005/04/27 12:49:41 UTC
cvs commit: jakarta-hivemind/framework/src/test/org/apache/hivemind/impl TestSchemaProcessor.java
knut 2005/04/27 03:49:40
Modified: . status.xml
framework/src/java/org/apache/hivemind/impl
SchemaElement.java
framework/src/test/org/apache/hivemind/impl
TestSchemaProcessor.java
Log:
translate unique attribute values before checking uniqueness (see HIVEMIND-100)
Revision Changes Path
1.124 +1 -0 jakarta-hivemind/status.xml
Index: status.xml
===================================================================
RCS file: /home/cvs/jakarta-hivemind/status.xml,v
retrieving revision 1.123
retrieving revision 1.124
diff -u -r1.123 -r1.124
--- status.xml 16 Apr 2005 15:46:07 -0000 1.123
+++ status.xml 27 Apr 2005 10:49:40 -0000 1.124
@@ -41,6 +41,7 @@
<action type="add" dev="HLS"> Added newLocation() method to HiveMindTestCase. </action>
<action type="add" dev="HLS" due-to="Achim Hügen" fixes-bug="HIVEMIND-97"> Apply Achim Hügen's JMX patch. </action>
<action type="updated" dev="HLS"> Update to Javassist 3.0. </action>
+ <action type="fix" dev="KW" due-to="Michael Frericks" fixes-bug="HIVEMIND-100"> Translate unique attribute values before checking uniqueness. </action>
</release>
<release version="1.1-alpha-3" date="Mar 22 2005">
<action type="fix" dev="JC" fixes-bug="HIVEMIND-96" >Interceptors can now be ordered by name rather than interceptor factory id.</action>
1.8 +12 -3 jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/SchemaElement.java
Index: SchemaElement.java
===================================================================
RCS file: /home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/SchemaElement.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- SchemaElement.java 6 Jan 2005 01:45:12 -0000 1.7
+++ SchemaElement.java 27 Apr 2005 10:49:40 -0000 1.8
@@ -194,17 +194,26 @@
if (valuesMap == null)
return;
- Location prior = (Location) valuesMap.get(value);
+ Object translatedValue = getAttributeTranslator(name).translate(
+ _processor.getContributingModule(),
+ Object.class,
+ value,
+ location);
+
+ Location prior = (Location) valuesMap.get(translatedValue);
if (prior == null)
{
- valuesMap.put(value, location);
+ valuesMap.put(translatedValue, location);
return;
}
// A conflict.
- errors.add(ImplMessages.uniqueAttributeConstraintBroken(name, value, prior));
+ errors.add(ImplMessages.uniqueAttributeConstraintBroken(
+ name,
+ translatedValue.toString(),
+ prior));
}
void fireBegin(Element element)
1.13 +130 -0 jakarta-hivemind/framework/src/test/org/apache/hivemind/impl/TestSchemaProcessor.java
Index: TestSchemaProcessor.java
===================================================================
RCS file: /home/cvs/jakarta-hivemind/framework/src/test/org/apache/hivemind/impl/TestSchemaProcessor.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- TestSchemaProcessor.java 10 Feb 2005 01:04:32 -0000 1.12
+++ TestSchemaProcessor.java 27 Apr 2005 10:49:40 -0000 1.13
@@ -18,9 +18,13 @@
import hivemind.test.services.impl.StringHolderImpl;
import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+import org.apache.hivemind.Location;
import org.apache.hivemind.internal.Module;
import org.apache.hivemind.schema.SchemaProcessor;
import org.apache.hivemind.schema.Translator;
@@ -279,6 +283,9 @@
List elements = Collections.singletonList(element);
+ m.getTranslator("cartoon");
+ control.setReturnValue(new NullTranslator());
+
m.resolveType("StringHolderImpl");
control.setReturnValue(StringHolderImpl.class);
@@ -312,4 +319,127 @@
verifyControls();
}
+ /**
+ * Test contributing 2 elements from 2 modules to a configuration-point with an attribute that
+ * is marked unique and is translated by translator 'qualified-id'. Both contributed elements
+ * use same untranslated value in the unique attribute. Fixes HIVEMIND-100.
+ */
+ public void testUniqueElement()
+ {
+ ElementModelImpl em = new ElementModelImpl();
+
+ em.setElementName("cartoon");
+
+ AttributeModelImpl am = new AttributeModelImpl();
+ am.setName("name");
+ am.setTranslator("qualified-id");
+ am.setUnique(true);
+
+ em.addAttributeModel(am);
+
+ em.addRule(new CreateObjectRule("StringHolderImpl"));
+
+ ReadAttributeRule rule = new ReadAttributeRule();
+ rule.setAttributeName("name");
+ rule.setPropertyName("value");
+
+ em.addRule(rule);
+
+ em.addRule(new InvokeParentRule("addElement"));
+
+ SchemaImpl schema = new SchemaImpl();
+ schema.addElementModel(em);
+
+ MockControl control1 = newControl(Module.class);
+ Module m1 = (Module) control1.getMock();
+
+ MockControl control2 = newControl(Module.class);
+ Module m2 = (Module) control2.getMock();
+
+ schema.setModule(m1);
+
+ SchemaProcessorImpl p = new SchemaProcessorImpl(null, schema);
+
+ Location location1 = newLocation();
+ ElementImpl element1 = new ElementImpl();
+ element1.setElementName("cartoon");
+ element1.addAttribute(new AttributeImpl("name", "flintstone"));
+ element1.setLocation(location1);
+
+ List elements1 = Collections.singletonList(element1);
+
+ Location location2 = newLocation();
+ ElementImpl element2 = new ElementImpl();
+ element2.setElementName("cartoon");
+ element2.addAttribute(new AttributeImpl("name", "flintstone"));
+ element2.setLocation(location2);
+
+ List elements2 = Collections.singletonList(element2);
+
+ MockControl tControl1 = newControl(Translator.class);
+ Translator t1 = (Translator) tControl1.getMock();
+
+ m1.getTranslator("qualified-id");
+ control1.setReturnValue(t1);
+
+ String flintstoneKeyModule1 = "m1.flintstone";
+ t1.translate(m1, Object.class, "flintstone", element1.getLocation());
+ tControl1.setReturnValue(flintstoneKeyModule1);
+
+ m1.resolveType("StringHolderImpl");
+ control1.setReturnValue(StringHolderImpl.class);
+
+ m1.expandSymbols("flintstone", location1);
+ control1.setReturnValue("flintstone");
+
+ m1.getTranslator("qualified-id");
+ control1.setReturnValue(t1);
+
+ t1.translate(m1, String.class, "flintstone", element1.getLocation());
+ tControl1.setReturnValue(flintstoneKeyModule1);
+
+ m1.resolveType("StringHolderImpl");
+ control1.setReturnValue(StringHolderImpl.class);
+
+ MockControl tControl2 = newControl(Translator.class);
+ Translator t2 = (Translator) tControl2.getMock();
+
+ m2.getTranslator("qualified-id");
+ control2.setReturnValue(t2);
+
+ String flintstoneKeyModule2 = "m2.flintstone";
+ t2.translate(m2, Object.class, "flintstone", element2.getLocation());
+ tControl2.setReturnValue(flintstoneKeyModule2);
+
+ m2.expandSymbols("flintstone", location2);
+ control2.setReturnValue("flintstone");
+
+ m2.getTranslator("qualified-id");
+ control2.setReturnValue(t2);
+
+ t2.translate(m2, String.class, "flintstone", element2.getLocation());
+ tControl2.setReturnValue(flintstoneKeyModule2);
+
+ replayControls();
+
+ p.process(elements1, m1);
+ p.process(elements2, m2);
+
+ List list = p.getElements();
+
+ assertEquals(2, list.size());
+
+ Set keys = new TreeSet();
+ for (Iterator iter = list.iterator(); iter.hasNext();)
+ {
+ StringHolderImpl element = (StringHolderImpl) iter.next();
+ keys.add(element.getValue());
+ }
+
+ assertTrue(keys.contains(flintstoneKeyModule1));
+ assertTrue(keys.contains(flintstoneKeyModule2));
+
+ verifyControls();
+ }
+
}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: hivemind-cvs-unsubscribe@jakarta.apache.org
For additional commands, e-mail: hivemind-cvs-help@jakarta.apache.org