001 /** 002 * Copyright 2005-2013 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.krad.uif.element; 017 018 import org.kuali.rice.krad.datadictionary.parse.BeanTag; 019 import org.kuali.rice.krad.datadictionary.parse.BeanTagAttribute; 020 import org.kuali.rice.krad.service.KRADServiceLocatorWeb; 021 import org.kuali.rice.krad.uif.UifConstants; 022 import org.kuali.rice.krad.uif.component.Component; 023 import org.kuali.rice.krad.uif.util.ScriptUtils; 024 import org.kuali.rice.krad.uif.view.View; 025 026 import java.util.HashMap; 027 import java.util.Map; 028 029 /** 030 * ValidationMessages for logic and options specific to groups 031 */ 032 @BeanTag(name = "fieldValidationMessages-bean", parent = "Uif-FieldValidationMessages") 033 public class FieldValidationMessages extends ValidationMessages { 034 035 private boolean useTooltip; 036 private boolean showIcons; 037 038 @Override 039 /** 040 * Calls super and add dataAttributes that are appropriate for field level validationMessages 041 * data. This data is used by the validation framework clientside. 042 * 043 * @see krad.validate.js 044 */ 045 public void generateMessages(boolean reset, View view, Object model, Component parent) { 046 super.generateMessages(reset, view, model, parent); 047 boolean hasMessages = false; 048 if (!this.getErrors().isEmpty() || !this.getWarnings().isEmpty() || !this.getInfos().isEmpty()) { 049 hasMessages = true; 050 } 051 HashMap<String, Object> validationMessagesDataAttributes = new HashMap<String, Object>(); 052 053 Map<String, String> dataDefaults = 054 (Map<String, String>) (KRADServiceLocatorWeb.getDataDictionaryService().getDictionaryObject( 055 "Uif-FieldValidationMessages-DataDefaults")); 056 057 //display 058 this.addValidationDataSettingsValue(validationMessagesDataAttributes, dataDefaults, "displayMessages", 059 this.isDisplayMessages()); 060 061 //options 062 this.addValidationDataSettingsValue(validationMessagesDataAttributes, dataDefaults, "useTooltip", useTooltip); 063 this.addValidationDataSettingsValue(validationMessagesDataAttributes, dataDefaults, "messagingEnabled", 064 this.isDisplayMessages()); 065 this.addValidationDataSettingsValue(validationMessagesDataAttributes, dataDefaults, "hasOwnMessages", 066 hasMessages); 067 this.addValidationDataSettingsValue(validationMessagesDataAttributes, dataDefaults, "showIcons", showIcons); 068 069 //add property directly for selections 070 if (hasMessages) { 071 parent.addDataAttribute(UifConstants.DataAttributes.HAS_MESSAGES, Boolean.toString(hasMessages)); 072 } 073 074 //server messages 075 this.addValidationDataSettingsValue(validationMessagesDataAttributes, dataDefaults, "serverErrors", 076 ScriptUtils.escapeHtml(this.getErrors())); 077 this.addValidationDataSettingsValue(validationMessagesDataAttributes, dataDefaults, "serverWarnings", 078 ScriptUtils.escapeHtml(this.getWarnings())); 079 this.addValidationDataSettingsValue(validationMessagesDataAttributes, dataDefaults, "serverInfo", 080 ScriptUtils.escapeHtml(this.getInfos())); 081 082 if (!validationMessagesDataAttributes.isEmpty()) { 083 parent.addDataAttribute(UifConstants.DataAttributes.VALIDATION_MESSAGES, ScriptUtils.translateValue( 084 validationMessagesDataAttributes)); 085 } 086 } 087 088 /** 089 * When true, use the tooltip on fields to display their relevant messages. When false, these messages 090 * will appear directly below the control. 091 * 092 * @return true if using tooltips for messages, false to display below control 093 */ 094 @BeanTagAttribute(name = "useTooltip") 095 public boolean isUseTooltip() { 096 return useTooltip; 097 } 098 099 /** 100 * Set the useTooltip flag 101 * 102 * @param useTooltip if true, show tooltip, otherwise show messages below field control 103 */ 104 public void setUseTooltip(boolean useTooltip) { 105 this.useTooltip = useTooltip; 106 } 107 108 /** 109 * If true, display dynamic icons next to fields which have messages. Otherwise, do not render these icons. 110 * 111 * @return true if icons will be displayed, false otherwise 112 */ 113 @BeanTagAttribute(name = "showIcons") 114 public boolean isShowIcons() { 115 return showIcons; 116 } 117 118 /** 119 * Set whether field validation icons should display or not. 120 * 121 * @param showIcons 122 */ 123 public void setShowIcons(boolean showIcons) { 124 this.showIcons = showIcons; 125 } 126 127 /** 128 * @see org.kuali.rice.krad.uif.component.ComponentBase#copy() 129 */ 130 @Override 131 protected <T> void copyProperties(T component) { 132 super.copyProperties(component); 133 FieldValidationMessages fieldValidationMessagesCopy = (FieldValidationMessages) component; 134 fieldValidationMessagesCopy.setUseTooltip(this.useTooltip); 135 fieldValidationMessagesCopy.setShowIcons(this.showIcons); 136 } 137 }