Subversion Repository Public Repository

litesoft

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

Diff revisions: vs.
  @@ -1,144 +1,144 @@
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 abstract class AttributeMetaDataRelated extends AttributeMetaData {
9 - /**
10 - * null means related to self (owning object)
11 - */
12 - protected final ObjectProxy mRelatedTo;
13 -
14 - protected AttributeMetaDataRelated( AttributeSet pAttributeSet, Mode pMode, boolean pEditable, boolean pVirtual, PropertyMetaData[] pPropertyMetaDatas,
15 - IdentifierValidator pNameValidator, String pName ) {
16 - super( pAttributeSet, pMode, pEditable, pVirtual, pPropertyMetaDatas, pNameValidator, pName );
17 -
18 - mRelatedTo = new ObjectProxy( this, "Relate to" );
19 - }
20 -
21 - public boolean isToMany() {
22 - return A_ToMany.TYPE.equals( getAttributeSet().getType() );
23 - }
24 -
25 - @Override
26 - public boolean isRelated() {
27 - return true;
28 - }
29 -
30 - public String getRelatedTo() {
31 - return mRelatedTo.getObjectName();
32 - }
33 -
34 - public void unpersistRelatedTo( String pRelatedToName ) {
35 - chkUnhappyCase( updateRelatedTo( pRelatedToName ) );
36 - }
37 -
38 - /**
39 - * @return null or Error
40 - */
41 - public String setRelatedTo( String pRelatedToName ) {
42 - verifyEditability();
43 - return updateRelatedTo( pRelatedToName );
44 - }
45 -
46 - /**
47 - * @return null or Error
48 - */
49 - protected String updateRelatedTo( String pRelatedToName ) {
50 - ObjectMetaData zOwner = getOwner();
51 - try {
52 - if ( mRelatedTo.setObjectName( pRelatedToName, zOwner, null ) ) {
53 - changed();
54 - }
55 - return null;
56 - }
57 - catch ( IllegalArgumentException e ) {
58 - return e.getMessage();
59 - }
60 - }
61 -
62 - @Override
63 - public void setRehydrated() {
64 - ObjectMetaData zOwner = getOwner();
65 - mRelatedTo.unpersistFini( getSystemMetaData(), zOwner.getNameValidator(), zOwner, null );
66 - super.setRehydrated();
67 - }
68 -
69 - @Override
70 - protected String[] getAdditionalValues() {
71 - return new String[]{getAdditionalValueRelatedTo()};
72 - }
73 -
74 - protected String getAdditionalValueRelatedTo() {
75 - String zRelatedTo = getRelatedTo();
76 - return (zRelatedTo == null) || ObjectNames.VARIES_RELATED_TO.equals( zRelatedTo ) ? "" : zRelatedTo;
77 - }
78 -
79 - public boolean isRelatedTo( ObjectMetaData pToObject ) {
80 - return areEqual( pToObject, mRelatedTo.getObjectMetaData() );
81 - }
82 -
83 - @Override
84 - public void setUpView( NameValuesComponent pNameValuesComponent ) {
85 - super.setUpView( pNameValuesComponent );
86 -
87 - pNameValuesComponent.setValue( AttribNamesRelated.RELATED_TO, getRelatedTo() );
88 - if ( isEditable() ) {
89 - pNameValuesComponent.setOptions( AttribNamesRelated.RELATED_TO, //
90 - getObjectMetaData().getPotentialRelateToObjectNamesFor( getAttributeSet(), isVirtual() ) );
91 - }
92 - }
93 -
94 - @Override
95 - protected void saveFromViewCollectChanges( ChangeHandler pChanges, NameValuesComponent pNameValuesComponent ) {
96 - super.saveFromViewCollectChanges( pChanges, pNameValuesComponent );
97 -
98 - String zCurRelatedTo = deNull( getRelatedTo() );
99 - String zNewRelatedTo = deNull( pNameValuesComponent.getValue( AttribNamesRelated.RELATED_TO ) );
100 - ObjectMetaData zNewRelToObject = getObjectMetaData( zNewRelatedTo );
101 -
102 - augmentSaveFromView( pChanges, pNameValuesComponent, zCurRelatedTo, zNewRelToObject );
103 - }
104 -
105 - @Override
106 - public void clearRelatedToIf( ObjectMetaData pObjectMetaData, ChangeHandler pChanges ) {
107 - if ( mRelatedTo.getObjectMetaData() == pObjectMetaData ) // Note Identity ==
108 - {
109 - pChanges.add( new ChangeRelatedTo( null ) );
110 - }
111 - }
112 -
113 - protected ObjectMetaData getObjectMetaData( String pRelatedTo ) {
114 - if ( pRelatedTo.length() == 0 ) {
115 - return getObjectMetaData();
116 - }
117 - ObjectMetaData zObjectMetaData = getSystemMetaData().getObject( pRelatedTo );
118 - if ( zObjectMetaData != null ) {
119 - return zObjectMetaData;
120 - }
121 - throw new RuntimeException( "Unable to locate 'Related To' Object: " + pRelatedTo );
122 - }
123 -
124 - protected void augmentSaveFromView( ChangeHandler pChanges, NameValuesComponent pNameValuesComponent, String pCurRelatedTo, ObjectMetaData pNewRelToObject ) {
125 - pChanges.add( checkRelatedToChange( pCurRelatedTo, pNewRelToObject.getName() ) );
126 - }
127 -
128 - protected ChangeFragment checkRelatedToChange( String pCurRelatedTo, String pNewRelatedTo ) {
129 - return !areEqual( pCurRelatedTo, pNewRelatedTo ) ? new ChangeRelatedTo( pNewRelatedTo ) : null;
130 - }
131 -
132 - protected class ChangeRelatedTo implements ChangeFragment {
133 - private String mNewRelatedTo;
134 -
135 - public ChangeRelatedTo( String pNewRelatedTo ) {
136 - mNewRelatedTo = pNewRelatedTo;
137 - }
138 -
139 - @Override
140 - public void commitChange() {
141 - setRelatedTo( mNewRelatedTo );
142 - }
143 - }
144 - }
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 abstract class AttributeMetaDataRelated extends AttributeMetaData {
9 + /**
10 + * null means related to self (owning object)
11 + */
12 + protected final ObjectProxy mRelatedTo;
13 +
14 + protected AttributeMetaDataRelated( AttributeSet pAttributeSet, Mode pMode, boolean pEditable, boolean pVirtual, PropertyMetaData[] pPropertyMetaDatas,
15 + IdentifierValidator pNameValidator, String pName ) {
16 + super( pAttributeSet, pMode, pEditable, pVirtual, pPropertyMetaDatas, pNameValidator, pName );
17 +
18 + mRelatedTo = new ObjectProxy( this, "Relate to" );
19 + }
20 +
21 + public boolean isToMany() {
22 + return A_ToMany.TYPE.equals( getAttributeSet().getType() );
23 + }
24 +
25 + @Override
26 + public boolean isRelated() {
27 + return true;
28 + }
29 +
30 + public String getRelatedTo() {
31 + return mRelatedTo.getObjectName();
32 + }
33 +
34 + public void unpersistRelatedTo( String pRelatedToName ) {
35 + chkUnhappyCase( updateRelatedTo( pRelatedToName ) );
36 + }
37 +
38 + /**
39 + * @return null or Error
40 + */
41 + public String setRelatedTo( String pRelatedToName ) {
42 + verifyEditability();
43 + return updateRelatedTo( pRelatedToName );
44 + }
45 +
46 + /**
47 + * @return null or Error
48 + */
49 + protected String updateRelatedTo( String pRelatedToName ) {
50 + ObjectMetaData zOwner = getOwner();
51 + try {
52 + if ( mRelatedTo.setObjectName( pRelatedToName, zOwner, null ) ) {
53 + changed();
54 + }
55 + return null;
56 + }
57 + catch ( IllegalArgumentException e ) {
58 + return e.getMessage();
59 + }
60 + }
61 +
62 + @Override
63 + public void setRehydrated() {
64 + ObjectMetaData zOwner = getOwner();
65 + mRelatedTo.unpersistFini( getSystemMetaData(), zOwner.getNameValidator(), zOwner, null );
66 + super.setRehydrated();
67 + }
68 +
69 + @Override
70 + protected String[] getAdditionalValues() {
71 + return new String[]{getAdditionalValueRelatedTo()};
72 + }
73 +
74 + protected String getAdditionalValueRelatedTo() {
75 + String zRelatedTo = getRelatedTo();
76 + return (zRelatedTo == null) || ObjectNames.VARIES_RELATED_TO.equals( zRelatedTo ) ? "" : zRelatedTo;
77 + }
78 +
79 + public boolean isRelatedTo( ObjectMetaData pToObject ) {
80 + return areEqual( pToObject, mRelatedTo.getObjectMetaData() );
81 + }
82 +
83 + @Override
84 + public void setUpView( NameValuesComponent pNameValuesComponent ) {
85 + super.setUpView( pNameValuesComponent );
86 +
87 + pNameValuesComponent.setValue( AttribNamesRelated.RELATED_TO, getRelatedTo() );
88 + if ( isEditable() ) {
89 + pNameValuesComponent.setOptions( AttribNamesRelated.RELATED_TO, //
90 + getObjectMetaData().getPotentialRelateToObjectNamesFor( getAttributeSet(), isVirtual() ) );
91 + }
92 + }
93 +
94 + @Override
95 + protected void saveFromViewCollectChanges( ChangeHandler pChanges, NameValuesComponent pNameValuesComponent ) {
96 + super.saveFromViewCollectChanges( pChanges, pNameValuesComponent );
97 +
98 + String zCurRelatedTo = deNull( getRelatedTo() );
99 + String zNewRelatedTo = deNull( pNameValuesComponent.getValue( AttribNamesRelated.RELATED_TO ) );
100 + ObjectMetaData zNewRelToObject = getObjectMetaData( zNewRelatedTo );
101 +
102 + augmentSaveFromView( pChanges, pNameValuesComponent, zCurRelatedTo, zNewRelToObject );
103 + }
104 +
105 + @Override
106 + public void clearRelatedToIf( ObjectMetaData pObjectMetaData, ChangeHandler pChanges ) {
107 + if ( mRelatedTo.getObjectMetaData() == pObjectMetaData ) // Note Identity ==
108 + {
109 + pChanges.add( new ChangeRelatedTo( null ) );
110 + }
111 + }
112 +
113 + protected ObjectMetaData getObjectMetaData( String pRelatedTo ) {
114 + if ( pRelatedTo.length() == 0 ) {
115 + return getObjectMetaData();
116 + }
117 + ObjectMetaData zObjectMetaData = getSystemMetaData().getObject( pRelatedTo );
118 + if ( zObjectMetaData != null ) {
119 + return zObjectMetaData;
120 + }
121 + throw new RuntimeException( "Unable to locate 'Related To' Object: " + pRelatedTo );
122 + }
123 +
124 + protected void augmentSaveFromView( ChangeHandler pChanges, NameValuesComponent pNameValuesComponent, String pCurRelatedTo, ObjectMetaData pNewRelToObject ) {
125 + pChanges.add( checkRelatedToChange( pCurRelatedTo, pNewRelToObject.getName() ) );
126 + }
127 +
128 + protected ChangeFragment checkRelatedToChange( String pCurRelatedTo, String pNewRelatedTo ) {
129 + return !areEqual( pCurRelatedTo, pNewRelatedTo ) ? new ChangeRelatedTo( pNewRelatedTo ) : null;
130 + }
131 +
132 + protected class ChangeRelatedTo implements ChangeFragment {
133 + private String mNewRelatedTo;
134 +
135 + public ChangeRelatedTo( String pNewRelatedTo ) {
136 + mNewRelatedTo = pNewRelatedTo;
137 + }
138 +
139 + @Override
140 + public void commitChange() {
141 + setRelatedTo( mNewRelatedTo );
142 + }
143 + }
144 + }