import org.seedstack.shed.ClassLoaders; //导入依赖的package包/类
public String build(HttpServletRequest httpServletRequest) {
ClassLoader classLoader = ClassLoaders.findMostCompleteClassLoader(MasterPageBuilder.class);
URL masterpageURL = classLoader.getResource(w20Config.getMasterpageTemplate());
if (masterpageURL == null) {
masterpageURL = classLoader.getResource(MASTER_PAGE_FALLBACK_TEMPLATE);
}
if (masterpageURL == null) {
throw new RuntimeException("Unable to generate W20 masterpage, template not found");
}
Scanner scanner;
try {
scanner = new Scanner(new InputStreamReader(masterpageURL.openStream(), StandardCharsets.UTF_8)).useDelimiter("\\A");
} catch (IOException e) {
throw SeedException.wrap(e, W20ErrorCode.UNABLE_TO_GENERATE_MASTERPAGE);
}
String template = scanner.next();
scanner.close();
Map variables = new HashMap<>();
String contextPath = httpServletRequest.getContextPath();
W20Config.ApplicationInfo applicationInfo = w20Config.getApplicationInfo();
variables.put("applicationTitle", StringUtils.isBlank(applicationInfo.getTitle()) ? application.getName() : applicationInfo.getTitle());
variables.put("applicationSubtitle", applicationInfo.getSubTitle());
variables.put("applicationVersion", StringUtils.isBlank(applicationInfo.getVersion()) ? application.getVersion() : applicationInfo.getVersion());
variables.put("timeout", w20Config.getLoadingTimeout());
variables.put("corsWithCredentials", w20Config.isCorsWithCredentials());
variables.put("basePath", PathUtils.removeTrailingSlash(getBasePath(contextPath)));
variables.put("basePathSlash", PathUtils.ensureTrailingSlash(getBasePath(contextPath)));
variables.put("restPath", PathUtils.removeTrailingSlash(getRestPath(contextPath)));
variables.put("restPathSlash", PathUtils.ensureTrailingSlash(getRestPath(contextPath)));
variables.put("componentsPath", PathUtils.removeTrailingSlash(getComponentsPath(contextPath)));
variables.put("componentsPathSlash", PathUtils.ensureTrailingSlash(getComponentsPath(contextPath)));
variables.put("prettyUrls", w20Config.isPrettyUrls());
return replaceTokens(template, variables);
}