2222
2323import java .util .Map ;
2424
25- /** @author Daniel Bechler */
25+ /**
26+ * @author Daniel Bechler
27+ */
2628public final class MapEntryAccessor implements Accessor
2729{
2830 private final Object referenceKey ;
@@ -33,18 +35,53 @@ public MapEntryAccessor(final Object referenceKey)
3335 this .referenceKey = referenceKey ;
3436 }
3537
36- public Element getPathElement ( )
38+ public Object getKey ( final Map <?, ?> target )
3739 {
38- return new MapElement (referenceKey );
40+ final Map <Object , Object > map = objectToMap (target );
41+ if (map == null )
42+ {
43+ return null ;
44+ }
45+ final Object referenceKey = this .referenceKey ;
46+ for (final Object key : map .keySet ())
47+ {
48+ if (key == referenceKey || key .equals (referenceKey ))
49+ {
50+ return key ;
51+ }
52+ }
53+ return null ;
3954 }
4055
41- public void set (final Object target , final Object value )
56+ @ Override
57+ public int hashCode ()
4258 {
43- final Map <Object , Object > targetMap = objectToMap (target );
44- if (targetMap != null )
59+ return referenceKey .hashCode ();
60+ }
61+
62+ @ Override
63+ public boolean equals (final Object o )
64+ {
65+ if (this == o )
4566 {
46- targetMap . put ( referenceKey , value ) ;
67+ return true ;
4768 }
69+ if (o == null || getClass () != o .getClass ())
70+ {
71+ return false ;
72+ }
73+ return referenceKey .equals (((MapEntryAccessor ) o ).referenceKey );
74+ }
75+
76+ @ Override
77+ public String toString ()
78+ {
79+ return "map key " + getPathElement ();
80+ }
81+
82+ public Element getPathElement ()
83+ {
84+ return new MapElement (referenceKey );
4885 }
4986
5087 public Object get (final Object target )
@@ -57,18 +94,13 @@ public Object get(final Object target)
5794 return null ;
5895 }
5996
60- private static Map < Object , Object > objectToMap ( final Object object )
97+ public void set ( final Object target , final Object value )
6198 {
62- if (object == null )
63- {
64- return null ;
65- }
66- if (object instanceof Map )
99+ final Map <Object , Object > targetMap = objectToMap (target );
100+ if (targetMap != null )
67101 {
68- //noinspection unchecked
69- return (Map <Object , Object >) object ;
102+ targetMap .put (referenceKey , value );
70103 }
71- throw new IllegalArgumentException (object .getClass ().toString ());
72104 }
73105
74106 public void unset (final Object target )
@@ -80,55 +112,17 @@ public void unset(final Object target)
80112 }
81113 }
82114
83- @ Override
84- public String toString ()
85- {
86- return "map key " + getPathElement ();
87- }
88-
89- public Object getKey (final Map <?, ?> target )
115+ private static Map <Object , Object > objectToMap (final Object object )
90116 {
91- final Map <Object , Object > map = objectToMap (target );
92- if (map == null )
117+ if (object == null )
93118 {
94119 return null ;
95120 }
96- final Object referenceKey = this .referenceKey ;
97- for (final Object key : map .keySet ())
98- {
99- if (key == referenceKey || key .equals (referenceKey ))
100- {
101- return key ;
102- }
103- }
104- return null ;
105- }
106-
107- @ Override
108- public boolean equals (Object o )
109- {
110- if (this == o )
111- {
112- return true ;
113- }
114- if (o == null || getClass () != o .getClass ())
115- {
116- return false ;
117- }
118-
119- MapEntryAccessor that = (MapEntryAccessor ) o ;
120-
121- if (referenceKey != null ? !referenceKey .equals (that .referenceKey ) : that .referenceKey != null )
121+ if (object instanceof Map )
122122 {
123- return false ;
123+ //noinspection unchecked
124+ return (Map <Object , Object >) object ;
124125 }
125-
126- return true ;
127- }
128-
129- @ Override
130- public int hashCode ()
131- {
132- return referenceKey != null ? referenceKey .hashCode () : 0 ;
126+ throw new IllegalArgumentException (object .getClass ().toString ());
133127 }
134128}
0 commit comments