Return-Path: Delivered-To: apmail-jakarta-hivemind-cvs-archive@www.apache.org Received: (qmail 91617 invoked from network); 27 Apr 2005 10:49:49 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 27 Apr 2005 10:49:49 -0000 Received: (qmail 49203 invoked by uid 500); 27 Apr 2005 10:50:38 -0000 Delivered-To: apmail-jakarta-hivemind-cvs-archive@jakarta.apache.org Received: (qmail 49097 invoked by uid 500); 27 Apr 2005 10:50:36 -0000 Mailing-List: contact hivemind-cvs-help@jakarta.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: hivemind-dev@jakarta.apache.org Delivered-To: mailing list hivemind-cvs@jakarta.apache.org Received: (qmail 49062 invoked by uid 99); 27 Apr 2005 10:50:36 -0000 X-ASF-Spam-Status: No, hits=0.2 required=10.0 tests=NO_REAL_NAME X-Spam-Check-By: apache.org Received: from minotaur.apache.org (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.28) with SMTP; Wed, 27 Apr 2005 03:50:34 -0700 Received: (qmail 91539 invoked by uid 1870); 27 Apr 2005 10:49:41 -0000 Date: 27 Apr 2005 10:49:41 -0000 Message-ID: <20050427104941.91538.qmail@minotaur.apache.org> From: knut@apache.org To: jakarta-hivemind-cvs@apache.org Subject: cvs commit: jakarta-hivemind/framework/src/test/org/apache/hivemind/impl TestSchemaProcessor.java X-Virus-Checked: Checked X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N 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 @@ Added newLocation() method to HiveMindTestCase. Apply Achim Hügen's JMX patch. Update to Javassist 3.0. + Translate unique attribute values before checking uniqueness. Interceptors can now be ordered by name rather than interceptor factory id. 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