source: contrib/MailArchiver/sources/src/serpro/mailarchiver/util/jdo/MetadataDumper.java @ 6785

Revision 6785, 69.0 KB checked in by rafaelraymundo, 12 years ago (diff)

Ticket #2946 - Liberado codigo do MailArchiver?. Documentação na subpasta DOCS.

Line 
1/**
2 * MailArchiver is an application that provides services for storing and managing e-mail messages through a Web Services SOAP interface.
3 * Copyright (C) 2012  Marcio Andre Scholl Levien and Fernando Alberto Reuter Wendt and Jose Ronaldo Nogueira Fonseca Junior
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 */
18
19/******************************************************************************\
20*
21*  This product was developed by
22*
23*        SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO),
24*
25*  a government company established under Brazilian law (5.615/70),
26*  at Department of Development of Porto Alegre.
27*
28\******************************************************************************/
29
30package serpro.mailarchiver.util.jdo;
31
32import java.util.HashSet;
33import java.util.Set;
34
35import javax.jdo.annotations.DiscriminatorStrategy;
36import javax.jdo.annotations.ForeignKeyAction;
37import javax.jdo.annotations.IdGeneratorStrategy;
38import javax.jdo.annotations.IdentityType;
39import javax.jdo.annotations.InheritanceStrategy;
40import javax.jdo.annotations.NullValue;
41import javax.jdo.annotations.PersistenceModifier;
42import javax.jdo.annotations.SequenceStrategy;
43import javax.jdo.annotations.VersionStrategy;
44import javax.jdo.metadata.*;
45
46import org.datanucleus.api.jdo.metadata.*;
47
48public class MetadataDumper {
49
50    public static String dump(Class clazz, PersistenceManagerFactory pmf) {
51
52        Set visited = new HashSet();
53        StringBuilder sb = new StringBuilder();
54
55        if(clazz.isInterface()) {
56            InterfaceMetadata md = (InterfaceMetadata) pmf.getMetadata(clazz.getName());
57            dump(md, sb, "", visited);
58        }
59        else {
60            ClassMetadata md = (ClassMetadata) pmf.getMetadata(clazz.getName());
61            dump(md, sb, "", visited);
62        }
63
64        return sb.toString();
65    }
66
67    private static void dump(ExtensionMetadata md, StringBuilder sb, String indent, Set visited) {
68        int hash = md.hashCode();
69        sb.append(indent).append("ExtensionMetadata");
70        if(visited.contains(hash)) {
71            sb.append(" < ").append(hash).append(" >\n");
72            return;
73        }
74        else {
75            sb.append(" <* ").append(hash).append(" *>\n");
76            visited.add(hash);
77        }
78
79        String vendorName = md.getVendorName();
80        sb.append(indent).append("vendorName: ").append(vendorName).append("\n");
81
82        String key = md.getKey();
83        sb.append(indent).append("key: ").append(key).append("\n");
84
85        String value = md.getValue();
86        sb.append(indent).append("value: ").append(value).append("\n");
87    }
88
89    private static void dump(Metadata md, StringBuilder sb, String indent, Set visited) {
90
91        ExtensionMetadata[] extensions = md.getExtensions();
92        if((extensions != null) && (extensions.length > 0)) {
93
94            int numberOfExtensions = md.getNumberOfExtensions();
95            sb.append(indent).append("numberOfExtensions: ").append(numberOfExtensions).append("\n");
96
97            sb.append(indent).append("extensions:\n");
98            int i = 0;
99            for(ExtensionMetadata extensionMetadata : extensions) {
100                sb.append(indent).append("[").append(i++).append("]\n");
101                dump(extensionMetadata, sb, indent + "    ", visited);
102            }
103        }
104
105        Metadata parent = md.getParent();
106        sb.append(indent).append("parent class: ").append(parent.getClass().getName()).append("\n");
107    }
108
109    private static void dump(ArrayMetadata md, StringBuilder sb, String indent, Set visited) {
110        int hash = md.hashCode();
111        sb.append(indent).append("ArrayMetadata");
112        if(visited.contains(hash)) {
113            sb.append(" < ").append(hash).append(" >\n");
114            return;
115        }
116        else {
117            sb.append(" <* ").append(hash).append(" *>\n");
118            visited.add(hash);
119        }
120
121        ArrayMetadataImpl mdImpl = (ArrayMetadataImpl)md;
122        if(mdImpl.getInternal() == null) {
123            sb.append(indent).append("(null internal impl)\n");
124            return;
125        }
126
127        String elementType = md.getElementType();
128        sb.append(indent).append("elementType: ").append(elementType).append("\n");
129
130        Boolean dependentElement = md.getDependentElement();
131        sb.append(indent).append("dependentElement: ").append(dependentElement).append("\n");
132
133        Boolean embeddedElement = md.getEmbeddedElement();
134        sb.append(indent).append("embeddedElement: ").append(embeddedElement).append("\n");
135
136        Boolean serializedElement = md.getSerializedElement();
137        sb.append(indent).append("serializedElement: ").append(serializedElement).append("\n");
138
139        dump((Metadata)md, sb, indent, visited);
140    }
141
142    private static void dump(CollectionMetadata md, StringBuilder sb, String indent, Set visited) {
143        int hash = md.hashCode();
144        sb.append(indent).append("CollectionMetadata");
145        if(visited.contains(hash)) {
146            sb.append(" < ").append(hash).append(" >\n");
147            return;
148        }
149        else {
150            sb.append(" <* ").append(hash).append(" *>\n");
151            visited.add(hash);
152        }
153
154        CollectionMetadataImpl mdImpl = (CollectionMetadataImpl)md;
155        if(mdImpl.getInternal() == null) {
156            sb.append(indent).append("(null internal impl)\n");
157            return;
158        }
159
160        String elementType = md.getElementType();
161        sb.append(indent).append("elementType: ").append(elementType).append("\n");
162
163        Boolean dependentElement = md.getDependentElement();
164        sb.append(indent).append("dependentElement: ").append(dependentElement).append("\n");
165
166        Boolean embeddedElement = md.getEmbeddedElement();
167        sb.append(indent).append("embeddedElement: ").append(embeddedElement).append("\n");
168
169        Boolean serializedElement = md.getSerializedElement();
170        sb.append(indent).append("serializedElement: ").append(serializedElement).append("\n");
171
172        dump((Metadata)md, sb, indent, visited);
173    }
174
175    private static void dump(ColumnMetadata md, StringBuilder sb, String indent, Set visited) {
176        int hash = md.hashCode();
177        sb.append(indent).append("ColumnMetadata");
178        if(visited.contains(hash)) {
179            sb.append(" < ").append(hash).append(" >\n");
180            return;
181        }
182        else {
183            sb.append(" <* ").append(hash).append(" *>\n");
184            visited.add(hash);
185        }
186
187        ColumnMetadataImpl mdImpl = (ColumnMetadataImpl)md;
188        if(mdImpl.getInternal() == null) {
189            sb.append(indent).append("(null internal impl)\n");
190            return;
191        }
192
193        String name = md.getName();
194        sb.append(indent).append("name: ").append(name).append("\n");
195
196        Boolean allowsNull = md.getAllowsNull();
197        sb.append(indent).append("allowsNull: ").append(allowsNull).append("\n");
198
199        String defaultValue = md.getDefaultValue();
200        sb.append(indent).append("defaultValue: ").append(defaultValue).append("\n");
201
202        String insertValue = md.getInsertValue();
203        sb.append(indent).append("insertValue: ").append(insertValue).append("\n");
204
205        String jDBCType = md.getJDBCType();
206        sb.append(indent).append("jDBCType: ").append(jDBCType).append("\n");
207
208        Integer length = md.getLength();
209        sb.append(indent).append("length: ").append(length).append("\n");
210
211        Integer position = md.getPosition();
212        sb.append(indent).append("position: ").append(position).append("\n");
213
214        String sQLType = md.getSQLType();
215        sb.append(indent).append("sQLType: ").append(sQLType).append("\n");
216
217        String target = md.getTarget();
218        sb.append(indent).append("target: ").append(target).append("\n");
219
220        String targetField = md.getTargetField();
221        sb.append(indent).append("targetField: ").append(targetField).append("\n");
222
223        dump((Metadata)md, sb, indent, visited);
224    }
225
226    private static void dump(DatastoreIdentityMetadata md, StringBuilder sb, String indent, Set visited) {
227        int hash = md.hashCode();
228        sb.append(indent).append("DatastoreIdentityMetadata");
229        if(visited.contains(hash)) {
230            sb.append(" < ").append(hash).append(" >\n");
231            return;
232        }
233        else {
234            sb.append(" <* ").append(hash).append(" *>\n");
235            visited.add(hash);
236        }
237
238        DatastoreIdentityMetadataImpl mdImpl = (DatastoreIdentityMetadataImpl)md;
239        if(mdImpl.getInternal() == null) {
240            sb.append(indent).append("(null internal impl)\n");
241            return;
242        }
243
244        String sequence = md.getSequence();
245        sb.append(indent).append("sequence: ").append(sequence).append("\n");
246
247        String customStrategy = md.getCustomStrategy();
248        sb.append(indent).append("customStrategy: ").append(customStrategy).append("\n");
249
250        IdGeneratorStrategy strategy = md.getStrategy();
251        sb.append(indent).append("strategy: ").append(strategy).append("\n");
252
253        String column = md.getColumn();
254        sb.append(indent).append("column: ").append(column).append("\n");
255
256        ColumnMetadata[] columns = md.getColumns();
257        if((columns != null) && (columns.length > 0)) {
258
259            int numberOfColumns = md.getNumberOfColumns();
260            sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n");
261
262            sb.append(indent).append("columns:\n");
263            int i = 0;
264            for(ColumnMetadata columnMetadata : columns) {
265                sb.append(indent).append("[").append(i++).append("]\n");
266                dump(columnMetadata, sb, indent + "    ", visited);
267            }
268        }
269
270        dump((Metadata)md, sb, indent, visited);
271    }
272
273    private static void dump(DiscriminatorMetadata md, StringBuilder sb, String indent, Set visited) {
274        int hash = md.hashCode();
275        sb.append(indent).append("DiscriminatorMetadata");
276        if(visited.contains(hash)) {
277            sb.append(" < ").append(hash).append(" >\n");
278            return;
279        }
280        else {
281            sb.append(" <* ").append(hash).append(" *>\n");
282            visited.add(hash);
283        }
284
285        DiscriminatorMetadataImpl mdImpl = (DiscriminatorMetadataImpl)md;
286        if(mdImpl.getInternal() == null) {
287            sb.append(indent).append("(null internal impl)\n");
288            return;
289        }
290
291        String value = md.getValue();
292        sb.append(indent).append("value: ").append(value).append("\n");
293
294        Indexed indexed = md.getIndexed();
295        sb.append(indent).append("indexed: ").append(indexed).append("\n");
296
297        DiscriminatorStrategy strategy = md.getStrategy();
298        sb.append(indent).append("strategy: ").append(strategy).append("\n");
299
300        String column = md.getColumn();
301        sb.append(indent).append("column: ").append(column).append("\n");
302
303        ColumnMetadata[] columns = md.getColumns();
304        if((columns != null) && (columns.length > 0)) {
305
306            int numberOfColumns = md.getNumberOfColumns();
307            sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n");
308
309            sb.append(indent).append("columns:\n");
310            int i = 0;
311            for(ColumnMetadata columnMetadata : columns) {
312                sb.append(indent).append("[").append(i++).append("]\n");
313                dump(columnMetadata, sb, indent + "    ", visited);
314            }
315        }
316
317        IndexMetadata indexMetadata = md.getIndexMetadata();
318        if(indexMetadata != null) {
319            sb.append(indent).append("indexMetadata:\n");
320            dump(indexMetadata, sb, indent + "    ", visited);
321        }
322
323        dump((Metadata)md, sb, indent, visited);
324    }
325
326    private static void dump(ElementMetadata md, StringBuilder sb, String indent, Set visited) {
327        int hash = md.hashCode();
328        sb.append(indent).append("ElementMetadata");
329        if(visited.contains(hash)) {
330            sb.append(" < ").append(hash).append(" >\n");
331            return;
332        }
333        else {
334            sb.append(" <* ").append(hash).append(" *>\n");
335            visited.add(hash);
336        }
337
338        ElementMetadataImpl mdImpl = (ElementMetadataImpl)md;
339        if(mdImpl.getInternal() == null) {
340            sb.append(indent).append("(null internal impl)\n");
341            return;
342        }
343
344        ForeignKeyAction deleteAction = md.getDeleteAction();
345        sb.append(indent).append("deleteAction: ").append(deleteAction).append("\n");
346
347        ForeignKeyAction updateAction = md.getUpdateAction();
348        sb.append(indent).append("updateAction: ").append(updateAction).append("\n");
349
350        String table = md.getTable();
351        sb.append(indent).append("table: ").append(table).append("\n");
352
353        String column = md.getColumn();
354        sb.append(indent).append("column: ").append(column).append("\n");
355
356        ColumnMetadata[] columns = md.getColumns();
357        if((columns != null) && (columns.length > 0)) {
358
359            int numberOfColumns = md.getNumberOfColumns();
360            sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n");
361
362            sb.append(indent).append("columns:\n");
363            int i = 0;
364            for(ColumnMetadata columnMetadata : columns) {
365                sb.append(indent).append("[").append(i++).append("]\n");
366                dump(columnMetadata, sb, indent + "    ", visited);
367            }
368        }
369
370        EmbeddedMetadata embeddedMetadata = md.getEmbeddedMetadata();
371        if(embeddedMetadata != null) {
372            sb.append(indent).append("embeddedMetadata:\n");
373            dump(embeddedMetadata, sb, indent + "    ", visited);
374        }
375
376        ForeignKeyMetadata foreignKeyMetadata = md.getForeignKeyMetadata();
377        if(foreignKeyMetadata != null) {
378            sb.append(indent).append("foreignKeyMetadata:\n");
379            dump(foreignKeyMetadata, sb, indent + "    ", visited);
380        }
381
382        IndexMetadata indexMetadata = md.getIndexMetadata();
383        if(indexMetadata != null) {
384            sb.append(indent).append("indexMetadata:\n");
385            dump(indexMetadata, sb, indent + "    ", visited);
386        }
387
388        UniqueMetadata uniqueMetadata = md.getUniqueMetadata();
389        if(uniqueMetadata != null) {
390            sb.append(indent).append("uniqueMetadata:\n");
391            dump(uniqueMetadata, sb, indent + "    ", visited);
392        }
393
394        dump((Metadata)md, sb, indent, visited);
395    }
396
397    private static void dump(EmbeddedMetadata md, StringBuilder sb, String indent, Set visited) {
398        int hash = md.hashCode();
399        sb.append(indent).append("EmbeddedMetadata");
400        if(visited.contains(hash)) {
401            sb.append(" < ").append(hash).append(" >\n");
402            return;
403        }
404        else {
405            sb.append(" <* ").append(hash).append(" *>\n");
406            visited.add(hash);
407        }
408
409        EmbeddedMetadataImpl mdImpl = (EmbeddedMetadataImpl)md;
410        if(mdImpl.getInternal() == null) {
411            sb.append(indent).append("(impl internal null)\n");
412            return;
413        }
414
415        String nullIndicatorColumn = md.getNullIndicatorColumn();
416        sb.append(indent).append("nullIndicatorColumn: ").append(nullIndicatorColumn).append("\n");
417
418        String nullIndicatorValue = md.getNullIndicatorValue();
419        sb.append(indent).append("nullIndicatorValue: ").append(nullIndicatorValue).append("\n");
420
421        String ownerMember = md.getOwnerMember();
422        sb.append(indent).append("ownerMember: ").append(ownerMember).append("\n");
423
424        MemberMetadata[] members = md.getMembers();
425        if((members != null) && (members.length > 0)) {
426
427            int numberOfMembers = md.getNumberOfMembers();
428            sb.append(indent).append("numberOfMembers: ").append(numberOfMembers).append("\n");
429
430            sb.append(indent).append("members:\n");
431            int i = 0;
432            for(MemberMetadata memberMetadata : members) {
433                sb.append(indent).append("[").append(i++).append("]\n");
434                if(memberMetadata instanceof FieldMetadata) {
435                    dump((FieldMetadata)memberMetadata, sb, indent + "    ", visited);
436                }
437                else if(memberMetadata instanceof PropertyMetadata) {
438                    dump((PropertyMetadata)memberMetadata, sb, indent + "    ", visited);
439                }
440            }
441        }
442
443        dump((Metadata)md, sb, indent, visited);
444    }
445
446    private static void dump(FetchGroupMetadata md, StringBuilder sb, String indent, Set visited) {
447        int hash = md.hashCode();
448        sb.append(indent).append("FetchGroupMetadata");
449        if(visited.contains(hash)) {
450            sb.append(" < ").append(hash).append(" >\n");
451            return;
452        }
453        else {
454            sb.append(" <* ").append(hash).append(" *>\n");
455            visited.add(hash);
456        }
457
458        FetchGroupMetadataImpl mdImpl = (FetchGroupMetadataImpl)md;
459        if(mdImpl.getInternal() == null) {
460            sb.append(indent).append("(null internal impl)\n");
461            return;
462        }
463
464        String name = md.getName();
465        sb.append(indent).append("name: ").append(name).append("\n");
466
467        Boolean postLoad = md.getPostLoad();
468        sb.append(indent).append("postLoad: ").append(postLoad).append("\n");
469
470        MemberMetadata[] members = md.getMembers();
471        if((members != null) && (members.length > 0)) {
472
473            int numberOfMembers = md.getNumberOfMembers();
474            sb.append(indent).append("numberOfMembers: ").append(numberOfMembers).append("\n");
475
476            sb.append(indent).append("members:\n");
477            int i = 0;
478            for(MemberMetadata memberMetadata : members) {
479                sb.append(indent).append("[").append(i++).append("]\n");
480                if(memberMetadata instanceof FieldMetadata) {
481                    dump((FieldMetadata)memberMetadata, sb, indent + "    ", visited);
482                }
483                else if(memberMetadata instanceof PropertyMetadata) {
484                    dump((PropertyMetadata)memberMetadata, sb, indent + "    ", visited);
485                }
486            }
487        }
488
489        dump((Metadata)md, sb, indent, visited);
490    }
491
492    private static void dump(FetchPlanMetadata md, StringBuilder sb, String indent, Set visited) {
493        int hash = md.hashCode();
494        sb.append(indent).append("FetchPlanMetadata");
495        if(visited.contains(hash)) {
496            sb.append(" < ").append(hash).append(" >\n");
497            return;
498        }
499        else {
500            sb.append(" <* ").append(hash).append(" *>\n");
501            visited.add(hash);
502        }
503
504        FetchPlanMetadataImpl mdImpl = (FetchPlanMetadataImpl)md;
505        if(mdImpl.getInternal() == null) {
506            sb.append(indent).append("(null internal impl)\n");
507            return;
508        }
509
510        String name = md.getName();
511        sb.append(indent).append("name: ").append(name).append("\n");
512
513        int fetchSize = md.getFetchSize();
514        sb.append(indent).append("fetchSize: ").append(fetchSize).append("\n");
515
516        int maxFetchDepth = md.getMaxFetchDepth();
517        sb.append(indent).append("maxFetchDepth: ").append(maxFetchDepth).append("\n");
518
519        FetchGroupMetadata[] fetchGroups = md.getFetchGroups();
520        if((fetchGroups != null) && (fetchGroups.length > 0)) {
521
522            int numberOfFetchGroups = md.getNumberOfFetchGroups();
523            sb.append(indent).append("numberOfFetchGroups: ").append(numberOfFetchGroups).append("\n");
524
525            sb.append(indent).append("fetchGroups:\n");
526            int i = 0;
527            for(FetchGroupMetadata fetchGroupMetadata : fetchGroups) {
528                sb.append(indent).append("[").append(i++).append("]\n");
529                dump(fetchGroupMetadata, sb, indent + "    ", visited);
530            }
531        }
532
533        dump((Metadata)md, sb, indent, visited);
534    }
535
536    private static void dump(ForeignKeyMetadata md, StringBuilder sb, String indent, Set visited) {
537        int hash = md.hashCode();
538        sb.append(indent).append("ForeignKeyMetadata");
539        if(visited.contains(hash)) {
540            sb.append(" < ").append(hash).append(" >\n");
541            return;
542        }
543        else {
544            sb.append(" <* ").append(hash).append(" *>\n");
545            visited.add(hash);
546        }
547
548        ForeignKeyMetadataImpl mdImpl = (ForeignKeyMetadataImpl)md;
549        if(mdImpl.getInternal() == null) {
550            sb.append(indent).append("(null internal impl)\n");
551            return;
552        }
553
554        String name = md.getName();
555        sb.append(indent).append("name: ").append(name).append("\n");
556
557        ForeignKeyAction deleteAction = md.getDeleteAction();
558        sb.append(indent).append("deleteAction: ").append(deleteAction).append("\n");
559
560        ForeignKeyAction updateAction = md.getUpdateAction();
561        sb.append(indent).append("updateAction: ").append(updateAction).append("\n");
562
563        String table = md.getTable();
564        sb.append(indent).append("table: ").append(table).append("\n");
565
566        Boolean deferred = md.getDeferred();
567        sb.append(indent).append("deferred: ").append(deferred).append("\n");
568
569        Boolean unique = md.getUnique();
570        sb.append(indent).append("unique: ").append(unique).append("\n");
571
572        ColumnMetadata[] columns = md.getColumns();
573        if((columns != null) && (columns.length > 0)) {
574
575            int numberOfColumns = md.getNumberOfColumns();
576            sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n");
577
578            sb.append(indent).append("columns:\n");
579            int i = 0;
580            for(ColumnMetadata columnMetadata : columns) {
581                sb.append(indent).append("[").append(i++).append("]\n");
582                dump(columnMetadata, sb, indent + "    ", visited);
583            }
584        }
585
586        MemberMetadata[] members = md.getMembers();
587        if((members != null) && (members.length > 0)) {
588
589            int numberOfMembers = md.getNumberOfMembers();
590            sb.append(indent).append("numberOfMembers: ").append(numberOfMembers).append("\n");
591
592            sb.append(indent).append("members:\n");
593            int i = 0;
594            for(MemberMetadata memberMetadata : members) {
595                sb.append(indent).append("[").append(i++).append("]\n");
596                if(memberMetadata instanceof FieldMetadata) {
597                    dump((FieldMetadata)memberMetadata, sb, indent + "    ", visited);
598                }
599                else if(memberMetadata instanceof PropertyMetadata) {
600                    dump((PropertyMetadata)memberMetadata, sb, indent + "    ", visited);
601                }
602            }
603        }
604
605        dump((Metadata)md, sb, indent, visited);
606    }
607
608    private static void dump(IndexMetadata md, StringBuilder sb, String indent, Set visited) {
609        int hash = md.hashCode();
610        sb.append(indent).append("IndexMetadata");
611        if(visited.contains(hash)) {
612            sb.append(" < ").append(hash).append(" >\n");
613            return;
614        }
615        else {
616            sb.append(" <* ").append(hash).append(" *>\n");
617            visited.add(hash);
618        }
619
620        IndexMetadataImpl mdImpl = (IndexMetadataImpl)md;
621        if(mdImpl.getInternal() == null) {
622            sb.append(indent).append("(null internal impl)\n");
623            return;
624        }
625
626        String name = md.getName();
627        sb.append(indent).append("name: ").append(name).append("\n");
628
629        String table = md.getTable();
630        sb.append(indent).append("table: ").append(table).append("\n");
631
632        boolean unique = md.getUnique();
633        sb.append(indent).append("unique: ").append(unique).append("\n");
634
635        ColumnMetadata[] columns = md.getColumns();
636        if((columns != null) && (columns.length > 0)) {
637
638            int numberOfColumns = md.getNumberOfColumns();
639            sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n");
640
641            sb.append(indent).append("columns:\n");
642            int i = 0;
643            for(ColumnMetadata columnMetadata : columns) {
644                sb.append(indent).append("[").append(i++).append("]\n");
645                dump(columnMetadata, sb, indent + "    ", visited);
646            }
647        }
648
649        MemberMetadata[] members = md.getMembers();
650        if((members != null) && (members.length > 0)) {
651
652            int numberOfMembers = md.getNumberOfMembers();
653            sb.append(indent).append("numberOfMembers: ").append(numberOfMembers).append("\n");
654
655            sb.append(indent).append("members:\n");
656            int i = 0;
657            for(MemberMetadata memberMetadata : members) {
658                sb.append(indent).append("[").append(i++).append("]\n");
659                if(memberMetadata instanceof FieldMetadata) {
660                    dump((FieldMetadata)memberMetadata, sb, indent + "    ", visited);
661                }
662                else if(memberMetadata instanceof PropertyMetadata) {
663                    dump((PropertyMetadata)memberMetadata, sb, indent + "    ", visited);
664                }
665            }
666        }
667
668        dump((Metadata)md, sb, indent, visited);
669    }
670
671    private static void dump(InheritanceMetadata md, StringBuilder sb, String indent, Set visited) {
672        int hash = md.hashCode();
673        sb.append(indent).append("InheritanceMetadata");
674        if(visited.contains(hash)) {
675            sb.append(" < ").append(hash).append(" >\n");
676            return;
677        }
678        else {
679            sb.append(" <* ").append(hash).append(" *>\n");
680            visited.add(hash);
681        }
682
683        InheritanceMetadataImpl mdImpl = (InheritanceMetadataImpl)md;
684        if(mdImpl.getInternal() == null) {
685            sb.append(indent).append("(null internal impl)\n");
686            return;
687        }
688
689        String customStrategy = md.getCustomStrategy();
690        sb.append(indent).append("customStrategy: ").append(customStrategy).append("\n");
691
692        InheritanceStrategy strategy = md.getStrategy();
693        sb.append(indent).append("strategy: ").append(strategy).append("\n");
694
695        DiscriminatorMetadata discriminatorMetadata = md.getDiscriminatorMetadata();
696        if(discriminatorMetadata != null) {
697            sb.append(indent).append("discriminatorMetadata:\n");
698            dump(discriminatorMetadata, sb, indent + "    ", visited);
699        }
700
701        JoinMetadata joinMetadata = md.getJoinMetadata();
702        if(joinMetadata != null) {
703            sb.append(indent).append("joinMetadata:\n");
704            dump(joinMetadata, sb, indent + "    ", visited);
705        }
706
707        dump((Metadata)md, sb, indent, visited);
708    }
709
710    private static void dump(JDOMetadata md, StringBuilder sb, String indent, Set visited) {
711        int hash = md.hashCode();
712        sb.append(indent).append("JDOMetadata");
713        if(visited.contains(hash)) {
714            sb.append(" < ").append(hash).append(" >\n");
715            return;
716        }
717        else {
718            sb.append(" <* ").append(hash).append(" *>\n");
719            visited.add(hash);
720        }
721
722        JDOMetadataImpl mdImpl = (JDOMetadataImpl)md;
723        if(mdImpl.getInternal() == null) {
724            sb.append(indent).append("(null internal impl)\n");
725            return;
726        }
727
728        String catalog = md.getCatalog();
729        sb.append(indent).append("catalog: ").append(catalog).append("\n");
730
731        String schema = md.getSchema();
732        sb.append(indent).append("schema: ").append(schema).append("\n");
733
734        FetchPlanMetadata[] fetchPlans = md.getFetchPlans();
735        if((fetchPlans != null) && (fetchPlans.length > 0)) {
736
737            int numberOfFetchPlans = md.getNumberOfFetchPlans();
738            sb.append(indent).append("numberOfFetchPlans: ").append(numberOfFetchPlans).append("\n");
739
740            sb.append(indent).append("fetchPlans:\n");
741            int i = 0;
742            for(FetchPlanMetadata fetchPlanMetadata : fetchPlans) {
743                sb.append(indent).append("[").append(i++).append("]\n");
744                dump(fetchPlanMetadata, sb, indent + "    ", visited);
745            }
746        }
747
748        PackageMetadata[] packages = md.getPackages();
749        if((packages != null) && (packages.length > 0)) {
750
751            int numberOfPackages = md.getNumberOfPackages();
752            sb.append(indent).append("numberOfPackages: ").append(numberOfPackages).append("\n");
753
754            sb.append(indent).append("packages:\n");
755            int i = 0;
756            for(PackageMetadata packageMetadata : packages) {
757                sb.append(indent).append("[").append(i++).append("]\n");
758                dump(packageMetadata, sb, indent + "    ", visited);
759            }
760        }
761
762        QueryMetadata[] queries = md.getQueries();
763        if((queries != null) && (queries.length > 0)) {
764
765            int numberOfQueries = md.getNumberOfQueries();
766            sb.append(indent).append("numberOfQueries: ").append(numberOfQueries).append("\n");
767
768            sb.append(indent).append("queries:\n");
769            int i = 0;
770            for(QueryMetadata queryMetadata : queries) {
771                sb.append(indent).append("[").append(i++).append("]\n");
772                dump(queryMetadata, sb, indent + "    ", visited);
773            }
774        }
775
776        dump((Metadata)md, sb, indent, visited);
777    }
778
779    private static void dump(JoinMetadata md, StringBuilder sb, String indent, Set visited) {
780        int hash = md.hashCode();
781        sb.append(indent).append("JoinMetadata");
782        if(visited.contains(hash)) {
783            sb.append(" < ").append(hash).append(" >\n");
784            return;
785        }
786        else {
787            sb.append(" <* ").append(hash).append(" *>\n");
788            visited.add(hash);
789        }
790
791        JoinMetadataImpl mdImpl = (JoinMetadataImpl)md;
792        if(mdImpl.getInternal() == null) {
793            sb.append(indent).append("(null internal impl)\n");
794            return;
795        }
796
797        ForeignKeyAction deleteAction = md.getDeleteAction();
798        sb.append(indent).append("deleteAction: ").append(deleteAction).append("\n");
799
800        Indexed indexed = md.getIndexed();
801        sb.append(indent).append("indexed: ").append(indexed).append("\n");
802
803        boolean outer = md.getOuter();
804        sb.append(indent).append("outer: ").append(outer).append("\n");
805
806        Boolean unique = md.getUnique();
807        sb.append(indent).append("unique: ").append(unique).append("\n");
808
809        String table = md.getTable();
810        sb.append(indent).append("table: ").append(table).append("\n");
811
812        String column = md.getColumn();
813        sb.append(indent).append("column: ").append(column).append("\n");
814
815        ColumnMetadata[] columns = md.getColumns();
816        if((columns != null) && (columns.length > 0)) {
817
818            int numberOfColumns = md.getNumberOfColumns();
819            sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n");
820
821            sb.append(indent).append("columns:\n");
822            int i = 0;
823            for(ColumnMetadata columnMetadata : columns) {
824                sb.append(indent).append("[").append(i++).append("]\n");
825                dump(columnMetadata, sb, indent + "    ", visited);
826            }
827        }
828
829        ForeignKeyMetadata foreignKeyMetadata = md.getForeignKeyMetadata();
830        if(foreignKeyMetadata != null) {
831            sb.append(indent).append("foreignKeyMetadata:\n");
832            dump(foreignKeyMetadata, sb, indent + "    ", visited);
833        }
834
835        IndexMetadata indexMetadata = md.getIndexMetadata();
836        if(indexMetadata != null) {
837            sb.append(indent).append("indexMetadata:\n");
838            dump(indexMetadata, sb, indent + "    ", visited);
839        }
840
841        PrimaryKeyMetadata primaryKeyMetadata = md.getPrimaryKeyMetadata();
842        if(primaryKeyMetadata != null) {
843            sb.append(indent).append("primaryKeyMetadata:\n");
844            dump(primaryKeyMetadata, sb, indent + "    ", visited);
845        }
846
847        UniqueMetadata uniqueMetadata = md.getUniqueMetadata();
848        if(uniqueMetadata != null) {
849            sb.append(indent).append("uniqueMetadata:\n");
850            dump(uniqueMetadata, sb, indent + "    ", visited);
851        }
852
853        dump((Metadata)md, sb, indent, visited);
854    }
855
856    private static void dump(KeyMetadata md, StringBuilder sb, String indent, Set visited) {
857        int hash = md.hashCode();
858        sb.append(indent).append("KeyMetadata");
859        if(visited.contains(hash)) {
860            sb.append(" < ").append(hash).append(" >\n");
861            return;
862        }
863        else {
864            sb.append(" <* ").append(hash).append(" *>\n");
865            visited.add(hash);
866        }
867
868        KeyMetadataImpl mdImpl = (KeyMetadataImpl)md;
869        if(mdImpl.getInternal() == null) {
870            sb.append(indent).append("(null internal impl)\n");
871            return;
872        }
873
874        ForeignKeyAction deleteAction = md.getDeleteAction();
875        sb.append(indent).append("deleteAction: ").append(deleteAction).append("\n");
876
877        ForeignKeyAction updateAction = md.getUpdateAction();
878        sb.append(indent).append("updateAction: ").append(updateAction).append("\n");
879
880        String table = md.getTable();
881        sb.append(indent).append("table: ").append(table).append("\n");
882
883        String column = md.getColumn();
884        sb.append(indent).append("column: ").append(column).append("\n");
885
886        ColumnMetadata[] columns = md.getColumns();
887        if((columns != null) && (columns.length > 0)) {
888
889            int numberOfColumns = md.getNumberOfColumns();
890            sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n");
891
892            sb.append(indent).append("columns:\n");
893            int i = 0;
894            for(ColumnMetadata columnMetadata : columns) {
895                sb.append(indent).append("[").append(i++).append("]\n");
896                dump(columnMetadata, sb, indent + "    ", visited);
897            }
898        }
899
900        EmbeddedMetadata embeddedMetadata = md.getEmbeddedMetadata();
901        if(embeddedMetadata != null) {
902            sb.append(indent).append("embeddedMetadata:\n");
903            dump(embeddedMetadata, sb, indent + "    ", visited);
904        }
905
906        ForeignKeyMetadata foreignKeyMetadata = md.getForeignKeyMetadata();
907        if(foreignKeyMetadata != null) {
908            sb.append(indent).append("foreignKeyMetadata:\n");
909            dump(foreignKeyMetadata, sb, indent + "    ", visited);
910        }
911
912        IndexMetadata indexMetadata = md.getIndexMetadata();
913        if(indexMetadata != null) {
914            sb.append(indent).append("indexMetadata:\n");
915            dump(indexMetadata, sb, indent + "    ", visited);
916        }
917
918        UniqueMetadata uniqueMetadata = md.getUniqueMetadata();
919        if(uniqueMetadata != null) {
920            sb.append(indent).append("uniqueMetadata:\n");
921            dump(uniqueMetadata, sb, indent + "    ", visited);
922        }
923
924        dump((Metadata)md, sb, indent, visited);
925    }
926
927    private static void dump(MapMetadata md, StringBuilder sb, String indent, Set visited) {
928        int hash = md.hashCode();
929        sb.append(indent).append("MapMetadata");
930        if(visited.contains(hash)) {
931            sb.append(" < ").append(hash).append(" >\n");
932            return;
933        }
934        else {
935            sb.append(" <* ").append(hash).append(" *>\n");
936            visited.add(hash);
937        }
938
939        MapMetadataImpl mdImpl = (MapMetadataImpl)md;
940        if(mdImpl.getInternal() == null) {
941            sb.append(indent).append("(null internal impl)\n");
942            return;
943        }
944
945        Boolean dependentKey = md.getDependentKey();
946        sb.append(indent).append("dependentKey: ").append(dependentKey).append("\n");
947
948        Boolean dependentValue = md.getDependentValue();
949        sb.append(indent).append("dependentValue: ").append(dependentValue).append("\n");
950
951        Boolean embeddedKey = md.getEmbeddedKey();
952        sb.append(indent).append("embeddedKey: ").append(embeddedKey).append("\n");
953
954        Boolean embeddedValue = md.getEmbeddedValue();
955        sb.append(indent).append("embeddedValue: ").append(embeddedValue).append("\n");
956
957        Boolean serializedKey = md.getSerializedKey();
958        sb.append(indent).append("serializedKey: ").append(serializedKey).append("\n");
959
960        Boolean serializedValue = md.getSerializedValue();
961        sb.append(indent).append("serializedValue: ").append(serializedValue).append("\n");
962
963        String keyType = md.getKeyType();
964        sb.append(indent).append("keyType: ").append(keyType).append("\n");
965
966        String valueType = md.getValueType();
967        sb.append(indent).append("valueType: ").append(valueType).append("\n");
968
969        dump((Metadata)md, sb, indent, visited);
970    }
971
972    private static void dump(MemberMetadata md, StringBuilder sb, String indent, Set visited) {
973
974        MemberMetadataImpl mdImpl = (MemberMetadataImpl)md;
975        if(mdImpl.getInternal() == null) {
976            sb.append(indent).append("(member null internal impl)\n");
977            return;
978        }
979
980        String name = md.getName();
981        sb.append(indent).append("name: ").append(name).append("\n");
982
983        ForeignKeyAction deleteAction = md.getDeleteAction();
984        sb.append(indent).append("deleteAction: ").append(deleteAction).append("\n");
985
986        IdGeneratorStrategy valueStrategy = md.getValueStrategy();
987        sb.append(indent).append("valueStrategy: ").append(valueStrategy).append("\n");
988
989        PersistenceModifier persistenceModifier = md.getPersistenceModifier();
990        sb.append(indent).append("persistenceModifier: ").append(persistenceModifier).append("\n");
991
992        NullValue nullValue = md.getNullValue();
993        sb.append(indent).append("nullValue: ").append(nullValue).append("\n");
994
995        boolean cacheable = md.getCacheable();
996        sb.append(indent).append("cacheable: ").append(cacheable).append("\n");
997
998        Boolean defaultFetchGroup = md.getDefaultFetchGroup();
999        sb.append(indent).append("defaultFetchGroup: ").append(defaultFetchGroup).append("\n");
1000
1001        Boolean dependent = md.getDependent();
1002        sb.append(indent).append("dependent: ").append(dependent).append("\n");
1003
1004        Boolean embedded = md.getEmbedded();
1005        sb.append(indent).append("embedded: ").append(embedded).append("\n");
1006
1007        Boolean indexed = md.getIndexed();
1008        sb.append(indent).append("indexed: ").append(indexed).append("\n");
1009
1010        boolean primaryKey = md.getPrimaryKey();
1011        sb.append(indent).append("primaryKey: ").append(primaryKey).append("\n");
1012
1013        Boolean serialized = md.getSerialized();
1014        sb.append(indent).append("serialized: ").append(serialized).append("\n");
1015
1016        Boolean unique = md.getUnique();
1017        sb.append(indent).append("unique: ").append(unique).append("\n");
1018
1019        String mappedBy = md.getMappedBy();
1020        sb.append(indent).append("mappedBy: ").append(mappedBy).append("\n");
1021
1022        int recursionDepth = md.getRecursionDepth();
1023        sb.append(indent).append("recursionDepth: ").append(recursionDepth).append("\n");
1024
1025        String column = md.getColumn();
1026        sb.append(indent).append("column: ").append(column).append("\n");
1027
1028        String customStrategy = md.getCustomStrategy();
1029        sb.append(indent).append("customStrategy: ").append(customStrategy).append("\n");
1030
1031        String fieldType = md.getFieldType();
1032        sb.append(indent).append("fieldType: ").append(fieldType).append("\n");
1033
1034        String loadFetchGroup = md.getLoadFetchGroup();
1035        sb.append(indent).append("loadFetchGroup: ").append(loadFetchGroup).append("\n");
1036
1037        String sequence = md.getSequence();
1038        sb.append(indent).append("sequence: ").append(sequence).append("\n");
1039
1040        String table = md.getTable();
1041        sb.append(indent).append("table: ").append(table).append("\n");
1042
1043        ArrayMetadata arrayMetadata = md.getArrayMetadata();
1044        if(arrayMetadata != null) {
1045            sb.append(indent).append("arrayMetadata:\n");
1046            dump(arrayMetadata, sb, indent + "    ", visited);
1047        }
1048
1049        CollectionMetadata collectionMetadata = md.getCollectionMetadata();
1050        if(collectionMetadata != null) {
1051            sb.append(indent).append("collectionMetadata:\n");
1052            dump(collectionMetadata, sb, indent + "    ", visited);
1053        }
1054
1055        ElementMetadata elementMetadata = md.getElementMetadata();
1056        if(elementMetadata != null) {
1057            sb.append(indent).append("elementMetadata:\n");
1058            dump(elementMetadata, sb, indent + "    ", visited);
1059        }
1060
1061        EmbeddedMetadata embeddedMetadata = md.getEmbeddedMetadata();
1062             if(embeddedMetadata != null) {
1063            sb.append(indent).append("embeddedMetadata:\n");
1064            dump(embeddedMetadata, sb, indent + "    ", visited);
1065        }
1066
1067        ForeignKeyMetadata foreignKeyMetadata = md.getForeignKeyMetadata();
1068        if(foreignKeyMetadata != null) {
1069            sb.append(indent).append("foreignKeyMetadata:\n");
1070            dump(foreignKeyMetadata, sb, indent + "    ", visited);
1071        }
1072
1073        IndexMetadata indexMetadata = md.getIndexMetadata();
1074        if(indexMetadata != null) {
1075            sb.append(indent).append("indexMetadata:\n");
1076            dump(indexMetadata, sb, indent + "    ", visited);
1077        }
1078
1079        JoinMetadata joinMetadata = md.getJoinMetadata();
1080        if(joinMetadata != null) {
1081            sb.append(indent).append("joinMetadata:\n");
1082            dump(joinMetadata, sb, indent + "    ", visited);
1083        }
1084
1085        KeyMetadata keyMetadata = md.getKeyMetadata();
1086        if(keyMetadata != null) {
1087            sb.append(indent).append("keyMetadata:\n");
1088            dump(keyMetadata, sb, indent + "    ", visited);
1089        }
1090
1091        MapMetadata mapMetadata = md.getMapMetadata();
1092        if(mapMetadata != null) {
1093            sb.append(indent).append("mapMetadata:\n");
1094            dump(mapMetadata, sb, indent + "    ", visited);
1095        }
1096
1097        OrderMetadata orderMetadata = md.getOrderMetadata();
1098        if(orderMetadata != null) {
1099            sb.append(indent).append("orderMetadata:\n");
1100            dump(orderMetadata, sb, indent + "    ", visited);
1101        }
1102
1103        UniqueMetadata uniqueMetadata = md.getUniqueMetadata();
1104        if(uniqueMetadata != null) {
1105            sb.append(indent).append("uniqueMetadata:\n");
1106            dump(uniqueMetadata, sb, indent + "    ", visited);
1107        }
1108
1109        ValueMetadata valueMetadata = md.getValueMetadata();
1110        if(valueMetadata != null) {
1111            sb.append(indent).append("valueMetadata:\n");
1112            dump(valueMetadata, sb, indent + "    ", visited);
1113        }
1114
1115        ColumnMetadata[] columns = md.getColumns();
1116        if((columns != null) && (columns.length > 0)) {
1117
1118            int numberOfColumns = md.getNumberOfColumns();
1119            sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n");
1120
1121            sb.append(indent).append("columns:\n");
1122            int i = 0;
1123            for(ColumnMetadata columnMetadata : columns) {
1124                sb.append(indent).append("[").append(i++).append("]\n");
1125                dump(columnMetadata, sb, indent + "    ", visited);
1126            }
1127        }
1128
1129        dump((Metadata)md, sb, indent, visited);
1130    }
1131
1132    private static void dump(FieldMetadata md, StringBuilder sb, String indent, Set visited) {
1133        int hash = md.hashCode();
1134        sb.append(indent).append("FieldMetadata");
1135        if(visited.contains(hash)) {
1136            sb.append(" < ").append(hash).append(" >\n");
1137            return;
1138        }
1139        else {
1140            sb.append(" <* ").append(hash).append(" *>\n");
1141            visited.add(hash);
1142        }
1143
1144        FieldMetadataImpl mdImpl = (FieldMetadataImpl)md;
1145        if(mdImpl.getInternal() == null) {
1146            sb.append(indent).append("(null internal impl)\n");
1147            return;
1148        }
1149
1150        dump((MemberMetadata)md, sb, indent, visited);
1151    }
1152
1153    private static void dump(PropertyMetadata md, StringBuilder sb, String indent, Set visited) {
1154        int hash = md.hashCode();
1155        sb.append(indent).append("PropertyMetadata");
1156        if(visited.contains(hash)) {
1157            sb.append(" < ").append(hash).append(" >\n");
1158            return;
1159        }
1160        else {
1161            sb.append(" <* ").append(hash).append(" *>\n");
1162            visited.add(hash);
1163        }
1164
1165        PropertyMetadataImpl mdImpl = (PropertyMetadataImpl)md;
1166        if(mdImpl.getInternal() == null) {
1167            sb.append(indent).append("(null internal impl)\n");
1168            return;
1169        }
1170
1171        String fieldName = md.getFieldName();
1172        sb.append(indent).append("fieldName: ").append(fieldName).append("\n");
1173
1174        dump((MemberMetadata)md, sb, indent, visited);
1175    }
1176
1177    private static void dump(OrderMetadata md, StringBuilder sb, String indent, Set visited) {
1178        int hash = md.hashCode();
1179        sb.append(indent).append("OrderMetadata");
1180        if(visited.contains(hash)) {
1181            sb.append(" < ").append(hash).append(" >\n");
1182            return;
1183        }
1184        else {
1185            sb.append(" <* ").append(hash).append(" *>\n");
1186            visited.add(hash);
1187        }
1188
1189        OrderMetadataImpl mdImpl = (OrderMetadataImpl)md;
1190        if(mdImpl.getInternal() == null) {
1191            sb.append(indent).append("(null internal impl)\n");
1192            return;
1193        }
1194
1195        String mappedBy = md.getMappedBy();
1196        sb.append(indent).append("mappedBy: ").append(mappedBy).append("\n");
1197
1198        String column = md.getColumn();
1199        sb.append(indent).append("column: ").append(column).append("\n");
1200
1201        ColumnMetadata[] columns = md.getColumns();
1202        if((columns != null) && (columns.length > 0)) {
1203
1204            int numberOfColumns = md.getNumberOfColumns();
1205            sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n");
1206
1207            sb.append(indent).append("columns:\n");
1208            int i = 0;
1209            for(ColumnMetadata columnMetadata : columns) {
1210                sb.append(indent).append("[").append(i++).append("]\n");
1211                dump(columnMetadata, sb, indent + "    ", visited);
1212            }
1213        }
1214
1215        IndexMetadata indexMetadata = md.getIndexMetadata();
1216        if(indexMetadata != null) {
1217            sb.append(indent).append("indexMetadata:\n");
1218            dump(indexMetadata, sb, indent + "    ", visited);
1219        }
1220
1221        dump((Metadata)md, sb, indent, visited);
1222    }
1223
1224    private static void dump(PackageMetadata md, StringBuilder sb, String indent, Set visited) {
1225        int hash = md.hashCode();
1226        sb.append(indent).append("PackageMetadata");
1227        if(visited.contains(hash)) {
1228            sb.append(" < ").append(hash).append(" >\n");
1229            return;
1230        }
1231        else {
1232            sb.append(" <* ").append(hash).append(" *>\n");
1233            visited.add(hash);
1234        }
1235
1236        PackageMetadataImpl mdImpl = (PackageMetadataImpl)md;
1237        if(mdImpl.getInternal() == null) {
1238            sb.append(indent).append("(null internal impl)\n");
1239            return;
1240        }
1241
1242        String name = md.getName();
1243        sb.append(indent).append("name: ").append(name).append("\n");
1244
1245        String catalog = md.getCatalog();
1246        sb.append(indent).append("catalog: ").append(catalog).append("\n");
1247
1248        String schema = md.getSchema();
1249        sb.append(indent).append("schema: ").append(schema).append("\n");
1250
1251        ClassMetadata[] classes = md.getClasses();
1252        if((classes != null) && (classes.length > 0)) {
1253
1254            int numberOfClasses = md.getNumberOfClasses();
1255            sb.append(indent).append("numberOfClasses: ").append(numberOfClasses).append("\n");
1256
1257            sb.append(indent).append("classes:\n");
1258            int i = 0;
1259            for(ClassMetadata classMetadata : classes) {
1260                sb.append(indent).append("[").append(i++).append("]\n");
1261                dump(classMetadata, sb, indent + "    ", visited);
1262            }
1263        }
1264
1265        InterfaceMetadata[] interfaces = md.getInterfaces();
1266        if((interfaces != null) && (interfaces.length > 0)) {
1267
1268            int numberOfInterfaces = md.getNumberOfInterfaces();
1269            sb.append(indent).append("numberOfInterfaces: ").append(numberOfInterfaces).append("\n");
1270
1271            sb.append(indent).append("interfaces:\n");
1272            int i = 0;
1273            for(InterfaceMetadata interfaceMetadata : interfaces) {
1274                sb.append(indent).append("[").append(i++).append("]\n");
1275                dump(interfaceMetadata, sb, indent + "    ", visited);
1276            }
1277        }
1278
1279        SequenceMetadata[] sequences = md.getSequences();
1280        if((sequences != null) && (sequences.length > 0)) {
1281
1282            int numberOfSequences = md.getNumberOfSequences();
1283            sb.append(indent).append("numberOfSequences: ").append(numberOfSequences).append("\n");
1284
1285            sb.append(indent).append("sequences:\n");
1286            int i = 0;
1287            for(SequenceMetadata sequenceMetadata : sequences) {
1288                sb.append(indent).append("[").append(i++).append("]\n");
1289                dump(sequenceMetadata, sb, indent + "    ", visited);
1290            }
1291        }
1292
1293        dump((Metadata)md, sb, indent, visited);
1294    }
1295
1296    private static void dump(PrimaryKeyMetadata md, StringBuilder sb, String indent, Set visited) {
1297        int hash = md.hashCode();
1298        sb.append(indent).append("PrimaryKeyMetadata");
1299        if(visited.contains(hash)) {
1300            sb.append(" < ").append(hash).append(" >\n");
1301            return;
1302        }
1303        else {
1304            sb.append(" <* ").append(hash).append(" *>\n");
1305            visited.add(hash);
1306        }
1307
1308        PrimaryKeyMetadataImpl mdImpl = (PrimaryKeyMetadataImpl)md;
1309        if(mdImpl.getInternal() == null) {
1310            sb.append(indent).append("(null internal impl)\n");
1311            return;
1312        }
1313
1314        String name = md.getName();
1315        sb.append(indent).append("name: ").append(name).append("\n");
1316
1317        String column = md.getColumn();
1318        sb.append(indent).append("column: ").append(column).append("\n");
1319
1320        ColumnMetadata[] columns = md.getColumns();
1321        if((columns != null) && (columns.length > 0)) {
1322
1323            int numberOfColumns = md.getNumberOfColumns();
1324            sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n");
1325
1326            sb.append(indent).append("columns:\n");
1327            int i = 0;
1328            for(ColumnMetadata columnMetadata : columns) {
1329                sb.append(indent).append("[").append(i++).append("]\n");
1330                dump(columnMetadata, sb, indent + "    ", visited);
1331            }
1332        }
1333
1334        dump((Metadata)md, sb, indent, visited);
1335    }
1336
1337    private static void dump(QueryMetadata md, StringBuilder sb, String indent, Set visited) {
1338        int hash = md.hashCode();
1339        sb.append(indent).append("QueryMetadata");
1340        if(visited.contains(hash)) {
1341            sb.append(" < ").append(hash).append(" >\n");
1342            return;
1343        }
1344        else {
1345            sb.append(" <* ").append(hash).append(" *>\n");
1346            visited.add(hash);
1347        }
1348
1349        QueryMetadataImpl mdImpl = (QueryMetadataImpl)md;
1350        if(mdImpl.getInternal() == null) {
1351            sb.append(indent).append("(null internal impl)\n");
1352            return;
1353        }
1354
1355        String name = md.getName();
1356        sb.append(indent).append("name: ").append(name).append("\n");
1357
1358        String fetchPlan = md.getFetchPlan();
1359        sb.append(indent).append("fetchPlan: ").append(fetchPlan).append("\n");
1360
1361        String language = md.getLanguage();
1362        sb.append(indent).append("language: ").append(language).append("\n");
1363
1364        String query = md.getQuery();
1365        sb.append(indent).append("query: ").append(query).append("\n");
1366
1367        String resultClass = md.getResultClass();
1368        sb.append(indent).append("resultClass: ").append(resultClass).append("\n");
1369
1370        Boolean unique = md.getUnique();
1371        sb.append(indent).append("unique: ").append(unique).append("\n");
1372
1373        boolean unmodifiable = md.getUnmodifiable();
1374        sb.append(indent).append("unmodifiable: ").append(unmodifiable).append("\n");
1375
1376        dump((Metadata)md, sb, indent, visited);
1377    }
1378
1379    private static void dump(SequenceMetadata md, StringBuilder sb, String indent, Set visited) {
1380        int hash = md.hashCode();
1381        sb.append(indent).append("SequenceMetadata");
1382        if(visited.contains(hash)) {
1383            sb.append(" < ").append(hash).append(" >\n");
1384            return;
1385        }
1386        else {
1387            sb.append(" <* ").append(hash).append(" *>\n");
1388            visited.add(hash);
1389        }
1390
1391        SequenceMetadataImpl mdImpl = (SequenceMetadataImpl)md;
1392        if(mdImpl.getInternal() == null) {
1393            sb.append(indent).append("(null internal impl)\n");
1394            return;
1395        }
1396
1397        String name = md.getName();
1398        sb.append(indent).append("name: ").append(name).append("\n");
1399
1400        Integer allocationSize = md.getAllocationSize();
1401        sb.append(indent).append("allocationSize: ").append(allocationSize).append("\n");
1402
1403        String datastoreSequence = md.getDatastoreSequence();
1404        sb.append(indent).append("datastoreSequence: ").append(datastoreSequence).append("\n");
1405
1406        String factoryClass = md.getFactoryClass();
1407        sb.append(indent).append("factoryClass: ").append(factoryClass).append("\n");
1408
1409        Integer initialValue = md.getInitialValue();
1410        sb.append(indent).append("initialValue: ").append(initialValue).append("\n");
1411
1412        SequenceStrategy sequenceStrategy = md.getSequenceStrategy();
1413        sb.append(indent).append("sequenceStrategy: ").append(sequenceStrategy).append("\n");
1414
1415        dump((Metadata)md, sb, indent, visited);
1416    }
1417
1418    private static void dump(TypeMetadata md, StringBuilder sb, String indent, Set visited) {
1419
1420        TypeMetadataImpl mdImpl = (TypeMetadataImpl)md;
1421        if(mdImpl.getInternal() == null) {
1422            sb.append(indent).append("(type null internal impl)\n");
1423            return;
1424        }
1425
1426        String name = md.getName();
1427        sb.append(indent).append("name: ").append(name).append("\n");
1428
1429        String objectIdClass = md.getObjectIdClass();
1430        sb.append(indent).append("objectIdClass: ").append(objectIdClass).append("\n");
1431
1432        boolean requiresExtent = md.getRequiresExtent();
1433        sb.append(indent).append("requiresExtent: ").append(requiresExtent).append("\n");
1434
1435        String schema = md.getSchema();
1436        sb.append(indent).append("schema: ").append(schema).append("\n");
1437
1438        boolean serializeRead = md.getSerializeRead();
1439        sb.append(indent).append("serializeRead: ").append(serializeRead).append("\n");
1440
1441        String table = md.getTable();
1442        sb.append(indent).append("table: ").append(table).append("\n");
1443
1444        boolean detachable = md.getDetachable();
1445        sb.append(indent).append("detachable: ").append(detachable).append("\n");
1446
1447        Boolean embeddedOnly = md.getEmbeddedOnly();
1448        sb.append(indent).append("embeddedOnly: ").append(embeddedOnly).append("\n");
1449
1450        IdentityType identityType = md.getIdentityType();
1451        sb.append(indent).append("identityType: ").append(identityType).append("\n");
1452
1453        boolean cacheable = md.getCacheable();
1454        sb.append(indent).append("cacheable: ").append(cacheable).append("\n");
1455
1456        String catalog = md.getCatalog();
1457        sb.append(indent).append("catalog: ").append(catalog).append("\n");
1458
1459        ColumnMetadata[] columns = md.getColumns();
1460        if((columns != null) && (columns.length > 0)) {
1461
1462            int numberOfColumns = md.getNumberOfColumns();
1463            sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n");
1464
1465            sb.append(indent).append("columns:\n");
1466            int i = 0;
1467            for(ColumnMetadata columnMetadata : columns) {
1468                sb.append(indent).append("[").append(i++).append("]\n");
1469                dump(columnMetadata, sb, indent + "    ", visited);
1470            }
1471        }
1472
1473        DatastoreIdentityMetadata datastoreIdentityMetadata = md.getDatastoreIdentityMetadata();
1474        if(datastoreIdentityMetadata != null) {
1475            sb.append(indent).append("datastoreIdentityMetadata:\n");
1476            dump(datastoreIdentityMetadata, sb, indent + "    ", visited);
1477        }
1478
1479        FetchGroupMetadata[] fetchGroups = md.getFetchGroups();
1480        if((fetchGroups != null) && (fetchGroups.length > 0)) {
1481
1482            int numberOfFetchGroups = md.getNumberOfFetchGroups();
1483            sb.append(indent).append("numberOfFetchGroups: ").append(numberOfFetchGroups).append("\n");
1484
1485            sb.append(indent).append("fetchGroups:\n");
1486            int i = 0;
1487            for(FetchGroupMetadata fetchGroupMetadata : fetchGroups) {
1488                sb.append(indent).append("[").append(i++).append("]\n");
1489                dump(fetchGroupMetadata, sb, indent + "    ", visited);
1490            }
1491        }
1492
1493        ForeignKeyMetadata[] foreignKeys = md.getForeignKeys();
1494        if((foreignKeys != null) && (foreignKeys.length > 0)) {
1495
1496            int numberOfForeignKeys = md.getNumberOfForeignKeys();
1497            sb.append(indent).append("numberOfForeignKeys: ").append(numberOfForeignKeys).append("\n");
1498
1499            sb.append(indent).append("foreignKeys:\n");
1500            int i = 0;
1501            for(ForeignKeyMetadata foreignKeyMetadata : foreignKeys) {
1502                sb.append(indent).append("[").append(i++).append("]\n");
1503                dump(foreignKeyMetadata, sb, indent + "    ", visited);
1504            }
1505        }
1506
1507        IndexMetadata[] indices = md.getIndices();
1508        if((indices != null) && (indices.length > 0)) {
1509
1510            int numberOfIndices = md.getNumberOfIndices();
1511            sb.append(indent).append("numberOfIndices: ").append(numberOfIndices).append("\n");
1512
1513            sb.append(indent).append("indices:\n");
1514            int i = 0;
1515            for(IndexMetadata indexMetadata : indices) {
1516                sb.append(indent).append("[").append(i++).append("]\n");
1517                dump(indexMetadata, sb, indent + "    ", visited);
1518            }
1519        }
1520
1521        InheritanceMetadata inheritanceMetadata = md.getInheritanceMetadata();
1522        if(inheritanceMetadata != null) {
1523            sb.append(indent).append("inheritanceMetadata:\n");
1524            dump(inheritanceMetadata, sb, indent + "    ", visited);
1525        }
1526
1527        JoinMetadata[] joins = md.getJoins();
1528        if((joins != null) && (joins.length > 0)) {
1529
1530            int numberOfJoins = md.getNumberOfJoins();
1531            sb.append(indent).append("numberOfJoins: ").append(numberOfJoins).append("\n");
1532
1533            sb.append(indent).append("joins:\n");
1534            int i = 0;
1535            for(JoinMetadata joinMetadata : joins) {
1536                sb.append(indent).append("[").append(i++).append("]\n");
1537                dump(joinMetadata, sb, indent + "    ", visited);
1538            }
1539        }
1540
1541        MemberMetadata[] members = md.getMembers();
1542        if((members != null) && (members.length > 0)) {
1543
1544            int numberOfMembers = md.getNumberOfMembers();
1545            sb.append(indent).append("numberOfMembers: ").append(numberOfMembers).append("\n");
1546
1547            sb.append(indent).append("members:\n");
1548            int i = 0;
1549            for(MemberMetadata memberMetadata : members) {
1550                sb.append(indent).append("[").append(i++).append("]\n");
1551                if(memberMetadata instanceof FieldMetadata) {
1552                    dump((FieldMetadata)memberMetadata, sb, indent + "    ", visited);
1553                }
1554                else if(memberMetadata instanceof PropertyMetadata) {
1555                    dump((PropertyMetadata)memberMetadata, sb, indent + "    ", visited);
1556                }
1557            }
1558        }
1559
1560        PrimaryKeyMetadata primaryKeyMetadata = md.getPrimaryKeyMetadata();
1561        if(primaryKeyMetadata != null) {
1562            sb.append(indent).append("primaryKeyMetadata:\n");
1563            dump(primaryKeyMetadata, sb, indent + "    ", visited);
1564        }
1565
1566        QueryMetadata[] queries = md.getQueries();
1567        if((queries != null) && (queries.length > 0)) {
1568
1569            int numberOfQueries = md.getNumberOfQueries();
1570            sb.append(indent).append("numberOfQueries: ").append(numberOfQueries).append("\n");
1571
1572            sb.append(indent).append("queries:\n");
1573            int i = 0;
1574            for(QueryMetadata queryMetadata : queries) {
1575                sb.append(indent).append("[").append(i++).append("]\n");
1576                dump(queryMetadata, sb, indent + "    ", visited);
1577            }
1578        }
1579
1580        UniqueMetadata[] uniques = md.getUniques();
1581        if((uniques != null) && (uniques.length > 0)) {
1582
1583            int numberOfUniques = md.getNumberOfUniques();
1584            sb.append(indent).append("numberOfUniques: ").append(numberOfUniques).append("\n");
1585
1586            sb.append(indent).append("uniques:\n");
1587            int i = 0;
1588            for(UniqueMetadata uniqueMetadata : uniques) {
1589                sb.append(indent).append("[").append(i++).append("]\n");
1590                dump(uniqueMetadata, sb, indent + "    ", visited);
1591            }
1592        }
1593
1594        VersionMetadata versionMetadata = md.getVersionMetadata();
1595        if(versionMetadata != null) {
1596            sb.append(indent).append("versionMetadata:\n");
1597            dump(versionMetadata, sb, indent + "    ", visited);
1598        }
1599
1600        dump((Metadata)md, sb, indent, visited);
1601    }
1602
1603    private static void dump(ClassMetadata md, StringBuilder sb, String indent, Set visited) {
1604        int hash = md.hashCode();
1605        sb.append(indent).append("ClassMetadata");
1606        if(visited.contains(hash)) {
1607            sb.append(" < ").append(hash).append(" >\n");
1608            return;
1609        }
1610        else {
1611            sb.append(" <* ").append(hash).append(" *>\n");
1612            visited.add(hash);
1613        }
1614
1615        ClassMetadataImpl mdImpl = (ClassMetadataImpl)md;
1616        if(mdImpl.getInternal() == null) {
1617            sb.append(indent).append("(null internal impl)\n");
1618            return;
1619        }
1620
1621        ClassPersistenceModifier persistenceModifier = md.getPersistenceModifier();
1622        sb.append(indent).append("persistenceModifier: ").append(persistenceModifier).append("\n");
1623
1624        dump((TypeMetadata)md, sb, indent, visited);
1625    }
1626
1627    private static void dump(InterfaceMetadata md, StringBuilder sb, String indent, Set visited) {
1628        int hash = md.hashCode();
1629        sb.append(indent).append("InterfaceMetadata");
1630        if(visited.contains(hash)) {
1631            sb.append(" < ").append(hash).append(" >\n");
1632            return;
1633        }
1634        else {
1635            sb.append(" <* ").append(hash).append(" *>\n");
1636            visited.add(hash);
1637        }
1638
1639        InterfaceMetadataImpl mdImpl = (InterfaceMetadataImpl)md;
1640        if(mdImpl.getInternal() == null) {
1641            sb.append(indent).append("(null internal impl)\n");
1642            return;
1643        }
1644
1645        dump((TypeMetadata)md, sb, indent, visited);
1646    }
1647
1648    private static void dump(UniqueMetadata md, StringBuilder sb, String indent, Set visited) {
1649        int hash = md.hashCode();
1650        sb.append(indent).append("UniqueMetadata");
1651        if(visited.contains(hash)) {
1652            sb.append(" < ").append(hash).append(" >\n");
1653            return;
1654        }
1655        else {
1656            sb.append(" <* ").append(hash).append(" *>\n");
1657            visited.add(hash);
1658        }
1659
1660        UniqueMetadataImpl mdImpl = (UniqueMetadataImpl)md;
1661        if(mdImpl.getInternal() == null) {
1662            sb.append(indent).append("(null internal impl)\n");
1663            return;
1664        }
1665
1666        String name = md.getName();
1667        sb.append(indent).append("name: ").append(name).append("\n");
1668
1669        String table = md.getTable();
1670        sb.append(indent).append("table: ").append(table).append("\n");
1671
1672        Boolean deferred = md.getDeferred();
1673        sb.append(indent).append("deferred: ").append(deferred).append("\n");
1674
1675        ColumnMetadata[] columns = md.getColumns();
1676        if((columns != null) && (columns.length > 0)) {
1677
1678            int numberOfColumns = md.getNumberOfColumns();
1679            sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n");
1680
1681            sb.append(indent).append("columns:\n");
1682            int i = 0;
1683            for(ColumnMetadata columnMetadata : columns) {
1684                sb.append(indent).append("[").append(i++).append("]\n");
1685                dump(columnMetadata, sb, indent + "    ", visited);
1686            }
1687        }
1688
1689        MemberMetadata[] members = md.getMembers();
1690        if((members != null) && (members.length > 0)) {
1691
1692            int numberOfMembers = md.getNumberOfMembers();
1693            sb.append(indent).append("numberOfMembers: ").append(numberOfMembers).append("\n");
1694
1695            sb.append(indent).append("members:\n");
1696            int i = 0;
1697            for(MemberMetadata memberMetadata : members) {
1698                sb.append(indent).append("[").append(i++).append("]\n");
1699                if(memberMetadata instanceof FieldMetadata) {
1700                    dump((FieldMetadata)memberMetadata, sb, indent + "    ", visited);
1701                }
1702                else if(memberMetadata instanceof PropertyMetadata) {
1703                    dump((PropertyMetadata)memberMetadata, sb, indent + "    ", visited);
1704                }
1705            }
1706        }
1707
1708        dump((Metadata)md, sb, indent, visited);
1709    }
1710
1711    private static void dump(ValueMetadata md, StringBuilder sb, String indent, Set visited) {
1712        int hash = md.hashCode();
1713        sb.append(indent).append("ValueMetadata");
1714        if(visited.contains(hash)) {
1715            sb.append(" < ").append(hash).append(" >\n");
1716            return;
1717        }
1718        else {
1719            sb.append(" <* ").append(hash).append(" *>\n");
1720            visited.add(hash);
1721        }
1722
1723        ValueMetadataImpl mdImpl = (ValueMetadataImpl)md;
1724        if(mdImpl.getInternal() == null) {
1725            sb.append(indent).append("(null internal impl)\n");
1726            return;
1727        }
1728
1729        String table = md.getTable();
1730        sb.append(indent).append("table: ").append(table).append("\n");
1731
1732        String column = md.getColumn();
1733        sb.append(indent).append("column: ").append(column).append("\n");
1734
1735        ForeignKeyAction updateAction = md.getUpdateAction();
1736        sb.append(indent).append("updateAction: ").append(updateAction).append("\n");
1737
1738        ForeignKeyAction deleteAction = md.getDeleteAction();
1739        sb.append(indent).append("deleteAction: ").append(deleteAction).append("\n");
1740
1741        ColumnMetadata[] columns = md.getColumns();
1742        if((columns != null) && (columns.length > 0)) {
1743            sb.append(indent).append("columns:\n");
1744            int i = 0;
1745            for(ColumnMetadata columnMetadata : columns) {
1746                sb.append(indent).append("[").append(i++).append("]\n");
1747                dump(columnMetadata, sb, indent + "    ", visited);
1748            }
1749        }
1750
1751        EmbeddedMetadata embeddedMetadata = md.getEmbeddedMetadata();
1752        if(embeddedMetadata != null) {
1753            sb.append(indent).append("embeddedMetadata:\n");
1754            dump(embeddedMetadata, sb, indent + "    ", visited);
1755        }
1756
1757        ForeignKeyMetadata foreignKeyMetadata = md.getForeignKeyMetadata();
1758        if(foreignKeyMetadata != null) {
1759            sb.append(indent).append("foreignKeyMetadata:\n");
1760            dump(foreignKeyMetadata, sb, indent + "    ", visited);
1761        }
1762
1763        IndexMetadata indexMetadata = md.getIndexMetadata();
1764        if(indexMetadata != null) {
1765            sb.append(indent).append("indexMetadata:\n");
1766            dump(indexMetadata, sb, indent + "    ", visited);
1767        }
1768
1769        UniqueMetadata uniqueMetadata = md.getUniqueMetadata();
1770        if(uniqueMetadata != null) {
1771            sb.append(indent).append("uniqueMetadata:\n");
1772            dump(uniqueMetadata, sb, indent + "    ", visited);
1773        }
1774
1775        dump((Metadata)md, sb, indent, visited);
1776    }
1777
1778    private static void dump(VersionMetadata md, StringBuilder sb, String indent, Set visited) {
1779        int hash = md.hashCode();
1780        sb.append(indent).append("VersionMetadata");
1781        if(visited.contains(hash)) {
1782            sb.append(" < ").append(hash).append(" >\n");
1783            return;
1784        }
1785        else {
1786            sb.append(" <* ").append(hash).append(" *>\n");
1787            visited.add(hash);
1788        }
1789
1790        VersionMetadataImpl mdImpl = (VersionMetadataImpl)md;
1791        if(mdImpl.getInternal() == null) {
1792            sb.append(indent).append("(null internal impl)\n");
1793            return;
1794        }
1795
1796        String column = md.getColumn();
1797        sb.append(indent).append("column: ").append(column).append("\n");
1798
1799        Indexed indexed = md.getIndexed();
1800        sb.append(indent).append("indexed: ").append(indexed).append("\n");
1801
1802        VersionStrategy strategy = md.getStrategy();
1803        sb.append(indent).append("strategy: ").append(strategy).append("\n");
1804
1805        ColumnMetadata[] columns = md.getColumns();
1806        if((columns != null) && (columns.length > 0)) {
1807
1808            int numberOfColumns = md.getNumberOfColumns();
1809            sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n");
1810
1811            sb.append(indent).append("columns:\n");
1812            int i = 0;
1813            for(ColumnMetadata columnMetadata : columns) {
1814            sb.append(indent).append("[").append(i++).append("]\n");
1815                dump(columnMetadata, sb, indent + "    ", visited);
1816            }
1817        }
1818
1819        IndexMetadata indexMetadata = md.getIndexMetadata();
1820        if(indexMetadata != null) {
1821            sb.append(indent).append("indexMetadata:\n");
1822            dump(indexMetadata, sb, indent + "    ", visited);
1823        }
1824
1825        dump((Metadata)md, sb, indent, visited);
1826    }
1827}
Note: See TracBrowser for help on using the repository browser.