package net.techreadiness.ui.tags.datagrid; import java.util.Comparator; import java.util.List; import javax.servlet.jsp.JspException; import net.techreadiness.service.common.DataGridColumn; import net.techreadiness.service.common.ViewField; import net.techreadiness.ui.tags.BaseTag; import net.techreadiness.ui.tags.ViewFieldDisplayOrderComparator; import net.techreadiness.ui.tags.ViewFieldTag; import net.techreadiness.ui.tags.form.FieldSetRowTag; import org.apache.commons.lang3.StringUtils; public class DataGridColumnTag extends BaseTag implements DataGridColumn, ViewFieldTag { private static final Comparator<ViewFieldTag> comparator = new ViewFieldDisplayOrderComparator(); private String name; private String nameKey; private String width; private ViewField field; private RowInfo<?> rowInfo; private boolean lastColumn; private boolean displayed; private boolean header; private boolean hideErrors = true; private String code; private boolean hidden; private String description; private String displayOrder; private boolean required; private Integer pageOrder; private boolean grouped; private String style; private String headerStyle; private String manageColumnsText; private boolean manageable = true; @Override public String execute() throws JspException { name = evaluateOgnl(name); code = evaluateOgnl(code); DataGridTag<?> dataGridTag = getRequiredParentTag(DataGridTag.class); DataGridState<?> state = dataGridTag.getState(); List<String> displayedColumns = state.getDisplayedColumns(); if (isManageable()) { if (displayedColumns == null) { // only display columns by default if it is hardcoded or the field // is in Column 1 displayed = field == null || field.getColumnNumber() == null || field.getColumnNumber() == 1; } else { displayed = displayedColumns.contains(code) || StringUtils.isEmpty(name); // allow hidden in list } } else { displayed = true; } return "/dataGrid/dataGridColumn.jsp"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + (code == null ? 0 : code.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (!(obj instanceof DataGridColumnTag)) { return false; } DataGridColumnTag other = (DataGridColumnTag) obj; if (getParent() == null) { if (other.getParent() != null) { return false; } } else if (!getParent().equals(other.getParent())) { return false; } if (code == null) { if (other.code != null) { return false; } } else if (!code.equals(other.code)) { return false; } return true; } public boolean isDisplayed() { return displayed; } @Override public String getName() { return name; } @Override public void setName(String name) { this.name = name; } public DataGridTag<?> getBaseParent() { return getRequiredParentTag(DataGridTag.class); } public FieldSetRowTag getEditField() { FieldSetRowTag column = new FieldSetRowTag(); column.setJspContext(getJspContext()); column.setParent(this); column.setFieldName(getBaseParent().getVar()); column.setName(field.getName()); column.setViewComponent(field); return column; } public String getId() { return code; } public void setWidth(String width) { this.width = width; } public String getWidth() { return width; } public ViewField getField() { return field; } public void setField(ViewField field) { this.field = field; } public void setRowInfo(RowInfo<?> rowInfo) { this.rowInfo = rowInfo; } public RowInfo<?> getRowInfo() { return rowInfo; } public void setLastColumn(Boolean lastColumn) { this.lastColumn = lastColumn != null && lastColumn.booleanValue(); } public boolean isLastColumn() { return lastColumn; } public String getNameKey() { return nameKey; } public void setNameKey(String nameKey) { this.nameKey = nameKey; } public void setHeader(boolean header) { this.header = header; } public boolean isHeader() { return header; } public void setHideErrors(boolean hideErrors) { this.hideErrors = hideErrors; } public boolean isHideErrors() { return hideErrors; } @Override public String getCode() { return code; } @Override public String getDescription() { return description; } @Override public String getDisplayOrder() { return displayOrder; } @Override public void setCode(String code) { this.code = code; } public boolean isHidden() { return hidden; } public void setHidden(boolean hidden) { this.hidden = hidden; } @Override public void setDescription(String description) { this.description = description; } @Override public void setDisplayOrder(String displayOrder) { this.displayOrder = displayOrder; } public boolean isRequired() { return required; } public void setRequired(boolean required) { this.required = required; } @Override public int compareTo(ViewFieldTag o) { return comparator.compare(this, o); } @Override public Integer getPageOrder() { return pageOrder; } @Override public void setPageOrder(Integer pageOrder) { this.pageOrder = pageOrder; } public boolean isGrouped() { return grouped; } public void setGrouped(boolean grouped) { this.grouped = grouped; } public String getStyle() { return style; } public void setStyle(String style) { this.style = style; } public String getHeaderStyle() { return headerStyle; } public void setHeaderStyle(String headerStyle) { this.headerStyle = headerStyle; } public String getManageColumnsText() { if (StringUtils.isBlank(manageColumnsText)) { return name; } return manageColumnsText; } public void setManageColumnsText(String manageColumnsText) { this.manageColumnsText = manageColumnsText; } public boolean isManageable() { return manageable; } public void setManageable(boolean manageable) { this.manageable = manageable; } }