Subversion Repository Public Repository

litesoft

Diff Revisions 949 vs 950 for /trunk/Java/KeyHole/src/org/litesoft/aokeyhole/objects/AttributeMetaDataRelatedPersisted.java

Diff revisions: vs.
  @@ -1,299 +1,299 @@
1 - // This Source Code is in the Public Domain per: http://unlicense.org
2 - package org.litesoft.aokeyhole.objects;
3 -
4 - import org.litesoft.aokeyhole.objects.attributes.*;
5 - import org.litesoft.aokeyhole.objects.support.*;
6 - import org.litesoft.aokeyhole.toolkit.*;
7 -
8 - public class AttributeMetaDataRelatedPersisted extends AttributeMetaDataRelated {
9 - private String mBackAttrib = null;
10 -
11 - public AttributeMetaDataRelatedPersisted( AttributeSet pAttributeSet, Mode pMode, boolean pEditable, PropertyMetaData[] pPropertyMetaDatas,
12 - IdentifierValidator pNameValidator, String pName ) {
13 - super( pAttributeSet, pMode, pEditable, false, pPropertyMetaDatas, pNameValidator, pName );
14 - }
15 -
16 - public boolean isVariableToOne() {
17 - return (getAttributeSet() instanceof VariableToOne);
18 - }
19 -
20 - public boolean isCommonPairedToOne() {
21 - return A_CommonPairedToOne.TYPE.equals( getAttributeSet().getType() );
22 - }
23 -
24 - @Override
25 - public String getRelatedTo() {
26 - String zRelatedTo = super.getRelatedTo();
27 - if ( zRelatedTo == null ) {
28 - if ( isVariableToOne() || isCommonPairedToOne() ) {
29 - return ObjectNames.VARIES_RELATED_TO;
30 - }
31 - }
32 - return zRelatedTo;
33 - }
34 -
35 - public String getBackAttrib() {
36 - return mBackAttrib;
37 - }
38 -
39 - public void unpersistBackAttrib( String pBackAttrib ) {
40 - chkUnhappyCase( updateBackAttrib( pBackAttrib ) );
41 - }
42 -
43 - /**
44 - * @return null or Error
45 - */
46 - public String setBackAttrib( String pBackAttrib ) {
47 - verifyEditability();
48 - return updateBackAttrib( pBackAttrib );
49 - }
50 -
51 - /**
52 - * @return null or Error
53 - */
54 - protected String updateBackAttrib( String pBackAttrib ) {
55 - pBackAttrib = trimEmptyToNull( pBackAttrib );
56 - if ( !areEqual( mBackAttrib, pBackAttrib ) ) {
57 - mBackAttrib = pBackAttrib;
58 - changed();
59 - }
60 - return null;
61 - }
62 -
63 - @Override
64 - protected String[] getAdditionalValues() {
65 - AttributeType zAttributeType = getAttributeSet().getType();
66 - if ( !(zAttributeType instanceof NoPeerAttribute) ) {
67 - return (mBackAttrib != null) ? new String[]{getAdditionalValueRelatedTo(), mBackAttrib} : super.getAdditionalValues();
68 - }
69 - return null;
70 - }
71 -
72 - @Override
73 - public void setUpView( NameValuesComponent pNameValuesComponent ) {
74 - super.setUpView( pNameValuesComponent );
75 -
76 - ObjectMetaData object = mRelatedTo.getObjectMetaData();
77 - String[] options = (object == null) ? new String[0] : object.getSortedRelatedPersistedAttributeNamesTo( !isToMany(), getOwner() );
78 - pNameValuesComponent.setOptions( AttribNamesRelatedPersisted.BACK_REF, options );
79 -
80 - pNameValuesComponent.setValue( AttribNamesRelatedPersisted.BACK_REF, getBackAttrib() );
81 - }
82 -
83 - @Override
84 - public void deleteExistingCollectChanges( ChangeHandler pChanges ) {
85 - if ( mBackAttrib != null ) {
86 - ObjectMetaData zCurRelToObject = mRelatedTo.getObjectMetaData();
87 - if ( zCurRelToObject != null ) {
88 - AttributeMetaData zCurBackAttribute = zCurRelToObject.getAttribute( mBackAttrib );
89 - if ( zCurBackAttribute == null ) {
90 - throw new RuntimeException( "Unable to locate Current " + backRefString( mBackAttrib, null ) );
91 - }
92 - if ( !(zCurBackAttribute instanceof AttributeMetaDataRelatedPersisted) ) {
93 - throw new RuntimeException( backRefString( mBackAttrib, zCurBackAttribute.getName() ) + " NOT a Persisted Relationship" );
94 - }
95 - pChanges.add( new ClearOldBackRef( (AttributeMetaDataRelatedPersisted) zCurBackAttribute ) );
96 - }
97 - }
98 - super.deleteExistingCollectChanges( pChanges );
99 - }
100 -
101 - @Override
102 - protected ChangeFragment checkNameChange( String pNewName ) {
103 - mNewName = null;
104 - return super.checkNameChange( pNewName );
105 - }
106 -
107 - @Override
108 - protected ChangeFragment createChangeNameFragment( String pNewName ) {
109 - return super.createChangeNameFragment( mNewName = pNewName );
110 - }
111 -
112 - private String mNewName = null;
113 -
114 - @Override
115 - protected void augmentSaveFromView( ChangeHandler pChanges, NameValuesComponent pNameValuesComponent, String pCurRelatedTo, ObjectMetaData pNewRelToObject ) {
116 - String zNewRelatedTo = pNewRelToObject.getName();
117 -
118 - String zCurBackRef = deNull( getBackAttrib() );
119 - String zNewBackRef = deNull( pNameValuesComponent.getValue( AttribNamesRelatedPersisted.BACK_REF ) );
120 -
121 - FundamentalAttributeType zOurFAT = this.getAttributeSet().getType().getFAT();
122 - FundamentalAttributeType zRequiredBackReferenceType = zOurFAT.getCompatibleBackReferenceType();
123 -
124 - AttributeMetaData zNewBackAttribute = null;
125 - if ( (zNewBackRef.length() != 0) && !zNewBackRef.startsWith( "!" ) ) {
126 - zNewBackAttribute = pNewRelToObject.getAttribute( zNewBackRef );
127 - if ( (null == zNewBackAttribute) ) {
128 - throw new RuntimeException( "No " + backRefString( zNewBackRef, zNewRelatedTo ) );
129 - }
130 - if ( zNewBackAttribute.isVirtual() ) {
131 - throw new RuntimeException( "Virtual " + backRefString( zNewBackRef, zNewRelatedTo ) + " are NOT allowed" );
132 - }
133 - if ( !zRequiredBackReferenceType.equals( zNewBackAttribute.getAttributeSet().getType().getFAT() ) ) {
134 - throw new RuntimeException( backRefString( zNewBackRef, zNewRelatedTo ) + " NOT a " + zRequiredBackReferenceType + " type" );
135 - }
136 - }
137 -
138 - String zNewName;
139 - if ( ((zNewName = mNewName) == null) ) {
140 - if ( areEqual( pCurRelatedTo, zNewRelatedTo ) && areEqual( zCurBackRef, zNewBackRef ) ) {
141 - return;
142 - }
143 - zNewName = getName();
144 - }
145 -
146 - if ( zCurBackRef.length() != 0 ) {
147 - ObjectMetaData zCurRelToObject = getObjectMetaData( pCurRelatedTo );
148 - AttributeMetaData zCurBackAttribute = zCurRelToObject.getAttribute( zCurBackRef );
149 - if ( zCurBackAttribute != null ) {
150 - if ( !(zCurBackAttribute instanceof AttributeMetaDataRelatedPersisted) ) {
151 - throw new RuntimeException( backRefString( zCurBackRef, pCurRelatedTo ) + " NOT a Persisted Relationship" );
152 - }
153 - pChanges.add( new ClearOldBackRef( (AttributeMetaDataRelatedPersisted) zCurBackAttribute ) );
154 - }
155 - }
156 -
157 - if ( zNewBackRef.startsWith( "!" ) ) {
158 - zNewBackRef = zNewBackRef.substring( 1 );
159 -
160 - String zError = getNameValidator().validateIdentifier( zNewBackRef, "Back Reference Attribute Name" );
161 - if ( zError != null ) {
162 - throw new RuntimeException( zError );
163 - }
164 - if ( pNewRelToObject.isUsedOwnedName( zNewBackRef ) ) {
165 - throw new RuntimeException( "New " + backRefString( zNewBackRef, zNewRelatedTo ) + " Already exists" );
166 - }
167 - switch ( zRequiredBackReferenceType ) {
168 - default: // Can't Happen!
169 - case ToMany:
170 - pChanges.add( new CreateNewToManyAttribute( pNewRelToObject, zNewBackRef, getObjectMetaData(), zNewName ) );
171 - break;
172 - case ToOne:
173 - pChanges.add( new CreateNewToOneAttribute( pNewRelToObject, zNewBackRef, getObjectMetaData(), zNewName ) );
174 - break;
175 - }
176 - } else if ( zNewBackRef.length() != 0 ) {
177 - if ( !(zNewBackAttribute instanceof AttributeMetaDataRelatedPersisted) ) {
178 - throw new RuntimeException( backRefString( zNewBackRef, zNewRelatedTo ) + " NOT a Persisted Relationship" );
179 - }
180 - pChanges.add( new ChangeBackRefOnTo( (AttributeMetaDataRelatedPersisted) zNewBackAttribute, zNewName ) );
181 - }
182 -
183 - if ( !areEqual( zCurBackRef, zNewBackRef ) ) {
184 - pChanges.add( new ChangeBackRef( zNewBackRef ) );
185 - }
186 -
187 - pChanges.add( checkRelatedToChange( pCurRelatedTo, pNewRelToObject.getName() ) );
188 -
189 - //RelatedPersisted.ChangeRelated (null->DBV2) from '|' to: |
190 - //RelatedPersisted.ChangeRelated (DbVersion) from 'DbVersion|DbTables' to: DbVersion|
191 - //RelatedPersisted.ChangeRelated (DBV2) from '|' to: |!Xyzzy2
192 - //RelatedPersisted.ChangeRelated (DbVersion) from 'DbVersion|DbTables' to: DbVersion|!xyZZy
193 - //RelatedPersisted.ChangeRelated (DbVersion) from 'DbVersion|DbTables' to: DbVersion|!.
194 - //RelatedPersisted.ChangeRelated (DbVersion) from 'DbVersion|DbTables' to: Device|
195 - //RelatedPersisted.ChangeRelated (DbVersion) from 'DbVersion|DbTables' to: DbTable|DbTables
196 - //RelatedPersisted.ChangeRelated (DbVersion) from 'DbVersion|DbTables' to: DbVersion|!Xyzzy
197 - //RelatedPersisted.ChangeRelated (DbVersion->DatabaseVersion) from 'DbVersion|DbTables' to: DbVersion|DbTables
198 - //RelatedPersisted.ChangeRelated (DatabaseVersion->DbaseVersion) from 'DbVersion|DbTables' to: DbVersion|!Xyzzy
199 -
200 - //System.out.println( "RelatedPersisted.ChangeRelated (" +
201 - // ((mNewName == null) ? getName() : getName() + "->" + mNewName) + ") " + "from '" +
202 - // pCurRelatedTo + "|" + zCurBackRef + "' " + "to: " + zNewRelatedTo + "|" +
203 - // zNewBackRef );
204 - }
205 -
206 - private String backRefString( String pNewBackRef, String pNewRelatedTo ) {
207 - return "Back Reference Attribute '" + pNewBackRef + "' on Related To '" + pNewRelatedTo + "'";
208 - }
209 -
210 - protected class ChangeBackRef implements ChangeFragment {
211 - private String mNewBackRef;
212 -
213 - public ChangeBackRef( String pNewBackRef ) {
214 - mNewBackRef = pNewBackRef;
215 - }
216 -
217 - @Override
218 - public void commitChange() {
219 - setBackAttrib( mNewBackRef );
220 - }
221 - }
222 -
223 - protected static class ChangeBackRefOnTo implements ChangeFragment {
224 - private AttributeMetaDataRelatedPersisted mNewBackAttribute;
225 - private String mNewBackRef;
226 -
227 - public ChangeBackRefOnTo( AttributeMetaDataRelatedPersisted pNewBackAttribute, String pNewBackRef ) {
228 - mNewBackAttribute = pNewBackAttribute;
229 - mNewBackRef = pNewBackRef;
230 - }
231 -
232 - @Override
233 - public void commitChange() {
234 - mNewBackAttribute.setBackAttrib( mNewBackRef );
235 - }
236 - }
237 -
238 - protected static class ClearOldBackRef implements ChangeFragment {
239 - private AttributeMetaDataRelatedPersisted mCurBackAttribute;
240 -
241 - public ClearOldBackRef( AttributeMetaDataRelatedPersisted pCurBackAttribute ) {
242 - mCurBackAttribute = pCurBackAttribute;
243 - }
244 -
245 - @Override
246 - public void commitChange() {
247 - mCurBackAttribute.setBackAttrib( null );
248 - }
249 - }
250 -
251 - protected abstract class CreateNewAttribute implements ChangeFragment {
252 - protected ObjectMetaData mNewAttributesObject;
253 - private ObjectMetaData mNewAttributesRelToObject;
254 - private String mNewAttributesName;
255 - private String mNewAttributesBackRef;
256 -
257 - public CreateNewAttribute( ObjectMetaData pNewAttributesObject, String pNewAttributesName, ObjectMetaData pNewAttributesRelToObject,
258 - String pNewAttributesBackRef ) {
259 - mNewAttributesObject = pNewAttributesObject;
260 - mNewAttributesName = pNewAttributesName;
261 - mNewAttributesRelToObject = pNewAttributesRelToObject;
262 - mNewAttributesBackRef = pNewAttributesBackRef;
263 - }
264 -
265 - @Override
266 - public void commitChange() {
267 - AttributeMetaDataRelatedPersisted zNewBackAttribute = createAttribute();
268 - zNewBackAttribute.setName( mNewAttributesName );
269 - zNewBackAttribute.setRelatedTo( mNewAttributesRelToObject.getName() );
270 - zNewBackAttribute.setBackAttrib( mNewAttributesBackRef );
271 - }
272 -
273 - abstract protected AttributeMetaDataRelatedPersisted createAttribute();
274 - }
275 -
276 - protected class CreateNewToOneAttribute extends CreateNewAttribute {
277 - public CreateNewToOneAttribute( ObjectMetaData pNewAttributesObject, String pNewAttributesName, ObjectMetaData pNewAttributesRelToObject,
278 - String pNewAttributesBackRef ) {
279 - super( pNewAttributesObject, pNewAttributesName, pNewAttributesRelToObject, pNewAttributesBackRef );
280 - }
281 -
282 - @Override
283 - protected AttributeMetaDataRelatedPersisted createAttribute() {
284 - return (AttributeMetaDataRelatedPersisted) mNewAttributesObject.createAttributeMetaData( A_ToOne.TYPE, false );
285 - }
286 - }
287 -
288 - protected class CreateNewToManyAttribute extends CreateNewAttribute {
289 - public CreateNewToManyAttribute( ObjectMetaData pNewAttributesObject, String pNewAttributesName, ObjectMetaData pNewAttributesRelToObject,
290 - String pNewAttributesBackRef ) {
291 - super( pNewAttributesObject, pNewAttributesName, pNewAttributesRelToObject, pNewAttributesBackRef );
292 - }
293 -
294 - @Override
295 - protected AttributeMetaDataRelatedPersisted createAttribute() {
296 - return (AttributeMetaDataRelatedPersisted) mNewAttributesObject.createAttributeMetaData( A_ToMany.TYPE, false );
297 - }
298 - }
299 - }
1 + // This Source Code is in the Public Domain per: http://unlicense.org
2 + package org.litesoft.aokeyhole.objects;
3 +
4 + import org.litesoft.aokeyhole.objects.attributes.*;
5 + import org.litesoft.aokeyhole.objects.support.*;
6 + import org.litesoft.aokeyhole.toolkit.*;
7 +
8 + public class AttributeMetaDataRelatedPersisted extends AttributeMetaDataRelated {
9 + private String mBackAttrib = null;
10 +
11 + public AttributeMetaDataRelatedPersisted( AttributeSet pAttributeSet, Mode pMode, boolean pEditable, PropertyMetaData[] pPropertyMetaDatas,
12 + IdentifierValidator pNameValidator, String pName ) {
13 + super( pAttributeSet, pMode, pEditable, false, pPropertyMetaDatas, pNameValidator, pName );
14 + }
15 +
16 + public boolean isVariableToOne() {
17 + return (getAttributeSet() instanceof VariableToOne);
18 + }
19 +
20 + public boolean isCommonPairedToOne() {
21 + return A_CommonPairedToOne.TYPE.equals( getAttributeSet().getType() );
22 + }
23 +
24 + @Override
25 + public String getRelatedTo() {
26 + String zRelatedTo = super.getRelatedTo();
27 + if ( zRelatedTo == null ) {
28 + if ( isVariableToOne() || isCommonPairedToOne() ) {
29 + return ObjectNames.VARIES_RELATED_TO;
30 + }
31 + }
32 + return zRelatedTo;
33 + }
34 +
35 + public String getBackAttrib() {
36 + return mBackAttrib;
37 + }
38 +
39 + public void unpersistBackAttrib( String pBackAttrib ) {
40 + chkUnhappyCase( updateBackAttrib( pBackAttrib ) );
41 + }
42 +
43 + /**
44 + * @return null or Error
45 + */
46 + public String setBackAttrib( String pBackAttrib ) {
47 + verifyEditability();
48 + return updateBackAttrib( pBackAttrib );
49 + }
50 +
51 + /**
52 + * @return null or Error
53 + */
54 + protected String updateBackAttrib( String pBackAttrib ) {
55 + pBackAttrib = trimEmptyToNull( pBackAttrib );
56 + if ( !areEqual( mBackAttrib, pBackAttrib ) ) {
57 + mBackAttrib = pBackAttrib;
58 + changed();
59 + }
60 + return null;
61 + }
62 +
63 + @Override
64 + protected String[] getAdditionalValues() {
65 + AttributeType zAttributeType = getAttributeSet().getType();
66 + if ( !(zAttributeType instanceof NoPeerAttribute) ) {
67 + return (mBackAttrib != null) ? new String[]{getAdditionalValueRelatedTo(), mBackAttrib} : super.getAdditionalValues();
68 + }
69 + return null;
70 + }
71 +
72 + @Override
73 + public void setUpView( NameValuesComponent pNameValuesComponent ) {
74 + super.setUpView( pNameValuesComponent );
75 +
76 + ObjectMetaData object = mRelatedTo.getObjectMetaData();
77 + String[] options = (object == null) ? new String[0] : object.getSortedRelatedPersistedAttributeNamesTo( !isToMany(), getOwner() );
78 + pNameValuesComponent.setOptions( AttribNamesRelatedPersisted.BACK_REF, options );
79 +
80 + pNameValuesComponent.setValue( AttribNamesRelatedPersisted.BACK_REF, getBackAttrib() );
81 + }
82 +
83 + @Override
84 + public void deleteExistingCollectChanges( ChangeHandler pChanges ) {
85 + if ( mBackAttrib != null ) {
86 + ObjectMetaData zCurRelToObject = mRelatedTo.getObjectMetaData();
87 + if ( zCurRelToObject != null ) {
88 + AttributeMetaData zCurBackAttribute = zCurRelToObject.getAttribute( mBackAttrib );
89 + if ( zCurBackAttribute == null ) {
90 + throw new RuntimeException( "Unable to locate Current " + backRefString( mBackAttrib, null ) );
91 + }
92 + if ( !(zCurBackAttribute instanceof AttributeMetaDataRelatedPersisted) ) {
93 + throw new RuntimeException( backRefString( mBackAttrib, zCurBackAttribute.getName() ) + " NOT a Persisted Relationship" );
94 + }
95 + pChanges.add( new ClearOldBackRef( (AttributeMetaDataRelatedPersisted) zCurBackAttribute ) );
96 + }
97 + }
98 + super.deleteExistingCollectChanges( pChanges );
99 + }
100 +
101 + @Override
102 + protected ChangeFragment checkNameChange( String pNewName ) {
103 + mNewName = null;
104 + return super.checkNameChange( pNewName );
105 + }
106 +
107 + @Override
108 + protected ChangeFragment createChangeNameFragment( String pNewName ) {
109 + return super.createChangeNameFragment( mNewName = pNewName );
110 + }
111 +
112 + private String mNewName = null;
113 +
114 + @Override
115 + protected void augmentSaveFromView( ChangeHandler pChanges, NameValuesComponent pNameValuesComponent, String pCurRelatedTo, ObjectMetaData pNewRelToObject ) {
116 + String zNewRelatedTo = pNewRelToObject.getName();
117 +
118 + String zCurBackRef = deNull( getBackAttrib() );
119 + String zNewBackRef = deNull( pNameValuesComponent.getValue( AttribNamesRelatedPersisted.BACK_REF ) );
120 +
121 + FundamentalAttributeType zOurFAT = this.getAttributeSet().getType().getFAT();
122 + FundamentalAttributeType zRequiredBackReferenceType = zOurFAT.getCompatibleBackReferenceType();
123 +
124 + AttributeMetaData zNewBackAttribute = null;
125 + if ( (zNewBackRef.length() != 0) && !zNewBackRef.startsWith( "!" ) ) {
126 + zNewBackAttribute = pNewRelToObject.getAttribute( zNewBackRef );
127 + if ( (null == zNewBackAttribute) ) {
128 + throw new RuntimeException( "No " + backRefString( zNewBackRef, zNewRelatedTo ) );
129 + }
130 + if ( zNewBackAttribute.isVirtual() ) {
131 + throw new RuntimeException( "Virtual " + backRefString( zNewBackRef, zNewRelatedTo ) + " are NOT allowed" );
132 + }
133 + if ( !zRequiredBackReferenceType.equals( zNewBackAttribute.getAttributeSet().getType().getFAT() ) ) {
134 + throw new RuntimeException( backRefString( zNewBackRef, zNewRelatedTo ) + " NOT a " + zRequiredBackReferenceType + " type" );
135 + }
136 + }
137 +
138 + String zNewName;
139 + if ( ((zNewName = mNewName) == null) ) {
140 + if ( areEqual( pCurRelatedTo, zNewRelatedTo ) && areEqual( zCurBackRef, zNewBackRef ) ) {
141 + return;
142 + }
143 + zNewName = getName();
144 + }
145 +
146 + if ( zCurBackRef.length() != 0 ) {
147 + ObjectMetaData zCurRelToObject = getObjectMetaData( pCurRelatedTo );
148 + AttributeMetaData zCurBackAttribute = zCurRelToObject.getAttribute( zCurBackRef );
149 + if ( zCurBackAttribute != null ) {
150 + if ( !(zCurBackAttribute instanceof AttributeMetaDataRelatedPersisted) ) {
151 + throw new RuntimeException( backRefString( zCurBackRef, pCurRelatedTo ) + " NOT a Persisted Relationship" );
152 + }
153 + pChanges.add( new ClearOldBackRef( (AttributeMetaDataRelatedPersisted) zCurBackAttribute ) );
154 + }
155 + }
156 +
157 + if ( zNewBackRef.startsWith( "!" ) ) {
158 + zNewBackRef = zNewBackRef.substring( 1 );
159 +
160 + String zError = getNameValidator().validateIdentifier( zNewBackRef, "Back Reference Attribute Name" );
161 + if ( zError != null ) {
162 + throw new RuntimeException( zError );
163 + }
164 + if ( pNewRelToObject.isUsedOwnedName( zNewBackRef ) ) {
165 + throw new RuntimeException( "New " + backRefString( zNewBackRef, zNewRelatedTo ) + " Already exists" );
166 + }
167 + switch ( zRequiredBackReferenceType ) {
168 + default: // Can't Happen!
169 + case ToMany:
170 + pChanges.add( new CreateNewToManyAttribute( pNewRelToObject, zNewBackRef, getObjectMetaData(), zNewName ) );
171 + break;
172 + case ToOne:
173 + pChanges.add( new CreateNewToOneAttribute( pNewRelToObject, zNewBackRef, getObjectMetaData(), zNewName ) );
174 + break;
175 + }
176 + } else if ( zNewBackRef.length() != 0 ) {
177 + if ( !(zNewBackAttribute instanceof AttributeMetaDataRelatedPersisted) ) {
178 + throw new RuntimeException( backRefString( zNewBackRef, zNewRelatedTo ) + " NOT a Persisted Relationship" );
179 + }
180 + pChanges.add( new ChangeBackRefOnTo( (AttributeMetaDataRelatedPersisted) zNewBackAttribute, zNewName ) );
181 + }
182 +
183 + if ( !areEqual( zCurBackRef, zNewBackRef ) ) {
184 + pChanges.add( new ChangeBackRef( zNewBackRef ) );
185 + }
186 +
187 + pChanges.add( checkRelatedToChange( pCurRelatedTo, pNewRelToObject.getName() ) );
188 +
189 + //RelatedPersisted.ChangeRelated (null->DBV2) from '|' to: |
190 + //RelatedPersisted.ChangeRelated (DbVersion) from 'DbVersion|DbTables' to: DbVersion|
191 + //RelatedPersisted.ChangeRelated (DBV2) from '|' to: |!Xyzzy2
192 + //RelatedPersisted.ChangeRelated (DbVersion) from 'DbVersion|DbTables' to: DbVersion|!xyZZy
193 + //RelatedPersisted.ChangeRelated (DbVersion) from 'DbVersion|DbTables' to: DbVersion|!.
194 + //RelatedPersisted.ChangeRelated (DbVersion) from 'DbVersion|DbTables' to: Device|
195 + //RelatedPersisted.ChangeRelated (DbVersion) from 'DbVersion|DbTables' to: DbTable|DbTables
196 + //RelatedPersisted.ChangeRelated (DbVersion) from 'DbVersion|DbTables' to: DbVersion|!Xyzzy
197 + //RelatedPersisted.ChangeRelated (DbVersion->DatabaseVersion) from 'DbVersion|DbTables' to: DbVersion|DbTables
198 + //RelatedPersisted.ChangeRelated (DatabaseVersion->DbaseVersion) from 'DbVersion|DbTables' to: DbVersion|!Xyzzy
199 +
200 + //System.out.println( "RelatedPersisted.ChangeRelated (" +
201 + // ((mNewName == null) ? getName() : getName() + "->" + mNewName) + ") " + "from '" +
202 + // pCurRelatedTo + "|" + zCurBackRef + "' " + "to: " + zNewRelatedTo + "|" +
203 + // zNewBackRef );
204 + }
205 +
206 + private String backRefString( String pNewBackRef, String pNewRelatedTo ) {
207 + return "Back Reference Attribute '" + pNewBackRef + "' on Related To '" + pNewRelatedTo + "'";
208 + }
209 +
210 + protected class ChangeBackRef implements ChangeFragment {
211 + private String mNewBackRef;
212 +
213 + public ChangeBackRef( String pNewBackRef ) {
214 + mNewBackRef = pNewBackRef;
215 + }
216 +
217 + @Override
218 + public void commitChange() {
219 + setBackAttrib( mNewBackRef );
220 + }
221 + }
222 +
223 + protected static class ChangeBackRefOnTo implements ChangeFragment {
224 + private AttributeMetaDataRelatedPersisted mNewBackAttribute;
225 + private String mNewBackRef;
226 +
227 + public ChangeBackRefOnTo( AttributeMetaDataRelatedPersisted pNewBackAttribute, String pNewBackRef ) {
228 + mNewBackAttribute = pNewBackAttribute;
229 + mNewBackRef = pNewBackRef;
230 + }
231 +
232 + @Override
233 + public void commitChange() {
234 + mNewBackAttribute.setBackAttrib( mNewBackRef );
235 + }
236 + }
237 +
238 + protected static class ClearOldBackRef implements ChangeFragment {
239 + private AttributeMetaDataRelatedPersisted mCurBackAttribute;
240 +
241 + public ClearOldBackRef( AttributeMetaDataRelatedPersisted pCurBackAttribute ) {
242 + mCurBackAttribute = pCurBackAttribute;
243 + }
244 +
245 + @Override
246 + public void commitChange() {
247 + mCurBackAttribute.setBackAttrib( null );
248 + }
249 + }
250 +
251 + protected abstract class CreateNewAttribute implements ChangeFragment {
252 + protected ObjectMetaData mNewAttributesObject;
253 + private ObjectMetaData mNewAttributesRelToObject;
254 + private String mNewAttributesName;
255 + private String mNewAttributesBackRef;
256 +
257 + public CreateNewAttribute( ObjectMetaData pNewAttributesObject, String pNewAttributesName, ObjectMetaData pNewAttributesRelToObject,
258 + String pNewAttributesBackRef ) {
259 + mNewAttributesObject = pNewAttributesObject;
260 + mNewAttributesName = pNewAttributesName;
261 + mNewAttributesRelToObject = pNewAttributesRelToObject;
262 + mNewAttributesBackRef = pNewAttributesBackRef;
263 + }
264 +
265 + @Override
266 + public void commitChange() {
267 + AttributeMetaDataRelatedPersisted zNewBackAttribute = createAttribute();
268 + zNewBackAttribute.setName( mNewAttributesName );
269 + zNewBackAttribute.setRelatedTo( mNewAttributesRelToObject.getName() );
270 + zNewBackAttribute.setBackAttrib( mNewAttributesBackRef );
271 + }
272 +
273 + abstract protected AttributeMetaDataRelatedPersisted createAttribute();
274 + }
275 +
276 + protected class CreateNewToOneAttribute extends CreateNewAttribute {
277 + public CreateNewToOneAttribute( ObjectMetaData pNewAttributesObject, String pNewAttributesName, ObjectMetaData pNewAttributesRelToObject,
278 + String pNewAttributesBackRef ) {
279 + super( pNewAttributesObject, pNewAttributesName, pNewAttributesRelToObject, pNewAttributesBackRef );
280 + }
281 +
282 + @Override
283 + protected AttributeMetaDataRelatedPersisted createAttribute() {
284 + return (AttributeMetaDataRelatedPersisted) mNewAttributesObject.createAttributeMetaData( A_ToOne.TYPE, false );
285 + }
286 + }
287 +
288 + protected class CreateNewToManyAttribute extends CreateNewAttribute {
289 + public CreateNewToManyAttribute( ObjectMetaData pNewAttributesObject, String pNewAttributesName, ObjectMetaData pNewAttributesRelToObject,
290 + String pNewAttributesBackRef ) {
291 + super( pNewAttributesObject, pNewAttributesName, pNewAttributesRelToObject, pNewAttributesBackRef );
292 + }
293 +
294 + @Override
295 + protected AttributeMetaDataRelatedPersisted createAttribute() {
296 + return (AttributeMetaDataRelatedPersisted) mNewAttributesObject.createAttributeMetaData( A_ToMany.TYPE, false );
297 + }
298 + }
299 + }