@Override public void validateReferences() throws QuickFixException { DefDescriptor<ComponentDef> desc = Flavors.toComponentDescriptor(getDescriptor()); ComponentDef def = desc.getDef(); if (!def.hasFlavorableChild() && !def.inheritsFlavorableChild() && !def.isDynamicallyFlavorable()) { throw new InvalidDefinitionException( String.format("%s must contain at least one aura:flavorable element", desc), getLocation()); } }
@Override public void write(T value, Map<String, Object> componentAttributes, Appendable out) throws IOException { try { AuraContext context = Aura.getContextService().getCurrentContext(); InstanceService instanceService = Aura.getInstanceService(); RenderingService renderingService = Aura.getRenderingService(); BaseComponentDef def = value.getDescriptor().getDef(); ComponentDef templateDef = def.getTemplateDef(); Map<String, Object> attributes = Maps.newHashMap(); StringBuilder sb = new StringBuilder(); writeHtmlStyles(new ArrayList<>(Arrays.asList(Aura.getConfigAdapter().getResetCssURL())), sb); attributes.put("auraResetCss", sb.toString()); sb.setLength(0); writeHtmlStyles(AuraServlet.getStyles(), sb); attributes.put("auraStyleTags", sb.toString()); sb.setLength(0); writeHtmlScripts(AuraServlet.getScripts(), sb); DefDescriptor<StyleDef> styleDefDesc = templateDef.getStyleDescriptor(); if (styleDefDesc != null) { attributes.put("auraInlineStyle", styleDefDesc.getDef().getCode()); } String contextPath = context.getContextPath(); Mode mode = context.getMode(); if (mode.allowLocalRendering() && def.isLocallyRenderable()) { BaseComponent<?, ?> cmp = (BaseComponent<?, ?>) instanceService.getInstance(def, componentAttributes); attributes.put("body", Lists.<BaseComponent<?, ?>>newArrayList(cmp)); attributes.put("bodyClass", ""); attributes.put("autoInitialize", "false"); Component template = instanceService.getInstance(templateDef.getDescriptor(), attributes); renderingService.render(template, out); } else { attributes.put("auraScriptTags", sb.toString()); Map<String, Object> auraInit = Maps.newHashMap(); if (componentAttributes != null && !componentAttributes.isEmpty()) { auraInit.put("attributes", componentAttributes); } auraInit.put("descriptor", def.getDescriptor()); auraInit.put("deftype", def.getDescriptor().getDefType()); auraInit.put("host", contextPath); attributes.put("autoInitialize", "false"); attributes.put("autoInitializeSync", "true"); auraInit.put("instance", value); auraInit.put("token", AuraBaseServlet.getToken()); StringBuilder contextWriter = new StringBuilder(); Aura.getSerializationService() .write(context, null, AuraContext.class, contextWriter, "JSON"); auraInit.put("context", new Literal(contextWriter.toString())); attributes.put("auraInitSync", JsonEncoder.serialize(auraInit)); Component template = instanceService.getInstance(templateDef.getDescriptor(), attributes); renderingService.render(template, out); } } catch (QuickFixException e) { throw new AuraRuntimeException(e); } }