/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.core.util;
import java.util.Set;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
/**
* A {@link ModelVisitor} implementation that records the number of instances of each {@link EClass} and the number of
* {@link Resource} instances.
* <p>
* This class is not thread safe.
* </p>
* <p>
* For usage information, see {@link ModelVisitor}
* </p>
*
* @since 8.0
*/
public class ModelStatisticsVisitor implements ModelVisitor {
private final ModelStatistics stats;
/**
* Construct an instance of ModelStatisticsVisitor.
*/
public ModelStatisticsVisitor() {
super();
this.stats = new ModelStatistics();
}
public ModelStatistics getModelStatistics() {
return stats;
}
/**
* Return the {@link EClass} objects for which instances were found by this visitor.
*
* @return the set of metaclasses; never null
*/
public Set getEClassesFound() {
return this.stats.getEClasses();
}
/**
* Return the number of instances of the supplied {@link EClass metaclass} that were found by this visitor.
*
* @param metaclass the {@link EClass}
* @return the number of instances of the metaclass found by this visitor.
*/
public int getCount( final EClass metaclass ) {
return this.stats.getCount(metaclass);
}
/**
* Return the number of resources that were found by this visitor.
*
* @return the number of resources found by this visitor.
*/
public int getResourceCount() {
return this.stats.getResourceCount();
}
/**
* Clear any statistics gathered by this visitor.
*/
public void clear() {
this.stats.clear();
}
/**
* @see org.teiid.designer.core.util.ModelVisitor#visit(org.eclipse.emf.ecore.EObject)
*/
@Override
public boolean visit( EObject object ) {
if (object == null) {
return false;
}
final EClass metaclass = object.eClass();
this.stats.add(metaclass, 1);
return true;
}
/**
* @see org.teiid.designer.core.util.ModelVisitor#visit(org.eclipse.emf.ecore.resource.Resource)
*/
@Override
public boolean visit( Resource resource ) {
if (resource == null) {
return false;
}
this.stats.addResourceCount(1);
return true;
}
}