package com.github.wicketoracle.app.report.sessionlock;
import java.sql.SQLException;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeModel;
import org.apache.wicket.Localizer;
import org.apache.wicket.extensions.markup.html.tree.table.ColumnLocation;
import org.apache.wicket.extensions.markup.html.tree.table.IColumn;
import org.apache.wicket.extensions.markup.html.tree.table.PropertyRenderableColumn;
import org.apache.wicket.extensions.markup.html.tree.table.PropertyTreeColumn;
import org.apache.wicket.extensions.markup.html.tree.table.TreeTable;
import org.apache.wicket.extensions.markup.html.tree.table.ColumnLocation.Alignment;
import org.apache.wicket.extensions.markup.html.tree.table.ColumnLocation.Unit;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.panel.Panel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.github.wicketoracle.html.page.StandardPage;
import com.github.wicketoracle.html.panel.TreeControlPanel;
import com.github.wicketoracle.html.panel.menu.PostLoginMenuPanelFactory;
import com.github.wicketoracle.session.Session;
public class SessionLockReportPage extends StandardPage
{
private static final Logger LOGGER = LoggerFactory.getLogger( SessionLockReportPage.class );
private final Panel menuPanel = PostLoginMenuPanelFactory.getPostLoginMenuPanel();
private final SessionLockView sessionLockView = new SessionLockView( "ViewSessionLocks" );
/**
*
*/
public SessionLockReportPage()
{
add( menuPanel );
add( sessionLockView );
}
/**
*
* @author Andrew Hall
*
*/
private class SessionLockView extends WebMarkupContainer
{
private static final long serialVersionUID = 1L;
private final TreeTable reportTree = new TreeTable( "TreeReport" , getTreeModel() , getColumns() );
private final TreeControlPanel treeControlPanel = new TreeControlPanel( "PanelTreeControl" , reportTree );
/**
*
* @return
*/
private IColumn[] getColumns()
{
Localizer localizer = getLocalizer();
return new IColumn[ ] {
new PropertyTreeColumn( new ColumnLocation( Alignment.LEFT , 15 , Unit.EM ) , localizer.getString( "HeaderSessionId" , this ) , "userObject.sessionId" )
, new PropertyRenderableColumn( new ColumnLocation( Alignment.LEFT , 8 , Unit.EM ) , localizer.getString( "HeaderUsername" , this ) , "userObject.username" )
, new PropertyRenderableColumn( new ColumnLocation( Alignment.LEFT , 8 , Unit.EM ) , localizer.getString( "HeaderLockType" , this ) , "userObject.lockType" )
, new PropertyRenderableColumn( new ColumnLocation( Alignment.LEFT , 8 , Unit.EM ) , localizer.getString( "HeaderModeHeld" , this ) , "userObject.modeHeld" )
, new PropertyRenderableColumn( new ColumnLocation( Alignment.LEFT , 10 , Unit.EM ) , localizer.getString( "HeaderModeRequested" , this ) , "userObject.modeRequested" )
, new PropertyRenderableColumn( new ColumnLocation( Alignment.LEFT , 8 , Unit.EM ) , localizer.getString( "HeaderLockId1" , this ) , "userObject.lockId1" )
, new PropertyRenderableColumn( new ColumnLocation( Alignment.LEFT , 8 , Unit.EM ) , localizer.getString( "HeaderLockId2" , this ) , "userObject.lockId2" )
, new PropertyRenderableColumn( new ColumnLocation( Alignment.LEFT , 10 , Unit.EM ) , localizer.getString( "HeaderPrevSQL" , this ) , "userObject.prevSql" )
, new PropertyRenderableColumn( new ColumnLocation( Alignment.LEFT , 10 , Unit.EM ) , localizer.getString( "HeaderCurrentSQL" , this ) , "userObject.currSql" )
};
}
/**
*
* @return
*/
private TreeModel getTreeModel()
{
final Session session = ( Session ) getSession();
SessionLockReportDAO dataService = null;
TreeModel treeModel = null;
try
{
dataService = new SessionLockReportDAO( session.getUsername() , session.getPassword() );
treeModel = dataService.getReport( new DefaultMutableTreeNode( getLocalizer().getString( "LabelRootTreeNode" , this ) ) );
}
catch ( SQLException sqle )
{
LOGGER.error
(
"SQL Exception when retrieving session lock report link-tree data -> {}; 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 ( treeModel == null )
{
treeModel = new DefaultTreeModel( new DefaultMutableTreeNode( getLocalizer().getString( "LabelRootTreeNodeError" , this ) ) );
}
return treeModel;
}
/**
*
* @param pId
*/
public SessionLockView( final String pId )
{
super( pId );
reportTree.setRootLess( true );
reportTree.getTreeState().expandAll();
add( treeControlPanel );
add( reportTree );
}
/**
*
*/
@Override
public void onBeforeRender()
{
final TreeModel treeModel = reportTree.getModelObject();
final boolean isLocks = ( treeModel.getChildCount( treeModel.getRoot() ) >= 1 );
reportTree.setModelObject( treeModel );
if ( isLocks )
{
reportTree.setModelObject( treeModel );
setVisible( true );
}
else
{
info( getLocalizer().getString( "MessageNoDataFound" , this ) );
setVisible( false );
}
super.onBeforeRender();
}
}
}