package org.ovirt.engine.ui.webadmin.plugin.entity; import java.util.HashMap; import java.util.Map; import org.ovirt.engine.ui.uicommonweb.place.WebAdminApplicationPlaces; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.ClusterSubTabPanelPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.datacenter.DataCenterSubTabPanelPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.disk.DiskSubTabPanelPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.gluster.VolumeSubTabPanelPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.HostSubTabPanelPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.network.NetworkSubTabPanelPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.pool.PoolSubTabPanelPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.profile.VnicProfileSubTabPanelPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.provider.ProviderSubTabPanelPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.quota.QuotaSubTabPanelPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.storage.StorageSubTabPanelPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.template.TemplateSubTabPanelPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.user.UserSubTabPanelPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.virtualMachine.VirtualMachineSubTabPanelPresenter; import com.google.gwt.event.shared.GwtEvent.Type; import com.gwtplatform.mvp.client.ChangeTabHandler; import com.gwtplatform.mvp.client.RequestTabsHandler; import com.gwtplatform.mvp.client.proxy.RevealContentHandler; /** * Enumerates possible entity types used within the plugin API. * <p> * Contains useful meta-data associated with business entity types. */ public enum EntityType { DataCenter(WebAdminApplicationPlaces.dataCenterMainTabPlace, DataCenterSubTabPanelPresenter.TYPE_RequestTabs, DataCenterSubTabPanelPresenter.TYPE_ChangeTab, DataCenterSubTabPanelPresenter.TYPE_SetTabContent) { @Override protected void initSubTabHistoryTokens(Map<EntityType, String> map) { map.put(Event, WebAdminApplicationPlaces.dataCenterEventSubTabPlace); } }, Cluster(WebAdminApplicationPlaces.clusterMainTabPlace, ClusterSubTabPanelPresenter.TYPE_RequestTabs, ClusterSubTabPanelPresenter.TYPE_ChangeTab, ClusterSubTabPanelPresenter.TYPE_SetTabContent) { }, Host(WebAdminApplicationPlaces.hostMainTabPlace, HostSubTabPanelPresenter.TYPE_RequestTabs, HostSubTabPanelPresenter.TYPE_ChangeTab, HostSubTabPanelPresenter.TYPE_SetTabContent) { @Override protected void initSubTabHistoryTokens(Map<EntityType, String> map) { map.put(Event, WebAdminApplicationPlaces.hostEventSubTabPlace); } }, Network(WebAdminApplicationPlaces.networkMainTabPlace, NetworkSubTabPanelPresenter.TYPE_RequestTabs, NetworkSubTabPanelPresenter.TYPE_ChangeTab, NetworkSubTabPanelPresenter.TYPE_SetTabContent) { }, VnicProfile(WebAdminApplicationPlaces.vnicProfileMainTabPlace, VnicProfileSubTabPanelPresenter.TYPE_RequestTabs, VnicProfileSubTabPanelPresenter.TYPE_ChangeTab, VnicProfileSubTabPanelPresenter.TYPE_SetTabContent) { }, Storage(WebAdminApplicationPlaces.storageMainTabPlace, StorageSubTabPanelPresenter.TYPE_RequestTabs, StorageSubTabPanelPresenter.TYPE_ChangeTab, StorageSubTabPanelPresenter.TYPE_SetTabContent) { @Override protected void initSubTabHistoryTokens(Map<EntityType, String> map) { map.put(Event, WebAdminApplicationPlaces.storageEventSubTabPlace); } }, Disk(WebAdminApplicationPlaces.diskMainTabPlace, DiskSubTabPanelPresenter.TYPE_RequestTabs, DiskSubTabPanelPresenter.TYPE_ChangeTab, DiskSubTabPanelPresenter.TYPE_SetTabContent) { }, VirtualMachine(WebAdminApplicationPlaces.virtualMachineMainTabPlace, VirtualMachineSubTabPanelPresenter.TYPE_RequestTabs, VirtualMachineSubTabPanelPresenter.TYPE_ChangeTab, VirtualMachineSubTabPanelPresenter.TYPE_SetTabContent) { @Override protected void initSubTabHistoryTokens(Map<EntityType, String> map) { map.put(Event, WebAdminApplicationPlaces.virtualMachineEventSubTabPlace); } }, Pool(WebAdminApplicationPlaces.poolMainTabPlace, PoolSubTabPanelPresenter.TYPE_RequestTabs, PoolSubTabPanelPresenter.TYPE_ChangeTab, PoolSubTabPanelPresenter.TYPE_SetTabContent) { }, Template(WebAdminApplicationPlaces.templateMainTabPlace, TemplateSubTabPanelPresenter.TYPE_RequestTabs, TemplateSubTabPanelPresenter.TYPE_ChangeTab, TemplateSubTabPanelPresenter.TYPE_SetTabContent) { @Override protected void initSubTabHistoryTokens(Map<EntityType, String> map) { map.put(Event, WebAdminApplicationPlaces.templateEventSubTabPlace); } }, GlusterVolume(WebAdminApplicationPlaces.volumeMainTabPlace, VolumeSubTabPanelPresenter.TYPE_RequestTabs, VolumeSubTabPanelPresenter.TYPE_ChangeTab, VolumeSubTabPanelPresenter.TYPE_SetTabContent) { @Override protected void initSubTabHistoryTokens(Map<EntityType, String> map) { map.put(Event, WebAdminApplicationPlaces.volumeEventSubTabPlace); } }, Provider(WebAdminApplicationPlaces.providerMainTabPlace, ProviderSubTabPanelPresenter.TYPE_RequestTabs, ProviderSubTabPanelPresenter.TYPE_ChangeTab, ProviderSubTabPanelPresenter.TYPE_SetTabContent) { }, User(WebAdminApplicationPlaces.userMainTabPlace, UserSubTabPanelPresenter.TYPE_RequestTabs, UserSubTabPanelPresenter.TYPE_ChangeTab, UserSubTabPanelPresenter.TYPE_SetTabContent) { @Override protected void initSubTabHistoryTokens(Map<EntityType, String> map) { map.put(Event, WebAdminApplicationPlaces.userEventSubTabPlace); } }, Quota(WebAdminApplicationPlaces.quotaMainTabPlace, QuotaSubTabPanelPresenter.TYPE_RequestTabs, QuotaSubTabPanelPresenter.TYPE_ChangeTab, QuotaSubTabPanelPresenter.TYPE_SetTabContent) { @Override protected void initSubTabHistoryTokens(Map<EntityType, String> map) { map.put(Event, WebAdminApplicationPlaces.quotaEventSubTabPlace); } }, Event(WebAdminApplicationPlaces.eventMainTabPlace), Undefined; // Null object public static EntityType from(String name) { EntityType result = EntityType.Undefined; try { result = EntityType.valueOf(name); } catch (IllegalArgumentException e) { // Do nothing } return result; } private final String mainTabHistoryToken; private final Type<RequestTabsHandler> subTabPanelRequestTabs; private final Type<ChangeTabHandler> subTabPanelChangeTab; private final Type<RevealContentHandler<?>> subTabPanelContentSlot; private Map<EntityType, String> subTabHistoryTokenMap; EntityType(String mainTabHistoryToken, Type<RequestTabsHandler> subTabPanelRequestTabs, Type<ChangeTabHandler> subTabPanelChangeTab, Type<RevealContentHandler<?>> subTabPanelContentSlot) { this.mainTabHistoryToken = mainTabHistoryToken; this.subTabPanelRequestTabs = subTabPanelRequestTabs; this.subTabPanelChangeTab = subTabPanelChangeTab; this.subTabPanelContentSlot = subTabPanelContentSlot; } EntityType(String mainTabHistoryToken) { this(mainTabHistoryToken, null, null, null); } EntityType() { this(null); } /** * Returns the history token used to access main tab presenter. */ public String getMainTabHistoryToken() { return mainTabHistoryToken; } /** * Returns GWTP {@code RequestTabs} event type for sub tab panel presenter. */ public Type<RequestTabsHandler> getSubTabPanelRequestTabs() { return subTabPanelRequestTabs; } /** * Returns GWTP {@code ChangeTab} event type for sub tab panel presenter. */ public Type<ChangeTabHandler> getSubTabPanelChangeTab() { return subTabPanelChangeTab; } /** * Returns GWTP {@code ContentSlot} event type for sub tab panel presenter. */ public Type<RevealContentHandler<?>> getSubTabPanelContentSlot() { return subTabPanelContentSlot; } /** * Returns the history token used to access sub tab presenter of the given type. */ public String getSubTabHistoryToken(EntityType subTabEntityType) { if (subTabHistoryTokenMap == null) { subTabHistoryTokenMap = new HashMap<>(); initSubTabHistoryTokens(subTabHistoryTokenMap); } return subTabHistoryTokenMap.get(subTabEntityType); } protected void initSubTabHistoryTokens(Map<EntityType, String> map) { // No-op, override as necessary } }