package com.constellio.app.ui.framework.components.breadcrumb;
import static com.constellio.app.ui.i18n.i18n.$;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.ClassUtils;
import org.apache.commons.lang3.StringUtils;
import com.constellio.app.entities.navigation.NavigationConfig;
import com.constellio.app.entities.navigation.NavigationItem;
import com.constellio.app.services.extensions.ConstellioModulesManagerImpl;
import com.constellio.app.ui.application.ConstellioUI;
import com.constellio.app.ui.pages.base.BaseView;
import com.constellio.app.ui.pages.base.MainLayout;
import com.constellio.app.ui.pages.base.SessionContext;
import com.constellio.app.ui.pages.viewGroups.MenuViewGroup;
public class TitleBreadcrumbTrail extends BaseBreadcrumbTrail {
@SuppressWarnings("unchecked")
public TitleBreadcrumbTrail(final BaseView view, final String viewTitle) {
String collectionCode = ConstellioUI.getCurrentSessionContext().getCurrentCollection();
if (StringUtils.isNotBlank(collectionCode)) {
addItem(new CollectionBreadcrumbItem(collectionCode));
}
Class<? extends MenuViewGroup> viewGroupClass = null;
String viewGroupLabel = null;
List<Class<?>> implementedInterfaces = ClassUtils.getAllInterfaces(view.getClass());
for (Class<?> implementedInterface : implementedInterfaces) {
if (!MenuViewGroup.class.equals(implementedInterface) && MenuViewGroup.class.isAssignableFrom(implementedInterface)) {
String className = implementedInterface.getSimpleName();
String key = "ViewGroup." + className;
viewGroupLabel = $(key);
if (key.equals(viewGroupLabel)) {
viewGroupLabel = null;
} else {
viewGroupClass = (Class<? extends MenuViewGroup>) implementedInterface;
break;
}
}
}
if (StringUtils.isNotBlank(viewGroupLabel)) {
addItem(new ViewGroupBreadcrumbItem(viewGroupClass, viewGroupLabel));
}
if (StringUtils.isNotBlank(viewTitle) && (StringUtils.isBlank(viewGroupLabel) || !viewGroupLabel.equals(viewTitle))) {
addItem(new CurrentViewItem(viewTitle));
}
}
@Override
protected void itemClick(BreadcrumbItem item) {
if (item instanceof ViewGroupBreadcrumbItem) {
ViewGroupBreadcrumbItem viewGroupBreadcrumbItem = (ViewGroupBreadcrumbItem) item;
NavigationItem navigationItem = viewGroupBreadcrumbItem.getNavigationItem();
if (navigationItem != null) {
navigationItem.activate(navigate());
}
} else if (item instanceof CollectionBreadcrumbItem) {
navigate().to().home();
}
}
class CurrentViewItem implements BreadcrumbItem {
private String viewTitle;
CurrentViewItem(String viewTitle) {
this.viewTitle = viewTitle;
}
@Override
public String getLabel() {
return viewTitle;
}
@Override
public boolean isEnabled() {
return false;
}
}
class ViewGroupBreadcrumbItem implements BreadcrumbItem {
private Class<? extends MenuViewGroup> viewGroupClass;
private String viewGroupLabel;
public ViewGroupBreadcrumbItem(Class<? extends MenuViewGroup> viewGroupClass, String viewGroupLabel) {
this.viewGroupClass = viewGroupClass;
this.viewGroupLabel = viewGroupLabel;
}
@Override
public String getLabel() {
return viewGroupLabel;
}
@Override
public boolean isEnabled() {
return true;
}
private NavigationItem getNavigationItem() {
NavigationItem viewGroupItem = null;
List<NavigationItem> items = new ArrayList<>();
SessionContext sessionContext = getSessionContext();
String collection = sessionContext.getCurrentCollection();
ConstellioModulesManagerImpl manager = (ConstellioModulesManagerImpl) getConstellioFactories().getAppLayerFactory().getModulesManager();
NavigationConfig config = manager.getNavigationConfig(collection);
items.addAll(config.getNavigation(MainLayout.MAIN_LAYOUT_NAVIGATION));
for (NavigationItem item : items) {
Class<? extends MenuViewGroup> itemViewGroupClass = item.getViewGroup();
if (viewGroupClass.equals(itemViewGroupClass)) {
viewGroupItem = item;
break;
}
}
return viewGroupItem;
}
}
}