package org.ovirt.engine.ui.webadmin.uicommon.model;
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.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<SimpleSelectionTreeNodeModel>();
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 ArrayList<SimpleSelectionTreeNodeModel> children;
private final EventBus eventBus;
private final SelectionTreeNodeModel model;
protected SimpleSelectionTreeNodeModel(final SelectionTreeNodeModel model) {
this.eventBus = ClientGinjectorProvider.instance().getEventBus();
this.model = model;
// Build children List
this.children = new ArrayList<SimpleSelectionTreeNodeModel>();
for (SelectionTreeNodeModel childModel : model.getChildren()) {
children.add(new SimpleSelectionTreeNodeModel(childModel));
}
// Add selection listener
model.getPropertyChangedEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
if ("IsSelectedNullable".equals(((PropertyChangedEventArgs) args).PropertyName)) {
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 ArrayList<SimpleSelectionTreeNodeModel> getChildren() {
return children;
}
@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);
}
}