/* * Copyright 2004 original author or authors. * * 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 org.extremecomponents.table.view.html; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.lang.StringUtils; import org.extremecomponents.table.bean.Column; import org.extremecomponents.table.core.TableConstants; import org.extremecomponents.table.core.TableModel; import org.extremecomponents.table.limit.Sort; import org.extremecomponents.util.HtmlBuilder; /** * @author Jeff Johnston */ public class FormBuilder { private HtmlBuilder html; private TableModel model; public FormBuilder(TableModel model) { this(new HtmlBuilder(), model); } public FormBuilder(HtmlBuilder html, TableModel model) { this.html = html; this.model = model; } public HtmlBuilder getHtmlBuilder() { return html; } protected TableModel getTableModel() { return model; } public void formStart() { formAttributes(); html.newline(); html.div().close(); instanceParameter(); exportTableIdParameter(); exportParameters(); rowsDisplayedParameter(); filterParameter(); pageParameters(); sortParameters(); aliasParameters(); userDefinedParameters(); html.newline(); html.divEnd(); } public void formEnd() { String form = model.getTableHandler().getTable().getForm(); if (StringUtils.isBlank(form)) { html.formEnd(); } } public void formAttributes() { String form = model.getTableHandler().getTable().getForm(); if (StringUtils.isBlank(form)) { html.form(); html.id(model.getTableHandler().getTable().getTableId()); html.action(model.getTableHandler().getTable().getAction()); html.method(model.getTableHandler().getTable().getMethod()); html.close(); } } public void instanceParameter() { html.newline(); html.input("hidden"); html.name(TableConstants.EXTREME_COMPONENTS_INSTANCE); html.value(model.getTableHandler().getTable().getTableId()); html.xclose(); } public void filterParameter() { if (BuilderUtils.filterable(model)) { html.newline(); html.input("hidden"); html.name(model.getTableHandler().prefixWithTableId() + TableConstants.FILTER + TableConstants.ACTION); if (model.getLimit().isFiltered()) { html.value(TableConstants.FILTER_ACTION); } html.xclose(); } } public void rowsDisplayedParameter() { html.newline(); html.input("hidden"); html.name(model.getTableHandler().prefixWithTableId() + TableConstants.CURRENT_ROWS_DISPLAYED); int currentRowsDisplayed = model.getLimit().getCurrentRowsDisplayed(); html.value(String.valueOf(currentRowsDisplayed)); html.xclose(); } public void pageParameters() { html.newline(); html.input("hidden"); html.name(model.getTableHandler().prefixWithTableId() + TableConstants.PAGE); int page = model.getLimit().getPage(); if (page > 0) { html.value(String.valueOf(page)); } html.xclose(); } /** * The exported table id parameter is used to uniquely identify this table when exporting. * If there is more than one table in the form then make sure the other table did * not already set the exported table id parameter. */ public void exportTableIdParameter() { if (!BuilderUtils.showExports(model)) { return; } String form = BuilderUtils.getForm(model); String existingForm = (String)model.getContext().getRequestAttribute(TableConstants.EXPORT_TABLE_ID); if (form.equals(existingForm)) { return; } html.newline(); html.input("hidden"); html.name(TableConstants.EXPORT_TABLE_ID); html.xclose(); // set to key off to other tables in the same form model.getContext().setRequestAttribute(TableConstants.EXPORT_TABLE_ID, form); } /** * The parameters neccessary to do the exports. This includes the * ViewResolver and the export file name. */ public void exportParameters() { if (!BuilderUtils.showExports(model)) { return; } html.newline(); html.input("hidden"); html.name(model.getTableHandler().prefixWithTableId() + TableConstants.EXPORT_VIEW); html.xclose(); html.newline(); html.input("hidden"); html.name(model.getTableHandler().prefixWithTableId() + TableConstants.EXPORT_FILE_NAME); html.xclose(); } public void sortParameters() { List columns = model.getColumnHandler().getColumns(); for (Iterator iter = columns.iterator(); iter.hasNext();) { Column column = (Column) iter.next(); if (column.isSortable()) { html.newline(); html.input("hidden"); html.name(model.getTableHandler().prefixWithTableId() + TableConstants.SORT + column.getAlias()); Sort sort = model.getLimit().getSort(); if (sort.isSorted() && sort.getAlias().equals(column.getAlias())) { html.value(sort.getSortOrder()); } html.xclose(); } } } public void userDefinedParameters() { Map parameterMap = model.getRegistry().getParameterMap(); Set keys = parameterMap.keySet(); for (Iterator iter = keys.iterator(); iter.hasNext();) { String name = (String) iter.next(); if (name.startsWith(model.getTableHandler().prefixWithTableId())) { continue; } String values[] = (String[]) parameterMap.get(name); if (values == null || values.length == 0) { html.newline(); html.input("hidden").name(name).xclose(); } else { for (int i = 0; i < values.length; i++) { html.newline(); html.input("hidden").name(name).value(values[i]).xclose(); } } } } /** * If the column has a alias, it will keep the column property by the parameter */ public void aliasParameters() { List columns = model.getColumnHandler().getColumns(); for (Iterator iter = columns.iterator(); iter.hasNext();) { Column column = (Column) iter.next(); if (StringUtils.isNotBlank(column.getProperty()) && !column.getProperty().equals(column.getAlias())) { html.newline(); html.input("hidden"); html.name(model.getTableHandler().prefixWithTableId() + TableConstants.ALIAS + column.getAlias()); html.value(column.getProperty()); html.xclose(); } } } public String toString() { return html.toString(); } }