package org.ovirt.engine.ui.userportal.client.modalpanels;
import java.util.ArrayList;
import java.util.List;
import org.ovirt.engine.core.common.businessentities.VDSGroup;
import org.ovirt.engine.core.common.businessentities.storage_domains;
import org.ovirt.engine.core.compat.Event;
import org.ovirt.engine.core.compat.EventArgs;
import org.ovirt.engine.core.compat.IEventListener;
import org.ovirt.engine.core.compat.PropertyChangedEventArgs;
import org.ovirt.engine.ui.uicommon.UICommand;
import org.ovirt.engine.ui.uicommon.models.EntityModel;
import org.ovirt.engine.ui.uicommon.models.userportal.UserPortalListModel;
import org.ovirt.engine.ui.uicommon.models.vms.UnitVmModel;
import org.ovirt.engine.ui.userportal.client.components.CheckboxItemModelBinded;
import org.ovirt.engine.ui.userportal.client.components.NonDraggableModalPanel;
import org.ovirt.engine.ui.userportal.client.components.Button;
import org.ovirt.engine.ui.userportal.client.components.SelectBoxListModelBinded;
import org.ovirt.engine.ui.userportal.client.components.TextItemEntityModelBinded;
import org.ovirt.engine.ui.userportal.client.views.extended.maingrid.MainGrid;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.HeaderItem;
import com.smartgwt.client.widgets.form.fields.SpacerItem;
import com.smartgwt.client.widgets.layout.HLayout;
public class NewTemplateModalPanel extends NonDraggableModalPanel {
final NewTemplateModalPanel newTemplateModalPanel = this;
final MainGrid mainGrid;
final UnitVmModel vmModel;
final UserPortalListModel userPortalListModel;
UICommand cancelCommand;
Button okButton;
Button cancelButton;
Button closeButton;
List<TextItemEntityModelBindedWrapper> textItems = new ArrayList<TextItemEntityModelBindedWrapper>();
public NewTemplateModalPanel(String title, final MainGrid mainGrid) {
super(300, 260, title);
this.mainGrid = mainGrid;
userPortalListModel = mainGrid.uplm;
vmModel = userPortalListModel.getVmModel();
// Creating and set a inner panel
HLayout inPanel = new HLayout();
inPanel.setHeight100();
inPanel.setWidth100();
inPanel.setAlign(Alignment.CENTER);
// Create name and description text boxes
TextItemEntityModelBindedWrapper nameTextItem = new TextItemEntityModelBindedWrapper("Name", vmModel.getName());
TextItemEntityModelBindedWrapper descriptionTextItem = new TextItemEntityModelBindedWrapper("Description", vmModel.getDescription());
// Create cluster and storage select boxes
SelectBoxListModelBinded clusterBox = new SelectBoxListModelBinded("Host Cluster", vmModel.getCluster(), VDSGroup.class);
SelectBoxListModelBinded storageBox = new SelectBoxListModelBinded("Storage Domain", vmModel.getStorageDomain(), storage_domains.class);
// Create 'Make Public' check box
CheckboxItemModelBinded isPublicCheckBox = new CheckboxItemModelBinded("Make Public", vmModel.getIsTemplatePublic());
// Creating error message label
final HeaderItem messageLabel = new HeaderItem();
messageLabel.setDefaultValue(vmModel.getMessage());
messageLabel.setTextBoxStyle("warningLabel");
// Creating and set an indent spacer
SpacerItem indentSpacer = new SpacerItem();
indentSpacer.setWidth(3);
indentSpacer.setHeight(5);
/** Add components to panel **/
// Set items inside a form
DynamicForm f = new DynamicForm();
f.setItems(nameTextItem, descriptionTextItem, clusterBox, storageBox, isPublicCheckBox, indentSpacer, messageLabel);
// Adding components to inner panel
inPanel.addMember(f);
// Adding inner panel to this view
addItem(inPanel);
// Add footer buttons
createFooterButtons();
updateFooterButtons(vmModel.getIsValid());
vmModel.getPropertyChangedEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
String changedPropertyName = ((PropertyChangedEventArgs)args).PropertyName;
if (changedPropertyName.equals("Message"))
{
messageLabel.setValue(vmModel.getMessage());
updateFooterButtons(vmModel.getIsValid());
}
}
});
}
private void createFooterButtons() {
userPortalListModel.getPropertyChangedEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
String propertyName = ((PropertyChangedEventArgs)args).PropertyName;
if (propertyName.equals("VmModel")) {
userPortalListModel.getPropertyChangedEvent().removeListener(this);
destroy();
}
}
});
final UICommand saveCommand = new UICommand("OnNewTemplate", userPortalListModel);
cancelCommand = new UICommand("Cancel", userPortalListModel);
closeButton = new Button("Close");
closeButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
onClose();
}
});
cancelButton = new Button("Cancel");
cancelButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
onClose();
}
});
okButton = new Button("OK");
okButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
saveCommand.Execute();
}
});
}
private void updateFooterButtons(boolean isValid) {
if (isValid)
setFooterButtons(Alignment.RIGHT, okButton, cancelButton);
else
setFooterButtons(Alignment.RIGHT, closeButton);
}
// Wraps TextItemEntityModelBinded in order to add all local components to
// be added to a validation list
class TextItemEntityModelBindedWrapper extends TextItemEntityModelBinded {
public TextItemEntityModelBindedWrapper(String title, EntityModel model) {
super(title, model);
textItems.add(this);
}
}
@Override
public void onClose() {
cancelCommand.Execute();
}
}