View Javadoc
1   /**
2    * Copyright 2005-2016 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.layout;
17  
18  import org.kuali.rice.krad.uif.container.CollectionGroup;
19  import org.kuali.rice.krad.uif.container.Group;
20  import org.kuali.rice.krad.uif.container.collections.LineBuilderContext;
21  import org.kuali.rice.krad.uif.field.Field;
22  import org.kuali.rice.krad.uif.field.FieldGroup;
23  import org.kuali.rice.krad.uif.element.Pager;
24  
25  /**
26   * Layout manager implementations that work with a collection (such as a table layout) should implement
27   * this interface for building the collection component instances.
28   *
29   * <p>Unlike other group instances, collection group instances need to generate new instances of the
30   * configured components for each line of the collection. The field instances for each line
31   * are wrapped differently depending on what layout manager is being applied. Therefore as the collection lines
32   * are being built (during the applyModel phase) this method will be invoked on the manager so that it may
33   * setup the line as needed.</p>
34   *
35   * @author Kuali Rice Team (rice.collab@kuali.org)
36   * @see org.kuali.rice.krad.uif.container.CollectionGroupBuilder
37   */
38  public interface CollectionLayoutManager extends LayoutManager {
39  
40      /**
41       * Call to the layout manager to build the components necessary for the given collection line,
42       * within an active view lifecycle.
43       *
44       * <p>As the collection is being iterated over by the {@link org.kuali.rice.krad.uif.container.CollectionGroupLineBuilder}
45       * this method is invoked for each line. The builder will create copies of the configured fields and actions for
46       * the line and pass into the layout manager so they can be assembled</p>
47       *
48       * @param lineBuilderContext context for the line to be built
49       */
50      void buildLine(LineBuilderContext lineBuilderContext);
51  
52      /**
53       * Invoked when a paging request occurs to carry out the paging request.
54       *
55       * @param model object containing the view's data
56       * @param collectionGroup collection group the request was made for
57       */
58      void processPagingRequest(Object model, CollectionGroup collectionGroup);
59  
60      /**
61       * Group for rendering the add line when separate (always the case for stacked layout, and a configuration
62       * for table layout).
63       *
64       * <p>This group can be used to configure how the add line will be rendered. For example the layout
65       * manager configured on the group will be used to rendered the add line fields. If the header
66       * (title) is not set on the group, it will be set from
67       * {@link org.kuali.rice.krad.uif.container.CollectionGroup#getAddLabel()}. In addition,
68       * {@link org.kuali.rice.krad.uif.container.CollectionGroup#getAddLineActions()} will be added
69       * to the group footer items.</p>
70       *
71       * @return Group instance for the collection add line
72       */
73      Group getAddLineGroup();
74  
75      /**
76       * @see CollectionLayoutManager#getAddLineGroup()
77       */
78      void setAddLineGroup(Group addLineGroup);
79  
80      /**
81       * Field group instance that is used as a prototype for creating the sub-collection field groups.
82       *
83       * @return GroupField instance to use as prototype
84       */
85      FieldGroup getSubCollectionFieldGroupPrototype();
86  
87      /**
88       * @see CollectionLayoutManager#getSubCollectionFieldGroupPrototype()
89       */
90      void setSubCollectionFieldGroupPrototype(FieldGroup subCollectionFieldGroupPrototype);
91  
92      /**
93       * Field instance that serves as a prototype for creating the select field on each line when
94       * {@link org.kuali.rice.krad.uif.container.CollectionGroup#isIncludeLineSelectionField()} is
95       * true.
96       *
97       * <p>This prototype can be used to set the control used for the select field (generally will be a
98       * checkbox control) in addition to styling and other setting. The binding path will be formed
99       * with using the
100      * {@link org.kuali.rice.krad.uif.container.CollectionGroup#getLineSelectPropertyName()} or if
101      * not set the framework will use
102      * {@link org.kuali.rice.krad.web.form.UifFormBase#getSelectedCollectionLines()}</p>
103      *
104      * @return select field prototype instance
105      */
106     Field getSelectFieldPrototype();
107 
108     /**
109      * @see CollectionLayoutManager#getSelectFieldPrototype()
110      */
111     void setSelectFieldPrototype(Field selectFieldPrototype);
112 
113     /**
114      * Widget used to page the collection.
115      *
116      * <p>The settings in this widget are only used by TableLayoutManagers which DO NOT take advantage
117      * of the RichTable option (this has its own paging implementation). To turn off RichTable and
118      * use a basic table with server paging set richTable.render="false" and useServerPaging="true"
119      * on the CollectionGroup which uses this layout manager.</p>
120      *
121      * @return the Pager widget
122      */
123     Pager getPagerWidget();
124 
125     /**
126      * @see CollectionLayoutManager#getPagerWidget()
127      */
128     void setPagerWidget(Pager pagerWidget);
129 }