/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.content.contentdata.custom;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.commons.lang.builder.ToStringBuilder;
/**
* Apr 21, 2010
*/
public class BlockGroupDataEntries
{
private String blockName;
private Map<Integer, GroupDataEntry> entriesByIndex = new LinkedHashMap<Integer, GroupDataEntry>();
private int lastIndex = 0;
public BlockGroupDataEntries( String blockName )
{
this.blockName = blockName;
}
public String getBlockName()
{
return blockName;
}
public void add( GroupDataEntry groupDataEntry )
{
Integer index = groupDataEntry.getGroupIndex();
if ( entriesByIndex.containsKey( index ) )
{
throw new IllegalArgumentException( "GroupDataEntry at index " + index + " already exists." );
}
entriesByIndex.put( index, groupDataEntry );
lastIndex = index;
}
public Iterable<GroupDataEntry> getGroupDataEntries()
{
return entriesByIndex.values();
}
public int numberOfEntries()
{
return entriesByIndex.size();
}
public int lasIndex()
{
return lastIndex;
}
public int expectedNextIndex()
{
return lastIndex + 1;
}
public GroupDataEntry getGroupDataEntry( int index )
{
return entriesByIndex.get( index );
}
public boolean hasEntryAtIndex( int index )
{
return entriesByIndex.containsKey( index );
}
public boolean hasEntry( GroupDataEntry groupDataEntry )
{
return entriesByIndex.containsKey( groupDataEntry.getGroupIndex() );
}
public void reorganizeBySuccesiveIndexOrder()
{
Map<Integer, GroupDataEntry> reorganisedEntriesByIndex = new LinkedHashMap<Integer, GroupDataEntry>();
int index = 0;
for ( Map.Entry<Integer, GroupDataEntry> entry : entriesByIndex.entrySet() )
{
int newIndex = ++index;
reorganisedEntriesByIndex.put( index, new GroupDataEntry( entry.getValue(), newIndex ) );
}
entriesByIndex = reorganisedEntriesByIndex;
lastIndex = index;
}
@Override
public String toString()
{
ToStringBuilder b = new ToStringBuilder( this );
b.append( "blockName", blockName );
b.append( "size", entriesByIndex.size() );
return b.toString();
}
}