package com.github.wicketoracle.app.user.delegate.mgr;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.wicket.authorization.strategies.role.annotations.AuthorizeInstantiation;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.StatelessForm;
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.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.util.value.ValueMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.github.wicketoracle.app.exception.NothingToDoException;
import com.github.wicketoracle.html.page.StandardPage;
import com.github.wicketoracle.html.panel.menu.PostLoginMenuPanelFactory;
import com.github.wicketoracle.session.Session;
@AuthorizeInstantiation( RequiredRoles.ROLE_DGT_APP_USER_ROLE_MGR )
public final class DelegateUserRoleMgrPage extends StandardPage
{
private static final Logger LOGGER = LoggerFactory.getLogger( DelegateUserRoleMgrPage.class );
private final Panel menuPanel = PostLoginMenuPanelFactory.getPostLoginMenuPanel();
private final RoleMgrForm roleMgrForm;
private final Label headerLabel;
/**
*
* @param pDelegateUser
*/
public DelegateUserRoleMgrPage( final DelegateUser pDelegateUser )
{
add( menuPanel );
roleMgrForm = new RoleMgrForm( "FormRoleMgr" , pDelegateUser.getUserId() );
add( roleMgrForm );
ValueMap headerLabelParams = new ValueMap();
headerLabelParams.put( "username" , pDelegateUser.getUsername() );
headerLabel = new Label( "HeaderChangeRoles" , new StringResourceModel( "HeaderChangeRoles" , this , new Model<ValueMap>( headerLabelParams ) ) );
add( headerLabel );
}
private final class RoleMgrForm extends StatelessForm<DelegateUserRole>
{
private static final long serialVersionUID = 1L;
private int userId;
private List<DelegateUserRole> roleList = new ArrayList<DelegateUserRole>();
/**
*
* @param pId
* @param pUserId
*/
public RoleMgrForm( final String pId , final int pUserId )
{
super( pId );
userId = pUserId;
add
(
new RefreshingView<DelegateUserRole>( "RoleList" )
{
private static final long serialVersionUID = 1L;
@Override
protected Iterator<IModel<DelegateUserRole>> getItemModels()
{
final Session session = ( Session ) getSession();
OracleDelegateUserRoleMgrDAO dataService = null;
try
{
dataService = new OracleDelegateUserRoleMgrDAO( session.getUsername() , session.getPassword() );
roleList = dataService.getUserRoles( userId );
}
catch ( SQLException sqle )
{
LOGGER.error
(
"SQL Exception when retrieving roles for user '{}' -> {}; error code -> {}; sql state -> {}"
, new Object [ ]
{
Integer.toString( userId )
, sqle.getMessage()
, sqle.getErrorCode()
, sqle.getSQLState()
}
);
error( getLocalizer().getString( "MessageUnexpectedError" , this ) );
}
finally
{
if ( ! dataService.closeConnection() )
{
error( getLocalizer().getString( "MessageUnexpectedError" , this ) );
}
}
return new ModelIteratorAdapter<DelegateUserRole>( roleList.iterator() )
{
@Override
protected IModel<DelegateUserRole> model( final DelegateUserRole pObject )
{
return new CompoundPropertyModel<DelegateUserRole>( pObject );
}
};
}
@Override
protected void populateItem( final Item<DelegateUserRole> pItem )
{
pItem.add( new Label( "roleCategory" ) );
pItem.add( new Label( "roleDescr" ) );
pItem.add( new CheckBox( "assigned" ) );
}
}
);
}
@Override
public void onSubmit()
{
final Session session = ( Session ) getSession();
OracleDelegateUserRoleMgrDAO dataService = null;
try
{
dataService = new OracleDelegateUserRoleMgrDAO( session.getUsername() , session.getPassword() );
dataService.setUserRoles( userId , roleList );
info( getLocalizer().getString( "MessageSuccess" , this ) );
}
catch ( NothingToDoException ntde )
{
error( getLocalizer().getString( "NoWorkToDo" , this ) );
}
catch ( SQLException sqle )
{
LOGGER.error
(
"SQL Exception when modifying roles for user '{}' -> {}; error code -> {}; sql state -> {}"
, new Object [ ]
{
Integer.toString( userId )
, sqle.getMessage()
, sqle.getErrorCode()
, sqle.getSQLState()
}
);
error( getLocalizer().getString( "MessageUnexpectedError" , this ) );
}
finally
{
if ( ! dataService.closeConnection() )
{
error( getLocalizer().getString( "MessageUnexpectedError" , this ) );
}
}
}
}
}