package com.github.wicketoracle.html.panel;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.RefreshingView;
import org.apache.wicket.markup.repeater.util.ModelIteratorAdapter;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
/**
* Panel which allows a result set, whose number of columns is unknown at runtime to be rendered.
*
* @author Andrew Hall
*
*/
public final class DynamicResultPanel extends Panel
{
/** for serialisation */
private static final long serialVersionUID = 1L;
private transient DynamicResult dynamicResult;
/**
* Constructor
*/
public DynamicResultPanel( final String pId )
{
super( pId );
/** data table's column headers */
add
(
new RefreshingView<String>( "HeaderResultTable" )
{
private static final long serialVersionUID = 1L;
@Override
protected Iterator<IModel<String>> getItemModels()
{
/* convert the list items into models */
return new ModelIteratorAdapter<String>( getColumnHeadings().listIterator() )
{
@Override
protected IModel<String> model( final String object )
{
return new CompoundPropertyModel<String>( object );
}
};
}
@Override
protected void populateItem( final Item<String> item )
{
item.add( new Label( "LabelHeader", item.getModelObject() ) );
}
}
);
/* data content */
add
(
new RefreshingView<List<String>>( "DataRow" )
{
private static final long serialVersionUID = 1L;
@Override
protected Iterator<IModel<List<String>>> getItemModels()
{
/* convert the list items into models */
return new ModelIteratorAdapter<List<String>>( getTableContent().listIterator() )
{
@Override
protected IModel<List<String>> model( final List<String> object )
{
return new CompoundPropertyModel<List<String>>( object );
}
};
}
@Override
protected void populateItem( final Item<List<String>> item )
{
/* individual cell */
item.add
(
new RefreshingView<String>( "DataRowContent" )
{
private static final long serialVersionUID = 1L;
@Override
protected Iterator<IModel<String>> getItemModels()
{
/* convert the list items into models */
return new ModelIteratorAdapter<String>( item.getModelObject().iterator() )
{
@Override
protected IModel<String> model( final String object )
{
return new CompoundPropertyModel<String>( object );
}
};
}
@Override
protected void populateItem( final Item<String> item )
{
item.add( new Label( "DataCell", item.getModelObject() ) );
}
}
);
}
}
);
}
/**
*
* @return
*/
public DynamicResult getDynamicResult()
{
return dynamicResult;
}
/**
*
* @param pDynamicResult
*/
public void setDynamicResult( final DynamicResult pDynamicResult )
{
dynamicResult = pDynamicResult;
}
/**
*
* @return
*/
public List<String> getColumnHeadings()
{
List<String> temp;
if ( dynamicResult == null )
{
temp = new ArrayList<String>();
}
else
{
temp = dynamicResult.getResultHeaders();
}
return temp;
}
/**
*
* @return
*/
public List<List<String>> getTableContent()
{
List<List<String>> temp;
if ( dynamicResult == null )
{
temp = new ArrayList<List<String>>();
}
else
{
temp = dynamicResult.getResults();
}
return temp;
}
}