protected void setProperty(Node node, Property property, boolean isMultiValued) throws RepositoryException { Name name = property.getName(); if (name.equals(JcrLexicon.PRIMARY_TYPE)) return; if (name.equals(ModeShapeIntLexicon.NODE_DEFINITON)) return; if (name.equals(ModeShapeIntLexicon.MULTI_VALUED_PROPERTIES)) return; if (name.equals(JcrLexicon.MIXIN_TYPES)) { for (Object mixinVvalue : property.getValuesAsArray()) { String mixinTypeName = stringFor(mixinVvalue); node.addMixin(mixinTypeName); } return; } // Otherwise, just set the normal property. First determine the expected type ... String propertyName = stringFor(name); if (isMultiValued) { Value[] values = new Value[property.size()]; int index = 0; PropertyType propertyType = null; for (Object value : property) { if (value == null) continue; if (propertyType == null) propertyType = PropertyType.discoverType(value); values[index] = convertToJcrValue(propertyType, value); ++index; } node.setProperty(propertyName, values); } else { Object firstValue = property.getFirstValue(); PropertyType propertyType = PropertyType.discoverType(firstValue); Value value = convertToJcrValue(propertyType, firstValue); node.setProperty(propertyName, value); } }
protected void assertMatchesStore(AbstractJcrNode jcrNode) throws RepositoryException { // Find the corresponding session node ... Node<JcrNodePayload, JcrPropertyPayload> nodeInfo = cache.findNode(jcrNode.nodeId, jcrNode.path()); // And the graph node ... org.modeshape.graph.Node dnaNode = store.getNodeAt(jcrNode.location); assertThat(nodeInfo.getLocation(), is(dnaNode.getLocation())); Set<Name> propertyNames = nodeInfo.getPropertyNames(); for (Name propertyName : propertyNames) { PropertyInfo<JcrPropertyPayload> info = nodeInfo.getProperty(propertyName); assertThat(info.getName(), is(propertyName)); assertThat(info.getProperty().getName(), is(propertyName)); Property actual = dnaNode.getProperty(propertyName); if (actual != null) { assertThat(info.getProperty().size(), is(actual.size())); assertThat(info.getProperty().getValuesAsArray(), is(actual.getValuesAsArray())); } else { if (propertyName.equals(JcrLexicon.UUID)) { // check for a ModeShape UUID property ... actual = dnaNode.getProperty(ModeShapeLexicon.UUID); if (actual != null) { assertThat(info.getProperty().size(), is(actual.size())); assertThat(info.getProperty().getValuesAsArray(), is(actual.getValuesAsArray())); } else { fail("missing property \"" + propertyName + "\" on " + dnaNode); } } else if (propertyName.equals(JcrLexicon.PRIMARY_TYPE)) { // This is okay } else if (propertyName.equals(ModeShapeIntLexicon.MULTI_VALUED_PROPERTIES)) { // This is okay } else { fail("missing property \"" + propertyName + "\" on " + dnaNode); } } } }