Return-Path: X-Original-To: apmail-commons-commits-archive@minotaur.apache.org Delivered-To: apmail-commons-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 5C56310C93 for ; Sun, 9 Mar 2014 21:05:34 +0000 (UTC) Received: (qmail 63034 invoked by uid 500); 9 Mar 2014 21:05:31 -0000 Delivered-To: apmail-commons-commits-archive@commons.apache.org Received: (qmail 62914 invoked by uid 500); 9 Mar 2014 21:05:31 -0000 Mailing-List: contact commits-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@commons.apache.org Delivered-To: mailing list commits@commons.apache.org Received: (qmail 62907 invoked by uid 99); 9 Mar 2014 21:05:30 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 09 Mar 2014 21:05:30 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 09 Mar 2014 21:05:29 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 705F923888E2; Sun, 9 Mar 2014 21:05:09 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1575768 - in /commons/proper/configuration/branches/immutableNodes/src: main/java/org/apache/commons/configuration/tree/InMemoryNodeModel.java test/java/org/apache/commons/configuration/tree/TestInMemoryNodeModelTrackedNodes.java Date: Sun, 09 Mar 2014 21:05:09 -0000 To: commits@commons.apache.org From: oheger@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20140309210509.705F923888E2@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: oheger Date: Sun Mar 9 21:05:08 2014 New Revision: 1575768 URL: http://svn.apache.org/r1575768 Log: InMemoryNodeModel now supports addNodes() on a tracked node. The implementation is analogous to other operations on tracked nodes. Modified: commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/tree/InMemoryNodeModel.java commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/tree/TestInMemoryNodeModelTrackedNodes.java Modified: commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/tree/InMemoryNodeModel.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/tree/InMemoryNodeModel.java?rev=1575768&r1=1575767&r2=1575768&view=diff ============================================================================== --- commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/tree/InMemoryNodeModel.java (original) +++ commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/tree/InMemoryNodeModel.java Sun Mar 9 21:05:08 2014 @@ -140,7 +140,27 @@ public class InMemoryNodeModel implement } } - public void addNodes(final String key, + public void addNodes(String key, Collection nodes, + NodeKeyResolver resolver) + { + addNodes(key, null, nodes, resolver); + } + + /** + * Adds new nodes using a tracked node as root node. This method works like + * the normal {@code addNodes()} method, but the origin of the operation + * (also for the interpretation of the passed in key) is a tracked node + * identified by the passed in {@code NodeSelector}. The selector can be + * null, then the root node is assumed. + * + * @param key the key + * @param selector the {@code NodeSelector} defining the root node (or + * null) + * @param nodes the collection of new nodes to be added + * @param resolver the {@code NodeKeyResolver} + * @throws ConfigurationRuntimeException if the selector cannot be resolved + */ + public void addNodes(final String key, NodeSelector selector, final Collection nodes, final NodeKeyResolver resolver) { @@ -151,8 +171,8 @@ public class InMemoryNodeModel implement public boolean initTransaction(ModelTransaction tx) { List> results = - resolver.resolveKey(tx.getCurrentData().getRootNode(), - key, tx.getCurrentData()); + resolver.resolveKey(tx.getQueryRoot(), key, + tx.getCurrentData()); if (results.size() == 1) { if (results.get(0).isAttributeResult()) @@ -164,8 +184,8 @@ public class InMemoryNodeModel implement else { NodeAddData addData = - resolver.resolveAddKey(tx.getCurrentData() - .getRootNode(), key, tx.getCurrentData()); + resolver.resolveAddKey(tx.getQueryRoot(), key, + tx.getCurrentData()); if (addData.isAttribute()) { throw attributeKeyException(key); @@ -179,7 +199,7 @@ public class InMemoryNodeModel implement } return true; } - }, null, resolver); + }, selector, resolver); } } Modified: commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/tree/TestInMemoryNodeModelTrackedNodes.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/tree/TestInMemoryNodeModelTrackedNodes.java?rev=1575768&r1=1575767&r2=1575768&view=diff ============================================================================== --- commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/tree/TestInMemoryNodeModelTrackedNodes.java (original) +++ commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/tree/TestInMemoryNodeModelTrackedNodes.java Sun Mar 9 21:05:08 2014 @@ -498,4 +498,40 @@ public class TestInMemoryNodeModelTracke assertSame("Root node was changed", rootNode, model.getRootNode()); checkForAddedField(fieldsNodeFromTrackedNode()); } + + /** + * Tests whether an addNodes() operation works on a tracked node. + */ + @Test + public void testAddNodesOnTrackedNode() + { + NodeKeyResolver resolver = createResolver(false); + prepareResolverForAddKeys(resolver); + EasyMock.replay(resolver); + model.trackNode(selector, resolver); + model.addNodes("fields", selector, Collections + .singleton(NodeStructureHelper.createFieldNode(NEW_FIELD)), + resolver); + checkForAddedField(fieldsNodeFromModel()); + checkForAddedField(fieldsNodeFromTrackedNode()); + } + + /** + * Tests an addNodes() operation on a tracked node that is detached. + */ + @Test + public void testAddNodesOnDetachedNode() + { + NodeKeyResolver resolver = createResolver(false); + prepareResolverForAddKeys(resolver); + EasyMock.replay(resolver); + model.trackNode(selector, resolver); + initDetachedNode(resolver); + ImmutableNode rootNode = model.getRootNode(); + model.addNodes("fields", selector, Collections + .singleton(NodeStructureHelper.createFieldNode(NEW_FIELD)), + resolver); + assertSame("Root node was changed", rootNode, model.getRootNode()); + checkForAddedField(fieldsNodeFromTrackedNode()); + } }