/* * #%L * BroadleafCommerce Open Admin Platform * %% * Copyright (C) 2009 - 2013 Broadleaf Commerce * %% * 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. * #L% */ package org.broadleafcommerce.openadmin.web.form.component; import org.apache.commons.lang3.StringUtils; import org.broadleafcommerce.common.util.BLCMessageUtils; import org.broadleafcommerce.openadmin.web.form.entity.Field; import org.codehaus.jettison.json.JSONObject; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public class ListGridRecord { protected ListGrid listGrid; protected String id; protected String altId; protected List<Field> fields = new ArrayList<Field>(); protected List<Field> hiddenFields = new ArrayList<Field>(); protected Boolean isDirty; protected Boolean isError; protected String errorKey; protected String errorMessage; protected ListGridRecordIcon icon; /** * Convenience map keyed by the field name. Used to guarantee field ordering with header fields within a ListGrid */ protected Map<String, Field> fieldMap; public String getPath() { String path = listGrid.getPath() + "/" + id; if (!StringUtils.isEmpty(altId)) { path += "/" + altId; } return path; } public boolean getCanLinkToExternalEntity() { return StringUtils.isNotBlank(listGrid.getExternalEntitySectionKey()); } public String getExternalEntityPath() { return listGrid.getExternalEntitySectionKey() + "/" + id; } public ListGrid getListGrid() { return listGrid; } public void setListGrid(ListGrid listGrid) { this.listGrid = listGrid; } public String getId() { return id; } public void setId(String id) { this.id = id; } public int getIndex() { return listGrid.getStartIndex() + listGrid.getRecords().indexOf(this); } /** * Normally you should not be looping through these fields. In order to preserve proper field ordering, instead you * should loop through {@link ListGrid#getHeaderFields()} and then invoke the {@link #getField(String)} method * with that header field name. * * @return */ public List<Field> getFields() { return fields; } public void setFields(List<Field> fields) { this.fields = fields; } public List<Field> getHiddenFields() { return hiddenFields; } public void setHiddenFields(List<Field> hiddenFields) { this.hiddenFields = hiddenFields; } /** * Returns a {@link Field} in this record for a particular field name. Used when displaying a {@link ListGrid} in order * to guarantee proper field ordering * * @param fieldName * @return */ public Field getField(String fieldName) { if (fieldMap == null) { fieldMap = new LinkedHashMap<String, Field>(); for (Field field : fields) { fieldMap.put(field.getName(), field); } for (Field hiddenField : hiddenFields) { fieldMap.put(hiddenField.getName(), hiddenField); } } Field field = fieldMap.get(fieldName); // We'll return a null field is this particular record doesn't have this polymorphic property. // This prevents NPEs in list grids if (field == null) { field = new Field(); } return field; } public void clearFieldMap() { fieldMap = null; } public String getHiddenFieldsJson() { StringBuilder sb = new StringBuilder(); sb.append("{"); sb.append("\"hiddenFields\":["); for (int j=0;j<hiddenFields.size();j++) { sb.append("{\"name\":\""); sb.append(hiddenFields.get(j).getName()); sb.append("\",\"val\":"); sb.append(JSONObject.quote(hiddenFields.get(j).getValue())); sb.append("}"); if (j < hiddenFields.size()-1) { sb.append(","); } } sb.append("]}"); return sb.toString(); } public Boolean getIsDirty() { return isDirty == null ? false : isDirty; } public void setDirty(Boolean isDirty) { this.isDirty = isDirty; } public Boolean getIsError() { return isError == null ? false : isError; } public void setIsError(Boolean isError) { this.isError = isError; } public String getErrorKey() { return errorKey; } public void setErrorKey(String errorKey) { this.errorKey = errorKey; } /** * Actual, localized error message. If set, this will override the error key. * @return */ public String getErrorMessage() { return this.errorMessage; } /** * If set, this will override the errorKey. * * @param errorMessage */ public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; } public ListGridRecordIcon getIcon() { if (icon != null) { return icon; } if (getIsError()) { String msgToUser = getErrorMessage(); if (msgToUser == null) { msgToUser = BLCMessageUtils.getMessage(getErrorKey()); } return new ListGridRecordIcon() .withCssClass("icon-exclamation-sign") .withMessage(msgToUser) .withHasDetails(true); } if (getIsDirty()) { return new ListGridRecordIcon() .withCssClass("icon-pencil") .withMessage(BLCMessageUtils.getMessage("listgrid.record.edited")) .withHasDetails(false); } return null; } public void setIcon(ListGridRecordIcon icon) { this.icon = icon; } public Boolean getHasIcon() { return icon != null || getIsError() || getIsDirty(); } public String getAltId() { return altId; } public void setAltId(String altId) { this.altId = altId; } }