package org.orienteer.core.component.table; import com.orientechnologies.orient.core.metadata.schema.OProperty; import com.orientechnologies.orient.core.record.impl.ODocument; import org.apache.wicket.Component; import org.apache.wicket.extensions.markup.html.repeater.data.table.filter.FilterForm; import org.apache.wicket.extensions.markup.html.repeater.data.table.filter.IFilterStateLocator; import org.apache.wicket.model.IModel; import org.orienteer.core.component.meta.AbstractMetaPanel; import org.orienteer.core.component.meta.ODocumentMetaPanel; import org.orienteer.core.component.property.DisplayMode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.ydn.wicket.wicketorientdb.filter.IODataFilter; import ru.ydn.wicket.wicketorientdb.model.OPropertyModel; import ru.ydn.wicket.wicketorientdb.model.OPropertyNamingModel; /** * {@link AbstractModeMetaColumn} for {@link ODocument}s */ public class OPropertyValueColumn extends AbstractModeMetaColumn<ODocument, DisplayMode, OProperty, String> { private static final long serialVersionUID = 1L; public OPropertyValueColumn(OProperty oProperty, IModel<DisplayMode> modeModel) { this(new OPropertyModel(oProperty), modeModel); } public OPropertyValueColumn(IModel<OProperty> criteryModel, IModel<DisplayMode> modeModel) { super(criteryModel, modeModel); } public OPropertyValueColumn(String sortProperty, OProperty oProperty, IModel<DisplayMode> modeModel) { this(sortProperty, new OPropertyModel(oProperty), modeModel); } public OPropertyValueColumn(String sortProperty, IModel<OProperty> criteryModel, IModel<DisplayMode> modeModel) { super(sortProperty, criteryModel, modeModel); } @Override protected <V> AbstractMetaPanel<ODocument, OProperty, V> newMetaPanel( String componentId, IModel<OProperty> criteryModel, IModel<ODocument> rowModel) { return new ODocumentMetaPanel<V>(componentId, getModeModel(), rowModel, criteryModel); } @Override protected IModel<String> newLabelModel() { return new OPropertyNamingModel(getCriteryModel()); } private static final Logger LOG = LoggerFactory.getLogger(OPropertyValueColumn.class); @SuppressWarnings("unchecked") @Override public Component getFilter(final String componentId, FilterForm<?> form) { IModel<OProperty> propertyModel = getCriteryModel(); OProperty property = propertyModel.getObject(); Component component = null; if (property != null) { IFilterStateLocator<IODataFilter<ODocument, String>> stateLocator = (IFilterStateLocator<IODataFilter<ODocument, String>>) form.getStateLocator(); IODataFilter<ODocument, String> filterState = stateLocator.getFilterState(); if (filterState != null) { IModel<?> valueModel = filterState.getFilteredValueByProperty(propertyModel.getObject().getName()); component = getComponentForFiltering(componentId, propertyModel, form, valueModel); } } return component; } }