/**
* CloudGraph Community Edition (CE) License
*
* This is a community release of CloudGraph, a dual-license suite of
* Service Data Object (SDO) 2.1 services designed for relational and
* big-table style "cloud" databases, such as HBase and others.
* This particular copy of the software is released under the
* version 2 of the GNU General Public License. CloudGraph was developed by
* TerraMeta Software, Inc.
*
* Copyright (c) 2013, TerraMeta Software, Inc. All rights reserved.
*
* General License information can be found below.
*
* This distribution may include materials developed by third
* parties. For license and attribution notices for these
* materials, please refer to the documentation that accompanies
* this distribution (see the "Licenses for Third-Party Components"
* appendix) or view the online documentation at
* <http://cloudgraph.org/licenses/>.
*/
package org.cloudgraph.common.concurrent;
import java.util.HashSet;
import org.cloudgraph.common.CloudGraphConstants;
import org.plasma.sdo.PlasmaDataGraphVisitor;
import org.plasma.sdo.core.CoreNode;
import commonj.sdo.DataObject;
public class GraphMetricVisitor implements PlasmaDataGraphVisitor {
private long count = 0;
private long depth = 0;
private HashSet<String> threadNames = new HashSet<String>();
@Override
public void visit(DataObject target, DataObject source,
String sourcePropertyName, int level) {
count++;
if (level > depth)
depth = level;
CoreNode node = (CoreNode)target;
String thread = (String)node.getValueObject().get(
CloudGraphConstants.GRAPH_NODE_THREAD_NAME);
if (thread != null)
this.threadNames.add(thread);
}
public long getCount() {
return count;
}
public long getDepth() {
return depth;
}
public long getThreadCount() {
return threadNames.size();
}
}