package com.constellio.app.entities.navigation;
import java.io.Serializable;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.app.ui.application.Navigation;
import com.constellio.app.ui.framework.components.ComponentState;
import com.constellio.app.ui.pages.viewGroups.MenuViewGroup;
import com.constellio.model.entities.records.wrappers.User;
import com.vaadin.server.FontAwesome;
public interface NavigationItem extends CodedItem, Serializable, Comparable<NavigationItem> {
FontAwesome getFontAwesome();
String getCode();
String getIcon();
int getOrderValue();
Class<? extends MenuViewGroup> getViewGroup();
void activate(Navigation navigate);
ComponentState getStateFor(User user, AppLayerFactory appLayerFactory);
abstract class BaseNavigationItem implements NavigationItem {
@Override
public int compareTo(NavigationItem o) {
return new Integer(getOrderValue()).compareTo(o.getOrderValue());
}
@Override
public int getOrderValue() {
return 999;
}
}
abstract class Active extends BaseNavigationItem implements NavigationItem {
private final String code;
private final String icon;
private final FontAwesome fontAwesome;
private final Class<? extends MenuViewGroup> viewGroup;
public Active(String code, String icon, FontAwesome fontAwesome, Class<? extends MenuViewGroup> viewGroup) {
this.code = code;
this.icon = icon;
this.fontAwesome = fontAwesome;
this.viewGroup = viewGroup;
}
public Active(String code, FontAwesome fontAwesome, Class<? extends MenuViewGroup> viewGroup) {
this(code, null, fontAwesome, viewGroup);
}
public Active(String code, Class<? extends MenuViewGroup> viewGroup) {
this(code, null, null, viewGroup);
}
public Active(String code, String icon) {
this(code, icon, null, null);
}
public Active(String code, FontAwesome fontAwesome) {
this(code, null, fontAwesome, null);
}
public Active(String code) {
this(code, null, null, null);
}
@Override
public String getCode() {
return code;
}
public String getIcon() {
return icon;
}
public FontAwesome getFontAwesome() {
return fontAwesome;
}
public Class<? extends MenuViewGroup> getViewGroup() {
return viewGroup;
}
}
abstract class Decorator extends BaseNavigationItem implements NavigationItem {
protected final NavigationItem item;
protected Decorator(NavigationItem item) {
this.item = item;
}
@Override
public String getCode() {
return item.getCode();
}
@Override
public String getIcon() {
return item.getIcon();
}
@Override
public FontAwesome getFontAwesome() {
return item.getFontAwesome();
}
@Override
public int getOrderValue() {
return item.getOrderValue();
}
@Override
public Class<? extends MenuViewGroup> getViewGroup() {
return item.getViewGroup();
}
@Override
public void activate(Navigation navigate) {
item.activate(navigate);
}
}
class Inactive extends Active {
public Inactive(String code, String icon) {
super(code, icon);
}
public Inactive(String code, FontAwesome fontAwesome) {
super(code, fontAwesome);
}
@Override
public void activate(Navigation navigate) {
// Nothing to be done here
}
@Override
public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) {
return ComponentState.DISABLED;
}
}
}