You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2012/10/21 13:25:00 UTC

svn commit: r1400625 - in /incubator/openmeetings/trunk/singlewebapp: WebContent/openmeetings/css/ src/org/apache/openmeetings/data/ src/org/apache/openmeetings/data/basic/ src/org/apache/openmeetings/data/basic/dao/ src/org/apache/openmeetings/data/co...

Author: solomax
Date: Sun Oct 21 11:24:59 2012
New Revision: 1400625

URL: http://svn.apache.org/viewvc?rev=1400625&view=rev
Log:
Wicket: sorting is added to the admin users panel

Added:
    incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/data/DataViewContainer.java
    incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/data/OmOrderByBorder.java
Modified:
    incubator/openmeetings/trunk/singlewebapp/WebContent/openmeetings/css/theme.css
    incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/OmDAO.java
    incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/FieldLanguagesValuesDaoImpl.java
    incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/FieldValueDaoImpl.java
    incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/ConfigurationDaoImpl.java
    incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/LdapConfigDaoImpl.java
    incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/ServerDaoImpl.java
    incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/RoomDAO.java
    incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/Usermanagement.java
    incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/dao/OrganisationDAO.java
    incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/dao/OrganisationUserDAO.java
    incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/dao/UsersDaoImpl.java
    incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/utils/DaoHelper.java
    incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/groups/GroupUsersPanel.html
    incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/groups/GroupUsersPanel.java
    incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/labels/LangPanel.java
    incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/users/UsersPanel.html
    incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/users/UsersPanel.java
    incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/data/OmDataProvider.java

Modified: incubator/openmeetings/trunk/singlewebapp/WebContent/openmeetings/css/theme.css
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/WebContent/openmeetings/css/theme.css?rev=1400625&r1=1400624&r2=1400625&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/WebContent/openmeetings/css/theme.css (original)
+++ incubator/openmeetings/trunk/singlewebapp/WebContent/openmeetings/css/theme.css Sun Oct 21 11:24:59 2012
@@ -379,11 +379,11 @@ div.tableWrapper {
 .ui-dialog {
     -moz-box-shadow: 3px 3px 4px #000;
     -webkit-box-shadow: 3px 3px 4px #000;
-    box-shadow: 3px 3px 4px #000;
     /* For IE 8 */
     -ms-filter: "progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color='#000000')";
     /* For IE 5.5 - 7 */
     filter: progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color='#000000');
+	box-shadow: 3px 3px 4px #000;
 }
 
 .info-icon {
@@ -399,4 +399,9 @@ div.tableWrapper {
 
 /* .adminForm select {
     max-width: 200px;
-} */
\ No newline at end of file
+} */
+
+.sort-icon {
+	display: inline-block !important;
+	text-indent: 0px !important;
+}

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/OmDAO.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/OmDAO.java?rev=1400625&r1=1400624&r2=1400625&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/OmDAO.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/OmDAO.java Sun Oct 21 11:24:59 2012
@@ -54,9 +54,10 @@ public interface OmDAO<T extends OmEntit
 	 * @param search - string search criteria to filter entities
 	 * @param start - the start to range to retrieve
 	 * @param count - maximum instance count to retrieve
+	 * @param order - column and sort order
 	 * @return list of instances in the range specified
 	 */
-	List<T> get(String search, int start, int count);
+	List<T> get(String search, int start, int count, String order);
 
 	/**
 	 * Count the number of instances of {@link T}

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/FieldLanguagesValuesDaoImpl.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/FieldLanguagesValuesDaoImpl.java?rev=1400625&r1=1400624&r2=1400625&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/FieldLanguagesValuesDaoImpl.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/FieldLanguagesValuesDaoImpl.java Sun Oct 21 11:24:59 2012
@@ -56,12 +56,12 @@ public class FieldLanguagesValuesDaoImpl
 				Long.class, "1"), first, count);
 	}
 
-	public List<Fieldlanguagesvalues> get(String search, int start, int count) {
+	public List<Fieldlanguagesvalues> get(String search, int start, int count, String sort) {
 		// TODO Auto-generated method stub
 		return null;
 	}
 	
-	public List<Fieldlanguagesvalues> get(Long language_id, String search, int start, int count) {
+	public List<Fieldlanguagesvalues> get(Long language_id, String search, int start, int count, String sort) {
 		// TODO Auto-generated method stub
 		return null;
 	}

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/FieldValueDaoImpl.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/FieldValueDaoImpl.java?rev=1400625&r1=1400624&r2=1400625&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/FieldValueDaoImpl.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/FieldValueDaoImpl.java Sun Oct 21 11:24:59 2012
@@ -65,13 +65,20 @@ public class FieldValueDaoImpl implement
 		return get(getDefaultLanguage(), start, count);
 	}
 
-	public List<Fieldvalues> get(String search, int start, int count) {
-		return get(getDefaultLanguage(), search, start, count);
+	public List<Fieldvalues> get(String search, int start, int count, String sort) {
+		return get(getDefaultLanguage(), search, start, count, sort);
 	}
 	
-	public List<Fieldvalues> get(Long language_id, String search, int start, int count) {
-		String sql = DaoHelper.getSearchQuery("Fieldlanguagesvalues", "flv", search, true, false, searchFields)
-				+ " AND flv.fieldvalues.deleted = false AND flv.language_id = :lang";
+	public List<Fieldvalues> get(Long language_id, String search, int start, int count, String sort) {
+		String sql = DaoHelper.getSearchQuery(
+				"Fieldlanguagesvalues"
+				, "flv"
+				, search
+				, true
+				, false
+				, "flv.fieldvalues.deleted = false AND flv.language_id = :lang"
+				, sort
+				, searchFields);
 		TypedQuery<Fieldlanguagesvalues> q = em.createQuery(sql, Fieldlanguagesvalues.class);
 		q.setParameter("lang", language_id);
 		q.setFirstResult(start);
@@ -117,8 +124,15 @@ public class FieldValueDaoImpl implement
 	}
 	
 	public long count(Long language_id, String search) {
-		String sql = DaoHelper.getSearchQuery("Fieldlanguagesvalues", "flv", search, true, true, searchFields)
-				+ " AND flv.fieldvalues.deleted = false AND flv.language_id = :lang";
+		String sql = DaoHelper.getSearchQuery(
+				"Fieldlanguagesvalues"
+				, "flv"
+				, search
+				, true
+				, true
+				, "flv.fieldvalues.deleted = false AND flv.language_id = :lang"
+				, null
+				, searchFields);
 		TypedQuery<Long> q = em.createQuery(sql, Long.class);
 		q.setParameter("lang", language_id);
 		return q.getSingleResult();

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/ConfigurationDaoImpl.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/ConfigurationDaoImpl.java?rev=1400625&r1=1400624&r2=1400625&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/ConfigurationDaoImpl.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/ConfigurationDaoImpl.java Sun Oct 21 11:24:59 2012
@@ -351,8 +351,8 @@ public class ConfigurationDaoImpl implem
 		return q.getResultList();
 	}
 
-	public List<Configuration> get(String search, int start, int count) {
-		TypedQuery<Configuration> q = em.createQuery(DaoHelper.getSearchQuery("Configuration", "c", search, true, false, searchFields), Configuration.class);
+	public List<Configuration> get(String search, int start, int count, String sort) {
+		TypedQuery<Configuration> q = em.createQuery(DaoHelper.getSearchQuery("Configuration", "c", search, true, false, sort, searchFields), Configuration.class);
 		q.setFirstResult(start);
 		q.setMaxResults(count);
 		return q.getResultList();
@@ -363,7 +363,7 @@ public class ConfigurationDaoImpl implem
 	}
 
 	public long count(String search) {
-		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Configuration", "c", search, true, true, searchFields), Long.class);
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Configuration", "c", search, true, true, null, searchFields), Long.class);
 		return q.getSingleResult();
 	}
 	

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/LdapConfigDaoImpl.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/LdapConfigDaoImpl.java?rev=1400625&r1=1400624&r2=1400625&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/LdapConfigDaoImpl.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/LdapConfigDaoImpl.java Sun Oct 21 11:24:59 2012
@@ -289,8 +289,8 @@ public class LdapConfigDaoImpl implement
 		return q.getResultList();
 	}
 
-	public List<LdapConfig> get(String search, int start, int count) {
-		TypedQuery<LdapConfig> q = em.createQuery(DaoHelper.getSearchQuery("LdapConfig", "lc", search, true, false, searchFields), LdapConfig.class);
+	public List<LdapConfig> get(String search, int start, int count, String sort) {
+		TypedQuery<LdapConfig> q = em.createQuery(DaoHelper.getSearchQuery("LdapConfig", "lc", search, true, false, sort, searchFields), LdapConfig.class);
 		q.setFirstResult(start);
 		q.setMaxResults(count);
 		return q.getResultList();
@@ -301,7 +301,7 @@ public class LdapConfigDaoImpl implement
 	}
 
 	public long count(String search) {
-		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("LdapConfig", "lc", search, true, true, searchFields), Long.class);
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("LdapConfig", "lc", search, true, true, null, searchFields), Long.class);
 		return q.getSingleResult();
 	}
 	

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/ServerDaoImpl.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/ServerDaoImpl.java?rev=1400625&r1=1400624&r2=1400625&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/ServerDaoImpl.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/ServerDaoImpl.java Sun Oct 21 11:24:59 2012
@@ -83,8 +83,8 @@ public class ServerDaoImpl implements Om
 		return q.getResultList();
 	}
 	
-	public List<Server> get(String search, int start, int count) {
-		TypedQuery<Server> q = em.createQuery(DaoHelper.getSearchQuery("Server", "s", search, true, false, searchFields), Server.class);
+	public List<Server> get(String search, int start, int count, String order) {
+		TypedQuery<Server> q = em.createQuery(DaoHelper.getSearchQuery("Server", "s", search, true, false, order, searchFields), Server.class);
 		q.setFirstResult(start);
 		q.setMaxResults(count);
 		return q.getResultList();
@@ -103,7 +103,7 @@ public class ServerDaoImpl implements Om
 	}
 
 	public long count(String search) {
-		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Server", "s", search, true, true, searchFields), Long.class);
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Server", "s", search, true, true, null, searchFields), Long.class);
 		return q.getSingleResult();
 	}
 	

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/RoomDAO.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/RoomDAO.java?rev=1400625&r1=1400624&r2=1400625&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/RoomDAO.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/RoomDAO.java Sun Oct 21 11:24:59 2012
@@ -59,8 +59,8 @@ public class RoomDAO implements OmDAO<Ro
 		return q.getResultList();
 	}
 
-	public List<Rooms> get(String search, int start, int count) {
-		TypedQuery<Rooms> q = em.createQuery(DaoHelper.getSearchQuery("Rooms", "r", search, true, false, searchFields), Rooms.class);
+	public List<Rooms> get(String search, int start, int count, String sort) {
+		TypedQuery<Rooms> q = em.createQuery(DaoHelper.getSearchQuery("Rooms", "r", search, true, false, sort, searchFields), Rooms.class);
 		q.setFirstResult(start);
 		q.setMaxResults(count);
 		return q.getResultList();
@@ -72,7 +72,7 @@ public class RoomDAO implements OmDAO<Ro
 	}
 
 	public long count(String search) {
-		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Rooms", "r", search, true, true, searchFields), Long.class);
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Rooms", "r", search, true, true, null, searchFields), Long.class);
 		return q.getSingleResult();
 	}
 

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/Usermanagement.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/Usermanagement.java?rev=1400625&r1=1400624&r2=1400625&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/Usermanagement.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/Usermanagement.java Sun Oct 21 11:24:59 2012
@@ -172,17 +172,16 @@ public class Usermanagement {
 			sresult.setObjectName(Users.class.getName());
 			sresult.setRecords(usersDao.count(search));
 
-			String hql = DaoHelper.getSearchQuery("Users", "u", search, true, false, UsersDaoImpl.searchFields);
-			hql += " ";
+			String sort = null;
 			if (orderby != null && orderby.length() > 0) {
-				hql += "ORDER BY " + orderby;
+				sort = orderby;
 			}
-
 			if (asc) {
-				hql += " ASC ";
+				sort += " ASC ";
 			} else {
-				hql += " DESC ";
+				sort += " DESC ";
 			}
+			String hql = DaoHelper.getSearchQuery("Users", "u", search, true, false, sort, UsersDaoImpl.searchFields);
 
 			log.debug("Show HQL: " + hql);
 

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/dao/OrganisationDAO.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/dao/OrganisationDAO.java?rev=1400625&r1=1400624&r2=1400625&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/dao/OrganisationDAO.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/dao/OrganisationDAO.java Sun Oct 21 11:24:59 2012
@@ -57,8 +57,8 @@ public class OrganisationDAO implements 
 		return q.getResultList();
 	}
 
-	public List<Organisation> get(String search, int start, int count) {
-		TypedQuery<Organisation> q = em.createQuery(DaoHelper.getSearchQuery("Organisation", "o", search, true, false, searchFields), Organisation.class);
+	public List<Organisation> get(String search, int start, int count, String sort) {
+		TypedQuery<Organisation> q = em.createQuery(DaoHelper.getSearchQuery("Organisation", "o", search, true, false, sort, searchFields), Organisation.class);
 		q.setFirstResult(start);
 		q.setMaxResults(count);
 		return q.getResultList();
@@ -70,7 +70,7 @@ public class OrganisationDAO implements 
 	}
 
 	public long count(String search) {
-		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Organisation", "o", search, true, true, searchFields), Long.class);
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Organisation", "o", search, true, true, null, searchFields), Long.class);
 		return q.getSingleResult();
 	}
 	

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/dao/OrganisationUserDAO.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/dao/OrganisationUserDAO.java?rev=1400625&r1=1400624&r2=1400625&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/dao/OrganisationUserDAO.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/dao/OrganisationUserDAO.java Sun Oct 21 11:24:59 2012
@@ -49,12 +49,12 @@ public class OrganisationUserDAO impleme
 		throw new RuntimeException("Should not be used");
 	}
 
-	public List<Organisation_Users> get(String search, int start, int count) {
+	public List<Organisation_Users> get(String search, int start, int count, String sort) {
 		throw new RuntimeException("Should not be used");
 	}
 	
-	public List<Organisation_Users> get(long orgId, String search, int start, int count) {
-		TypedQuery<Organisation_Users> q = em.createQuery(DaoHelper.getSearchQuery("Organisation_Users", "ou", search, false, false, searchFields), Organisation_Users.class);
+	public List<Organisation_Users> get(long orgId, String search, int start, int count, String sort) {
+		TypedQuery<Organisation_Users> q = em.createQuery(DaoHelper.getSearchQuery("Organisation_Users", "ou", search, false, false, sort, searchFields), Organisation_Users.class);
 		q.setFirstResult(start);
 		q.setMaxResults(count);
 		return q.getResultList();
@@ -87,7 +87,7 @@ public class OrganisationUserDAO impleme
 	}
 	
 	public long count(long orgId, String search) {
-		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Organisation_Users", "ou", search, false, true, searchFields), Long.class);
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Organisation_Users", "ou", search, false, true, null, searchFields), Long.class);
 		return q.getSingleResult();
 	}
 	

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/dao/UsersDaoImpl.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/dao/UsersDaoImpl.java?rev=1400625&r1=1400624&r2=1400625&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/dao/UsersDaoImpl.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/dao/UsersDaoImpl.java Sun Oct 21 11:24:59 2012
@@ -113,8 +113,8 @@ public class UsersDaoImpl implements OmD
 		return q.getResultList();
 	}
 
-	public List<Users> get(String search, int start, int count) {
-		TypedQuery<Users> q = em.createQuery(DaoHelper.getSearchQuery("Users", "u", search, true, false, searchFields), Users.class);
+	public List<Users> get(String search, int start, int count, String sort) {
+		TypedQuery<Users> q = em.createQuery(DaoHelper.getSearchQuery("Users", "u", search, true, false, sort, searchFields), Users.class);
 		q.setFirstResult(start);
 		q.setMaxResults(count);
 		return q.getResultList();
@@ -132,12 +132,12 @@ public class UsersDaoImpl implements OmD
 	}
 
 	public long count(String search) {
-		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Users", "u", search, true, true, searchFields), Long.class);
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Users", "u", search, true, true, null, searchFields), Long.class);
 		return q.getSingleResult();
 	}
 	
 	public List<Users> get(String search) {
-		TypedQuery<Users> q = em.createQuery(DaoHelper.getSearchQuery("Users", "u", search, true, false, searchFields), Users.class);
+		TypedQuery<Users> q = em.createQuery(DaoHelper.getSearchQuery("Users", "u", search, true, false, null, searchFields), Users.class);
 		return q.getResultList();
 	}
 

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/utils/DaoHelper.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/utils/DaoHelper.java?rev=1400625&r1=1400624&r2=1400625&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/utils/DaoHelper.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/utils/DaoHelper.java Sun Oct 21 11:24:59 2012
@@ -22,7 +22,10 @@ import org.apache.commons.lang.StringUti
 
 public class DaoHelper {
 
-	public static String getSearchQuery(String table, String alias, String search, boolean filterDeleted, boolean count, String... fields) {
+	public static String getSearchQuery(String table, String alias, String search, boolean filterDeleted, boolean count, String sort, String... fields) {
+		return getSearchQuery(table, alias, search, filterDeleted, count, null, sort, fields);
+	}
+	public static String getSearchQuery(String table, String alias, String search, boolean filterDeleted, boolean count, String additionalWhere, String sort, String... fields) {
 		StringBuilder sb = new StringBuilder("SELECT ");
 		if (count) {
 			sb.append("COUNT(").append(alias).append(")");
@@ -38,12 +41,25 @@ public class DaoHelper {
 		StringBuilder where = DaoHelper.getWhereClause(search, alias, fields);
 		if (where.length() > 0) {
 			if (!whereAdded) {
+				whereAdded = true;
 				sb.append(" WHERE ");
 			} else {
 				sb.append("AND ");
 			}
 			sb.append(where);
 		}
+		if (additionalWhere != null && !additionalWhere.trim().isEmpty()) {
+			if (!whereAdded) {
+				whereAdded = true;
+				sb.append(" WHERE ");
+			} else {
+				sb.append("AND ");
+			}
+			sb.append(additionalWhere);
+		}
+		if (sort != null && !sort.trim().isEmpty()) {
+			sb.append(" ORDER BY ").append(alias).append(".").append(sort);
+		}
 		return sb.toString();
 	}
 	

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/groups/GroupUsersPanel.html
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/groups/GroupUsersPanel.html?rev=1400625&r1=1400624&r2=1400625&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/groups/GroupUsersPanel.html (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/groups/GroupUsersPanel.html Sun Oct 21 11:24:59 2012
@@ -29,7 +29,7 @@
                     <th style="width: 34px"><wicket:ommessage key="275" /></th>
                 </tr>   
             </table>
-            <div class="tableWrapper" style="width: 420px;">
+            <div class="tableWrapper" style="width: 420px; height: 420px;">
                 <table class="adminListTable" style="min-width: 400px; max-width: 400px">  
                     <tbody>   
                         <tr wicket:id="userList">

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/groups/GroupUsersPanel.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/groups/GroupUsersPanel.java?rev=1400625&r1=1400624&r2=1400625&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/groups/GroupUsersPanel.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/groups/GroupUsersPanel.java Sun Oct 21 11:24:59 2012
@@ -60,9 +60,9 @@ public class GroupUsersPanel extends Pan
 			}
 			
 			public java.util.Iterator<? extends Organisation_Users> iterator(long first, long count) {
-				return (search == null
+				return (search == null && getSort() == null
 						? Application.getBean(OrganisationUserDAO.class).get(organisationId, (int)first, (int)count)
-						: Application.getBean(OrganisationUserDAO.class).get(organisationId, search, (int)first, (int)count)).iterator();
+						: Application.getBean(OrganisationUserDAO.class).get(organisationId, search, (int)first, (int)count, getSortStr())).iterator();
 			}
 		}) {
 			private static final long serialVersionUID = 8715559628755439596L;

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/labels/LangPanel.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/labels/LangPanel.java?rev=1400625&r1=1400624&r2=1400625&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/labels/LangPanel.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/labels/LangPanel.java Sun Oct 21 11:24:59 2012
@@ -81,9 +81,9 @@ public class LangPanel extends AdminPane
 					}
 					
 					public Iterator<? extends Fieldvalues> iterator(long first, long count) {
-						return (search == null
+						return (search == null && getSort() == null
 								? Application.getBean(FieldValueDaoImpl.class).get(language.getLanguage_id(), (int)first, (int)count)
-								: Application.getBean(FieldValueDaoImpl.class).get(language.getLanguage_id(), search, (int)first, (int)count)).iterator();
+								: Application.getBean(FieldValueDaoImpl.class).get(language.getLanguage_id(), search, (int)first, (int)count, getSortStr())).iterator();
 					}
 				}) {
 			private static final long serialVersionUID = 8715559628755439596L;

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/users/UsersPanel.html
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/users/UsersPanel.html?rev=1400625&r1=1400624&r2=1400625&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/users/UsersPanel.html (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/users/UsersPanel.html Sun Oct 21 11:24:59 2012
@@ -36,10 +36,10 @@
 				<table class="adminListTable">
 					<thead>
 						<tr>
-							<th class="four_column_layout_column1"><wicket:ommessage key="146" /></th>
-							<th class="four_column_layout_column2"><wicket:ommessage key="147" /></th>
-							<th class="four_column_layout_column3"><wicket:ommessage key="148" /></th>
-							<th class="four_column_layout_column4"><wicket:ommessage key="149" /></th>
+							<th class="four_column_layout_column1"><span wicket:id="orderById"></span><wicket:ommessage key="146" /></th>
+							<th class="four_column_layout_column2"><span wicket:id="orderByLogin"></span><wicket:ommessage key="147" /></th>
+							<th class="four_column_layout_column3"><span wicket:id="orderByFirstName"></span><wicket:ommessage key="148" /></th>
+							<th class="four_column_layout_column4"><span wicket:id="orderByLastName"></span><wicket:ommessage key="149" /></th>
 						</tr>	
 					</thead>
 				</table>

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/users/UsersPanel.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/users/UsersPanel.java?rev=1400625&r1=1400624&r2=1400625&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/users/UsersPanel.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/users/UsersPanel.java Sun Oct 21 11:24:59 2012
@@ -25,7 +25,9 @@ import org.apache.openmeetings.web.app.W
 import org.apache.openmeetings.web.components.admin.AdminPanel;
 import org.apache.openmeetings.web.components.admin.OmDataView;
 import org.apache.openmeetings.web.components.admin.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.DataViewContainer;
 import org.apache.openmeetings.web.data.OmDataProvider;
+import org.apache.openmeetings.web.data.OmOrderByBorder;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -44,11 +46,12 @@ public class UsersPanel extends AdminPan
 
 	private UserForm form;
 
+	@SuppressWarnings("unchecked")
 	public UsersPanel(String id) {
 		super(id);
 
-		OmDataView<Users> dataView = new OmDataView<Users>("userList",
-				new OmDataProvider<Users>(UsersDaoImpl.class)) {
+		final OmDataView<Users> dataView = new OmDataView<Users>("userList"
+				, new OmDataProvider<Users>(UsersDaoImpl.class)) {
 			private static final long serialVersionUID = 8715559628755439596L;
 
 			@Override
@@ -76,6 +79,12 @@ public class UsersPanel extends AdminPan
 		final WebMarkupContainer listContainer = new WebMarkupContainer(
 				"listContainer");
 		add(listContainer.add(dataView).setOutputMarkupId(true));
+		DataViewContainer<Users> container = new DataViewContainer<Users>(listContainer, dataView);
+		container.setLinks(new OmOrderByBorder<Users>("orderById", "user_id", container)
+				, new OmOrderByBorder<Users>("orderByLogin", "login", container)
+				, new OmOrderByBorder<Users>("orderByFirstName", "firstname", container)
+				, new OmOrderByBorder<Users>("orderByLastName", "lastname", container));
+		add(container.orderLinks);
 		add(new PagedEntityListPanel("navigator", dataView) {
 			private static final long serialVersionUID = 5097048616003411362L;
 

Added: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/data/DataViewContainer.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/data/DataViewContainer.java?rev=1400625&view=auto
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/data/DataViewContainer.java (added)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/data/DataViewContainer.java Sun Oct 21 11:24:59 2012
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.data;
+
+import org.apache.openmeetings.persistence.beans.OmEntity;
+import org.apache.openmeetings.web.components.admin.OmDataView;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+
+public class DataViewContainer<T extends OmEntity> {
+	public WebMarkupContainer container;
+	public OmDataView<T> view;
+	public OmOrderByBorder<T>[] orderLinks;
+	
+	public DataViewContainer(WebMarkupContainer container, OmDataView<T> view) {
+		this.container = container;
+		this.view = view;
+	}
+	
+	public void setLinks(OmOrderByBorder<T>... orderLinks) {
+		this.orderLinks = orderLinks;
+	}
+}

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/data/OmDataProvider.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/data/OmDataProvider.java?rev=1400625&r1=1400624&r2=1400625&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/data/OmDataProvider.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/data/OmDataProvider.java Sun Oct 21 11:24:59 2012
@@ -23,11 +23,11 @@ import java.util.Iterator;
 import org.apache.openmeetings.data.OmDAO;
 import org.apache.openmeetings.persistence.beans.OmEntity;
 import org.apache.openmeetings.web.app.Application;
-import org.apache.wicket.markup.repeater.data.IDataProvider;
+import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 
-public class OmDataProvider<T extends OmEntity> implements IDataProvider<T> {
+public class OmDataProvider<T extends OmEntity> extends SortableDataProvider<T, String> {
 	private static final long serialVersionUID = 4325721185888905204L;
 	protected Class<? extends OmDAO<T>> clazz;
 	protected String search = null;
@@ -40,10 +40,18 @@ public class OmDataProvider<T extends Om
 		// does nothing
 	}
 
+	protected String getSortStr() {
+		String result = null;
+		if (getSort() != null) {
+			result = getSort().getProperty() + " " + (getSort().isAscending() ? "ASC" : "DESC");
+		}
+		return result;
+	}
+	
 	public Iterator<? extends T> iterator(long first, long count) {
-		return (search == null
+		return (search == null && getSort() == null
 			? Application.getBean(clazz).get((int)first, (int)count)
-			: Application.getBean(clazz).get(search, (int)first, (int)count)).iterator();
+			: Application.getBean(clazz).get(search, (int)first, (int)count, getSortStr())).iterator();
 	}
 
 	public long size() {

Added: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/data/OmOrderByBorder.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/data/OmOrderByBorder.java?rev=1400625&view=auto
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/data/OmOrderByBorder.java (added)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/data/OmOrderByBorder.java Sun Oct 21 11:24:59 2012
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.data;
+
+import org.apache.openmeetings.persistence.beans.OmEntity;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.ajax.markup.html.repeater.data.sort.AjaxFallbackOrderByBorder;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByLink.CssProvider;
+
+public class OmOrderByBorder<T extends OmEntity> extends AjaxFallbackOrderByBorder<String> {
+	private static final long serialVersionUID = -867341109912297431L;
+	private DataViewContainer<T> container;
+	
+	public OmOrderByBorder(final String id, final String property, DataViewContainer<T> container) {
+		super(id, property, container.view.getDataProvider(), new OmCssProvider());
+		this.container = container;
+		setOutputMarkupId(true);
+	}
+	
+    protected void onSortChanged() {
+    	container.view.setCurrentPage(0);
+    }
+
+	@Override
+	protected void onAjaxClick(AjaxRequestTarget target) {
+		target.add(container.container);
+		target.add(container.orderLinks);
+	}
+	
+	static class OmCssProvider extends CssProvider<String> {
+		private static final long serialVersionUID = 60178231250586887L;
+
+		public OmCssProvider() {
+			super("ui-icon ui-icon-carat-1-n sort-icon", "ui-icon ui-icon-carat-1-s sort-icon", "ui-icon ui-icon-carat-2-n-s sort-icon");
+		}
+	}
+}