package org.ovirt.engine.ui.common.widget.uicommon;
import org.ovirt.engine.ui.common.idhandler.HasElementId;
import org.ovirt.engine.ui.common.uicommon.model.ModelProvider;
import org.ovirt.engine.ui.common.widget.form.FormBuilder;
import org.ovirt.engine.ui.common.widget.form.GeneralFormPanel;
import org.ovirt.engine.ui.uicommonweb.HasCleanup;
import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
import com.google.gwt.editor.client.Editor;
import com.google.gwt.user.client.ui.Composite;
/**
* Base class for widgets that use {@link GeneralFormPanel} to represent UiCommon entity models.
*
* @param <T>
* Model type being edited.
*/
public abstract class AbstractModelBoundFormWidget<T extends EntityModel> extends Composite implements Editor<T>, HasElementId, HasCleanup {
private final ModelProvider<T> modelProvider;
private final GeneralFormPanel formPanel;
protected final FormBuilder formBuilder;
public AbstractModelBoundFormWidget(ModelProvider<T> modelProvider, int numOfColumns, int numOfRows) {
this.modelProvider = modelProvider;
this.formPanel = new GeneralFormPanel();
this.formBuilder = new FormBuilder(formPanel, numOfColumns, numOfRows);
initWidget(formPanel);
}
protected T getModel() {
return modelProvider.getModel();
}
/**
* Updates this Editor widget according to the current model.
*/
public void update() {
T model = getModel();
doEdit(model);
formBuilder.update(model);
}
/**
* Performs the actual Editor logic, using Editor Driver to update fields of the widget.
*/
protected abstract void doEdit(T model);
public void setElementId(String elementId) {
this.getElement().setId(elementId);
formPanel.setElementId(elementId);
}
}