/** The tags for this TLD. */ protected void writeTags() throws IOException { writer.writeComment("===================== HTML 4.0 basic tags ======================"); Map<String, ComponentBean> componentsByComponentFamily = GeneratorUtil.getComponentFamilyComponentMap(configBean); Map<String, ArrayList<RendererBean>> renderersByComponentFamily = GeneratorUtil.getComponentFamilyRendererMap( configBean, propManager.getProperty(PropertyManager.RENDERKIT_ID)); String targetPackage = propManager.getProperty(PropertyManager.TARGET_PACKAGE); for (Map.Entry entry : renderersByComponentFamily.entrySet()) { String componentFamily = (String) entry.getKey(); List<RendererBean> renderers = (List<RendererBean>) entry.getValue(); for (Iterator<RendererBean> rendererIter = renderers.iterator(); rendererIter.hasNext(); ) { RendererBean renderer = rendererIter.next(); if (renderer.isIgnoreAll()) { continue; } String rendererType = renderer.getRendererType(); writer.startElement("tag"); DescriptionBean description = renderer.getDescription(""); if (description != null) { String descriptionText = description.getDescription().trim(); if (descriptionText != null) { writer.startElement("description"); StringBuffer sb = new StringBuffer(); sb.append("<![CDATA["); sb.append(descriptionText); sb.append("]]>\n"); writer.writeText(sb.toString()); writer.closeElement(); } } String tagName = renderer.getTagName(); if (tagName == null) { tagName = makeTldTagName( GeneratorUtil.stripJavaxFacesPrefix(componentFamily), GeneratorUtil.stripJavaxFacesPrefix(rendererType)); } if (tagName == null) { throw new IllegalStateException("Could not determine tag name"); } writer.startElement("name"); writer.writeText(tagName); writer.closeElement(); if (GeneratorUtil.makeTagClassName( GeneratorUtil.stripJavaxFacesPrefix(componentFamily), GeneratorUtil.stripJavaxFacesPrefix(rendererType)) == null) { throw new IllegalStateException("Could not determine tag class name"); } writer.startElement("tag-class"); writer.writeText( targetPackage + '.' + GeneratorUtil.makeTagClassName( GeneratorUtil.stripJavaxFacesPrefix(componentFamily), GeneratorUtil.stripJavaxFacesPrefix(rendererType))); writer.closeElement(); writer.startElement("body-content"); writer.writeText(getBodyContent(tagName)); writer.closeElement(); // Generate tag attributes // // Component Properties first... // ComponentBean component = componentsByComponentFamily.get(componentFamily); PropertyBean[] properties = component.getProperties(); PropertyBean property; for (int i = 0, len = properties.length; i < len; i++) { if (null == (property = properties[i])) { continue; } if (!property.isTagAttribute()) { continue; } writer.startElement("attribute"); description = property.getDescription(""); if (description != null) { String descriptionText = description.getDescription().trim(); if (descriptionText != null) { writer.startElement("description"); StringBuffer sb = new StringBuffer(); sb.append("<![CDATA["); sb.append(descriptionText); sb.append("]]>\n"); writer.writeText(sb.toString()); writer.closeElement(); } } String propertyName = property.getPropertyName(); writer.startElement("name"); writer.writeText(propertyName); writer.closeElement(); writer.startElement("required"); writer.writeText( property.isRequired() ? Boolean.TRUE.toString() : Boolean.FALSE.toString()); writer.closeElement(); if (!"id".equals(propertyName)) { if (property.isMethodExpressionEnabled()) { writer.startElement("deferred-method"); writer.startElement("method-signature"); writer.writeText(property.getMethodSignature()); writer.closeElement(2); } else if (property.isValueExpressionEnabled()) { // PENDING FIX ME String type = property.getPropertyClass(); // String wrapperType = (String) // GeneratorUtil.convertToPrimitive(type); // if (wrapperType != null) { // type = wrapperType; // } writer.startElement("deferred-value"); writer.startElement("type"); writer.writeText(type); writer.closeElement(2); } else { writer.startElement("rtexprvalue"); writer.writeText(getRtexprvalue(tagName, propertyName)); writer.closeElement(); } } else { writer.startElement("rtexprvalue"); writer.writeText(getRtexprvalue(tagName, propertyName)); writer.closeElement(); } writer.closeElement(); // closes attribute element above } // END property FOR loop // Renderer Attributes Next... // AttributeBean[] attributes = renderer.getAttributes(); AttributeBean attribute; for (int i = 0, len = attributes.length; i < len; i++) { if (null == (attribute = attributes[i])) { continue; } if (!attribute.isTagAttribute()) { continue; } if (attributeShouldBeExcluded(renderer, attribute.getAttributeName())) { continue; } writer.startElement("attribute"); description = attribute.getDescription(""); if (description != null) { String descriptionText = description.getDescription().trim(); if (descriptionText != null) { writer.startElement("description"); StringBuffer sb = new StringBuffer(); sb.append("<![CDATA["); sb.append(descriptionText); sb.append("]]>\n"); writer.writeText(sb.toString()); writer.closeElement(); } } String attributeName = attribute.getAttributeName(); writer.startElement("name"); writer.writeText(attributeName); writer.closeElement(); writer.startElement("required"); writer.writeText( attribute.isRequired() ? Boolean.TRUE.toString() : Boolean.FALSE.toString()); writer.closeElement(); if (!"id".equals(attributeName)) { // PENDING FIX ME String type = attribute.getAttributeClass(); // String wrapperType = (String) // GeneratorUtil.convertToPrimitive(type); // if (wrapperType != null) { // type = wrapperType; // } writer.startElement("deferred-value"); writer.startElement("type"); writer.writeText(type); writer.closeElement(2); } else { writer.startElement("rtexprvalue"); writer.writeText(getRtexprvalue(tagName, attributeName)); writer.closeElement(); } writer.closeElement(); // closes attribute element above } // END attribute FOR loop // SPECIAL: "Binding" needs to exist on every tag.. writer.startElement("attribute"); writer.startElement("description"); writer.writeText( "The ValueExpression linking this component to a property in a backing bean"); writer.closeElement(); writer.startElement("name"); writer.writeText("binding"); writer.closeElement(); writer.startElement("required"); writer.writeText("false"); writer.closeElement(); writer.startElement("deferred-value"); writer.startElement("type"); writer.writeText("javax.faces.component.UIComponent"); writer.closeElement(2); // close the most recent attribute, and tag // elements writer.closeElement(2); } } // Include any other tags defined in the optional tag definition file. // These might be tags that were not picked up because they have no renderer // - for example "column". String tagDef = loadOptionalTags(); if (tagDef != null) { writer.write(tagDef); } } // END writeTags