Return-Path: X-Original-To: apmail-jackrabbit-commits-archive@www.apache.org Delivered-To: apmail-jackrabbit-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id F21AA974D for ; Wed, 25 Jan 2012 13:30:54 +0000 (UTC) Received: (qmail 14710 invoked by uid 500); 25 Jan 2012 13:30:54 -0000 Delivered-To: apmail-jackrabbit-commits-archive@jackrabbit.apache.org Received: (qmail 14528 invoked by uid 500); 25 Jan 2012 13:30:54 -0000 Mailing-List: contact commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jackrabbit.apache.org Delivered-To: mailing list commits@jackrabbit.apache.org Received: (qmail 14353 invoked by uid 99); 25 Jan 2012 13:30:53 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 25 Jan 2012 13:30:53 +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; Wed, 25 Jan 2012 13:30:48 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id A8A692388A40; Wed, 25 Jan 2012 13:30:28 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1235737 [3/7] - in /jackrabbit/branches/2.4: ./ examples/jackrabbit-firsthops/src/main/java/org/apache/jackrabbit/firsthops/ jackrabbit-api/src/main/java/org/apache/jackrabbit/api/ jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jmx... Date: Wed, 25 Jan 2012 13:30:25 -0000 To: commits@jackrabbit.apache.org From: jukka@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120125133028.A8A692388A40@eris.apache.org> Modified: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/VersioningTest.java URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/VersioningTest.java?rev=1235737&r1=1235736&r2=1235737&view=diff ============================================================================== --- jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/VersioningTest.java (original) +++ jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/VersioningTest.java Wed Jan 25 13:30:17 2012 @@ -1,215 +1,215 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.core.integration; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; - -import javax.jcr.Node; -import javax.jcr.Session; -import javax.jcr.version.Version; - -import org.apache.jackrabbit.test.AbstractJCRTest; - -/** - * Versioning tests. - */ -public class VersioningTest extends AbstractJCRTest { - - private Node n1; - private Node n2; - - protected void setUp() throws Exception { - super.setUp(); - - Session s1 = getHelper().getSuperuserSession(); - n1 = s1.getRootNode().addNode("VersioningTest"); - n1.addMixin(mixVersionable); - n1.getSession().save(); - - Session s2 = getHelper().getSuperuserSession(workspaceName); - s2.getWorkspace().clone( - s1.getWorkspace().getName(), n1.getPath(), - "/VersioningTest", true); - n2 = s2.getRootNode().getNode("VersioningTest"); - } - - protected void tearDown() throws Exception { - super.tearDown(); - - Session s1 = n1.getSession(); - n1.remove(); - s1.save(); - s1.logout(); - - Session s2 = n2.getSession(); - n2.remove(); - s2.save(); - s2.logout(); - } - - /** - * Tests that the version tree documented in - * AbstractVersionManager.calculateCheckinVersionName() can be - * constructed and has the expected version names. - *

- * Note that this test case needs to be modified if the version naming - * algorithm ever gets changed. - */ - public void testVersionGraph() throws Exception { - Version vR = n1.getBaseVersion(); - - Version v10 = n1.checkin(); - n1.checkout(); - Version v11 = n1.checkin(); - n1.checkout(); - Version v12 = n1.checkin(); - n1.checkout(); - Version v13 = n1.checkin(); - n1.checkout(); - Version v14 = n1.checkin(); - n1.checkout(); - Version v15 = n1.checkin(); - n1.checkout(); - Version v16 = n1.checkin(); - - n1.restore(v12, true); - n1.checkout(); - Version v120 = n1.checkin(); - n1.checkout(); - Version v121 = n1.checkin(); - n1.checkout(); - Version v122 = n1.checkin(); - - n1.restore(v12, true); - n1.checkout(); - Version v1200 = n1.checkin(); - - n1.restore(v121, true); - n1.checkout(); - Version v1210 = n1.checkin(); - n1.checkout(); - Version v1211 = n1.checkin(); - - // x.0 versions can be created if the newly created versionable - // node is cloned to another workspace before the first checkin - Version v20 = n2.checkin(); - - // Multiple branches can be merged using multiple workspaces - n2.restore(v122, true); - n1.restore(v16, true); - n1.checkout(); - n1.merge(n2.getSession().getWorkspace().getName(), true); - n1.doneMerge(v122); - Version v17 = n1.checkin(); - - assertEquals("jcr:rootVersion", vR.getName()); - assertPredecessors("", vR); - assertSuccessors("1.0 2.0", vR); - assertEquals("1.0", v10.getName()); - assertPredecessors("jcr:rootVersion", v10); - assertSuccessors("1.1", v10); - assertEquals("1.1", v11.getName()); - assertPredecessors("1.0", v11); - assertSuccessors("1.2", v11); - assertEquals("1.2", v12.getName()); - assertPredecessors("1.1", v12); - assertSuccessors("1.3 1.2.0 1.2.0.0", v12); - assertEquals("1.3", v13.getName()); - assertPredecessors("1.2", v13); - assertSuccessors("1.4", v13); - assertEquals("1.4", v14.getName()); - assertPredecessors("1.3", v14); - assertSuccessors("1.5", v14); - assertEquals("1.5", v15.getName()); - assertPredecessors("1.4", v15); - assertSuccessors("1.6", v15); - assertEquals("1.6", v16.getName()); - assertPredecessors("1.5", v16); - assertSuccessors("1.7", v16); - assertEquals("1.7", v17.getName()); - assertPredecessors("1.6 1.2.2", v17); - assertSuccessors("", v17); - - assertEquals("1.2.0", v120.getName()); - assertPredecessors("1.2", v120); - assertSuccessors("1.2.1", v120); - assertEquals("1.2.1", v121.getName()); - assertPredecessors("1.2.0", v121); - assertSuccessors("1.2.2 1.2.1.0", v121); - assertEquals("1.2.2", v122.getName()); - assertPredecessors("1.2.1", v122); - assertSuccessors("1.7", v122); - - assertEquals("1.2.0.0", v1200.getName()); - assertPredecessors("1.2", v1200); - assertSuccessors("", v1200); - - assertEquals("1.2.1.0", v1210.getName()); - assertPredecessors("1.2.1", v1210); - assertSuccessors("1.2.1.1", v1210); - assertEquals("1.2.1.1", v1211.getName()); - assertPredecessors("1.2.1.0", v1211); - assertSuccessors("", v1211); - - assertEquals("2.0", v20.getName()); - assertPredecessors("jcr:rootVersion", v20); - assertSuccessors("", v20); - } - - private void assertPredecessors(String expected, Version version) - throws Exception { - Set predecessors = new HashSet(); - if (expected.length() > 0) { - predecessors.addAll(Arrays.asList(expected.split(" "))); - } - Version[] versions = version.getPredecessors(); - for (int i = 0; i < versions.length; i++) { - if (!predecessors.remove(versions[i].getName())) { - fail("Version " + version.getName() - + " has an unexpected predessor " - + versions[i].getName()); - } - } - if (!predecessors.isEmpty()) { - fail("Version " + version.getName() - + " does not have all expected predecessors"); - } - } - - private void assertSuccessors(String expected, Version version) - throws Exception { - Set successors = new HashSet(); - if (expected.length() > 0) { - successors.addAll(Arrays.asList(expected.split(" "))); - } - Version[] versions = version.getSuccessors(); - for (int i = 0; i < versions.length; i++) { - if (!successors.remove(versions[i].getName())) { - fail("Version " + version.getName() - + " has an unexpected successor " - + versions[i].getName()); - } - } - if (!successors.isEmpty()) { - fail("Version " + version.getName() - + " does not have all expected successors"); - } - } - -} +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.core.integration; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import javax.jcr.Node; +import javax.jcr.Session; +import javax.jcr.version.Version; + +import org.apache.jackrabbit.test.AbstractJCRTest; + +/** + * Versioning tests. + */ +public class VersioningTest extends AbstractJCRTest { + + private Node n1; + private Node n2; + + protected void setUp() throws Exception { + super.setUp(); + + Session s1 = getHelper().getSuperuserSession(); + n1 = s1.getRootNode().addNode("VersioningTest"); + n1.addMixin(mixVersionable); + n1.getSession().save(); + + Session s2 = getHelper().getSuperuserSession(workspaceName); + s2.getWorkspace().clone( + s1.getWorkspace().getName(), n1.getPath(), + "/VersioningTest", true); + n2 = s2.getRootNode().getNode("VersioningTest"); + } + + protected void tearDown() throws Exception { + super.tearDown(); + + Session s1 = n1.getSession(); + n1.remove(); + s1.save(); + s1.logout(); + + Session s2 = n2.getSession(); + n2.remove(); + s2.save(); + s2.logout(); + } + + /** + * Tests that the version tree documented in + * AbstractVersionManager.calculateCheckinVersionName() can be + * constructed and has the expected version names. + *

+ * Note that this test case needs to be modified if the version naming + * algorithm ever gets changed. + */ + public void testVersionGraph() throws Exception { + Version vR = n1.getBaseVersion(); + + Version v10 = n1.checkin(); + n1.checkout(); + Version v11 = n1.checkin(); + n1.checkout(); + Version v12 = n1.checkin(); + n1.checkout(); + Version v13 = n1.checkin(); + n1.checkout(); + Version v14 = n1.checkin(); + n1.checkout(); + Version v15 = n1.checkin(); + n1.checkout(); + Version v16 = n1.checkin(); + + n1.restore(v12, true); + n1.checkout(); + Version v120 = n1.checkin(); + n1.checkout(); + Version v121 = n1.checkin(); + n1.checkout(); + Version v122 = n1.checkin(); + + n1.restore(v12, true); + n1.checkout(); + Version v1200 = n1.checkin(); + + n1.restore(v121, true); + n1.checkout(); + Version v1210 = n1.checkin(); + n1.checkout(); + Version v1211 = n1.checkin(); + + // x.0 versions can be created if the newly created versionable + // node is cloned to another workspace before the first checkin + Version v20 = n2.checkin(); + + // Multiple branches can be merged using multiple workspaces + n2.restore(v122, true); + n1.restore(v16, true); + n1.checkout(); + n1.merge(n2.getSession().getWorkspace().getName(), true); + n1.doneMerge(v122); + Version v17 = n1.checkin(); + + assertEquals("jcr:rootVersion", vR.getName()); + assertPredecessors("", vR); + assertSuccessors("1.0 2.0", vR); + assertEquals("1.0", v10.getName()); + assertPredecessors("jcr:rootVersion", v10); + assertSuccessors("1.1", v10); + assertEquals("1.1", v11.getName()); + assertPredecessors("1.0", v11); + assertSuccessors("1.2", v11); + assertEquals("1.2", v12.getName()); + assertPredecessors("1.1", v12); + assertSuccessors("1.3 1.2.0 1.2.0.0", v12); + assertEquals("1.3", v13.getName()); + assertPredecessors("1.2", v13); + assertSuccessors("1.4", v13); + assertEquals("1.4", v14.getName()); + assertPredecessors("1.3", v14); + assertSuccessors("1.5", v14); + assertEquals("1.5", v15.getName()); + assertPredecessors("1.4", v15); + assertSuccessors("1.6", v15); + assertEquals("1.6", v16.getName()); + assertPredecessors("1.5", v16); + assertSuccessors("1.7", v16); + assertEquals("1.7", v17.getName()); + assertPredecessors("1.6 1.2.2", v17); + assertSuccessors("", v17); + + assertEquals("1.2.0", v120.getName()); + assertPredecessors("1.2", v120); + assertSuccessors("1.2.1", v120); + assertEquals("1.2.1", v121.getName()); + assertPredecessors("1.2.0", v121); + assertSuccessors("1.2.2 1.2.1.0", v121); + assertEquals("1.2.2", v122.getName()); + assertPredecessors("1.2.1", v122); + assertSuccessors("1.7", v122); + + assertEquals("1.2.0.0", v1200.getName()); + assertPredecessors("1.2", v1200); + assertSuccessors("", v1200); + + assertEquals("1.2.1.0", v1210.getName()); + assertPredecessors("1.2.1", v1210); + assertSuccessors("1.2.1.1", v1210); + assertEquals("1.2.1.1", v1211.getName()); + assertPredecessors("1.2.1.0", v1211); + assertSuccessors("", v1211); + + assertEquals("2.0", v20.getName()); + assertPredecessors("jcr:rootVersion", v20); + assertSuccessors("", v20); + } + + private void assertPredecessors(String expected, Version version) + throws Exception { + Set predecessors = new HashSet(); + if (expected.length() > 0) { + predecessors.addAll(Arrays.asList(expected.split(" "))); + } + Version[] versions = version.getPredecessors(); + for (int i = 0; i < versions.length; i++) { + if (!predecessors.remove(versions[i].getName())) { + fail("Version " + version.getName() + + " has an unexpected predessor " + + versions[i].getName()); + } + } + if (!predecessors.isEmpty()) { + fail("Version " + version.getName() + + " does not have all expected predecessors"); + } + } + + private void assertSuccessors(String expected, Version version) + throws Exception { + Set successors = new HashSet(); + if (expected.length() > 0) { + successors.addAll(Arrays.asList(expected.split(" "))); + } + Version[] versions = version.getSuccessors(); + for (int i = 0; i < versions.length; i++) { + if (!successors.remove(versions[i].getName())) { + fail("Version " + version.getName() + + " has an unexpected successor " + + versions[i].getName()); + } + } + if (!successors.isEmpty()) { + fail("Version " + version.getName() + + " does not have all expected successors"); + } + } + +} Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/VersioningTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/benchmark/SimpleBench.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/lock/LockTimeoutTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/persistence/AutoFixCorruptNode.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/persistence/TestAll.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/LimitedAccessQueryTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2NodeLocalNameTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2OffsetLimitTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2OrderByTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2OuterJoinTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2TooManyClausesTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/BlockingParser.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/ComparableArrayTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/DecimalConvertTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/SQL2IndexingAggregateTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/SQL2IndexingAggregateTest2.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authentication/CryptedSimpleCredentialsTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/AuthorizableActionTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/NodeCreationTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/UserImporterTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/state/DefaultISMLockingDeadlockTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/stats/TimeSeriesRecorderTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/util/CooperativeFileLockTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/value/InternalValueFactoryTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/value/InternalValueTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/value/PathTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/value/TestAll.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/RestoreNodeWithSNSTest.java URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/RestoreNodeWithSNSTest.java?rev=1235737&r1=1235736&r2=1235737&view=diff ============================================================================== --- jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/RestoreNodeWithSNSTest.java (original) +++ jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/RestoreNodeWithSNSTest.java Wed Jan 25 13:30:17 2012 @@ -1,67 +1,67 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.core.version; - -import javax.jcr.Node; -import javax.jcr.version.Version; -import javax.jcr.version.VersionManager; - -import org.apache.jackrabbit.test.AbstractJCRTest; - -/** - * Test case for JCR-2930 - */ -public class RestoreNodeWithSNSTest extends AbstractJCRTest { - - public void testRestoreWithSNS() throws Exception { - - int childCount = 5; - - // create a test node with /childCount/ children with the same name - Node n = testRootNode.addNode(nodeName1); - n.addMixin(mixVersionable); - for (int i = 0; i < childCount; i++) { - Node child = n.addNode(nodeName2); - child.setProperty("name", nodeName2 + i); - } - testRootNode.getSession().save(); - - // check the number of children - assertEquals(childCount, n.getNodes().getSize()); - - VersionManager vm = testRootNode.getSession().getWorkspace() - .getVersionManager(); - vm.checkin(n.getPath()); - - // modify one child - vm.checkout(n.getPath()); - n.getNode(nodeName2).setProperty("name", "modified"); - testRootNode.getSession().save(); - - // check the number of children again - assertEquals(childCount, n.getNodes().getSize()); - - // restore base versiob - Version baseVersion = vm.getBaseVersion(n.getPath()); - vm.restore(baseVersion, true); - - n.getSession().refresh(false); - - // check the number of children again - assertEquals(childCount, n.getNodes().getSize()); - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.core.version; + +import javax.jcr.Node; +import javax.jcr.version.Version; +import javax.jcr.version.VersionManager; + +import org.apache.jackrabbit.test.AbstractJCRTest; + +/** + * Test case for JCR-2930 + */ +public class RestoreNodeWithSNSTest extends AbstractJCRTest { + + public void testRestoreWithSNS() throws Exception { + + int childCount = 5; + + // create a test node with /childCount/ children with the same name + Node n = testRootNode.addNode(nodeName1); + n.addMixin(mixVersionable); + for (int i = 0; i < childCount; i++) { + Node child = n.addNode(nodeName2); + child.setProperty("name", nodeName2 + i); + } + testRootNode.getSession().save(); + + // check the number of children + assertEquals(childCount, n.getNodes().getSize()); + + VersionManager vm = testRootNode.getSession().getWorkspace() + .getVersionManager(); + vm.checkin(n.getPath()); + + // modify one child + vm.checkout(n.getPath()); + n.getNode(nodeName2).setProperty("name", "modified"); + testRootNode.getSession().save(); + + // check the number of children again + assertEquals(childCount, n.getNodes().getSize()); + + // restore base versiob + Version baseVersion = vm.getBaseVersion(n.getPath()); + vm.restore(baseVersion, true); + + n.getSession().refresh(false); + + // check the number of children again + assertEquals(childCount, n.getNodes().getSize()); + } +} Propchange: jackrabbit/branches/2.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/RestoreNodeWithSNSTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jca/src/main/java/org/apache/jackrabbit/jca/AnonymousConnection.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-client/src/main/java/org/apache/jackrabbit/client/RepositoryFactoryImpl.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-client/src/test/java/org/apache/jackrabbit/client/RepositoryFactoryImplTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-client/src/test/java/org/apache/jackrabbit/client/RepositoryFactoryTest.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java?rev=1235737&r1=1235736&r2=1235737&view=diff ============================================================================== --- jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java (original) +++ jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java Wed Jan 25 13:30:17 2012 @@ -1,240 +1,240 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.commons; - -import java.util.HashMap; -import java.util.Map; - -import javax.jcr.NamespaceException; -import javax.jcr.NamespaceRegistry; -import javax.jcr.RepositoryException; -import javax.jcr.Session; - -import org.apache.jackrabbit.util.XMLChar; - -/** - * Helper class for working with JCR namespaces. - * - * @since Jackrabbit JCR Commons 1.5 - */ -public class NamespaceHelper { - - /** - * The jcr namespace URI. - */ - public static final String JCR = "http://www.jcp.org/jcr/1.0"; - - /** - * The nt namespace URI. - */ - public static final String NT = "http://www.jcp.org/jcr/nt/1.0"; - - /** - * The mix namespace URI. - */ - public static final String MIX = "http://www.jcp.org/jcr/mix/1.0"; - - /** - * Current session. - */ - private final Session session; - - /** - * Creates a namespace helper for the given session. - * - * @param session current session - */ - public NamespaceHelper(Session session) { - this.session = session; - } - - /** - * Returns a map containing all prefix to namespace URI mappings of - * the current session. The returned map is newly allocated and can - * can be freely modified by the caller. - * - * @see Session#getNamespacePrefixes() - * @return namespace mappings - * @throws RepositoryException if the namespaces could not be retrieved - */ - public Map getNamespaces() throws RepositoryException { - Map namespaces = new HashMap(); - String[] prefixes = session.getNamespacePrefixes(); - for (String prefixe : prefixes) { - namespaces.put(prefixe, session.getNamespaceURI(prefixe)); - } - return namespaces; - } - - /** - * Returns the prefix mapped to the given namespace URI in the current - * session, or null if the namespace does not exist. - * - * @see Session#getNamespacePrefix(String) - * @param uri namespace URI - * @return namespace prefix, or null - * @throws RepositoryException if the namespace could not be retrieved - */ - public String getPrefix(String uri) throws RepositoryException { - try { - return session.getNamespacePrefix(uri); - } catch (NamespaceException e) { - return null; - } - } - - /** - * Returns the namespace URI mapped to the given prefix in the current - * session, or null if the namespace does not exist. - * - * @see Session#getNamespaceURI(String) - * @param prefix namespace prefix - * @return namespace prefix, or null - * @throws RepositoryException if the namespace could not be retrieved - */ - public String getURI(String prefix) throws RepositoryException { - try { - return session.getNamespaceURI(prefix); - } catch (NamespaceException e) { - return null; - } - } - - /** - * Returns the prefixed JCR name for the given namespace URI and local - * name in the current session. - * - * @param uri namespace URI - * @param name local name - * @return prefixed JCR name - * @throws NamespaceException if the namespace does not exist - * @throws RepositoryException if the namespace could not be retrieved - */ - public String getJcrName(String uri, String name) - throws NamespaceException, RepositoryException { - if (uri != null && uri.length() > 0) { - return session.getNamespacePrefix(uri) + ":" + name; - } else { - return name; - } - } - - /** - * Replaces the standard jcr, nt, or - * mix prefix in the given name with the prefix - * mapped to that namespace in the current session. - *

- * The purpose of this method is to make it easier to write - * namespace-aware code that uses names in the standard JCR namespaces. - * For example: - *

-     *     node.getProperty(helper.getName("jcr:data"));
-     * 
- * - * @param name prefixed name using the standard JCR prefixes - * @return prefixed name using the current session namespace mappings - * @throws IllegalArgumentException if the prefix is unknown - * @throws RepositoryException if the namespace could not be retrieved - */ - public String getJcrName(String name) - throws IllegalArgumentException, RepositoryException { - String standardPrefix; - String currentPrefix; - - if (name.startsWith("jcr:")) { - standardPrefix = "jcr"; - currentPrefix = session.getNamespacePrefix(JCR); - } else if (name.startsWith("nt:")) { - standardPrefix = "nt"; - currentPrefix = session.getNamespacePrefix(NT); - } else if (name.startsWith("mix:")) { - standardPrefix = "mix"; - currentPrefix = session.getNamespacePrefix(MIX); - } else { - throw new IllegalArgumentException("Unknown prefix: " + name); - } - - if (currentPrefix.equals(standardPrefix)) { - return name; - } else { - return currentPrefix + name.substring(standardPrefix.length()); - } - } - - /** - * Safely registers the given namespace. If the namespace already exists, - * then the prefix mapped to the namespace in the current session is - * returned. Otherwise the namespace is registered to the namespace - * registry. If the given prefix is already registered for some other - * namespace or otherwise invalid, then another prefix is automatically - * generated. After the namespace has been registered, the prefix mapped - * to it in the current session is returned. - * - * @see NamespaceRegistry#registerNamespace(String, String) - * @param prefix namespace prefix - * @param uri namespace URI - * @return namespace prefix in the current session - * @throws RepositoryException if the namespace could not be registered - */ - public String registerNamespace(String prefix, String uri) - throws RepositoryException { - NamespaceRegistry registry = - session.getWorkspace().getNamespaceRegistry(); - try { - // Check if the namespace is registered - registry.getPrefix(uri); - } catch (NamespaceException e1) { - // Replace troublesome prefix hints - if (prefix == null || prefix.length() == 0 - || prefix.toLowerCase().startsWith("xml") - || !XMLChar.isValidNCName(prefix)) { - prefix = "ns"; // ns, ns2, ns3, ns4, ... - } - - // Loop until an unused prefix is found - try { - String base = prefix; - for (int i = 2; true; i++) { - registry.getURI(prefix); - prefix = base + i; - } - } catch (NamespaceException e2) { - // Exit the loop - } - - // Register the namespace - registry.registerNamespace(prefix, uri); - } - - return session.getNamespacePrefix(uri); - } - - /** - * Safely registers all namespaces in the given map from - * prefixes to namespace URIs. - * - * @param namespaces namespace mappings - * @throws RepositoryException if the namespaces could not be registered - */ - public void registerNamespaces(Map namespaces) throws RepositoryException { - for (Map.Entry stringStringEntry : namespaces.entrySet()) { - Map.Entry entry = stringStringEntry; - registerNamespace(entry.getKey(), entry.getValue()); - } - } - -} +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.commons; + +import java.util.HashMap; +import java.util.Map; + +import javax.jcr.NamespaceException; +import javax.jcr.NamespaceRegistry; +import javax.jcr.RepositoryException; +import javax.jcr.Session; + +import org.apache.jackrabbit.util.XMLChar; + +/** + * Helper class for working with JCR namespaces. + * + * @since Jackrabbit JCR Commons 1.5 + */ +public class NamespaceHelper { + + /** + * The jcr namespace URI. + */ + public static final String JCR = "http://www.jcp.org/jcr/1.0"; + + /** + * The nt namespace URI. + */ + public static final String NT = "http://www.jcp.org/jcr/nt/1.0"; + + /** + * The mix namespace URI. + */ + public static final String MIX = "http://www.jcp.org/jcr/mix/1.0"; + + /** + * Current session. + */ + private final Session session; + + /** + * Creates a namespace helper for the given session. + * + * @param session current session + */ + public NamespaceHelper(Session session) { + this.session = session; + } + + /** + * Returns a map containing all prefix to namespace URI mappings of + * the current session. The returned map is newly allocated and can + * can be freely modified by the caller. + * + * @see Session#getNamespacePrefixes() + * @return namespace mappings + * @throws RepositoryException if the namespaces could not be retrieved + */ + public Map getNamespaces() throws RepositoryException { + Map namespaces = new HashMap(); + String[] prefixes = session.getNamespacePrefixes(); + for (String prefixe : prefixes) { + namespaces.put(prefixe, session.getNamespaceURI(prefixe)); + } + return namespaces; + } + + /** + * Returns the prefix mapped to the given namespace URI in the current + * session, or null if the namespace does not exist. + * + * @see Session#getNamespacePrefix(String) + * @param uri namespace URI + * @return namespace prefix, or null + * @throws RepositoryException if the namespace could not be retrieved + */ + public String getPrefix(String uri) throws RepositoryException { + try { + return session.getNamespacePrefix(uri); + } catch (NamespaceException e) { + return null; + } + } + + /** + * Returns the namespace URI mapped to the given prefix in the current + * session, or null if the namespace does not exist. + * + * @see Session#getNamespaceURI(String) + * @param prefix namespace prefix + * @return namespace prefix, or null + * @throws RepositoryException if the namespace could not be retrieved + */ + public String getURI(String prefix) throws RepositoryException { + try { + return session.getNamespaceURI(prefix); + } catch (NamespaceException e) { + return null; + } + } + + /** + * Returns the prefixed JCR name for the given namespace URI and local + * name in the current session. + * + * @param uri namespace URI + * @param name local name + * @return prefixed JCR name + * @throws NamespaceException if the namespace does not exist + * @throws RepositoryException if the namespace could not be retrieved + */ + public String getJcrName(String uri, String name) + throws NamespaceException, RepositoryException { + if (uri != null && uri.length() > 0) { + return session.getNamespacePrefix(uri) + ":" + name; + } else { + return name; + } + } + + /** + * Replaces the standard jcr, nt, or + * mix prefix in the given name with the prefix + * mapped to that namespace in the current session. + *

+ * The purpose of this method is to make it easier to write + * namespace-aware code that uses names in the standard JCR namespaces. + * For example: + *

+     *     node.getProperty(helper.getName("jcr:data"));
+     * 
+ * + * @param name prefixed name using the standard JCR prefixes + * @return prefixed name using the current session namespace mappings + * @throws IllegalArgumentException if the prefix is unknown + * @throws RepositoryException if the namespace could not be retrieved + */ + public String getJcrName(String name) + throws IllegalArgumentException, RepositoryException { + String standardPrefix; + String currentPrefix; + + if (name.startsWith("jcr:")) { + standardPrefix = "jcr"; + currentPrefix = session.getNamespacePrefix(JCR); + } else if (name.startsWith("nt:")) { + standardPrefix = "nt"; + currentPrefix = session.getNamespacePrefix(NT); + } else if (name.startsWith("mix:")) { + standardPrefix = "mix"; + currentPrefix = session.getNamespacePrefix(MIX); + } else { + throw new IllegalArgumentException("Unknown prefix: " + name); + } + + if (currentPrefix.equals(standardPrefix)) { + return name; + } else { + return currentPrefix + name.substring(standardPrefix.length()); + } + } + + /** + * Safely registers the given namespace. If the namespace already exists, + * then the prefix mapped to the namespace in the current session is + * returned. Otherwise the namespace is registered to the namespace + * registry. If the given prefix is already registered for some other + * namespace or otherwise invalid, then another prefix is automatically + * generated. After the namespace has been registered, the prefix mapped + * to it in the current session is returned. + * + * @see NamespaceRegistry#registerNamespace(String, String) + * @param prefix namespace prefix + * @param uri namespace URI + * @return namespace prefix in the current session + * @throws RepositoryException if the namespace could not be registered + */ + public String registerNamespace(String prefix, String uri) + throws RepositoryException { + NamespaceRegistry registry = + session.getWorkspace().getNamespaceRegistry(); + try { + // Check if the namespace is registered + registry.getPrefix(uri); + } catch (NamespaceException e1) { + // Replace troublesome prefix hints + if (prefix == null || prefix.length() == 0 + || prefix.toLowerCase().startsWith("xml") + || !XMLChar.isValidNCName(prefix)) { + prefix = "ns"; // ns, ns2, ns3, ns4, ... + } + + // Loop until an unused prefix is found + try { + String base = prefix; + for (int i = 2; true; i++) { + registry.getURI(prefix); + prefix = base + i; + } + } catch (NamespaceException e2) { + // Exit the loop + } + + // Register the namespace + registry.registerNamespace(prefix, uri); + } + + return session.getNamespacePrefix(uri); + } + + /** + * Safely registers all namespaces in the given map from + * prefixes to namespace URIs. + * + * @param namespaces namespace mappings + * @throws RepositoryException if the namespaces could not be registered + */ + public void registerNamespaces(Map namespaces) throws RepositoryException { + for (Map.Entry stringStringEntry : namespaces.entrySet()) { + Map.Entry entry = stringStringEntry; + registerNamespace(entry.getKey(), entry.getValue()); + } + } + +} Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/SimpleValueFactory.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/package-info.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/BTreeManager.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/ItemSequence.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/NodeSequence.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/PropertySequence.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/Rank.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/Sequence.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/SizedIterator.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/TreeManager.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/TreeTraverser.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/package-info.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/iterator/LazyIteratorChain.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/iterator/SizedIterator.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/iterator/package-info.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/jackrabbit/user/package-info.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/package-info.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/package-info.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/packaging/ContentPackage.java URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/packaging/ContentPackage.java?rev=1235737&r1=1235736&r2=1235737&view=diff ============================================================================== --- jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/packaging/ContentPackage.java (original) +++ jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/packaging/ContentPackage.java Wed Jan 25 13:30:17 2012 @@ -1,27 +1,27 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.commons.packaging; - -import java.util.Iterator; - -import javax.jcr.RepositoryException; -import javax.jcr.Session; - -public interface ContentPackage { - - Iterator getItems(Session session) throws RepositoryException; -} +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.commons.packaging; + +import java.util.Iterator; + +import javax.jcr.RepositoryException; +import javax.jcr.Session; + +public interface ContentPackage { + + Iterator getItems(Session session) throws RepositoryException; +} Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/packaging/ContentPackage.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/packaging/ContentPackageExporter.java URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/packaging/ContentPackageExporter.java?rev=1235737&r1=1235736&r2=1235737&view=diff ============================================================================== --- jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/packaging/ContentPackageExporter.java (original) +++ jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/packaging/ContentPackageExporter.java Wed Jan 25 13:30:17 2012 @@ -1,27 +1,27 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.commons.packaging; - -import java.io.OutputStream; - -import javax.jcr.RepositoryException; - -public interface ContentPackageExporter { - - void export(ContentPackage description, OutputStream out) - throws RepositoryException; -} +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.commons.packaging; + +import java.io.OutputStream; + +import javax.jcr.RepositoryException; + +public interface ContentPackageExporter { + + void export(ContentPackage description, OutputStream out) + throws RepositoryException; +} Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/packaging/ContentPackageExporter.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/packaging/FilterContentPackage.java URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/packaging/FilterContentPackage.java?rev=1235737&r1=1235736&r2=1235737&view=diff ============================================================================== --- jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/packaging/FilterContentPackage.java (original) +++ jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/packaging/FilterContentPackage.java Wed Jan 25 13:30:17 2012 @@ -1,205 +1,205 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.commons.packaging; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.NoSuchElementException; - -import javax.jcr.Item; -import javax.jcr.Node; -import javax.jcr.NodeIterator; -import javax.jcr.PropertyIterator; -import javax.jcr.RepositoryException; -import javax.jcr.Session; - -import org.apache.jackrabbit.commons.predicate.Predicate; - -public class FilterContentPackage implements ContentPackage { - - protected final List content = new ArrayList(); - - protected boolean includeProperties = false; - - public void addContent(String path, Predicate filterList) { - this.content.add(new Content(new String[] {path}, filterList)); - } - - public void addContent(String[] paths, Predicate filterList) { - this.content.add(new Content(paths, filterList)); - } - - /** - * @see org.apache.jackrabbit.commons.packaging.ContentPackage#getItems(javax.jcr.Session) - */ - public Iterator getItems(Session session) - throws RepositoryException { - return new FilteringIterator(session, new ArrayList(this.content), this.includeProperties); - } - - protected static class Content { - protected final String[] paths; - protected final Predicate filterList; - - public Content(String[] paths, Predicate filterList) { - this.paths = paths; - this.filterList = filterList; - } - } - - public static class FilteringIterator implements Iterator { - - /** The content we will iterate over. */ - protected final List content; - - /** - * Filter that defines which items are included - */ - protected Predicate includeFilter; - - protected int contentIndex, pathIndex; - - protected Item nextItem; - - protected Node lastNode; - - protected final Session session; - - protected final List nodeIteratorStack = new ArrayList(); - - protected final boolean includeProperties; - - protected PropertyIterator propertyIterator; - - /** - * Creates a new tree walker that uses the given filter as include and - * traversal filter. - * - * @param session The session. - * @param contentList The list of content objects. - * @param includeProperties Should properties be included. - */ - public FilteringIterator(final Session session, - final List contentList, - final boolean includeProperties) { - this.content = contentList; - this.session = session; - this.includeProperties = includeProperties; - } - - /** - * @see java.util.Iterator#hasNext() - */ - public boolean hasNext() { - if ( this.nextItem != null ) { - return true; - } - try { - return this.checkForNextNode(); - } catch (RepositoryException e) { - // if any error occurs, we stop iterating - return false; - } - } - - protected boolean checkForNextNode() throws RepositoryException { - if ( this.propertyIterator != null ) { - if ( this.propertyIterator.hasNext() ) { - this.nextItem = this.propertyIterator.nextProperty(); - return true; - } - this.propertyIterator = null; - } else if ( this.includeProperties && this.lastNode != null ) { - if ( this.lastNode.hasProperties() ) { - this.propertyIterator = this.lastNode.getProperties(); - this.propertyIterator.hasNext(); - this.nextItem = this.propertyIterator.nextProperty(); - return true; - } - } - if ( this.lastNode != null ) { - - if ( this.lastNode.hasNodes() ) { - final NodeIterator iter = this.lastNode.getNodes(); - this.nodeIteratorStack.add(iter); - } - while ( this.nodeIteratorStack.size() > 0 ) { - final NodeIterator iter = (NodeIterator)this.nodeIteratorStack.get(this.nodeIteratorStack.size() - 1); - if ( iter.hasNext() ) { - do { - final Node contextNode = iter.nextNode(); - if ( this.includeFilter.evaluate(contextNode) ) { - this.lastNode = contextNode; - this.nextItem = contextNode; - return true; - } - } while ( iter.hasNext() ); - } - this.nodeIteratorStack.remove(iter); - } - this.pathIndex++; - this.lastNode = null; - } - while ( this.contentIndex < this.content.size() ) { - final Content content = (Content)this.content.get(this.contentIndex); - this.includeFilter = content.filterList; - while ( this.pathIndex < content.paths.length ) { - final String path = content.paths[this.pathIndex]; - this.pathIndex++; - final Node contextNode = (Node)this.session.getItem(path); - if ( this.includeFilter.evaluate(contextNode) ) { - this.lastNode = contextNode; - this.nextItem = contextNode; - return true; - } - } - this.contentIndex++; - this.pathIndex = 0; - } - - return false; - } - - /** - * @see java.util.Iterator#next() - */ - public Object next() { - if ( this.hasNext() ) { - final Item result = nextItem; - this.nextItem = null; - return result; - } - throw new NoSuchElementException("No more elements available"); - } - - /** - * @see java.util.Iterator#remove() - */ - public void remove() { - throw new UnsupportedOperationException("Remove is not supported."); - } - } - - public boolean isIncludeProperties() { - return includeProperties; - } - - public void setIncludeProperties(boolean includeProperties) { - this.includeProperties = includeProperties; - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.commons.packaging; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; + +import javax.jcr.Item; +import javax.jcr.Node; +import javax.jcr.NodeIterator; +import javax.jcr.PropertyIterator; +import javax.jcr.RepositoryException; +import javax.jcr.Session; + +import org.apache.jackrabbit.commons.predicate.Predicate; + +public class FilterContentPackage implements ContentPackage { + + protected final List content = new ArrayList(); + + protected boolean includeProperties = false; + + public void addContent(String path, Predicate filterList) { + this.content.add(new Content(new String[] {path}, filterList)); + } + + public void addContent(String[] paths, Predicate filterList) { + this.content.add(new Content(paths, filterList)); + } + + /** + * @see org.apache.jackrabbit.commons.packaging.ContentPackage#getItems(javax.jcr.Session) + */ + public Iterator getItems(Session session) + throws RepositoryException { + return new FilteringIterator(session, new ArrayList(this.content), this.includeProperties); + } + + protected static class Content { + protected final String[] paths; + protected final Predicate filterList; + + public Content(String[] paths, Predicate filterList) { + this.paths = paths; + this.filterList = filterList; + } + } + + public static class FilteringIterator implements Iterator { + + /** The content we will iterate over. */ + protected final List content; + + /** + * Filter that defines which items are included + */ + protected Predicate includeFilter; + + protected int contentIndex, pathIndex; + + protected Item nextItem; + + protected Node lastNode; + + protected final Session session; + + protected final List nodeIteratorStack = new ArrayList(); + + protected final boolean includeProperties; + + protected PropertyIterator propertyIterator; + + /** + * Creates a new tree walker that uses the given filter as include and + * traversal filter. + * + * @param session The session. + * @param contentList The list of content objects. + * @param includeProperties Should properties be included. + */ + public FilteringIterator(final Session session, + final List contentList, + final boolean includeProperties) { + this.content = contentList; + this.session = session; + this.includeProperties = includeProperties; + } + + /** + * @see java.util.Iterator#hasNext() + */ + public boolean hasNext() { + if ( this.nextItem != null ) { + return true; + } + try { + return this.checkForNextNode(); + } catch (RepositoryException e) { + // if any error occurs, we stop iterating + return false; + } + } + + protected boolean checkForNextNode() throws RepositoryException { + if ( this.propertyIterator != null ) { + if ( this.propertyIterator.hasNext() ) { + this.nextItem = this.propertyIterator.nextProperty(); + return true; + } + this.propertyIterator = null; + } else if ( this.includeProperties && this.lastNode != null ) { + if ( this.lastNode.hasProperties() ) { + this.propertyIterator = this.lastNode.getProperties(); + this.propertyIterator.hasNext(); + this.nextItem = this.propertyIterator.nextProperty(); + return true; + } + } + if ( this.lastNode != null ) { + + if ( this.lastNode.hasNodes() ) { + final NodeIterator iter = this.lastNode.getNodes(); + this.nodeIteratorStack.add(iter); + } + while ( this.nodeIteratorStack.size() > 0 ) { + final NodeIterator iter = (NodeIterator)this.nodeIteratorStack.get(this.nodeIteratorStack.size() - 1); + if ( iter.hasNext() ) { + do { + final Node contextNode = iter.nextNode(); + if ( this.includeFilter.evaluate(contextNode) ) { + this.lastNode = contextNode; + this.nextItem = contextNode; + return true; + } + } while ( iter.hasNext() ); + } + this.nodeIteratorStack.remove(iter); + } + this.pathIndex++; + this.lastNode = null; + } + while ( this.contentIndex < this.content.size() ) { + final Content content = (Content)this.content.get(this.contentIndex); + this.includeFilter = content.filterList; + while ( this.pathIndex < content.paths.length ) { + final String path = content.paths[this.pathIndex]; + this.pathIndex++; + final Node contextNode = (Node)this.session.getItem(path); + if ( this.includeFilter.evaluate(contextNode) ) { + this.lastNode = contextNode; + this.nextItem = contextNode; + return true; + } + } + this.contentIndex++; + this.pathIndex = 0; + } + + return false; + } + + /** + * @see java.util.Iterator#next() + */ + public Object next() { + if ( this.hasNext() ) { + final Item result = nextItem; + this.nextItem = null; + return result; + } + throw new NoSuchElementException("No more elements available"); + } + + /** + * @see java.util.Iterator#remove() + */ + public void remove() { + throw new UnsupportedOperationException("Remove is not supported."); + } + } + + public boolean isIncludeProperties() { + return includeProperties; + } + + public void setIncludeProperties(boolean includeProperties) { + this.includeProperties = includeProperties; + } +} Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/packaging/FilterContentPackage.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/packaging/package-info.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/predicate/package-info.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/package-info.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/qom/Operator.java URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/qom/Operator.java?rev=1235737&r1=1235736&r2=1235737&view=diff ============================================================================== --- jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/qom/Operator.java (original) +++ jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/qom/Operator.java Wed Jan 25 13:30:17 2012 @@ -1,161 +1,161 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.commons.query.qom; - -import javax.jcr.RepositoryException; -import javax.jcr.query.qom.Comparison; -import javax.jcr.query.qom.DynamicOperand; -import javax.jcr.query.qom.QueryObjectModelConstants; -import javax.jcr.query.qom.QueryObjectModelFactory; -import javax.jcr.query.qom.StaticOperand; - -/** - * Enumeration of the JCR 2.0 query operators. - * - * @since Apache Jackrabbit 2.0 - */ -public enum Operator { - - EQ(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, "="), - - NE(QueryObjectModelConstants.JCR_OPERATOR_NOT_EQUAL_TO, "!=", "<>"), - - GT(QueryObjectModelConstants.JCR_OPERATOR_GREATER_THAN, ">"), - - GE(QueryObjectModelConstants.JCR_OPERATOR_GREATER_THAN_OR_EQUAL_TO, ">="), - - LT(QueryObjectModelConstants.JCR_OPERATOR_LESS_THAN, "<"), - - LE(QueryObjectModelConstants.JCR_OPERATOR_LESS_THAN_OR_EQUAL_TO, "<="), - - LIKE(QueryObjectModelConstants.JCR_OPERATOR_LIKE, null, "like"); - - /** - * JCR name of this operator. - */ - private final String name; - - /** - * This operator in XPath syntax. - */ - private final String xpath; - - /** - * This operator in SQL syntax. - */ - private final String sql; - - private Operator(String name, String op) { - this(name, op, op); - } - - private Operator(String name, String xpath, String sql) { - this.name = name; - this.xpath = xpath; - this.sql = sql; - } - - /** - * Returns a comparison between the given operands using this operator. - * - * @param factory factory for creating the comparison - * @param left operand on the left hand side - * @param right operand on the right hand side - * @return comparison - * @throws RepositoryException if the comparison can not be created - */ - public Comparison comparison( - QueryObjectModelFactory factory, - DynamicOperand left, StaticOperand right) - throws RepositoryException { - return factory.comparison(left, name, right); - } - - /** - * Formats an XPath constraint with this operator and the given operands. - * The operands are simply used as-is, without any quoting or escaping. - * - * @param a first operand - * @param b second operand - * @return XPath constraint, a op b or - * jcr:like(a, b) for {@link #LIKE} - */ - public String formatXpath(String a, String b) { - if (this == LIKE) { - return "jcr:like(" + a + ", " + b + ")"; - } else { - return a + " " + xpath + " " + b; - } - } - - /** - * Formats an SQL constraint with this operator and the given operands. - * The operands are simply used as-is, without any quoting or escaping. - * - * @param a first operand - * @param b second operand - * @return SQL constraint, a op b - */ - public String formatSql(String a, String b) { - return a + " " + sql + " " + b; - } - - /** - * Returns the JCR 2.0 name of this query operator. - * - * @see QueryObjectModelConstants - * @return JCR name of this operator - */ - public String toString() { - return name; - } - - /** - * Returns an array of the names of all the JCR 2.0 query operators. - * - * @return names of all query operators - */ - public static String[] getAllQueryOperators() { - return new String[] { - EQ.toString(), - NE.toString(), - GT.toString(), - GE.toString(), - LT.toString(), - LE.toString(), - LIKE.toString() - }; - } - - /** - * Returns the operator with the given JCR name. - * - * @param name JCR name of an operator - * @return operator with the given name - * @throws RepositoryException if the given name is unknown - */ - public static Operator getOperatorByName(String name) - throws RepositoryException { - for (Operator operator : Operator.values()) { - if (operator.name.equals(name)) { - return operator; - } - } - throw new RepositoryException("Unknown operator name: " + name); - } - -} +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.commons.query.qom; + +import javax.jcr.RepositoryException; +import javax.jcr.query.qom.Comparison; +import javax.jcr.query.qom.DynamicOperand; +import javax.jcr.query.qom.QueryObjectModelConstants; +import javax.jcr.query.qom.QueryObjectModelFactory; +import javax.jcr.query.qom.StaticOperand; + +/** + * Enumeration of the JCR 2.0 query operators. + * + * @since Apache Jackrabbit 2.0 + */ +public enum Operator { + + EQ(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, "="), + + NE(QueryObjectModelConstants.JCR_OPERATOR_NOT_EQUAL_TO, "!=", "<>"), + + GT(QueryObjectModelConstants.JCR_OPERATOR_GREATER_THAN, ">"), + + GE(QueryObjectModelConstants.JCR_OPERATOR_GREATER_THAN_OR_EQUAL_TO, ">="), + + LT(QueryObjectModelConstants.JCR_OPERATOR_LESS_THAN, "<"), + + LE(QueryObjectModelConstants.JCR_OPERATOR_LESS_THAN_OR_EQUAL_TO, "<="), + + LIKE(QueryObjectModelConstants.JCR_OPERATOR_LIKE, null, "like"); + + /** + * JCR name of this operator. + */ + private final String name; + + /** + * This operator in XPath syntax. + */ + private final String xpath; + + /** + * This operator in SQL syntax. + */ + private final String sql; + + private Operator(String name, String op) { + this(name, op, op); + } + + private Operator(String name, String xpath, String sql) { + this.name = name; + this.xpath = xpath; + this.sql = sql; + } + + /** + * Returns a comparison between the given operands using this operator. + * + * @param factory factory for creating the comparison + * @param left operand on the left hand side + * @param right operand on the right hand side + * @return comparison + * @throws RepositoryException if the comparison can not be created + */ + public Comparison comparison( + QueryObjectModelFactory factory, + DynamicOperand left, StaticOperand right) + throws RepositoryException { + return factory.comparison(left, name, right); + } + + /** + * Formats an XPath constraint with this operator and the given operands. + * The operands are simply used as-is, without any quoting or escaping. + * + * @param a first operand + * @param b second operand + * @return XPath constraint, a op b or + * jcr:like(a, b) for {@link #LIKE} + */ + public String formatXpath(String a, String b) { + if (this == LIKE) { + return "jcr:like(" + a + ", " + b + ")"; + } else { + return a + " " + xpath + " " + b; + } + } + + /** + * Formats an SQL constraint with this operator and the given operands. + * The operands are simply used as-is, without any quoting or escaping. + * + * @param a first operand + * @param b second operand + * @return SQL constraint, a op b + */ + public String formatSql(String a, String b) { + return a + " " + sql + " " + b; + } + + /** + * Returns the JCR 2.0 name of this query operator. + * + * @see QueryObjectModelConstants + * @return JCR name of this operator + */ + public String toString() { + return name; + } + + /** + * Returns an array of the names of all the JCR 2.0 query operators. + * + * @return names of all query operators + */ + public static String[] getAllQueryOperators() { + return new String[] { + EQ.toString(), + NE.toString(), + GT.toString(), + GE.toString(), + LT.toString(), + LE.toString(), + LIKE.toString() + }; + } + + /** + * Returns the operator with the given JCR name. + * + * @param name JCR name of an operator + * @return operator with the given name + * @throws RepositoryException if the given name is unknown + */ + public static Operator getOperatorByName(String name) + throws RepositoryException { + for (Operator operator : Operator.values()) { + if (operator.name.equals(name)) { + return operator; + } + } + throw new RepositoryException("Unknown operator name: " + name); + } + +} Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/qom/Operator.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/qom/package-info.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/branches/2.4/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/sql2/package-info.java ------------------------------------------------------------------------------ svn:eol-style = native