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.AttributeModifier; import org.apache.wicket.Component; import org.apache.wicket.model.IModel; import org.orienteer.core.component.meta.AbstractMetaPanel; import org.orienteer.core.component.meta.OClassMetaPanel; import org.orienteer.core.component.property.DisplayMode; import org.wicketstuff.select2.ChoiceProvider; import org.wicketstuff.select2.Select2Choice; import ru.ydn.wicket.wicketorientdb.model.DynamicPropertyValueModel; import ru.ydn.wicket.wicketorientdb.model.OPropertyModel; import ru.ydn.wicket.wicketorientdb.model.OPropertyNamingModel; /** * Column for editing {@link com.orientechnologies.orient.core.metadata.schema.OProperty} value of {@link ODocument} via comboBox. * @param <T> Type of combobox values. */ public class OPropertyValueComboBoxColumn<T> extends AbstractModeMetaColumn<ODocument, DisplayMode, OProperty, String> { private final ChoiceProvider<T> choiceProvider; public OPropertyValueComboBoxColumn(OProperty oProperty, ChoiceProvider<T> choiceProvider, IModel<DisplayMode> modeModel) { super(new OPropertyModel(oProperty), modeModel); this.choiceProvider = choiceProvider; } @Override protected <V> AbstractMetaPanel<ODocument, OProperty, V> newMetaPanel(String componentId, final IModel<OProperty> criteryModel, final IModel<ODocument> rowModel) { return new AbstractMetaPanel<ODocument, OProperty, V>(componentId, rowModel, criteryModel) { @Override protected IModel<String> newLabelModel() { return new OPropertyNamingModel(getCriteryModel()); } @Override protected Component resolveComponent(String id, OProperty critery) { Select2Choice<T> comp = new Select2Choice<T>(id, (IModel<T>)getValueModel(), choiceProvider); comp.getSettings().setCloseOnSelect(true).setTheme(OClassMetaPanel.BOOTSTRAP_SELECT2_THEME); comp.add(new AttributeModifier("style", "width:100%;")); return comp; } @Override protected void onConfigure() { super.onConfigure(); setEnabled(getModeModel().getObject().equals(DisplayMode.EDIT)); } @Override protected IModel<V> resolveValueModel() { return new DynamicPropertyValueModel<V>(getEntityModel(), getPropertyModel()); } }; } @Override protected IModel<String> newLabelModel() { return new OPropertyNamingModel(getCriteryModel()); } @Override public String getCssClass() { return "combobox-column"; } }