You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by kn...@apache.org on 2009/05/22 01:11:42 UTC

svn commit: r777313 [1/5] - in /jackrabbit/sandbox/JCR-1456: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/ jackr...

Author: knopp
Date: Thu May 21 23:11:22 2009
New Revision: 777313

URL: http://svn.apache.org/viewvc?rev=777313&view=rev
Log:
Update to rev 777034

Added:
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryCopier.java
      - copied unchanged from r777034, jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryCopier.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/PersistenceCopier.java
      - copied unchanged from r777034, jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/PersistenceCopier.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/JcrUtils.java
      - copied unchanged from r777034, jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/JcrUtils.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/iterator/NodeIterable.java
      - copied unchanged from r777034, jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/iterator/NodeIterable.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/iterator/PropertyIterable.java
      - copied unchanged from r777034, jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/iterator/PropertyIterable.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/iterator/RowIterable.java
      - copied unchanged from r777034, jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/iterator/RowIterable.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/DecimalValue.java
      - copied unchanged from r777034, jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/DecimalValue.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/URIValue.java
      - copied unchanged from r777034, jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/URIValue.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/WeakReferenceValue.java
      - copied unchanged from r777034, jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/WeakReferenceValue.java
Modified:
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/JackrabbitRepositoryStub.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryFactoryImpl.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/TransientRepository.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfig.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/XAEnvironment.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/XALockManager.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/ValueConstraint.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/BundleBinding.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/ItemStateBinding.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValueFactory.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/resources/org/apache/jackrabbit/core/JackrabbitRepositoryStub.properties   (props changed)
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/resources/org/apache/jackrabbit/core/test-nodetypes.xml   (props changed)
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/TestRepository.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/XATest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/config/RepositoryConfigTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/test/repository/workspaces/default/indexing-configuration.xml   (props changed)
    jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/test/resources/org/apache/jackrabbit/core/nodetype/xml/nodetypes.dtd
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/XMLChar.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/BaseValue.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/ValueFactoryImpl.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/value/ValueHelper.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/DefaultHandler.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/AbstractJCRTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/ISO8601.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/NotExecutableException.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/RepositoryHelper.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/RepositoryStub.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/XMLChar.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/AddNodeTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/DocumentViewImportTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/ExportDocViewTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NamespaceRegistryTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeAddMixinTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeItemIsModifiedTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeItemIsNewTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeOrderableChildNodesTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeRemoveMixinTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeUUIDTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/PropertyItemIsModifiedTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/PropertyItemIsNewTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SerializationTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SessionTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SessionUUIDTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SetValueBinaryTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SetValueBooleanTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SetValueDateTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SetValueDoubleTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SetValueLongTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SetValueReferenceTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SetValueStringTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/StringPropertyTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/TreeComparator.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeDefTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/observation/AddEventListenerTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/observation/EventIteratorTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/observation/EventResult.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/observation/EventTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/observation/LockingTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/observation/NodeAddedTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/observation/NodeMovedTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/observation/NodeRemovedTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/observation/NodeReorderTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/observation/PropertyAddedTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/observation/PropertyChangedTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/observation/PropertyRemovedTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/observation/WorkspaceOperationTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/AbstractQueryLevel2Test.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLOrderByTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLQueryLevel2Test.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SaveTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/XPathDocOrderTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/XPathOrderByTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/XPathPosIndexTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/XPathQueryLevel2Test.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/AbstractOnParentVersionTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/AbstractVersionTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/CheckinTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/CheckoutTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/FrozenNodeTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/RestoreTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/AbstractVersionTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/CheckinTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/CheckoutTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/CopyTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/FrozenNodeTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/RestoreTest.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/AbstractQValue.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/value/QValueFactoryImpl.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/QValue.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-spi2dav/pom.xml
    jackrabbit/sandbox/JCR-1456/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/QValueFactoryImpl.java
    jackrabbit/sandbox/JCR-1456/jackrabbit-spi2jcr/pom.xml
    jackrabbit/sandbox/JCR-1456/jackrabbit-standalone/pom.xml
    jackrabbit/sandbox/JCR-1456/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/Main.java

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/JackrabbitRepositoryStub.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/JackrabbitRepositoryStub.java?rev=777313&r1=777312&r2=777313&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/JackrabbitRepositoryStub.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/JackrabbitRepositoryStub.java Thu May 21 23:11:22 2009
@@ -26,9 +26,8 @@
 import java.security.acl.Group;
 import java.util.Arrays;
 import java.util.Calendar;
-import java.util.HashSet;
+import java.util.Collection;
 import java.util.Properties;
-import java.util.Set;
 
 import javax.jcr.Node;
 import javax.jcr.PathNotFoundException;
@@ -137,30 +136,12 @@
                     dir = new File("target", "repository").getPath();
                 }
 
-                new File(dir).mkdirs();
-
                 String xml = settings.getProperty(PROP_REPOSITORY_CONFIG);
                 if (xml == null) {
                     xml = new File(dir, "repository.xml").getPath();
                 }
 
-                if (!new File(xml).exists()) {
-                    InputStream input = getResource("repository.xml");
-                    try {
-                        OutputStream output = new FileOutputStream(xml);
-                        try {
-                            IOUtils.copy(input, output);
-                        } finally {
-                            output.close();
-                        }
-                    } finally {
-                        input.close();
-                    }
-                }
-
-                RepositoryConfig config = RepositoryConfig.create(xml, dir);
-                repository = RepositoryImpl.create(config);
-
+                repository = createRepository(dir, xml);
                 Session session = repository.login(superuser);
                 try {
                     prepareTestContent(session);
@@ -177,12 +158,34 @@
         return repository;
     }
 
+    protected Repository createRepository(String dir, String xml)
+            throws Exception {
+        new File(dir).mkdirs();
+
+        if (!new File(xml).exists()) {
+            InputStream input = getResource("repository.xml");
+            try {
+                OutputStream output = new FileOutputStream(xml);
+                try {
+                    IOUtils.copy(input, output);
+                } finally {
+                    output.close();
+                }
+            } finally {
+                input.close();
+            }
+        }
+
+        RepositoryConfig config = RepositoryConfig.create(xml, dir);
+        return RepositoryImpl.create(config);
+    }
+
     private void prepareTestContent(Session session)
             throws RepositoryException, IOException {
         JackrabbitWorkspace workspace =
             (JackrabbitWorkspace) session.getWorkspace();
-        Set workspaces = new HashSet(
-                Arrays.asList(workspace.getAccessibleWorkspaceNames()));
+        Collection<String> workspaces =
+            Arrays.asList(workspace.getAccessibleWorkspaceNames());
         if (!workspaces.contains("test")) {
             workspace.createWorkspace("test");
         }

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java?rev=777313&r1=777312&r2=777313&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java Thu May 21 23:11:22 2009
@@ -47,6 +47,8 @@
 import javax.jcr.UnsupportedRepositoryOperationException;
 import javax.jcr.Value;
 import javax.jcr.ValueFormatException;
+import javax.jcr.query.Query;
+import javax.jcr.query.QueryResult;
 import javax.jcr.lock.Lock;
 import javax.jcr.lock.LockException;
 import javax.jcr.lock.LockManager;
@@ -1692,16 +1694,6 @@
         return prop;
     }
 
-    public Property setProperty(String name, BigDecimal value) throws ValueFormatException, VersionException, LockException, ConstraintViolationException, RepositoryException {
-        // TODO
-        throw new RuntimeException("Not implemented yet, see JCR-1609");
-    }
-
-    public Property setProperty(String name, Binary value) throws ValueFormatException, VersionException, LockException, ConstraintViolationException, RepositoryException {
-        // TODO
-        throw new RuntimeException("Not implemented yet, see JCR-1609");
-    }
-
     /**
      * @see ItemImpl#getQName()
      */
@@ -4536,16 +4528,14 @@
 
     //--------------------------------------------------< new JSR 283 methods >
     /**
-     * @see javax.jcr.Node#getIdentifier()
-     * @since JCR 2.0
+     * {@inheritDoc}
      */
     public String getIdentifier() throws RepositoryException {
         return ((NodeId) id).toString();
     }
 
     /**
-     * @see javax.jcr.Node#getReferences(String)
-     * @since JCR 2.0
+     * {@inheritDoc}
      */
     public PropertyIterator getReferences(String name)
             throws RepositoryException {
@@ -4587,26 +4577,56 @@
     }
 
     /**
-     * @see javax.jcr.Node#getWeakReferences()
-     * @since JCR 2.0
+     * {@inheritDoc}
      */
     public PropertyIterator getWeakReferences() throws RepositoryException {
-        // TODO
-        throw new RuntimeException("Not implemented yet, see JCR-2061");
+        return getWeakReferences(null);
     }
 
     /**
-     * @see javax.jcr.Node#getWeakReferences(String)
-     * @since JCR 2.0
+     * {@inheritDoc}
      */
     public PropertyIterator getWeakReferences(String name) throws RepositoryException {
-        // TODO
-        throw new RuntimeException("Not implemented yet, see JCR-2061");
+        // check state of this instance
+        sanityCheck();
+
+        // TODO tweak query implemention in order to support WEAKREFERENCE reverse lookup 
+        try {
+            Query q = session.getWorkspace().getQueryManager().createQuery(
+                    "//*[jcr:contains(., '" + data.getId() + "')]",
+                    Query.XPATH);
+            QueryResult result = q.execute();
+            ArrayList l = new ArrayList<Property>();
+            for (NodeIterator nit = result.getNodes(); nit.hasNext(); ) {
+                Node n = nit.nextNode();
+                for (PropertyIterator pit = n.getProperties(); pit.hasNext(); ) {
+                    Property p = pit.nextProperty();
+                    if (p.getType() == PropertyType.WEAKREFERENCE
+                            && p.getString().equals(getIdentifier())) {
+                        if (name != null) {
+                            if (name.equals(p.getName())) {
+                                l.add(p);
+                            }
+                        } else {
+                            l.add(p);
+                        }
+                    }
+                }
+            }
+            if (l.isEmpty()) {
+                return PropertyIteratorAdapter.EMPTY;
+            } else {
+                return new PropertyIteratorAdapter(l);
+            }
+        } catch (RepositoryException e) {
+            String msg = "Unable to retrieve WEAKREFERENCE properties that refer to " + id;
+            log.debug(msg);
+            throw new RepositoryException(msg, e);
+        }
     }
 
     /**
-     * @see javax.jcr.Node#getNodes(String[])
-     * @since JCR 2.0
+     * {@inheritDoc}
      */
     public NodeIterator getNodes(String[] nameGlobs)
             throws RepositoryException {
@@ -4620,8 +4640,7 @@
     }
 
     /**
-     * @see javax.jcr.Node#getProperties(String[])
-     * @since JCR 2.0
+     * {@inheritDoc}
      */
     // TODO rename method to 'getProperties' once JCR 2.0 api has been fixed
     public PropertyIterator getProperty(String[]
@@ -4637,8 +4656,7 @@
     }
 
     /**
-     * @see javax.jcr.Node#setPrimaryType(String) 
-     * @since JCR 2.0
+     * {@inheritDoc}
      */
     public void setPrimaryType(String nodeTypeName)
             throws NoSuchNodeTypeException, VersionException,
@@ -4845,6 +4863,62 @@
         }
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    public Property setProperty(String name, BigDecimal value)
+            throws ValueFormatException, VersionException, LockException,
+            ConstraintViolationException, RepositoryException {
+        // check state of this instance
+        sanityCheck();
+
+        // check pre-conditions for setting property
+        checkSetProperty();
+
+        BitSet status = new BitSet();
+        PropertyImpl prop = getOrCreateProperty(
+                name, PropertyType.DECIMAL, false, false, status);
+        try {
+            prop.setValue(value);
+        } catch (RepositoryException re) {
+            if (status.get(CREATED)) {
+                // setting value failed, get rid of newly created property
+                removeChildProperty(name);
+            }
+            // rethrow
+            throw re;
+        }
+        return prop;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Property setProperty(String name, Binary value)
+            throws ValueFormatException, VersionException, LockException,
+            ConstraintViolationException, RepositoryException {
+        // check state of this instance
+        sanityCheck();
+
+        // check pre-conditions for setting property
+        checkSetProperty();
+
+        BitSet status = new BitSet();
+        PropertyImpl prop = getOrCreateProperty(
+                name, PropertyType.BINARY, false, false, status);
+        try {
+            prop.setValue(value);
+        } catch (RepositoryException re) {
+            if (status.get(CREATED)) {
+                // setting value failed, get rid of newly created property
+                removeChildProperty(name);
+            }
+            // rethrow
+            throw re;
+        }
+        return prop;
+    }
+
     // TODO: JCR-1565 JSR 283 lifecycle management
     public String[] getAllowedLifecycleTransistions()
             throws RepositoryException {

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java?rev=777313&r1=777312&r2=777313&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java Thu May 21 23:11:22 2009
@@ -195,6 +195,9 @@
             case PropertyType.DATE:
             case PropertyType.REFERENCE:
             case PropertyType.BOOLEAN:
+            case PropertyType.DECIMAL:
+            case PropertyType.URI:
+            case PropertyType.WEAKREFERENCE:
                 return value.toString().length();
 
             case PropertyType.NAME:

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryFactoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryFactoryImpl.java?rev=777313&r1=777312&r2=777313&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryFactoryImpl.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryFactoryImpl.java Thu May 21 23:11:22 2009
@@ -82,17 +82,13 @@
                                                        String home)
             throws RepositoryException {
         JackrabbitRepository repo = (JackrabbitRepository) REPOSITORY_INSTANCES.get(home);
-        try {
-            if (repo == null) {
-                if (home == null) {
-                    repo = new TransientRepository();
-                } else {
-                    repo = new TransientRepository(conf, home);
-                }
-                REPOSITORY_INSTANCES.put(home, repo);
+        if (repo == null) {
+            if (home == null) {
+                repo = new TransientRepository();
+            } else {
+                repo = new TransientRepository(conf, home);
             }
-        } catch (IOException e) {
-            throw new RepositoryException(e);
+            REPOSITORY_INSTANCES.put(home, repo);
         }
         return repo;
     }

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java?rev=777313&r1=777312&r2=777313&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java Thu May 21 23:11:22 2009
@@ -1207,8 +1207,11 @@
             throws RepositoryException {
         InputStream in = RepositoryImpl.class.getResourceAsStream("repository.properties");
         try {
-            props.load(in);
-            in.close();
+        	if (in != null)
+        	{
+        		props.load(in);
+        		in.close();
+        	}
 
             // set counts
             if (!props.containsKey(STATS_NODE_COUNT_PROPERTY)) {
@@ -1420,22 +1423,20 @@
     }
 
     public Value getDescriptorValue(String key) {
-        throw new RuntimeException("not implemented yet - see JCR-2062");
+        throw new UnsupportedOperationException(
+                "not implemented yet - see JCR-2062");
     }
 
     public Value[] getDescriptorValues(String key) {
-        throw new RuntimeException("not implemented yet - see JCR-2062");
+        throw new UnsupportedOperationException(
+                "not implemented yet - see JCR-2062");
     }
 
     public boolean isSingleValueDescriptor(String key) {
-        throw new RuntimeException("not implemented yet - see JCR-2062");
+        throw new UnsupportedOperationException(
+                "not implemented yet - see JCR-2062");
     }
 
-    public boolean isStandardDescriptor(String key) {
-        throw new RuntimeException("not implemented yet - see JCR-2062");
-    }
-
-
     //------------------------------------------------------< SessionListener >
     /**
      * {@inheritDoc}
@@ -2321,4 +2322,9 @@
             return RepositoryImpl.this.getDataStore();
         }
     }
+
+    VersionManagerImpl getVersionManagerImpl() {
+        return vMgr;
+    }
+
 }

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java?rev=777313&r1=777312&r2=777313&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java Thu May 21 23:11:22 2009
@@ -16,8 +16,53 @@
  */
 package org.apache.jackrabbit.core;
 
+import java.io.File;
+import java.io.PrintStream;
+import java.security.AccessControlException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.jcr.AccessDeniedException;
+import javax.jcr.Credentials;
+import javax.jcr.InvalidItemStateException;
+import javax.jcr.Item;
+import javax.jcr.ItemExistsException;
+import javax.jcr.ItemNotFoundException;
+import javax.jcr.LoginException;
+import javax.jcr.NamespaceException;
+import javax.jcr.NoSuchWorkspaceException;
+import javax.jcr.Node;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.Property;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.SimpleCredentials;
+import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.ValueFactory;
+import javax.jcr.Workspace;
+import javax.jcr.lock.Lock;
+import javax.jcr.lock.LockException;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.nodetype.NoSuchNodeTypeException;
+import javax.jcr.observation.EventListener;
+import javax.jcr.observation.ObservationManager;
+import javax.jcr.retention.RetentionManager;
+import javax.jcr.security.AccessControlManager;
+import javax.jcr.version.VersionException;
+import javax.security.auth.Subject;
+
 import org.apache.commons.collections.IteratorUtils;
 import org.apache.commons.collections.map.ReferenceMap;
+import org.apache.jackrabbit.api.JackrabbitSession;
+import org.apache.jackrabbit.api.security.principal.PrincipalManager;
+import org.apache.jackrabbit.api.security.user.UserManager;
 import org.apache.jackrabbit.commons.AbstractSession;
 import org.apache.jackrabbit.core.RepositoryImpl.WorkspaceInfo;
 import org.apache.jackrabbit.core.config.WorkspaceConfig;
@@ -28,36 +73,31 @@
 import org.apache.jackrabbit.core.nodetype.NodeTypeManagerImpl;
 import org.apache.jackrabbit.core.persistence.IterablePersistenceManager;
 import org.apache.jackrabbit.core.persistence.PersistenceManager;
+import org.apache.jackrabbit.core.retention.RetentionManagerImpl;
+import org.apache.jackrabbit.core.retention.RetentionRegistry;
 import org.apache.jackrabbit.core.security.AMContext;
 import org.apache.jackrabbit.core.security.AccessManager;
 import org.apache.jackrabbit.core.security.SecurityConstants;
-import org.apache.jackrabbit.core.security.authorization.Permission;
-import org.apache.jackrabbit.api.security.principal.PrincipalManager;
-import org.apache.jackrabbit.api.security.user.UserManager;
-import org.apache.jackrabbit.api.JackrabbitSession;
-import javax.jcr.security.AccessControlManager;
-import javax.jcr.retention.RetentionManager;
 import org.apache.jackrabbit.core.security.authentication.AuthContext;
+import org.apache.jackrabbit.core.security.authorization.Permission;
 import org.apache.jackrabbit.core.state.LocalItemStateManager;
 import org.apache.jackrabbit.core.state.NodeState;
 import org.apache.jackrabbit.core.state.SessionItemStateManager;
 import org.apache.jackrabbit.core.state.SharedItemStateManager;
 import org.apache.jackrabbit.core.util.Dumpable;
+import org.apache.jackrabbit.core.value.ValueFactoryImpl;
 import org.apache.jackrabbit.core.version.VersionManager;
 import org.apache.jackrabbit.core.version.VersionManagerImpl;
 import org.apache.jackrabbit.core.xml.ImportHandler;
 import org.apache.jackrabbit.core.xml.SessionImporter;
-import org.apache.jackrabbit.core.retention.RetentionManagerImpl;
-import org.apache.jackrabbit.core.retention.RetentionRegistry;
-import org.apache.jackrabbit.core.value.ValueFactoryImpl;
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.Path;
 import org.apache.jackrabbit.spi.commons.conversion.DefaultNamePathResolver;
+import org.apache.jackrabbit.spi.commons.conversion.IdentifierResolver;
 import org.apache.jackrabbit.spi.commons.conversion.IllegalNameException;
 import org.apache.jackrabbit.spi.commons.conversion.MalformedPathException;
 import org.apache.jackrabbit.spi.commons.conversion.NameException;
 import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
-import org.apache.jackrabbit.spi.commons.conversion.IdentifierResolver;
 import org.apache.jackrabbit.spi.commons.namespace.NamespaceResolver;
 import org.apache.jackrabbit.uuid.UUID;
 import org.slf4j.Logger;
@@ -65,74 +105,15 @@
 import org.xml.sax.ContentHandler;
 import org.xml.sax.InputSource;
 
-import javax.jcr.AccessDeniedException;
-import javax.jcr.Credentials;
-import javax.jcr.InvalidItemStateException;
-import javax.jcr.Item;
-import javax.jcr.ItemExistsException;
-import javax.jcr.ItemNotFoundException;
-import javax.jcr.LoginException;
-import javax.jcr.NamespaceException;
-import javax.jcr.NoSuchWorkspaceException;
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.Property;
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
-import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.ValueFactory;
-import javax.jcr.Workspace;
-import javax.jcr.lock.LockException;
-import javax.jcr.lock.Lock;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-import javax.jcr.observation.EventListener;
-import javax.jcr.observation.ObservationManager;
-import javax.jcr.version.VersionException;
-import javax.security.auth.Subject;
-import java.io.File;
-import java.io.PrintStream;
-import java.security.AccessControlException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.Arrays;
-
 /**
  * A <code>SessionImpl</code> ...
  */
 public class SessionImpl extends AbstractSession
-        implements javax.jcr.Session, JackrabbitSession, NamespaceResolver, NamePathResolver, IdentifierResolver, Dumpable {
+        implements JackrabbitSession, NamespaceResolver, NamePathResolver, IdentifierResolver, Dumpable {
 
     private static Logger log = LoggerFactory.getLogger(SessionImpl.class);
 
     /**
-     * @deprecated Use {@link javax.jcr.Session#ACTION_READ} instead.
-     */
-    public static final String READ_ACTION = javax.jcr.Session.ACTION_READ;
-
-    /**
-     * @deprecated Use {@link javax.jcr.Session#ACTION_REMOVE} instead.
-     */
-    public static final String REMOVE_ACTION = javax.jcr.Session.ACTION_REMOVE;
-
-    /**
-     * @deprecated Use {@link javax.jcr.Session#ACTION_ADD_NODE} instead.
-     */
-    public static final String ADD_NODE_ACTION = javax.jcr.Session.ACTION_ADD_NODE;
-
-    /**
-     * @deprecated Use {@link javax.jcr.Session#ACTION_SET_PROPERTY} instead.
-     */
-    public static final String SET_PROPERTY_ACTION = javax.jcr.Session.ACTION_SET_PROPERTY;
-
-    /**
      * flag indicating whether this session is alive
      */
     protected boolean alive;
@@ -161,7 +142,8 @@
     /**
      * the attributes of this session
      */
-    protected final HashMap attributes = new HashMap();
+    protected final Map<String, Object> attributes =
+        new HashMap<String, Object>();
 
     /**
      * the node type manager
@@ -206,7 +188,8 @@
     /**
      * Listeners (weak references)
      */
-    protected final Map listeners = new ReferenceMap(ReferenceMap.WEAK, ReferenceMap.WEAK);
+    protected final Map<SessionListener, SessionListener> listeners =
+        new ReferenceMap(ReferenceMap.WEAK, ReferenceMap.WEAK);
 
     /**
      * value factory
@@ -573,18 +556,17 @@
      */
     protected String[] getWorkspaceNames() throws RepositoryException {
         // filter workspaces according to access rights
-        ArrayList list = new ArrayList();
-        String[] names = rep.getWorkspaceNames();
-        for (int i = 0; i < names.length; i++) {
+        List<String> names = new ArrayList<String>();
+        for (String name : rep.getWorkspaceNames()) {
             try {
-                if (getAccessManager().canAccess(names[i])) {
-                    list.add(names[i]);
+                if (getAccessManager().canAccess(name)) {
+                    names.add(name);
                 }
-            } catch (NoSuchWorkspaceException nswe) {
-                // should never happen, ignore...
+            } catch (NoSuchWorkspaceException e) {
+                log.warn("Workspace disappeared unexpectedly: " + name, e);
             }
         }
-        return (String[]) list.toArray(new String[list.size()]);
+        return names.toArray(new String[names.size()]);
     }
 
     /**
@@ -625,12 +607,11 @@
      */
     protected void notifyLoggingOut() {
         // copy listeners to array to avoid ConcurrentModificationException
-        SessionListener[] la =
-                (SessionListener[]) listeners.values().toArray(
-                        new SessionListener[listeners.size()]);
-        for (int i = 0; i < la.length; i++) {
-            if (la[i] != null) {
-                la[i].loggingOut(this);
+        List<SessionListener> copy =
+            new ArrayList<SessionListener>(listeners.values());
+        for (SessionListener listener : copy) {
+            if (listener != null) {
+                listener.loggingOut(this);
             }
         }
     }
@@ -640,12 +621,11 @@
      */
     protected void notifyLoggedOut() {
         // copy listeners to array to avoid ConcurrentModificationException
-        SessionListener[] la =
-                (SessionListener[]) listeners.values().toArray(
-                        new SessionListener[listeners.size()]);
-        for (int i = 0; i < la.length; i++) {
-            if (la[i] != null) {
-                la[i].loggedOut(this);
+        List<SessionListener> copy =
+            new ArrayList<SessionListener>(listeners.values());
+        for (SessionListener listener : copy) {
+            if (listener != null) {
+                listener.loggedOut(this);
             }
         }
     }
@@ -1166,11 +1146,9 @@
             ObservationManager manager = getWorkspace().getObservationManager();
             // Use a copy to avoid modifying the set of registered listeners
             // while iterating over it
-            Collection listeners =
+            Collection<EventListener> listeners =
                 IteratorUtils.toList(manager.getRegisteredEventListeners());
-            Iterator iterator = listeners.iterator();
-            while (iterator.hasNext()) {
-                EventListener listener = (EventListener) iterator.next();
+            for (EventListener listener : listeners) {
                 try {
                     manager.removeEventListener(listener);
                 } catch (RepositoryException e) {
@@ -1490,7 +1468,7 @@
             throw new RepositoryException("Absolute path expected. Was:" + absPath);
         }
 
-        Set s = new HashSet(Arrays.asList(actions.split(",")));
+        Set<String> s = new HashSet<String>(Arrays.asList(actions.split(",")));
         int permissions = 0;
         if (s.remove(ACTION_READ)) {
             permissions |= Permission.READ;
@@ -1514,11 +1492,7 @@
             }
         }
         if (!s.isEmpty()) {
-            StringBuffer sb = new StringBuffer();
-            for (Iterator it = s.iterator(); it.hasNext();) {
-                sb.append(it.next());
-            }
-            throw new IllegalArgumentException("Unknown actions: " + sb.toString());
+            throw new IllegalArgumentException("Unknown actions: " + s);
         }
         try {
             return getAccessManager().isGranted(path, permissions);

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/TransientRepository.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/TransientRepository.java?rev=777313&r1=777312&r2=777313&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/TransientRepository.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/TransientRepository.java Thu May 21 23:11:22 2009
@@ -17,14 +17,10 @@
 package org.apache.jackrabbit.core;
 
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
+import java.util.Arrays;
 import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 
@@ -34,8 +30,8 @@
 import javax.jcr.Value;
 
 import org.apache.commons.collections.map.ReferenceMap;
-import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.api.JackrabbitRepository;
+import org.apache.jackrabbit.commons.AbstractRepository;
 import org.apache.jackrabbit.core.config.ConfigurationException;
 import org.apache.jackrabbit.core.config.RepositoryConfig;
 import org.slf4j.Logger;
@@ -48,8 +44,8 @@
  * when no longer used, this class can be used to avoid having to explicitly
  * shut down the repository.
  */
-public class TransientRepository
-        implements javax.jcr.Repository, JackrabbitRepository, SessionListener {
+public class TransientRepository extends AbstractRepository
+        implements JackrabbitRepository, SessionListener {
 
     /**
      * The logger instance used to log the repository and session lifecycles.
@@ -58,11 +54,6 @@
         LoggerFactory.getLogger(TransientRepository.class);
 
     /**
-     * Resource path of the default repository configuration file.
-     */
-    private static final String DEFAULT_REPOSITORY_XML = "repository.xml";
-
-    /**
      * Name of the repository configuration file property.
      */
     private static final String CONF_PROPERTY =
@@ -92,7 +83,7 @@
     public interface RepositoryFactory {
 
         /**
-         * Creates and intializes a repository instance. The returned instance
+         * Creates and initializes a repository instance. The returned instance
          * will be used and finally shut down by the caller of this method.
          *
          * @return initialized repository instance
@@ -119,7 +110,8 @@
      * repository instance is automatically shut down until a new session
      * is opened.
      */
-    private final Map sessions = new ReferenceMap(ReferenceMap.WEAK, ReferenceMap.WEAK);
+    private final Map<Session, Session> sessions =
+        new ReferenceMap(ReferenceMap.WEAK, ReferenceMap.WEAK);
 
     /**
      * The static repository descriptors. The default {@link RepositoryImpl}
@@ -133,9 +125,8 @@
      * factory to initialize the underlying repository instances.
      *
      * @param factory repository factory
-     * @throws IOException if the static repository descriptors cannot be loaded
      */
-    public TransientRepository(RepositoryFactory factory) throws IOException {
+    public TransientRepository(RepositoryFactory factory) {
         this.factory = factory;
         this.repository = null;
         this.descriptors = new Properties();
@@ -143,12 +134,16 @@
         // FIXME: The current RepositoryImpl class does not allow static
         // access to the repository descriptors, so we need to load them
         // directly from the underlying property file.
-        InputStream in =
-            RepositoryImpl.class.getResourceAsStream("repository.properties");
         try {
-            descriptors.load(in);
-        } finally {
-            in.close();
+            InputStream in = RepositoryImpl.class.getResourceAsStream(
+                    "repository.properties");
+            try {
+                descriptors.load(in);
+            } finally {
+                in.close();
+            }
+        } catch (IOException e) {
+            logger.warn("Unable to load static repository descriptors", e);
         }
     }
 
@@ -159,11 +154,8 @@
      * <code>org.apache.jackrabbit.repository.home</code>. If these properties
      * are not found, then the default values "<code>repository.xml</code>"
      * and "<code>repository</code>" are used.
-     *
-     * @throws IOException if the static repository descriptors cannot be loaded
      */
-    public TransientRepository()
-            throws IOException {
+    public TransientRepository() {
         this(System.getProperty(CONF_PROPERTY, CONF_DEFAULT),
              System.getProperty(HOME_PROPERTY, HOME_DEFAULT));
     }
@@ -173,10 +165,8 @@
      * configuration to initialize the underlying repository instance.
      *
      * @param config repository configuration
-     * @throws IOException if the static repository descriptors cannot be loaded
      */
-    public TransientRepository(final RepositoryConfig config)
-            throws IOException {
+    public TransientRepository(final RepositoryConfig config) {
         this(new RepositoryFactory() {
             public RepositoryImpl getRepository() throws RepositoryException {
                 return RepositoryImpl.create(config);
@@ -187,6 +177,31 @@
     /**
      * Creates a transient repository proxy that will use the given repository
      * configuration file and home directory paths to initialize the underlying
+     * repository instances.
+     *
+     * @see #TransientRepository(File, File)
+     * @param config repository configuration file
+     * @param home repository home directory
+     */
+    public TransientRepository(String config, String home) {
+        this(new File(config), new File(home));
+    }
+
+    /**
+     * Creates a transient repository proxy based on the given repository
+     * home directory and the repository configuration file "repository.xml"
+     * contained in that directory.
+     *
+     * @since Apache Jackrabbit 1.6
+     * @param dir repository home directory
+     */
+    public TransientRepository(File dir) {
+        this(new File(dir, "repository.xml"), dir);
+    }
+
+    /**
+     * Creates a transient repository proxy that will use the given repository
+     * configuration file and home directory paths to initialize the underlying
      * repository instances. The repository configuration file is reloaded
      * whenever the repository is restarted, so it is safe to modify the
      * configuration when all sessions have been closed.
@@ -198,48 +213,22 @@
      * session starts. This is a convenience feature designed to reduce the
      * need for manual configuration.
      *
-     * @param config repository configuration file
-     * @param home repository home directory
-     * @throws IOException if the static repository descriptors cannot be loaded
+     * @since Apache Jackrabbit 1.6
+     * @param xml repository configuration file
+     * @param dir repository home directory
      */
-    public TransientRepository(final String config, final String home)
-            throws IOException {
+    public TransientRepository(final File xml, final File dir) {
         this(new RepositoryFactory() {
             public RepositoryImpl getRepository() throws RepositoryException {
                 try {
-                    // Make sure that the repository configuration file exists
-                    File configFile = new File(config);
-                    if (!configFile.exists()) {
-                        logger.info("Copying default configuration to " + config);
-                        OutputStream output = new FileOutputStream(configFile);
-                        try {
-                            InputStream input =
-                                TransientRepository.class.getResourceAsStream(
-                                        DEFAULT_REPOSITORY_XML);
-                            try {
-                                IOUtils.copy(input, output);
-                            } finally {
-                               input.close();
-                            }
-                        } finally {
-                            output.close();
-                        }
-                    }
-                    // Make sure that the repository home directory exists
-                    File homeDir = new File(home);
-                    if (!homeDir.exists()) {
-                        logger.info("Creating repository home directory " + home);
-                        homeDir.mkdirs();
-                    }
-                    // Load the configuration and create the repository
-                    RepositoryConfig rc = RepositoryConfig.create(config, home);
-                    return RepositoryImpl.create(rc);
+                    return RepositoryImpl.create(
+                            RepositoryConfig.install(xml, dir));
                 } catch (IOException e) {
                     throw new RepositoryException(
                             "Automatic repository configuration failed", e);
                 } catch (ConfigurationException e) {
                     throw new RepositoryException(
-                            "Invalid repository configuration: " + config, e);
+                            "Invalid repository configuration file: " + xml, e);
                 }
             }
         });
@@ -276,15 +265,15 @@
      * descriptor keys are returned.
      *
      * @return descriptor keys
-     * @see Repository#getDescriptorKeys()
      */
     public synchronized String[] getDescriptorKeys() {
         if (repository != null) {
             return repository.getDescriptorKeys();
         } else {
-            List keys = Collections.list(descriptors.propertyNames());
-            Collections.sort(keys);
-            return (String[]) keys.toArray(new String[keys.size()]);
+            String[] keys = Collections.list(
+                    descriptors.propertyNames()).toArray(new String[0]);
+            Arrays.sort(keys);
+            return keys;
         }
     }
 
@@ -305,6 +294,33 @@
         }
     }
 
+    public Value getDescriptorValue(String key) {
+        if (repository != null) {
+            return repository.getDescriptorValue(key);
+        } else {
+            throw new UnsupportedOperationException(
+                    "not implemented yet - see JCR-2062");
+        }
+    }
+
+    public Value[] getDescriptorValues(String key) {
+        if (repository != null) {
+            return repository.getDescriptorValues(key);
+        } else {
+            throw new UnsupportedOperationException(
+                    "not implemented yet - see JCR-2062");
+        }
+    }
+
+    public boolean isSingleValueDescriptor(String key) {
+        if (repository != null) {
+            return repository.isSingleValueDescriptor(key);
+        } else {
+            throw new UnsupportedOperationException(
+                    "not implemented yet - see JCR-2062");
+        }
+    }
+
     /**
      * Logs in to the content repository. Initializes the underlying repository
      * instance if needed. The opened session is added to the set of open
@@ -317,7 +333,8 @@
      * @throws RepositoryException if the session could not be created
      * @see Repository#login(Credentials,String)
      */
-    public synchronized Session login(Credentials credentials, String workspaceName)
+    public synchronized Session login(
+            Credentials credentials, String workspaceName)
             throws RepositoryException {
         // Start the repository if this is the first login
         if (sessions.isEmpty()) {
@@ -326,7 +343,8 @@
 
         try {
             logger.debug("Opening a new session");
-            SessionImpl session = (SessionImpl) repository.login(credentials, workspaceName);
+            SessionImpl session = (SessionImpl) repository.login(
+                    credentials, workspaceName);
             sessions.put(session, session);
             session.addListener(this);
             logger.info("Session opened");
@@ -341,61 +359,6 @@
         }
     }
 
-    /**
-     * Calls {@link #login(Credentials, String)} with a <code>null</code>
-     * workspace name.
-     *
-     * @param credentials login credentials
-     * @return new session
-     * @throws RepositoryException if the session could not be created
-     * @see Repository#login(Credentials)
-     */
-    public Session login(Credentials credentials) throws RepositoryException {
-        return login(credentials, null);
-    }
-
-    /**
-     * Calls {@link #login(Credentials, String)} with <code>null</code> login
-     * credentials.
-     *
-     * @param workspaceName workspace name
-     * @return new session
-     * @throws RepositoryException if the session could not be created
-     * @see Repository#login(String)
-     */
-    public Session login(String workspaceName) throws RepositoryException {
-        return login(null, workspaceName);
-    }
-
-    /**
-     * Calls {@link #login(Credentials, String)} with <code>null</code> login
-     * credentials and a <code>null</code> workspace name.
-     *
-     * @return new session
-     * @throws RepositoryException if the session could not be created
-     * @see Repository#login(Credentials)
-     */
-    public Session login() throws RepositoryException {
-        return login(null, null);
-    }
-
-
-    public Value getDescriptorValue(String key) {
-        throw new RuntimeException("not implemented yet - see JCR-2062");
-    }
-
-    public Value[] getDescriptorValues(String key) {
-        throw new RuntimeException("not implemented yet - see JCR-2062");
-    }
-
-    public boolean isSingleValueDescriptor(String key) {
-        throw new RuntimeException("not implemented yet - see JCR-2062");
-    }
-
-    public boolean isStandardDescriptor(String key) {
-        throw new RuntimeException("not implemented yet - see JCR-2062");
-    }
-
     //--------------------------------------------------<JackrabbitRepository>
 
     /**
@@ -405,9 +368,8 @@
      * @see Session#logout()
      */
     public synchronized void shutdown() {
-        Iterator iterator = new HashSet(sessions.keySet()).iterator();
-        while (iterator.hasNext()) {
-            Session session = (Session) iterator.next();
+        Session[] copy = sessions.keySet().toArray(new Session[0]);
+        for (Session session : copy) {
             session.logout();
         }
     }
@@ -441,4 +403,5 @@
      */
     public void loggingOut(SessionImpl session) {
     }
+
 }

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfig.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfig.java?rev=777313&r1=777312&r2=777313&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfig.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfig.java Thu May 21 23:11:22 2009
@@ -16,7 +16,8 @@
  */
 package org.apache.jackrabbit.core.config;
 
-import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.IOUtils; 
+import org.apache.jackrabbit.core.RepositoryImpl;
 import org.apache.jackrabbit.core.data.DataStore;
 import org.apache.jackrabbit.core.data.DataStoreFactory;
 import org.apache.jackrabbit.core.fs.FileSystem;
@@ -41,10 +42,12 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.Reader;
 import java.io.StringWriter;
@@ -71,10 +74,116 @@
     /** the default logger */
     private static Logger log = LoggerFactory.getLogger(RepositoryConfig.class);
 
+    /** Name of the default repository configuration file. */
+    private static final String REPOSITORY_XML = "repository.xml";
+
     /** Name of the workspace configuration file. */
     private static final String WORKSPACE_XML = "workspace.xml";
 
     /**
+     * Returns the configuration of a repository in a given repository
+     * directory. The repository configuration is read from a "repository.xml"
+     * file inside the repository directory.
+     * <p>
+     * The directory is created if it does not exist. If the repository
+     * configuration file does not exist, then it is created using the
+     * default Jackrabbit configuration settings.
+     *
+     * @since Apache Jackrabbit 1.6
+     * @param dir repository home directory
+     * @return repository configuration
+     * @throws ConfigurationException on configuration errors
+     */
+    public static RepositoryConfig install(File dir)
+            throws IOException, ConfigurationException {
+        return install(new File(dir, REPOSITORY_XML), dir);
+    }
+
+    /**
+     * Returns the configuration of a repository with the given configuration
+     * file and repository home directory.
+     * <p>
+     * The directory is created if it does not exist. If the repository
+     * configuration file does not exist, then it is created using the
+     * default Jackrabbit configuration settings.
+     *
+     * @since Apache Jackrabbit 1.6
+     * @param dir repository home directory
+     * @return repository configuration
+     * @throws ConfigurationException on configuration errors
+     */
+    public static RepositoryConfig install(File xml, File dir)
+            throws IOException, ConfigurationException {
+        if (!dir.exists()) {
+            log.info("Creating repository directory {}", dir);
+            dir.mkdirs();
+        }
+
+        if (!xml.exists()) {
+            log.info("Installing default repository configuration to {}", xml);
+            OutputStream output = new FileOutputStream(xml);
+            try {
+                InputStream input =
+                    RepositoryImpl.class.getResourceAsStream(REPOSITORY_XML);
+                try {
+                    IOUtils.copy(input, output);
+                } finally {
+                   input.close();
+                }
+            } finally {
+                output.close();
+            }
+        }
+
+        return create(xml, dir);
+    }
+
+    /**
+     * Returns the configuration of a repository in a given repository
+     * directory. The repository configuration is read from a "repository.xml"
+     * file inside the repository directory.
+     * <p>
+     * An exception is thrown if the directory does not exist or if
+     * the repository configuration file can not be read. 
+     *
+     * @since Apache Jackrabbit 1.6
+     * @param dir repository home directory
+     * @return repository configuration
+     * @throws ConfigurationException on configuration errors
+     */
+    public static RepositoryConfig create(File dir)
+            throws ConfigurationException {
+        return create(new File(dir, REPOSITORY_XML), dir);
+    }
+
+    /**
+     * Returns the configuration of a repository with the given configuration
+     * file and repository home directory.
+     * <p>
+     * An exception is thrown if the directory does not exist or if
+     * the repository configuration file can not be read. 
+     *
+     * @since Apache Jackrabbit 1.6
+     * @param dir repository home directory
+     * @return repository configuration
+     * @throws ConfigurationException on configuration errors
+     */
+    public static RepositoryConfig create(File xml, File dir)
+            throws ConfigurationException {
+        if (!dir.isDirectory()) {
+            throw new ConfigurationException(
+                    "Repository directory " + dir + " does not exist");
+        }
+
+        if (!xml.isFile()) {
+            throw new ConfigurationException(
+                    "Repository configuration file " + xml + " does not exist");
+        }
+
+        return create(new InputSource(xml.toURI().toString()), dir.getPath());
+    }
+
+    /**
      * Convenience method that wraps the configuration file name into an
      * {@link InputSource} and invokes the
      * {@link #create(InputSource, String)} method.

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/XAEnvironment.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/XAEnvironment.java?rev=777313&r1=777312&r2=777313&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/XAEnvironment.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/XAEnvironment.java Thu May 21 23:11:22 2009
@@ -24,6 +24,7 @@
 import org.slf4j.LoggerFactory;
 
 import javax.jcr.RepositoryException;
+import javax.jcr.Workspace;
 import javax.jcr.lock.LockException;
 import java.util.Map;
 import java.util.HashMap;
@@ -263,16 +264,66 @@
 
     /**
      * Add lock token to this environment.
+     * @param session 
      * @param lt lock token
+     * @throws RepositoryException 
      */
-    public void addLockToken(String lt) {
+    public void addLockToken(SessionImpl session, String lt) throws RepositoryException {
+        try {
+            LockToken lockToken = LockToken.parse(lt);
+            NodeImpl node = (NodeImpl) session.getItemManager().getItem(lockToken.getId());
+            AbstractLockInfo info = getLockInfo(node);
+            if (info != null) {
+                if (info.getLockHolder() == null) {
+                    info.setLockHolder(session);
+                } else {
+                    String msg = "Cannot add lock token: lock already held by other session.";
+                    log.warn(msg);
+                    throw new LockException(msg);
+                }
+            }
+            // inform SessionLockManager
+            getSessionLockManager(session).lockTokenAdded(lt);
+        } catch (IllegalArgumentException e) {
+            String msg = "Bad lock token: " + e.getMessage();
+            log.warn(msg);
+            throw new LockException(msg);
+        }
     }
 
     /**
      * Remove lock token from this environment.
+     * @param session 
      * @param lt lock token
+     * @throws RepositoryException 
      */
-    public void removeLockToken(String lt) {
+    public void removeLockToken(SessionImpl session, String lt) throws RepositoryException {
+        try {
+            LockToken lockToken = LockToken.parse(lt);
+
+            NodeImpl node = (NodeImpl) session.getItemManager().getItem(lockToken.getId());
+            AbstractLockInfo info = getLockInfo(node);
+            if (info != null) {
+                if (session == info.getLockHolder()) {
+                    info.setLockHolder(null);
+                } else {
+                    String msg = "Cannot remove lock token: lock held by other session.";
+                    log.warn(msg);
+                    throw new LockException(msg);
+                }
+            }
+            // inform SessionLockManager
+            getSessionLockManager(session).lockTokenRemoved(lt);
+        } catch (IllegalArgumentException e) {
+            String msg = "Bad lock token: " + e.getMessage();
+            log.warn(msg);
+            throw new LockException(msg);
+        }
+    }
+
+    static SessionLockManager getSessionLockManager(SessionImpl session) throws RepositoryException {
+        Workspace wsp = (Workspace) session.getWorkspace();
+        return (SessionLockManager) wsp.getLockManager();
     }
 
     /**
@@ -437,7 +488,12 @@
             if (isUnlock) {
                 lockMgr.internalUnlock(node);
             } else {
-                lockMgr.internalLock(node, deep, sessionScoped, getSecondsRemaining(), lockOwner);
+                AbstractLockInfo internalLock = lockMgr.internalLock(node, deep, sessionScoped, getSecondsRemaining(), lockOwner);
+                AbstractLockInfo xaEnvLock = getLockInfo(node);
+                // Check if the lockToken has been removed in the transaction ...
+                if (xaEnvLock != null && xaEnvLock.getLockHolder() == null) {
+                    internalLock.setLockHolder(null);
+                }
             }
         }
 

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/XALockManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/XALockManager.java?rev=777313&r1=777312&r2=777313&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/XALockManager.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/XALockManager.java Thu May 21 23:11:22 2009
@@ -205,7 +205,7 @@
      */
     public void lockTokenAdded(SessionImpl session, String lt) throws RepositoryException {
         if (isInXA()) {
-            xaEnv.addLockToken(lt);
+            xaEnv.addLockToken(session, lt);
         } else {
             lockMgr.lockTokenAdded(session, lt);
         }
@@ -216,7 +216,7 @@
      */
     public void lockTokenRemoved(SessionImpl session, String lt) throws RepositoryException {
         if (isInXA()) {
-            xaEnv.removeLockToken(lt);
+            xaEnv.removeLockToken(session, lt);
         } else {
             lockMgr.lockTokenRemoved(session, lt);
         }

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/ValueConstraint.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/ValueConstraint.java?rev=777313&r1=777312&r2=777313&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/ValueConstraint.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/ValueConstraint.java Thu May 21 23:11:22 2009
@@ -87,6 +87,7 @@
         }
         switch (type) {
             case PropertyType.STRING:
+            case PropertyType.URI:
                 return new StringConstraint(definition);
 
             case PropertyType.BOOLEAN:
@@ -100,6 +101,7 @@
 
             case PropertyType.LONG:
             case PropertyType.DOUBLE:
+            case PropertyType.DECIMAL:
                 return new NumericConstraint(definition);
 
             case PropertyType.NAME:
@@ -108,6 +110,7 @@
             case PropertyType.PATH:
                 return new PathConstraint(definition, resolver);
 
+            case PropertyType.WEAKREFERENCE:
             case PropertyType.REFERENCE:
                 return new ReferenceConstraint(definition, resolver);
 
@@ -301,13 +304,13 @@
     void check(double number) throws ConstraintViolationException {
         if (lowerLimit != null) {
             if (lowerInclusive) {
-                if (number < lowerLimit.doubleValue()) {
+                if (number < lowerLimit) {
                     throw new ConstraintViolationException(number
                             + " does not satisfy the constraint '"
                             + definition + "'");
                 }
             } else {
-                if (number <= lowerLimit.doubleValue()) {
+                if (number <= lowerLimit) {
                     throw new ConstraintViolationException(number
                             + " does not satisfy the constraint '"
                             + definition + "'");
@@ -316,13 +319,13 @@
         }
         if (upperLimit != null) {
             if (upperInclusive) {
-                if (number > upperLimit.doubleValue()) {
+                if (number > upperLimit) {
                     throw new ConstraintViolationException(number
                             + " does not satisfy the constraint '"
                             + definition + "'");
                 }
             } else {
-                if (number >= upperLimit.doubleValue()) {
+                if (number >= upperLimit) {
                     throw new ConstraintViolationException(number
                             + " does not satisfy the constraint '"
                             + definition + "'");
@@ -345,6 +348,10 @@
                 check(value.getDouble());
                 return;
 
+            case PropertyType.DECIMAL:
+                check(value.getDouble());
+                return;
+
             case PropertyType.BINARY:
                 BLOBFileValue blob = value.getBLOBFileValue();
                 long length = blob.getLength();

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/BundleBinding.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/BundleBinding.java?rev=777313&r1=777312&r2=777313&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/BundleBinding.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/BundleBinding.java Thu May 21 23:11:22 2009
@@ -40,6 +40,7 @@
 import java.io.InputStream;
 import java.util.HashSet;
 import java.util.Set;
+import java.math.BigDecimal;
 
 import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
@@ -383,6 +384,9 @@
                 case PropertyType.DOUBLE:
                     val = InternalValue.create(in.readDouble());
                     break;
+                case PropertyType.DECIMAL:
+                    val = InternalValue.create(readDecimal(in));
+                    break;
                 case PropertyType.LONG:
                     val = InternalValue.create(in.readLong());
                     break;
@@ -392,6 +396,7 @@
                 case PropertyType.NAME:
                     val = InternalValue.create(readQName(in));
                     break;
+                case PropertyType.WEAKREFERENCE:
                 case PropertyType.REFERENCE:
                     val = InternalValue.create(readUUID(in));
                     break;
@@ -505,6 +510,15 @@
                         return false;
                     }
                     break;
+                case PropertyType.DECIMAL:
+                    try {
+                        BigDecimal d = readDecimal(in);
+                        log.debug("  decimal: " + d);
+                    } catch (IOException e) {
+                        log.error("Error while reading decimal value: " + e);
+                        return false;
+                    }
+                    break;
                 case PropertyType.LONG:
                     try {
                         double l = in.readLong();
@@ -532,6 +546,7 @@
                         return false;
                     }
                     break;
+                case PropertyType.WEAKREFERENCE:
                 case PropertyType.REFERENCE:
                     try {
                         UUID uuid = readUUID(in);
@@ -673,6 +688,14 @@
                         throw new IOException("Unexpected error while writing DOUBLE value.");
                     }
                     break;
+                case PropertyType.DECIMAL:
+                    try {
+                        writeDecimal(out, val.getDecimal());
+                    } catch (RepositoryException e) {
+                        // should never occur
+                        throw new IOException("Unexpected error while writing DECIMAL value.");
+                    }
+                    break;
                 case PropertyType.LONG:
                     try {
                         out.writeLong(val.getLong());
@@ -692,6 +715,7 @@
                 case PropertyType.NAME:
                     writeQName(out, val.getQName());
                     break;
+                case PropertyType.WEAKREFERENCE:
                 case PropertyType.REFERENCE:
                     writeUUID(out, val.getUUID());
                     break;

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/ItemStateBinding.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/ItemStateBinding.java?rev=777313&r1=777312&r2=777313&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/ItemStateBinding.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/ItemStateBinding.java Thu May 21 23:11:22 2009
@@ -38,6 +38,7 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Set;
+import java.math.BigDecimal;
 
 /**
  * This Class implements relatively efficient serialization methods for item
@@ -316,6 +317,37 @@
     }
 
     /**
+     * Deserializes a BigDecimal
+     * @param in the input stream
+     * @return the decimal
+     * @throws IOException in an I/O error occurs.
+     */
+    public BigDecimal readDecimal(DataInputStream in) throws IOException {
+        if (in.readBoolean()) {
+            // TODO more efficient serialization format
+            return new BigDecimal(in.readUTF());
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Serializes a BigDecimal
+     * @param out the output stream
+     * @param decimal the decimal number
+     * @throws IOException in an I/O error occurs.
+     */
+    public void writeDecimal(DataOutputStream out, BigDecimal decimal) throws IOException {
+        if (decimal == null) {
+            out.writeBoolean(false);
+        } else {
+            out.writeBoolean(true);
+            // TODO more efficient serialization format
+            out.writeUTF(decimal.toString());
+        }
+    }
+
+    /**
      * Deserializes a NodeID
      * @param in the input stream
      * @return the uuid

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java?rev=777313&r1=777312&r2=777313&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java Thu May 21 23:11:22 2009
@@ -21,6 +21,7 @@
 import java.util.Calendar;
 import java.util.Iterator;
 import java.util.List;
+import java.math.BigDecimal;
 
 import javax.jcr.NamespaceException;
 import javax.jcr.PropertyType;

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java?rev=777313&r1=777312&r2=777313&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java Thu May 21 23:11:22 2009
@@ -29,6 +29,7 @@
 import org.apache.jackrabbit.util.ISO8601;
 import org.apache.jackrabbit.uuid.UUID;
 import org.apache.jackrabbit.value.StringValue;
+import org.apache.jackrabbit.value.URIValue;
 import org.apache.jackrabbit.spi.commons.name.PathFactoryImpl;
 import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl;
 import org.apache.jackrabbit.spi.commons.value.ValueFactoryQImpl;
@@ -49,6 +50,9 @@
 import java.io.SequenceInputStream;
 import java.io.UnsupportedEncodingException;
 import java.util.Calendar;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.math.BigDecimal;
 
 /**
  * <code>InternalValue</code> represents the internal format of a property value.
@@ -64,6 +68,8 @@
  * <tr>BOOLEAN<td></td><td>Boolean</td></tr>
  * <tr>NAME<td></td><td>Name</td></tr>
  * <tr>PATH<td></td><td>Path</td></tr>
+ * <tr>URI<td></td><td>URI</td></tr>
+ * <tr>DECIMAL<td></td><td>BigDecimal</td></tr>
  * <tr>BINARY<td></td><td>BLOBFileValue</td></tr>
  * <tr>REFERENCE<td></td><td>UUID</td></tr>
  * </table>
@@ -152,10 +158,20 @@
                 return create(value.getDate());
             case PropertyType.DOUBLE:
                 return create(value.getDouble());
+            case PropertyType.DECIMAL:
+                return create(value.getDecimal());
             case PropertyType.LONG:
                 return create(value.getLong());
             case PropertyType.REFERENCE:
                 return create(new UUID(value.getString()));
+            case PropertyType.WEAKREFERENCE:
+                return create(new UUID(value.getString()), true);
+            case PropertyType.URI:
+                try {
+                    return create(new URI(value.getString()));
+                } catch (URISyntaxException e) {
+                    throw new ValueFormatException(e.getMessage());
+                }
             case PropertyType.NAME:
                 try {
                     if (value instanceof QValueValue) {
@@ -229,6 +245,22 @@
      * @param value
      * @return the created value
      */
+    public static InternalValue create(BigDecimal value) {
+        return new InternalValue(value);
+    }
+
+    /**
+     * @param value
+     * @return the created value
+     */
+    public static InternalValue create(URI value) {
+        return new InternalValue(value);
+    }
+
+    /**
+     * @param value
+     * @return the created value
+     */
     public static InternalValue create(boolean value) {
         return value ? BOOLEAN_TRUE : BOOLEAN_FALSE;
     }
@@ -376,7 +408,16 @@
      * @return the created value
      */
     public static InternalValue create(UUID value) {
-        return new InternalValue(value);
+        return create(value, false);
+    }
+
+    /**
+     * @param value
+     * @param weak
+     * @return the created value
+     */
+    public static InternalValue create(UUID value, boolean weak) {
+        return new InternalValue(value, weak);
     }
 
     //----------------------------------------------------< conversions, etc. >
@@ -409,8 +450,14 @@
                     return vf.createValue(((Double) val).doubleValue());
                 case PropertyType.LONG:
                     return vf.createValue(((Long) val).longValue());
+                case PropertyType.DECIMAL:
+                    return vf.createValue((BigDecimal) val);
                 case PropertyType.REFERENCE:
                     return vf.createValue(val.toString(), PropertyType.REFERENCE);
+                case PropertyType.WEAKREFERENCE:
+                    return vf.createValue(val.toString(), PropertyType.WEAKREFERENCE);
+                case PropertyType.URI:
+                    return new URIValue((URI) val);
                 case PropertyType.PATH:
                     return vf.createValue(resolver.getJCRPath((Path) val), PropertyType.PATH);
                 case PropertyType.NAME:
@@ -507,12 +554,18 @@
                 return create(Double.parseDouble(s));
             case PropertyType.LONG:
                 return create(Long.parseLong(s));
+            case PropertyType.DECIMAL:
+                return create(new BigDecimal(s));
             case PropertyType.REFERENCE:
                 return create(new UUID(s));
+            case PropertyType.WEAKREFERENCE:
+                return create(new UUID(s), true);
             case PropertyType.PATH:
                 return create(PathFactoryImpl.getInstance().create(s));
             case PropertyType.NAME:
                 return create(NameFactoryImpl.getInstance().create(s));
+            case PropertyType.URI:
+                return create(URI.create(s));
             case PropertyType.STRING:
                 return create(s);
 
@@ -564,6 +617,14 @@
         super(Boolean.valueOf(value));
     }
 
+    private InternalValue(URI value) {
+        super(value, PropertyType.URI);
+    }
+
+    private InternalValue(BigDecimal value) {
+        super(value, PropertyType.DECIMAL);
+    }
+
     private InternalValue(BLOBFileValue value) {
         super(value, PropertyType.BINARY);
     }
@@ -576,6 +637,10 @@
         super(value, PropertyType.REFERENCE);
     }
 
+    private InternalValue(UUID value, boolean weak) {
+        super(value, weak ? PropertyType.WEAKREFERENCE : PropertyType.REFERENCE);
+    }
+
     /**
      * Create a BLOB value from in input stream. Small objects will create an in-memory object,
      * while large objects are stored in the data store or in a temp file (if the store parameter is not set).

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValueFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValueFactory.java?rev=777313&r1=777312&r2=777313&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValueFactory.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValueFactory.java Thu May 21 23:11:22 2009
@@ -37,6 +37,8 @@
 import java.io.UnsupportedEncodingException;
 import java.io.FileInputStream;
 import java.util.Calendar;
+import java.math.BigDecimal;
+import java.net.URI;
 
 /**
  * <code>InternalValueFactory</code>...
@@ -76,18 +78,27 @@
                     return InternalValue.create(Double.parseDouble(value));
                 case PropertyType.LONG:
                     return InternalValue.create(Long.parseLong(value));
+                case PropertyType.DECIMAL:
+                    return InternalValue.create(new BigDecimal(value));
                 case PropertyType.PATH:
                     return InternalValue.create(PathFactoryImpl.getInstance().create(value));
                 case PropertyType.NAME:
                     return InternalValue.create(NameFactoryImpl.getInstance().create(value));
                 case PropertyType.STRING:
                     return InternalValue.create(value);
+                case PropertyType.URI:
+                    return InternalValue.create(URI.create(value));
                 case PropertyType.REFERENCE:
                     return InternalValue.create(new UUID(value));
+                case PropertyType.WEAKREFERENCE:
+                    return InternalValue.create(new UUID(value), true);
                 case PropertyType.BINARY:
                     return InternalValue.create(value.getBytes("UTF-8"));
                 // default: invalid type specified -> see below.
             }
+        } catch (NumberFormatException ex) {
+            // given String value cannot be converted to Decimal
+            throw new ValueFormatException(ex);
         } catch (IllegalArgumentException ex) {
             // given String value cannot be converted to Long/Double/Path/Name
             throw new ValueFormatException(ex);

Propchange: jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/resources/org/apache/jackrabbit/core/JackrabbitRepositoryStub.properties
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu May 21 23:11:22 2009
@@ -1 +1,2 @@
 /jackrabbit/branches/1.3/jackrabbit-core/src/test/resources/repositoryStubImpl.properties:631261
+/jackrabbit/trunk/jackrabbit-core/src/main/resources/org/apache/jackrabbit/core/JackrabbitRepositoryStub.properties:774918-777034

Propchange: jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/main/resources/org/apache/jackrabbit/core/test-nodetypes.xml
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu May 21 23:11:22 2009
@@ -1 +1,2 @@
 /jackrabbit/branches/1.3/jackrabbit-core/src/test/resources/org/apache/jackrabbit/core/integration/test-nodetypes.xml:631261
+/jackrabbit/trunk/jackrabbit-core/src/main/resources/org/apache/jackrabbit/core/test-nodetypes.xml:774918-777034

Modified: jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/TestRepository.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/TestRepository.java?rev=777313&r1=777312&r2=777313&view=diff
==============================================================================
--- jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/TestRepository.java (original)
+++ jackrabbit/sandbox/JCR-1456/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/TestRepository.java Thu May 21 23:11:22 2009
@@ -96,9 +96,6 @@
         } catch (ConfigurationException e) {
             throw new RepositoryException(
                     "Error in test repository configuration", e);
-        } catch (IOException e) {
-            throw new RepositoryException(
-                    "Error in test repository initialization", e);
         }
     }