rendered paste bodypublic class LuceneDocumentModel implements IComponentInheritedModel {
Document doc;
public LuceneDocumentModel(Document doc) {
this.doc = doc;
}
public IWrapModel wrapOnInheritance(Component component) {
return new WrapLuceneFieldModel(doc, component.getId(), false);
}
public Object getObject() {
return doc;
}
public void setObject(Object object) {
doc = (Document)object;
}
public void detach() {
}
public class WrapLuceneFieldModel extends LuceneFieldModel implements IWrapModel {
public IModel getWrappedModel() {
return LuceneDocumentModel.this;
}
public WrapLuceneFieldModel(Document doc, String fieldName, boolean multivalued) {
super(doc, fieldName, multivalued);
}
}
}
public class LuceneFieldModel extends Model implements IWrapModel {
Document doc;
String fieldName;
boolean multivalued;
/**
* @param doc Pass null if you wish to override {@link #getWrappedModel()}
* @param fieldName
* @param multivalued
*/
public LuceneFieldModel(Document doc, String fieldName, boolean multivalued) {
this.doc = doc;
this.fieldName = fieldName;
this.multivalued = multivalued;
}
public IModel getWrappedModel() {
throw new RuntimeException("Document is null and getWrappedModel() is not overriden!");
}
public Object getObject() {
if (doc == null) {
IModel model = getWrappedModel();
if (model == null)
return null;
doc = (Document)model.getObject();
}
String[] fieldValues = doc.getValues(fieldName);
// return fieldValue == null ? "" : fieldValue;
if (fieldValues == null)
return null;
if (multivalued)
return Arrays.asList(fieldValues);
if (fieldValues.length > 0)
return fieldValues[0];
return null;
}
public void setObject(Object object) {
if (doc == null)
doc = (Document)getWrappedModel().getObject();
doc.removeField(fieldName);
if (object != null) {
if (multivalued)
Lucene.addMultiValueField(doc, fieldName, (String[]) ((Collection) object).toArray(new String[0]));
else
Lucene.addField(doc, fieldName, object.toString());
}
}
}
DropDownChoice choice = new DropDownChoice("choice", new LuceneFieldModel(null, fieldName, false) {
@Override
public IModel getWrappedModel() {
return getInnermostModel();
}
}, new Model() {
@Override
public Object getObject() {
return new ArrayList<String>(Lucene.getAllByUniqueField(fieldName).keySet());
}
});