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 2010/05/12 18:16:20 UTC
svn commit: r943567 - in /jackrabbit/trunk:
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/
jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/xml/
jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nam...
Author: stefan
Date: Wed May 12 16:16:19 2010
New Revision: 943567
URL: http://svn.apache.org/viewvc?rev=943567&view=rev
Log:
JCR-2627: System-view export/import of multi-value property does not respect JCR 2.0
Added:
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/util/
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/PropInfo.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/SysViewImportHandler.java
jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/xml/Exporter.java
jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/xml/SystemViewExporter.java
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NameConstants.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/PropInfo.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/PropInfo.java?rev=943567&r1=943566&r2=943567&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/PropInfo.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/PropInfo.java Wed May 12 16:16:19 2010
@@ -56,7 +56,13 @@ public class PropInfo {
private final TextValue[] values;
/**
- * Creates a proprety information instance.
+ * Hint indicating whether the property is multi- or single-value
+ */
+ public enum MultipleStatus { UNKNOWN, SINGLE, MULTIPLE };
+ private MultipleStatus multipleStatus;
+
+ /**
+ * Creates a property information instance.
*
* @param name name of the property being imported
* @param type type of the property being imported
@@ -66,6 +72,26 @@ public class PropInfo {
this.name = name;
this.type = type;
this.values = values;
+ multipleStatus =
+ values.length == 1
+ ? MultipleStatus.UNKNOWN : MultipleStatus.MULTIPLE;
+ }
+
+ /**
+ * Creates a property information instance.
+ *
+ * @param name name of the property being imported
+ * @param type type of the property being imported
+ * @param values value(s) of the property being imported
+ * @param multipleStatus Hint indicating whether the property is
+ * multi- or single-value
+ */
+ public PropInfo(Name name, int type, TextValue[] values,
+ MultipleStatus multipleStatus) {
+ this.name = name;
+ this.type = type;
+ this.values = values;
+ this.multipleStatus = multipleStatus;
}
/**
@@ -90,12 +116,13 @@ public class PropInfo {
public QPropertyDefinition getApplicablePropertyDef(EffectiveNodeType ent)
throws ConstraintViolationException {
- if (values.length == 1) {
- // could be single- or multi-valued (n == 1)
- return ent.getApplicablePropertyDef(name, type);
- } else {
- // can only be multi-valued (n == 0 || n > 1)
+ if (multipleStatus == MultipleStatus.MULTIPLE) {
return ent.getApplicablePropertyDef(name, type, true);
+ } else if (multipleStatus == MultipleStatus.SINGLE) {
+ return ent.getApplicablePropertyDef(name, type, false);
+ } else {
+ // could be single- or multi-valued
+ return ent.getApplicablePropertyDef(name, type);
}
}
@@ -107,6 +134,10 @@ public class PropInfo {
return type;
}
+ public MultipleStatus getMultipleStatus() {
+ return multipleStatus;
+ }
+
public TextValue[] getTextValues() {
return values;
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/SysViewImportHandler.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/SysViewImportHandler.java?rev=943567&r1=943566&r2=943567&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/SysViewImportHandler.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/SysViewImportHandler.java Wed May 12 16:16:19 2010
@@ -16,6 +16,8 @@
*/
package org.apache.jackrabbit.core.xml;
+import org.apache.jackrabbit.core.xml.PropInfo.MultipleStatus;
+
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@@ -54,7 +56,8 @@ class SysViewImportHandler extends Targe
*/
private Name currentPropName;
private int currentPropType = PropertyType.UNDEFINED;
- // list of AppendableValue objects
+ private MultipleStatus currentPropMultipleStatus = MultipleStatus.UNKNOWN;
+ // list of appendable value objects
private ArrayList<BufferedStringValue> currentPropValues =
new ArrayList<BufferedStringValue>();
private BufferedStringValue currentPropValue;
@@ -174,6 +177,13 @@ class SysViewImportHandler extends Targe
throw new SAXException(new InvalidSerializedDataException(
"Unknown property type: " + type, e));
}
+ // 'multi-value' hint (sv:multiple attribute)
+ String multiple = getAttribute(atts, NameConstants.SV_MULTIPLE);
+ if (multiple != null) {
+ currentPropMultipleStatus = MultipleStatus.MULTIPLE;
+ } else {
+ currentPropMultipleStatus = MultipleStatus.UNKNOWN;
+ }
} else if (name.equals(NameConstants.SV_VALUE)) {
// sv:value element
currentPropValue = new BufferedStringValue(resolver, valueFactory);
@@ -287,7 +297,8 @@ class SysViewImportHandler extends Targe
PropInfo prop = new PropInfo(
currentPropName,
currentPropType,
- currentPropValues.toArray(new TextValue[currentPropValues.size()]));
+ currentPropValues.toArray(new TextValue[currentPropValues.size()]),
+ currentPropMultipleStatus);
state.props.add(prop);
}
// reset temp fields
Modified: jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/xml/Exporter.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/xml/Exporter.java?rev=943567&r1=943566&r2=943567&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/xml/Exporter.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/xml/Exporter.java Wed May 12 16:16:19 2010
@@ -167,7 +167,7 @@ public abstract class Exporter {
throws RepositoryException, SAXException;
/**
- * Called by {@link #processProperties(Node)} to process a single-valued
+ * Called by {@link #exportProperties(Node)} to process a single-valued
* property.
*
* @param uri property namespace
@@ -181,13 +181,13 @@ public abstract class Exporter {
throws RepositoryException, SAXException;
/**
- * Called by {@link #processProperties(Node)} to process a multivalued
+ * Called by {@link #exportProperties(Node)} to process a multivalued
* property.
*
* @param uri property namespace
* @param local property name
* @param type property type
- * @param value property values
+ * @param values property values
* @throws RepositoryException if a repository error occurs
* @throws SAXException if a SAX error occurs
*/
Modified: jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/xml/SystemViewExporter.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/xml/SystemViewExporter.java?rev=943567&r1=943566&r2=943567&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/xml/SystemViewExporter.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/xml/SystemViewExporter.java Wed May 12 16:16:19 2010
@@ -84,7 +84,13 @@ public class SystemViewExporter extends
*/
protected void exportProperty(String uri, String local, Value value)
throws RepositoryException, SAXException {
- exportProperty(uri, local, value.getType(), new Value[] { value });
+ // start property element
+ addAttribute(SV, "name", getXMLName(uri, local));
+ addAttribute(SV, "type", PropertyType.nameFromValue(value.getType()));
+ startElement(SV, "property");
+ // value
+ exportValue(value);
+ endElement(SV, "property");
}
/**
@@ -96,6 +102,7 @@ public class SystemViewExporter extends
// start property element
addAttribute(SV, "name", getXMLName(uri, local));
addAttribute(SV, "type", PropertyType.nameFromValue(type));
+ addAttribute(SV, "multiple", Boolean.TRUE.toString());
startElement(SV, "property");
// values
for (int i = 0; i < values.length; i++) {
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NameConstants.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NameConstants.java?rev=943567&r1=943566&r2=943567&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NameConstants.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NameConstants.java Wed May 12 16:16:19 2010
@@ -633,6 +633,9 @@ public class NameConstants {
* sv:name
*/
public static final Name SV_NAME = FACTORY.create(Name.NS_SV_URI, "name");
-
+ /**
+ * sv:multiple
+ */
+ public static final Name SV_MULTIPLE = FACTORY.create(Name.NS_SV_URI, "multiple");
}
\ No newline at end of file