You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2007/09/10 18:00:45 UTC

svn commit: r574288 - /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java

Author: stefan
Date: Mon Sep 10 09:00:44 2007
New Revision: 574288

URL: http://svn.apache.org/viewvc?rev=574288&view=rev
Log:
JCR-1104: JSR 283 support

work in (slow) progress...

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java?rev=574288&r1=574287&r2=574288&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java Mon Sep 10 09:00:44 2007
@@ -2789,25 +2789,7 @@
      * {@inheritDoc}
      */
     public PropertyIterator getReferences() throws RepositoryException {
-        // check state of this instance
-        sanityCheck();
-
-        try {
-            NodeReferencesId targetId = new NodeReferencesId((NodeId) id);
-            if (stateMgr.hasNodeReferences(targetId)) {
-                NodeReferences refs = stateMgr.getNodeReferences(targetId);
-                // refs.getReferences() returns a list of PropertyId's
-                List idList = refs.getReferences();
-                return new LazyItemIterator(itemMgr, idList);
-            } else {
-                // there are no references, return empty iterator
-                return IteratorHelper.EMPTY;
-            }
-        } catch (ItemStateException e) {
-            String msg = "Unable to retrieve REFERENCE properties that refer to " + id;
-            log.debug(msg);
-            throw new RepositoryException(msg, e);
-        }
+        return getReferences(null);
     }
 
     /**
@@ -4277,4 +4259,71 @@
         return ((NodeId) id).toString();
     }
 
+    /**
+     * This method returns all <code>REFERENCE</code> properties that refer to
+     * this node, have the specified <code>name</code> and that are accessible
+     * through the current <code>Session</code>.
+     * <p/>
+     * If the <code>name</code> parameter is <code>null</code> then all
+     * referring <code>REFERENCES</code> are returned regardless of name.
+     * <p/>
+     * Some level 2 implementations may only return properties that have been
+     * saved (in a transactional setting this includes both those properties
+     * that have been saved but not yet committed, as well as properties that
+     * have been committed). Other level 2 implementations may additionally
+     * return properties that have been added within the current <code>Session</code>
+     * but are not yet saved.
+     * <p/>
+     * In implementations that support versioning, this method does not return
+     * properties that are part of the frozen state of a version in version
+     * storage.
+     * <p/>
+     * If this node has no referring properties with the specified name,
+     * an empty iterator is returned.
+     *
+     * @param name name of referring <code>REFERENCE</code> properties to be
+     *        returned; if <code>null</code> then all referring <code>REFERENCE</code>s
+     *        are returned
+     * @return A <code>PropertyIterator</code>.
+     * @throws RepositoryException if an error occurs
+     * @since JCR 2.0
+     */
+    public PropertyIterator getReferences(String name)
+            throws RepositoryException {
+        // check state of this instance
+        sanityCheck();
+
+        try {
+            NodeReferencesId targetId = new NodeReferencesId((NodeId) id);
+            if (stateMgr.hasNodeReferences(targetId)) {
+                NodeReferences refs = stateMgr.getNodeReferences(targetId);
+                // refs.getReferences() returns a list of PropertyId's
+                List idList = refs.getReferences();
+                if (name != null) {
+                    QName qName;
+                    try {
+                        qName = session.getQName(name);
+                    } catch (NameException e) {
+                        throw new RepositoryException("invalid property name: " + name, e);
+                    }
+                    ArrayList filteredList = new ArrayList(idList.size());
+                    for (Iterator iter = idList.iterator(); iter.hasNext();) {
+                        PropertyId propId = (PropertyId) iter.next();
+                        if (propId.getName().equals(qName)) {
+                            filteredList.add(propId);
+                        }
+                    }
+                    idList = filteredList;
+                }
+                return new LazyItemIterator(itemMgr, idList);
+            } else {
+                // there are no references, return empty iterator
+                return IteratorHelper.EMPTY;
+            }
+        } catch (ItemStateException e) {
+            String msg = "Unable to retrieve REFERENCE properties that refer to " + id;
+            log.debug(msg);
+            throw new RepositoryException(msg, e);
+        }
+    }
 }