All pastes #426010 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-04-05 21:14 UTC
rendered paste body
public 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());
            }
        });