001/** 002 * Copyright 2005-2018 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 */ 016package org.kuali.rice.krad.uif.field; 017 018import java.util.ArrayList; 019import java.util.Map; 020 021import org.apache.commons.lang.StringUtils; 022import org.kuali.rice.krad.datadictionary.parse.BeanTag; 023import org.kuali.rice.krad.datadictionary.parse.BeanTagAttribute; 024import org.kuali.rice.krad.datadictionary.parse.BeanTags; 025import org.kuali.rice.krad.datadictionary.validator.ErrorReport; 026import org.kuali.rice.krad.datadictionary.validator.ValidationTrace; 027import org.kuali.rice.krad.datadictionary.validator.Validator; 028import org.kuali.rice.krad.uif.element.Action; 029import org.kuali.rice.krad.uif.element.Image; 030import org.kuali.rice.krad.uif.lifecycle.ViewLifecycleRestriction; 031import org.kuali.rice.krad.uif.util.LifecycleElement; 032 033/** 034 * Field that encloses an @{link org.kuali.rice.krad.uif.element.Action} element 035 * 036 * @author Kuali Rice Team (rice.collab@kuali.org) 037 */ 038@BeanTags({@BeanTag(name = "actionField", parent = "Uif-ActionField"), 039 @BeanTag(name = "actionLinkField", parent = "Uif-ActionLinkField")}) 040public class ActionField extends FieldBase { 041 private static final long serialVersionUID = -8495752159848603102L; 042 043 private Action action; 044 045 /** 046 * Initializes wrapped action instance. 047 */ 048 public ActionField() { 049 action = new Action(); 050 } 051 052 /** 053 * PerformFinalize override - calls super, corrects the field's Label for attribute to point to this field's 054 * content. 055 * 056 * @param model the model 057 * @param parent the parent component 058 */ 059 @Override 060 public void performFinalize(Object model, LifecycleElement parent) { 061 super.performFinalize(model, parent); 062 063 //determine what id to use for the for attribute of the label, if present 064 if (this.getFieldLabel() != null && this.getAction() != null && StringUtils.isNotBlank( 065 this.getAction().getId())) { 066 this.getFieldLabel().setLabelForComponentId(this.getAction().getId()); 067 } 068 } 069 070 /** 071 * Nested action component. 072 * 073 * @return Action instance 074 */ 075 @BeanTagAttribute 076 public Action getAction() { 077 return action; 078 } 079 080 /** 081 * Setter for the nested action component. 082 * 083 * @param action property value 084 */ 085 public void setAction(Action action) { 086 this.action = action; 087 } 088 089 /** 090 * Delegates {@code methodToCall} property reference to the action. 091 * 092 * @return method to call 093 * @see org.kuali.rice.krad.uif.element.Action#getMethodToCall() 094 */ 095 @BeanTagAttribute 096 public String getMethodToCall() { 097 return action.getMethodToCall(); 098 } 099 100 /** 101 * Delegates {@code methodToCall} property reference to the action. 102 * 103 * @param methodToCall method to call 104 * @see org.kuali.rice.krad.uif.element.Action#setMethodToCall(java.lang.String) 105 */ 106 public void setMethodToCall(String methodToCall) { 107 action.setMethodToCall(methodToCall); 108 } 109 110 /** 111 * Delegates {@code actionLabel} property reference to the action. 112 * 113 * @return action label 114 * @see org.kuali.rice.krad.uif.element.Action#getActionLabel() 115 */ 116 @BeanTagAttribute 117 public String getActionLabel() { 118 return action.getActionLabel(); 119 } 120 121 /** 122 * Delegates {@code actionLabel} property reference to the action. 123 * 124 * @param actionLabel action label 125 * @see org.kuali.rice.krad.uif.element.Action#setActionLabel(java.lang.String) 126 */ 127 public void setActionLabel(String actionLabel) { 128 action.setActionLabel(actionLabel); 129 } 130 131 /** 132 * Delegates {@code actionImage} property reference to the action. 133 * 134 * @return action image 135 * @see org.kuali.rice.krad.uif.element.Action#getActionImage() 136 */ 137 @ViewLifecycleRestriction 138 @BeanTagAttribute 139 public Image getActionImage() { 140 return action.getActionImage(); 141 } 142 143 /** 144 * Delegates {@code actionImage} property reference to the action. 145 * 146 * @param actionImage action image 147 * @see org.kuali.rice.krad.uif.element.Action#setActionImage(org.kuali.rice.krad.uif.element.Image) 148 */ 149 public void setActionImage(Image actionImage) { 150 action.setActionImage(actionImage); 151 } 152 153 /** 154 * Delegates to {@link org.kuali.rice.krad.uif.element.Action#getNavigateToPageId()}. 155 * 156 * @return page ID to navigate to 157 */ 158 @BeanTagAttribute 159 public String getNavigateToPageId() { 160 return action.getNavigateToPageId(); 161 } 162 163 /** 164 * Setter for {@link Action#setNavigateToPageId(java.lang.String)}. 165 * 166 * @param navigateToPageId property value 167 */ 168 public void setNavigateToPageId(String navigateToPageId) { 169 action.setNavigateToPageId(navigateToPageId); 170 } 171 172 /** 173 * Delegates to {@link org.kuali.rice.krad.uif.element.Action#getActionEvent()}. 174 * 175 * @return action event 176 */ 177 @BeanTagAttribute 178 public String getActionEvent() { 179 return action.getActionEvent(); 180 } 181 182 /** 183 * Setter for {@link org.kuali.rice.krad.uif.element.Action#setActionEvent(java.lang.String)}. 184 * 185 * @param actionEvent property value 186 */ 187 public void setActionEvent(String actionEvent) { 188 action.setActionEvent(actionEvent); 189 } 190 191 /** 192 * @see org.kuali.rice.krad.uif.element.Action#getActionParameters() 193 */ 194 @BeanTagAttribute 195 public Map<String, String> getActionParameters() { 196 return action.getActionParameters(); 197 } 198 199 /** 200 * Setter for {@link #getActionParameters()} 201 * 202 * @param actionParameters action parameters 203 */ 204 public void setActionParameters(Map<String, String> actionParameters) { 205 action.setActionParameters(actionParameters); 206 } 207 208 /** 209 * @see org.kuali.rice.krad.uif.element.Action#getAdditionalSubmitData() 210 */ 211 @BeanTagAttribute 212 public Map<String, String> getAdditionalSubmitData() { 213 return action.getAdditionalSubmitData(); 214 } 215 216 /** 217 * Setter for {@link #getAdditionalSubmitData()} 218 * 219 * @param additionalSubmitData property value 220 */ 221 public void setAdditionalSubmitData(Map<String, String> additionalSubmitData) { 222 action.setAdditionalSubmitData(additionalSubmitData); 223 } 224 225 /** 226 * @see org.kuali.rice.krad.uif.element.Action#addActionParameter(java.lang.String, java.lang.String) 227 */ 228 public void addActionParameter(String parameterName, String parameterValue) { 229 action.addActionParameter(parameterName, parameterValue); 230 } 231 232 /** 233 * @see org.kuali.rice.krad.uif.element.Action#getActionParameter(java.lang.String) 234 */ 235 public String getActionParameter(String parameterName) { 236 return action.getActionParameter(parameterName); 237 } 238 239 /** 240 * @see org.kuali.rice.krad.uif.element.Action#getJumpToIdAfterSubmit() 241 */ 242 @BeanTagAttribute 243 public String getJumpToIdAfterSubmit() { 244 return action.getJumpToIdAfterSubmit(); 245 } 246 247 /** 248 * @see org.kuali.rice.krad.uif.element.Action#setJumpToIdAfterSubmit(java.lang.String) 249 */ 250 251 public void setJumpToIdAfterSubmit(String jumpToIdAfterSubmit) { 252 action.setJumpToIdAfterSubmit(jumpToIdAfterSubmit); 253 } 254 255 /** 256 * @see org.kuali.rice.krad.uif.element.Action#getJumpToNameAfterSubmit() 257 */ 258 @BeanTagAttribute 259 public String getJumpToNameAfterSubmit() { 260 return action.getJumpToNameAfterSubmit(); 261 } 262 263 /** 264 * @see org.kuali.rice.krad.uif.element.Action#setJumpToNameAfterSubmit(java.lang.String) 265 */ 266 public void setJumpToNameAfterSubmit(String jumpToNameAfterSubmit) { 267 action.setJumpToNameAfterSubmit(jumpToNameAfterSubmit); 268 } 269 270 /** 271 * @see org.kuali.rice.krad.uif.element.Action#getFocusOnIdAfterSubmit() 272 */ 273 @BeanTagAttribute 274 public String getFocusOnIdAfterSubmit() { 275 return action.getFocusOnIdAfterSubmit(); 276 } 277 278 /** 279 * @see org.kuali.rice.krad.uif.element.Action#setFocusOnIdAfterSubmit(java.lang.String) 280 */ 281 public void setFocusOnIdAfterSubmit(String focusOnAfterSubmit) { 282 action.setFocusOnIdAfterSubmit(focusOnAfterSubmit); 283 } 284 285 /** 286 * @see org.kuali.rice.krad.uif.element.Action#isPerformClientSideValidation() 287 */ 288 @BeanTagAttribute 289 public boolean isPerformClientSideValidation() { 290 return action.isPerformClientSideValidation(); 291 } 292 293 /** 294 * @see org.kuali.rice.krad.uif.element.Action#setPerformClientSideValidation(boolean) 295 */ 296 public void setPerformClientSideValidation(boolean clientSideValidate) { 297 action.setPerformClientSideValidation(clientSideValidate); 298 } 299 300 /** 301 * @see org.kuali.rice.krad.uif.element.Action#getActionScript() 302 */ 303 @BeanTagAttribute 304 public String getActionScript() { 305 return action.getActionScript(); 306 } 307 308 /** 309 * @see org.kuali.rice.krad.uif.element.Action#setActionScript(java.lang.String) 310 */ 311 public void setActionScript(String actionScript) { 312 action.setActionScript(actionScript); 313 } 314 315 /** 316 * @see org.kuali.rice.krad.uif.element.Action#isPerformDirtyValidation() 317 */ 318 @BeanTagAttribute 319 public boolean isPerformDirtyValidation() { 320 return action.isPerformDirtyValidation(); 321 } 322 323 /** 324 * @see org.kuali.rice.krad.uif.element.Action#setPerformDirtyValidation(boolean) 325 */ 326 public void setPerformDirtyValidation(boolean blockValidateDirty) { 327 action.setPerformDirtyValidation(blockValidateDirty); 328 } 329 330 /** 331 * @see org.kuali.rice.krad.uif.element.Action#isDisabled() 332 */ 333 @BeanTagAttribute 334 public boolean isDisabled() { 335 return action.isDisabled(); 336 } 337 338 /** 339 * @see org.kuali.rice.krad.uif.element.Action#setDisabled(boolean) 340 */ 341 public void setDisabled(boolean disabled) { 342 action.setDisabled(disabled); 343 } 344 345 /** 346 * @see org.kuali.rice.krad.uif.element.Action#getDisabledReason() 347 */ 348 @BeanTagAttribute 349 public String getDisabledReason() { 350 return action.getDisabledReason(); 351 } 352 353 /** 354 * @see org.kuali.rice.krad.uif.element.Action#setDisabledReason(java.lang.String) 355 */ 356 public void setDisabledReason(String disabledReason) { 357 action.setDisabledReason(disabledReason); 358 } 359 360 /** 361 * @see org.kuali.rice.krad.uif.element.Action#getActionImagePlacement() 362 */ 363 @BeanTagAttribute 364 public String getActionImagePlacement() { 365 return action.getActionImagePlacement(); 366 } 367 368 /** 369 * @see org.kuali.rice.krad.uif.element.Action#setActionImagePlacement(java.lang.String) 370 */ 371 public void setActionImagePlacement(String actionImageLocation) { 372 action.setActionImagePlacement(actionImageLocation); 373 } 374 375 /** 376 * @see org.kuali.rice.krad.uif.element.Action#getPreSubmitCall() 377 */ 378 @BeanTagAttribute 379 public String getPreSubmitCall() { 380 return action.getPreSubmitCall(); 381 } 382 383 /** 384 * @see org.kuali.rice.krad.uif.element.Action#setPreSubmitCall(java.lang.String) 385 */ 386 public void setPreSubmitCall(String preSubmitCall) { 387 action.setPreSubmitCall(preSubmitCall); 388 } 389 390 /** 391 * @see org.kuali.rice.krad.uif.element.Action#isAjaxSubmit() 392 */ 393 @BeanTagAttribute 394 public boolean isAjaxSubmit() { 395 return action.isAjaxSubmit(); 396 } 397 398 /** 399 * @see org.kuali.rice.krad.uif.element.Action#setAjaxSubmit(boolean) 400 */ 401 public void setAjaxSubmit(boolean ajaxSubmit) { 402 action.setAjaxSubmit(ajaxSubmit); 403 } 404 405 /** 406 * @see org.kuali.rice.krad.uif.element.Action#getSuccessCallback() 407 */ 408 @BeanTagAttribute 409 public String getSuccessCallback() { 410 return action.getSuccessCallback(); 411 } 412 413 /** 414 * @param successCallback 415 * @see org.kuali.rice.krad.uif.element.Action#setSuccessCallback(java.lang.String) 416 */ 417 public void setSuccessCallback(String successCallback) { 418 action.setSuccessCallback(successCallback); 419 } 420 421 /** 422 * @see org.kuali.rice.krad.uif.element.Action#getErrorCallback() 423 */ 424 @BeanTagAttribute 425 public String getErrorCallback() { 426 return action.getErrorCallback(); 427 } 428 429 /** 430 * @param errorCallback 431 * @see org.kuali.rice.krad.uif.element.Action#setErrorCallback(java.lang.String) 432 */ 433 public void setErrorCallback(String errorCallback) { 434 action.setErrorCallback(errorCallback); 435 } 436 437 /** 438 * @see org.kuali.rice.krad.uif.element.Action#getRefreshId() 439 */ 440 @BeanTagAttribute 441 public String getRefreshId() { 442 return action.getRefreshId(); 443 } 444 445 /** 446 * @see org.kuali.rice.krad.uif.element.Action#setRefreshId(java.lang.String) 447 */ 448 public void setRefreshId(String refreshId) { 449 action.setRefreshId(refreshId); 450 } 451 452 /** 453 * @see org.kuali.rice.krad.uif.element.Action#isDisableBlocking() 454 */ 455 @BeanTagAttribute 456 public boolean isDisableBlocking() { 457 return action.isDisableBlocking(); 458 } 459 460 /** 461 * @see org.kuali.rice.krad.uif.element.Action#setDisableBlocking(boolean) 462 */ 463 public void setDisableBlocking(boolean disableBlocking) { 464 action.setDisableBlocking(disableBlocking); 465 } 466 467 /** 468 * {@inheritDoc} 469 */ 470 @Override 471 public void completeValidation(ValidationTrace tracer) { 472 ArrayList<ErrorReport> reports = new ArrayList<ErrorReport>(); 473 tracer.addBean(this); 474 475 // Checks that the action is set 476 if (getAction() == null) { 477 if (Validator.checkExpressions(this, "action")) { 478 String currentValues[] = {"action =" + getAction()}; 479 tracer.createWarning("Action should not be null", currentValues); 480 } 481 } 482 483 // checks that the label is set 484 if (getLabel() == null) { 485 if (Validator.checkExpressions(this, "label")) { 486 String currentValues[] = {"label =" + getLabel(), "action =" + getAction()}; 487 tracer.createWarning("Label is null, action should be used instead", currentValues); 488 } 489 } 490 491 super.completeValidation(tracer.getCopy()); 492 } 493}