/** * Copyright (c) 2002-2012 "Neo Technology," * Network Engine for Objects in Lund AB [http://neotechnology.com] * * This file is part of Neo4j. * * Neo4j 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 <http://www.gnu.org/licenses/>. */ package org.neo4j.perftest.enterprise.generator; import java.util.EnumMap; import java.util.List; import java.util.Map; import java.util.TreeMap; import org.neo4j.kernel.impl.nioneo.store.PropertyBlock; import org.neo4j.kernel.impl.nioneo.store.PropertyRecord; import org.neo4j.kernel.impl.nioneo.store.PropertyType; import org.neo4j.kernel.impl.nioneo.store.RecordStore; class PropertyStats extends RecordStore.Processor { Map<Integer, Long> sizeHistogram = new TreeMap<Integer, Long>(); Map<PropertyType, Long> typeHistogram = new EnumMap<PropertyType, Long>( PropertyType.class ); @Override public void processProperty( RecordStore<PropertyRecord> store, PropertyRecord property ) { List<PropertyBlock> blocks = property.getPropertyBlocks(); update( sizeHistogram, blocks.size() ); for ( PropertyBlock block : blocks ) { update( typeHistogram, block.getType() ); } } private <T> void update( Map<T, Long> histogram, T key ) { Long value = histogram.get( key ); histogram.put( key, (value == null) ? 1 : (value + 1) ); } @Override public String toString() { StringBuilder builder = new StringBuilder( getClass().getSimpleName() ).append( "{\n" ); for ( Map.Entry<Integer, Long> entry : sizeHistogram.entrySet() ) { builder.append( '\t' ).append( entry.getKey() ).append( ": " ).append( entry.getValue() ).append( '\n' ); } for ( Map.Entry<PropertyType, Long> entry : typeHistogram.entrySet() ) { builder.append( '\t' ).append( entry.getKey() ).append( ": " ).append( entry.getValue() ).append( '\n' ); } return builder.append( '}' ).toString(); } }