package com.constellio.app.ui.framework.components.breadcrumb;
import java.util.ArrayList;
import java.util.List;
import com.constellio.app.services.factories.ConstellioFactories;
import com.constellio.app.ui.application.Navigation;
import com.constellio.app.ui.application.CoreViews;
import com.constellio.app.ui.application.ConstellioUI;
import com.constellio.app.ui.pages.base.SessionContext;
import com.lexaden.breadcrumb.Breadcrumb;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CustomComponent;
public abstract class BaseBreadcrumbTrail extends CustomComponent implements BreadcrumbTrail {
public static final String TAXONOMY_CODE = "taxonomyCode";
public static final String SEARCH_ID = "searchId";
public static final String ADVANCED_SEARCH = "advancedSearch";
private Breadcrumb breadcrumb;
private List<BreadcrumbItem> items = new ArrayList<>();
public BaseBreadcrumbTrail() {
setWidth("100%");
breadcrumb = new Breadcrumb();
setCompositionRoot(breadcrumb);
}
public final Breadcrumb getBreadcrumb() {
return breadcrumb;
}
@Override
public void addItem(final BreadcrumbItem item) {
items.add(item);
Button itemButton = newButton(item);
itemButton.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
itemClick(item);
}
});
itemButton.setEnabled(item.isEnabled());
breadcrumb.addLink(itemButton);
itemButton.removeStyleName("xbreadcrumbbutton-home");
}
protected Button newButton(BreadcrumbItem item) {
String itemLabel = item.getLabel();
return new Button(itemLabel);
}
@Override
public List<BreadcrumbItem> getItems() {
return items;
}
@Override
public SessionContext getSessionContext() {
return ConstellioUI.getCurrentSessionContext();
}
@Override
public ConstellioFactories getConstellioFactories() {
return ConstellioUI.getCurrent().getConstellioFactories();
}
@Override
public CoreViews navigateTo() {
return ConstellioUI.getCurrent().navigateTo();
}
@Override
public Navigation navigate() {
return ConstellioUI.getCurrent().navigate();
}
protected abstract void itemClick(BreadcrumbItem item);
}