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 ch...@apache.org on 2014/11/10 15:51:57 UTC
svn commit: r1637880 - in /jackrabbit/oak/trunk/oak-lucene/src:
main/java/org/apache/jackrabbit/oak/plugins/index/lucene/
test/java/org/apache/jackrabbit/oak/plugins/index/lucene/
Author: chetanm
Date: Mon Nov 10 14:51:56 2014
New Revision: 1637880
URL: http://svn.apache.org/r1637880
Log:
OAK-2261 - Enable support for NodeType based indexing rules
Switch to using NodeState instead of NodeBuilder in IndexDefinition
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/PropertyDefinition.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/RelativeProperty.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopierTest.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/RelativePropertyTest.java
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java?rev=1637880&r1=1637879&r2=1637880&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java Mon Nov 10 14:51:56 2014
@@ -34,7 +34,7 @@ import com.google.common.primitives.Ints
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper;
-import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.lucene.codecs.Codec;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -80,7 +80,7 @@ class IndexDefinition {
private final boolean storageEnabled;
- private final NodeBuilder definition;
+ private final NodeState definition;
private final Map<String, PropertyDefinition> propDefns;
@@ -102,7 +102,7 @@ class IndexDefinition {
*/
private final long entryCount;
- public IndexDefinition(NodeBuilder defn) {
+ public IndexDefinition(NodeState defn) {
this.definition = defn;
PropertyState pst = defn.getProperty(INCLUDE_PROPERTY_TYPES);
if (pst != null) {
@@ -165,7 +165,7 @@ class IndexDefinition {
return orderedProps.contains(name);
}
- public NodeBuilder getDefinition() {
+ public NodeState getDefinition() {
return definition;
}
@@ -282,12 +282,12 @@ class IndexDefinition {
return ImmutableMap.copyOf(relProps);
}
- private Map<String, PropertyDefinition> collectPropertyDefns(NodeBuilder defn) {
+ private Map<String, PropertyDefinition> collectPropertyDefns(NodeState defn) {
Map<String, PropertyDefinition> propDefns = newHashMap();
- NodeBuilder propNode = defn.getChildNode(LuceneIndexConstants.PROP_NODE);
+ NodeState propNode = defn.getChildNode(LuceneIndexConstants.PROP_NODE);
//Include all immediate child nodes to 'properties' node by default
for (String propName : Iterables.concat(includes, orderedProps, propNode.getChildNodeNames())) {
- NodeBuilder propDefnNode;
+ NodeState propDefnNode;
if (relativeProps.containsKey(propName)) {
propDefnNode = relativeProps.get(propName).getPropDefnNode(propNode);
} else {
@@ -332,22 +332,22 @@ class IndexDefinition {
return codec;
}
- private static boolean getOptionalValue(NodeBuilder definition, String propName, boolean defaultVal){
+ private static boolean getOptionalValue(NodeState definition, String propName, boolean defaultVal){
PropertyState ps = definition.getProperty(propName);
return ps == null ? defaultVal : ps.getValue(Type.BOOLEAN);
}
- private static int getOptionalValue(NodeBuilder definition, String propName, int defaultVal){
+ private static int getOptionalValue(NodeState definition, String propName, int defaultVal){
PropertyState ps = definition.getProperty(propName);
return ps == null ? defaultVal : Ints.checkedCast(ps.getValue(Type.LONG));
}
- private static String getOptionalValue(NodeBuilder definition, String propName, String defaultVal){
+ private static String getOptionalValue(NodeState definition, String propName, String defaultVal){
PropertyState ps = definition.getProperty(propName);
return ps == null ? defaultVal : ps.getValue(Type.STRING);
}
- private static Set<String> getMultiProperty(NodeBuilder definition, String propName){
+ private static Set<String> getMultiProperty(NodeState definition, String propName){
PropertyState pse = definition.getProperty(propName);
return pse != null ? ImmutableSet.copyOf(pse.getValue(Type.STRINGS)) : Collections.<String>emptySet();
}
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java?rev=1637880&r1=1637879&r2=1637880&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java Mon Nov 10 14:51:56 2014
@@ -43,7 +43,7 @@ class IndexNode {
static IndexNode open(String indexPath, NodeState defnNodeState,@Nullable IndexCopier cloner)
throws IOException {
Directory directory = null;
- IndexDefinition definition = new IndexDefinition(new ReadOnlyBuilder(defnNodeState));
+ IndexDefinition definition = new IndexDefinition(defnNodeState);
NodeState data = defnNodeState.getChildNode(INDEX_DATA_CHILD_NAME);
if (data.exists()) {
directory = new OakDirectory(new ReadOnlyBuilder(data), definition);
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java?rev=1637880&r1=1637879&r2=1637880&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java Mon Nov 10 14:51:56 2014
@@ -67,7 +67,7 @@ public class LuceneIndexEditorContext {
throws IOException {
String path = definition.getString(PERSISTENCE_PATH);
if (path == null) {
- return new OakDirectory(definition.child(INDEX_DATA_CHILD_NAME), new IndexDefinition(definition));
+ return new OakDirectory(definition.child(INDEX_DATA_CHILD_NAME), new IndexDefinition(definition.getBaseState()));
} else {
// try {
File file = new File(path);
@@ -105,7 +105,7 @@ public class LuceneIndexEditorContext {
LuceneIndexEditorContext(NodeBuilder definition, Analyzer analyzer, IndexUpdateCallback updateCallback) {
this.definitionBuilder = definition;
- this.definition = new IndexDefinition(definitionBuilder);
+ this.definition = new IndexDefinition(definitionBuilder.getBaseState());
this.config = getIndexWriterConfig(analyzer, this.definition);
this.indexedNodes = 0;
this.updateCallback = updateCallback;
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/PropertyDefinition.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/PropertyDefinition.java?rev=1637880&r1=1637879&r2=1637880&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/PropertyDefinition.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/PropertyDefinition.java Mon Nov 10 14:51:56 2014
@@ -22,20 +22,20 @@ package org.apache.jackrabbit.oak.plugin
import javax.jcr.PropertyType;
import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
class PropertyDefinition {
private static final Logger log = LoggerFactory.getLogger(PropertyDefinition.class);
private final String name;
- private final NodeBuilder definition;
+ private final NodeState definition;
private final int propertyType;
private double fieldBoost;
private boolean hasFieldBoost;
- public PropertyDefinition(IndexDefinition idxDefn, String name, NodeBuilder defn) {
+ public PropertyDefinition(IndexDefinition idxDefn, String name, NodeState defn) {
this.name = name;
this.definition = defn;
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/RelativeProperty.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/RelativeProperty.java?rev=1637880&r1=1637879&r2=1637880&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/RelativeProperty.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/RelativeProperty.java Mon Nov 10 14:51:56 2014
@@ -24,7 +24,6 @@ import javax.annotation.Nonnull;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.commons.PathUtils;
-import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import static com.google.common.collect.ImmutableList.copyOf;
@@ -54,8 +53,8 @@ class RelativeProperty {
}
@Nonnull
- public NodeBuilder getPropDefnNode(NodeBuilder propNode) {
- NodeBuilder result = propNode;
+ public NodeState getPropDefnNode(NodeState propNode) {
+ NodeState result = propNode;
for (String name : elements(propertyPath)){
result = result.getChildNode(name);
}
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopierTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopierTest.java?rev=1637880&r1=1637879&r2=1637880&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopierTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopierTest.java Mon Nov 10 14:51:56 2014
@@ -55,7 +55,7 @@ public class IndexCopierTest {
@Test
public void basicTest() throws Exception{
Directory baseDir = new RAMDirectory();
- IndexDefinition defn = new IndexDefinition(builder);
+ IndexDefinition defn = new IndexDefinition(builder.getNodeState());
IndexCopier c1 = new RAMIndexCopier(baseDir, sameThreadExecutor(), getWorkDir());
Directory remote = new RAMDirectory();
@@ -81,7 +81,7 @@ public class IndexCopierTest {
@Test
public void concurrentRead() throws Exception{
Directory baseDir = new RAMDirectory();
- IndexDefinition defn = new IndexDefinition(builder);
+ IndexDefinition defn = new IndexDefinition(builder.getNodeState());
CollectingExecutor executor = new CollectingExecutor();
IndexCopier c1 = new RAMIndexCopier(baseDir, executor, getWorkDir());
@@ -120,7 +120,7 @@ public class IndexCopierTest {
@Test
public void reuseLocalDir() throws Exception{
Directory baseDir = new RAMDirectory();
- IndexDefinition defn = new IndexDefinition(builder);
+ IndexDefinition defn = new IndexDefinition(builder.getNodeState());
IndexCopier c1 = new RAMIndexCopier(baseDir, sameThreadExecutor(), getWorkDir());
TestRAMDirectory remote = new TestRAMDirectory();
@@ -161,7 +161,7 @@ public class IndexCopierTest {
Directory baseDir = new CloseSafeDir();
- IndexDefinition defn = new IndexDefinition(builder);
+ IndexDefinition defn = new IndexDefinition(builder.getNodeState());
IndexCopier c1 = new RAMIndexCopier(baseDir, sameThreadExecutor(), getWorkDir());
Directory r1 = new RAMDirectory();
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java?rev=1637880&r1=1637879&r2=1637880&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java Mon Nov 10 14:51:56 2014
@@ -50,7 +50,7 @@ public class IndexDefinitionTest {
@Test
public void fullTextEnabled() throws Exception{
- IndexDefinition defn = new IndexDefinition(builder);
+ IndexDefinition defn = new IndexDefinition(builder.getNodeState());
assertTrue("By default fulltext is enabled", defn.isFullTextEnabled());
assertTrue("By default everything is indexed", defn.includeProperty("foo"));
assertFalse("Property types need to be defined", defn.includePropertyType(PropertyType.DATE));
@@ -65,7 +65,7 @@ public class IndexDefinitionTest {
builder.setProperty(createProperty(INCLUDE_PROPERTY_TYPES, of(TYPENAME_LONG), STRINGS));
builder.setProperty(createProperty(INCLUDE_PROPERTY_NAMES, of("foo" , "bar"), STRINGS));
builder.setProperty(LuceneIndexConstants.FULL_TEXT_ENABLED, false);
- IndexDefinition defn = new IndexDefinition(builder);
+ IndexDefinition defn = new IndexDefinition(builder.getNodeState());
assertFalse(defn.isFullTextEnabled());
assertFalse("If fulltext disabled then nothing stored",defn.isStored("foo"));
@@ -84,7 +84,7 @@ public class IndexDefinitionTest {
public void propertyDefinition() throws Exception{
builder.child(PROP_NODE).child("foo").setProperty(LuceneIndexConstants.PROP_TYPE, PropertyType.TYPENAME_DATE);
builder.setProperty(createProperty(INCLUDE_PROPERTY_NAMES, of("foo" , "bar"), STRINGS));
- IndexDefinition defn = new IndexDefinition(builder);
+ IndexDefinition defn = new IndexDefinition(builder.getNodeState());
assertTrue(defn.hasPropertyDefinition("foo"));
assertFalse(defn.hasPropertyDefinition("bar"));
@@ -95,7 +95,7 @@ public class IndexDefinitionTest {
@Test
public void propertyDefinitionWithExcludes() throws Exception{
builder.child(PROP_NODE).child("foo").setProperty(LuceneIndexConstants.PROP_TYPE, PropertyType.TYPENAME_DATE);
- IndexDefinition defn = new IndexDefinition(builder);
+ IndexDefinition defn = new IndexDefinition(builder.getNodeState());
assertTrue(defn.hasPropertyDefinition("foo"));
assertFalse(defn.hasPropertyDefinition("bar"));
@@ -105,17 +105,17 @@ public class IndexDefinitionTest {
@Test
public void codecConfig() throws Exception{
- IndexDefinition defn = new IndexDefinition(builder);
+ IndexDefinition defn = new IndexDefinition(builder.getNodeState());
assertNotNull(defn.getCodec());
assertEquals(oakCodec.getName(), defn.getCodec().getName());
builder.setProperty(LuceneIndexConstants.FULL_TEXT_ENABLED, false);
- defn = new IndexDefinition(builder);
+ defn = new IndexDefinition(builder.getNodeState());
assertNull(defn.getCodec());
Codec simple = Codec.getDefault();
builder.setProperty(LuceneIndexConstants.CODEC_NAME, simple.getName());
- defn = new IndexDefinition(builder);
+ defn = new IndexDefinition(builder.getNodeState());
assertNotNull(defn.getCodec());
assertEquals(simple.getName(), defn.getCodec().getName());
}
@@ -123,7 +123,7 @@ public class IndexDefinitionTest {
@Test
public void relativeProperty() throws Exception{
builder.setProperty(createProperty(INCLUDE_PROPERTY_NAMES, of("foo" , "foo1/bar"), STRINGS));
- IndexDefinition defn = new IndexDefinition(builder);
+ IndexDefinition defn = new IndexDefinition(builder.getNodeState());
assertEquals(1, defn.getRelativeProps().size());
assertEquals(new RelativeProperty("foo1/bar"), Iterables.getFirst(defn.getRelativeProps(), null));
@@ -136,7 +136,7 @@ public class IndexDefinitionTest {
builder.child(PROP_NODE).child("foo1").child("bar").setProperty(LuceneIndexConstants.PROP_TYPE, PropertyType.TYPENAME_DATE);
builder.child(PROP_NODE).child("foo2").child("bar2").child("baz").setProperty(LuceneIndexConstants.PROP_TYPE, PropertyType.TYPENAME_LONG);
builder.setProperty(createProperty(INCLUDE_PROPERTY_NAMES, of("foo", "foo1/bar", "foo2/bar2/baz"), STRINGS));
- IndexDefinition defn = new IndexDefinition(builder);
+ IndexDefinition defn = new IndexDefinition(builder.getNodeState());
assertEquals(2, defn.getRelativeProps().size());
assertNull(defn.getPropDefn("foo"));
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java?rev=1637880&r1=1637879&r2=1637880&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java Mon Nov 10 14:51:56 2014
@@ -54,7 +54,7 @@ public class IndexPlannerTest {
@Test
public void planForSortField() throws Exception{
NodeBuilder defn = LuceneIndexHelper.newLucenePropertyIndexDefinition(builder, "test", ImmutableSet.of("foo"), "async");
- IndexNode node = createIndexNode(new IndexDefinition(defn));
+ IndexNode node = createIndexNode(new IndexDefinition(defn.getNodeState()));
IndexPlanner planner = new IndexPlanner(node, "/foo", createFilter("nt:base"),
ImmutableList.of(new OrderEntry("foo", Type.LONG, OrderEntry.Order.ASCENDING)));
assertNotNull(planner.getPlan());
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java?rev=1637880&r1=1637879&r2=1637880&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java Mon Nov 10 14:51:56 2014
@@ -112,7 +112,7 @@ public class OakDirectoryTest {
}
private Directory createDir(NodeBuilder builder){
- return new OakDirectory(builder.child(INDEX_DATA_CHILD_NAME), new IndexDefinition(builder));
+ return new OakDirectory(builder.child(INDEX_DATA_CHILD_NAME), new IndexDefinition(builder.getNodeState()));
}
byte[] randomBytes(int size) {
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/RelativePropertyTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/RelativePropertyTest.java?rev=1637880&r1=1637879&r2=1637880&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/RelativePropertyTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/RelativePropertyTest.java Mon Nov 10 14:51:56 2014
@@ -57,7 +57,7 @@ public class RelativePropertyTest {
public void getPropDefnNode() throws Exception{
RelativeProperty rp = new RelativeProperty("foo/bar/baz");
builder.child("foo").child("bar").child("baz").setProperty("a", "b");
- NodeBuilder propDefn = rp.getPropDefnNode(builder);
+ NodeState propDefn = rp.getPropDefnNode(builder.getNodeState());
assertTrue(propDefn.exists());
assertEquals("b", propDefn.getString("a"));
}