package org.ovirt.engine.ui.userportal.section.main.view.tab.basic;

import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
import org.ovirt.engine.ui.common.idhandler.HasElementId;
import org.ovirt.engine.ui.common.view.AbstractView;
import org.ovirt.engine.ui.userportal.section.main.presenter.tab.basic.MainTabBasicListPresenterWidget;

import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;

public class MainTabBasicListView extends AbstractView implements MainTabBasicListPresenterWidget.ViewDef, HasElementId {

    interface ViewUiBinder extends UiBinder<Widget, MainTabBasicListView> {
        ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
    }

    interface ViewIdHandler extends ElementIdHandler<MainTabBasicListView> {
        ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
    }

    @UiField
    FlowPanel vmPanel;

    private String elementId = DOM.createUniqueId();

    @Inject
    public MainTabBasicListView() {
        initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
        ViewIdHandler.idHandler.generateAndSetIds(this);
    }

    @Override
    public void addToSlot(Object slot, Widget content) {
        if (slot == MainTabBasicListPresenterWidget.TYPE_VmListContent) {
            vmPanel.add(content);
        } else {
            super.addToSlot(slot, content);
        }
    }

    @Override
    public void setInSlot(Object slot, Widget content) {
        if (slot == MainTabBasicListPresenterWidget.TYPE_VmListContent) {
            vmPanel.clear();
            if (content != null) {
                vmPanel.add(content);
            }
        } else {
            super.setInSlot(slot, content);
        }
    }

    @Override
    public String getElementId() {
        return elementId;
    }

    @Override
    public void setElementId(String elementId) {
        this.elementId = elementId;
    }

}
