You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by as...@apache.org on 2015/11/11 22:23:57 UTC
[25/50] [abbrv] incubator-geode git commit: Making lucene indexed
fields their own XML element.
Making lucene indexed fields their own XML element.
Rather than <lucene:index fields="x,y"> fields are now listed as their
own individual elements, for example
<lucene:index>
<lucene:field name="x"/>
</lucene:index>
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/71cd7c6c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/71cd7c6c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/71cd7c6c
Branch: refs/heads/develop
Commit: 71cd7c6c8c5e7d8baf451f5d5f4b1edbcf699370
Parents: 5011ee5
Author: Dan Smith <up...@apache.org>
Authored: Thu Oct 8 16:16:56 2015 -0700
Committer: Dan Smith <up...@apache.org>
Committed: Thu Oct 8 17:30:18 2015 -0700
----------------------------------------------------------------------
.../cache/lucene/internal/LuceneIndexImpl.java | 2 +-
.../internal/xml/LuceneIndexCreation.java | 20 +++++++----
.../internal/xml/LuceneIndexXmlGenerator.java | 9 +++--
.../lucene/internal/xml/LuceneXmlConstants.java | 2 +-
.../lucene/internal/xml/LuceneXmlParser.java | 36 ++++++++++++++++----
.../lucene/lucene-1.0.xsd | 8 ++++-
.../xml/LuceneIndexXmlGeneratorJUnitTest.java | 23 +++++++++++--
.../xml/LuceneIndexXmlParserJUnitTest.java | 16 +++++++--
...erIntegrationJUnitTest.createIndex.cache.xml | 12 +++++--
...serIntegrationJUnitTest.parseIndex.cache.xml | 12 +++++--
10 files changed, 114 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/71cd7c6c/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java
index 3964053..257861b 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java
@@ -85,7 +85,7 @@ public abstract class LuceneIndexImpl implements InternalLuceneIndex {
protected void addExtension(PartitionedRegion dataRegion) {
LuceneIndexCreation creation = new LuceneIndexCreation();
creation.setName(this.getName());
- creation.setFieldNames(this.getFieldNames());
+ creation.addFieldNames(this.getFieldNames());
creation.setRegion(dataRegion);
creation.setFieldFieldAnalyzerMap(this.getFieldAnalyzerMap());
dataRegion.getExtensionPoint().addExtension(creation, creation);
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/71cd7c6c/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexCreation.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexCreation.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexCreation.java
index abb147a..5520f96 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexCreation.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexCreation.java
@@ -1,6 +1,9 @@
package com.gemstone.gemfire.cache.lucene.internal.xml;
+import java.util.Arrays;
+import java.util.LinkedHashSet;
import java.util.Map;
+import java.util.Set;
import org.apache.lucene.analysis.Analyzer;
@@ -16,7 +19,7 @@ import com.gemstone.gemfire.internal.cache.xmlcache.XmlGenerator;
public class LuceneIndexCreation implements LuceneIndex, Extension<Region<?, ?>> {
private Region region;
private String name;
- private String[] fieldNames;
+ private Set<String> fieldNames = new LinkedHashSet<String>();
private Map<String, Analyzer> fieldFieldAnalyzerMap;
@@ -28,10 +31,6 @@ public class LuceneIndexCreation implements LuceneIndex, Extension<Region<?, ?>>
this.name = name;
}
- public void setFieldNames(String[] fieldNames) {
- this.fieldNames = fieldNames;
- }
-
public Map<String, Analyzer> getFieldFieldAnalyzerMap() {
return fieldFieldAnalyzerMap;
}
@@ -51,7 +50,7 @@ public class LuceneIndexCreation implements LuceneIndex, Extension<Region<?, ?>>
}
public String[] getFieldNames() {
- return fieldNames;
+ return fieldNames.toArray(new String[fieldNames.size()]);
}
@Override
@@ -73,4 +72,13 @@ public class LuceneIndexCreation implements LuceneIndex, Extension<Region<?, ?>>
//TODO - should this be a different method than the public API here?
service.createIndex(getName(), getRegionPath(), getFieldNames());
}
+
+ public void addField(String name) {
+ this.fieldNames.add(name);
+ }
+
+ public void addFieldNames(String[] fieldNames) {
+ this.fieldNames.addAll(Arrays.asList(fieldNames));
+
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/71cd7c6c/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlGenerator.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlGenerator.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlGenerator.java
index 161e981..dcfbec6 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlGenerator.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlGenerator.java
@@ -34,8 +34,13 @@ public class LuceneIndexXmlGenerator implements XmlGenerator<Region<?, ?>> {
AttributesImpl attr = new AttributesImpl();
//TODO - should the type be xs:string ?
XmlGeneratorUtils.addAttribute(attr, NAME, index.getName());
- XmlGeneratorUtils.addAttribute(attr, FIELDS, String.join(",", index.getFieldNames()));
- XmlGeneratorUtils.emptyElement(cacheXmlGenerator.getContentHandler(), PREFIX, INDEX, attr);
+ XmlGeneratorUtils.startElement(handler, PREFIX, INDEX, attr);
+ for(String field : index.getFieldNames()) {
+ AttributesImpl fieldAttr = new AttributesImpl();
+ XmlGeneratorUtils.addAttribute(fieldAttr, NAME, field);
+ XmlGeneratorUtils.emptyElement(handler, PREFIX, FIELD, fieldAttr);
+ }
+ XmlGeneratorUtils.endElement(handler, PREFIX, INDEX);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/71cd7c6c/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneXmlConstants.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneXmlConstants.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneXmlConstants.java
index 97193b8..45c08b6 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneXmlConstants.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneXmlConstants.java
@@ -7,6 +7,6 @@ public class LuceneXmlConstants {
public static final String NAME = "name";
public static final String REGION = "index";
public static final String INDEX = "index";
- public static final String FIELDS = "fields";
+ public static final String FIELD = "field";
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/71cd7c6c/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneXmlParser.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneXmlParser.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneXmlParser.java
index 8630a44..e11814a 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneXmlParser.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneXmlParser.java
@@ -27,28 +27,52 @@ public class LuceneXmlParser extends AbstractXmlParser {
if(INDEX.equals(localName)) {
startIndex(atts);
}
+ if(FIELD.equals(localName)) {
+ startField(atts);
+ }
+ }
+
+ private void startField(Attributes atts) {
+ //Ignore any whitespace noise between fields
+ if(stack.peek() instanceof StringBuffer) {
+ stack.pop();
+ }
+ LuceneIndexCreation creation = (LuceneIndexCreation) stack.peek();
+ String name = atts.getValue(NAME);
+ creation.addField(name);
}
private void startIndex(Attributes atts) {
final RegionCreation region = (RegionCreation) stack.peek();
RegionAttributesCreation rac = (RegionAttributesCreation) region.getAttributes();
String name = atts.getValue(NAME);
- String[] fields = atts.getValue(FIELDS).split(" *, *");
rac.addAsyncEventQueueId(LuceneServiceImpl.getUniqueIndexName(name, region.getFullPath()));
-
LuceneIndexCreation indexCreation = new LuceneIndexCreation();
indexCreation.setName(name);
- indexCreation.setFieldNames(fields);
indexCreation.setRegion(region);
region.getExtensionPoint().addExtension(indexCreation, indexCreation);
- //TODO support nested field objects by adding the creation object to the stack
- //stack.push(indexCreation)
+ stack.push(indexCreation);
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
- //Nothing to do.
+ if(!NAMESPACE.equals(uri)) {
+ return;
+ }
+ if(INDEX.equals(localName)) {
+ endIndex();
+ }
+ }
+
+ private void endIndex() {
+ //Ignore any whitespace noise between fields
+ if(stack.peek() instanceof StringBuffer) {
+ stack.pop();
+ }
+
+ //Remove the index creation from the stack
+ stack.pop();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/71cd7c6c/gemfire-lucene/src/main/resources/META-INF/schemas/geode.incubator.apache.org/lucene/lucene-1.0.xsd
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/resources/META-INF/schemas/geode.incubator.apache.org/lucene/lucene-1.0.xsd b/gemfire-lucene/src/main/resources/META-INF/schemas/geode.incubator.apache.org/lucene/lucene-1.0.xsd
index 66a4aad..88df552 100644
--- a/gemfire-lucene/src/main/resources/META-INF/schemas/geode.incubator.apache.org/lucene/lucene-1.0.xsd
+++ b/gemfire-lucene/src/main/resources/META-INF/schemas/geode.incubator.apache.org/lucene/lucene-1.0.xsd
@@ -29,8 +29,14 @@ XML schema for Lucene indexes in Geode.
</xsd:annotation>
<xsd:element name="index">
<xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="field" maxOccurs="unbounded">
+ <xsd:complexType>
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
<xsd:attribute name="name" type="xsd:string"/>
- <xsd:attribute name="fields" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/71cd7c6c/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlGeneratorJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlGeneratorJUnitTest.java b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlGeneratorJUnitTest.java
index a31e7e1..3db5d73 100644
--- a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlGeneratorJUnitTest.java
+++ b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlGeneratorJUnitTest.java
@@ -3,6 +3,10 @@ package com.gemstone.gemfire.cache.lucene.internal.xml;
import static org.junit.Assert.*;
import static org.mockito.Matchers.*;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.mockito.ArgumentCaptor;
@@ -26,7 +30,8 @@ public class LuceneIndexXmlGeneratorJUnitTest {
public void generateWithFields() throws SAXException {
LuceneIndex index = Mockito.mock(LuceneIndex.class);
Mockito.when(index.getName()).thenReturn("index");
- Mockito.when(index.getFieldNames()).thenReturn(new String[] {"a", "b"});
+ String[] fields = new String[] {"field1", "field2"};
+ Mockito.when(index.getFieldNames()).thenReturn(fields);
LuceneIndexXmlGenerator generator = new LuceneIndexXmlGenerator(index);
CacheXmlGenerator cacheXmlGenerator = Mockito.mock(CacheXmlGenerator.class);
@@ -34,11 +39,23 @@ public class LuceneIndexXmlGeneratorJUnitTest {
Mockito.when(cacheXmlGenerator.getContentHandler()).thenReturn(handler);
generator.generate(cacheXmlGenerator);
- ArgumentCaptor<Attributes> captor = new ArgumentCaptor<>();
+ ArgumentCaptor<Attributes> captor = ArgumentCaptor.forClass(Attributes.class);
Mockito.verify(handler).startElement(eq(""), eq("index"), eq("lucene:index"), captor.capture());
Attributes value = captor.getValue();
assertEquals("index", value.getValue(LuceneXmlConstants.NAME));
- assertEquals("a,b", value.getValue(LuceneXmlConstants.FIELDS));
+
+ captor = ArgumentCaptor.forClass(Attributes.class);
+ Mockito.verify(handler, Mockito.times(2)).startElement(eq(""), eq("field"), eq("lucene:field"), captor.capture());
+ Set<String> foundFields = new HashSet<String>();
+ for(Attributes fieldAttr : captor.getAllValues()) {
+ foundFields.add(fieldAttr.getValue(LuceneXmlConstants.NAME));
+ }
+
+ HashSet<String> expected = new HashSet<String>(Arrays.asList(fields));
+ assertEquals(expected, foundFields);
+
+ Mockito.verify(handler, Mockito.times(2)).endElement(eq(""), eq("field"), eq("lucene:field"));
+ Mockito.verify(handler).endElement(eq(""), eq("index"), eq("lucene:index"));
}
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/71cd7c6c/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserJUnitTest.java b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserJUnitTest.java
index 808c11e..ff271dd 100644
--- a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserJUnitTest.java
+++ b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserJUnitTest.java
@@ -28,13 +28,25 @@ public class LuceneIndexXmlParserJUnitTest {
stack.push(rc);
parser.setStack(stack);
XmlGeneratorUtils.addAttribute(attrs, LuceneXmlConstants.NAME, "index");
- XmlGeneratorUtils.addAttribute(attrs, LuceneXmlConstants.FIELDS, "a,b,c");
parser.startElement(LuceneXmlConstants.NAMESPACE, LuceneXmlConstants.INDEX, null, attrs);
+
+ AttributesImpl field1 = new AttributesImpl();
+ XmlGeneratorUtils.addAttribute(field1, LuceneXmlConstants.NAME, "field1");
+ AttributesImpl field2 = new AttributesImpl();
+ XmlGeneratorUtils.addAttribute(field2, LuceneXmlConstants.NAME, "field2");
+
+ parser.startElement(LuceneXmlConstants.NAMESPACE, LuceneXmlConstants.FIELD, null, field1);
+ parser.endElement(LuceneXmlConstants.NAMESPACE, LuceneXmlConstants.FIELD, null);
+ parser.startElement(LuceneXmlConstants.NAMESPACE, LuceneXmlConstants.FIELD, null, field2);
+ parser.endElement(LuceneXmlConstants.NAMESPACE, LuceneXmlConstants.FIELD, null);
+
+
parser.endElement(LuceneXmlConstants.NAMESPACE, LuceneXmlConstants.INDEX, null);
+ assertEquals(rc, stack.peek());
LuceneIndexCreation index = (LuceneIndexCreation) rc.getExtensionPoint().getExtensions().iterator().next();
assertEquals("index", index.getName());
- assertArrayEquals(new String[] {"a", "b", "c"}, index.getFieldNames());
+ assertArrayEquals(new String[] {"field1", "field2"}, index.getFieldNames());
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/71cd7c6c/gemfire-lucene/src/test/resources/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.createIndex.cache.xml
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/test/resources/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.createIndex.cache.xml b/gemfire-lucene/src/test/resources/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.createIndex.cache.xml
index 8350650..7f804e0 100644
--- a/gemfire-lucene/src/test/resources/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.createIndex.cache.xml
+++ b/gemfire-lucene/src/test/resources/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.createIndex.cache.xml
@@ -10,7 +10,15 @@
version="9.0">
<region name="region" refid="PARTITION">
- <lucene:index name="index1" fields="a, b,c,d"/>
- <lucene:index name="index2" fields="f,g"/>
+ <lucene:index name="index1">
+ <lucene:field name="a"/>
+ <lucene:field name="b"/>
+ <lucene:field name="c"/>
+ <lucene:field name="d"/>
+ </lucene:index>
+ <lucene:index name="index2">
+ <lucene:field name="f"/>
+ <lucene:field name="g"/>
+ </lucene:index>
</region>
</cache>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/71cd7c6c/gemfire-lucene/src/test/resources/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.parseIndex.cache.xml
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/test/resources/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.parseIndex.cache.xml b/gemfire-lucene/src/test/resources/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.parseIndex.cache.xml
index 8350650..7f804e0 100644
--- a/gemfire-lucene/src/test/resources/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.parseIndex.cache.xml
+++ b/gemfire-lucene/src/test/resources/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.parseIndex.cache.xml
@@ -10,7 +10,15 @@
version="9.0">
<region name="region" refid="PARTITION">
- <lucene:index name="index1" fields="a, b,c,d"/>
- <lucene:index name="index2" fields="f,g"/>
+ <lucene:index name="index1">
+ <lucene:field name="a"/>
+ <lucene:field name="b"/>
+ <lucene:field name="c"/>
+ <lucene:field name="d"/>
+ </lucene:index>
+ <lucene:index name="index2">
+ <lucene:field name="f"/>
+ <lucene:field name="g"/>
+ </lucene:index>
</region>
</cache>
\ No newline at end of file