package com.github.wicketoracle.app.report.tableswithoutpk;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.wicket.Localizer;
import org.apache.wicket.authorization.strategies.role.annotations.AuthorizeInstantiation;
import org.apache.wicket.markup.html.WebMarkupContainer;
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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.github.wicketoracle.html.page.StandardPage;
import com.github.wicketoracle.html.panel.menu.PostLoginMenuPanelFactory;
import com.github.wicketoracle.session.Session;
@AuthorizeInstantiation( RequiredRoles.ROLE_TABLES_WITHOUT_PK_REPORT )
public final class TablesWithoutPKReportPage extends StandardPage
{
private static final Logger LOGGER = LoggerFactory.getLogger( TablesWithoutPKReportPage.class );
private final Panel menuPanel = PostLoginMenuPanelFactory.getPostLoginMenuPanel();
private final TablesWithoutPKView tablesWithoutPKView = new TablesWithoutPKView( "ViewTablesWithoutPK" );
/**
* Constructor
*/
public TablesWithoutPKReportPage()
{
add( menuPanel );
add( tablesWithoutPKView );
}
@Override
public void onBeforeRender()
{
tablesWithoutPKView.refreshUserActivityData();
super.onBeforeRender();
}
/**
*
* @author Andrew Hall
*
*/
private class TablesWithoutPKView extends WebMarkupContainer
{
private static final long serialVersionUID = 1L;
private List<ReportRecord> tablesWithoutPKData = new ArrayList<ReportRecord>();
private transient Localizer localiser = getLocalizer();
private final Label tableOwnerLabel = new Label( "LabelTableOwner" , localiser.getString( "LabelTableOwner" , this ) );
private final Label tableNameLabel = new Label( "LabelTableName" , localiser.getString( "LabelTableName" , this ) );
/**
* Retrieve the report data
*/
private void refreshUserActivityData()
{
final Session session = ( Session ) getSession();
TablesWithoutPKReportDAO dataService = null;
try
{
dataService = new TablesWithoutPKReportDAO( session.getUsername() , session.getPassword() );
tablesWithoutPKData = dataService.getReport();
}
catch ( SQLException sqle )
{
LOGGER.error
(
"SQL Exception when running the unindexed foreign key report -> {}; error code -> {}; sql state -> {}"
, new Object [ ]
{
sqle.getMessage()
, sqle.getErrorCode()
, sqle.getSQLState()
}
);
error( getLocalizer().getString( "MessageUnexpectedError" , this ) );
}
finally
{
if ( ! dataService.closeConnection() )
{
error( getLocalizer().getString( "MessageUnexpectedError" , this ) );
}
}
if ( tablesWithoutPKData.size() > 0 )
{
setVisible( true );
}
else
{
info( getLocalizer().getString( "MessageNoDataFound" , this ) );
setVisible( false );
}
}
/**
*
* @param pId
*/
public TablesWithoutPKView( final String pId )
{
super( pId );
add( tableOwnerLabel );
add( tableNameLabel );
add
(
new RefreshingView <ReportRecord>( "TablesWithoutPKList" )
{
private static final long serialVersionUID = 1L;
/**
* Retrieve data
*/
@Override
protected Iterator <IModel<ReportRecord>> getItemModels()
{
return new ModelIteratorAdapter<ReportRecord>( tablesWithoutPKData.iterator() )
{
@Override
protected IModel <ReportRecord> model( final ReportRecord pObject )
{
return new CompoundPropertyModel<ReportRecord>( pObject );
}
};
}
/**
* Populate the report
*/
@Override
protected void populateItem( final Item<ReportRecord> pItem )
{
pItem.add( new Label( "tableOwner" ) );
pItem.add( new Label( "tableName" ) );
}
}
);
}
}
}