package com.github.wicketoracle.app.report.userprivileges; import java.sql.SQLException; import java.util.Map; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeModel; import org.apache.wicket.authorization.strategies.role.annotations.AuthorizeInstantiation; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.markup.html.tree.LinkTree; import org.apache.wicket.model.PropertyModel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.github.wicketoracle.html.form.choice.IntegerSelectChoice; import com.github.wicketoracle.html.form.choice.SelectChoiceList; 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; @AuthorizeInstantiation( RequiredRoles.ROLE_USER_PRIVILEGES_REPORT ) public class UserPrivilegesReportPage extends StandardPage { private static final Logger LOGGER = LoggerFactory.getLogger( UserPrivilegesReportPage.class ); private final Panel menuPanel = PostLoginMenuPanelFactory.getPostLoginMenuPanel(); private final SearchForm searchForm = new SearchForm( "searchForm" ); private final ReportTreeView reportTreeView = new ReportTreeView( "ViewReportTree" ); private boolean isFirstRender = true; /** * */ public UserPrivilegesReportPage() { add( menuPanel ); add( searchForm ); add( reportTreeView ); reportTreeView.setVisible( false ); } /** * */ @Override public final void onBeforeRender() { if ( ! isFirstRender ) { reportTreeView.refreshUserPrivileges( searchForm.getUserSearchChoices() ); } isFirstRender = false; super.onBeforeRender(); } /** * * @author Andrew Hall * */ private final class SearchForm extends Form<UserSearchChoices> { private static final long serialVersionUID = 1L; private UserSearchChoices userSearchChoices = new UserSearchChoices(); private final DropDownChoice<IntegerSelectChoice> userIdDropDownChoice = new DropDownChoice<IntegerSelectChoice>( "userId" ); private SelectChoiceList<IntegerSelectChoice> userIdData; /** * * @param pId */ public SearchForm( final String pId ) { super( pId ); /* retrieve the drop down choice data */ final Session session = ( Session ) getSession(); UserPrivilegesReportDAO dataService = null; Map<String , SelectChoiceList<IntegerSelectChoice>> selectListData = null; try { dataService = new UserPrivilegesReportDAO( session.getUsername() , session.getPassword() ); selectListData = dataService.getKeyValueRefData(); } catch ( SQLException sqle ) { LOGGER.error ( "SQL Exception when retrieving ref. data for user 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 ) ); } } userIdData = selectListData.get( "AUR" ); if ( userIdData != null ) { userIdDropDownChoice.setChoices( userIdData ).setChoiceRenderer( userIdData ).setModel( new PropertyModel <IntegerSelectChoice>( userSearchChoices , "userId" ) ); userIdDropDownChoice.setNullValid( false ).setRequired( true ).setVisible( true ); } else { userIdDropDownChoice.setRequired( false ).setVisible( false ); } add( userIdDropDownChoice ); } /** * */ @Override public void onSubmit() { if ( getIsDebugInfoVisible() ) { info( "Search :: user id :: " + userSearchChoices.getUserId().getKeyAsString() ); } } /** * * @return */ public UserSearchChoices getUserSearchChoices() { return userSearchChoices; } } /** * * @author Andrew Hall * */ private class ReportTreeView extends WebMarkupContainer { private static final long serialVersionUID = 1L; private final LinkTree reportTree = new LinkTree( "TreeReport" , new DefaultTreeModel( new DefaultMutableTreeNode( getLocalizer().getString( "LabelReportTreeRootNode" , this ) ) ) ); private final TreeControlPanel treeControlPanel = new TreeControlPanel( "PanelTreeControl" , reportTree ); /** * * @param pId */ public ReportTreeView( final String pId ) { super( pId ); reportTree.setRootLess( true ); reportTree.getTreeState().collapseAll(); add( reportTree ); add( treeControlPanel ); } /** * * @param pSearchCriteria */ public void refreshUserPrivileges( final UserSearchChoices pSearchCriteria ) { final Session session = ( Session ) getSession(); UserPrivilegesReportDAO dataService = null; TreeModel reportTreeModel = null; try { dataService = new UserPrivilegesReportDAO( session.getUsername() , session.getPassword() ); reportTreeModel = dataService.getSecurityTree( new DefaultMutableTreeNode( getLocalizer().getString( "LabelReportTreeRootNode" , this ) ) , pSearchCriteria.getUserId().getKey() ); if ( reportTreeModel.getChildCount( reportTreeModel.getRoot() ) > 0 ) { setVisible( true ); } else { info( getLocalizer().getString( "MessageNoDataFound" , this ) ); setVisible( false ); } } catch ( SQLException sqle ) { LOGGER.error ( "SQL Exception when constructing user privilege tree -> {}; error code -> {}; sql state -> {}" , new Object [ ] { sqle.getMessage() , sqle.getErrorCode() , sqle.getSQLState() } ); error( getLocalizer().getString( "MessageUnexpectedError" , this ) ); } finally { if ( ! dataService.closeConnection() ) { final String errmsg = getLocalizer().getString( "MessageUnexpectedError" , this ); error( errmsg ); } } reportTree.setModelObject( reportTreeModel ); } } }