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 ju...@apache.org on 2014/04/15 17:50:32 UTC
svn commit: r1587622 - in /jackrabbit/oak/branches/1.0: ./
oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgradeTest.java
Author: jukka
Date: Tue Apr 15 15:50:31 2014
New Revision: 1587622
URL: http://svn.apache.org/r1587622
Log:
1.0: Merged revisions 1587485 and 1587580 (OAK-1731)
Modified:
jackrabbit/oak/branches/1.0/ (props changed)
jackrabbit/oak/branches/1.0/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
jackrabbit/oak/branches/1.0/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgradeTest.java
Propchange: jackrabbit/oak/branches/1.0/
------------------------------------------------------------------------------
Merged /jackrabbit/oak/trunk:r1587485,1587580
Modified: jackrabbit/oak/branches/1.0/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java?rev=1587622&r1=1587621&r2=1587622&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java (original)
+++ jackrabbit/oak/branches/1.0/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java Tue Apr 15 15:50:31 2014
@@ -16,18 +16,83 @@
*/
package org.apache.jackrabbit.oak.upgrade;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.Lists.newArrayListWithCapacity;
+import static com.google.common.collect.Maps.newHashMap;
+import static java.util.Arrays.asList;
+import static org.apache.jackrabbit.JcrConstants.JCR_AUTOCREATED;
+import static org.apache.jackrabbit.JcrConstants.JCR_CHILDNODEDEFINITION;
+import static org.apache.jackrabbit.JcrConstants.JCR_DEFAULTPRIMARYTYPE;
+import static org.apache.jackrabbit.JcrConstants.JCR_DEFAULTVALUES;
+import static org.apache.jackrabbit.JcrConstants.JCR_HASORDERABLECHILDNODES;
+import static org.apache.jackrabbit.JcrConstants.JCR_ISMIXIN;
+import static org.apache.jackrabbit.JcrConstants.JCR_MANDATORY;
+import static org.apache.jackrabbit.JcrConstants.JCR_MULTIPLE;
+import static org.apache.jackrabbit.JcrConstants.JCR_NAME;
+import static org.apache.jackrabbit.JcrConstants.JCR_NODETYPENAME;
+import static org.apache.jackrabbit.JcrConstants.JCR_ONPARENTVERSION;
+import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYITEMNAME;
+import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
+import static org.apache.jackrabbit.JcrConstants.JCR_PROPERTYDEFINITION;
+import static org.apache.jackrabbit.JcrConstants.JCR_PROTECTED;
+import static org.apache.jackrabbit.JcrConstants.JCR_REQUIREDPRIMARYTYPES;
+import static org.apache.jackrabbit.JcrConstants.JCR_REQUIREDTYPE;
+import static org.apache.jackrabbit.JcrConstants.JCR_SAMENAMESIBLINGS;
+import static org.apache.jackrabbit.JcrConstants.JCR_SUPERTYPES;
+import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM;
+import static org.apache.jackrabbit.JcrConstants.JCR_VALUECONSTRAINTS;
+import static org.apache.jackrabbit.JcrConstants.JCR_VERSIONSTORAGE;
+import static org.apache.jackrabbit.JcrConstants.NT_CHILDNODEDEFINITION;
+import static org.apache.jackrabbit.JcrConstants.NT_NODETYPE;
+import static org.apache.jackrabbit.JcrConstants.NT_PROPERTYDEFINITION;
+import static org.apache.jackrabbit.core.RepositoryImpl.ACTIVITIES_NODE_ID;
+import static org.apache.jackrabbit.core.RepositoryImpl.ROOT_NODE_ID;
+import static org.apache.jackrabbit.core.RepositoryImpl.VERSION_STORAGE_NODE_ID;
+import static org.apache.jackrabbit.oak.api.Type.BOOLEANS;
+import static org.apache.jackrabbit.oak.api.Type.DECIMALS;
+import static org.apache.jackrabbit.oak.api.Type.DOUBLES;
+import static org.apache.jackrabbit.oak.api.Type.LONGS;
+import static org.apache.jackrabbit.oak.api.Type.NAME;
+import static org.apache.jackrabbit.oak.api.Type.NAMES;
+import static org.apache.jackrabbit.oak.api.Type.PATHS;
+import static org.apache.jackrabbit.oak.api.Type.STRINGS;
+import static org.apache.jackrabbit.oak.plugins.memory.PropertyStates.createProperty;
+import static org.apache.jackrabbit.oak.plugins.name.Namespaces.addCustomMapping;
+import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_AVAILABLE_QUERY_OPERATORS;
+import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_ABSTRACT;
+import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_FULLTEXT_SEARCHABLE;
+import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_QUERYABLE;
+import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_QUERY_ORDERABLE;
+import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_NODE_TYPES;
+import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.NT_REP_PRIVILEGE;
+import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.NT_REP_PRIVILEGES;
+import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.REP_AGGREGATES;
+import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.REP_BITS;
+import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.REP_IS_ABSTRACT;
+import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.REP_NEXT;
+import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.REP_PRIVILEGES;
+import static org.apache.jackrabbit.spi.commons.name.NameConstants.ANY_NAME;
+
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.math.BigDecimal;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.jcr.NamespaceException;
+import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
+import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.security.Privilege;
import javax.jcr.version.OnParentVersionAction;
+import com.google.common.collect.HashBiMap;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
import org.apache.jackrabbit.core.RepositoryContext;
import org.apache.jackrabbit.core.config.BeanConfig;
import org.apache.jackrabbit.core.config.LoginModuleConfig;
@@ -41,6 +106,8 @@ import org.apache.jackrabbit.core.securi
import org.apache.jackrabbit.core.security.user.UserManagerImpl;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.namepath.GlobalNameMapper;
+import org.apache.jackrabbit.oak.namepath.NameMapper;
import org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider;
import org.apache.jackrabbit.oak.plugins.index.IndexUpdateProvider;
import org.apache.jackrabbit.oak.plugins.index.property.PropertyIndexEditorProvider;
@@ -68,6 +135,8 @@ import org.apache.jackrabbit.oak.spi.sta
import org.apache.jackrabbit.oak.upgrade.security.GroupEditorProvider;
import org.apache.jackrabbit.oak.upgrade.security.RestrictionEditorProvider;
import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.spi.Path;
+import org.apache.jackrabbit.spi.Path.Element;
import org.apache.jackrabbit.spi.QItemDefinition;
import org.apache.jackrabbit.spi.QNodeDefinition;
import org.apache.jackrabbit.spi.QNodeTypeDefinition;
@@ -77,59 +146,6 @@ import org.apache.jackrabbit.spi.QValueC
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.collect.ImmutableMap;
-
-import static com.google.common.base.Preconditions.checkState;
-import static com.google.common.collect.Lists.newArrayList;
-import static com.google.common.collect.Lists.newArrayListWithCapacity;
-import static com.google.common.collect.Maps.newHashMap;
-import static java.util.Arrays.asList;
-import static org.apache.jackrabbit.JcrConstants.JCR_AUTOCREATED;
-import static org.apache.jackrabbit.JcrConstants.JCR_CHILDNODEDEFINITION;
-import static org.apache.jackrabbit.JcrConstants.JCR_DEFAULTPRIMARYTYPE;
-import static org.apache.jackrabbit.JcrConstants.JCR_HASORDERABLECHILDNODES;
-import static org.apache.jackrabbit.JcrConstants.JCR_ISMIXIN;
-import static org.apache.jackrabbit.JcrConstants.JCR_MANDATORY;
-import static org.apache.jackrabbit.JcrConstants.JCR_MULTIPLE;
-import static org.apache.jackrabbit.JcrConstants.JCR_NAME;
-import static org.apache.jackrabbit.JcrConstants.JCR_NODETYPENAME;
-import static org.apache.jackrabbit.JcrConstants.JCR_ONPARENTVERSION;
-import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYITEMNAME;
-import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
-import static org.apache.jackrabbit.JcrConstants.JCR_PROPERTYDEFINITION;
-import static org.apache.jackrabbit.JcrConstants.JCR_PROTECTED;
-import static org.apache.jackrabbit.JcrConstants.JCR_REQUIREDPRIMARYTYPES;
-import static org.apache.jackrabbit.JcrConstants.JCR_REQUIREDTYPE;
-import static org.apache.jackrabbit.JcrConstants.JCR_SAMENAMESIBLINGS;
-import static org.apache.jackrabbit.JcrConstants.JCR_SUPERTYPES;
-import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM;
-import static org.apache.jackrabbit.JcrConstants.JCR_VALUECONSTRAINTS;
-import static org.apache.jackrabbit.JcrConstants.JCR_VERSIONSTORAGE;
-import static org.apache.jackrabbit.JcrConstants.NT_CHILDNODEDEFINITION;
-import static org.apache.jackrabbit.JcrConstants.NT_NODETYPE;
-import static org.apache.jackrabbit.JcrConstants.NT_PROPERTYDEFINITION;
-import static org.apache.jackrabbit.core.RepositoryImpl.ACTIVITIES_NODE_ID;
-import static org.apache.jackrabbit.core.RepositoryImpl.ROOT_NODE_ID;
-import static org.apache.jackrabbit.core.RepositoryImpl.VERSION_STORAGE_NODE_ID;
-import static org.apache.jackrabbit.oak.api.Type.NAME;
-import static org.apache.jackrabbit.oak.api.Type.NAMES;
-import static org.apache.jackrabbit.oak.api.Type.STRINGS;
-import static org.apache.jackrabbit.oak.plugins.name.Namespaces.addCustomMapping;
-import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_AVAILABLE_QUERY_OPERATORS;
-import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_ABSTRACT;
-import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_FULLTEXT_SEARCHABLE;
-import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_QUERYABLE;
-import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_QUERY_ORDERABLE;
-import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_NODE_TYPES;
-import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.NT_REP_PRIVILEGE;
-import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.NT_REP_PRIVILEGES;
-import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.REP_AGGREGATES;
-import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.REP_BITS;
-import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.REP_IS_ABSTRACT;
-import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.REP_NEXT;
-import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.REP_PRIVILEGES;
-import static org.apache.jackrabbit.spi.commons.name.NameConstants.ANY_NAME;
-
public class RepositoryUpgrade {
/**
@@ -236,10 +252,10 @@ public class RepositoryUpgrade {
sc.getWorkspaceInitializer().initialize(builder, workspace);
}
- Map<String, String> uriToPrefix = newHashMap();
+ HashBiMap<String, String> uriToPrefix = HashBiMap.create();
Map<Integer, String> idxToPrefix = newHashMap();
copyNamespaces(builder, uriToPrefix, idxToPrefix);
- copyNodeTypes(builder);
+ copyNodeTypes(builder, uriToPrefix.inverse());
copyPrivileges(builder);
NodeState root = builder.getNodeState();
@@ -458,7 +474,8 @@ public class RepositoryUpgrade {
return bits;
}
- private void copyNodeTypes(NodeBuilder root) throws RepositoryException {
+ private void copyNodeTypes(NodeBuilder root, Map<String, String> prefixToUri)
+ throws RepositoryException {
NodeTypeRegistry sourceRegistry = source.getNodeTypeRegistry();
NodeBuilder system = root.child(JCR_SYSTEM);
NodeBuilder types = system.child(JCR_NODE_TYPES);
@@ -470,13 +487,14 @@ public class RepositoryUpgrade {
if (!types.hasChildNode(oakName)) {
QNodeTypeDefinition def = sourceRegistry.getNodeTypeDef(name);
NodeBuilder type = types.child(oakName);
- copyNodeType(def, type);
+ copyNodeType(def, type, prefixToUri);
}
}
}
- private void copyNodeType(QNodeTypeDefinition def, NodeBuilder builder)
- throws NamespaceException {
+ private void copyNodeType(
+ QNodeTypeDefinition def, NodeBuilder builder, Map<String, String> prefixToUri)
+ throws RepositoryException {
builder.setProperty(JCR_PRIMARYTYPE, NT_NODETYPE, NAME);
// - jcr:nodeTypeName (NAME) protected mandatory
@@ -510,7 +528,7 @@ public class RepositoryUpgrade {
QPropertyDefinition[] properties = def.getPropertyDefs();
for (int i = 0; i < properties.length; i++) {
String name = JCR_PROPERTYDEFINITION + '[' + (i + 1) + ']';
- copyPropertyDefinition(properties[i], builder.child(name));
+ copyPropertyDefinition(properties[i], builder.child(name), prefixToUri);
}
// + jcr:childNodeDefinition (nt:childNodeDefinition) = nt:childNodeDefinition protected sns
@@ -522,8 +540,8 @@ public class RepositoryUpgrade {
}
private void copyPropertyDefinition(
- QPropertyDefinition def, NodeBuilder builder)
- throws NamespaceException {
+ QPropertyDefinition def, NodeBuilder builder, Map<String, String> prefixToUri)
+ throws RepositoryException {
builder.setProperty(JCR_PRIMARYTYPE, NT_PROPERTYDEFINITION, NAME);
copyItemDefinition(def, builder);
@@ -545,9 +563,9 @@ public class RepositoryUpgrade {
builder.setProperty(JCR_VALUECONSTRAINTS, strings, STRINGS);
}
// - jcr:defaultValues (UNDEFINED) protected multiple
- QValue[] values = def.getDefaultValues();
- if (values != null) {
- // TODO
+ QValue[] qValues = def.getDefaultValues();
+ if (qValues != null) {
+ copyDefaultValues(qValues, builder, new GlobalNameMapper(prefixToUri));
}
// - jcr:multiple (BOOLEAN) protected mandatory
builder.setProperty(JCR_MULTIPLE, def.isMultiple());
@@ -561,6 +579,99 @@ public class RepositoryUpgrade {
builder.setProperty(JCR_IS_QUERY_ORDERABLE, def.isQueryOrderable());
}
+ private static void copyDefaultValues(QValue[] qValues, NodeBuilder builder,
+ NameMapper nameMapper) throws RepositoryException {
+ if (qValues.length == 0) {
+ builder.setProperty(JCR_DEFAULTVALUES, Collections.<String>emptyList(), STRINGS);
+ } else {
+ int type = qValues[0].getType();
+ switch (type) {
+ case PropertyType.STRING:
+ List<String> strings = newArrayListWithCapacity(qValues.length);
+ for (QValue qValue : qValues) {
+ strings.add(qValue.getString());
+ }
+ builder.setProperty(createProperty(JCR_DEFAULTVALUES, strings, STRINGS));
+ return;
+ case PropertyType.LONG:
+ List<Long> longs = newArrayListWithCapacity(qValues.length);
+ for (QValue qValue : qValues) {
+ longs.add(qValue.getLong());
+ }
+ builder.setProperty(createProperty(JCR_DEFAULTVALUES, longs, LONGS));
+ return;
+ case PropertyType.DOUBLE:
+ List<Double> doubles = newArrayListWithCapacity(qValues.length);
+ for (QValue qValue : qValues) {
+ doubles.add(qValue.getDouble());
+ }
+ builder.setProperty(createProperty(JCR_DEFAULTVALUES, doubles, DOUBLES));
+ return;
+ case PropertyType.BOOLEAN:
+ List<Boolean> booleans = Lists.newArrayListWithCapacity(qValues.length);
+ for (QValue qValue : qValues) {
+ booleans.add(qValue.getBoolean());
+ }
+ builder.setProperty(createProperty(JCR_DEFAULTVALUES, booleans, BOOLEANS));
+ return;
+ case PropertyType.NAME:
+ List<String> names = Lists.newArrayListWithCapacity(qValues.length);
+ for (QValue qValue : qValues) {
+ names.add(nameMapper.getOakName(qValue.getName().toString()));
+ }
+ builder.setProperty(createProperty(JCR_DEFAULTVALUES, names, NAMES));
+ return;
+ case PropertyType.PATH:
+ List<String> paths = Lists.newArrayListWithCapacity(qValues.length);
+ for (QValue qValue : qValues) {
+ paths.add(getOakPath(qValue.getPath(), nameMapper));
+ }
+ builder.setProperty(createProperty(JCR_DEFAULTVALUES, paths, PATHS));
+ return;
+ case PropertyType.DECIMAL:
+ List<BigDecimal> decimals = Lists.newArrayListWithCapacity(qValues.length);
+ for (QValue qValue : qValues) {
+ decimals.add(qValue.getDecimal());
+ }
+ builder.setProperty(createProperty(JCR_DEFAULTVALUES, decimals, DECIMALS));
+ return;
+ case PropertyType.DATE:
+ case PropertyType.URI:
+ List<String> values = newArrayListWithCapacity(qValues.length);
+ for (QValue qValue : qValues) {
+ values.add(qValue.getString());
+ }
+ builder.setProperty(createProperty(JCR_DEFAULTVALUES, values, Type.fromTag(type, true)));
+ return;
+ default:
+ throw new UnsupportedRepositoryOperationException(
+ "Cannot copy default value of type " + Type.fromTag(type, true));
+ }
+ }
+ }
+
+ private static String getOakPath(Path path, NameMapper nameMapper)
+ throws RepositoryException {
+ StringBuilder oakPath = new StringBuilder();
+ String sep = "";
+ for (Element element: path.getElements()) {
+ if (element.denotesRoot()) {
+ oakPath.append('/');
+ continue;
+ } else if (element.denotesName()) {
+ oakPath.append(sep).append(nameMapper.getOakName(element.getString()));
+ } else if (element.denotesCurrent()) {
+ oakPath.append(sep).append('.');
+ } else if (element.denotesParent()) {
+ oakPath.append(sep).append("..");
+ } else {
+ throw new UnsupportedRepositoryOperationException("Cannot copy default value " + path);
+ }
+ sep = "/";
+ }
+ return oakPath.toString();
+ }
+
private void copyChildNodeDefinition(
QNodeDefinition def, NodeBuilder builder)
throws NamespaceException {
Modified: jackrabbit/oak/branches/1.0/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgradeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgradeTest.java?rev=1587622&r1=1587621&r2=1587622&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgradeTest.java (original)
+++ jackrabbit/oak/branches/1.0/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgradeTest.java Tue Apr 15 15:50:31 2014
@@ -18,6 +18,11 @@
*/
package org.apache.jackrabbit.oak.upgrade;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertTrue;
+
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.math.BigDecimal;
@@ -35,6 +40,8 @@ import javax.jcr.Value;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.NodeTypeManager;
import javax.jcr.nodetype.NodeTypeTemplate;
+import javax.jcr.nodetype.PropertyDefinition;
+import javax.jcr.nodetype.PropertyDefinitionTemplate;
import javax.jcr.security.Privilege;
import org.apache.jackrabbit.api.JackrabbitSession;
@@ -44,11 +51,6 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
import org.junit.Test;
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertNotNull;
-import static junit.framework.Assert.assertTrue;
-
public class RepositoryUpgradeTest extends AbstractRepositoryUpgradeTest {
private static final Calendar DATE = Calendar.getInstance();
@@ -80,7 +82,21 @@ public class RepositoryUpgradeTest exten
NodeTypeTemplate template = nodeTypeManager.createNodeTypeTemplate();
template.setName("test:unstructured");
template.setDeclaredSuperTypeNames(
- new String[] { "nt:unstructured" });
+ new String[] {"nt:unstructured"});
+ PropertyDefinitionTemplate pDef1 = nodeTypeManager.createPropertyDefinitionTemplate();
+ pDef1.setName("defaultString");
+ pDef1.setRequiredType(PropertyType.STRING);
+ Value stringValue = session.getValueFactory().createValue("stringValue");
+ pDef1.setDefaultValues(new Value[] {stringValue});
+ template.getPropertyDefinitionTemplates().add(pDef1);
+
+ PropertyDefinitionTemplate pDef2 = nodeTypeManager.createPropertyDefinitionTemplate();
+ pDef2.setName("defaultPath");
+ pDef2.setRequiredType(PropertyType.PATH);
+ Value pathValue = session.getValueFactory().createValue("/jcr:path/nt:value", PropertyType.PATH);
+ pDef2.setDefaultValues(new Value[] {pathValue});
+ template.getPropertyDefinitionTemplates().add(pDef2);
+
nodeTypeManager.registerNodeType(template, false);
Node root = session.getRootNode();
@@ -180,7 +196,25 @@ public class RepositoryUpgradeTest exten
NodeType type = manager.getNodeType("test:unstructured");
assertFalse(type.isMixin());
assertTrue(type.isNodeType("nt:unstructured"));
-
+ boolean foundDefaultString = false;
+ boolean foundDefaultPath = false;
+ for (PropertyDefinition pDef : type.getPropertyDefinitions()) {
+ if ("defaultString".equals(pDef.getName())) {
+ assertEquals(PropertyType.STRING, pDef.getRequiredType());
+ assertNotNull(pDef.getDefaultValues());
+ assertEquals(1, pDef.getDefaultValues().length);
+ assertEquals("stringValue", pDef.getDefaultValues()[0].getString());
+ foundDefaultString = true;
+ } else if ("defaultPath".equals(pDef.getName())) {
+ assertEquals(PropertyType.PATH, pDef.getRequiredType());
+ assertNotNull(pDef.getDefaultValues());
+ assertEquals(1, pDef.getDefaultValues().length);
+ assertEquals("/jcr:path/nt:value", pDef.getDefaultValues()[0].getString());
+ foundDefaultPath = true;
+ }
+ }
+ assertTrue("Expected property definition with name \"defaultString\"", foundDefaultString);
+ assertTrue("Expected property definition with name \"defaultPath\"", foundDefaultPath);
} finally {
session.logout();
}