package org.ovirt.engine.ui.webadmin.widget.storage;
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.ui.uicommonweb.models.EntityModel;
import org.ovirt.engine.ui.uicommonweb.models.ListModel;
import org.ovirt.engine.ui.uicommonweb.models.storage.SanStorageModelBase;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Tree;
import com.google.gwt.user.client.ui.TreeItem;
import com.google.gwt.user.client.ui.Widget;
public abstract class AbstractSanStorageList<M extends EntityModel, L extends ListModel> extends Composite {
@SuppressWarnings("rawtypes")
interface WidgetUiBinder extends UiBinder<Widget, AbstractSanStorageList> {
WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class);
}
@UiField
SimplePanel treeHeader;
@UiField
ScrollPanel treeContainer;
SanStorageModelBase model;
Tree tree;
boolean hideLeaf;
public AbstractSanStorageList(SanStorageModelBase model) {
this(model, false);
}
public AbstractSanStorageList(SanStorageModelBase model, boolean hideLeaf) {
this.model = model;
this.hideLeaf = hideLeaf;
initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this));
createHeaderWidget();
createSanStorageListWidget();
}
public void activateItemsUpdate() {
disableItemsUpdate();
model.getItemsChangedEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
updateItems();
}
});
updateItems();
}
public void disableItemsUpdate() {
model.getItemsChangedEvent().getListeners().clear();
}
protected void updateItems() {
List<M> items = (List<M>) model.getItems();
tree.clear();
if (items != null) {
for (M rootModel : items) {
addRootNode(createRootNode(rootModel), createLeafNode(getLeafModel(rootModel)));
}
}
}
protected void addRootNode(TreeItem rootItem, TreeItem leafItem) {
rootItem.getElement().getStyle().setBackgroundColor("#eff3ff");
rootItem.getElement().getStyle().setMarginBottom(1, Unit.PX);
rootItem.getElement().getStyle().setPadding(0, Unit.PX);
if (leafItem != null) {
rootItem.addItem(leafItem);
leafItem.getElement().getStyle().setBackgroundColor("#ffffff");
leafItem.getElement().getStyle().setMarginLeft(0, Unit.PX);
leafItem.getElement().getStyle().setPadding(0, Unit.PX);
}
tree.addItem(rootItem);
}
protected void createSanStorageListWidget() {
tree = new Tree();
treeContainer.add(tree);
}
public void setTreeContainerStyleName(String styleName) {
treeContainer.setStyleName(styleName);
}
public void setTreeContainerHeight(double height) {
treeContainer.getElement().getStyle().setHeight(height, Unit.PX);
}
protected abstract void createHeaderWidget();
protected abstract L getLeafModel(M rootModel);
protected abstract TreeItem createRootNode(M rootModel);
protected abstract TreeItem createLeafNode(L leafModel);
public interface SanStorageListHeaderResources extends CellTable.Resources {
interface TableStyle extends CellTable.Style {
}
@Override
@Source({ CellTable.Style.DEFAULT_CSS, "org/ovirt/engine/ui/webadmin/css/SanStorageListHeader.css" })
TableStyle cellTableStyle();
}
public interface SanStorageListTargetRootResources extends CellTable.Resources {
interface TableStyle extends CellTable.Style {
}
@Override
@Source({ CellTable.Style.DEFAULT_CSS, "org/ovirt/engine/ui/webadmin/css/SanStorageListTargetRoot.css" })
TableStyle cellTableStyle();
}
public interface SanStorageListLunTableResources extends CellTable.Resources {
interface TableStyle extends CellTable.Style {
}
@Override
@Source({ CellTable.Style.DEFAULT_CSS, "org/ovirt/engine/ui/webadmin/css/SanStorageListLunTable.css" })
TableStyle cellTableStyle();
}
public interface SanStorageListLunRootResources extends CellTable.Resources {
interface TableStyle extends CellTable.Style {
}
@Override
@Source({ CellTable.Style.DEFAULT_CSS, "org/ovirt/engine/ui/webadmin/css/SanStorageListLunRoot.css" })
TableStyle cellTableStyle();
}
public interface SanStorageListTargetTableResources extends CellTable.Resources {
interface TableStyle extends CellTable.Style {
}
@Override
@Source({ CellTable.Style.DEFAULT_CSS, "org/ovirt/engine/ui/webadmin/css/SanStorageListTargetTable.css" })
TableStyle cellTableStyle();
}
}