package org.ovirt.engine.ui.userportal.client.binders.specific; import java.util.ArrayList; import org.ovirt.engine.ui.uicommon.models.Model; import org.ovirt.engine.ui.uicommon.models.vms.SnapshotModel; import org.ovirt.engine.ui.uicommon.models.vms.VmSnapshotListModel; import org.ovirt.engine.ui.userportal.client.binders.ObjectNameResolver; import org.ovirt.engine.ui.userportal.client.binders.RendererType; import org.ovirt.engine.ui.userportal.client.binders.ToolbarAction; import org.ovirt.engine.ui.userportal.client.binders.interfaces.ListModelDualGridBinder; import org.ovirt.engine.ui.userportal.client.components.GridController; import org.ovirt.engine.ui.userportal.client.modalpanels.ItemRemoveModalPanel; import org.ovirt.engine.ui.userportal.client.modalpanels.NewSnapshotModalPanel; import org.ovirt.engine.ui.userportal.client.util.UserPortalTools; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.smartgwt.client.data.RecordList; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord; public class VmSnapshotListModelBinder implements ListModelDualGridBinder { private VmSnapshotListModel model; private RendererType rendererType = RendererType.DualGrid; private String propertyName = "Apps"; @Override public RecordList calcRecords() { RecordList records = new RecordList(); ArrayList<SnapshotModel> snapshots = (ArrayList<SnapshotModel>)model.getItems(); if (snapshots != null) { for (SnapshotModel snapshot : snapshots) { ListGridRecord r = new ListGridRecord(); r.setAttribute("date", snapshot.getDate() != null ? UserPortalTools.formatDate(snapshot.getDate()) : "Current"); r.setAttribute("disks", snapshot.getParticipantDisks()); r.setAttribute("entity", snapshot); r.setAttribute("entityGuid", snapshot.getSnapshotId()); r.setEnabled(!snapshot.getIsCurrent()); // Get raw description string (ignore < and > characters. // Customize description style if needed. String descriptionStr = SafeHtmlUtils.fromString(snapshot.getDescriptionValue()).asString(); if (snapshot.getIsCurrent()) descriptionStr = "<b><font color=gray>" + descriptionStr + "</font></b>"; if (snapshot.getIsPreviewed()) descriptionStr = "<b><font color=orange>" + descriptionStr + "</font></b>"; r.setAttribute("description", descriptionStr); records.add(r); } } return records; } @Override public void setModel(Model model) { this.model = (VmSnapshotListModel)model; } @Override public RendererType getRendererType() { return rendererType; } @Override public ListGridField[] getFields() { return fields; } private static ListGridField[] fields = { new ListGridField("date", "Date", 120), new ListGridField("description", "Description"), new ListGridField("disks", "Disks", 120) }; @Override public ToolbarAction[] getCommands(final GridController gridController) { ToolbarAction[] actions = new ToolbarAction[] { new ToolbarAction(model.getNewCommand(), new ClickHandler() { @Override public void onClick(ClickEvent event) { model.getNewCommand().Execute(); NewSnapshotModalPanel newSnapshotModalPanel = new NewSnapshotModalPanel(gridController, model); newSnapshotModalPanel.draw(); } }), new ToolbarAction(model.getPreviewCommand(), new ClickHandler() { @Override public void onClick(ClickEvent event) { model.getPreviewCommand().Execute(); gridController.gridChangePerformed(); } }), new ToolbarAction(model.getCommitCommand(), new ClickHandler() { @Override public void onClick(ClickEvent event) { model.getCommitCommand().Execute(); } }), new ToolbarAction(model.getUndoCommand(), new ClickHandler() { @Override public void onClick(ClickEvent event) { model.getUndoCommand().Execute(); gridController.gridChangePerformed(); } }), new ToolbarAction(model.getRemoveCommand(), new ClickHandler() { @Override public void onClick(ClickEvent event) { model.getRemoveCommand().Execute(); ItemRemoveModalPanel p = new ItemRemoveModalPanel(model.getWindow().getTitle(), "Snapshot", model, new ObjectNameResolver() { @Override public String getItemName(Object o) { String date = UserPortalTools.formatDate(((SnapshotModel)o).getDate()); String description = ((SnapshotModel)o).getDescriptionValue(); return "Snapshot from " + date + " with description '" + description + "'"; } }, gridController); p.draw(); } })}; return actions; } @Override public ListGridField[] getAdditionalFields() { return additionalFields; } private static ListGridField[] additionalFields = { new ListGridField("installedApplications", "Installed Applications") }; @Override public RecordList calcAdditionalRecords() { RecordList records = new RecordList(); ArrayList<String> applications = (ArrayList<String>)model.getApps(); if (applications != null) { for (String application : applications) { if (!application.isEmpty()) { ListGridRecord r = new ListGridRecord(); r.setAttribute("installedApplications", application); records.add(r); } } } return records; } @Override public String getPropertyName() { return propertyName; } }