|
|
@@ -353,7 +353,59 @@ public class RBeanModel implements BeanModel, Serializable {
|
|
|
return s.arguments().types().first().get();
|
|
|
}
|
|
|
|
|
|
- throw FBeanModel.newUnsupportedOperationException("No property with name " + key);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BeanPropertyBinding<Object> getBinding(String key) {
|
|
|
+ if(properties.containsKey(key)) {
|
|
|
+ return properties.get(key).bind(that);
|
|
|
+ }
|
|
|
+ if(fluentGet.containsKey(key) || fluentSet.containsKey(key)) {
|
|
|
+ return new RFluentBinding(key);
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequiredArgsConstructor
|
|
|
+ private class RFluentBinding implements BeanPropertyBinding<Object> {
|
|
|
+
|
|
|
+ private final String name;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public IClass<?> type() {
|
|
|
+ return RFluentMap.this.getType(name);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Object get() {
|
|
|
+ return RFluentMap.this.get(name);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void set(Object value) {
|
|
|
+ RFluentMap.this.put(name, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Object object() {
|
|
|
+ return RFluentMap.this.that;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String name() {
|
|
|
+ return name;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean isReadable() {
|
|
|
+ return fluentGet.containsKey(name);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean isWritable() {
|
|
|
+ return fluentSet.containsKey(name);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|