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.ajax.AjaxRequestTarget;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.orienteer.core.component.BootstrapSize;
import org.orienteer.core.component.BootstrapType;
import org.orienteer.core.component.command.AjaxFormCommand;
import org.orienteer.core.component.meta.AbstractMetaPanel;
import org.orienteer.core.component.property.DisplayMode;
import ru.ydn.wicket.wicketorientdb.model.DynamicPropertyValueModel;
import ru.ydn.wicket.wicketorientdb.model.OPropertyModel;
import ru.ydn.wicket.wicketorientdb.model.OPropertyNamingModel;
/**
* {@link OrienteerDataTable} Column with 'delete' button.
*/
public class DeleteRowCommandColumn extends AbstractModeMetaColumn<ODocument, DisplayMode, OProperty, String> {
private Component parent;
public DeleteRowCommandColumn(OProperty property, Component parent, IModel<DisplayMode> modeModel) {
super(new OPropertyModel(property), modeModel);
this.parent = parent;
}
@Override
protected <V> AbstractMetaPanel<ODocument, OProperty, V> newMetaPanel(String componentId, 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) {
return new AjaxFormCommand(id, "command.remove") {
@Override
public void onClick(AjaxRequestTarget target) {
super.onClick(target);
rowModel.getObject().delete();
target.add(parent);
}
@Override
protected void onConfigure() {
super.onConfigure();
setVisibilityAllowed(getModeModel().getObject().equals(DisplayMode.EDIT));
}
}.setBootstrapSize(BootstrapSize.EXTRA_SMALL)
.setBootstrapType(BootstrapType.DANGER)
.setIcon((String) null);
}
@Override
protected IModel<V> resolveValueModel() {
return new DynamicPropertyValueModel<V>(getEntityModel(), getPropertyModel());
}
};
}
@Override
protected IModel<String> newLabelModel() {
return new Model<String>("");
}
}