Subversion Repository Public Repository

litesoft

Diff Revisions 949 vs 950 for /trunk/Java/GWT/OldClient/src/org/litesoft/GWT/forms/client/nonpublic/RelSubFormInstanceComponentHandlerImpl.java

Diff revisions: vs.
  @@ -1,291 +1,291 @@
1 - // This Source Code is in the Public Domain per: http://unlicense.org
2 - package org.litesoft.GWT.forms.client.nonpublic;
3 -
4 - import org.litesoft.commonfoundation.typeutils.Objects;
5 - import org.litesoft.ui.def.nonpublic.*;
6 - import org.litesoft.ui.def.nonpublic.support.*;
7 - import org.litesoft.ui.support.*;
8 -
9 - import com.google.gwt.user.client.ui.*;
10 -
11 - import java.util.*;
12 -
13 - public class RelSubFormInstanceComponentHandlerImpl extends AbstractFormInstanceComponentHandler
14 - implements RelSubFormInstanceComponentHandler {
15 - private RelSubFormInstanceParentable mParent;
16 - private RelSubFormTypeHelper mTypeHelper;
17 - private SubFormRowCarrier mRowCarrier;
18 - private FormDataRowKey mFormDataRowKey;
19 - private RelSubFormInstanceRenderer mRenderer = null;
20 -
21 - public RelSubFormInstanceComponentHandlerImpl( RelSubFormInstanceParentable pParent,
22 - RelSubFormTypeHelper pTypeHelper,
23 - SubFormRowCarrier pRowCarrier ) {
24 - Objects.assertNotNull( "Parent", mParent = pParent );
25 - Objects.assertNotNull( "TypeHelper", mTypeHelper = pTypeHelper );
26 - Objects.assertNotNull( "RowContainer", mRowCarrier = pRowCarrier );
27 - mParent.addChild( this );
28 - mFormDataRowKey = new FormDataRowKey( getFormUniqueID() );
29 - }
30 -
31 - public void setRenderer( RelSubFormInstanceRenderer pRenderer ) {
32 - mRenderer = pRenderer;
33 - }
34 -
35 - public FormDataRowKey getFormDataRowKey() {
36 - return mFormDataRowKey;
37 - }
38 -
39 - public FormDataRowKey getParentFormDataRowKey() {
40 - return mParent.getFormDataRowKey();
41 - }
42 -
43 - public UberFormInstanceComponentHandler getUberHandler() {
44 - return mParent.getUberHandler();
45 - }
46 -
47 - public Integer getFormUniqueID() {
48 - return mTypeHelper.getFormUniqueID();
49 - }
50 -
51 - public void addAttributeAdapter( FormAttributeAdapter pAttributeAdapter ) {
52 - throw new IllegalStateException( "Adding Attributes to the RelSubForm directly is NOT supported" );
53 - }
54 -
55 - public SubFormRowCarrier getRowCarrier() {
56 - return mRowCarrier;
57 - }
58 -
59 - protected void LLdispose( UberFormInstanceComponentHandler pUberHandler ) {
60 - LLdisposeChildren( pUberHandler );
61 -
62 - super.LLdispose( pUberHandler );
63 -
64 - mTypeHelper = null;
65 -
66 - mParent = null;
67 -
68 - mFormDataRowKey = null;
69 - mRowCarrier = null;
70 - mRenderer = null;
71 - }
72 -
73 - protected boolean LLsetInputDisabledOnUs( String pAttributeName, boolean pDisabled ) {
74 - return false;
75 - }
76 -
77 - protected void LLapplyOnUs( AttributeUpdateFormData[] pAttributeUpdates ) {
78 - }
79 -
80 - protected boolean LLanyUserInitiatedRowChangeOnUs() {
81 - return mUserInitiatedRowChange;
82 - }
83 -
84 - protected boolean LLrecalcAnyAttributesOnUs( FormAttributeAdapter.BooleanValueAccessor pValueAccessor ) {
85 - return false;
86 - }
87 -
88 - protected void LLpublishAnyPendingAttributeChangesOnUs() {
89 - }
90 -
91 - // Child Component Handler Management
92 -
93 - protected void LLapplyOnChildren( ActionUpdateFormData[] pActionUpdates ) {
94 - for ( int i = 0; i < mRows.size(); i++ ) {
95 - getRow( i ).apply( pActionUpdates );
96 - }
97 - }
98 -
99 - protected void LLupdateInputStateOnChildren( boolean pAnyChanged, boolean pAnyErrors ) {
100 - for ( int i = 0; i < mRows.size(); i++ ) {
101 - getRow( i ).updateInputState( pAnyChanged, pAnyErrors );
102 - }
103 - }
104 -
105 - protected boolean LLsetActionDisabledOnChildren( FormDataRowKey pFormDataRowKey, String pActionID,
106 - boolean pDisabled ) {
107 - for ( int i = 0; i < mRows.size(); i++ ) {
108 - if ( getRow( i ).setActionDisabled( pFormDataRowKey, pActionID, pDisabled ) ) {
109 - return true;
110 - }
111 - }
112 - return false;
113 - }
114 -
115 - protected boolean LLsetInputDisabledOnChildren( FormDataRowKey pFormDataRowKey, String pAttributeName,
116 - boolean pDisabled ) {
117 - for ( int i = 0; i < mRows.size(); i++ ) {
118 - if ( getRow( i ).setInputDisabled( pFormDataRowKey, pAttributeName, pDisabled ) ) {
119 - return true;
120 - }
121 - }
122 - return false;
123 - }
124 -
125 - protected void LLapplyOnChildren( AttributeUpdateFormData[] pAttributeUpdates ) {
126 - for ( int i = 0; i < mRows.size(); i++ ) {
127 - getRow( i ).apply( pAttributeUpdates );
128 - }
129 - }
130 -
131 - protected boolean LLanyUserInitiatedRowChangeOnChildren() {
132 - for ( int i = 0; i < mRows.size(); i++ ) {
133 - if ( getRow( i ).anyUserInitiatedRowChange() ) {
134 - return true;
135 - }
136 - }
137 - return false;
138 - }
139 -
140 - protected boolean LLrecalcAnyAttributesOnChildren(
141 - FormAttributeAdapter.BooleanValueAccessor pValueAccessor ) {
142 - for ( int i = 0; i < mRows.size(); i++ ) {
143 - if ( getRow( i ).recalcAnyAttributes( pValueAccessor ) ) {
144 - return true;
145 - }
146 - }
147 - return false;
148 - }
149 -
150 - protected void LLpublishAnyPendingAttributeChangesOnChildren() {
151 - for ( int i = 0; i < mRows.size(); i++ ) {
152 - getRow( i ).publishAnyPendingAttributeChanges();
153 - }
154 - }
155 -
156 - public void apply( RelSubFormRowKeys[] pList, boolean pFullUpdate, boolean pUserInitiatedAddOrRemoveRow ) {
157 - if ( isActive() ) {
158 - Integer zMyContainingFormUniqueID = mParent.getFormUniqueID();
159 - FormDataRowKey zMyContainingRow = mParent.getFormDataRowKey();
160 - String zMyRelToParentAttributeName = mTypeHelper.getRelAttribute();
161 - for ( int i = 0; i < pList.length; i++ ) {
162 - RelSubFormRowKeys zKeys = pList[i];
163 - if ( zMyContainingFormUniqueID.equals( zKeys.getContainingFormUniqueID() ) && // Off My Parent
164 - zMyRelToParentAttributeName.equals( zKeys.getRelSubFormRef() ) && // For Me && specific
165 - Objects.areNonArraysEqual( zMyContainingRow, zKeys.getContainingRow() ) ) // Sub Row
166 - {
167 - boolean zRowsWereChanged = update( zKeys.getRowKeys() );
168 - boolean zSavedUserInitiatedRowChange = mUserInitiatedRowChange;
169 - if ( pFullUpdate ) {
170 - mUserInitiatedRowChange = false;
171 - } else if ( zRowsWereChanged ) {
172 - mUserInitiatedRowChange = pUserInitiatedAddOrRemoveRow;
173 - }
174 - if ( zSavedUserInitiatedRowChange != mUserInitiatedRowChange ) {
175 - componentChangedState( mUserInitiatedRowChange );
176 - }
177 - }
178 - }
179 - for ( int i = 0; i < mRows.size(); i++ ) {
180 - getRow( i ).apply( pList, pFullUpdate, pUserInitiatedAddOrRemoveRow );
181 - }
182 - }
183 - }
184 -
185 - private void LLdisposeChildren( UberFormInstanceComponentHandler pUberHandler ) {
186 - for ( int i = mRows.size(); --i >= 0; ) // Reverse for Safety
187 - {
188 - getRow( i ).dispose( pUberHandler );
189 - }
190 - mRows.clear();
191 - }
192 -
193 - private RelSubFormRowInstanceComponentHandlerImpl getRow( int pAt ) {
194 - return (RelSubFormRowInstanceComponentHandlerImpl) mRows.get( pAt );
195 - }
196 -
197 - private List mRows = new ArrayList();
198 - private boolean mUserInitiatedRowChange = false;
199 -
200 - private boolean update( String[] pRowKeys ) {
201 - boolean anyChange = false;
202 - if ( Objects.isNullOrEmpty( pRowKeys ) ) {
203 - if ( !mRows.isEmpty() ) {
204 - anyChange = true;
205 - mRowCarrier.clear();
206 - LLdisposeChildren( getUberHandler() );
207 - }
208 - return anyChange;
209 - }
210 - int i = 0;
211 - do {
212 - String zRowKey = pRowKeys[i];
213 - int zCurrentlyAt = locate( zRowKey, i );
214 - if ( zCurrentlyAt != i ) {
215 - if ( zCurrentlyAt == -1 ) {
216 - anyChange = true;
217 - insertNewAt( zRowKey, i );
218 - } else {
219 - anyChange = true;
220 - moveUpFromTo( zCurrentlyAt, i );
221 - }
222 - }
223 - }
224 - while ( ++i < pRowKeys.length );
225 - while ( mRows.size() > i ) {
226 - anyChange = true;
227 - removeAt( mRows.size() - 1 );
228 - }
229 - return anyChange;
230 - }
231 -
232 - private int locate( String pRowKey, int pFrom ) {
233 - for ( int i = pFrom; i < mRows.size(); i++ ) {
234 - RelSubFormRowInstanceComponentHandlerImpl zRowHandler = getRow( i );
235 - if ( pRowKey.equals( zRowHandler.getRowObjectKey() ) ) {
236 - return i;
237 - }
238 - }
239 - return -1; // Not Found
240 - }
241 -
242 - private void removeAt( int pAt ) {
243 - for ( int i = mRows.size(); --i > pAt; ) // Reverse for Safety
244 - {
245 - getRow( i ).decRowIndex();
246 - }
247 - getRow( pAt ).dispose( getUberHandler() );
248 - mRows.remove( pAt );
249 - }
250 -
251 - private void insertNewAt( String pRowKey, int pAt ) {
252 - for ( int i = mRows.size(); --i >= pAt; ) // Reverse for Safety
253 - {
254 - getRow( i ).incRowIndex();
255 - }
256 - RelSubFormRowInstanceComponentHandlerImpl zHandler =
257 - new RelSubFormRowInstanceComponentHandlerImpl( this, pRowKey, pAt );
258 - mRows.add( pAt, zHandler );
259 - Widget zWidget = mRenderer.renderRow( zHandler, pRowKey, pAt );
260 - zHandler.init( zWidget );
261 - FormMetaData zMetaData = mTypeHelper.getFormMetaData();
262 - UiRelSubFormDef zRelSubForm = mTypeHelper.getRelSubForm();
263 - AttributeUsage zTabAttributeUsage = zRelSubForm.getTabAttributeUsage();
264 - if ( (zMetaData != null) && (zTabAttributeUsage != null) ) {
265 - AttributeMetaData zTabAttributeMD = zMetaData.getAttribute( zTabAttributeUsage.getUniqueID() );
266 - if ( zTabAttributeMD != null ) {
267 - zHandler.createTabAttributeAdapter( zTabAttributeMD );
268 - }
269 - }
270 - }
271 -
272 - private void moveUpFromTo( int pFrom, int pTo ) {
273 - for ( int i = pFrom; --i >= pTo; ) // Reverse for Safety
274 - {
275 - getRow( i ).incRowIndex();
276 - }
277 - // Move the Row Handler
278 - RelSubFormRowInstanceComponentHandlerImpl zRowHandler =
279 - (RelSubFormRowInstanceComponentHandlerImpl) mRows.remove( pFrom );
280 - mRows.add( pTo, zRowHandler );
281 - // Move The Widget
282 - zRowHandler.setRowIndex( pTo );
283 - }
284 -
285 - public RelSubFormTypeHelper getRelSubFormTypeHelperFor( UiRelSubFormDef pSubFormDef,
286 - FormMetaData pSubFormMetaData ) {
287 - RelSubFormTypeHelper zTypeHelper = mTypeHelper.getChild( pSubFormDef.getAttributeName() );
288 - return (zTypeHelper != null) ? zTypeHelper :
289 - new RelSubFormTypeHelperImpl( mTypeHelper, pSubFormDef, pSubFormMetaData );
290 - }
291 - }
1 + // This Source Code is in the Public Domain per: http://unlicense.org
2 + package org.litesoft.GWT.forms.client.nonpublic;
3 +
4 + import org.litesoft.commonfoundation.base.*;
5 + import org.litesoft.ui.def.nonpublic.*;
6 + import org.litesoft.ui.def.nonpublic.support.*;
7 + import org.litesoft.ui.support.*;
8 +
9 + import com.google.gwt.user.client.ui.*;
10 +
11 + import java.util.*;
12 +
13 + public class RelSubFormInstanceComponentHandlerImpl extends AbstractFormInstanceComponentHandler
14 + implements RelSubFormInstanceComponentHandler {
15 + private RelSubFormInstanceParentable mParent;
16 + private RelSubFormTypeHelper mTypeHelper;
17 + private SubFormRowCarrier mRowCarrier;
18 + private FormDataRowKey mFormDataRowKey;
19 + private RelSubFormInstanceRenderer mRenderer = null;
20 +
21 + public RelSubFormInstanceComponentHandlerImpl( RelSubFormInstanceParentable pParent,
22 + RelSubFormTypeHelper pTypeHelper,
23 + SubFormRowCarrier pRowCarrier ) {
24 + Confirm.isNotNull( "Parent", mParent = pParent );
25 + Confirm.isNotNull( "TypeHelper", mTypeHelper = pTypeHelper );
26 + Confirm.isNotNull( "RowContainer", mRowCarrier = pRowCarrier );
27 + mParent.addChild( this );
28 + mFormDataRowKey = new FormDataRowKey( getFormUniqueID() );
29 + }
30 +
31 + public void setRenderer( RelSubFormInstanceRenderer pRenderer ) {
32 + mRenderer = pRenderer;
33 + }
34 +
35 + public FormDataRowKey getFormDataRowKey() {
36 + return mFormDataRowKey;
37 + }
38 +
39 + public FormDataRowKey getParentFormDataRowKey() {
40 + return mParent.getFormDataRowKey();
41 + }
42 +
43 + public UberFormInstanceComponentHandler getUberHandler() {
44 + return mParent.getUberHandler();
45 + }
46 +
47 + public Integer getFormUniqueID() {
48 + return mTypeHelper.getFormUniqueID();
49 + }
50 +
51 + public void addAttributeAdapter( FormAttributeAdapter pAttributeAdapter ) {
52 + throw new IllegalStateException( "Adding Attributes to the RelSubForm directly is NOT supported" );
53 + }
54 +
55 + public SubFormRowCarrier getRowCarrier() {
56 + return mRowCarrier;
57 + }
58 +
59 + protected void LLdispose( UberFormInstanceComponentHandler pUberHandler ) {
60 + LLdisposeChildren( pUberHandler );
61 +
62 + super.LLdispose( pUberHandler );
63 +
64 + mTypeHelper = null;
65 +
66 + mParent = null;
67 +
68 + mFormDataRowKey = null;
69 + mRowCarrier = null;
70 + mRenderer = null;
71 + }
72 +
73 + protected boolean LLsetInputDisabledOnUs( String pAttributeName, boolean pDisabled ) {
74 + return false;
75 + }
76 +
77 + protected void LLapplyOnUs( AttributeUpdateFormData[] pAttributeUpdates ) {
78 + }
79 +
80 + protected boolean LLanyUserInitiatedRowChangeOnUs() {
81 + return mUserInitiatedRowChange;
82 + }
83 +
84 + protected boolean LLrecalcAnyAttributesOnUs( FormAttributeAdapter.BooleanValueAccessor pValueAccessor ) {
85 + return false;
86 + }
87 +
88 + protected void LLpublishAnyPendingAttributeChangesOnUs() {
89 + }
90 +
91 + // Child Component Handler Management
92 +
93 + protected void LLapplyOnChildren( ActionUpdateFormData[] pActionUpdates ) {
94 + for ( int i = 0; i < mRows.size(); i++ ) {
95 + getRow( i ).apply( pActionUpdates );
96 + }
97 + }
98 +
99 + protected void LLupdateInputStateOnChildren( boolean pAnyChanged, boolean pAnyErrors ) {
100 + for ( int i = 0; i < mRows.size(); i++ ) {
101 + getRow( i ).updateInputState( pAnyChanged, pAnyErrors );
102 + }
103 + }
104 +
105 + protected boolean LLsetActionDisabledOnChildren( FormDataRowKey pFormDataRowKey, String pActionID,
106 + boolean pDisabled ) {
107 + for ( int i = 0; i < mRows.size(); i++ ) {
108 + if ( getRow( i ).setActionDisabled( pFormDataRowKey, pActionID, pDisabled ) ) {
109 + return true;
110 + }
111 + }
112 + return false;
113 + }
114 +
115 + protected boolean LLsetInputDisabledOnChildren( FormDataRowKey pFormDataRowKey, String pAttributeName,
116 + boolean pDisabled ) {
117 + for ( int i = 0; i < mRows.size(); i++ ) {
118 + if ( getRow( i ).setInputDisabled( pFormDataRowKey, pAttributeName, pDisabled ) ) {
119 + return true;
120 + }
121 + }
122 + return false;
123 + }
124 +
125 + protected void LLapplyOnChildren( AttributeUpdateFormData[] pAttributeUpdates ) {
126 + for ( int i = 0; i < mRows.size(); i++ ) {
127 + getRow( i ).apply( pAttributeUpdates );
128 + }
129 + }
130 +
131 + protected boolean LLanyUserInitiatedRowChangeOnChildren() {
132 + for ( int i = 0; i < mRows.size(); i++ ) {
133 + if ( getRow( i ).anyUserInitiatedRowChange() ) {
134 + return true;
135 + }
136 + }
137 + return false;
138 + }
139 +
140 + protected boolean LLrecalcAnyAttributesOnChildren(
141 + FormAttributeAdapter.BooleanValueAccessor pValueAccessor ) {
142 + for ( int i = 0; i < mRows.size(); i++ ) {
143 + if ( getRow( i ).recalcAnyAttributes( pValueAccessor ) ) {
144 + return true;
145 + }
146 + }
147 + return false;
148 + }
149 +
150 + protected void LLpublishAnyPendingAttributeChangesOnChildren() {
151 + for ( int i = 0; i < mRows.size(); i++ ) {
152 + getRow( i ).publishAnyPendingAttributeChanges();
153 + }
154 + }
155 +
156 + public void apply( RelSubFormRowKeys[] pList, boolean pFullUpdate, boolean pUserInitiatedAddOrRemoveRow ) {
157 + if ( isActive() ) {
158 + Integer zMyContainingFormUniqueID = mParent.getFormUniqueID();
159 + FormDataRowKey zMyContainingRow = mParent.getFormDataRowKey();
160 + String zMyRelToParentAttributeName = mTypeHelper.getRelAttribute();
161 + for ( int i = 0; i < pList.length; i++ ) {
162 + RelSubFormRowKeys zKeys = pList[i];
163 + if ( zMyContainingFormUniqueID.equals( zKeys.getContainingFormUniqueID() ) && // Off My Parent
164 + zMyRelToParentAttributeName.equals( zKeys.getRelSubFormRef() ) && // For Me && specific
165 + Currently.areEqual( zMyContainingRow, zKeys.getContainingRow() ) ) // Sub Row
166 + {
167 + boolean zRowsWereChanged = update( zKeys.getRowKeys() );
168 + boolean zSavedUserInitiatedRowChange = mUserInitiatedRowChange;
169 + if ( pFullUpdate ) {
170 + mUserInitiatedRowChange = false;
171 + } else if ( zRowsWereChanged ) {
172 + mUserInitiatedRowChange = pUserInitiatedAddOrRemoveRow;
173 + }
174 + if ( zSavedUserInitiatedRowChange != mUserInitiatedRowChange ) {
175 + componentChangedState( mUserInitiatedRowChange );
176 + }
177 + }
178 + }
179 + for ( int i = 0; i < mRows.size(); i++ ) {
180 + getRow( i ).apply( pList, pFullUpdate, pUserInitiatedAddOrRemoveRow );
181 + }
182 + }
183 + }
184 +
185 + private void LLdisposeChildren( UberFormInstanceComponentHandler pUberHandler ) {
186 + for ( int i = mRows.size(); --i >= 0; ) // Reverse for Safety
187 + {
188 + getRow( i ).dispose( pUberHandler );
189 + }
190 + mRows.clear();
191 + }
192 +
193 + private RelSubFormRowInstanceComponentHandlerImpl getRow( int pAt ) {
194 + return (RelSubFormRowInstanceComponentHandlerImpl) mRows.get( pAt );
195 + }
196 +
197 + private List mRows = new ArrayList();
198 + private boolean mUserInitiatedRowChange = false;
199 +
200 + private boolean update( String[] pRowKeys ) {
201 + boolean anyChange = false;
202 + if ( Currently.isNullOrEmpty( pRowKeys ) ) {
203 + if ( !mRows.isEmpty() ) {
204 + anyChange = true;
205 + mRowCarrier.clear();
206 + LLdisposeChildren( getUberHandler() );
207 + }
208 + return anyChange;
209 + }
210 + int i = 0;
211 + do {
212 + String zRowKey = pRowKeys[i];
213 + int zCurrentlyAt = locate( zRowKey, i );
214 + if ( zCurrentlyAt != i ) {
215 + if ( zCurrentlyAt == -1 ) {
216 + anyChange = true;
217 + insertNewAt( zRowKey, i );
218 + } else {
219 + anyChange = true;
220 + moveUpFromTo( zCurrentlyAt, i );
221 + }
222 + }
223 + }
224 + while ( ++i < pRowKeys.length );
225 + while ( mRows.size() > i ) {
226 + anyChange = true;
227 + removeAt( mRows.size() - 1 );
228 + }
229 + return anyChange;
230 + }
231 +
232 + private int locate( String pRowKey, int pFrom ) {
233 + for ( int i = pFrom; i < mRows.size(); i++ ) {
234 + RelSubFormRowInstanceComponentHandlerImpl zRowHandler = getRow( i );
235 + if ( pRowKey.equals( zRowHandler.getRowObjectKey() ) ) {
236 + return i;
237 + }
238 + }
239 + return -1; // Not Found
240 + }
241 +
242 + private void removeAt( int pAt ) {
243 + for ( int i = mRows.size(); --i > pAt; ) // Reverse for Safety
244 + {
245 + getRow( i ).decRowIndex();
246 + }
247 + getRow( pAt ).dispose( getUberHandler() );
248 + mRows.remove( pAt );
249 + }
250 +
251 + private void insertNewAt( String pRowKey, int pAt ) {
252 + for ( int i = mRows.size(); --i >= pAt; ) // Reverse for Safety
253 + {
254 + getRow( i ).incRowIndex();
255 + }
256 + RelSubFormRowInstanceComponentHandlerImpl zHandler =
257 + new RelSubFormRowInstanceComponentHandlerImpl( this, pRowKey, pAt );
258 + mRows.add( pAt, zHandler );
259 + Widget zWidget = mRenderer.renderRow( zHandler, pRowKey, pAt );
260 + zHandler.init( zWidget );
261 + FormMetaData zMetaData = mTypeHelper.getFormMetaData();
262 + UiRelSubFormDef zRelSubForm = mTypeHelper.getRelSubForm();
263 + AttributeUsage zTabAttributeUsage = zRelSubForm.getTabAttributeUsage();
264 + if ( (zMetaData != null) && (zTabAttributeUsage != null) ) {
265 + AttributeMetaData zTabAttributeMD = zMetaData.getAttribute( zTabAttributeUsage.getUniqueID() );
266 + if ( zTabAttributeMD != null ) {
267 + zHandler.createTabAttributeAdapter( zTabAttributeMD );
268 + }
269 + }
270 + }
271 +
272 + private void moveUpFromTo( int pFrom, int pTo ) {
273 + for ( int i = pFrom; --i >= pTo; ) // Reverse for Safety
274 + {
275 + getRow( i ).incRowIndex();
276 + }
277 + // Move the Row Handler
278 + RelSubFormRowInstanceComponentHandlerImpl zRowHandler =
279 + (RelSubFormRowInstanceComponentHandlerImpl) mRows.remove( pFrom );
280 + mRows.add( pTo, zRowHandler );
281 + // Move The Widget
282 + zRowHandler.setRowIndex( pTo );
283 + }
284 +
285 + public RelSubFormTypeHelper getRelSubFormTypeHelperFor( UiRelSubFormDef pSubFormDef,
286 + FormMetaData pSubFormMetaData ) {
287 + RelSubFormTypeHelper zTypeHelper = mTypeHelper.getChild( pSubFormDef.getAttributeName() );
288 + return (zTypeHelper != null) ? zTypeHelper :
289 + new RelSubFormTypeHelperImpl( mTypeHelper, pSubFormDef, pSubFormMetaData );
290 + }
291 + }