// @todo delegate setup of root node to NodeTypeInstanceHandler
// id of the root node's definition
NodeDefId nodeDefId;
// definition of jcr:primaryType property
PropDef propDef;
// id of the jcr:system node's definition
NodeDefId jcrSystemDefId;
try {
nodeDefId = ntReg.getRootNodeDef().getId();
EffectiveNodeType ent = ntReg.getEffectiveNodeType(QName.REP_ROOT);
propDef = ent.getApplicablePropertyDef(QName.JCR_PRIMARYTYPE,
PropertyType.NAME, false);
jcrSystemDefId = ent.getApplicableChildNodeDef(QName.JCR_SYSTEM, QName.REP_SYSTEM, ntReg).getId();
} catch (NoSuchNodeTypeException nsnte) {
String msg = "internal error: failed to create root node";
log.error(msg, nsnte);
throw new ItemStateException(msg, nsnte);
} catch (ConstraintViolationException cve) {
String msg = "internal error: failed to create root node";
log.error(msg, cve);
throw new ItemStateException(msg, cve);
}
rootState.setDefinitionId(nodeDefId);
jcrSystemState.setDefinitionId(jcrSystemDefId);
// create jcr:primaryType property on root node state
rootState.addPropertyName(propDef.getName());
PropertyState prop = createInstance(propDef.getName(), rootNodeId);
prop.setValues(new InternalValue[]{InternalValue.create(QName.REP_ROOT)});
prop.setType(propDef.getRequiredType());
prop.setMultiValued(propDef.isMultiple());
prop.setDefinitionId(propDef.getId());
// create jcr:primaryType property on jcr:system node state
jcrSystemState.addPropertyName(propDef.getName());
PropertyState primaryTypeProp = createInstance(propDef.getName(), jcrSystemState.getNodeId());
primaryTypeProp.setValues(new InternalValue[]{InternalValue.create(QName.REP_SYSTEM)});
primaryTypeProp.setType(propDef.getRequiredType());
primaryTypeProp.setMultiValued(propDef.isMultiple());
primaryTypeProp.setDefinitionId(propDef.getId());
// add child node entry for jcr:system node
rootState.addChildNodeEntry(QName.JCR_SYSTEM, RepositoryImpl.SYSTEM_ROOT_NODE_ID);
// add child node entry for virtual jcr:versionStorage