1
2
3
4
5 package org.andromda.cartridges.hibernate.metafacades;
6
7 import java.util.Collection;
8 import java.util.List;
9 import org.andromda.core.common.Introspector;
10 import org.andromda.core.metafacade.MetafacadeBase;
11 import org.andromda.core.metafacade.MetafacadeFactory;
12 import org.andromda.core.metafacade.ModelValidationMessage;
13 import org.andromda.metafacades.uml.AssociationEndFacade;
14 import org.andromda.metafacades.uml.AttributeFacade;
15 import org.andromda.metafacades.uml.ClassifierFacade;
16 import org.andromda.metafacades.uml.ConstraintFacade;
17 import org.andromda.metafacades.uml.DependencyFacade;
18 import org.andromda.metafacades.uml.GeneralizableElementFacade;
19 import org.andromda.metafacades.uml.GeneralizationFacade;
20 import org.andromda.metafacades.uml.ModelElementFacade;
21 import org.andromda.metafacades.uml.ModelFacade;
22 import org.andromda.metafacades.uml.OperationFacade;
23 import org.andromda.metafacades.uml.PackageFacade;
24 import org.andromda.metafacades.uml.StateMachineFacade;
25 import org.andromda.metafacades.uml.StereotypeFacade;
26 import org.andromda.metafacades.uml.TaggedValueFacade;
27 import org.andromda.metafacades.uml.TemplateParameterFacade;
28 import org.andromda.metafacades.uml.TypeMappings;
29
30
31
32
33
34
35
36
37
38 public abstract class HibernateEmbeddedValueLogic
39 extends MetafacadeBase
40 implements HibernateEmbeddedValue
41 {
42
43
44
45
46 protected Object metaObject;
47
48
49
50
51
52 protected HibernateEmbeddedValueLogic(Object metaObjectIn, String context)
53 {
54 super(metaObjectIn, getContext(context));
55 this.superClassifierFacade =
56 (ClassifierFacade)
57 MetafacadeFactory.getInstance().createFacadeImpl(
58 "org.andromda.metafacades.uml.ClassifierFacade",
59 metaObjectIn,
60 getContext(context));
61 this.metaObject = metaObjectIn;
62 }
63
64
65
66
67
68
69 private static String getContext(String context)
70 {
71 if (context == null)
72 {
73 context = "org.andromda.cartridges.hibernate.metafacades.HibernateEmbeddedValue";
74 }
75 return context;
76 }
77
78 private ClassifierFacade superClassifierFacade;
79 private boolean superClassifierFacadeInitialized = false;
80
81
82
83
84
85 private ClassifierFacade getSuperClassifierFacade()
86 {
87 if (!this.superClassifierFacadeInitialized)
88 {
89 ((MetafacadeBase)this.superClassifierFacade).setMetafacadeContext(this.getMetafacadeContext());
90 this.superClassifierFacadeInitialized = true;
91 }
92 return this.superClassifierFacade;
93 }
94
95
96
97
98
99 @Override
100 public void resetMetafacadeContext(String context)
101 {
102 if (!this.contextRoot)
103 {
104 context = getContext(context);
105 setMetafacadeContext (context);
106 if (this.superClassifierFacadeInitialized)
107 {
108 ((MetafacadeBase)this.superClassifierFacade).resetMetafacadeContext(context);
109 }
110 }
111 }
112
113
114
115
116
117 public boolean isHibernateEmbeddedValueMetaType()
118 {
119 return true;
120 }
121
122
123
124
125
126
127
128 protected abstract boolean handleIsImmutable();
129
130 private boolean __immutable1a;
131 private boolean __immutable1aSet = false;
132
133
134
135
136
137
138 public final boolean isImmutable()
139 {
140 boolean immutable1a = this.__immutable1a;
141 if (!this.__immutable1aSet)
142 {
143
144 immutable1a = handleIsImmutable();
145
146 this.__immutable1a = immutable1a;
147 if (isMetafacadePropertyCachingEnabled())
148 {
149 this.__immutable1aSet = true;
150 }
151 }
152 return immutable1a;
153 }
154
155
156
157
158
159 protected abstract String handleGetImplementationName();
160
161 private String __implementationName2a;
162 private boolean __implementationName2aSet = false;
163
164
165
166
167
168 public final String getImplementationName()
169 {
170 String implementationName2a = this.__implementationName2a;
171 if (!this.__implementationName2aSet)
172 {
173
174 implementationName2a = handleGetImplementationName();
175
176 this.__implementationName2a = implementationName2a;
177 if (isMetafacadePropertyCachingEnabled())
178 {
179 this.__implementationName2aSet = true;
180 }
181 }
182 return implementationName2a;
183 }
184
185
186
187
188
189 public boolean isClassifierFacadeMetaType()
190 {
191 return true;
192 }
193
194
195
196
197
198 public boolean isGeneralizableElementFacadeMetaType()
199 {
200 return true;
201 }
202
203
204
205
206
207 public boolean isModelElementFacadeMetaType()
208 {
209 return true;
210 }
211
212
213
214
215
216
217 public AttributeFacade findAttribute(String name)
218 {
219 return this.getSuperClassifierFacade().findAttribute(name);
220 }
221
222
223
224
225
226 public Collection<ClassifierFacade> getAbstractions()
227 {
228 return this.getSuperClassifierFacade().getAbstractions();
229 }
230
231
232
233
234
235
236 public Collection<ClassifierFacade> getAllAssociatedClasses()
237 {
238 return this.getSuperClassifierFacade().getAllAssociatedClasses();
239 }
240
241
242
243
244
245
246 public Collection<ModelElementFacade> getAllProperties()
247 {
248 return this.getSuperClassifierFacade().getAllProperties();
249 }
250
251
252
253
254
255
256 public Collection<ModelElementFacade> getAllRequiredConstructorParameters()
257 {
258 return this.getSuperClassifierFacade().getAllRequiredConstructorParameters();
259 }
260
261
262
263
264
265
266 public ClassifierFacade getArray()
267 {
268 return this.getSuperClassifierFacade().getArray();
269 }
270
271
272
273
274
275 public String getArrayName()
276 {
277 return this.getSuperClassifierFacade().getArrayName();
278 }
279
280
281
282
283
284
285 public Collection<ClassifierFacade> getAssociatedClasses()
286 {
287 return this.getSuperClassifierFacade().getAssociatedClasses();
288 }
289
290
291
292
293
294 public List<AssociationEndFacade> getAssociationEnds()
295 {
296 return this.getSuperClassifierFacade().getAssociationEnds();
297 }
298
299
300
301
302
303 public List<AttributeFacade> getAttributes()
304 {
305 return this.getSuperClassifierFacade().getAttributes();
306 }
307
308
309
310
311
312
313 public List<AttributeFacade> getAttributes(boolean follow)
314 {
315 return this.getSuperClassifierFacade().getAttributes(follow);
316 }
317
318
319
320
321
322 public String getFullyQualifiedArrayName()
323 {
324 return this.getSuperClassifierFacade().getFullyQualifiedArrayName();
325 }
326
327
328
329
330
331
332
333
334 public Collection<OperationFacade> getImplementationOperations()
335 {
336 return this.getSuperClassifierFacade().getImplementationOperations();
337 }
338
339
340
341
342
343 public String getImplementedInterfaceList()
344 {
345 return this.getSuperClassifierFacade().getImplementedInterfaceList();
346 }
347
348
349
350
351
352 public Collection<AttributeFacade> getInstanceAttributes()
353 {
354 return this.getSuperClassifierFacade().getInstanceAttributes();
355 }
356
357
358
359
360
361 public List<OperationFacade> getInstanceOperations()
362 {
363 return this.getSuperClassifierFacade().getInstanceOperations();
364 }
365
366
367
368
369
370
371 public Collection<ClassifierFacade> getInterfaceAbstractions()
372 {
373 return this.getSuperClassifierFacade().getInterfaceAbstractions();
374 }
375
376
377
378
379
380
381 public String getJavaNewString()
382 {
383 return this.getSuperClassifierFacade().getJavaNewString();
384 }
385
386
387
388
389
390
391 public String getJavaNullString()
392 {
393 return this.getSuperClassifierFacade().getJavaNullString();
394 }
395
396
397
398
399
400 public Collection<AssociationEndFacade> getNavigableConnectingEnds()
401 {
402 return this.getSuperClassifierFacade().getNavigableConnectingEnds();
403 }
404
405
406
407
408
409
410 public List<AssociationEndFacade> getNavigableConnectingEnds(boolean follow)
411 {
412 return this.getSuperClassifierFacade().getNavigableConnectingEnds(follow);
413 }
414
415
416
417
418
419
420
421 public ClassifierFacade getNonArray()
422 {
423 return this.getSuperClassifierFacade().getNonArray();
424 }
425
426
427
428
429
430
431
432 public String getOperationCallFromAttributes()
433 {
434 return this.getSuperClassifierFacade().getOperationCallFromAttributes();
435 }
436
437
438
439
440
441 public List<OperationFacade> getOperations()
442 {
443 return this.getSuperClassifierFacade().getOperations();
444 }
445
446
447
448
449
450
451 public List<ModelElementFacade> getProperties()
452 {
453 return this.getSuperClassifierFacade().getProperties();
454 }
455
456
457
458
459
460
461
462 public List getProperties(boolean follow)
463 {
464 return this.getSuperClassifierFacade().getProperties(follow);
465 }
466
467
468
469
470
471
472 public Collection<ModelElementFacade> getRequiredConstructorParameters()
473 {
474 return this.getSuperClassifierFacade().getRequiredConstructorParameters();
475 }
476
477
478
479
480
481 public long getSerialVersionUID()
482 {
483 return this.getSuperClassifierFacade().getSerialVersionUID();
484 }
485
486
487
488
489
490 public Collection<AttributeFacade> getStaticAttributes()
491 {
492 return this.getSuperClassifierFacade().getStaticAttributes();
493 }
494
495
496
497
498
499 public List<OperationFacade> getStaticOperations()
500 {
501 return this.getSuperClassifierFacade().getStaticOperations();
502 }
503
504
505
506
507
508
509 public ClassifierFacade getSuperClass()
510 {
511 return this.getSuperClassifierFacade().getSuperClass();
512 }
513
514
515
516
517
518
519
520
521
522 public String getWrapperName()
523 {
524 return this.getSuperClassifierFacade().getWrapperName();
525 }
526
527
528
529
530
531 public boolean isAbstract()
532 {
533 return this.getSuperClassifierFacade().isAbstract();
534 }
535
536
537
538
539
540 public boolean isArrayType()
541 {
542 return this.getSuperClassifierFacade().isArrayType();
543 }
544
545
546
547
548
549 public boolean isAssociationClass()
550 {
551 return this.getSuperClassifierFacade().isAssociationClass();
552 }
553
554
555
556
557
558 public boolean isBlobType()
559 {
560 return this.getSuperClassifierFacade().isBlobType();
561 }
562
563
564
565
566
567 public boolean isBooleanType()
568 {
569 return this.getSuperClassifierFacade().isBooleanType();
570 }
571
572
573
574
575
576 public boolean isCharacterType()
577 {
578 return this.getSuperClassifierFacade().isCharacterType();
579 }
580
581
582
583
584
585 public boolean isClobType()
586 {
587 return this.getSuperClassifierFacade().isClobType();
588 }
589
590
591
592
593
594 public boolean isCollectionType()
595 {
596 return this.getSuperClassifierFacade().isCollectionType();
597 }
598
599
600
601
602
603
604
605 public boolean isDataType()
606 {
607 return this.getSuperClassifierFacade().isDataType();
608 }
609
610
611
612
613
614 public boolean isDateType()
615 {
616 return this.getSuperClassifierFacade().isDateType();
617 }
618
619
620
621
622
623 public boolean isDoubleType()
624 {
625 return this.getSuperClassifierFacade().isDoubleType();
626 }
627
628
629
630
631
632 public boolean isEmbeddedValue()
633 {
634 return this.getSuperClassifierFacade().isEmbeddedValue();
635 }
636
637
638
639
640
641 public boolean isEnumeration()
642 {
643 return this.getSuperClassifierFacade().isEnumeration();
644 }
645
646
647
648
649
650 public boolean isFileType()
651 {
652 return this.getSuperClassifierFacade().isFileType();
653 }
654
655
656
657
658
659 public boolean isFloatType()
660 {
661 return this.getSuperClassifierFacade().isFloatType();
662 }
663
664
665
666
667
668 public boolean isIntegerType()
669 {
670 return this.getSuperClassifierFacade().isIntegerType();
671 }
672
673
674
675
676
677 public boolean isInterface()
678 {
679 return this.getSuperClassifierFacade().isInterface();
680 }
681
682
683
684
685
686 public boolean isLeaf()
687 {
688 return this.getSuperClassifierFacade().isLeaf();
689 }
690
691
692
693
694
695 public boolean isListType()
696 {
697 return this.getSuperClassifierFacade().isListType();
698 }
699
700
701
702
703
704 public boolean isLongType()
705 {
706 return this.getSuperClassifierFacade().isLongType();
707 }
708
709
710
711
712
713 public boolean isMapType()
714 {
715 return this.getSuperClassifierFacade().isMapType();
716 }
717
718
719
720
721
722 public boolean isPrimitive()
723 {
724 return this.getSuperClassifierFacade().isPrimitive();
725 }
726
727
728
729
730
731 public boolean isSetType()
732 {
733 return this.getSuperClassifierFacade().isSetType();
734 }
735
736
737
738
739
740 public boolean isStringType()
741 {
742 return this.getSuperClassifierFacade().isStringType();
743 }
744
745
746
747
748
749 public boolean isTimeType()
750 {
751 return this.getSuperClassifierFacade().isTimeType();
752 }
753
754
755
756
757
758 public boolean isWrappedPrimitive()
759 {
760 return this.getSuperClassifierFacade().isWrappedPrimitive();
761 }
762
763
764
765
766
767
768 public Object findTaggedValue(String tagName, boolean follow)
769 {
770 return this.getSuperClassifierFacade().findTaggedValue(tagName, follow);
771 }
772
773
774
775
776
777 public Collection<GeneralizableElementFacade> getAllGeneralizations()
778 {
779 return this.getSuperClassifierFacade().getAllGeneralizations();
780 }
781
782
783
784
785
786 public Collection<GeneralizableElementFacade> getAllSpecializations()
787 {
788 return this.getSuperClassifierFacade().getAllSpecializations();
789 }
790
791
792
793
794
795 public GeneralizableElementFacade getGeneralization()
796 {
797 return this.getSuperClassifierFacade().getGeneralization();
798 }
799
800
801
802
803
804
805 public Collection<GeneralizationFacade> getGeneralizationLinks()
806 {
807 return this.getSuperClassifierFacade().getGeneralizationLinks();
808 }
809
810
811
812
813
814 public String getGeneralizationList()
815 {
816 return this.getSuperClassifierFacade().getGeneralizationList();
817 }
818
819
820
821
822
823
824 public GeneralizableElementFacade getGeneralizationRoot()
825 {
826 return this.getSuperClassifierFacade().getGeneralizationRoot();
827 }
828
829
830
831
832
833 public Collection<GeneralizableElementFacade> getGeneralizations()
834 {
835 return this.getSuperClassifierFacade().getGeneralizations();
836 }
837
838
839
840
841
842 public Collection<GeneralizableElementFacade> getSpecializations()
843 {
844 return this.getSuperClassifierFacade().getSpecializations();
845 }
846
847
848
849
850
851 public void copyTaggedValues(ModelElementFacade element)
852 {
853 this.getSuperClassifierFacade().copyTaggedValues(element);
854 }
855
856
857
858
859
860
861 public Object findTaggedValue(String tagName)
862 {
863 return this.getSuperClassifierFacade().findTaggedValue(tagName);
864 }
865
866
867
868
869
870
871 public Collection<Object> findTaggedValues(String tagName)
872 {
873 return this.getSuperClassifierFacade().findTaggedValues(tagName);
874 }
875
876
877
878
879
880
881
882 public String getBindedFullyQualifiedName(ModelElementFacade bindedElement)
883 {
884 return this.getSuperClassifierFacade().getBindedFullyQualifiedName(bindedElement);
885 }
886
887
888
889
890
891 public Collection<ConstraintFacade> getConstraints()
892 {
893 return this.getSuperClassifierFacade().getConstraints();
894 }
895
896
897
898
899
900
901 public Collection<ConstraintFacade> getConstraints(String kind)
902 {
903 return this.getSuperClassifierFacade().getConstraints(kind);
904 }
905
906
907
908
909
910
911
912 public String getDocumentation(String indent)
913 {
914 return this.getSuperClassifierFacade().getDocumentation(indent);
915 }
916
917
918
919
920
921
922
923
924 public String getDocumentation(String indent, int lineLength)
925 {
926 return this.getSuperClassifierFacade().getDocumentation(indent, lineLength);
927 }
928
929
930
931
932
933
934
935 public String getDocumentation(String indent, int lineLength, boolean htmlStyle)
936 {
937 return this.getSuperClassifierFacade().getDocumentation(indent, lineLength, htmlStyle);
938 }
939
940
941
942
943
944 public String getFullyQualifiedName()
945 {
946 return this.getSuperClassifierFacade().getFullyQualifiedName();
947 }
948
949
950
951
952
953
954
955
956 public String getFullyQualifiedName(boolean modelName)
957 {
958 return this.getSuperClassifierFacade().getFullyQualifiedName(modelName);
959 }
960
961
962
963
964
965
966 public String getFullyQualifiedNamePath()
967 {
968 return this.getSuperClassifierFacade().getFullyQualifiedNamePath();
969 }
970
971
972
973
974
975 public String getId()
976 {
977 return this.getSuperClassifierFacade().getId();
978 }
979
980
981
982
983
984
985
986
987
988 public Collection<String> getKeywords()
989 {
990 return this.getSuperClassifierFacade().getKeywords();
991 }
992
993
994
995
996
997 public String getLabel()
998 {
999 return this.getSuperClassifierFacade().getLabel();
1000 }
1001
1002
1003
1004
1005
1006 public TypeMappings getLanguageMappings()
1007 {
1008 return this.getSuperClassifierFacade().getLanguageMappings();
1009 }
1010
1011
1012
1013
1014
1015
1016 public ModelFacade getModel()
1017 {
1018 return this.getSuperClassifierFacade().getModel();
1019 }
1020
1021
1022
1023
1024
1025 public String getName()
1026 {
1027 return this.getSuperClassifierFacade().getName();
1028 }
1029
1030
1031
1032
1033
1034 public ModelElementFacade getPackage()
1035 {
1036 return this.getSuperClassifierFacade().getPackage();
1037 }
1038
1039
1040
1041
1042
1043 public String getPackageName()
1044 {
1045 return this.getSuperClassifierFacade().getPackageName();
1046 }
1047
1048
1049
1050
1051
1052
1053 public String getPackageName(boolean modelName)
1054 {
1055 return this.getSuperClassifierFacade().getPackageName(modelName);
1056 }
1057
1058
1059
1060
1061
1062 public String getPackagePath()
1063 {
1064 return this.getSuperClassifierFacade().getPackagePath();
1065 }
1066
1067
1068
1069
1070
1071
1072
1073
1074 public String getQualifiedName()
1075 {
1076 return this.getSuperClassifierFacade().getQualifiedName();
1077 }
1078
1079
1080
1081
1082
1083 public PackageFacade getRootPackage()
1084 {
1085 return this.getSuperClassifierFacade().getRootPackage();
1086 }
1087
1088
1089
1090
1091
1092 public Collection<DependencyFacade> getSourceDependencies()
1093 {
1094 return this.getSuperClassifierFacade().getSourceDependencies();
1095 }
1096
1097
1098
1099
1100
1101
1102 public StateMachineFacade getStateMachineContext()
1103 {
1104 return this.getSuperClassifierFacade().getStateMachineContext();
1105 }
1106
1107
1108
1109
1110
1111 public Collection<String> getStereotypeNames()
1112 {
1113 return this.getSuperClassifierFacade().getStereotypeNames();
1114 }
1115
1116
1117
1118
1119
1120 public Collection<StereotypeFacade> getStereotypes()
1121 {
1122 return this.getSuperClassifierFacade().getStereotypes();
1123 }
1124
1125
1126
1127
1128
1129 public Collection<TaggedValueFacade> getTaggedValues()
1130 {
1131 return this.getSuperClassifierFacade().getTaggedValues();
1132 }
1133
1134
1135
1136
1137
1138 public Collection<DependencyFacade> getTargetDependencies()
1139 {
1140 return this.getSuperClassifierFacade().getTargetDependencies();
1141 }
1142
1143
1144
1145
1146
1147 public Object getTemplateParameter(String parameterName)
1148 {
1149 return this.getSuperClassifierFacade().getTemplateParameter(parameterName);
1150 }
1151
1152
1153
1154
1155
1156 public Collection<TemplateParameterFacade> getTemplateParameters()
1157 {
1158 return this.getSuperClassifierFacade().getTemplateParameters();
1159 }
1160
1161
1162
1163
1164
1165
1166 public String getVisibility()
1167 {
1168 return this.getSuperClassifierFacade().getVisibility();
1169 }
1170
1171
1172
1173
1174
1175
1176 public boolean hasExactStereotype(String stereotypeName)
1177 {
1178 return this.getSuperClassifierFacade().hasExactStereotype(stereotypeName);
1179 }
1180
1181
1182
1183
1184
1185
1186 public boolean hasKeyword(String keywordName)
1187 {
1188 return this.getSuperClassifierFacade().hasKeyword(keywordName);
1189 }
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203 public boolean hasStereotype(String stereotypeName)
1204 {
1205 return this.getSuperClassifierFacade().hasStereotype(stereotypeName);
1206 }
1207
1208
1209
1210
1211
1212
1213 public boolean isBindingDependenciesPresent()
1214 {
1215 return this.getSuperClassifierFacade().isBindingDependenciesPresent();
1216 }
1217
1218
1219
1220
1221
1222 public boolean isConstraintsPresent()
1223 {
1224 return this.getSuperClassifierFacade().isConstraintsPresent();
1225 }
1226
1227
1228
1229
1230
1231 public boolean isDocumentationPresent()
1232 {
1233 return this.getSuperClassifierFacade().isDocumentationPresent();
1234 }
1235
1236
1237
1238
1239
1240 public boolean isReservedWord()
1241 {
1242 return this.getSuperClassifierFacade().isReservedWord();
1243 }
1244
1245
1246
1247
1248
1249
1250 public boolean isTemplateParametersPresent()
1251 {
1252 return this.getSuperClassifierFacade().isTemplateParametersPresent();
1253 }
1254
1255
1256
1257
1258
1259
1260
1261 public boolean isValidIdentifierName()
1262 {
1263 return this.getSuperClassifierFacade().isValidIdentifierName();
1264 }
1265
1266
1267
1268
1269
1270
1271
1272 public String translateConstraint(String name, String translation)
1273 {
1274 return this.getSuperClassifierFacade().translateConstraint(name, translation);
1275 }
1276
1277
1278
1279
1280
1281 public String[] translateConstraints(String translation)
1282 {
1283 return this.getSuperClassifierFacade().translateConstraints(translation);
1284 }
1285
1286
1287
1288
1289
1290 public String[] translateConstraints(String kind, String translation)
1291 {
1292 return this.getSuperClassifierFacade().translateConstraints(kind, translation);
1293 }
1294
1295
1296
1297
1298 @Override
1299 public void initialize()
1300 {
1301 this.getSuperClassifierFacade().initialize();
1302 }
1303
1304
1305
1306
1307
1308 @Override
1309 public Object getValidationOwner()
1310 {
1311 Object owner = this.getSuperClassifierFacade().getValidationOwner();
1312 return owner;
1313 }
1314
1315
1316
1317
1318
1319 @Override
1320 public String getValidationName()
1321 {
1322 String name = this.getSuperClassifierFacade().getValidationName();
1323 return name;
1324 }
1325
1326
1327
1328
1329
1330 @Override
1331 public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
1332 {
1333 this.getSuperClassifierFacade().validateInvariants(validationMessages);
1334 }
1335
1336
1337
1338
1339 private static final String NAME_PROPERTY = "name";
1340 private static final String FQNAME_PROPERTY = "fullyQualifiedName";
1341
1342
1343
1344
1345 @Override
1346 public String toString()
1347 {
1348 final StringBuilder toString = new StringBuilder(this.getClass().getName());
1349 toString.append("[");
1350 try
1351 {
1352 toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY));
1353 }
1354 catch (final Throwable tryAgain)
1355 {
1356 try
1357 {
1358 toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY));
1359 }
1360 catch (final Throwable ignore)
1361 {
1362
1363 }
1364 }
1365 toString.append("]");
1366 return toString.toString();
1367 }
1368 }