/* See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* Esri Inc. licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.esri.gpt.server.assertion.index;
import com.esri.gpt.framework.util.Val;
import com.esri.gpt.server.assertion.components.AsnConstants;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
/**
* Represents the RDF fields associated with a assertion.
*/
public class AsnRdfPart {
/** instance variables ====================================================== */
private boolean analyzeValue = false;
private String predicate;
private String subject;
private String value;
private String valueField;
/** constructors ============================================================ */
/** Default constructor */
public AsnRdfPart() {}
/**
* Construct by duplicating an existing object.
* @param objectToDuplicate the object to duplicate
*/
public AsnRdfPart(AsnRdfPart objectToDuplicate) {
if (objectToDuplicate != null) {
this.setAnalyzeValue(objectToDuplicate.getAnalyzeValue());
this.setPredicate(objectToDuplicate.getPredicate());
this.setSubject(objectToDuplicate.getSubject());
this.setValue(objectToDuplicate.getValue());
this.setValueField(objectToDuplicate.getValueField());
}
}
/** properties ============================================================== */
/**
* Gets the flag indicating whether or not the value should be analyzed prior to indexing.
* @return <code>true</code> if the value should be analyzed
*/
public boolean getAnalyzeValue() {
return this.analyzeValue;
}
/**
* Sets the flag indicating whether or not the value should be analyzed prior to indexing.
* @param analyzeValue <code>true</code> if the value should be analyzed
*/
public void setAnalyzeValue(boolean analyzeValue) {
this.analyzeValue = analyzeValue;
}
/**
* Gets the predicate.
* @return the predicate
*/
public String getPredicate() {
return this.predicate;
}
/**
* Sets the predicate.
* @param predicate the predicate
*/
public void setPredicate(String predicate) {
this.predicate = predicate;
}
/**
* Gets the subject.
* @return the subject
*/
public String getSubject() {
return this.subject;
}
/**
* Sets the subject.
* @param subject the subject
*/
public void setSubject(String subject) {
this.subject = subject;
}
/**
* Gets the value.
* @return the value
*/
public String getValue() {
return this.value;
}
/**
* Sets the value.
* @param value the value
*/
public void setValue(String value) {
this.value = value;
}
/**
* Gets the value field name.
* @return the value field
*/
public String getValueField() {
if ((this.valueField == null) || (this.valueField.length() == 0)) {
return AsnConstants.FIELD_RDF_VALUE;
}
return this.valueField;
}
/**
* Sets the value field name.
* @param valueField the value field
*/
public void setValueField(String valueField) {
this.valueField = valueField;
}
/** methods ================================================================= */
/**
* Appends fields to a document for indexing.
* @param document the document
*/
public void appendWritableFields(Document document) {
Field fld;
String val;
// rdf.subject
val = Val.chkStr(this.getSubject());
if (val.length() > 0) {
fld = new Field(AsnConstants.FIELD_RDF_SUBJECT,val,
Field.Store.YES,Field.Index.NOT_ANALYZED,Field.TermVector.NO);
document.add(fld);
}
// rdf.predicate
val = Val.chkStr(this.getPredicate());
if (val.length() > 0) {
fld = new Field(AsnConstants.FIELD_RDF_PREDICATE,val,
Field.Store.YES,Field.Index.NOT_ANALYZED,Field.TermVector.NO);
document.add(fld);
}
// rdf.value
val = Val.chkStr(this.getValue());
if (val.length() > 0) {
Field.Index opt = Field.Index.NOT_ANALYZED;
if (this.getAnalyzeValue()) {
opt = Field.Index.ANALYZED;
}
fld = new Field(this.getValueField(),val,Field.Store.YES,opt,Field.TermVector.NO);
document.add(fld);
}
}
/**
* Produces a deep clone of the object.
* <br/>The duplication constructor is invoked.
* <br/>return new AsnRdfPart(this);
* @return the duplicated object
*/
public AsnRdfPart duplicate() {
return new AsnRdfPart(this);
}
/**
* Appends property information for the component to a buffer.
* @param sb the buffer to use when appending information
* @param depth the depth of the parent
*/
public void echo(StringBuffer sb, int depth) {
String pfx = "\n";
for (int i=0;i<2*depth;i++) pfx += " ";
sb.append(pfx).append(AsnConstants.FIELD_RDF_SUBJECT+"=").append(this.getSubject());
sb.append(pfx).append(AsnConstants.FIELD_RDF_PREDICATE+"=").append(this.getPredicate());
sb.append(pfx).append(this.getValueField()+"=").append(this.getValue());
}
/**
* Reads the fields of an indexed document.
* @param document the document
*/
public void readFields(Document document) {
this.setSubject(document.get(AsnConstants.FIELD_RDF_SUBJECT));
this.setPredicate(document.get(AsnConstants.FIELD_RDF_PREDICATE));
this.setValue(document.get(this.getValueField()));
}
}