/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.test.loadplans.walking;
import org.hibernate.annotations.common.util.StringHelper;
import org.hibernate.loader.plan.spi.FetchSource;
import org.hibernate.persister.walking.spi.AnyMappingDefinition;
import org.hibernate.persister.walking.spi.AssociationAttributeDefinition;
import org.hibernate.persister.walking.spi.AssociationKey;
import org.hibernate.persister.walking.spi.AssociationVisitationStrategy;
import org.hibernate.persister.walking.spi.AttributeDefinition;
import org.hibernate.persister.walking.spi.CollectionDefinition;
import org.hibernate.persister.walking.spi.CollectionElementDefinition;
import org.hibernate.persister.walking.spi.CollectionIndexDefinition;
import org.hibernate.persister.walking.spi.CompositionDefinition;
import org.hibernate.persister.walking.spi.EntityDefinition;
import org.hibernate.persister.walking.spi.EntityIdentifierDefinition;
/**
* @author Steve Ebersole
*/
public class LoggingAssociationVisitationStrategy implements AssociationVisitationStrategy {
private int depth = 1;
@Override
public void start() {
System.out.println( ">> Start" );
}
@Override
public void finish() {
System.out.println( "<< Finish" );
}
@Override
public void startingEntity(EntityDefinition entityDefinition) {
System.out.println(
String.format(
"%s Starting entity (%s)",
StringHelper.repeat( ">>", ++depth ),
entityDefinition.getEntityPersister().getEntityName()
)
);
}
@Override
public void finishingEntity(EntityDefinition entityDefinition) {
System.out.println(
String.format(
"%s Finishing entity (%s)",
StringHelper.repeat( "<<", depth-- ),
entityDefinition.getEntityPersister().getEntityName()
)
);
}
@Override
public void startingEntityIdentifier(EntityIdentifierDefinition entityIdentifierDefinition) {
System.out.println(
String.format(
"%s Starting [%s] entity identifier (%s)",
StringHelper.repeat( ">>", ++depth ),
entityIdentifierDefinition.isEncapsulated() ? "encapsulated" : "non-encapsulated",
entityIdentifierDefinition.getEntityDefinition().getEntityPersister().getEntityName()
)
);
}
@Override
public void finishingEntityIdentifier(EntityIdentifierDefinition entityIdentifierDefinition) {
System.out.println(
String.format(
"%s Finishing entity identifier (%s)",
StringHelper.repeat( "<<", depth-- ),
entityIdentifierDefinition.getEntityDefinition().getEntityPersister().getEntityName()
)
);
}
@Override
public boolean startingAttribute(AttributeDefinition attributeDefinition) {
System.out.println(
String.format(
"%s Handling attribute (%s)",
StringHelper.repeat( ">>", depth + 1 ),
attributeDefinition.getName()
)
);
return true;
}
@Override
public void finishingAttribute(AttributeDefinition attributeDefinition) {
// nothing to do
}
@Override
public void startingComposite(CompositionDefinition compositionDefinition) {
System.out.println(
String.format(
"%s Starting composite (%s)",
StringHelper.repeat( ">>", ++depth ),
compositionDefinition.getName()
)
);
}
@Override
public void finishingComposite(CompositionDefinition compositionDefinition) {
System.out.println(
String.format(
"%s Finishing composite (%s)",
StringHelper.repeat( "<<", depth-- ),
compositionDefinition.getName()
)
);
}
@Override
public void startingCollection(CollectionDefinition collectionDefinition) {
System.out.println(
String.format(
"%s Starting collection (%s)",
StringHelper.repeat( ">>", ++depth ),
collectionDefinition.getCollectionPersister().getRole()
)
);
}
@Override
public void finishingCollection(CollectionDefinition collectionDefinition) {
System.out.println(
String.format(
"%s Finishing collection (%s)",
StringHelper.repeat( ">>", depth-- ),
collectionDefinition.getCollectionPersister().getRole()
)
);
}
@Override
public void startingCollectionIndex(CollectionIndexDefinition collectionIndexDefinition) {
System.out.println(
String.format(
"%s Starting collection index (%s)",
StringHelper.repeat( ">>", ++depth ),
collectionIndexDefinition.getCollectionDefinition().getCollectionPersister().getRole()
)
);
}
@Override
public void finishingCollectionIndex(CollectionIndexDefinition collectionIndexDefinition) {
System.out.println(
String.format(
"%s Finishing collection index (%s)",
StringHelper.repeat( "<<", depth-- ),
collectionIndexDefinition.getCollectionDefinition().getCollectionPersister().getRole()
)
);
}
@Override
public void startingCollectionElements(CollectionElementDefinition elementDefinition) {
System.out.println(
String.format(
"%s Starting collection elements (%s)",
StringHelper.repeat( ">>", ++depth ),
elementDefinition.getCollectionDefinition().getCollectionPersister().getRole()
)
);
}
@Override
public void finishingCollectionElements(CollectionElementDefinition elementDefinition) {
System.out.println(
String.format(
"%s Finishing collection elements (%s)",
StringHelper.repeat( "<<", depth-- ),
elementDefinition.getCollectionDefinition().getCollectionPersister().getRole()
)
);
}
@Override
public void foundAny(AnyMappingDefinition anyDefinition) {
// nothing to do
}
@Override
public void associationKeyRegistered(AssociationKey associationKey) {
System.out.println(
String.format(
"%s AssociationKey registered : %s",
StringHelper.repeat( ">>", depth + 1 ),
associationKey.toString()
)
);
}
@Override
public FetchSource registeredFetchSource(AssociationKey associationKey) {
return null;
}
@Override
public void foundCircularAssociation(
AssociationAttributeDefinition attributeDefinition) {
System.out.println(
String.format(
"%s Handling circular association attribute (%s) : %s",
StringHelper.repeat( ">>", depth + 1 ),
attributeDefinition.toString(),
attributeDefinition.getAssociationKey().toString()
)
);
}
@Override
public boolean isDuplicateAssociationKey(AssociationKey associationKey) {
return false; //To change body of implemented methods use File | Settings | File Templates.
}
}