/hostadmiral/trunk/src/ak/hostadmiral/core/model/UserManager.java |
---|
326,7 → 326,16 |
} |
} |
public Collection listUserLogins(CollectionInfo info, int rowsPerPage, int pageNumber, |
Integer[] sortingKeys, User editor, User user) |
throws ModelException |
{ |
return store.listUserLogins(info, rowsPerPage, pageNumber, sortingKeys, user); |
} |
public static final Integer SORT_LOGIN = new Integer(1); |
public static final Integer SORT_LOGINS_TIME = new Integer(2); |
public static final Integer SORT_LOGINS_TIME_REVERSE = new Integer(3); |
public static final Comparator LOGIN_COMPARATOR = new LoginComparator(); |
public static final Comparator LOGINS_TIME_COMPARATOR = new LoginsTimeComparator(); |
/hostadmiral/trunk/src/ak/hostadmiral/core/model/store/UserStore.java |
---|
39,4 → 39,8 |
public Collection listSubusers(User user) |
throws ModelStoreException; |
public Collection listUserLogins(CollectionInfo info, int rowsPerPage, int pageNumber, |
Integer[] sortingKeys, User user) |
throws ModelStoreException; |
} |
/hostadmiral/trunk/src/ak/hostadmiral/core/model/store/hibernate/UserHibernate.java |
---|
182,7 → 182,33 |
} |
} |
public Collection listUserLogins(CollectionInfo info, int rowsPerPage, int pageNumber, |
Integer[] sortingKeys, User user) |
throws ModelStoreException |
{ |
try { |
if(info != null) { |
info.init(((Integer)HibernateUtil.currentSession().iterate( |
"select count(*) from UserLogin where usr = ?", |
new Object[] { user }, |
new Type[] { Hibernate.entity(User.class) } |
).next()).intValue(), |
pageNumber, rowsPerPage); |
} |
return HibernateUtil.pageableList(rowsPerPage, pageNumber, |
"select l from UserLogin l where usr = ?" |
+ HibernateUtil.formOrderClause(sortingKeys, sortKeysLogins), |
new Object[] { user }, |
new Type[] { Hibernate.entity(User.class) } ); |
} |
catch(HibernateException ex) { |
throw new ModelStoreException(ex); |
} |
} |
protected static Map sortKeys = new HashMap(); |
protected static Map sortKeysLogins = new HashMap(); |
private static boolean sortKeysInitialized = false; |
private static void initSortKeys() |
189,6 → 215,8 |
{ |
if(!sortKeysInitialized) { |
sortKeys.put(UserManager.SORT_LOGIN, "u.login"); |
sortKeysLogins.put(UserManager.SORT_LOGINS_TIME, "l.loginTime"); |
sortKeysLogins.put(UserManager.SORT_LOGINS_TIME_REVERSE, "l.loginTime desc"); |
sortKeysInitialized = true; |
} |
} |
/hostadmiral/trunk/src/ak/hostadmiral/core/action/UserLoginsAction.java |
---|
1,8 → 1,8 |
package ak.hostadmiral.core.action; |
import java.util.List; |
import java.util.Collection; |
import java.util.Collections; |
import java.util.ArrayList; |
import javax.servlet.http.HttpServletRequest; |
import javax.servlet.http.HttpServletResponse; |
14,6 → 14,7 |
import org.apache.struts.action.ActionForward; |
import ak.hostadmiral.util.StringConverter; |
import ak.hostadmiral.util.CollectionInfo; |
import ak.hostadmiral.core.model.User; |
import ak.hostadmiral.core.model.UserManager; |
20,11 → 21,12 |
public final class UserLoginsAction |
extends Action |
{ |
public static final int PAGE_SIZE = 20; |
public ActionForward execute(ActionMapping mapping, ActionForm form, |
HttpServletRequest request, HttpServletResponse response) |
throws Exception |
{ |
// FIXME: pages here |
ActionUtils.prepare(request, response); |
User user = (User)request.getSession().getAttribute("user"); |
31,12 → 33,15 |
DynaActionForm theForm = (DynaActionForm)form; |
Long userId = StringConverter.parseLong(theForm.get("id")); |
User u = UserManager.getInstance().get(user, userId); |
List logins = new ArrayList(u.getLogins()); |
Long page = StringConverter.parseLong(theForm.get("pg")); |
CollectionInfo listInfo = new CollectionInfo(); |
Collection logins = UserManager.getInstance().listUserLogins( |
listInfo, PAGE_SIZE, (page == null) ? 0 : page.intValue(), |
new Integer[] { UserManager.SORT_LOGINS_TIME_REVERSE }, user, u); |
Collections.sort(logins, UserManager.LOGINS_TIME_COMPARATOR); |
Collections.reverse(logins); |
request.setAttribute("u", u); |
request.setAttribute("logins", logins); |
request.setAttribute("listInfo", listInfo); |
return mapping.findForward("default"); |
} |
/hostadmiral/trunk/webapp/user/logins.jsp |
---|
5,6 → 5,7 |
<%@ taglib uri="/WEB-INF/ak-backpath.tld" prefix="backpath" %> |
<%@ taglib uri="/WEB-INF/ak-strutsx.tld" prefix="strutsx" %> |
<%@ taglib uri="/WEB-INF/hostadmiral-core.tld" prefix="core" %> |
<%@ taglib uri="/WEB-INF/hostadmiral-list.tld" prefix="list" %> |
<html> |
<head> |
52,6 → 53,33 |
</logic:iterate> |
</table> |
<p> |
List size: <bean:write name="listInfo" property="size" /> |
Page: <list:currentpage infoBean="listInfo" /> of <bean:write name="listInfo" property="totalPages" /> |
</p> |
<p> |
<list:hasfirst infoBean="listInfo"><list:firstpage infoBean="listInfo"><<</list:firstpage></list:hasfirst> |
<list:nofirst infoBean="listInfo"><<</list:nofirst> |
<list:hasprev infoBean="listInfo"><list:prevpage infoBean="listInfo"><</list:prevpage></list:hasprev> |
<list:noprev infoBean="listInfo"><</list:noprev> |
<list:iterate infoBean="listInfo" max="20"> |
<list:iscurrent> |
<list:displaypage /> |
</list:iscurrent> |
<list:notcurrent> |
<list:pagelink><list:displaypage /></list:pagelink> |
</list:notcurrent> |
</list:iterate> |
<list:hasnext infoBean="listInfo"><list:nextpage infoBean="listInfo">></list:nextpage></list:hasnext> |
<list:nonext infoBean="listInfo">></list:nonext> |
<list:haslast infoBean="listInfo"><list:lastpage infoBean="listInfo">>></list:lastpage></list:haslast> |
<list:nolast infoBean="listInfo">>></list:nolast> |
</p> |
<br> |
<backpath:backlink><bean:message key="ak.hostadmiral.page.user.logins.back" /></backpath:backlink> |
/hostadmiral/trunk/webapp/generalError.jsp |
---|
19,7 → 19,7 |
<p><bean:message key="ak.hostadmiral.page.generalError.message" /></p> |
<html:link path="/"><bean:message key="ak.hostadmiral.page.generalError.index" /></html:link> |
<html:link action="/index"><bean:message key="ak.hostadmiral.page.generalError.index" /></html:link> |
<br> |
<backpath:backlink><bean:message key="ak.hostadmiral.page.generalError.back" /></backpath:backlink> |
/hostadmiral/trunk/webapp/accessDenied.jsp |
---|
19,7 → 19,7 |
<p><bean:message key="ak.hostadmiral.page.accessDenied.message" /></p> |
<html:link path="/"><bean:message key="ak.hostadmiral.page.accessDenied.index" /></html:link> |
<html:link action="/index"><bean:message key="ak.hostadmiral.page.accessDenied.index" /></html:link> |
<br> |
<backpath:backlink><bean:message key="ak.hostadmiral.page.accessDenied.back" /></backpath:backlink> |
/hostadmiral/trunk/webapp/WEB-INF/struts-config.xml |
---|
37,6 → 37,7 |
name="UserLoginsForm" |
type="org.apache.struts.validator.DynaValidatorForm"> |
<form-property name="id" type="java.lang.String" /> |
<form-property name="pg" type="java.lang.String" /> |
</form-bean> |
<form-bean |
/hostadmiral/trunk/webapp/WEB-INF/validation.xml |
---|
47,6 → 47,9 |
<msg name="required" key="ak.hostadmiral.core.user.id.wrong" /> |
<msg name="long" key="ak.hostadmiral.core.user.id.wrong" /> |
</field> |
<field property="pg" depends="integer"> |
<msg name="integer" key="ak.hostadmiral.page.general.page.wrong" /> |
</field> |
</form> |
<form name="UserEditForm"> |