package net.rrm.ehour.ui.admin.config.panel;
import net.rrm.ehour.ui.admin.config.MainConfigBackingBean;
import net.rrm.ehour.ui.common.component.MultiTabbedPanel;
import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.ResourceModel;
import java.io.Serializable;
/**
* Config tab panel which acts as a container and manager for the various
* config tabs
*/
public class ConfigTabPanel extends MultiTabbedPanel {
private static final long serialVersionUID = -8241216529074995434L;
public ConfigTabPanel(String id, IModel<MainConfigBackingBean> model) {
super(id);
createTabs(model);
}
private void createTabs(IModel<MainConfigBackingBean> model) {
addTab(ConfigTab.MISC, new MiscConfigPanelFactory(), model);
addTab(ConfigTab.LOCALE, new LocaleConfigPanelFactory(), model);
addTab(ConfigTab.SKIN, new SkinConfigPanelFactory(), model);
addTab(ConfigTab.AUDIT, new AuditConfigPanelFactory(), model);
}
@SuppressWarnings({"serial"})
private void addTab(ConfigTab tabDefinition, final TabFactory tabFactory, final IModel<MainConfigBackingBean> model) {
removeTab(tabDefinition.getTabIndex());
AbstractTab tab = new AbstractTab(new ResourceModel(tabDefinition.getTitleResourceId())) {
@Override
public Panel getPanel(String panelId) {
return tabFactory.createTab(panelId, model);
}
};
getTabs().add(tabDefinition.getTabIndex(), tab);
}
@SuppressWarnings("serial")
private static class AuditConfigPanelFactory implements TabFactory {
public Panel createTab(String panelId, IModel<MainConfigBackingBean> model) {
return new AuditConfigPanel(panelId, model);
}
}
@SuppressWarnings("serial")
private static class SkinConfigPanelFactory implements TabFactory {
public Panel createTab(String panelId, IModel<MainConfigBackingBean> model) {
return new SkinConfigPanel(panelId, model);
}
}
@SuppressWarnings("serial")
private static class MiscConfigPanelFactory implements TabFactory {
public Panel createTab(String panelId, IModel<MainConfigBackingBean> model) {
return new MiscConfigPanel(panelId, model);
}
}
@SuppressWarnings("serial")
private static class LocaleConfigPanelFactory implements TabFactory {
public Panel createTab(String panelId, IModel<MainConfigBackingBean> model) {
return new LocaleConfigPanel(panelId, model);
}
}
private static interface TabFactory extends Serializable {
Panel createTab(String panelId, IModel<MainConfigBackingBean> model);
}
}