package angularBeans.js.cache; import java.io.IOException; import java.lang.reflect.Method; import javax.inject.Named; import angularBeans.api.NGModules; import angularBeans.boot.BeanRegistry; import angularBeans.ngservices.NGService; import angularBeans.util.CommonUtils; import angularBeans.util.FileLoader; /** * <p> * This is a default implementation for {@link JsCacheLoader} for static Javascript loading into memory. * </p> * * @author Aymen Naili * */ public class DefaultStaticJsCacheLoader extends StaticJsLoader { @Override public void LoadCoreScript() { //Load the AngularBeans Javascript Object. try { final String scriptDetection = FileLoader.readFile("/js/script-detection.js"); final String mainObject = FileLoader.readFile("/js/angular-beans-main-object.js"); StaticJsCache.appendToCore(scriptDetection); StaticJsCache.appendToCore(mainObject); } catch (IOException e) { e.printStackTrace(); } //Generate the app object. Class<? extends Object> appClass = BeanRegistry.INSTANCE.getAppClass(); String appName = getAppName(appClass); StaticJsCache.appendToCore(String.format("var app=angular.module('%s', [", appName)); if (appClass.isAnnotationPresent(NGModules.class)) { NGModules ngModAnno = appClass.getAnnotation(NGModules.class); String[] modules = ngModAnno.value(); String modulesPart = ""; for (String module : modules) { modulesPart += ("'" + module + "',"); } modulesPart = modulesPart.substring(0, modulesPart.length() - 1); StaticJsCache.appendToCore(modulesPart); } StaticJsCache.appendToCore("])"); StaticJsCache.appendToCore(".run(function($rootScope) {$rootScope.sessionUID = sessionId;"); StaticJsCache.appendToCore("$rootScope.baseUrl=sript_origin;"); StaticJsCache.appendToCore("});"); } @Override public void LoadExtensions() { StringBuffer buffer = new StringBuffer(); for (NGService extention : BeanRegistry.INSTANCE.getExtentions()) { Method m; try { m = extention.getClass().getMethod("render"); buffer.append(m.invoke(extention) + ";"); } catch (Exception e) { e.printStackTrace(); } } StaticJsCache.appendToExtensions(buffer.toString()); } private String getAppName(Class<? extends Object> appClass){ String appName = null; if (appClass.isAnnotationPresent(Named.class)) { appName = appClass.getAnnotation(Named.class).value(); } if ((appName == null) || (appName.length() < 1)) { appName = CommonUtils.getBeanName(appClass); } return appName; } }