/** * MailArchiver is an application that provides services for storing and managing e-mail messages through a Web Services SOAP interface. * Copyright (C) 2012 Marcio Andre Scholl Levien and Fernando Alberto Reuter Wendt and Jose Ronaldo Nogueira Fonseca Junior * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ /******************************************************************************\ * * This product was developed by * * SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO), * * a government company established under Brazilian law (5.615/70), * at Department of Development of Porto Alegre. * \******************************************************************************/ package serpro.mailarchiver.util.jdo; import java.util.HashSet; import java.util.Set; import javax.jdo.annotations.DiscriminatorStrategy; import javax.jdo.annotations.ForeignKeyAction; import javax.jdo.annotations.IdGeneratorStrategy; import javax.jdo.annotations.IdentityType; import javax.jdo.annotations.InheritanceStrategy; import javax.jdo.annotations.NullValue; import javax.jdo.annotations.PersistenceModifier; import javax.jdo.annotations.SequenceStrategy; import javax.jdo.annotations.VersionStrategy; import javax.jdo.metadata.*; import org.datanucleus.api.jdo.metadata.*; public class MetadataDumper { public static String dump(Class clazz, PersistenceManagerFactory pmf) { Set visited = new HashSet(); StringBuilder sb = new StringBuilder(); if(clazz.isInterface()) { InterfaceMetadata md = (InterfaceMetadata) pmf.getMetadata(clazz.getName()); dump(md, sb, "", visited); } else { ClassMetadata md = (ClassMetadata) pmf.getMetadata(clazz.getName()); dump(md, sb, "", visited); } return sb.toString(); } private static void dump(ExtensionMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("ExtensionMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } String vendorName = md.getVendorName(); sb.append(indent).append("vendorName: ").append(vendorName).append("\n"); String key = md.getKey(); sb.append(indent).append("key: ").append(key).append("\n"); String value = md.getValue(); sb.append(indent).append("value: ").append(value).append("\n"); } private static void dump(Metadata md, StringBuilder sb, String indent, Set visited) { ExtensionMetadata[] extensions = md.getExtensions(); if((extensions != null) && (extensions.length > 0)) { int numberOfExtensions = md.getNumberOfExtensions(); sb.append(indent).append("numberOfExtensions: ").append(numberOfExtensions).append("\n"); sb.append(indent).append("extensions:\n"); int i = 0; for(ExtensionMetadata extensionMetadata : extensions) { sb.append(indent).append("[").append(i++).append("]\n"); dump(extensionMetadata, sb, indent + " ", visited); } } Metadata parent = md.getParent(); sb.append(indent).append("parent class: ").append(parent.getClass().getName()).append("\n"); } private static void dump(ArrayMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("ArrayMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } ArrayMetadataImpl mdImpl = (ArrayMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } String elementType = md.getElementType(); sb.append(indent).append("elementType: ").append(elementType).append("\n"); Boolean dependentElement = md.getDependentElement(); sb.append(indent).append("dependentElement: ").append(dependentElement).append("\n"); Boolean embeddedElement = md.getEmbeddedElement(); sb.append(indent).append("embeddedElement: ").append(embeddedElement).append("\n"); Boolean serializedElement = md.getSerializedElement(); sb.append(indent).append("serializedElement: ").append(serializedElement).append("\n"); dump((Metadata)md, sb, indent, visited); } private static void dump(CollectionMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("CollectionMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } CollectionMetadataImpl mdImpl = (CollectionMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } String elementType = md.getElementType(); sb.append(indent).append("elementType: ").append(elementType).append("\n"); Boolean dependentElement = md.getDependentElement(); sb.append(indent).append("dependentElement: ").append(dependentElement).append("\n"); Boolean embeddedElement = md.getEmbeddedElement(); sb.append(indent).append("embeddedElement: ").append(embeddedElement).append("\n"); Boolean serializedElement = md.getSerializedElement(); sb.append(indent).append("serializedElement: ").append(serializedElement).append("\n"); dump((Metadata)md, sb, indent, visited); } private static void dump(ColumnMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("ColumnMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } ColumnMetadataImpl mdImpl = (ColumnMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } String name = md.getName(); sb.append(indent).append("name: ").append(name).append("\n"); Boolean allowsNull = md.getAllowsNull(); sb.append(indent).append("allowsNull: ").append(allowsNull).append("\n"); String defaultValue = md.getDefaultValue(); sb.append(indent).append("defaultValue: ").append(defaultValue).append("\n"); String insertValue = md.getInsertValue(); sb.append(indent).append("insertValue: ").append(insertValue).append("\n"); String jDBCType = md.getJDBCType(); sb.append(indent).append("jDBCType: ").append(jDBCType).append("\n"); Integer length = md.getLength(); sb.append(indent).append("length: ").append(length).append("\n"); Integer position = md.getPosition(); sb.append(indent).append("position: ").append(position).append("\n"); String sQLType = md.getSQLType(); sb.append(indent).append("sQLType: ").append(sQLType).append("\n"); String target = md.getTarget(); sb.append(indent).append("target: ").append(target).append("\n"); String targetField = md.getTargetField(); sb.append(indent).append("targetField: ").append(targetField).append("\n"); dump((Metadata)md, sb, indent, visited); } private static void dump(DatastoreIdentityMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("DatastoreIdentityMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } DatastoreIdentityMetadataImpl mdImpl = (DatastoreIdentityMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } String sequence = md.getSequence(); sb.append(indent).append("sequence: ").append(sequence).append("\n"); String customStrategy = md.getCustomStrategy(); sb.append(indent).append("customStrategy: ").append(customStrategy).append("\n"); IdGeneratorStrategy strategy = md.getStrategy(); sb.append(indent).append("strategy: ").append(strategy).append("\n"); String column = md.getColumn(); sb.append(indent).append("column: ").append(column).append("\n"); ColumnMetadata[] columns = md.getColumns(); if((columns != null) && (columns.length > 0)) { int numberOfColumns = md.getNumberOfColumns(); sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n"); sb.append(indent).append("columns:\n"); int i = 0; for(ColumnMetadata columnMetadata : columns) { sb.append(indent).append("[").append(i++).append("]\n"); dump(columnMetadata, sb, indent + " ", visited); } } dump((Metadata)md, sb, indent, visited); } private static void dump(DiscriminatorMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("DiscriminatorMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } DiscriminatorMetadataImpl mdImpl = (DiscriminatorMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } String value = md.getValue(); sb.append(indent).append("value: ").append(value).append("\n"); Indexed indexed = md.getIndexed(); sb.append(indent).append("indexed: ").append(indexed).append("\n"); DiscriminatorStrategy strategy = md.getStrategy(); sb.append(indent).append("strategy: ").append(strategy).append("\n"); String column = md.getColumn(); sb.append(indent).append("column: ").append(column).append("\n"); ColumnMetadata[] columns = md.getColumns(); if((columns != null) && (columns.length > 0)) { int numberOfColumns = md.getNumberOfColumns(); sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n"); sb.append(indent).append("columns:\n"); int i = 0; for(ColumnMetadata columnMetadata : columns) { sb.append(indent).append("[").append(i++).append("]\n"); dump(columnMetadata, sb, indent + " ", visited); } } IndexMetadata indexMetadata = md.getIndexMetadata(); if(indexMetadata != null) { sb.append(indent).append("indexMetadata:\n"); dump(indexMetadata, sb, indent + " ", visited); } dump((Metadata)md, sb, indent, visited); } private static void dump(ElementMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("ElementMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } ElementMetadataImpl mdImpl = (ElementMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } ForeignKeyAction deleteAction = md.getDeleteAction(); sb.append(indent).append("deleteAction: ").append(deleteAction).append("\n"); ForeignKeyAction updateAction = md.getUpdateAction(); sb.append(indent).append("updateAction: ").append(updateAction).append("\n"); String table = md.getTable(); sb.append(indent).append("table: ").append(table).append("\n"); String column = md.getColumn(); sb.append(indent).append("column: ").append(column).append("\n"); ColumnMetadata[] columns = md.getColumns(); if((columns != null) && (columns.length > 0)) { int numberOfColumns = md.getNumberOfColumns(); sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n"); sb.append(indent).append("columns:\n"); int i = 0; for(ColumnMetadata columnMetadata : columns) { sb.append(indent).append("[").append(i++).append("]\n"); dump(columnMetadata, sb, indent + " ", visited); } } EmbeddedMetadata embeddedMetadata = md.getEmbeddedMetadata(); if(embeddedMetadata != null) { sb.append(indent).append("embeddedMetadata:\n"); dump(embeddedMetadata, sb, indent + " ", visited); } ForeignKeyMetadata foreignKeyMetadata = md.getForeignKeyMetadata(); if(foreignKeyMetadata != null) { sb.append(indent).append("foreignKeyMetadata:\n"); dump(foreignKeyMetadata, sb, indent + " ", visited); } IndexMetadata indexMetadata = md.getIndexMetadata(); if(indexMetadata != null) { sb.append(indent).append("indexMetadata:\n"); dump(indexMetadata, sb, indent + " ", visited); } UniqueMetadata uniqueMetadata = md.getUniqueMetadata(); if(uniqueMetadata != null) { sb.append(indent).append("uniqueMetadata:\n"); dump(uniqueMetadata, sb, indent + " ", visited); } dump((Metadata)md, sb, indent, visited); } private static void dump(EmbeddedMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("EmbeddedMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } EmbeddedMetadataImpl mdImpl = (EmbeddedMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(impl internal null)\n"); return; } String nullIndicatorColumn = md.getNullIndicatorColumn(); sb.append(indent).append("nullIndicatorColumn: ").append(nullIndicatorColumn).append("\n"); String nullIndicatorValue = md.getNullIndicatorValue(); sb.append(indent).append("nullIndicatorValue: ").append(nullIndicatorValue).append("\n"); String ownerMember = md.getOwnerMember(); sb.append(indent).append("ownerMember: ").append(ownerMember).append("\n"); MemberMetadata[] members = md.getMembers(); if((members != null) && (members.length > 0)) { int numberOfMembers = md.getNumberOfMembers(); sb.append(indent).append("numberOfMembers: ").append(numberOfMembers).append("\n"); sb.append(indent).append("members:\n"); int i = 0; for(MemberMetadata memberMetadata : members) { sb.append(indent).append("[").append(i++).append("]\n"); if(memberMetadata instanceof FieldMetadata) { dump((FieldMetadata)memberMetadata, sb, indent + " ", visited); } else if(memberMetadata instanceof PropertyMetadata) { dump((PropertyMetadata)memberMetadata, sb, indent + " ", visited); } } } dump((Metadata)md, sb, indent, visited); } private static void dump(FetchGroupMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("FetchGroupMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } FetchGroupMetadataImpl mdImpl = (FetchGroupMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } String name = md.getName(); sb.append(indent).append("name: ").append(name).append("\n"); Boolean postLoad = md.getPostLoad(); sb.append(indent).append("postLoad: ").append(postLoad).append("\n"); MemberMetadata[] members = md.getMembers(); if((members != null) && (members.length > 0)) { int numberOfMembers = md.getNumberOfMembers(); sb.append(indent).append("numberOfMembers: ").append(numberOfMembers).append("\n"); sb.append(indent).append("members:\n"); int i = 0; for(MemberMetadata memberMetadata : members) { sb.append(indent).append("[").append(i++).append("]\n"); if(memberMetadata instanceof FieldMetadata) { dump((FieldMetadata)memberMetadata, sb, indent + " ", visited); } else if(memberMetadata instanceof PropertyMetadata) { dump((PropertyMetadata)memberMetadata, sb, indent + " ", visited); } } } dump((Metadata)md, sb, indent, visited); } private static void dump(FetchPlanMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("FetchPlanMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } FetchPlanMetadataImpl mdImpl = (FetchPlanMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } String name = md.getName(); sb.append(indent).append("name: ").append(name).append("\n"); int fetchSize = md.getFetchSize(); sb.append(indent).append("fetchSize: ").append(fetchSize).append("\n"); int maxFetchDepth = md.getMaxFetchDepth(); sb.append(indent).append("maxFetchDepth: ").append(maxFetchDepth).append("\n"); FetchGroupMetadata[] fetchGroups = md.getFetchGroups(); if((fetchGroups != null) && (fetchGroups.length > 0)) { int numberOfFetchGroups = md.getNumberOfFetchGroups(); sb.append(indent).append("numberOfFetchGroups: ").append(numberOfFetchGroups).append("\n"); sb.append(indent).append("fetchGroups:\n"); int i = 0; for(FetchGroupMetadata fetchGroupMetadata : fetchGroups) { sb.append(indent).append("[").append(i++).append("]\n"); dump(fetchGroupMetadata, sb, indent + " ", visited); } } dump((Metadata)md, sb, indent, visited); } private static void dump(ForeignKeyMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("ForeignKeyMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } ForeignKeyMetadataImpl mdImpl = (ForeignKeyMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } String name = md.getName(); sb.append(indent).append("name: ").append(name).append("\n"); ForeignKeyAction deleteAction = md.getDeleteAction(); sb.append(indent).append("deleteAction: ").append(deleteAction).append("\n"); ForeignKeyAction updateAction = md.getUpdateAction(); sb.append(indent).append("updateAction: ").append(updateAction).append("\n"); String table = md.getTable(); sb.append(indent).append("table: ").append(table).append("\n"); Boolean deferred = md.getDeferred(); sb.append(indent).append("deferred: ").append(deferred).append("\n"); Boolean unique = md.getUnique(); sb.append(indent).append("unique: ").append(unique).append("\n"); ColumnMetadata[] columns = md.getColumns(); if((columns != null) && (columns.length > 0)) { int numberOfColumns = md.getNumberOfColumns(); sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n"); sb.append(indent).append("columns:\n"); int i = 0; for(ColumnMetadata columnMetadata : columns) { sb.append(indent).append("[").append(i++).append("]\n"); dump(columnMetadata, sb, indent + " ", visited); } } MemberMetadata[] members = md.getMembers(); if((members != null) && (members.length > 0)) { int numberOfMembers = md.getNumberOfMembers(); sb.append(indent).append("numberOfMembers: ").append(numberOfMembers).append("\n"); sb.append(indent).append("members:\n"); int i = 0; for(MemberMetadata memberMetadata : members) { sb.append(indent).append("[").append(i++).append("]\n"); if(memberMetadata instanceof FieldMetadata) { dump((FieldMetadata)memberMetadata, sb, indent + " ", visited); } else if(memberMetadata instanceof PropertyMetadata) { dump((PropertyMetadata)memberMetadata, sb, indent + " ", visited); } } } dump((Metadata)md, sb, indent, visited); } private static void dump(IndexMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("IndexMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } IndexMetadataImpl mdImpl = (IndexMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } String name = md.getName(); sb.append(indent).append("name: ").append(name).append("\n"); String table = md.getTable(); sb.append(indent).append("table: ").append(table).append("\n"); boolean unique = md.getUnique(); sb.append(indent).append("unique: ").append(unique).append("\n"); ColumnMetadata[] columns = md.getColumns(); if((columns != null) && (columns.length > 0)) { int numberOfColumns = md.getNumberOfColumns(); sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n"); sb.append(indent).append("columns:\n"); int i = 0; for(ColumnMetadata columnMetadata : columns) { sb.append(indent).append("[").append(i++).append("]\n"); dump(columnMetadata, sb, indent + " ", visited); } } MemberMetadata[] members = md.getMembers(); if((members != null) && (members.length > 0)) { int numberOfMembers = md.getNumberOfMembers(); sb.append(indent).append("numberOfMembers: ").append(numberOfMembers).append("\n"); sb.append(indent).append("members:\n"); int i = 0; for(MemberMetadata memberMetadata : members) { sb.append(indent).append("[").append(i++).append("]\n"); if(memberMetadata instanceof FieldMetadata) { dump((FieldMetadata)memberMetadata, sb, indent + " ", visited); } else if(memberMetadata instanceof PropertyMetadata) { dump((PropertyMetadata)memberMetadata, sb, indent + " ", visited); } } } dump((Metadata)md, sb, indent, visited); } private static void dump(InheritanceMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("InheritanceMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } InheritanceMetadataImpl mdImpl = (InheritanceMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } String customStrategy = md.getCustomStrategy(); sb.append(indent).append("customStrategy: ").append(customStrategy).append("\n"); InheritanceStrategy strategy = md.getStrategy(); sb.append(indent).append("strategy: ").append(strategy).append("\n"); DiscriminatorMetadata discriminatorMetadata = md.getDiscriminatorMetadata(); if(discriminatorMetadata != null) { sb.append(indent).append("discriminatorMetadata:\n"); dump(discriminatorMetadata, sb, indent + " ", visited); } JoinMetadata joinMetadata = md.getJoinMetadata(); if(joinMetadata != null) { sb.append(indent).append("joinMetadata:\n"); dump(joinMetadata, sb, indent + " ", visited); } dump((Metadata)md, sb, indent, visited); } private static void dump(JDOMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("JDOMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } JDOMetadataImpl mdImpl = (JDOMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } String catalog = md.getCatalog(); sb.append(indent).append("catalog: ").append(catalog).append("\n"); String schema = md.getSchema(); sb.append(indent).append("schema: ").append(schema).append("\n"); FetchPlanMetadata[] fetchPlans = md.getFetchPlans(); if((fetchPlans != null) && (fetchPlans.length > 0)) { int numberOfFetchPlans = md.getNumberOfFetchPlans(); sb.append(indent).append("numberOfFetchPlans: ").append(numberOfFetchPlans).append("\n"); sb.append(indent).append("fetchPlans:\n"); int i = 0; for(FetchPlanMetadata fetchPlanMetadata : fetchPlans) { sb.append(indent).append("[").append(i++).append("]\n"); dump(fetchPlanMetadata, sb, indent + " ", visited); } } PackageMetadata[] packages = md.getPackages(); if((packages != null) && (packages.length > 0)) { int numberOfPackages = md.getNumberOfPackages(); sb.append(indent).append("numberOfPackages: ").append(numberOfPackages).append("\n"); sb.append(indent).append("packages:\n"); int i = 0; for(PackageMetadata packageMetadata : packages) { sb.append(indent).append("[").append(i++).append("]\n"); dump(packageMetadata, sb, indent + " ", visited); } } QueryMetadata[] queries = md.getQueries(); if((queries != null) && (queries.length > 0)) { int numberOfQueries = md.getNumberOfQueries(); sb.append(indent).append("numberOfQueries: ").append(numberOfQueries).append("\n"); sb.append(indent).append("queries:\n"); int i = 0; for(QueryMetadata queryMetadata : queries) { sb.append(indent).append("[").append(i++).append("]\n"); dump(queryMetadata, sb, indent + " ", visited); } } dump((Metadata)md, sb, indent, visited); } private static void dump(JoinMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("JoinMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } JoinMetadataImpl mdImpl = (JoinMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } ForeignKeyAction deleteAction = md.getDeleteAction(); sb.append(indent).append("deleteAction: ").append(deleteAction).append("\n"); Indexed indexed = md.getIndexed(); sb.append(indent).append("indexed: ").append(indexed).append("\n"); boolean outer = md.getOuter(); sb.append(indent).append("outer: ").append(outer).append("\n"); Boolean unique = md.getUnique(); sb.append(indent).append("unique: ").append(unique).append("\n"); String table = md.getTable(); sb.append(indent).append("table: ").append(table).append("\n"); String column = md.getColumn(); sb.append(indent).append("column: ").append(column).append("\n"); ColumnMetadata[] columns = md.getColumns(); if((columns != null) && (columns.length > 0)) { int numberOfColumns = md.getNumberOfColumns(); sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n"); sb.append(indent).append("columns:\n"); int i = 0; for(ColumnMetadata columnMetadata : columns) { sb.append(indent).append("[").append(i++).append("]\n"); dump(columnMetadata, sb, indent + " ", visited); } } ForeignKeyMetadata foreignKeyMetadata = md.getForeignKeyMetadata(); if(foreignKeyMetadata != null) { sb.append(indent).append("foreignKeyMetadata:\n"); dump(foreignKeyMetadata, sb, indent + " ", visited); } IndexMetadata indexMetadata = md.getIndexMetadata(); if(indexMetadata != null) { sb.append(indent).append("indexMetadata:\n"); dump(indexMetadata, sb, indent + " ", visited); } PrimaryKeyMetadata primaryKeyMetadata = md.getPrimaryKeyMetadata(); if(primaryKeyMetadata != null) { sb.append(indent).append("primaryKeyMetadata:\n"); dump(primaryKeyMetadata, sb, indent + " ", visited); } UniqueMetadata uniqueMetadata = md.getUniqueMetadata(); if(uniqueMetadata != null) { sb.append(indent).append("uniqueMetadata:\n"); dump(uniqueMetadata, sb, indent + " ", visited); } dump((Metadata)md, sb, indent, visited); } private static void dump(KeyMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("KeyMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } KeyMetadataImpl mdImpl = (KeyMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } ForeignKeyAction deleteAction = md.getDeleteAction(); sb.append(indent).append("deleteAction: ").append(deleteAction).append("\n"); ForeignKeyAction updateAction = md.getUpdateAction(); sb.append(indent).append("updateAction: ").append(updateAction).append("\n"); String table = md.getTable(); sb.append(indent).append("table: ").append(table).append("\n"); String column = md.getColumn(); sb.append(indent).append("column: ").append(column).append("\n"); ColumnMetadata[] columns = md.getColumns(); if((columns != null) && (columns.length > 0)) { int numberOfColumns = md.getNumberOfColumns(); sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n"); sb.append(indent).append("columns:\n"); int i = 0; for(ColumnMetadata columnMetadata : columns) { sb.append(indent).append("[").append(i++).append("]\n"); dump(columnMetadata, sb, indent + " ", visited); } } EmbeddedMetadata embeddedMetadata = md.getEmbeddedMetadata(); if(embeddedMetadata != null) { sb.append(indent).append("embeddedMetadata:\n"); dump(embeddedMetadata, sb, indent + " ", visited); } ForeignKeyMetadata foreignKeyMetadata = md.getForeignKeyMetadata(); if(foreignKeyMetadata != null) { sb.append(indent).append("foreignKeyMetadata:\n"); dump(foreignKeyMetadata, sb, indent + " ", visited); } IndexMetadata indexMetadata = md.getIndexMetadata(); if(indexMetadata != null) { sb.append(indent).append("indexMetadata:\n"); dump(indexMetadata, sb, indent + " ", visited); } UniqueMetadata uniqueMetadata = md.getUniqueMetadata(); if(uniqueMetadata != null) { sb.append(indent).append("uniqueMetadata:\n"); dump(uniqueMetadata, sb, indent + " ", visited); } dump((Metadata)md, sb, indent, visited); } private static void dump(MapMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("MapMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } MapMetadataImpl mdImpl = (MapMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } Boolean dependentKey = md.getDependentKey(); sb.append(indent).append("dependentKey: ").append(dependentKey).append("\n"); Boolean dependentValue = md.getDependentValue(); sb.append(indent).append("dependentValue: ").append(dependentValue).append("\n"); Boolean embeddedKey = md.getEmbeddedKey(); sb.append(indent).append("embeddedKey: ").append(embeddedKey).append("\n"); Boolean embeddedValue = md.getEmbeddedValue(); sb.append(indent).append("embeddedValue: ").append(embeddedValue).append("\n"); Boolean serializedKey = md.getSerializedKey(); sb.append(indent).append("serializedKey: ").append(serializedKey).append("\n"); Boolean serializedValue = md.getSerializedValue(); sb.append(indent).append("serializedValue: ").append(serializedValue).append("\n"); String keyType = md.getKeyType(); sb.append(indent).append("keyType: ").append(keyType).append("\n"); String valueType = md.getValueType(); sb.append(indent).append("valueType: ").append(valueType).append("\n"); dump((Metadata)md, sb, indent, visited); } private static void dump(MemberMetadata md, StringBuilder sb, String indent, Set visited) { MemberMetadataImpl mdImpl = (MemberMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(member null internal impl)\n"); return; } String name = md.getName(); sb.append(indent).append("name: ").append(name).append("\n"); ForeignKeyAction deleteAction = md.getDeleteAction(); sb.append(indent).append("deleteAction: ").append(deleteAction).append("\n"); IdGeneratorStrategy valueStrategy = md.getValueStrategy(); sb.append(indent).append("valueStrategy: ").append(valueStrategy).append("\n"); PersistenceModifier persistenceModifier = md.getPersistenceModifier(); sb.append(indent).append("persistenceModifier: ").append(persistenceModifier).append("\n"); NullValue nullValue = md.getNullValue(); sb.append(indent).append("nullValue: ").append(nullValue).append("\n"); boolean cacheable = md.getCacheable(); sb.append(indent).append("cacheable: ").append(cacheable).append("\n"); Boolean defaultFetchGroup = md.getDefaultFetchGroup(); sb.append(indent).append("defaultFetchGroup: ").append(defaultFetchGroup).append("\n"); Boolean dependent = md.getDependent(); sb.append(indent).append("dependent: ").append(dependent).append("\n"); Boolean embedded = md.getEmbedded(); sb.append(indent).append("embedded: ").append(embedded).append("\n"); Boolean indexed = md.getIndexed(); sb.append(indent).append("indexed: ").append(indexed).append("\n"); boolean primaryKey = md.getPrimaryKey(); sb.append(indent).append("primaryKey: ").append(primaryKey).append("\n"); Boolean serialized = md.getSerialized(); sb.append(indent).append("serialized: ").append(serialized).append("\n"); Boolean unique = md.getUnique(); sb.append(indent).append("unique: ").append(unique).append("\n"); String mappedBy = md.getMappedBy(); sb.append(indent).append("mappedBy: ").append(mappedBy).append("\n"); int recursionDepth = md.getRecursionDepth(); sb.append(indent).append("recursionDepth: ").append(recursionDepth).append("\n"); String column = md.getColumn(); sb.append(indent).append("column: ").append(column).append("\n"); String customStrategy = md.getCustomStrategy(); sb.append(indent).append("customStrategy: ").append(customStrategy).append("\n"); String fieldType = md.getFieldType(); sb.append(indent).append("fieldType: ").append(fieldType).append("\n"); String loadFetchGroup = md.getLoadFetchGroup(); sb.append(indent).append("loadFetchGroup: ").append(loadFetchGroup).append("\n"); String sequence = md.getSequence(); sb.append(indent).append("sequence: ").append(sequence).append("\n"); String table = md.getTable(); sb.append(indent).append("table: ").append(table).append("\n"); ArrayMetadata arrayMetadata = md.getArrayMetadata(); if(arrayMetadata != null) { sb.append(indent).append("arrayMetadata:\n"); dump(arrayMetadata, sb, indent + " ", visited); } CollectionMetadata collectionMetadata = md.getCollectionMetadata(); if(collectionMetadata != null) { sb.append(indent).append("collectionMetadata:\n"); dump(collectionMetadata, sb, indent + " ", visited); } ElementMetadata elementMetadata = md.getElementMetadata(); if(elementMetadata != null) { sb.append(indent).append("elementMetadata:\n"); dump(elementMetadata, sb, indent + " ", visited); } EmbeddedMetadata embeddedMetadata = md.getEmbeddedMetadata(); if(embeddedMetadata != null) { sb.append(indent).append("embeddedMetadata:\n"); dump(embeddedMetadata, sb, indent + " ", visited); } ForeignKeyMetadata foreignKeyMetadata = md.getForeignKeyMetadata(); if(foreignKeyMetadata != null) { sb.append(indent).append("foreignKeyMetadata:\n"); dump(foreignKeyMetadata, sb, indent + " ", visited); } IndexMetadata indexMetadata = md.getIndexMetadata(); if(indexMetadata != null) { sb.append(indent).append("indexMetadata:\n"); dump(indexMetadata, sb, indent + " ", visited); } JoinMetadata joinMetadata = md.getJoinMetadata(); if(joinMetadata != null) { sb.append(indent).append("joinMetadata:\n"); dump(joinMetadata, sb, indent + " ", visited); } KeyMetadata keyMetadata = md.getKeyMetadata(); if(keyMetadata != null) { sb.append(indent).append("keyMetadata:\n"); dump(keyMetadata, sb, indent + " ", visited); } MapMetadata mapMetadata = md.getMapMetadata(); if(mapMetadata != null) { sb.append(indent).append("mapMetadata:\n"); dump(mapMetadata, sb, indent + " ", visited); } OrderMetadata orderMetadata = md.getOrderMetadata(); if(orderMetadata != null) { sb.append(indent).append("orderMetadata:\n"); dump(orderMetadata, sb, indent + " ", visited); } UniqueMetadata uniqueMetadata = md.getUniqueMetadata(); if(uniqueMetadata != null) { sb.append(indent).append("uniqueMetadata:\n"); dump(uniqueMetadata, sb, indent + " ", visited); } ValueMetadata valueMetadata = md.getValueMetadata(); if(valueMetadata != null) { sb.append(indent).append("valueMetadata:\n"); dump(valueMetadata, sb, indent + " ", visited); } ColumnMetadata[] columns = md.getColumns(); if((columns != null) && (columns.length > 0)) { int numberOfColumns = md.getNumberOfColumns(); sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n"); sb.append(indent).append("columns:\n"); int i = 0; for(ColumnMetadata columnMetadata : columns) { sb.append(indent).append("[").append(i++).append("]\n"); dump(columnMetadata, sb, indent + " ", visited); } } dump((Metadata)md, sb, indent, visited); } private static void dump(FieldMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("FieldMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } FieldMetadataImpl mdImpl = (FieldMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } dump((MemberMetadata)md, sb, indent, visited); } private static void dump(PropertyMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("PropertyMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } PropertyMetadataImpl mdImpl = (PropertyMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } String fieldName = md.getFieldName(); sb.append(indent).append("fieldName: ").append(fieldName).append("\n"); dump((MemberMetadata)md, sb, indent, visited); } private static void dump(OrderMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("OrderMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } OrderMetadataImpl mdImpl = (OrderMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } String mappedBy = md.getMappedBy(); sb.append(indent).append("mappedBy: ").append(mappedBy).append("\n"); String column = md.getColumn(); sb.append(indent).append("column: ").append(column).append("\n"); ColumnMetadata[] columns = md.getColumns(); if((columns != null) && (columns.length > 0)) { int numberOfColumns = md.getNumberOfColumns(); sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n"); sb.append(indent).append("columns:\n"); int i = 0; for(ColumnMetadata columnMetadata : columns) { sb.append(indent).append("[").append(i++).append("]\n"); dump(columnMetadata, sb, indent + " ", visited); } } IndexMetadata indexMetadata = md.getIndexMetadata(); if(indexMetadata != null) { sb.append(indent).append("indexMetadata:\n"); dump(indexMetadata, sb, indent + " ", visited); } dump((Metadata)md, sb, indent, visited); } private static void dump(PackageMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("PackageMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } PackageMetadataImpl mdImpl = (PackageMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } String name = md.getName(); sb.append(indent).append("name: ").append(name).append("\n"); String catalog = md.getCatalog(); sb.append(indent).append("catalog: ").append(catalog).append("\n"); String schema = md.getSchema(); sb.append(indent).append("schema: ").append(schema).append("\n"); ClassMetadata[] classes = md.getClasses(); if((classes != null) && (classes.length > 0)) { int numberOfClasses = md.getNumberOfClasses(); sb.append(indent).append("numberOfClasses: ").append(numberOfClasses).append("\n"); sb.append(indent).append("classes:\n"); int i = 0; for(ClassMetadata classMetadata : classes) { sb.append(indent).append("[").append(i++).append("]\n"); dump(classMetadata, sb, indent + " ", visited); } } InterfaceMetadata[] interfaces = md.getInterfaces(); if((interfaces != null) && (interfaces.length > 0)) { int numberOfInterfaces = md.getNumberOfInterfaces(); sb.append(indent).append("numberOfInterfaces: ").append(numberOfInterfaces).append("\n"); sb.append(indent).append("interfaces:\n"); int i = 0; for(InterfaceMetadata interfaceMetadata : interfaces) { sb.append(indent).append("[").append(i++).append("]\n"); dump(interfaceMetadata, sb, indent + " ", visited); } } SequenceMetadata[] sequences = md.getSequences(); if((sequences != null) && (sequences.length > 0)) { int numberOfSequences = md.getNumberOfSequences(); sb.append(indent).append("numberOfSequences: ").append(numberOfSequences).append("\n"); sb.append(indent).append("sequences:\n"); int i = 0; for(SequenceMetadata sequenceMetadata : sequences) { sb.append(indent).append("[").append(i++).append("]\n"); dump(sequenceMetadata, sb, indent + " ", visited); } } dump((Metadata)md, sb, indent, visited); } private static void dump(PrimaryKeyMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("PrimaryKeyMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } PrimaryKeyMetadataImpl mdImpl = (PrimaryKeyMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } String name = md.getName(); sb.append(indent).append("name: ").append(name).append("\n"); String column = md.getColumn(); sb.append(indent).append("column: ").append(column).append("\n"); ColumnMetadata[] columns = md.getColumns(); if((columns != null) && (columns.length > 0)) { int numberOfColumns = md.getNumberOfColumns(); sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n"); sb.append(indent).append("columns:\n"); int i = 0; for(ColumnMetadata columnMetadata : columns) { sb.append(indent).append("[").append(i++).append("]\n"); dump(columnMetadata, sb, indent + " ", visited); } } dump((Metadata)md, sb, indent, visited); } private static void dump(QueryMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("QueryMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } QueryMetadataImpl mdImpl = (QueryMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } String name = md.getName(); sb.append(indent).append("name: ").append(name).append("\n"); String fetchPlan = md.getFetchPlan(); sb.append(indent).append("fetchPlan: ").append(fetchPlan).append("\n"); String language = md.getLanguage(); sb.append(indent).append("language: ").append(language).append("\n"); String query = md.getQuery(); sb.append(indent).append("query: ").append(query).append("\n"); String resultClass = md.getResultClass(); sb.append(indent).append("resultClass: ").append(resultClass).append("\n"); Boolean unique = md.getUnique(); sb.append(indent).append("unique: ").append(unique).append("\n"); boolean unmodifiable = md.getUnmodifiable(); sb.append(indent).append("unmodifiable: ").append(unmodifiable).append("\n"); dump((Metadata)md, sb, indent, visited); } private static void dump(SequenceMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("SequenceMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } SequenceMetadataImpl mdImpl = (SequenceMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } String name = md.getName(); sb.append(indent).append("name: ").append(name).append("\n"); Integer allocationSize = md.getAllocationSize(); sb.append(indent).append("allocationSize: ").append(allocationSize).append("\n"); String datastoreSequence = md.getDatastoreSequence(); sb.append(indent).append("datastoreSequence: ").append(datastoreSequence).append("\n"); String factoryClass = md.getFactoryClass(); sb.append(indent).append("factoryClass: ").append(factoryClass).append("\n"); Integer initialValue = md.getInitialValue(); sb.append(indent).append("initialValue: ").append(initialValue).append("\n"); SequenceStrategy sequenceStrategy = md.getSequenceStrategy(); sb.append(indent).append("sequenceStrategy: ").append(sequenceStrategy).append("\n"); dump((Metadata)md, sb, indent, visited); } private static void dump(TypeMetadata md, StringBuilder sb, String indent, Set visited) { TypeMetadataImpl mdImpl = (TypeMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(type null internal impl)\n"); return; } String name = md.getName(); sb.append(indent).append("name: ").append(name).append("\n"); String objectIdClass = md.getObjectIdClass(); sb.append(indent).append("objectIdClass: ").append(objectIdClass).append("\n"); boolean requiresExtent = md.getRequiresExtent(); sb.append(indent).append("requiresExtent: ").append(requiresExtent).append("\n"); String schema = md.getSchema(); sb.append(indent).append("schema: ").append(schema).append("\n"); boolean serializeRead = md.getSerializeRead(); sb.append(indent).append("serializeRead: ").append(serializeRead).append("\n"); String table = md.getTable(); sb.append(indent).append("table: ").append(table).append("\n"); boolean detachable = md.getDetachable(); sb.append(indent).append("detachable: ").append(detachable).append("\n"); Boolean embeddedOnly = md.getEmbeddedOnly(); sb.append(indent).append("embeddedOnly: ").append(embeddedOnly).append("\n"); IdentityType identityType = md.getIdentityType(); sb.append(indent).append("identityType: ").append(identityType).append("\n"); boolean cacheable = md.getCacheable(); sb.append(indent).append("cacheable: ").append(cacheable).append("\n"); String catalog = md.getCatalog(); sb.append(indent).append("catalog: ").append(catalog).append("\n"); ColumnMetadata[] columns = md.getColumns(); if((columns != null) && (columns.length > 0)) { int numberOfColumns = md.getNumberOfColumns(); sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n"); sb.append(indent).append("columns:\n"); int i = 0; for(ColumnMetadata columnMetadata : columns) { sb.append(indent).append("[").append(i++).append("]\n"); dump(columnMetadata, sb, indent + " ", visited); } } DatastoreIdentityMetadata datastoreIdentityMetadata = md.getDatastoreIdentityMetadata(); if(datastoreIdentityMetadata != null) { sb.append(indent).append("datastoreIdentityMetadata:\n"); dump(datastoreIdentityMetadata, sb, indent + " ", visited); } FetchGroupMetadata[] fetchGroups = md.getFetchGroups(); if((fetchGroups != null) && (fetchGroups.length > 0)) { int numberOfFetchGroups = md.getNumberOfFetchGroups(); sb.append(indent).append("numberOfFetchGroups: ").append(numberOfFetchGroups).append("\n"); sb.append(indent).append("fetchGroups:\n"); int i = 0; for(FetchGroupMetadata fetchGroupMetadata : fetchGroups) { sb.append(indent).append("[").append(i++).append("]\n"); dump(fetchGroupMetadata, sb, indent + " ", visited); } } ForeignKeyMetadata[] foreignKeys = md.getForeignKeys(); if((foreignKeys != null) && (foreignKeys.length > 0)) { int numberOfForeignKeys = md.getNumberOfForeignKeys(); sb.append(indent).append("numberOfForeignKeys: ").append(numberOfForeignKeys).append("\n"); sb.append(indent).append("foreignKeys:\n"); int i = 0; for(ForeignKeyMetadata foreignKeyMetadata : foreignKeys) { sb.append(indent).append("[").append(i++).append("]\n"); dump(foreignKeyMetadata, sb, indent + " ", visited); } } IndexMetadata[] indices = md.getIndices(); if((indices != null) && (indices.length > 0)) { int numberOfIndices = md.getNumberOfIndices(); sb.append(indent).append("numberOfIndices: ").append(numberOfIndices).append("\n"); sb.append(indent).append("indices:\n"); int i = 0; for(IndexMetadata indexMetadata : indices) { sb.append(indent).append("[").append(i++).append("]\n"); dump(indexMetadata, sb, indent + " ", visited); } } InheritanceMetadata inheritanceMetadata = md.getInheritanceMetadata(); if(inheritanceMetadata != null) { sb.append(indent).append("inheritanceMetadata:\n"); dump(inheritanceMetadata, sb, indent + " ", visited); } JoinMetadata[] joins = md.getJoins(); if((joins != null) && (joins.length > 0)) { int numberOfJoins = md.getNumberOfJoins(); sb.append(indent).append("numberOfJoins: ").append(numberOfJoins).append("\n"); sb.append(indent).append("joins:\n"); int i = 0; for(JoinMetadata joinMetadata : joins) { sb.append(indent).append("[").append(i++).append("]\n"); dump(joinMetadata, sb, indent + " ", visited); } } MemberMetadata[] members = md.getMembers(); if((members != null) && (members.length > 0)) { int numberOfMembers = md.getNumberOfMembers(); sb.append(indent).append("numberOfMembers: ").append(numberOfMembers).append("\n"); sb.append(indent).append("members:\n"); int i = 0; for(MemberMetadata memberMetadata : members) { sb.append(indent).append("[").append(i++).append("]\n"); if(memberMetadata instanceof FieldMetadata) { dump((FieldMetadata)memberMetadata, sb, indent + " ", visited); } else if(memberMetadata instanceof PropertyMetadata) { dump((PropertyMetadata)memberMetadata, sb, indent + " ", visited); } } } PrimaryKeyMetadata primaryKeyMetadata = md.getPrimaryKeyMetadata(); if(primaryKeyMetadata != null) { sb.append(indent).append("primaryKeyMetadata:\n"); dump(primaryKeyMetadata, sb, indent + " ", visited); } QueryMetadata[] queries = md.getQueries(); if((queries != null) && (queries.length > 0)) { int numberOfQueries = md.getNumberOfQueries(); sb.append(indent).append("numberOfQueries: ").append(numberOfQueries).append("\n"); sb.append(indent).append("queries:\n"); int i = 0; for(QueryMetadata queryMetadata : queries) { sb.append(indent).append("[").append(i++).append("]\n"); dump(queryMetadata, sb, indent + " ", visited); } } UniqueMetadata[] uniques = md.getUniques(); if((uniques != null) && (uniques.length > 0)) { int numberOfUniques = md.getNumberOfUniques(); sb.append(indent).append("numberOfUniques: ").append(numberOfUniques).append("\n"); sb.append(indent).append("uniques:\n"); int i = 0; for(UniqueMetadata uniqueMetadata : uniques) { sb.append(indent).append("[").append(i++).append("]\n"); dump(uniqueMetadata, sb, indent + " ", visited); } } VersionMetadata versionMetadata = md.getVersionMetadata(); if(versionMetadata != null) { sb.append(indent).append("versionMetadata:\n"); dump(versionMetadata, sb, indent + " ", visited); } dump((Metadata)md, sb, indent, visited); } private static void dump(ClassMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("ClassMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } ClassMetadataImpl mdImpl = (ClassMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } ClassPersistenceModifier persistenceModifier = md.getPersistenceModifier(); sb.append(indent).append("persistenceModifier: ").append(persistenceModifier).append("\n"); dump((TypeMetadata)md, sb, indent, visited); } private static void dump(InterfaceMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("InterfaceMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } InterfaceMetadataImpl mdImpl = (InterfaceMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } dump((TypeMetadata)md, sb, indent, visited); } private static void dump(UniqueMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("UniqueMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } UniqueMetadataImpl mdImpl = (UniqueMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } String name = md.getName(); sb.append(indent).append("name: ").append(name).append("\n"); String table = md.getTable(); sb.append(indent).append("table: ").append(table).append("\n"); Boolean deferred = md.getDeferred(); sb.append(indent).append("deferred: ").append(deferred).append("\n"); ColumnMetadata[] columns = md.getColumns(); if((columns != null) && (columns.length > 0)) { int numberOfColumns = md.getNumberOfColumns(); sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n"); sb.append(indent).append("columns:\n"); int i = 0; for(ColumnMetadata columnMetadata : columns) { sb.append(indent).append("[").append(i++).append("]\n"); dump(columnMetadata, sb, indent + " ", visited); } } MemberMetadata[] members = md.getMembers(); if((members != null) && (members.length > 0)) { int numberOfMembers = md.getNumberOfMembers(); sb.append(indent).append("numberOfMembers: ").append(numberOfMembers).append("\n"); sb.append(indent).append("members:\n"); int i = 0; for(MemberMetadata memberMetadata : members) { sb.append(indent).append("[").append(i++).append("]\n"); if(memberMetadata instanceof FieldMetadata) { dump((FieldMetadata)memberMetadata, sb, indent + " ", visited); } else if(memberMetadata instanceof PropertyMetadata) { dump((PropertyMetadata)memberMetadata, sb, indent + " ", visited); } } } dump((Metadata)md, sb, indent, visited); } private static void dump(ValueMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("ValueMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } ValueMetadataImpl mdImpl = (ValueMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } String table = md.getTable(); sb.append(indent).append("table: ").append(table).append("\n"); String column = md.getColumn(); sb.append(indent).append("column: ").append(column).append("\n"); ForeignKeyAction updateAction = md.getUpdateAction(); sb.append(indent).append("updateAction: ").append(updateAction).append("\n"); ForeignKeyAction deleteAction = md.getDeleteAction(); sb.append(indent).append("deleteAction: ").append(deleteAction).append("\n"); ColumnMetadata[] columns = md.getColumns(); if((columns != null) && (columns.length > 0)) { sb.append(indent).append("columns:\n"); int i = 0; for(ColumnMetadata columnMetadata : columns) { sb.append(indent).append("[").append(i++).append("]\n"); dump(columnMetadata, sb, indent + " ", visited); } } EmbeddedMetadata embeddedMetadata = md.getEmbeddedMetadata(); if(embeddedMetadata != null) { sb.append(indent).append("embeddedMetadata:\n"); dump(embeddedMetadata, sb, indent + " ", visited); } ForeignKeyMetadata foreignKeyMetadata = md.getForeignKeyMetadata(); if(foreignKeyMetadata != null) { sb.append(indent).append("foreignKeyMetadata:\n"); dump(foreignKeyMetadata, sb, indent + " ", visited); } IndexMetadata indexMetadata = md.getIndexMetadata(); if(indexMetadata != null) { sb.append(indent).append("indexMetadata:\n"); dump(indexMetadata, sb, indent + " ", visited); } UniqueMetadata uniqueMetadata = md.getUniqueMetadata(); if(uniqueMetadata != null) { sb.append(indent).append("uniqueMetadata:\n"); dump(uniqueMetadata, sb, indent + " ", visited); } dump((Metadata)md, sb, indent, visited); } private static void dump(VersionMetadata md, StringBuilder sb, String indent, Set visited) { int hash = md.hashCode(); sb.append(indent).append("VersionMetadata"); if(visited.contains(hash)) { sb.append(" < ").append(hash).append(" >\n"); return; } else { sb.append(" <* ").append(hash).append(" *>\n"); visited.add(hash); } VersionMetadataImpl mdImpl = (VersionMetadataImpl)md; if(mdImpl.getInternal() == null) { sb.append(indent).append("(null internal impl)\n"); return; } String column = md.getColumn(); sb.append(indent).append("column: ").append(column).append("\n"); Indexed indexed = md.getIndexed(); sb.append(indent).append("indexed: ").append(indexed).append("\n"); VersionStrategy strategy = md.getStrategy(); sb.append(indent).append("strategy: ").append(strategy).append("\n"); ColumnMetadata[] columns = md.getColumns(); if((columns != null) && (columns.length > 0)) { int numberOfColumns = md.getNumberOfColumns(); sb.append(indent).append("numberOfColumns: ").append(numberOfColumns).append("\n"); sb.append(indent).append("columns:\n"); int i = 0; for(ColumnMetadata columnMetadata : columns) { sb.append(indent).append("[").append(i++).append("]\n"); dump(columnMetadata, sb, indent + " ", visited); } } IndexMetadata indexMetadata = md.getIndexMetadata(); if(indexMetadata != null) { sb.append(indent).append("indexMetadata:\n"); dump(indexMetadata, sb, indent + " ", visited); } dump((Metadata)md, sb, indent, visited); } }