package com.github.wicketoracle.app.report.useractivity; 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.datetime.PatternDateConverter; import org.apache.wicket.datetime.markup.html.basic.DateLabel; 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_CURRENT_USER_ACTIVITY_REPORT ) public class UserActivityReportPage extends StandardPage { private static final Logger LOGGER = LoggerFactory.getLogger( UserActivityReportPage.class ); private final Panel menuPanel = PostLoginMenuPanelFactory.getPostLoginMenuPanel(); private final UserActivityView userActivityView = new UserActivityView( "ViewUserActivity" ); /** * Constructor */ public UserActivityReportPage() { add( menuPanel ); add( userActivityView ); } @Override public final void onBeforeRender() { userActivityView.refreshUserActivityData(); super.onBeforeRender(); } /** * * @author Andrew Hall * */ private class UserActivityView extends WebMarkupContainer { private static final long serialVersionUID = 1L; private List<ReportRecord> userActivityData = new ArrayList<ReportRecord>(); private transient Localizer localiser = getLocalizer(); private final Label usernameLabel = new Label( "LabelUsername" , localiser.getString( "LabelUsername" , this ) ); private final Label sessionIdLabel = new Label( "LabelSessionId" , localiser.getString( "LabelSessionId" , this ) ); private final Label sessionSerialLabel = new Label( "LabelSessionSerial" , localiser.getString( "LabelSessionSerial" , this ) ); private final Label clientInfoLabel = new Label( "LabelClientInfo" , localiser.getString( "LabelClientInfo" , this ) ); private final Label clientIdentifierLabel = new Label( "LabelClientIdentifier" , localiser.getString( "LabelClientIdentifier" , this ) ); private final Label logonTimeLabel = new Label( "LabelLogonTime" , localiser.getString( "LabelLogonTime" , this ) ); private final Label sessionStatusLabel = new Label( "LabelSessionStatus" , localiser.getString( "LabelSessionStatus" , this ) ); private final Label programLabel = new Label( "LabelProgram" , localiser.getString( "LabelProgram" , this ) ); private final Label moduleLabel = new Label( "LabelModule" , localiser.getString( "LabelModule" , this ) ); private final Label actionLabel = new Label( "LabelAction" , localiser.getString( "LabelAction" , this ) ); private final Label traceFileNameLabel = new Label( "LabelTraceFileName" , localiser.getString( "LabelTraceFileName" , this ) ); /** * Retrieve the report data */ private void refreshUserActivityData() { final Session session = ( Session ) getSession(); UserActivityReportDAO dataService = null; try { dataService = new UserActivityReportDAO( session.getUsername() , session.getPassword() ); userActivityData = dataService.getReport(); } catch ( SQLException sqle ) { LOGGER.error ( "SQL Exception when running the current user activity 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 ( userActivityData.size() > 0 ) { setVisible( true ); } else { info( getLocalizer().getString( "MessageNoDataFound" , this ) ); setVisible( false ); } } /** * * @param pId */ public UserActivityView( final String pId ) { super( pId ); add( usernameLabel ); add( sessionIdLabel ); add( sessionSerialLabel ); add( clientInfoLabel ); add( clientIdentifierLabel ); add( logonTimeLabel ); add( sessionStatusLabel ); add( programLabel ); add( moduleLabel ); add( actionLabel ); add( traceFileNameLabel ); add ( new RefreshingView <ReportRecord>( "UserActivityList" ) { private static final long serialVersionUID = 1L; /** * Retrieve data */ @Override protected Iterator <IModel<ReportRecord>> getItemModels() { return new ModelIteratorAdapter<ReportRecord>( userActivityData.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( "username" ) ); pItem.add( new Label( "sessionId" ) ); pItem.add( new Label( "sessionSerialNum" ) ); pItem.add( new Label( "clientInfo" ) ); pItem.add( new Label( "clientIdentifier" ) ); pItem.add( new DateLabel( "logonTime" , new PatternDateConverter( "dd-MMM-yyyy", false ) ) ); pItem.add( new Label( "sessionStatus" ) ); pItem.add( new Label( "program" ) ); pItem.add( new Label( "module" ) ); pItem.add( new Label( "action" ) ); pItem.add( new Label( "traceFileName" ) ); } } ); } } }