/* * � Copyright IBM Corp. 2012, 2013 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.ibm.xsp.extlib.renderkit.html_extended.oneuiv302.data; import java.io.IOException; import java.util.Iterator; import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; import com.ibm.commons.util.StringUtil; import com.ibm.xsp.extlib.component.data.FormLayout; import com.ibm.xsp.extlib.renderkit.html_extended.oneui.data.OneUIFormTableRenderer; import com.ibm.xsp.extlib.util.ExtLibUtil; public class OneUIv302FormTableRenderer extends OneUIFormTableRenderer { @Override protected Object getProperty(int prop) { switch(prop) { case PROP_STYLECLASSERRORSUMMARY: return "lotusMessage2"; // $NON-NLS-1$ case PROP_TAGFORMTITLE: return "h1"; // $NON-NLS-1$ } return super.getProperty(prop); } @Override protected void writeFormLayout(FacesContext context, ResponseWriter w, FormLayout c) throws IOException { ComputedFormData formData = createFormData(context, c); String style = c.getStyle(); String styleClass = c.getStyleClass(); w.startElement("div", c); // $NON-NLS-1$ styleClass = ExtLibUtil.concatStyleClasses("lotusForm2 lotusLeftLabels", styleClass); // $NON-NLS-1$ String clientId = c.getClientId(context); w.writeAttribute("id", clientId, "clientId"); // $NON-NLS-1$ $NON-NLS-2$ if(!StringUtil.isEmpty(style)) { w.writeAttribute("style", style, null); // $NON-NLS-1$ } if(!StringUtil.isEmpty(styleClass)) { w.writeAttribute("class", styleClass, null); // $NON-NLS-1$ } w.writeAttribute("aria-live","assertive", null); // $NON-NLS-1$ $NON-NLS-2$ newLine(w); writeErrorSummary(context, w, c, formData); writeHeader(context, w, c); w.startElement("div", c); // $NON-NLS-1$ w.writeAttribute("class", "lotusFormBody", null); // $NON-NLS-1$ $NON-NLS-2$ writeForm(context, w, c, formData); writeFooter(context, w, c); w.endElement("div"); // $NON-NLS-1$ newLine(w); } // ================================================================ // Error Summary // ================================================================ @Override protected void writeErrorSummary(FacesContext context, ResponseWriter w, FormLayout c, ComputedFormData formData) throws IOException { if(!c.isDisableErrorSummary()) { // Should we apply a filter to retain only the message belonging to the controls within the form? // Easy enough with a FilteredIterator Iterator<FacesMessage> msg = getMessages(context); if(msg.hasNext()) { w.startElement("div", c); // $NON-NLS-1$ String style = (String)getProperty(PROP_STYLEERRORSUMMARY); if(StringUtil.isNotEmpty(style)) { w.writeAttribute("style", style, null); // $NON-NLS-1$ } String cls = (String)getProperty(PROP_STYLECLASSERRORSUMMARY); if(StringUtil.isNotEmpty(cls)) { w.writeAttribute("class", cls, null); // $NON-NLS-1$ } w.writeAttribute("role", "alert", null); // $NON-NLS-1$ $NON-NLS-2$ writeErrorSummaryContent(context, w, c, msg); w.endElement("div"); // $NON-NLS-1$ } } } @Override protected void writeFormTitle(FacesContext context, ResponseWriter w, FormLayout c, String formTitle, String description) throws IOException { w.startElement("div", c); // $NON-NLS-1$ String styleClass = (String)getProperty(PROP_STYLECLASSHEADER); w.writeAttribute("class",styleClass, null); // $NON-NLS-1$ writeFormTitleContent(context, w, c, formTitle, description); w.endElement("div"); // $NON-NLS-1$ } @Override protected void writeFormTitleContent(FacesContext context, ResponseWriter w, FormLayout c, String formTitle, String description) throws IOException { String formDescClientId = null; if( StringUtil.isNotEmpty(description) && StringUtil.isNotEmpty((String)getProperty(PROP_TAGFORMDESC)) ){ formDescClientId = c.getClientId(context)+"_formDesc"; //$NON-NLS-1$ } String mainTag = (String)getProperty(PROP_TAGFORMTITLE); if(StringUtil.isNotEmpty(mainTag)) { w.startElement(mainTag, c); String style = (String)getProperty(PROP_STYLEFORMTITLE); if(StringUtil.isNotEmpty(style)) { w.writeAttribute("style", style, null); // $NON-NLS-1$ } String cls = (String)getProperty(PROP_STYLECLASSFORMTITLE); if(StringUtil.isNotEmpty(cls)) { w.writeAttribute("class", cls, null); // $NON-NLS-1$ } if( null != formDescClientId ){ w.writeAttribute("aria-describedby", formDescClientId, null); // $NON-NLS-1$ } } if(StringUtil.isNotEmpty(formTitle)) { w.writeText(formTitle,null); } if(StringUtil.isNotEmpty(mainTag)) { w.endElement(mainTag); } if(StringUtil.isNotEmpty(description)) { String descTag = (String)getProperty(PROP_TAGFORMDESC); if(StringUtil.isNotEmpty(descTag)) { w.startElement(descTag, c); String style = (String)getProperty(PROP_STYLEFORMDESC); if(StringUtil.isNotEmpty(style)) { w.writeAttribute("style", style, null); // $NON-NLS-1$ } String cls = (String)getProperty(PROP_STYLECLASSFORMDESC); if(StringUtil.isNotEmpty(cls)) { w.writeAttribute("class", cls, null); // $NON-NLS-1$ } // note, can only write an ID if have done startElement // - the container <div has already been </div> closed w.writeAttribute("id", formDescClientId, null); // $NON-NLS-1$ } w.writeText(description,null); if(StringUtil.isNotEmpty(descTag)) { w.endElement(descTag); } } } }