• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License").
5  * You may not use this file except in compliance with the License.
6  * A copy of the License is located at
7  *
8  *  http://aws.amazon.com/apache2.0
9  *
10  * or in the "license" file accompanying this file. This file is distributed
11  * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12  * express or implied. See the License for the specific language governing
13  * permissions and limitations under the License.
14  */
15 
16 package software.amazon.awssdk.benchmark.enhanced.dynamodb;
17 
18 import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
19 import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
20 import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;
21 import com.amazonaws.services.dynamodbv2.model.AttributeValue;
22 import com.amazonaws.util.ImmutableMapParameter;
23 import java.lang.reflect.Method;
24 import java.nio.ByteBuffer;
25 import java.util.List;
26 import java.util.Map;
27 import java.util.stream.Collectors;
28 import software.amazon.awssdk.core.SdkBytes;
29 
30 public final class V1ItemFactory extends ItemFactory<AttributeValue> {
v1hugeBean()31     public V1HugeBean v1hugeBean() {
32         return V1HugeBean.fromHugeBean(super.hugeBean());
33     }
34 
v1TinyBean()35     public V1TinyBean v1TinyBean() {
36         return V1TinyBean.fromTinyBean(super.tinyBean());
37     }
38 
v1SmallBean()39     public V1SmallBean v1SmallBean() {
40         return V1SmallBean.fromSmallBean(super.smallBean());
41     }
42 
v1HugeBeanFlat()43     public V1HugeBeanFlat v1HugeBeanFlat() {
44         return V1HugeBeanFlat.fromHugeBeanFlat(super.hugeBeanFlat());
45     }
46 
47     @Override
asItem(TinyBean b)48     protected Map<String, AttributeValue> asItem(TinyBean b) {
49         ImmutableMapParameter.Builder<String, AttributeValue> builder = ImmutableMapParameter.builder();
50 
51         builder.put("stringAttr", av(b.getStringAttr()));
52 
53         return builder.build();
54     }
55 
56     @Override
asItem(SmallBean b)57     protected Map<String, AttributeValue> asItem(SmallBean b) {
58         ImmutableMapParameter.Builder<String, AttributeValue> builder = ImmutableMapParameter.builder();
59 
60         builder.put("stringAttr", av(b.getStringAttr()));
61         builder.put("binaryAttr", av(b.getBinaryAttr()));
62 
63         List<AttributeValue> listAttr = b.getListAttr().stream().map(this::av).collect(Collectors.toList());
64 
65         builder.put("listAttr", av(listAttr));
66 
67         return builder.build();
68     }
69 
70     @Override
asItem(HugeBean b)71     protected Map<String, AttributeValue> asItem(HugeBean b) {
72         ImmutableMapParameter.Builder<String, AttributeValue> builder = ImmutableMapParameter.builder();
73 
74         builder.put("hashKey", av(b.getHashKey()));
75         builder.put("stringAttr", av(b.getStringAttr()));
76         builder.put("binaryAttr", av(b.getBinaryAttr()));
77 
78         List<AttributeValue> listAttr = b.getListAttr().stream().map(this::av).collect(Collectors.toList());
79 
80         builder.put("listAttr", av(listAttr));
81 
82         Map<String, AttributeValue> mapAttr1 = b.getMapAttr1().entrySet().stream().collect(
83                 Collectors.toMap(Map.Entry::getKey,
84                     e -> av(e.getValue())));
85 
86         builder.put("mapAttr1", av(mapAttr1));
87 
88 
89         Map<String, AttributeValue> mapAttr2 = b.getMapAttr2().entrySet().stream().collect(
90                 Collectors.toMap(Map.Entry::getKey,
91                     e -> av(e.getValue().stream().map(this::av).collect(Collectors.toList()))));
92 
93         builder.put("mapAttr2", av(mapAttr2));
94 
95         Map<String, AttributeValue> mapAttr3 = b.getMapAttr3().entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey,
96             e -> {
97                 List<Map<String, List<SdkBytes>>> value = e.getValue();
98                 AttributeValue valueAv = av(value.stream().map(m -> av(m.entrySet().stream()
99                         .collect(Collectors.toMap(Map.Entry::getKey,
100                             ee -> av(ee.getValue().stream().map(this::av).collect(Collectors.toList()))))))
101                         .collect(Collectors.toList()));
102                 return valueAv;
103             }));
104 
105         builder.put("mapAttr3", av(mapAttr3));
106 
107         return builder.build();
108     }
109 
110     @Override
av(String val)111     protected AttributeValue av(String val) {
112         return new AttributeValue()
113                 .withS(val);
114     }
115 
116     @Override
av(List<AttributeValue> val)117     protected AttributeValue av(List<AttributeValue> val) {
118         return new AttributeValue()
119                 .withL(val);
120     }
121 
122     @Override
av(Map<String, AttributeValue> val)123     protected AttributeValue av(Map<String, AttributeValue> val) {
124         return new AttributeValue()
125                 .withM(val);
126     }
127 
128     @Override
av(SdkBytes val)129     protected AttributeValue av(SdkBytes val) {
130         return new AttributeValue()
131                 .withB(val.asByteBuffer());
132     }
133 
134     @DynamoDBTable(tableName = "V1TinyBean")
135     public static class V1TinyBean extends ItemFactory.TinyBean {
V1TinyBean()136         public V1TinyBean() {
137         }
138 
V1TinyBean(String stringAttr)139         public V1TinyBean(String stringAttr) {
140             super.setStringAttr(stringAttr);
141         }
142 
143         @DynamoDBHashKey
144         @Override
getStringAttr()145         public String getStringAttr() {
146             return super.getStringAttr();
147         }
148 
fromTinyBean(TinyBean tb)149         private static V1TinyBean fromTinyBean(TinyBean tb) {
150             V1TinyBean b = new V1TinyBean();
151             b.setStringAttr(tb.getStringAttr());
152             return b;
153         }
154     }
155 
156     @DynamoDBTable(tableName = "V1SmallBean")
157     public static class V1SmallBean extends ItemFactory.SmallBean {
158         private ByteBuffer binaryAttr;
159 
V1SmallBean()160         public V1SmallBean() {
161         }
162 
V1SmallBean(String stringAttr)163         public V1SmallBean(String stringAttr) {
164             super.setStringAttr(stringAttr);
165         }
166 
167         @DynamoDBHashKey
168         @Override
getStringAttr()169         public String getStringAttr() {
170             return super.getStringAttr();
171         }
172 
173         @DynamoDBAttribute(attributeName = "binaryAttr")
getBinaryAttrV1()174         public ByteBuffer getBinaryAttrV1() {
175             return binaryAttr;
176         }
177 
178         @DynamoDBAttribute(attributeName = "binaryAttr")
setBinaryAttrV1(ByteBuffer binaryAttr)179         public void setBinaryAttrV1(ByteBuffer binaryAttr) {
180             this.binaryAttr = binaryAttr;
181         }
182 
183         @DynamoDBAttribute
184         @Override
getListAttr()185         public List<String> getListAttr() {
186             return super.getListAttr();
187         }
188 
fromSmallBean(SmallBean sb)189         private static V1SmallBean fromSmallBean(SmallBean sb) {
190             V1SmallBean b = new V1SmallBean();
191             b.setStringAttr(sb.getStringAttr());
192             b.setBinaryAttrV1(sb.getBinaryAttr().asByteBuffer());
193             b.setListAttr(sb.getListAttr());
194             return b;
195         }
196     }
197 
198     @DynamoDBTable(tableName = "V1HugeBean")
199     public static class V1HugeBean extends ItemFactory.HugeBean {
200         private ByteBuffer binaryAttr;
201         private Map<String, ByteBuffer> mapAttr1;
202         private Map<String, List<ByteBuffer>> mapAttr2;
203         private Map<String, List<Map<String, List<ByteBuffer>>>> mapAttr3;
204 
V1HugeBean()205         public V1HugeBean() {
206         }
207 
V1HugeBean(String stringAttr)208         public V1HugeBean(String stringAttr) {
209             super.setStringAttr(stringAttr);
210         }
211 
212         @DynamoDBHashKey
213         @Override
getStringAttr()214         public String getStringAttr() {
215             return super.getStringAttr();
216         }
217 
218         @DynamoDBAttribute
219         @Override
getHashKey()220         public String getHashKey() {
221             return super.getHashKey();
222         }
223 
224         @DynamoDBAttribute(attributeName = "binaryAttr")
getBinaryAttrV1()225         public ByteBuffer getBinaryAttrV1() {
226             return binaryAttr;
227         }
228 
229         @DynamoDBAttribute(attributeName = "binaryAttr")
setBinaryAttrV1(ByteBuffer binaryAttr)230         public void setBinaryAttrV1(ByteBuffer binaryAttr) {
231             this.binaryAttr = binaryAttr;
232         }
233 
234         @DynamoDBAttribute
235         @Override
getListAttr()236         public List<String> getListAttr() {
237             return super.getListAttr();
238         }
239 
240         @DynamoDBAttribute(attributeName = "mapAttr1")
getMapAttr1V1()241         public Map<String, ByteBuffer> getMapAttr1V1() {
242             return mapAttr1;
243         }
244 
245         @DynamoDBAttribute(attributeName = "mapAttr1")
setMapAttr1V1(Map<String, ByteBuffer> mapAttr1)246         public void setMapAttr1V1(Map<String, ByteBuffer> mapAttr1) {
247             this.mapAttr1 = mapAttr1;
248         }
249 
250         @DynamoDBAttribute(attributeName = "mapAttr2")
getMapAttr2V1()251         public Map<String, List<ByteBuffer>> getMapAttr2V1() {
252             return mapAttr2;
253         }
254 
255         @DynamoDBAttribute(attributeName = "mapAttr2")
setMapAttr2V1(Map<String, List<ByteBuffer>> mapAttr2)256         public void setMapAttr2V1(Map<String, List<ByteBuffer>> mapAttr2) {
257             this.mapAttr2 = mapAttr2;
258         }
259 
260         @DynamoDBAttribute(attributeName = "mapAttr3")
getMapAttr3V1()261         public Map<String, List<Map<String, List<ByteBuffer>>>> getMapAttr3V1() {
262             return mapAttr3;
263         }
264 
265         @DynamoDBAttribute(attributeName = "mapAttr3")
setMapAttr3V1(Map<String, List<Map<String, List<ByteBuffer>>>> mapAttr3)266         public void setMapAttr3V1(Map<String, List<Map<String, List<ByteBuffer>>>> mapAttr3) {
267             this.mapAttr3 = mapAttr3;
268         }
269 
fromHugeBean(HugeBean hb)270         private static V1HugeBean fromHugeBean(HugeBean hb) {
271             V1HugeBean b = new V1HugeBean();
272             b.setHashKey(hb.getHashKey());
273             b.setStringAttr(hb.getStringAttr());
274             b.setBinaryAttrV1(hb.getBinaryAttr().asByteBuffer());
275             b.setListAttr(hb.getListAttr());
276 
277             b.setMapAttr1V1(hb.getMapAttr1()
278                     .entrySet().stream()
279                     .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().asByteBuffer())));
280 
281             b.setMapAttr2V1(hb.getMapAttr2()
282                     .entrySet().stream()
283                     .collect(Collectors.toMap(Map.Entry::getKey,
284                         e -> e.getValue().stream().map(SdkBytes::asByteBuffer).collect(Collectors.toList()))));
285 
286             Map<String, List<Map<String, List<ByteBuffer>>>> mapAttr3V1 = hb.getMapAttr3()
287                     .entrySet().stream()
288                     .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().stream()
289                             .map(m -> m.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, ee ->
290                                     ee.getValue().stream().map(SdkBytes::asByteBuffer).collect(Collectors.toList())
291                             )))
292                             .collect(Collectors.toList())));
293 
294             b.setMapAttr3V1(mapAttr3V1);
295 
296             return b;
297         }
298     }
299 
300     @DynamoDBTable(tableName = "V1HugeBeanFlat")
301     public static class V1HugeBeanFlat extends HugeBeanFlat {
V1HugeBeanFlat()302         public V1HugeBeanFlat() {
303         }
304 
V1HugeBeanFlat(String stringAttr)305         public V1HugeBeanFlat(String stringAttr) {
306             this.setStringAttr1(stringAttr);
307         }
308 
309         @DynamoDBAttribute(attributeName = "stringAttr1")
310         @DynamoDBHashKey
311         @Override
getStringAttr1()312         public String getStringAttr1() {
313             return super.getStringAttr1();
314         }
315 
316         @DynamoDBAttribute(attributeName = "stringAttr2")
317         @Override
getStringAttr2()318         public String getStringAttr2() {
319             return super.getStringAttr2();
320         }
321 
322         @DynamoDBAttribute(attributeName = "stringAttr3")
323         @Override
getStringAttr3()324         public String getStringAttr3() {
325             return super.getStringAttr3();
326         }
327 
328         @DynamoDBAttribute(attributeName = "stringAttr4")
329         @Override
getStringAttr4()330         public String getStringAttr4() {
331             return super.getStringAttr4();
332         }
333 
334         @DynamoDBAttribute(attributeName = "stringAttr5")
335         @Override
getStringAttr5()336         public String getStringAttr5() {
337             return super.getStringAttr5();
338         }
339 
340         @DynamoDBAttribute(attributeName = "stringAttr6")
341         @Override
getStringAttr6()342         public String getStringAttr6() {
343             return super.getStringAttr6();
344         }
345 
346         @DynamoDBAttribute(attributeName = "stringAttr7")
347         @Override
getStringAttr7()348         public String getStringAttr7() {
349             return super.getStringAttr7();
350         }
351 
352         @DynamoDBAttribute(attributeName = "stringAttr8")
353         @Override
getStringAttr8()354         public String getStringAttr8() {
355             return super.getStringAttr8();
356         }
357 
358         @DynamoDBAttribute(attributeName = "stringAttr9")
359         @Override
getStringAttr9()360         public String getStringAttr9() {
361             return super.getStringAttr9();
362         }
363 
364         @DynamoDBAttribute(attributeName = "stringAttr10")
365         @Override
getStringAttr10()366         public String getStringAttr10() {
367             return super.getStringAttr10();
368         }
369 
370         @DynamoDBAttribute(attributeName = "stringAttr11")
371         @Override
getStringAttr11()372         public String getStringAttr11() {
373             return super.getStringAttr11();
374         }
375 
376         @DynamoDBAttribute(attributeName = "stringAttr12")
377         @Override
getStringAttr12()378         public String getStringAttr12() {
379             return super.getStringAttr12();
380         }
381 
382         @DynamoDBAttribute(attributeName = "stringAttr13")
383         @Override
getStringAttr13()384         public String getStringAttr13() {
385             return super.getStringAttr13();
386         }
387 
388         @DynamoDBAttribute(attributeName = "stringAttr14")
389         @Override
getStringAttr14()390         public String getStringAttr14() {
391             return super.getStringAttr14();
392         }
393 
394         @DynamoDBAttribute(attributeName = "stringAttr15")
395         @Override
getStringAttr15()396         public String getStringAttr15() {
397             return super.getStringAttr15();
398         }
399 
400         @DynamoDBAttribute(attributeName = "stringAttr16")
401         @Override
getStringAttr16()402         public String getStringAttr16() {
403             return super.getStringAttr16();
404         }
405 
406         @DynamoDBAttribute(attributeName = "stringAttr17")
407         @Override
getStringAttr17()408         public String getStringAttr17() {
409             return super.getStringAttr17();
410         }
411 
412         @DynamoDBAttribute(attributeName = "stringAttr18")
413         @Override
getStringAttr18()414         public String getStringAttr18() {
415             return super.getStringAttr18();
416         }
417 
418         @DynamoDBAttribute(attributeName = "stringAttr19")
419         @Override
getStringAttr19()420         public String getStringAttr19() {
421             return super.getStringAttr19();
422         }
423 
424         @DynamoDBAttribute(attributeName = "stringAttr20")
425         @Override
getStringAttr20()426         public String getStringAttr20() {
427             return super.getStringAttr20();
428         }
429 
430         @DynamoDBAttribute(attributeName = "stringAttr21")
431         @Override
getStringAttr21()432         public String getStringAttr21() {
433             return super.getStringAttr21();
434         }
435 
436         @DynamoDBAttribute(attributeName = "stringAttr22")
437         @Override
getStringAttr22()438         public String getStringAttr22() {
439             return super.getStringAttr22();
440         }
441 
442         @DynamoDBAttribute(attributeName = "stringAttr23")
443         @Override
getStringAttr23()444         public String getStringAttr23() {
445             return super.getStringAttr23();
446         }
447 
448         @DynamoDBAttribute(attributeName = "stringAttr24")
449         @Override
getStringAttr24()450         public String getStringAttr24() {
451             return super.getStringAttr24();
452         }
453 
454         @DynamoDBAttribute(attributeName = "stringAttr25")
455         @Override
getStringAttr25()456         public String getStringAttr25() {
457             return super.getStringAttr25();
458         }
459 
460         @DynamoDBAttribute(attributeName = "stringAttr26")
461         @Override
getStringAttr26()462         public String getStringAttr26() {
463             return super.getStringAttr26();
464         }
465 
466         @DynamoDBAttribute(attributeName = "stringAttr27")
467         @Override
getStringAttr27()468         public String getStringAttr27() {
469             return super.getStringAttr27();
470         }
471 
472         @DynamoDBAttribute(attributeName = "stringAttr28")
473         @Override
getStringAttr28()474         public String getStringAttr28() {
475             return super.getStringAttr28();
476         }
477 
478         @DynamoDBAttribute(attributeName = "stringAttr29")
479         @Override
getStringAttr29()480         public String getStringAttr29() {
481             return super.getStringAttr29();
482         }
483 
484         @DynamoDBAttribute(attributeName = "stringAttr30")
485         @Override
getStringAttr30()486         public String getStringAttr30() {
487             return super.getStringAttr30();
488         }
489 
490         @DynamoDBAttribute(attributeName = "stringAttr31")
491         @Override
getStringAttr31()492         public String getStringAttr31() {
493             return super.getStringAttr31();
494         }
495 
496         @DynamoDBAttribute(attributeName = "stringAttr32")
497         @Override
getStringAttr32()498         public String getStringAttr32() {
499             return super.getStringAttr32();
500         }
501 
502         @DynamoDBAttribute(attributeName = "stringAttr33")
503         @Override
getStringAttr33()504         public String getStringAttr33() {
505             return super.getStringAttr33();
506         }
507 
508         @DynamoDBAttribute(attributeName = "stringAttr34")
509         @Override
getStringAttr34()510         public String getStringAttr34() {
511             return super.getStringAttr34();
512         }
513 
514         @DynamoDBAttribute(attributeName = "stringAttr35")
515         @Override
getStringAttr35()516         public String getStringAttr35() {
517             return super.getStringAttr35();
518         }
519 
520         @DynamoDBAttribute(attributeName = "stringAttr36")
521         @Override
getStringAttr36()522         public String getStringAttr36() {
523             return super.getStringAttr36();
524         }
525 
526         @DynamoDBAttribute(attributeName = "stringAttr37")
527         @Override
getStringAttr37()528         public String getStringAttr37() {
529             return super.getStringAttr37();
530         }
531 
532         @DynamoDBAttribute(attributeName = "stringAttr38")
533         @Override
getStringAttr38()534         public String getStringAttr38() {
535             return super.getStringAttr38();
536         }
537 
538         @DynamoDBAttribute(attributeName = "stringAttr39")
539         @Override
getStringAttr39()540         public String getStringAttr39() {
541             return super.getStringAttr39();
542         }
543 
544         @DynamoDBAttribute(attributeName = "stringAttr40")
545         @Override
getStringAttr40()546         public String getStringAttr40() {
547             return super.getStringAttr40();
548         }
549 
550         @DynamoDBAttribute(attributeName = "stringAttr41")
551         @Override
getStringAttr41()552         public String getStringAttr41() {
553             return super.getStringAttr41();
554         }
555 
556         @DynamoDBAttribute(attributeName = "stringAttr42")
557         @Override
getStringAttr42()558         public String getStringAttr42() {
559             return super.getStringAttr42();
560         }
561 
562         @DynamoDBAttribute(attributeName = "stringAttr43")
563         @Override
getStringAttr43()564         public String getStringAttr43() {
565             return super.getStringAttr43();
566         }
567 
568         @DynamoDBAttribute(attributeName = "stringAttr44")
569         @Override
getStringAttr44()570         public String getStringAttr44() {
571             return super.getStringAttr44();
572         }
573 
574         @DynamoDBAttribute(attributeName = "stringAttr45")
575         @Override
getStringAttr45()576         public String getStringAttr45() {
577             return super.getStringAttr45();
578         }
579 
580         @DynamoDBAttribute(attributeName = "stringAttr46")
581         @Override
getStringAttr46()582         public String getStringAttr46() {
583             return super.getStringAttr46();
584         }
585 
586         @DynamoDBAttribute(attributeName = "stringAttr47")
587         @Override
getStringAttr47()588         public String getStringAttr47() {
589             return super.getStringAttr47();
590         }
591 
592         @DynamoDBAttribute(attributeName = "stringAttr48")
593         @Override
getStringAttr48()594         public String getStringAttr48() {
595             return super.getStringAttr48();
596         }
597 
598         @DynamoDBAttribute(attributeName = "stringAttr49")
599         @Override
getStringAttr49()600         public String getStringAttr49() {
601             return super.getStringAttr49();
602         }
603 
604         @DynamoDBAttribute(attributeName = "stringAttr50")
605         @Override
getStringAttr50()606         public String getStringAttr50() {
607             return super.getStringAttr50();
608         }
609 
610         @DynamoDBAttribute(attributeName = "stringAttr51")
611         @Override
getStringAttr51()612         public String getStringAttr51() {
613             return super.getStringAttr51();
614         }
615 
616         @DynamoDBAttribute(attributeName = "stringAttr52")
617         @Override
getStringAttr52()618         public String getStringAttr52() {
619             return super.getStringAttr52();
620         }
621 
622         @DynamoDBAttribute(attributeName = "stringAttr53")
623         @Override
getStringAttr53()624         public String getStringAttr53() {
625             return super.getStringAttr53();
626         }
627 
628         @Override
629         @DynamoDBAttribute(attributeName = "stringAttr54")
getStringAttr54()630         public String getStringAttr54() {
631             return super.getStringAttr54();
632         }
633 
634         @DynamoDBAttribute(attributeName = "stringAttr55")
635         @Override
getStringAttr55()636         public String getStringAttr55() {
637             return super.getStringAttr55();
638         }
639 
640         @DynamoDBAttribute(attributeName = "stringAttr56")
641         @Override
getStringAttr56()642         public String getStringAttr56() {
643             return super.getStringAttr56();
644         }
645 
646         @DynamoDBAttribute(attributeName = "stringAttr57")
647         @Override
getStringAttr57()648         public String getStringAttr57() {
649             return super.getStringAttr57();
650         }
651 
652         @DynamoDBAttribute(attributeName = "stringAttr58")
653         @Override
getStringAttr58()654         public String getStringAttr58() {
655             return super.getStringAttr58();
656         }
657 
658         @DynamoDBAttribute(attributeName = "stringAttr59")
659         @Override
getStringAttr59()660         public String getStringAttr59() {
661             return super.getStringAttr59();
662         }
663 
664         @DynamoDBAttribute(attributeName = "stringAttr60")
665         @Override
getStringAttr60()666         public String getStringAttr60() {
667             return super.getStringAttr60();
668         }
669 
670         @DynamoDBAttribute(attributeName = "stringAttr61")
671         @Override
getStringAttr61()672         public String getStringAttr61() {
673             return super.getStringAttr61();
674         }
675 
676         @DynamoDBAttribute(attributeName = "stringAttr62")
677         @Override
getStringAttr62()678         public String getStringAttr62() {
679             return super.getStringAttr62();
680         }
681 
682         @DynamoDBAttribute(attributeName = "stringAttr63")
683         @Override
getStringAttr63()684         public String getStringAttr63() {
685             return super.getStringAttr63();
686         }
687 
fromHugeBeanFlat(HugeBeanFlat b)688         public static V1HugeBeanFlat fromHugeBeanFlat(HugeBeanFlat b) {
689             V1HugeBeanFlat bean = new V1HugeBeanFlat();
690             for (int i = 1; i <= 63; ++i) {
691                 try {
692                     Method setter = V1HugeBeanFlat.class.getMethod("setStringAttr" + i, String.class);
693                     Method getter = HugeBeanFlat.class.getMethod("getStringAttr" + i);
694                     setter.setAccessible(true);
695                     setter.invoke(bean, getter.invoke(b));
696                 } catch (Throwable t) {
697                     throw new RuntimeException(t);
698                 }
699             }
700             return bean;
701         }
702     }
703 }
704