package org.genedb.web.mvc.view;
import org.apache.log4j.Logger;
import org.springframework.core.Ordered;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.view.RedirectView;
import java.util.Locale;
import java.util.Map;
public class PrefixViewResolver implements ViewResolver, Ordered {
private Logger logger = Logger.getLogger(PrefixViewResolver.class);
private Map<String, ViewResolver> viewResolverMap;
private Map<String, View> viewMap;
public void setViewMap(Map<String, View> viewMap) {
this.viewMap = viewMap;
}
private int order;
@Override
public View resolveViewName(String viewName, Locale locale) throws Exception {
int index = viewName.indexOf(":");
if (index == -1) {
return null;
}
String prefix = viewName.substring(0, index);
String suffix="";
if (index < viewName.length() ) {
suffix= viewName.substring(index+1);
}
logger.trace("Prefix is '"+prefix+"'");
if ("redirect".equals(prefix)) {
return new RedirectView(suffix, true);
}
if (viewResolverMap.containsKey(prefix)) {
ViewResolver vr = viewResolverMap.get(prefix);
logger.trace(String.format("Returning view '%s' to '%s'", suffix, vr));
return vr.resolveViewName(suffix, locale);
}
if (viewMap.containsKey(prefix)) {
View view = viewMap.get(prefix);
logger.trace(String.format("Returning view of type '%s'", view.getClass()));
return view;
}
return null;
}
public void setViewResolverMap(Map<String, ViewResolver> prefixMap) {
this.viewResolverMap = prefixMap;
}
public void setOrder(int order) {
this.order = order;
}
@Override
public int getOrder() {
return order;
}
}