1 /** 2 * Copyright 2005-2014 The Kuali Foundation 3 * 4 * Licensed under the Educational Community License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.opensource.org/licenses/ecl2.php 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package org.kuali.rice.krad.uif.component; 17 18 import org.kuali.rice.krad.datadictionary.uif.UifDictionaryBean; 19 import org.kuali.rice.krad.datadictionary.validator.ValidationTrace; 20 import org.kuali.rice.krad.uif.layout.CssGridSizes; 21 import org.kuali.rice.krad.uif.lifecycle.RunComponentModifiersTask; 22 import org.kuali.rice.krad.uif.modifier.ComponentModifier; 23 import org.kuali.rice.krad.uif.util.LifecycleElement; 24 import org.kuali.rice.krad.uif.widget.Tooltip; 25 26 import java.io.Serializable; 27 import java.util.List; 28 import java.util.Map; 29 30 /** 31 * Component defines basic properties and methods that all rendering element implement 32 * 33 * <p> 34 * All classes of the UIF that are used as a rendering element implement the 35 * component interface. All components within the framework have the 36 * following structure: 37 * <ul> 38 * <li>Dictionary Configuration/Composition</li> 39 * <li>Java Class (the Component implementation</li> 40 * <li>>JSP Template Renderer</li> 41 * </ul> 42 * </p> 43 * <p> 44 * There are three basic types of components: 45 * <ul> 46 * <li>Container Components: {@code View}, {@code Group}</li> 47 * <li>Field Components: {@code Field}</li> 48 * <li>Widget Components: {@code Widget}</li> 49 * </ul> 50 * </p> 51 * 52 * @author Kuali Rice Team (rice.collab@kuali.org) 53 * @see org.kuali.rice.krad.uif.container.Container 54 * @see org.kuali.rice.krad.uif.field.Field 55 * @see org.kuali.rice.krad.uif.widget.Widget 56 */ 57 public interface Component extends UifDictionaryBean, LifecycleElement, Serializable, Ordered, ScriptEventSupport { 58 59 /** 60 * The name for the component type 61 * 62 * <p> 63 * This is used within the rendering layer to pass the component instance into the template. The component instance 64 * is exported under the name given by this method. 65 * </p> 66 * 67 * @return String type name 68 */ 69 String getComponentTypeName(); 70 71 /** 72 * Indicates whether the component has been fully rendered. 73 * 74 * @return True if the component has fully rendered, false if not. 75 */ 76 boolean isRendered(); 77 78 /** 79 * Invoked by the view lifecycle after expressions are evaluated at the apply model phase. 80 * 81 * <p> 82 * In general, this method is preferred to {@link #performApplyModel(Object, LifecycleElement)} 83 * for populating model data via code, since it is called before client-side state is synchronize. 84 * </p> 85 */ 86 void afterEvaluateExpression(); 87 88 /** 89 * Set the view lifecycle processing status for this component, explicitly. 90 * 91 * @param status The view status for this component. 92 */ 93 void setViewStatus(String status); 94 95 /** 96 * The path to the JSP file that should be called to render the component 97 * 98 * <p> 99 * The path should be relative to the web root. An attribute will be available to the component to use under the 100 * name given by the method {@code getComponentTypeName}. Based on the component type, additional attributes could 101 * be available for use. See the component documentation for more information on such attributes. 102 * </p> 103 * 104 * <p> 105 * e.g. '/krad/WEB-INF/jsp/tiles/component.jsp' 106 * </p> 107 * 108 * @return String representing the template path 109 */ 110 String getTemplate(); 111 112 /** 113 * Setter for the components template 114 * 115 * @param template 116 */ 117 void setTemplate(String template); 118 119 /** 120 * Gets additional templates that will be required during the rendering of this component. 121 * 122 * <p> 123 * If a parent or sibling component is referred to by this component's template, 124 * include that component's template here to ensure that it has been compiled already during 125 * bottom-up inline rendering. 126 * </p> 127 * 128 * @return additional templates required during rendering 129 */ 130 List<String> getAdditionalTemplates(); 131 132 /** 133 * The name for which the template can be invoked by 134 * 135 * <p> 136 * Whether the template name is needed depends on the underlying rendering engine being used. In the example of 137 * Freemarker, the template points to the actual source file, which then loads a macro. From then on the macro is 138 * simply invoked to execute the template 139 * </p> 140 * 141 * <p> 142 * e.g. 'uif_text' 143 * </p> 144 * 145 * @return template name 146 */ 147 public String getTemplateName(); 148 149 /** 150 * Setter for the name of the template (a name which can be used to invoke) 151 * 152 * @param templateName 153 */ 154 public void setTemplateName(String templateName); 155 156 /** 157 * The component title 158 * 159 * <p> 160 * Depending on the component can be used in various ways. For example with a Container component the title is 161 * used to set the header text. For components like controls other other components that render an HTML element it 162 * is used to set the HTML title attribute. 163 * </p> 164 * 165 * @return String title for component 166 */ 167 String getTitle(); 168 169 /** 170 * Setter for the component's title 171 * 172 * @param title 173 */ 174 void setTitle(String title); 175 176 /** 177 * List of components that are contained within the List of {@code PropertyReplacer} in component 178 * 179 * <p> 180 * Used to get all the nested components in the property replacers. 181 * </p> 182 * 183 * @return List<Component> {@code PropertyReplacer} child components 184 */ 185 List<Component> getPropertyReplacerComponents(); 186 187 /** 188 * {@code ComponentModifier} instances that should be invoked to 189 * initialize the component 190 * 191 * <p> 192 * These provide dynamic initialization behavior for the component and are 193 * configured through the components definition. Each initializer will get 194 * invoked by the initialize method. 195 * </p> 196 * 197 * @return List of component modifiers 198 * @see RunComponentModifiersTask 199 */ 200 List<ComponentModifier> getComponentModifiers(); 201 202 /** 203 * Setter for the components List of {@code ComponentModifier} 204 * instances 205 * 206 * @param componentModifiers 207 */ 208 void setComponentModifiers(List<ComponentModifier> componentModifiers); 209 210 /** 211 * When true, this component will render as a placeholder component instead of rendering normally because the 212 * content will be later retrieved through manually ajax retrieval calls in the js 213 * 214 * <p>This flag does not imply any automation, there must be a js call invoked for the content to be retrieved 215 * by the server, but this does mark it with a placeholder component which KRAD js uses during these calls. 216 * This placeholder component is used for ajax retrievals. In particular, this flag is useful for use in 217 * combination with the <b>showLightboxComponent</b> js function which will automatically retrieve the 218 * real content of a component through ajax if a placeholder component is detected. This allows for the full 219 * content to only be retrieved when the lightbox is first opened. 220 * When this flag is set to true, the forceSessionPersistence 221 * flag is set to true AUTOMATICALLY because it is implied that this component will be retrieved by an ajax call 222 * in the future. This may also be useful for direct custom calls to <b>retrieveComponent</b> function, 223 * as well, which also relies on the placeholder being present.</p> 224 * 225 * @return true if this component is being rendered as a placeholder for use in replacement during and ajax call, 226 * false otherwise 227 */ 228 public boolean isRetrieveViaAjax(); 229 230 /** 231 * When true, this component will render as a placeholder component instead of rendering normally because the 232 * content will be later retrieved through manually ajax retrieval calls in the js 233 * 234 * @param useAjaxCallForContent 235 */ 236 public void setRetrieveViaAjax(boolean useAjaxCallForContent); 237 238 /** 239 * Indicates whether the component should be hidden in the UI 240 * 241 * <p> 242 * How the hidden data is maintained depends on the views persistence mode. 243 * If the mode is request, the corresponding data will be rendered to the UI 244 * but not visible. If the mode is session, the data will not be rendered to 245 * the UI but maintained server side. 246 * </p> 247 * 248 * <p> 249 * For a {@code Container} component, the hidden setting will apply to 250 * all contained components (making a section hidden makes all fields within 251 * the section hidden) 252 * </p> 253 * 254 * @return boolean true if the component should be hidden, false if it 255 * should be visible 256 */ 257 boolean isHidden(); 258 259 /** 260 * Setter for the hidden indicator 261 * 262 * @param hidden 263 */ 264 void setHidden(boolean hidden); 265 266 /** 267 * Indicates whether the component can be edited 268 * 269 * <p> 270 * When readOnly the controls and widgets of {@code Field} components 271 * will not be rendered. If the Field has an underlying value it will be 272 * displayed readOnly to the user. 273 * </p> 274 * 275 * <p> 276 * For a {@code Container} component, the readOnly setting will apply 277 * to all contained components (making a section readOnly makes all fields 278 * within the section readOnly). 279 * </p> 280 * 281 * @return boolean true if the component should be readOnly, false if is 282 * allows editing 283 */ 284 Boolean getReadOnly(); 285 286 /** 287 * Setter for the read only indicator 288 * 289 * @param readOnly 290 */ 291 void setReadOnly(Boolean readOnly); 292 293 /** 294 * Indicates whether the component is required 295 * 296 * <p> 297 * At the general component level required means there is some action the 298 * user needs to take within the component. For example, within a section it 299 * might mean the fields within the section should be completed. At a field 300 * level, it means the field should be completed. This provides the ability 301 * for the renderers to indicate the required action. 302 * </p> 303 * 304 * @return boolean true if the component is required, false if it is not 305 * required 306 */ 307 Boolean getRequired(); 308 309 /** 310 * Setter for the required indicator 311 * 312 * @param required 313 */ 314 void setRequired(Boolean required); 315 316 /** 317 * Horizontal alignment of the component within its container 318 * 319 * <p> 320 * All components belong to a <code>Container</code> and are placed using a 321 * <code>LayoutManager</code>. This property specifies how the component 322 * should be aligned horizontally within the container. During the finalize 323 * phase the CSS text-align style will be created for the align setting. 324 * </p> 325 * 326 * @return String horizontal align 327 * @see org.kuali.rice.krad.uif.CssConstants.TextAligns 328 */ 329 public String getAlign(); 330 331 /** 332 * Sets the components horizontal alignment 333 * 334 * @param align 335 */ 336 public void setAlign(String align); 337 338 /** 339 * Vertical alignment of the component within its container 340 * 341 * <p> 342 * All components belong to a <code>Container</code> and are placed using a 343 * <code>LayoutManager</code>. This property specifies how the component 344 * should be aligned vertically within the container. During the finalize 345 * phase the CSS vertical-align style will be created for the valign 346 * setting. 347 * </p> 348 * 349 * @return String vertical align 350 * @see org.kuali.rice.krad.uif.CssConstants.VerticalAligns 351 */ 352 public String getValign(); 353 354 /** 355 * Setter for the component's vertical align 356 * 357 * @param valign 358 */ 359 public void setValign(String valign); 360 361 /** 362 * Width the component should take up in the container 363 * 364 * <p> 365 * All components belong to a <code>Container</code> and are placed using a 366 * <code>LayoutManager</code>. This property specifies a width the component 367 * should take up in the Container. This is not applicable for all layout 368 * managers. During the finalize phase the CSS width style will be created 369 * for the width setting. 370 * </p> 371 * 372 * <p> 373 * e.g. '30%', '55px' 374 * </p> 375 * 376 * @return String width string 377 */ 378 public String getWidth(); 379 380 /** 381 * Setter for the components width 382 * 383 * @param width 384 */ 385 public void setWidth(String width); 386 387 /** 388 * CSS style string to be applied to the component 389 * 390 * <p> 391 * Any style override or additions can be specified with this attribute. 392 * This is used by the renderer to set the style attribute on the 393 * corresponding element. 394 * </p> 395 * 396 * <p> 397 * e.g. 'color: #000000;text-decoration: underline;' 398 * </p> 399 * 400 * @return String css style string 401 */ 402 String getStyle(); 403 404 /** 405 * Setter for the components style 406 * 407 * @param style 408 */ 409 void setStyle(String style); 410 411 public List<String> getLibraryCssClasses(); 412 413 public void setLibraryCssClasses(List<String> libraryCssClasses); 414 415 /** 416 * CSS style class(s) to be applied to the component 417 * 418 * <p> 419 * Declares style classes for the component. Multiple classes are specified 420 * with a space delimiter. This is used by the renderer to set the class 421 * attribute on the corresponding element. The class(s) declared must be 422 * available in the common style sheets or the style sheets specified for 423 * the view 424 * </p> 425 * 426 * @return List<String> css style classes to appear on the 'class' attribute 427 */ 428 List<String> getCssClasses(); 429 430 /** 431 * Setter for the components style classes 432 * 433 * @param styleClasses 434 */ 435 void setCssClasses(List<String> styleClasses); 436 437 /** 438 * Convenience property for adding css class names to the end of the list of cssClasses that may already exist on 439 * this Component (this is to avoid explicitly having to set list merge in the bean definition) 440 * 441 * @return the additionalCssClasses 442 */ 443 List<String> getAdditionalCssClasses(); 444 445 /** 446 * Set the additionalCssClasses 447 * 448 * @param styleClasses 449 */ 450 void setAdditionalCssClasses(List<String> styleClasses); 451 452 /** 453 * Adds a single style to the list of styles on this component 454 * 455 * @param styleClass 456 */ 457 void addStyleClass(String styleClass); 458 459 /** 460 * Appends to the inline style set on a component 461 * 462 * @param itemStyle 463 */ 464 void appendToStyle(String itemStyle); 465 466 /** 467 * Number of places the component should take up horizontally in the 468 * container; when using a CssGridLayoutManager this is converted to the appropriate medium size. 469 * 470 * <p> 471 * All components belong to a {@code Container} and are placed using a 472 * {@code LayoutManager}. This property specifies how many places 473 * horizontally the component should take up within the container. This is 474 * only applicable for table based layout managers. Default is 1 475 * </p> 476 * 477 * TODO: this should not be on component interface since it only applies if 478 * the layout manager supports it, need some sort of layoutOptions map for 479 * field level options that depend on the manager 480 * 481 * @return int number of columns to span 482 */ 483 int getColSpan(); 484 485 /** 486 * Setter for the components column span 487 * 488 * @param colSpan 489 */ 490 void setColSpan(int colSpan); 491 492 /** 493 * Number of places the component should take up vertically in the container 494 * 495 * <p> 496 * All components belong to a {@code Container} and are placed using a 497 * {@code LayoutManager}. This property specifies how many places 498 * vertically the component should take up within the container. This is 499 * only applicable for table based layout managers. Default is 1 500 * </p> 501 * 502 * TODO: this should not be on component interface since it only applies if 503 * the layout manager supports it, need some sort of layoutOptions map for 504 * field level options that depend on the manager 505 * 506 * @return int number of rows to span 507 */ 508 int getRowSpan(); 509 510 /** 511 * Setter for the component row span 512 * 513 * @param rowSpan 514 */ 515 void setRowSpan(int rowSpan); 516 517 /** 518 * The cellCssClasses property defines the classes that will be placed on the corresponding td (or th) elements 519 * relating to this component when used in a table backed layout. This property has no effect on other layouts. 520 * 521 * @return the css classes to apply to the wrapping td (or th) element for this component 522 */ 523 public List<String> getWrapperCssClasses(); 524 525 /** 526 * Set the cellCssClasses property which defines the classes that will be placed on the corresponding td (or th) 527 * relating to this component when used in a table backed layout. This property has no effect on other layouts. 528 * 529 * @param cellCssClasses 530 */ 531 public void setWrapperCssClasses(List<String> cellCssClasses); 532 533 /** 534 * Add a cell css class to the cell classes list 535 * 536 * @param cssClass the name of the class to add 537 */ 538 public void addWrapperCssClass(String cssClass); 539 540 /** 541 * CSS style string to be applied to the cell containing the component (only applies within 542 * table based layouts) 543 * 544 * <p> 545 * e.g. 'align: right;' 546 * </p> 547 * 548 * @return String css style string 549 */ 550 public String getWrapperStyle(); 551 552 /** 553 * Setter for the cell style attribute 554 * 555 * @param cellStyle 556 */ 557 public void setWrapperStyle(String cellStyle); 558 559 /** 560 * Width setting for the cell containing the component (only applies within table based 561 * layouts) 562 * 563 * @return String width ('25%', '155px') 564 */ 565 public String getCellWidth(); 566 567 /** 568 * Setter for the containing cell width 569 * 570 * @param cellWidth 571 */ 572 public void setCellWidth(String cellWidth); 573 574 /** 575 * CssGridSizes represent the size (width) the content's div "cell" will take up in the "row" at each screen 576 * size (extra small, small, medium, large) when using a group backed by a CssGridLayoutManager. 577 * 578 * <p> 579 * This object is NOT used by other layouts. 580 * For specifics of how css grids work, refer to the krad guide and bootstrap css grid documentation. 581 * </p> 582 * 583 * @return 584 */ 585 public CssGridSizes getCssGridSizes(); 586 587 /** 588 * @see org.kuali.rice.krad.uif.component.Component#getCssGridSizes() 589 */ 590 public void setCssGridSizes(CssGridSizes cssGridSizes); 591 592 /** 593 * Context map for the component 594 * 595 * <p> 596 * Any el statements configured for the components properties (e.g. 597 * title="@{foo.property}") are evaluated using the el context map. This map 598 * will get populated with default objects like the model, view, and request 599 * from the {@code ViewHelperService}. Other components can push 600 * further objects into the context so that they are available for use with 601 * that component. For example, {@code Field} instances that are part 602 * of a collection line as receive the current line instance 603 * </p> 604 * 605 * <p> 606 * Context map also provides objects to methods that are invoked for 607 * {@code GeneratedField} instances 608 * </p> 609 * 610 * <p> 611 * The Map key gives the name of the variable that can be used within 612 * expressions, and the Map value gives the object instance for which 613 * expressions containing the variable should evaluate against 614 * </p> 615 * 616 * <p> 617 * NOTE: Calling getContext().putAll() will skip updating any configured property replacers for the 618 * component. Instead you should call #pushAllToContextDeep 619 * </p> 620 * 621 * @return Map<String, Object> context 622 */ 623 Map<String, Object> getContext(); 624 625 /** 626 * Setter for the context Map 627 * 628 * @param context 629 */ 630 void setContext(Map<String, Object> context); 631 632 /** 633 * gets a list of {@code PropertyReplacer} instances 634 * 635 * <p>They will be evaluated 636 * during the view lifecycle to conditionally set properties on the 637 * {@code Component} based on expression evaluations</p> 638 * 639 * @return List<PropertyReplacer> replacers to evaluate 640 */ 641 List<PropertyReplacer> getPropertyReplacers(); 642 643 /** 644 * Setter for the components property substitutions 645 * 646 * @param propertyReplacers 647 */ 648 void setPropertyReplacers(List<PropertyReplacer> propertyReplacers); 649 650 /** 651 * The options that are passed through to the Component renderer 652 * 653 * <p> 654 * The Map key is the option name, with the Map value as the option value. See 655 * documentation on the particular widget render for available options. 656 * </p> 657 * 658 * @return Map<String, String> options 659 */ 660 Map<String, String> getTemplateOptions(); 661 662 /** 663 * Setter for the template's options 664 * 665 * @param templateOptions 666 */ 667 void setTemplateOptions(Map<String, String> templateOptions); 668 669 /** 670 * Builds a string from the underlying <code>Map</code> of template options that will export that options as a 671 * JavaScript Map for use in js and jQuery plugins 672 * 673 * <p> 674 * See documentation on the particular component render for available options. 675 * </p> 676 * 677 * @return String options 678 */ 679 String getTemplateOptionsJSString(); 680 681 /** 682 * Setter for the template's options 683 * 684 * @param templateOptionsJSString 685 */ 686 void setTemplateOptionsJSString(String templateOptionsJSString); 687 688 /** 689 * Order of a component within a List of other components 690 * 691 * <p>Lower numbers are placed higher up in the list, while higher numbers are placed 692 * lower in the list</p> 693 * 694 * @return int ordering number 695 * @see org.springframework.core.Ordered#getOrder() 696 */ 697 int getOrder(); 698 699 /** 700 * Setter for the component's order 701 * 702 * @param order 703 */ 704 void setOrder(int order); 705 706 /** 707 * The Tooltip widget that renders a tooltip with additional information about the element on 708 * specified trigger event 709 * 710 * @return Tooltip 711 */ 712 Tooltip getToolTip(); 713 714 /** 715 * Setter for the component tooltip widget instance 716 * 717 * @param toolTip 718 */ 719 void setToolTip(Tooltip toolTip); 720 721 /** 722 * String containing JavaScript code for registering event handlers for this component 723 * (blur, focus, click, etc.) 724 * 725 * @return JS event handler script 726 */ 727 public String getEventHandlerScript(); 728 729 /** 730 * The name of the method that should be invoked for finalizing the component 731 * configuration (full method name, without parameters or return type) 732 * 733 * <p> 734 * Note the method can also be set with the finalizeMethodInvoker 735 * targetMethod property. If the method is on the configured 736 * {@code ViewHelperService}, only this property needs to be configured 737 * </p> 738 * 739 * <p> 740 * The model backing the view will be passed as the first argument method and then 741 * the {@code Component} instance as the second argument. If any additional method 742 * arguments are declared with the finalizeMethodAdditionalArguments, they will then 743 * be passed in the order declared in the list 744 * </p> 745 * 746 * <p> 747 * If the component is selfRendered, the finalize method can return a string which 748 * will be set as the component's renderOutput. The selfRendered indicator will also 749 * be set to true on the component. 750 * </p> 751 * 752 * @return String method name 753 */ 754 String getFinalizeMethodToCall(); 755 756 /** 757 * The List of Object instances that should be passed as arguments to the finalize method 758 * 759 * <p> 760 * These arguments are passed to the finalize method after the standard model and component 761 * arguments. They are passed in the order declared in the list 762 * </p> 763 * 764 * @return List<Object> additional method arguments 765 */ 766 List<Object> getFinalizeMethodAdditionalArguments(); 767 768 /** 769 * {@code MethodInvokerConfig} instance for the method that should be invoked 770 * for finalizing the component configuration 771 * 772 * <p> 773 * MethodInvoker can be configured to specify the class or object the method 774 * should be called on. For static method invocations, the targetClass 775 * property can be configured. For object invocations, that targetObject 776 * property can be configured 777 * </p> 778 * 779 * <p> 780 * If the component is selfRendered, the finalize method can return a string which 781 * will be set as the component's renderOutput. The selfRendered indicator will also 782 * be set to true on the component. 783 * </p> 784 * 785 * @return MethodInvokerConfig instance 786 */ 787 MethodInvokerConfig getFinalizeMethodInvoker(); 788 789 /** 790 * Indicates whether the component contains its own render output (through 791 * the renderOutput property) 792 * 793 * <p> 794 * If self rendered is true, the corresponding template for the component 795 * will not be invoked and the renderOutput String will be written to the 796 * response as is. 797 * </p> 798 * 799 * @return boolean true if component is self rendered, false if not (renders 800 * through template) 801 */ 802 boolean isSelfRendered(); 803 804 /** 805 * Setter for the self render indicator 806 * 807 * @param selfRendered 808 */ 809 void setSelfRendered(boolean selfRendered); 810 811 /** 812 * Rendering output for the component that will be sent as part of the 813 * response (can contain static text and HTML) 814 * 815 * @return String render output 816 */ 817 String getRenderedHtmlOutput(); 818 819 /** 820 * Setter for the component's render output 821 * 822 * @param renderOutput 823 */ 824 void setRenderedHtmlOutput(String renderOutput); 825 826 /** 827 * Disables the storage of the component in session (when the framework determines it needs to be due to a 828 * refresh condition) 829 * 830 * <p> 831 * When the framework determines there is a condition on the component that requires it to keep around between 832 * posts, it will store the component instance in session. This flag can be set to disable this behavior (which 833 * would require custom application logic to support behavior such as refresh) 834 * </p> 835 * 836 * @return boolean true if the component should not be stored in session, false if session storage is allowed 837 */ 838 boolean isDisableSessionPersistence(); 839 840 /** 841 * Setter for disabling storage of the component in session 842 * 843 * @param disableSessionPersistence 844 */ 845 void setDisableSessionPersistence(boolean disableSessionPersistence); 846 847 /** 848 * Indicates whether the component should be stored with the session view regardless of configuration 849 * 850 * <p> 851 * By default the framework nulls out any components that do not have a refresh condition or are needed for 852 * collection processing. This can be a problem if custom application code is written to refresh a component 853 * without setting the corresponding component flag. In this case this property can be set to true to force the 854 * framework to keep the component in session. Defaults to false 855 * </p> 856 * 857 * @return boolean true if the component should be stored in session, false if not 858 */ 859 boolean isForceSessionPersistence(); 860 861 /** 862 * Setter for the indicator to force persistence of the component in session 863 * 864 * @param persistInSession 865 */ 866 void setForceSessionPersistence(boolean persistInSession); 867 868 /** 869 * Security object that indicates what authorization (permissions) exist for the component 870 * 871 * @return ComponentSecurity instance 872 */ 873 ComponentSecurity getComponentSecurity(); 874 875 /** 876 * Setter for the components security object 877 * 878 * @param componentSecurity 879 */ 880 void setComponentSecurity(ComponentSecurity componentSecurity); 881 882 /** 883 * Spring EL expression, which when evaluates to true, makes this component visible 884 * 885 * @return the SpEl expression string 886 */ 887 String getProgressiveRender(); 888 889 /** 890 * Setter for progressiveRender Spring EL expression 891 * 892 * @param progressiveRender the progressiveRender to set 893 */ 894 void setProgressiveRender(String progressiveRender); 895 896 /** 897 * Spring EL expression, which when evaluates to true, causes this component to be refreshed 898 * 899 * @return the SpEl expression string 900 */ 901 String getConditionalRefresh(); 902 903 /** 904 * Setter for conditionalRefresh Spring EL expression 905 * 906 * @param conditionalRefresh the conditionalRefresh to set 907 */ 908 void setConditionalRefresh(String conditionalRefresh); 909 910 /** 911 * List of control names (ids) extracted from {@link #getProgressiveRender()} 912 * 913 * @return the list of control names 914 */ 915 List<String> getProgressiveDisclosureControlNames(); 916 917 /** 918 * A JavaScript expression constructed from {@link #getConditionalRefresh()} 919 * 920 * <p>The script can be executed on the client to determine if the original exp was satisfied before 921 * interacting with the server.</p> 922 * 923 * @return the JS script 924 */ 925 String getProgressiveDisclosureConditionJs(); 926 927 /** 928 * A JavaScript expression constructed from {@link #getProgressiveRender()} 929 * 930 * <p>The script can be executed on the client to determine if the original exp was satisfied before 931 * interacting with the server.</p> 932 * 933 * @return the JS script 934 */ 935 String getConditionalRefreshConditionJs(); 936 937 /** 938 * The list of control names (ids) extracted from {@link #getConditionalRefresh()} 939 * 940 * @return the list of control names 941 */ 942 List<String> getConditionalRefreshControlNames(); 943 944 /** 945 * Indicates whether the component will be stored on the client, but hidden, after the first retrieval 946 * 947 * <p> 948 * The component will not be rendered hidden after first retrieval if this flag is set to true. The component will 949 * then be fetched via an ajax call when it should be rendered. 950 * </p> 951 * 952 * @return the progressiveRenderViaAJAX 953 */ 954 boolean isProgressiveRenderViaAJAX(); 955 956 /** 957 * Setter for the progressiveRenderViaAJAX flag 958 * 959 * @param progressiveRenderViaAJAX the progressiveRenderViaAJAX to set 960 */ 961 void setProgressiveRenderViaAJAX(boolean progressiveRenderViaAJAX); 962 963 /** 964 * Determines whether the component will always be retrieved from the server and shown 965 * 966 * <p> 967 * If true, when the progressiveRender condition is satisfied, the component 968 * will always be retrieved from the server and shown(as opposed to being 969 * stored on the client, but hidden, after the first retrieval as is the 970 * case with the progressiveRenderViaAJAX option). <b>By default, this is 971 * false, so components with progressive render capabilities will always be 972 * already within the client html and toggled to be hidden or visible.</b> </p> 973 * 974 * @return the progressiveRenderAndRefresh 975 */ 976 boolean isProgressiveRenderAndRefresh(); 977 978 /** 979 * Setter for the progressiveRenderAndRefresh flag 980 * 981 * @param progressiveRenderAndRefresh the progressiveRenderAndRefresh to set 982 */ 983 void setProgressiveRenderAndRefresh(boolean progressiveRenderAndRefresh); 984 985 /** 986 * Specifies a property by name that when its value changes will automatically perform 987 * a refresh on this component 988 * 989 * <p> 990 * This can be a comma 991 * separated list of multiple properties that require this component to be 992 * refreshed when any of them change. <Br>DO NOT use with progressiveRender 993 * unless it is know that progressiveRender condition will always be 994 * satisfied before one of these fields can be changed. 995 * </p> 996 * 997 * @return List property names that should trigger a refresh when their values change 998 */ 999 List<String> getRefreshWhenChangedPropertyNames(); 1000 1001 /** 1002 * Setter for the list of property names that trigger a refresh 1003 * 1004 * @param refreshWhenChangedPropertyNames 1005 */ 1006 void setRefreshWhenChangedPropertyNames(List<String> refreshWhenChangedPropertyNames); 1007 1008 /** 1009 * Returns a list of componentIds which will be also be refreshed when this component is refreshed 1010 * 1011 * <p> 1012 * This will be a comma separated list of componentIds that need to be refreshed when a refresh 1013 * condition has been set on this component. 1014 * </p> 1015 * 1016 * @return List<String> 1017 */ 1018 public List<String> getAdditionalComponentsToRefresh(); 1019 1020 /** 1021 * Setter for alsoRefreshComponents 1022 * 1023 * @param additionalComponentsToRefresh 1024 */ 1025 public void setAdditionalComponentsToRefresh(List<String> additionalComponentsToRefresh); 1026 1027 /** 1028 * Returns a string for representing the list of additional components to be refreshed as 1029 * a JavaScript value 1030 * 1031 * @return String representation of the list of componentIds for the components that need to be refreshed 1032 */ 1033 public String getAdditionalComponentsToRefreshJs(); 1034 1035 /** 1036 * Indicates the component can be refreshed by an action 1037 * 1038 * <p> 1039 * This is set by the framework for configured ajax action buttons, should not be set in 1040 * configuration 1041 * </p> 1042 * 1043 * @return boolean true if the component is refreshed by an action, false if not 1044 */ 1045 boolean isRefreshedByAction(); 1046 1047 /** 1048 * Setter for the refreshed by action indicator 1049 * 1050 * <p> 1051 * This is set by the framework for configured ajax action buttons, should not be set in 1052 * configuration 1053 * </p> 1054 * 1055 * @param refreshedByAction 1056 */ 1057 void setRefreshedByAction(boolean refreshedByAction); 1058 1059 /** 1060 * If true if this component is disclosed by an action in js, a placeholder will be put in this components place 1061 * if render is also false. 1062 * 1063 * @return true if this component is disclosed by an action 1064 */ 1065 public boolean isDisclosedByAction(); 1066 1067 /** 1068 * Set if this component is disclosed by some outside action 1069 * 1070 * @param disclosedByAction 1071 */ 1072 public void setDisclosedByAction(boolean disclosedByAction); 1073 1074 /** 1075 * Indicates whether data contained within the component should be reset (set to default) when the 1076 * component is refreshed 1077 * 1078 * @return boolean true if data should be refreshed, false if data should remain as is 1079 */ 1080 boolean isResetDataOnRefresh(); 1081 1082 /** 1083 * Setter for the reset data on refresh indicator 1084 * 1085 * @param resetDataOnRefresh 1086 */ 1087 void setResetDataOnRefresh(boolean resetDataOnRefresh); 1088 1089 /** 1090 * Time in seconds after which the component is automatically refreshed 1091 * 1092 * @return time in seconds 1093 */ 1094 int getRefreshTimer(); 1095 1096 /** 1097 * Setter for refreshTimer 1098 * 1099 * @param refreshTimer 1100 */ 1101 void setRefreshTimer(int refreshTimer); 1102 1103 /** 1104 * The DataAttributes that will be written to the html element for this component as data- 1105 * 1106 * <p>They can be access through .data() call in jQuery.</p> 1107 * 1108 * @return map of data attributes, where key is data attribute name and the map value is the data 1109 * attribute value 1110 */ 1111 Map<String, String> getDataAttributes(); 1112 1113 /** 1114 * Setter for data attributes to include for the component 1115 * 1116 * @param dataAttributes 1117 */ 1118 void setDataAttributes(Map<String, String> dataAttributes); 1119 1120 /** 1121 * Setter for script data attributes to include for the component 1122 * 1123 * @param dataAttributes 1124 */ 1125 void setScriptDataAttributes(Map<String, String> dataAttributes); 1126 1127 /** 1128 * The DataAttributes that will be written to the html as a script call to data for this component (these cannot be 1129 * used for jQuery selection directly) 1130 * 1131 * <p>They can be accessed through .data() call in jQuery.</p> 1132 * 1133 * @return map of data attributes, where key is data attribute name and the map value is the data 1134 * attribute value 1135 */ 1136 Map<String, String> getScriptDataAttributes(); 1137 1138 /** 1139 * Add a data attribute to the dataAttributes map 1140 * 1141 * @param key 1142 * @param value 1143 */ 1144 void addDataAttribute(String key, String value); 1145 1146 /** 1147 * Add a script data attribute to the scriptDataAttributes map 1148 * 1149 * @param key 1150 * @param value 1151 */ 1152 void addScriptDataAttribute(String key, String value); 1153 1154 /** 1155 * The string that can be put into a the tag of a component to add data attributes inline 1156 * 1157 * @return html string for data attributes as html formatted element attributes 1158 */ 1159 String getSimpleDataAttributes(); 1160 1161 /** 1162 * Returns a js string that can be used to right js data attributes to for the component 1163 * 1164 * @return html string for the js required to add the script data attributes 1165 */ 1166 String getScriptDataAttributesJs(); 1167 1168 /** 1169 * The role attribute of this component, use to define aria roles 1170 * 1171 * @return the role attribute 1172 */ 1173 String getRole(); 1174 1175 /** 1176 * @see Component#getRole() 1177 */ 1178 void setRole(String role); 1179 1180 /** 1181 * The aria attributes of this component and their values 1182 * (without "aria-", this is automatically appended during rendering) 1183 * 1184 * @return the aria attributes of this component 1185 */ 1186 Map<String, String> getAriaAttributes(); 1187 1188 /** 1189 * @see org.kuali.rice.krad.uif.component.Component#getAriaAttributes() 1190 */ 1191 void setAriaAttributes(Map<String, String> ariaAttributes); 1192 1193 /** 1194 * Add an aria attribute to the ariaAttributes list 1195 * 1196 * @param key the attribute (no "aria-" prefix) 1197 * @param value the attribute's value 1198 */ 1199 void addAriaAttribute(String key, String value); 1200 1201 /** 1202 * Get the aria attributes as a String that can be used during template output 1203 * 1204 * @return the aria attributes as a string 1205 */ 1206 String getAriaAttributesAsString(); 1207 1208 /** 1209 * Validates different requirements of component compiling a series of reports detailing information on errors 1210 * found in the component. Used by the RiceDictionaryValidator. 1211 * 1212 * @param tracer Record of component's location 1213 */ 1214 void completeValidation(ValidationTrace tracer); 1215 1216 /** 1217 * Raw html or string content to render before this component renders 1218 * 1219 * @return the preRenderContent string 1220 */ 1221 public String getPreRenderContent(); 1222 1223 /** 1224 * Set the preRenderContent 1225 * 1226 * @param preRenderContent 1227 */ 1228 public void setPreRenderContent(String preRenderContent); 1229 1230 /** 1231 * Raw html or string content to render after this component renders 1232 * 1233 * @return the postRenderContent string 1234 */ 1235 public String getPostRenderContent(); 1236 1237 /** 1238 * Set the postRenderContent 1239 * 1240 * @param postRenderContent 1241 */ 1242 public void setPostRenderContent(String postRenderContent); 1243 1244 /** 1245 * Gets the method to call on refresh. 1246 * 1247 * @return method to call 1248 */ 1249 String getMethodToCallOnRefresh(); 1250 1251 /** 1252 * Gets a string representing all CSS style classes. 1253 * 1254 * @return string representation of CSS classes 1255 */ 1256 String getStyleClassesAsString(); 1257 1258 }