dnet-core/dnet-modular-ui/src/main/java/eu/dnetlib/functionality/modular/ui/ModuleEntryPoint.java

152 lines
4.1 KiB
Java

package eu.dnetlib.functionality.modular.ui;
import java.net.URLEncoder;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.ui.ModelMap;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.view.RedirectView;
import eu.dnetlib.functionality.modular.ui.users.AuthorizationManager;
import eu.dnetlib.functionality.modular.ui.users.User;
import eu.dnetlib.functionality.modular.ui.utils.ShutdownUtils;
public abstract class ModuleEntryPoint extends MenuEntry implements Controller, BeanNameAware {
private String beanName;
private boolean validMenuEntry = true;
private String group;
private int groupOrder = 50;
@Value("${dnet.modular.ui.authentication.url}")
private String authenticationUrl;
@Value("${dnet.modular.ui.logout.url}")
private String logoutUrl;
@Value("${dnet.modular.ui.ribbon.environment}")
private String environment;
@Value("${dnet.modular.ui.ribbon.accent}")
private String ribbonAccent;
@Resource
protected EntryPointsAggregator aggregator;
@Resource
private ShutdownUtils shutdownUtils;
@Resource(name = "modularUiAuthorizationManager")
protected AuthorizationManager authorizationManager;
@Override
public ModelAndView handleRequest(final HttpServletRequest request, final HttpServletResponse response) throws Exception {
final User user = authorizationManager.obtainUserDetails(request);
if (user != null) {
final ModelAndView mv = new ModelAndView();
final ModelMap map = mv.getModelMap();
map.addAttribute("ui_menu", getMenu());
map.addAttribute("ui_title", getTitle());
map.addAttribute("ui_description", getDescription());
map.addAttribute("ui_group", getGroup());
map.addAttribute("ui_modules", aggregator.getMenus(user));
map.addAttribute("environment", environment);
map.addAttribute("ribbonAccent", ribbonAccent);
switch (shutdownUtils.currentStatus()) {
case STOPPING:
map.addAttribute("ui_navbar_class", "navbar-system-stopping");
map.addAttribute("ui_message", "stopping system");
break;
case STOPPED:
map.addAttribute("ui_navbar_class", "navbar-system-stopped");
map.addAttribute("ui_message", "system stopped");
break;
default:
map.addAttribute("ui_navbar_class", "navbar-inverse");
break;
}
String baseUrl = "";
for (int i = 1; i < StringUtils.countMatches(beanName, "/"); i++) {
baseUrl += "/..";
}
if (baseUrl.length() > 0) {
baseUrl = baseUrl.substring(1);
}
map.addAttribute("ui_baseUrl", baseUrl);
if ((logoutUrl != null) && !logoutUrl.isEmpty()) {
map.addAttribute("ui_logoutUrl", logoutUrl);
}
map.addAttribute("ui_user", user);
initialize(map, request, response);
return mv;
} else {
final StringBuffer url = request.getRequestURL();
final String queryString = request.getQueryString();
if (queryString != null) {
url.append('?');
url.append(queryString);
}
return new ModelAndView(new RedirectView(authenticationUrl + "?url=" + URLEncoder.encode(url.toString(), "UTF-8")));
}
}
abstract protected void initialize(ModelMap map, HttpServletRequest request, HttpServletResponse response) throws Exception;
public String getBeanName() {
return beanName;
}
@Override
public void setBeanName(final String beanName) {
this.beanName = beanName;
}
public String getGroup() {
return group;
}
@Required
public void setGroup(final String group) {
this.group = group;
}
@Override
public String getRelativeUrl() {
return beanName;
}
public boolean isValidMenuEntry() {
return validMenuEntry;
}
public void setValidMenuEntry(final boolean validMenuEntry) {
this.validMenuEntry = validMenuEntry;
}
public int getGroupOrder() {
return groupOrder;
}
public void setGroupOrder(final int groupOrder) {
this.groupOrder = groupOrder;
}
}