/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.vertical.engine.handlers; import java.util.Collection; import java.util.Map; import com.enonic.cms.core.content.category.CategoryKey; import com.enonic.cms.core.content.category.CategoryStatistics; public class CategoryStatisticsHelper { private final CategoryHandler categoryHandler; public CategoryStatisticsHelper( CategoryHandler categoryHandler ) { this.categoryHandler = categoryHandler; } public long getArchiveSizeByUnit( int unitKey ) { Map<Integer, CategoryStatistics> catStats = categoryHandler.getCategoryStatistics( unitKey ); connectCategories( catStats ); categoryHandler.collectStatisticsFromBinaryData( unitKey, catStats ); categoryHandler.collectStatisticsFromContent( unitKey, catStats ); return summarizeAll( catStats.values() ); } public long getArchiveSizeByCategory( CategoryKey categoryKey ) { int unitKey = categoryHandler.getUnitKey( categoryKey ); Map<Integer, CategoryStatistics> catStats = categoryHandler.getCategoryStatistics( unitKey ); connectCategories( catStats ); categoryHandler.collectStatisticsFromBinaryData( unitKey, catStats ); categoryHandler.collectStatisticsFromContent( unitKey, catStats ); return getAccumulatedSize( categoryKey, catStats ); } private void connectCategories( Map<Integer, CategoryStatistics> categoryStatisicsMap ) { for ( Map.Entry<Integer, CategoryStatistics> entry : categoryStatisicsMap.entrySet() ) { CategoryStatistics curCategoryStat = entry.getValue(); CategoryStatistics parent = categoryStatisicsMap.get( curCategoryStat.getParentCategoryKey() ); if ( parent != null && !curCategoryStat.getCategoryKey().equals( curCategoryStat.getParentCategoryKey() ) ) { parent.addChild( curCategoryStat ); curCategoryStat.setParent( parent ); } else { curCategoryStat.setParent( null ); } } } private long summarizeAll( Collection<CategoryStatistics> categoryStatisics ) { long sum = 0; for ( CategoryStatistics cs : categoryStatisics ) { sum += cs.getSize(); } return sum; } private long getAccumulatedSize( CategoryKey categoryKey, Map<Integer, CategoryStatistics> categoryStatsMap ) { CategoryStatistics cs = categoryStatsMap.get( categoryKey.toInt() ); if ( cs == null ) { return 0; } return cs.calculateAccumulatedSize(); } }