@Override public void serialize(Json json) throws IOException { json.writeMapBegin(); json.writeMapEntry("descriptor", descriptor); AuraContext context = Aura.getContextService().getCurrentContext(); if (!context.isPreloading() && !context.isPreloaded(getDescriptor())) { // TODONM: revisit this after removing theme from aura context if (context.getThemeList().isEmpty()) { context.addAppThemeDescriptors(); } json.writeMapEntry("code", getCode()); } json.writeMapEnd(); }
@Override public void serialize(Json json, AuraContext ctx) throws IOException { json.writeMapBegin(); json.writeMapEntry("mode", ctx.getMode()); DefDescriptor<? extends BaseComponentDef> appDesc = ctx.getApplicationDescriptor(); if (appDesc != null) { if (appDesc.getDefType().equals(DefType.APPLICATION)) { json.writeMapEntry( "app", String.format("%s:%s", appDesc.getNamespace(), appDesc.getName())); } else { json.writeMapEntry( "cmp", String.format("%s:%s", appDesc.getNamespace(), appDesc.getName())); } } if (ctx.getSerializeThemes()) { ThemeList themes = ctx.getThemeList(); if (!themes.isEmpty()) { List<String> stringed = Lists.newArrayList(); for (DefDescriptor<ThemeDef> theme : themes) { stringed.add(theme.getQualifiedName()); } json.writeMapEntry("themes", stringed); } Optional<String> dynamicVarsUid = themes.getActiveDynamicVarsUid(); if (dynamicVarsUid.isPresent()) { json.writeMapEntry("dynamicVarsUid", dynamicVarsUid.get()); } } if (ctx.getRequestedLocales() != null) { List<String> locales = new ArrayList<>(); for (Locale locale : ctx.getRequestedLocales()) { locales.add(locale.toString()); } json.writeMapEntry("requestedLocales", locales); } Map<String, String> loadedStrings = Maps.newHashMap(); Map<DefDescriptor<?>, String> clientLoaded = Maps.newHashMap(); clientLoaded.putAll(ctx.getClientLoaded()); for (Map.Entry<DefDescriptor<?>, String> entry : ctx.getLoaded().entrySet()) { loadedStrings.put( String.format( "%s@%s", entry.getKey().getDefType().toString(), entry.getKey().getQualifiedName()), entry.getValue()); clientLoaded.remove(entry.getKey()); } if (forClient) { for (DefDescriptor<?> deleted : clientLoaded.keySet()) { loadedStrings.put( String.format("%s@%s", deleted.getDefType().toString(), deleted.getQualifiedName()), DELETED); } } if (loadedStrings.size() > 0) { json.writeMapKey("loaded"); json.writeMap(loadedStrings); } if (ctx.getSerializeLastMod()) { json.writeMapEntry("lastmod", Long.toString(AuraBaseServlet.getLastMod())); } TestContextAdapter testContextAdapter = Aura.get(TestContextAdapter.class); if (testContextAdapter != null) { TestContext testContext = testContextAdapter.getTestContext(); if (testContext != null) { json.writeMapEntry("test", testContext.getName()); } } if (ctx.getFrameworkUID() != null) { json.writeMapEntry("fwuid", ctx.getFrameworkUID()); } if (forClient) { // client needs value providers, urls don't boolean started = false; for (GlobalValueProvider valueProvider : ctx.getGlobalProviders().values()) { if (!valueProvider.isEmpty()) { if (!started) { json.writeMapKey("globalValueProviders"); json.writeArrayBegin(); started = true; } json.writeComma(); json.writeIndent(); json.writeMapBegin(); json.writeMapEntry("type", valueProvider.getValueProviderKey().getPrefix()); json.writeMapEntry("values", valueProvider.getData()); json.writeMapEnd(); } } if (started) { json.writeArrayEnd(); } // // Now comes the tricky part, we have to serialize all of the definitions that are // required on the client side, and, of all types. This way, we won't have to handle // ugly cases of actual definitions nested inside our configs, and, we ensure that // all dependencies actually get sent to the client. Note that the 'loaded' set needs // to be updated as well, but that needs to happen prior to this. // Map<DefDescriptor<? extends Definition>, Definition> defMap; defMap = ctx.getDefRegistry().filterRegistry(ctx.getPreloadedDefinitions()); if (defMap.size() > 0) { List<Definition> componentDefs = Lists.newArrayList(); List<Definition> eventDefs = Lists.newArrayList(); List<Definition> libraryDefs = Lists.newArrayList(); for (Map.Entry<DefDescriptor<? extends Definition>, Definition> entry : defMap.entrySet()) { DefDescriptor<? extends Definition> desc = entry.getKey(); DefType dt = desc.getDefType(); Definition d = entry.getValue(); // // Ignore defs that ended up not being valid. This is arguably something // that the MDR should have done when filtering. // if (d != null) { if (DefType.COMPONENT.equals(dt) || DefType.APPLICATION.equals(dt)) { componentDefs.add(d); } else if (DefType.EVENT.equals(dt)) { eventDefs.add(d); } else if (DefType.LIBRARY.equals(dt)) { libraryDefs.add(d); } } } writeDefs(json, "componentDefs", componentDefs); writeDefs(json, "eventDefs", eventDefs); writeDefs(json, "libraryDefs", libraryDefs); } ctx.serializeAsPart(json); } json.writeMapEnd(); }