/**
* Copyright (C) 2010 Asterios Raptis
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.alpharogroup.wicket.components.examples.ajaxtabs.addtab;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.extensions.markup.html.tabs.ITab;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import de.alpharogroup.wicket.base.util.ComponentFinder;
import de.alpharogroup.wicket.components.ajax.editable.tabs.AbstractContentTab;
import de.alpharogroup.wicket.components.ajax.editable.tabs.AjaxCloseableTabbedPanel;
import de.alpharogroup.wicket.components.ajax.editable.tabs.ICloseableTab;
import de.alpharogroup.wicket.components.examples.ajaxtabs.tabpanels.TabModel;
import de.alpharogroup.wicket.components.examples.ajaxtabs.tabpanels.TabPanel;
import de.alpharogroup.wicket.components.examples.ajaxtabs.tabpanels.TabbedPanelModels;
public class EditableAjaxTabbedPanelDecorator extends Panel
{
private static final long serialVersionUID = 1L;
private final List<ICloseableTab> tabs = new ArrayList<>();
private final AjaxCloseableTabbedPanel<ICloseableTab> ajaxTabbedPanel;
public EditableAjaxTabbedPanelDecorator(final String id,
final IModel<TabbedPanelModels<String>> model)
{
super(id, model);
setDefaultModel(new CompoundPropertyModel<TabbedPanelModels<String>>(model));
final List<TabModel<String>> tabModels = model.getObject().getTabModels();
for (int i = 0; i < tabModels.size(); i++)
{
tabs.add(new AbstractContentTab<TabModel<String>>(tabModels.get(i).getTitle(),
Model.of(tabModels.get(i)), Model.of("x"))
{
private static final long serialVersionUID = 1L;
@Override
public Panel getPanel(final String panelId)
{
final Panel p = new TabPanel(panelId, getContent().getObject().getContent());
return p;
}
});
}
add(ajaxTabbedPanel = new AjaxCloseableTabbedPanel<ICloseableTab>("tabs", tabs)
{
private static final long serialVersionUID = 1L;
@Override
protected WebMarkupContainer newCloseLink(final String linkId, final int index)
{
final WebMarkupContainer wmc = super.newCloseLink(linkId, index);
wmc.add(new AttributeAppender("class", "close label label-warning"));
return wmc;
}
@Override
protected WebMarkupContainer newLink(final String linkId, final int index)
{
final WebMarkupContainer wmc = super.newLink(linkId, index);
wmc.add(new AttributeAppender("class", "label label-success"));
return wmc;
}
});
ajaxTabbedPanel.getTabsUlContainer().add(new AttributeAppender("class", " nav nav-tabs"));
final AjaxLink<Void> addTabLink = new AjaxLink<Void>("addTabLink")
{
private static final long serialVersionUID = 1L;
@SuppressWarnings("unchecked")
@Override
public void onClick(AjaxRequestTarget target)
{
if (target == null)
{
target = ComponentFinder.findAjaxRequestTarget();
}
target.add(ajaxTabbedPanel);
final int tabNumber = tabs.size() + 1;
final TabModel<String> thirdTabModel = new TabModel<>(Model.of("tab " + tabNumber),
Model.of("TAB_" + tabNumber), Model.of("x"));
final AbstractContentTab<TabModel<String>> tab = new AbstractContentTab<TabModel<String>>(
thirdTabModel.getTitle(), Model.of(thirdTabModel), Model.of("x"))
{
private static final long serialVersionUID = 1L;
@Override
public Panel getPanel(final String panelId)
{
final Panel p = new TabPanel(panelId,
getContent().getObject().getContent());
return p;
}
};
final Object object = EditableAjaxTabbedPanelDecorator.this.getDefaultModelObject();
final TabbedPanelModels<String> tabbedModel = (TabbedPanelModels<String>)object;
final List<TabModel<String>> tabModels = tabbedModel.getTabModels();
tabModels.add(thirdTabModel);
ajaxTabbedPanel.onNewTab(target, tab);
}
};
add(addTabLink);
final AjaxFallbackLink<Object> removeTabLink = new AjaxFallbackLink<Object>("removeTabLink")
{
private static final long serialVersionUID = 1L;
@Override
public void onClick(final AjaxRequestTarget target)
{
target.add(ajaxTabbedPanel);
onRemoveTab(target, 0);
}
};
add(removeTabLink);
}
protected void onNewTab(final AjaxRequestTarget target, final ICloseableTab tab)
{
ajaxTabbedPanel.getTabs().add(tab);
ajaxTabbedPanel.setSelectedTab(tabs.size() - 1);
target.add(ajaxTabbedPanel);
}
protected void onNewTab(final AjaxRequestTarget target, final ICloseableTab tab,
final int index)
{
ajaxTabbedPanel.onNewTab(target, tab, index);
}
@SuppressWarnings("unchecked")
protected void onRemoveTab(final AjaxRequestTarget target, final int index)
{
final Object object = EditableAjaxTabbedPanelDecorator.this.getDefaultModelObject();
final TabbedPanelModels<String> tabbedModel = (TabbedPanelModels<String>)object;
final List<TabModel<String>> tabModels = tabbedModel.getTabModels();
tabModels.remove(index);
ajaxTabbedPanel.onRemoveTab(target, index);
}
protected void onRemoveTab(final AjaxRequestTarget target, final ITab tab)
{
final int index = ajaxTabbedPanel.getTabs().indexOf(tab);
if (0 <= index)
{
onRemoveTab(target, index);
}
}
}