{
public static void build(App app, File targetDir) throws ModelOperationException {
File targetContainer = targetDir.getParentFile();
if(!targetContainer.isDirectory()) throw new ModelOperationException("'" + targetContainer.getPath() + "' is not a directory.");
try {
String version = app.root().getAppVersionGenerator().getProdVersion();
Map<String,List<String>> contentPluginProdRequestsMap = new HashMap<>();
BRJS brjs = app.root();
AppRequestHandler appRequestHandler = new AppRequestHandler(app);
UrlContentAccessor urlContentAccessor = new StaticContentAccessor(app);
Locale[] locales = app.appConf().getLocales();
filterAppWebXml(app, targetDir, version);
for (Aspect aspect : app.aspects()) {
BundleSet bundleSet = aspect.getBundleSet();
String aspectRequestPrefix = (aspect.getName().equals("default")) ? "" : aspect.getName() + "/";
writeLocaleForwardingFileForAspect(bundleSet, targetDir, appRequestHandler, aspectRequestPrefix, urlContentAccessor, version);
for (Locale locale : locales) {
outputAspectIndexPage(aspect, locale, bundleSet, targetDir, appRequestHandler, aspectRequestPrefix, urlContentAccessor, version);
calculateUsedContentPlugins(aspect, locale, bundleSet, appRequestHandler, urlContentAccessor, version, contentPluginProdRequestsMap);
}
for (ContentPlugin contentPlugin : brjs.plugins().contentPlugins()) {
outputContentPluginBundles(contentPlugin, bundleSet, locales, targetDir, version, appRequestHandler, aspectRequestPrefix, urlContentAccessor, contentPluginProdRequestsMap);
}
}
}
catch(Exception e) {
throw new ModelOperationException(e);
}
}