You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by re...@apache.org on 2012/04/25 17:43:58 UTC

svn commit: r1330359 - in /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr: PropertyDelegate.java PropertyImpl.java

Author: reschke
Date: Wed Apr 25 15:43:58 2012
New Revision: 1330359

URL: http://svn.apache.org/viewvc?rev=1330359&view=rev
Log:
split PropertyImpl into PropertyImpl and PropertyDelegate

Added:
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java
Modified:
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java

Added: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java?rev=1330359&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java (added)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java Wed Apr 25 15:43:58 2012
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.jcr;
+
+import java.util.List;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.nodetype.PropertyDefinition;
+
+import org.apache.jackrabbit.oak.api.CoreValue;
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.namepath.Paths;
+
+public class PropertyDelegate {
+
+    private final SessionContext<SessionImpl> sessionContext;
+    private Tree parent;
+    private PropertyState propertyState;
+
+    PropertyDelegate(SessionContext<SessionImpl> sessionContext, Tree parent,
+            PropertyState propertyState) {
+        this.sessionContext = sessionContext;
+        this.parent = parent;
+        this.propertyState = propertyState;
+    }
+
+    PropertyDefinition getDefinition() throws RepositoryException {
+        // TODO
+        return null;
+    }
+    
+    void remove() throws RepositoryException {
+        getParentContentTree().removeProperty(getName());
+    }
+    
+    void setValue(CoreValue value) throws RepositoryException {
+        getParentContentTree().setProperty(getName(), value);
+    }
+
+    void setValues(List<CoreValue> values) throws RepositoryException {
+        getParentContentTree().setProperty(getName(), values);
+    }
+
+    Tree getParentContentTree() {
+        resolve();
+        return parent;
+    }
+
+    PropertyState getPropertyState() {
+        resolve();
+        return propertyState;
+    }
+
+    Tree.Status getPropertyStatus() {
+        return getParentContentTree().getPropertyStatus(getName());
+    }
+    
+    String getName() {
+        return getPropertyState().getName();
+    }
+
+    String getPath() {
+        return '/' + getParentContentTree().getPath() + '/' + getName();
+    }
+
+    //------------------------------------------------------------< private >---
+
+    private Root getBranch() {
+        return sessionContext.getBranch();
+    }
+
+    private synchronized void resolve() {
+        parent = getBranch().getTree(parent.getPath());
+        String path = Paths.concat(parent.getPath(), propertyState.getName());
+
+        if (parent == null) {
+            propertyState = null;
+        }
+        else {
+            propertyState = parent.getProperty(Paths.getName(path));
+        }
+    }
+}

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java?rev=1330359&r1=1330358&r2=1330359&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java Wed Apr 25 15:43:58 2012
@@ -16,16 +16,9 @@
  */
 package org.apache.jackrabbit.oak.jcr;
 
-import org.apache.jackrabbit.oak.api.Root;
-import org.apache.jackrabbit.oak.api.Tree;
-import org.apache.jackrabbit.oak.api.Tree.Status;
-import org.apache.jackrabbit.oak.api.PropertyState;
-import org.apache.jackrabbit.oak.jcr.util.LogUtil;
-import org.apache.jackrabbit.oak.jcr.util.ValueConverter;
-import org.apache.jackrabbit.oak.namepath.Paths;
-import org.apache.jackrabbit.value.ValueHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.util.Calendar;
 
 import javax.jcr.Binary;
 import javax.jcr.Item;
@@ -39,9 +32,16 @@ import javax.jcr.RepositoryException;
 import javax.jcr.Value;
 import javax.jcr.ValueFormatException;
 import javax.jcr.nodetype.PropertyDefinition;
-import java.io.InputStream;
-import java.math.BigDecimal;
-import java.util.Calendar;
+
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.api.Tree.Status;
+import org.apache.jackrabbit.oak.jcr.util.LogUtil;
+import org.apache.jackrabbit.oak.jcr.util.ValueConverter;
+import org.apache.jackrabbit.oak.namepath.Paths;
+import org.apache.jackrabbit.value.ValueHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * {@code PropertyImpl}...
@@ -53,15 +53,13 @@ public class PropertyImpl extends ItemIm
      */
     private static final Logger log = LoggerFactory.getLogger(PropertyImpl.class);
 
-    private Tree parent;
-    private PropertyState propertyState;
-
+    private final PropertyDelegate pd;
+    
     PropertyImpl(SessionContext<SessionImpl> sessionContext, Tree parent,
             PropertyState propertyState) {
 
         super(sessionContext);
-        this.parent = parent;
-        this.propertyState = propertyState;
+        this.pd = new PropertyDelegate(sessionContext, parent, propertyState);
     }
 
     //---------------------------------------------------------------< Item >---
@@ -78,7 +76,7 @@ public class PropertyImpl extends ItemIm
      */
     @Override
     public String getName() throws RepositoryException {
-        return toJcrPath(name());
+        return toJcrPath(pd.getName());
     }
 
     /**
@@ -86,7 +84,7 @@ public class PropertyImpl extends ItemIm
      */
     @Override
     public String getPath() throws RepositoryException {
-        return path();
+        return toJcrPath(pd.getPath());
     }
 
     /**
@@ -94,7 +92,7 @@ public class PropertyImpl extends ItemIm
      */
     @Override
     public Node getParent() throws RepositoryException {
-        return new NodeImpl(sessionContext, getParentContentTree());
+        return new NodeImpl(sessionContext, pd.getParentContentTree());
     }
 
     /**
@@ -122,7 +120,7 @@ public class PropertyImpl extends ItemIm
      */
     @Override
     public boolean isNew() {
-        return getParentContentTree().getPropertyStatus(name()) == Status.NEW;
+        return pd.getPropertyStatus() == Status.NEW;
     }
 
     /**
@@ -130,7 +128,7 @@ public class PropertyImpl extends ItemIm
      */
     @Override
     public boolean isModified() {
-        return getParentContentTree().getPropertyStatus(name()) == Status.MODIFIED;
+        return pd.getPropertyStatus() == Status.MODIFIED;
     }
 
     /**
@@ -138,7 +136,7 @@ public class PropertyImpl extends ItemIm
      */
     @Override
     public void remove() throws RepositoryException {
-        getParentContentTree().removeProperty(name());
+        pd.remove();
     }
 
     /**
@@ -499,8 +497,7 @@ public class PropertyImpl extends ItemIm
 
     @Override
     public PropertyDefinition getDefinition() throws RepositoryException {
-        // TODO
-        return null;
+        return pd.getDefinition();
     }
 
     /**
@@ -521,74 +518,9 @@ public class PropertyImpl extends ItemIm
         }
     }
 
-    /**
-     * @see javax.jcr.Property#isMultiple()
-     */
     @Override
     public boolean isMultiple() throws RepositoryException {
-        return getPropertyState().isArray();
-    }
-
-    //------------------------------------------------------------< private >---
-
-    /**
-     *
-     * @param defaultType
-     * @return the required type for this property.
-     * @throws javax.jcr.RepositoryException
-     */
-    private int getRequiredType(int defaultType) throws RepositoryException {
-        // check type according to definition of this property
-        PropertyDefinition def = getDefinition();
-        int reqType = (def == null) ? PropertyType.UNDEFINED : getDefinition().getRequiredType();
-        if (reqType == PropertyType.UNDEFINED) {
-            if (defaultType == PropertyType.UNDEFINED) {
-                reqType = PropertyType.STRING;
-            } else {
-                reqType = defaultType;
-            }
-        }
-        return reqType;
-    }
-
-    /**
-     *
-     * @param value
-     * @param requiredType
-     * @throws RepositoryException
-     */
-    private void setValue(Value value, int requiredType) throws RepositoryException {
-        if (requiredType == PropertyType.UNDEFINED) {
-            // should never get here since calling methods assert valid type
-            throw new IllegalArgumentException("Property type of a value cannot be undefined (" + LogUtil.safeGetJCRPath(this) + ").");
-        }
-
-        if (value == null) {
-            remove();
-        } else {
-            Value targetValue = ValueHelper.convert(value, requiredType, getValueFactory());
-            getParentContentTree().setProperty(name(), ValueConverter.toCoreValue(targetValue, sessionContext));
-        }
-    }
-
-    /**
-     *
-     * @param values
-     * @param requiredType
-     * @throws RepositoryException
-     */
-    private void setValues(Value[] values, int requiredType) throws RepositoryException {
-        if (requiredType == PropertyType.UNDEFINED) {
-            // should never get here since calling methods assert valid type
-            throw new IllegalArgumentException("Property type of a value cannot be undefined (" + LogUtil.safeGetJCRPath(this) + ").");
-        }
-
-        if (values == null) {
-            remove();
-        } else {
-            Value[] targetValues = ValueHelper.convert(values, requiredType, getValueFactory());
-            getParentContentTree().setProperty(name(), ValueConverter.toCoreValues(targetValues, sessionContext));
-        }
+        return pd.getPropertyState().isArray();
     }
 
     /**
@@ -607,38 +539,64 @@ public class PropertyImpl extends ItemIm
         }
     }
 
-    private Root getBranch() {
-        return sessionContext.getBranch();
-    }
-
-    private Tree getParentContentTree() {
-        resolve();
-        return parent;
-    }
+    /**
+    *
+    * @param defaultType
+    * @return the required type for this property.
+    * @throws javax.jcr.RepositoryException
+    */
+   private int getRequiredType(int defaultType) throws RepositoryException {
+       // check type according to definition of this property
+       PropertyDefinition def = getDefinition();
+       int reqType = (def == null) ? PropertyType.UNDEFINED : getDefinition().getRequiredType();
+       if (reqType == PropertyType.UNDEFINED) {
+           if (defaultType == PropertyType.UNDEFINED) {
+               reqType = PropertyType.STRING;
+           } else {
+               reqType = defaultType;
+           }
+       }
+       return reqType;
+   }
 
     private PropertyState getPropertyState() {
-        resolve();
-        return propertyState;
-    }
-
-    private String name() {
-        return getPropertyState().getName();
+        return pd.getPropertyState();
     }
 
-    private String path() {
-        return '/' + getParentContentTree().getPath() + '/' + name();
-    }
-
-    private synchronized void resolve() {
-        parent = getBranch().getTree(parent.getPath());
-        String path = Paths.concat(parent.getPath(), propertyState.getName());
-
-        if (parent == null) {
-            propertyState = null;
-        }
-        else {
-            propertyState = parent.getProperty(Paths.getName(path));
-        }
-    }
+    /**
+    *
+    * @param value
+    * @param requiredType
+    * @throws RepositoryException
+    */
+   private void setValue(Value value, int requiredType) throws RepositoryException {
+       
+       assert(requiredType != PropertyType.UNDEFINED);
+       
+       if (value == null) {
+           pd.remove();
+       } else {
+           Value targetValue = ValueHelper.convert(value, requiredType, sessionContext.getValueFactory());
+           pd.setValue(ValueConverter.toCoreValue(targetValue, sessionContext));
+       }
+   }
+
+   /**
+   *
+   * @param values
+   * @param requiredType
+   * @throws RepositoryException
+   */
+  private void setValues(Value[] values, int requiredType) throws RepositoryException {
+      
+      assert(requiredType != PropertyType.UNDEFINED);
+
+      if (values == null) {
+          remove();
+      } else {
+          Value[] targetValues = ValueHelper.convert(values, requiredType, sessionContext.getValueFactory());
+          pd.setValues(ValueConverter.toCoreValues(targetValues, sessionContext));
+      }
+  }
 
 }
\ No newline at end of file