package org.ovirt.engine.ui.webadmin.uicommon.model; import java.util.ArrayList; import java.util.List; import org.ovirt.engine.ui.common.uicommon.model.TreeNodeModel; import org.ovirt.engine.ui.uicommonweb.models.common.SelectionTreeNodeModel; import org.ovirt.engine.ui.webadmin.gin.ClientGinjectorProvider; import com.google.gwt.event.logical.shared.SelectionEvent; import com.google.gwt.event.logical.shared.SelectionHandler; import com.google.gwt.event.shared.EventBus; import com.google.gwt.event.shared.GwtEvent; import com.google.gwt.event.shared.HandlerRegistration; /** * A {@link TreeNodeModel} for {@link SelectionTreeNodeModel} instances */ public class SimpleSelectionTreeNodeModel implements TreeNodeModel<SelectionTreeNodeModel, SimpleSelectionTreeNodeModel> { /** * Build from a list of {@link SelectionTreeNodeModel} instances */ public static List<SimpleSelectionTreeNodeModel> fromList(List<SelectionTreeNodeModel> list) { List<SimpleSelectionTreeNodeModel> result = new ArrayList<>(); for (SelectionTreeNodeModel selectionTreeNodeModel : list) { result.add(new SimpleSelectionTreeNodeModel(selectionTreeNodeModel)); } return result; } /** * Build from a single {@link SelectionTreeNodeModel} instance */ public static SimpleSelectionTreeNodeModel fromModel(SelectionTreeNodeModel model) { return new SimpleSelectionTreeNodeModel(model); } private final List<SimpleSelectionTreeNodeModel> children; private SimpleSelectionTreeNodeModel parent; private final EventBus eventBus; private final SelectionTreeNodeModel model; protected SimpleSelectionTreeNodeModel(SelectionTreeNodeModel model) { this.eventBus = ClientGinjectorProvider.getEventBus(); this.model = model; // Build children list using depth-first recursion this.children = new ArrayList<>(); for (SelectionTreeNodeModel childModel : model.getChildren()) { SimpleSelectionTreeNodeModel child = new SimpleSelectionTreeNodeModel(childModel); child.parent = this; children.add(child); } // Add selection listener model.getPropertyChangedEvent().addListener((ev, sender, args) -> { if ("IsSelectedNullable".equals(args.propertyName)) { //$NON-NLS-1$ SelectionEvent.fire(SimpleSelectionTreeNodeModel.this, SimpleSelectionTreeNodeModel.this); } }); } @Override public HandlerRegistration addSelectionHandler(SelectionHandler<SimpleSelectionTreeNodeModel> handler) { return eventBus.addHandler(SelectionEvent.getType(), handler); } @Override public void fireEvent(GwtEvent<?> event) { eventBus.fireEvent(event); } @Override public List<SimpleSelectionTreeNodeModel> getChildren() { return children; } @Override public SimpleSelectionTreeNodeModel getParent() { return parent; } @Override public String getName() { return model.getDescription(); } @Override public boolean getSelected() { return model.getIsSelectedNullable() == null ? false : model.getIsSelectedNullable(); } public Boolean getIsSelectedNullable() { return model.getIsSelectedNullable(); } @Override public boolean isEditable() { return model.getIsChangable(); } @Override public void setSelected(boolean value) { model.setIsSelectedNullable(value); } }