You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2019/05/08 11:27:24 UTC

svn commit: r1858909 - in /jackrabbit/branches/2.14: ./ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/SessionImporter.java jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/SystemViewTest.java

Author: reschke
Date: Wed May  8 11:27:24 2019
New Revision: 1858909

URL: http://svn.apache.org/viewvc?rev=1858909&view=rev
Log:
JCR-4387: Incorrect exception message when same-name-sibling is prevented on import (ported to 2.14)

(patch by jfrantzius)

Added:
    jackrabbit/branches/2.14/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/SystemViewTest.java
      - copied unchanged from r1846896, jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/SystemViewTest.java
Modified:
    jackrabbit/branches/2.14/   (props changed)
    jackrabbit/branches/2.14/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/SessionImporter.java

Propchange: jackrabbit/branches/2.14/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed May  8 11:27:24 2019
@@ -1,3 +1,3 @@
 /jackrabbit/branches/JCR-2272:1173165-1176545
 /jackrabbit/sandbox/JCR-2415-lucene-3.0:1060860-1064038
-/jackrabbit/trunk:1776907,1776911-1776912,1776914,1776918,1779166,1779460,1779614,1779632,1780208,1780220,1780335-1780336,1780406,1785225,1786325,1786330,1787043,1787381,1792100,1792105,1792113,1792193,1793315,1793323,1793327,1793332,1793339,1796980,1797209,1797215,1797917,1798586,1799429,1799538,1799549,1799575,1800359,1800378,1800752,1802925,1802977,1807234,1807244,1808752,1808754,1809149,1809329,1809624,1810108,1811667,1812543,1812634,1812994,1814831,1817094,1817097-1817098,1817100,1817113,1817201,1817213,1817373,1817377,1818586,1819269,1819271,1819839,1819849,1820119,1820133,1820294,1820573,1820675,1820753,1821247,1821475,1821597,1821705,1821880,1822643,1822863,1822947,1822950,1824756,1824763-1824764,1824771,1824876,1826178,1826230,1826647,1826940,1826964,1828213,1830107,1830201,1830540,1830753,1830814,1830878,1830951,1831854,1831860,1832058,1832090,1833374,1833835,1833891,1834008,1834308,1834315,1834401,1834418,1834424,1834673,1834922,1835445,1835448,1835459,1836341,1836349,183
 6620,1836729,1836731,1836733,1836773,1836776,1836778,1836794,1836800,1839647,1839910,1839924,1839931,1839937,1839945,1839964,1839966,1841858,1841865,1841924,1843995,1844000,1844014,1844036,1844067,1844252,1846665,1847167,1851360,1856855
+/jackrabbit/trunk:1776907,1776911-1776912,1776914,1776918,1779166,1779460,1779614,1779632,1780208,1780220,1780335-1780336,1780406,1785225,1786325,1786330,1787043,1787381,1792100,1792105,1792113,1792193,1793315,1793323,1793327,1793332,1793339,1796980,1797209,1797215,1797917,1798586,1799429,1799538,1799549,1799575,1800359,1800378,1800752,1802925,1802977,1807234,1807244,1808752,1808754,1809149,1809329,1809624,1810108,1811667,1812543,1812634,1812994,1814831,1817094,1817097-1817098,1817100,1817113,1817201,1817213,1817373,1817377,1818586,1819269,1819271,1819839,1819849,1820119,1820133,1820294,1820573,1820675,1820753,1821247,1821475,1821597,1821705,1821880,1822643,1822863,1822947,1822950,1824756,1824763-1824764,1824771,1824876,1826178,1826230,1826647,1826940,1826964,1828213,1830107,1830201,1830540,1830753,1830814,1830878,1830951,1831854,1831860,1832058,1832090,1833374,1833835,1833891,1834008,1834308,1834315,1834401,1834418,1834424,1834673,1834922,1835445,1835448,1835459,1836341,1836349,183
 6620,1836729,1836731,1836733,1836773,1836776,1836778,1836794,1836800,1839647,1839910,1839924,1839931,1839937,1839945,1839964,1839966,1841858,1841865,1841924,1843995,1844000,1844014,1844036,1844067,1844252,1846665,1846896,1847167,1851360,1856855

Modified: jackrabbit/branches/2.14/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/SessionImporter.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.14/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/SessionImporter.java?rev=1858909&r1=1858908&r2=1858909&view=diff
==============================================================================
--- jackrabbit/branches/2.14/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/SessionImporter.java (original)
+++ jackrabbit/branches/2.14/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/SessionImporter.java Wed May  8 11:27:24 2019
@@ -372,15 +372,21 @@ public class SessionImporter implements
                     // this node has already been auto-created, no need to create it
                     node = existing;
                 } else {
-                    // edge case: colliding node does have same uuid
-                    // (see http://issues.apache.org/jira/browse/JCR-1128)
-                    if (!(existing.getId().equals(id)
-                            && (uuidBehavior == ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING
-                            || uuidBehavior == ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING))) {
+                    // prevent same-name-sibling (we come here only if !def.allowsSameNameSiblings())  
+                    boolean sameId = existing.getId().equals(id);
+                    if (!sameId 
+                        // IMPORT_UUID_CREATE_NEW with same id would also result in same-name-sibling 
+                        // (no other ImportUUIDBehaviour would result in same-name-sibling)
+                        || (sameId && uuidBehavior == ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW)) {
                         throw new ItemExistsException(
-                                "Node with the same UUID exists:" + existing);
+                            "Same name sibling not allowed for " + existing + " by definition " + def.getName() + " (declaring type " + def.getDeclaringNodeType().getName() + ")");
                     }
-                    // fall through
+                    // truth table for previous if statement (we come here only if names are same):
+                    // same id | CREATE_NEW
+                    // false   | false      => Exception: same name + different id would result in sibling  
+                    // false   | true       => Exception: same name + different id would result in sibling
+                    // true    | false      => fall through: same name + same id, either replacing or removing original node or throwing exception
+                    // true    | true       => Exception: same name + same id would result in sibling due to CREATE_NEW
                 }
             }
         }