package com.github.wicketoracle.app.report.leastprivileges;
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_LEAST_PRIVILEGES_REPORT )
public final class LeastPrivilegesReportPage extends StandardPage
{
private static final Logger LOGGER = LoggerFactory.getLogger( LeastPrivilegesReportPage.class );
private final Panel menuPanel = PostLoginMenuPanelFactory.getPostLoginMenuPanel();
private final LeastPrivilegesView leastPrivilegesView = new LeastPrivilegesView( "ViewLeastPrivileges" );
/**
* Constructor
*/
public LeastPrivilegesReportPage()
{
add( menuPanel );
add( leastPrivilegesView );
}
/**
*
*/
@Override
public void onBeforeRender()
{
leastPrivilegesView.refreshUserActivityData();
super.onBeforeRender();
}
/**
*
* @author Andrew Hall
*
*/
private class LeastPrivilegesView extends WebMarkupContainer
{
private static final long serialVersionUID = 1L;
private List<ReportRecord> leastPrivilegesData = new ArrayList<ReportRecord>();
private transient Localizer localiser = getLocalizer();
private final Label privilegeHolderLabel = new Label( "LabelPrivilegeHolder" , localiser.getString( "LabelPrivilegeHolder" , this ) );
private final Label objectOwnerLabel = new Label( "LabelObjectOwner" , localiser.getString( "LabelObjectOwner" , this ) );
private final Label objectNameLabel = new Label( "LabelObjectName" , localiser.getString( "LabelObjectName" , this ) );
private final Label grantedPrivilegeLabel = new Label( "LabelGrantedPrivilege" , localiser.getString( "LabelGrantedPrivilege" , this ) );
/**
* Retrieve the report data
*/
private void refreshUserActivityData()
{
final Session session = ( Session ) getSession();
LeastPrivilegesReportDAO dataService = null;
try
{
dataService = new LeastPrivilegesReportDAO( session.getUsername() , session.getPassword() );
leastPrivilegesData = dataService.getReport();
}
catch ( SQLException sqle )
{
LOGGER.error
(
"SQL Exception when running the least privileges 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 ( leastPrivilegesData.size() > 0 )
{
setVisible( true );
}
else
{
info( getLocalizer().getString( "MessageNoDataFound" , this ) );
setVisible( false );
}
}
/**
*
* @param pId
*/
public LeastPrivilegesView( final String pId )
{
super( pId );
add( privilegeHolderLabel );
add( objectOwnerLabel );
add( objectNameLabel );
add( grantedPrivilegeLabel );
add
(
new RefreshingView <ReportRecord>( "LeastPrivilegesList" )
{
private static final long serialVersionUID = 1L;
/**
* Retrieve data
*/
@Override
protected Iterator <IModel<ReportRecord>> getItemModels()
{
return new ModelIteratorAdapter<ReportRecord>( leastPrivilegesData.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( "privilegeHolder" ) );
pItem.add( new Label( "objectOwner" ) );
pItem.add( new Label( "objectName" ) );
pItem.add( new Label( "grantedPrivilege" ) );
}
}
);
}
}
}