Coverage Report - org.kuali.rice.krad.uif.container.CollectionGroup
 
Classes in this File Line Coverage Branch Coverage Complexity
CollectionGroup
0%
0/128
0%
0/48
1.619
 
 1  
 /*
 2  
  * Copyright 2007 The Kuali Foundation Licensed under the Educational Community
 3  
  * License, Version 1.0 (the "License"); you may not use this file except in
 4  
  * compliance with the License. You may obtain a copy of the License at
 5  
  * http://www.opensource.org/licenses/ecl1.php Unless required by applicable law
 6  
  * or agreed to in writing, software distributed under the License is
 7  
  * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 8  
  * KIND, either express or implied. See the License for the specific language
 9  
  * governing permissions and limitations under the License.
 10  
  */
 11  
 package org.kuali.rice.krad.uif.container;
 12  
 
 13  
 import java.util.ArrayList;
 14  
 import java.util.List;
 15  
 
 16  
 import org.apache.commons.lang.StringUtils;
 17  
 import org.kuali.rice.core.api.mo.common.active.Inactivatable;
 18  
 import org.kuali.rice.krad.uif.UifConstants;
 19  
 import org.kuali.rice.krad.uif.UifParameters;
 20  
 import org.kuali.rice.krad.uif.core.ActiveCollectionFilter;
 21  
 import org.kuali.rice.krad.uif.core.BindingInfo;
 22  
 import org.kuali.rice.krad.uif.core.CollectionFilter;
 23  
 import org.kuali.rice.krad.uif.core.Component;
 24  
 import org.kuali.rice.krad.uif.core.DataBinding;
 25  
 import org.kuali.rice.krad.uif.field.ActionField;
 26  
 import org.kuali.rice.krad.uif.field.AttributeField;
 27  
 import org.kuali.rice.krad.uif.field.Field;
 28  
 import org.kuali.rice.krad.uif.field.LabelField;
 29  
 import org.kuali.rice.krad.uif.util.ComponentUtils;
 30  
 
 31  
 /**
 32  
  * Group that holds a collection of objects and configuration for presenting the
 33  
  * collection in the UI. Supports functionality such as add line, line actions,
 34  
  * and nested collections.
 35  
  * 
 36  
  * <p>
 37  
  * Note the standard header/footer can be used to give a header to the
 38  
  * collection as a whole, or to provide actions that apply to the entire
 39  
  * collection
 40  
  * </p>
 41  
  * 
 42  
  * <p>
 43  
  * For binding purposes the binding path of each row field is indexed. The name
 44  
  * property inherited from <code>ComponentBase</code> is used as the collection
 45  
  * name. The collectionObjectClass property is used to lookup attributes from
 46  
  * the data dictionary.
 47  
  * </p>
 48  
  *
 49  
  * @author Kuali Rice Team (rice.collab@kuali.org)
 50  
  */
 51  
 public class CollectionGroup extends Group implements DataBinding {
 52  
     private static final long serialVersionUID = -6496712566071542452L;
 53  
 
 54  
     private Class<?> collectionObjectClass;
 55  
 
 56  
     private String propertyName;
 57  
     private BindingInfo bindingInfo;
 58  
 
 59  
     private boolean renderAddLine;
 60  
     private String addLinePropertyName;
 61  
     private BindingInfo addLineBindingInfo;
 62  
     private LabelField addLineLabelField;
 63  
     private List<? extends Field> addLineFields;
 64  
     private List<ActionField> addLineActionFields;
 65  
 
 66  
     private boolean renderLineActions;
 67  
     private List<ActionField> actionFields;
 68  
 
 69  
     private boolean showHideInactiveButton;
 70  
     private boolean showInactive;
 71  
     private CollectionFilter activeCollectionFilter;
 72  
 
 73  
     private List<CollectionGroup> subCollections;
 74  
 
 75  
     private CollectionGroupBuilder collectionGroupBuilder;
 76  
 
 77  0
     public CollectionGroup() {
 78  0
         renderAddLine = true;
 79  0
         renderLineActions = true;
 80  0
         showInactive = false;
 81  0
         showHideInactiveButton = true;
 82  
 
 83  0
         actionFields = new ArrayList<ActionField>();
 84  0
         addLineFields = new ArrayList<Field>();
 85  0
         addLineActionFields = new ArrayList<ActionField>();
 86  0
         subCollections = new ArrayList<CollectionGroup>();
 87  0
     }
 88  
 
 89  
     /**
 90  
      * The following actions are performed:
 91  
      *
 92  
      * <ul>
 93  
      * <li>Set fieldBindModelPath to the collection model path (since the fields
 94  
      * have to belong to the same model as the collection)</li>
 95  
      * <li>Set defaults for binding</li>
 96  
      * <li>Default add line field list to groups items list</li>
 97  
      * <li>Sets default active collection filter if not set</li>
 98  
      * <li>Sets the dictionary entry (if blank) on each of the items to the
 99  
      * collection class</li>
 100  
      * </ul>
 101  
      *
 102  
      * @see org.kuali.rice.krad.uif.core.ComponentBase#performInitialization(org.kuali.rice.krad.uif.container.View)
 103  
      */
 104  
     @Override
 105  
     public void performInitialization(View view) {
 106  0
         setFieldBindingObjectPath(getBindingInfo().getBindingObjectPath());
 107  
 
 108  0
         super.performInitialization(view);
 109  
 
 110  0
         if (bindingInfo != null) {
 111  0
             bindingInfo.setDefaults(view, getPropertyName());
 112  
         }
 113  
 
 114  0
         if (addLineBindingInfo != null) {
 115  
             // add line binds to model property
 116  0
             if (StringUtils.isNotBlank(addLinePropertyName)) {
 117  0
                 addLineBindingInfo.setDefaults(view, getPropertyName());
 118  0
                 addLineBindingInfo.setBindingName(addLinePropertyName);
 119  0
                 if (StringUtils.isNotBlank(getFieldBindByNamePrefix())) {
 120  0
                     addLineBindingInfo.setBindByNamePrefix(getFieldBindByNamePrefix());
 121  
                 }
 122  
             }
 123  
         }
 124  
 
 125  0
         for (Component item : getItems()) {
 126  0
             if (item instanceof AttributeField) {
 127  0
                 AttributeField field = (AttributeField) item;
 128  
 
 129  0
                 if (StringUtils.isBlank(field.getDictionaryObjectEntry())) {
 130  0
                     field.setDictionaryObjectEntry(collectionObjectClass.getName());
 131  
                 }
 132  0
             }
 133  
         }
 134  
         
 135  0
         if ((addLineFields == null) || addLineFields.isEmpty()) {
 136  0
             addLineFields = getItems();
 137  
         }
 138  
 
 139  
         // if active collection filter not set use default
 140  0
         if (this.activeCollectionFilter == null) {
 141  0
             activeCollectionFilter = new ActiveCollectionFilter();
 142  
         }
 143  
         
 144  
         // set static collection path on items
 145  0
         String collectionPath = "";
 146  0
         if (StringUtils.isNotBlank(getBindingInfo().getCollectionPath())) {
 147  0
             collectionPath += getBindingInfo().getCollectionPath() + ".";
 148  
         }
 149  0
         if (StringUtils.isNotBlank(getBindingInfo().getBindByNamePrefix())) {
 150  0
             collectionPath += getBindingInfo().getBindByNamePrefix() + ".";
 151  
         }
 152  0
         collectionPath += getBindingInfo().getBindingName();
 153  
         
 154  0
         List<AttributeField> collectionFields = ComponentUtils.getComponentsOfTypeDeep(getItems(), AttributeField.class);
 155  0
         for (AttributeField collectionField : collectionFields) {
 156  0
             collectionField.getBindingInfo().setCollectionPath(collectionPath);
 157  
         }
 158  
         
 159  0
         for (CollectionGroup collectionGroup : getSubCollections()) {
 160  0
             collectionGroup.getBindingInfo().setCollectionPath(collectionPath);
 161  0
             view.getViewHelperService().performComponentInitialization(view, collectionGroup);
 162  
         }
 163  
         
 164  
         // add collection entry to abstract classes
 165  0
         if (!view.getAbstractTypeClasses().containsKey(collectionPath)) {
 166  0
             view.getAbstractTypeClasses().put(collectionPath, getCollectionObjectClass());
 167  
         }
 168  
 
 169  
         // initialize container items and sub-collections (since they are not in
 170  
         // child list)
 171  0
         for (Component item : getItems()) {
 172  0
             view.getViewHelperService().performComponentInitialization(view, item);
 173  
         }
 174  0
     }
 175  
 
 176  
     /**
 177  
      * Calls the configured <code>CollectionGroupBuilder</code> to build the
 178  
      * necessary components based on the collection data
 179  
      * 
 180  
      * @see org.kuali.rice.krad.uif.container.ContainerBase#performApplyModel(org.kuali.rice.krad.uif.container.View,
 181  
      *      java.lang.Object)
 182  
      */
 183  
     @Override
 184  
     public void performApplyModel(View view, Object model, Component parent) {
 185  0
         super.performApplyModel(view, model, parent);
 186  
 
 187  0
         pushCollectionGroupToReference();
 188  
 
 189  0
         getCollectionGroupBuilder().build(view, model, this);
 190  
 
 191  
         // TODO: is this necessary to call again?
 192  0
         pushCollectionGroupToReference();
 193  0
     }
 194  
 
 195  
     /**
 196  
      * Sets a reference in the context map for all nested components to the collection group
 197  
      * instance, and sets name as parameter for an action fields in the group
 198  
      */
 199  
     protected void pushCollectionGroupToReference() {
 200  0
         List<Component> components = this.getNestedComponents();
 201  
         
 202  0
         ComponentUtils
 203  
                 .pushObjectToContext(components, UifConstants.ContextVariableNames.COLLECTION_GROUP,
 204  
                         this);
 205  
 
 206  0
         List<ActionField> actionFields =
 207  
                 ComponentUtils.getComponentsOfTypeDeep(components, ActionField.class);
 208  0
         for (ActionField actionField : actionFields) {
 209  0
             actionField.addActionParameter(UifParameters.SELLECTED_COLLECTION_PATH,
 210  
                     this.getBindingInfo().getBindingPath());
 211  
         }
 212  0
     }
 213  
 
 214  
     /**
 215  
      * Performs any filtering necessary on the collection before building the collection fields
 216  
      *
 217  
      * <p>
 218  
      * If showInactive is set to false and the collection line type implements <code>Inactivatable</code>,
 219  
      * invokes the active collection filer
 220  
      * </p>
 221  
      *
 222  
      * @param model - object containing the views data, from which the collection will be pulled
 223  
      */
 224  
     protected List<Integer> performCollectionFiltering(View view, Object model) {
 225  0
         if (Inactivatable.class.isAssignableFrom(this.collectionObjectClass) && !showInactive) {
 226  0
             return this.activeCollectionFilter.filter(view, model, this);
 227  
         }else{
 228  0
             return null;
 229  
         }
 230  
     }
 231  
 
 232  
     /**
 233  
      * New collection lines are handled in the framework by maintaining a map on
 234  
      * the form. The map contains as a key the collection name, and as value an
 235  
      * instance of the collection type. An entry is created here for the
 236  
      * collection represented by the <code>CollectionGroup</code> if an instance
 237  
      * is not available (clearExistingLine will force a new instance). The given
 238  
      * model must be a subclass of <code>UifFormBase</code> in order to find the
 239  
      * Map.
 240  
      * 
 241  
      * @param model
 242  
      *            - Model instance that contains the new collection lines Map
 243  
      * @param clearExistingLine
 244  
      *            - boolean that indicates whether the line should be set to a
 245  
      *            new instance if it already exists
 246  
      */
 247  
     public void initializeNewCollectionLine(View view, Object model, CollectionGroup collectionGroup,
 248  
             boolean clearExistingLine) {
 249  0
         getCollectionGroupBuilder().initializeNewCollectionLine(view, model, collectionGroup, clearExistingLine);
 250  0
     }
 251  
 
 252  
     /**
 253  
      * @see org.kuali.rice.krad.uif.container.ContainerBase#getNestedComponents()
 254  
      */
 255  
     @Override
 256  
     public List<Component> getNestedComponents() {
 257  0
         List<Component> components = super.getNestedComponents();
 258  
 
 259  0
         components.add(addLineLabelField);
 260  0
         components.addAll(actionFields);
 261  0
         components.addAll(addLineActionFields);
 262  
 
 263  
         // remove the containers items because we don't want them as children
 264  
         // (they will become children of the layout manager as the rows are
 265  
         // created)
 266  
         // TODO: is this necessary?
 267  0
         for (Component item : getItems()) {
 268  0
             if (components.contains(item)) {
 269  0
                 components.remove(item);
 270  
             }
 271  
         }
 272  
 
 273  0
         return components;
 274  
     }
 275  
 
 276  
     /**
 277  
      * Object class the collection maintains. Used to get dictionary information
 278  
      * in addition to creating new instances for the collection when necessary
 279  
      * 
 280  
      * @return Class<?> collection object class
 281  
      */
 282  
     public Class<?> getCollectionObjectClass() {
 283  0
         return this.collectionObjectClass;
 284  
     }
 285  
 
 286  
     /**
 287  
      * Setter for the collection object class
 288  
      * 
 289  
      * @param collectionObjectClass
 290  
      */
 291  
     public void setCollectionObjectClass(Class<?> collectionObjectClass) {
 292  0
         this.collectionObjectClass = collectionObjectClass;
 293  0
     }
 294  
 
 295  
     /**
 296  
      * @see org.kuali.rice.krad.uif.core.DataBinding#getPropertyName()
 297  
      */
 298  
     public String getPropertyName() {
 299  0
         return this.propertyName;
 300  
     }
 301  
 
 302  
     /**
 303  
      * Setter for the collections property name
 304  
      * 
 305  
      * @param propertyName
 306  
      */
 307  
     public void setPropertyName(String propertyName) {
 308  0
         this.propertyName = propertyName;
 309  0
     }
 310  
 
 311  
     /**
 312  
      * Determines the binding path for the collection. Used to get the
 313  
      * collection value from the model in addition to setting the binding path
 314  
      * for the collection attributes
 315  
      * 
 316  
      * @see org.kuali.rice.krad.uif.core.DataBinding#getBindingInfo()
 317  
      */
 318  
     public BindingInfo getBindingInfo() {
 319  0
         return this.bindingInfo;
 320  
     }
 321  
 
 322  
     /**
 323  
      * Setter for the binding info instance
 324  
      * 
 325  
      * @param bindingInfo
 326  
      */
 327  
     public void setBindingInfo(BindingInfo bindingInfo) {
 328  0
         this.bindingInfo = bindingInfo;
 329  0
     }
 330  
 
 331  
     /**
 332  
      * Action fields that should be rendered for each collection line. Example
 333  
      * line action is the delete action
 334  
      * 
 335  
      * @return List<ActionField> line action fields
 336  
      */
 337  
     public List<ActionField> getActionFields() {
 338  0
         return this.actionFields;
 339  
     }
 340  
 
 341  
     /**
 342  
      * Setter for the line action fields list
 343  
      * 
 344  
      * @param actionFields
 345  
      */
 346  
     public void setActionFields(List<ActionField> actionFields) {
 347  0
         this.actionFields = actionFields;
 348  0
     }
 349  
 
 350  
     /**
 351  
      * Indicates whether the action column for the collection should be rendered
 352  
      * 
 353  
      * @return boolean true if the actions should be rendered, false if not
 354  
      * @see #getActionFields()
 355  
      */
 356  
     public boolean isRenderLineActions() {
 357  0
         return this.renderLineActions;
 358  
     }
 359  
 
 360  
     /**
 361  
      * Setter for the render line actions indicator
 362  
      * 
 363  
      * @param renderLineActions
 364  
      */
 365  
     public void setRenderLineActions(boolean renderLineActions) {
 366  0
         this.renderLineActions = renderLineActions;
 367  0
     }
 368  
 
 369  
     /**
 370  
      * Indicates whether an add line should be rendered for the collection
 371  
      * 
 372  
      * @return boolean true if add line should be rendered, false if it should
 373  
      *         not be
 374  
      */
 375  
     public boolean isRenderAddLine() {
 376  0
         return this.renderAddLine;
 377  
     }
 378  
 
 379  
     /**
 380  
      * Setter for the render add line indicator
 381  
      * 
 382  
      * @param renderAddLine
 383  
      */
 384  
     public void setRenderAddLine(boolean renderAddLine) {
 385  0
         this.renderAddLine = renderAddLine;
 386  0
     }
 387  
 
 388  
     /**
 389  
      * Convenience getter for the add line label field text. The text is used to
 390  
      * label the add line when rendered and its placement depends on the
 391  
      * <code>LayoutManager</code>.
 392  
      * <p>
 393  
      * For the <code>TableLayoutManager</code> the label appears in the sequence
 394  
      * column to the left of the add line fields. For the
 395  
      * <code>StackedLayoutManager</code> the label is placed into the group
 396  
      * header for the line.
 397  
      * </p>
 398  
      * 
 399  
      * @return String add line label
 400  
      */
 401  
     public String getAddLineLabel() {
 402  0
         if (getAddLineLabelField() != null) {
 403  0
             return getAddLineLabelField().getLabelText();
 404  
         }
 405  
 
 406  0
         return null;
 407  
     }
 408  
 
 409  
     /**
 410  
      * Setter for the add line label text
 411  
      * 
 412  
      * @param addLineLabel
 413  
      */
 414  
     public void setAddLineLabel(String addLineLabel) {
 415  0
         if (getAddLineLabelField() != null) {
 416  0
             getAddLineLabelField().setLabelText(addLineLabel);
 417  
         }
 418  0
     }
 419  
 
 420  
     /**
 421  
      * <code>LabelField</code> instance for the add line label
 422  
      * 
 423  
      * @return LabelField add line label field
 424  
      * @see #getAddLineLabel()
 425  
      */
 426  
     public LabelField getAddLineLabelField() {
 427  0
         return this.addLineLabelField;
 428  
     }
 429  
 
 430  
     /**
 431  
      * Setter for the <code>LabelField</code> instance for the add line label
 432  
      * 
 433  
      * @param addLineLabelField
 434  
      * @see #getAddLineLabel()
 435  
      */
 436  
     public void setAddLineLabelField(LabelField addLineLabelField) {
 437  0
         this.addLineLabelField = addLineLabelField;
 438  0
     }
 439  
 
 440  
     /**
 441  
      * Name of the property that contains an instance for the add line. If set
 442  
      * this is used with the binding info to create the path to the add line.
 443  
      * Can be left blank in which case the framework will manage the add line
 444  
      * instance in a generic map.
 445  
      * 
 446  
      * @return String add line property name
 447  
      */
 448  
     public String getAddLinePropertyName() {
 449  0
         return this.addLinePropertyName;
 450  
     }
 451  
 
 452  
     /**
 453  
      * Setter for the add line property name
 454  
      * 
 455  
      * @param addLinePropertyName
 456  
      */
 457  
     public void setAddLinePropertyName(String addLinePropertyName) {
 458  0
         this.addLinePropertyName = addLinePropertyName;
 459  0
     }
 460  
 
 461  
     /**
 462  
      * <code>BindingInfo</code> instance for the add line property used to
 463  
      * determine the full binding path. If add line name given
 464  
      * {@link #getAddLineLabel()} then it is set as the binding name on the
 465  
      * binding info. Add line label and binding info are not required, in which
 466  
      * case the framework will manage the new add line instances through a
 467  
      * generic map (model must extend UifFormBase)
 468  
      * 
 469  
      * @return BindingInfo add line binding info
 470  
      */
 471  
     public BindingInfo getAddLineBindingInfo() {
 472  0
         return this.addLineBindingInfo;
 473  
     }
 474  
 
 475  
     /**
 476  
      * Setter for the add line binding info
 477  
      * 
 478  
      * @param addLineBindingInfo
 479  
      */
 480  
     public void setAddLineBindingInfo(BindingInfo addLineBindingInfo) {
 481  0
         this.addLineBindingInfo = addLineBindingInfo;
 482  0
     }
 483  
 
 484  
     /**
 485  
      * List of <code>Field</code> instances that should be rendered for the
 486  
      * collection add line (if enabled). If not set, the default group's items
 487  
      * list will be used
 488  
      * 
 489  
      * @return List<? extends Field> add line field list
 490  
      */
 491  
     public List<? extends Field> getAddLineFields() {
 492  0
         return this.addLineFields;
 493  
     }
 494  
 
 495  
     /**
 496  
      * Setter for the add line field list
 497  
      * 
 498  
      * @param addLineFields
 499  
      */
 500  
     public void setAddLineFields(List<? extends Field> addLineFields) {
 501  0
         this.addLineFields = addLineFields;
 502  0
     }
 503  
 
 504  
     /**
 505  
      * Action fields that should be rendered for the add line. This is generally
 506  
      * the add action (button) but can be configured to contain additional
 507  
      * actions
 508  
      * 
 509  
      * @return List<ActionField> add line action fields
 510  
      */
 511  
     public List<ActionField> getAddLineActionFields() {
 512  0
         return this.addLineActionFields;
 513  
     }
 514  
 
 515  
     /**
 516  
      * Setter for the add line action fields
 517  
      * 
 518  
      * @param addLineActionFields
 519  
      */
 520  
     public void setAddLineActionFields(List<ActionField> addLineActionFields) {
 521  0
         this.addLineActionFields = addLineActionFields;
 522  0
     }
 523  
 
 524  
     /**
 525  
      * Indicates whether inactive collections lines should be displayed
 526  
      *
 527  
      * <p>
 528  
      * Setting only applies when the collection line type implements the
 529  
      * <code>Inactivatable</code> interface. If true and showInactive is
 530  
      * set to false, the collection will be filtered to remove any items
 531  
      * whose active status returns false
 532  
      * </p>
 533  
      *
 534  
      * @return boolean true to show inactive records, false to not render inactive records
 535  
      */
 536  
     public boolean isShowInactive() {
 537  0
         return showInactive;
 538  
     }
 539  
 
 540  
     /**
 541  
      * Setter for the show inactive indicator
 542  
      *
 543  
      * @param boolean show inactive
 544  
      */
 545  
     public void setShowInactive(boolean showInactive) {
 546  0
         this.showInactive = showInactive;
 547  0
     }
 548  
 
 549  
     /**
 550  
      * Collection filter instance for filtering the collection data when the
 551  
      * showInactive flag is set to false
 552  
      *
 553  
      * @return CollectionFilter
 554  
      */
 555  
     public CollectionFilter getActiveCollectionFilter() {
 556  0
         return activeCollectionFilter;
 557  
     }
 558  
 
 559  
     /**
 560  
      * Setter for the collection filter to use for filter inactive records from the
 561  
      * collection
 562  
      *
 563  
      * @param activeCollectionFilter - CollectionFilter instance
 564  
      */
 565  
     public void setActiveCollectionFilter(CollectionFilter activeCollectionFilter) {
 566  0
         this.activeCollectionFilter = activeCollectionFilter;
 567  0
     }
 568  
 
 569  
     /**
 570  
      * List of <code>CollectionGroup</code> instances that are sub-collections
 571  
      * of the collection represented by this collection group
 572  
      * 
 573  
      * @return List<CollectionGroup> sub collections
 574  
      */
 575  
     public List<CollectionGroup> getSubCollections() {
 576  0
         return this.subCollections;
 577  
     }
 578  
 
 579  
     /**
 580  
      * Setter for the sub collection list
 581  
      * 
 582  
      * @param subCollections
 583  
      */
 584  
     public void setSubCollections(List<CollectionGroup> subCollections) {
 585  0
         this.subCollections = subCollections;
 586  0
     }
 587  
 
 588  
     /**
 589  
      * <code>CollectionGroupBuilder</code> instance that will build the
 590  
      * components dynamically for the collection instance
 591  
      * 
 592  
      * @return CollectionGroupBuilder instance
 593  
      */
 594  
     public CollectionGroupBuilder getCollectionGroupBuilder() {
 595  0
         if (this.collectionGroupBuilder == null) {
 596  0
             this.collectionGroupBuilder = new CollectionGroupBuilder();
 597  
         }
 598  0
         return this.collectionGroupBuilder;
 599  
     }
 600  
 
 601  
     /**
 602  
      * Setter for the collection group building instance
 603  
      * 
 604  
      * @param collectionGroupBuilder
 605  
      */
 606  
     public void setCollectionGroupBuilder(CollectionGroupBuilder collectionGroupBuilder) {
 607  0
         this.collectionGroupBuilder = collectionGroupBuilder;
 608  0
     }
 609  
 
 610  
     /**
 611  
      * @see org.kuali.rice.krad.uif.container.ContainerBase#getItems()
 612  
      */
 613  
     @SuppressWarnings("unchecked")
 614  
     @Override
 615  
     public List<? extends Field> getItems() {
 616  0
         return (List<? extends Field>) super.getItems();
 617  
     }
 618  
 
 619  
     /**
 620  
      * @param showHideInactiveButton the showHideInactiveButton to set
 621  
      */
 622  
     public void setShowHideInactiveButton(boolean showHideInactiveButton) {
 623  0
         this.showHideInactiveButton = showHideInactiveButton;
 624  0
     }
 625  
 
 626  
     /**
 627  
      * @return the showHideInactiveButton
 628  
      */
 629  
     public boolean isShowHideInactiveButton() {
 630  0
         return showHideInactiveButton;
 631  
     }
 632  
 
 633  
 }