com.sun.jdo.api.persistence.model.util.DumpMapping Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of payara-micro Show documentation
Show all versions of payara-micro Show documentation
Micro Distribution of the Payara Project
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
/**
* DumpMapping.java
*
*/
package com.sun.jdo.api.persistence.model.util;
import java.util.*;
import java.io.PrintStream;
import com.sun.jdo.api.persistence.model.*;
import com.sun.jdo.api.persistence.model.mapping.*;
import com.sun.jdo.api.persistence.model.mapping.impl.*;
import com.sun.jdo.api.persistence.model.jdo.*;
import org.netbeans.modules.dbschema.ColumnElement;
import org.netbeans.modules.dbschema.ColumnPairElement;
public class DumpMapping
{
private static Model model;
static
{
// initialize the model reference
setModel(Model.RUNTIME);
}
/** Print out the cache of MappingClassElements to the specified PrintStream.
* @param stream PrintStream used to dump the info
*/
public static void dumpMappingCache (PrintStream stream)
{
stream.println("Mapping cache (class names -> MappingClassElements)"); // NOI18N
for (Iterator i = model.getMappingCache().entrySet().iterator();
i.hasNext();)
{
Map.Entry entry = (Map.Entry)i.next();
String className = (String)entry.getKey();
MappingClassElement mce = (MappingClassElement)entry.getValue();
String mceRepr = mce.getClass() + "@" + // NOI18N
Integer.toHexString(System.identityHashCode(mce));
stream.println("\t" + className + " ->\t" + mceRepr); //NOI18N
}
}
/** Print out the cache of classLoaders to the specified PrintStream.
* @param stream PrintStream used to dump the info
*/
public static void dumpClassLoaderCache (PrintStream stream)
{
stream.println("ClassLoader cache (class names -> ClassLoaders)"); //NOI18N
for (Iterator i = model.getClassLoaderCache().entrySet().iterator();
i.hasNext();)
{
Map.Entry entry = (Map.Entry)i.next();
String className = (String)entry.getKey();
ClassLoader classLoader = (ClassLoader)entry.getValue();
stream.println("\t" + className + " ->\t" + classLoader); //NOI18N
}
}
public static void main(String[] args)
{
for (int i = 0; i < args.length; i++)
{
String className = args[i];
println(0, "\nClass " + className + ":"); //NOI18N
try
{
MappingClassElementImpl mce = (MappingClassElementImpl)model.getMappingClass(className);
if (mce != null)
{
printPersistenceClassElement(mce.getPersistenceElement());
printMappingClassElement(mce);
}
else
{
println(0, "Cannot find mapping info for class " + className + " (getMappingClass returns null)"); //NOI18N
}
}
catch (Exception e)
{
println(0, "Problems during accessing mapping info for class " + className); //NOI18N
e.printStackTrace();
}
}
}
/** Sets the internal model reference used by the DumpMapping methods
* to the specified Model instance.
* @param newModel the Model instance to be used by DumpMapping
*/
public static void setModel(Model newModel)
{
model = newModel;
}
// ----- JDO model ------
public static void printPersistenceClassElement(PersistenceClassElement pce)
{
println(0, "\n--> PersistenceClassElement "); //NOI18N
println(1, "package = " + pce.getPackage()); //NOI18N
println(1, "name = " + pce.getName()); //NOI18N
println(1, "identity = " + getObjectIdentityTypeRepr(pce.getObjectIdentityType())); //NOI18N
println(1, "keyClass = " + pce.getKeyClass()); //NOI18N
printPersistenceFieldElements(1, pce.getFields());
printConcurrencyGroupElements(1, pce.getConcurrencyGroups());
println(0, "<-- PersistenceClassElement\n "); //NOI18N
}
public static void printPersistenceFieldElements(int tabs, PersistenceFieldElement[] fields)
{
if ((fields != null) && (fields.length > 0))
{
println(tabs, "--> fields "); //NOI18N
for (int i = 0; i < fields.length; i++)
{
PersistenceFieldElement pfe = fields[i];
println(tabs, "[" + i + "] " + pfe.getClass()); //NOI18N
println(tabs+1, "name = " + pfe.getName()); //NOI18N
println(tabs+1, "declaringClass = " + pfe.getDeclaringClass()); //NOI18N
println(tabs+1, "fieldNumber = " + pfe.getFieldNumber()); //NOI18N
println(tabs+1, "persistenceType = " + getPersistenceTypeRepr(pfe.getPersistenceType())); //NOI18N
println(tabs+1, "read / write = " + pfe.isReadSensitive() + " / " + pfe.isWriteSensitive()); //NOI18N
println(tabs+1, "isKey = " + pfe.isKey()); //NOI18N
if (pfe instanceof RelationshipElement)
{
RelationshipElement re = (RelationshipElement) pfe;
println(tabs+1, "bounds = " + re.getLowerBound() + " / " + re.getUpperBound()); //NOI18N
println(tabs+1, "deleteAction = " + re.getDeleteAction()); //NOI18N
println(tabs+1, "updateAction = " + re.getUpdateAction()); //NOI18N
println(tabs+1, "collectionClass = " + re.getCollectionClass()); //NOI18N
println(tabs+1, "elementClass = " + re.getElementClass()); //NOI18N
println(tabs+1, "isPrefetch = " + re.isPrefetch()); //NOI18N
}
printConcurrencyGroupElements(tabs+1, pfe.getConcurrencyGroups());
}
println(tabs, "<-- fields "); //NOI18N
}
}
public static void printConcurrencyGroupElements(int tabs, ConcurrencyGroupElement[] groups)
{
if ((groups != null) && (groups.length > 0))
{
println(tabs, "--> concurrency groups"); //NOI18N
for (int i = 0; i < groups.length; i++)
{
ConcurrencyGroupElement cg = groups[i];
println(tabs, "[" + i + "] " + cg.getClass()); //NOI18N
println(tabs+1, "name = " + cg.getName()); //NOI18N
println(tabs+1, "declaringClass = " + cg.getDeclaringClass()); //NOI18N
}
println(tabs, "<-- concurrency groups"); //NOI18N
}
}
// ----- Mapping model ------
public static void printMappingClassElement(MappingClassElement mce)
{
println(0, "\n--> MappingClassElement"); //NOI18N
println(1, "databaseRoot = " + mce.getDatabaseRoot()); //NOI18N
printMappingTableElements(1, mce.getTables());
printMappingFieldElements(1, mce.getFields());
println(0, "<-- MappingClassElement"); //NOI18N
}
public static void printMappingTableElements(int tabs, ArrayList tables)
{
final int count = ((tables != null) ? tables.size() : 0);
if (count > 0)
{
println(tabs, "--> tables "); //NOI18N
for (int i = 0; i < count; i++)
{
MappingTableElementImpl mte = (MappingTableElementImpl) tables.get(i);
println(tabs, "[" + i + "] " + mte.getClass()); //NOI18N
println(tabs+1, "table = " + mte.getTable()); //NOI18N
println(tabs+1, "tableObject = " + mte.getTableObject()); //NOI18N
println(tabs+1, "key = " + mte.getKey()); //NOI18N
println(tabs+1, "keyObjects = " + mte.getKeyObjects()); //NOI18N
printMappingRefKeyElements(tabs+1, mte.getReferencingKeys());
}
println(tabs, "<-- tables "); //NOI18N
}
}
public static void printMappingRefKeyElements(int tabs, ArrayList refKeys)
{
final int count = ((refKeys != null) ? refKeys.size() : 0);
if (count > 0)
{
println(tabs, "--> tables "); //NOI18N
for (int i = 0; i < count; i++)
{
MappingReferenceKeyElement mrke = (MappingReferenceKeyElement)refKeys.get(i);
println(tabs, "[" + i + "] " + mrke.getClass()); //NOI18N
println(tabs+1, "table = " + mrke.getDeclaringTable()); //NOI18N
println(tabs+1, "pairs = " + mrke.getColumnPairNames()); //NOI18N
}
println(tabs, "<-- tables "); //NOI18N
}
}
public static void printMappingFieldElements(int tabs, ArrayList fields)
{
final int count = ((fields != null) ? fields.size() : 0);
if (count > 0)
{
println(tabs, "--> fields "); //NOI18N
for (int i = 0; i < count; i++)
{
MappingFieldElementImpl mfe = (MappingFieldElementImpl) fields.get(i);
println(tabs, "[" + i + "] " + mfe.getClass()); //NOI18N
println(tabs+1, "name = " + mfe.getName()); //NOI18N
println(tabs+1, "fetchGroup = " + mfe.getFetchGroup()); //NOI18N
println(tabs+1, "columns = " + mfe.getColumns()); //NOI18N
if (!(mfe instanceof MappingRelationshipElement))
{
println(tabs+1, "columnObjects = " + mfe.getColumnObjects()); //NOI18N
}
else
{
MappingRelationshipElementImpl mre = (MappingRelationshipElementImpl) mfe;
ArrayList columnObjects = mre.getColumnObjects();
int colCount =
((columnObjects != null) ? columnObjects.size() : 0);
if (colCount > 0)
{
println(tabs+1, "--> columnsObjects "); //NOI18N
for (int j = 0; j < colCount; j++)
{
ColumnPairElement fce = (ColumnPairElement) columnObjects.get(j);
ColumnElement rce = (fce!=null)?fce.getReferencedColumn():null;
println(tabs+1, "[" + j + "] " + fce + " -> " + rce); //NOI18N
}
println(tabs+1, "<-- columnsObjects "); //NOI18N
}
println(tabs+1, "associatedColumns = " + mre.getAssociatedColumns()); //NOI18N
ArrayList associatedColumnObjects = mre.getAssociatedColumnObjects();
colCount = ((associatedColumnObjects != null) ?
associatedColumnObjects.size() : 0);
if (colCount > 0)
{
println(tabs+1, "--> associatedColumnObjects "); //NOI18N
for (int j = 0; j < colCount; j++)
{
ColumnPairElement fce = (ColumnPairElement) associatedColumnObjects.get(j);
ColumnElement rce = (fce!=null)?fce.getReferencedColumn():null;
println(tabs+1, "[" + j + "] " + fce + " -> " + rce); //NOI18N
}
println(tabs+1, "<-- associatedColumnObjects "); //NOI18N
}
}
}
println(tabs, "<-- fields "); //NOI18N
}
}
// ----- helper methods -----
static String getObjectIdentityTypeRepr(int objectIdentityType)
{
String repr;
switch (objectIdentityType)
{
case PersistenceClassElement.APPLICATION_IDENTITY:
return "APPLICATION_IDENTITY"; //NOI18N
case PersistenceClassElement.DATABASE_IDENTITY:
return "DATABASE_IDENTITY_IDENTITY"; //NOI18N
case PersistenceClassElement.UNMANAGED_IDENTITY:
return "UNMANAGED_IDENTITY"; //NOI18N
default:
return "UNKNOWN"; //NOI18N
}
}
static String getPersistenceTypeRepr(int persistenceType)
{
String repr;
switch (persistenceType)
{
case PersistenceFieldElement.PERSISTENT:
return "PERSISTENT"; //NOI18N
case PersistenceFieldElement.DERIVED:
return "DERIVED"; //NOI18N
case PersistenceFieldElement.TRANSIENT:
return "TRANSIENT"; //NOI18N
default:
return "UNKNOWN"; //NOI18N
}
}
static void println(int indent, String text)
{
for (int i = 0; i < indent; i++)
{
System.out.print("\t"); //NOI18N
}
System.out.println(text);
}
}