package org.ovirt.engine.ui.webadmin.widget.storage;
import java.util.ArrayList;
import java.util.List;
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.uicommonweb.models.EntityModel;
import org.ovirt.engine.ui.uicommonweb.models.ListModel;
import org.ovirt.engine.ui.uicommonweb.models.storage.LunModel;
import org.ovirt.engine.ui.uicommonweb.models.storage.SanStorageModelBase;
import org.ovirt.engine.ui.uicommonweb.models.storage.SanTargetModel;
import org.ovirt.engine.ui.webadmin.widget.editor.EntityModelCellTable;
import org.ovirt.engine.ui.webadmin.widget.table.column.LunSelectionColumn;
import org.ovirt.engine.ui.webadmin.widget.table.column.LunTextColumn;
import com.google.gwt.cell.client.CheckboxCell;
import com.google.gwt.cell.client.ValueUpdater;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.cellview.client.CellTable.Resources;
import com.google.gwt.user.cellview.client.Header;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TreeItem;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
public class SanStorageLunToTargetList extends AbstractSanStorageList<LunModel, ListModel> {
public SanStorageLunToTargetList(SanStorageModelBase model) {
super(model);
}
public SanStorageLunToTargetList(SanStorageModelBase model, boolean hideLeaf) {
super(model, hideLeaf);
}
@Override
protected void createSanStorageListWidget() {
super.createSanStorageListWidget();
}
@Override
protected ListModel getLeafModel(LunModel rootModel) {
return rootModel.getTargetsList();
}
@Override
protected void createHeaderWidget() {
EntityModelCellTable<ListModel> table = new EntityModelCellTable<ListModel>(false,
(Resources) GWT.create(SanStorageListHeaderResources.class),
true);
// Create select all button
addSelectAllButton(table);
// Create header table
initRootNodeTable(table);
// Add first blank column
table.insertColumn(0, new TextColumn<LunModel>() {
@Override
public String getValue(LunModel model) {
return "";
}
}, "", "20px");
// Add blank item list
table.setRowData(new ArrayList<EntityModel>());
// Style table
table.setWidth("100%", true);
// Add table as header widget
treeHeader.add(table);
}
private void addSelectAllButton(EntityModelCellTable<ListModel> table) {
// Create 'Select All' check-box
Header<Boolean> selectAllHeader = new Header<Boolean>(new CheckboxCell(true, false)) {
@Override
public Boolean getValue() {
return model.getIsAllLunsSelected();
}
};
selectAllHeader.setUpdater(new ValueUpdater<Boolean>() {
@Override
public void update(Boolean value)
{
model.setIsAllLunsSelected(value);
}
});
table.addColumn(new TextColumn<LunModel>() {
@Override
public String getValue(LunModel model) {
return "";
}
}, selectAllHeader, "27px");
}
@Override
protected TreeItem createRootNode(LunModel rootModel) {
final EntityModelCellTable<ListModel> table =
new EntityModelCellTable<ListModel>(true,
(Resources) GWT.create(SanStorageListLunRootResources.class));
// Create table
initRootNodeTable(table);
// Set custom selection column
LunSelectionColumn lunSelectionColumn = new LunSelectionColumn() {
@Override
public LunModel getValue(LunModel object) {
return object;
}
};
table.setCustomSelectionColumn(lunSelectionColumn, "25px");
// Add items
List<LunModel> items = new ArrayList<LunModel>();
items.add(rootModel);
ListModel listModel = new ListModel();
listModel.setItems(items);
// Add selection handlers
rootModel.getPropertyChangedEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
String propName = ((PropertyChangedEventArgs) args).PropertyName;
if (propName.equals("IsSelected")) {
LunModel lunModel = (LunModel) sender;
if (lunModel.getIsSelected() != table.getSelectionModel().isSelected(lunModel)) {
table.getSelectionModel().setSelected(lunModel, lunModel.getIsSelected());
}
}
}
});
table.getSelectionModel().addSelectionChangeHandler(new Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
LunModel lunModel = (LunModel) table.getVisibleItem(0);
lunModel.setIsSelected(table.getSelectionModel().isSelected(lunModel));
}
});
// Update table
table.setRowData(items);
table.setWidth("100%", true);
// Create tree item
HorizontalPanel panel = new HorizontalPanel();
panel.add(table);
TreeItem item = new TreeItem(panel);
return item;
}
private void initRootNodeTable(EntityModelCellTable<ListModel> table) {
table.addColumn(new LunTextColumn() {
@Override
public String getRawValue(LunModel model) {
return model.getLunId();
}
}, "LUN ID", "135px");
table.addColumn(new LunTextColumn() {
@Override
public String getRawValue(LunModel model) {
return String.valueOf(model.getSize()) + "GB";
}
}, "Dev. Size", "70px");
table.addColumn(new LunTextColumn() {
@Override
public String getRawValue(LunModel model) {
return String.valueOf(model.getMultipathing());
}
}, "#path", "40px");
table.addColumn(new LunTextColumn() {
@Override
public String getRawValue(LunModel model) {
return model.getVendorId();
}
}, "Vendor ID", "80px");
table.addColumn(new LunTextColumn() {
@Override
public String getRawValue(LunModel model) {
return model.getProductId();
}
}, "Product ID", "80px");
table.addColumn(new LunTextColumn() {
@Override
public String getRawValue(LunModel model) {
return model.getSerial();
}
}, "Serial");
}
@Override
protected TreeItem createLeafNode(ListModel leafModel) {
if (hideLeaf) {
return null;
}
EntityModelCellTable<ListModel> table =
new EntityModelCellTable<ListModel>(false,
(Resources) GWT.create(SanStorageListTargetTableResources.class),
true);
table.addColumn(new TextColumn<SanTargetModel>() {
@Override
public String getValue(SanTargetModel model) {
return model.getName();
}
}, "Target Name");
table.addColumn(new TextColumn<SanTargetModel>() {
@Override
public String getValue(SanTargetModel model) {
return model.getAddress();
}
}, "Address", "100px");
table.addColumn(new TextColumn<SanTargetModel>() {
@Override
public String getValue(SanTargetModel model) {
return model.getPort();
}
}, "Port", "80px");
List<SanTargetModel> items = (List<SanTargetModel>) leafModel.getItems();
if (items.isEmpty()) {
return null;
}
table.setRowData(items == null ? new ArrayList<SanTargetModel>() : items);
table.edit(leafModel);
ScrollPanel panel = new ScrollPanel();
panel.add(table);
TreeItem item = new TreeItem(panel);
return item;
}
}