modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/common/paging/PagedListDataModel.java
| 4 -
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/legacy/WebUserPreferences.java
| 10 +++-
modules/enterprise/gui/portal-war/src/main/webapp/rhq/inventory/browseGroups.xhtml
| 8 +--
modules/enterprise/gui/portal-war/src/main/webapp/rhq/inventory/browseResources.xhtml
| 12 ++---
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQueryGenerator.java
| 24 +++++++---
5 files changed, 38 insertions(+), 20 deletions(-)
New commits:
commit e2e2e300fa0fe5441b962cd7c109e13a2c2f8eb9
Author: Joseph Marques <joseph(a)redhat.com>
Date: Tue Apr 27 16:25:52 2010 -0400
improve debug logging for pagination/sorting issues, so that root cause can more
readily be determined in the future
diff --git
a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/legacy/WebUserPreferences.java
b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/legacy/WebUserPreferences.java
index a939ab4..c0abd7e 100644
---
a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/legacy/WebUserPreferences.java
+++
b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/legacy/WebUserPreferences.java
@@ -693,16 +693,21 @@ public class WebUserPreferences extends SubjectPreferencesBase {
}
public PageControl getPageControl(PageControlView view) {
- return getPageControl(view, 15);
+ PageControl results = getPageControl(view, 15);
+ log.debug("getPageControl(" + view + ") " + results);
+ return results;
}
public PageControl getPageControl(PageControlView view, int defaultPageSize) {
if (view == PageControlView.NONE) {
+ log.debug("getPageControl(" + view + ") ->
PageControl.getUnlimitedInstance()");
return PageControl.getUnlimitedInstance();
}
List<String> pageControlProperties = getPreferenceAsList(view.toString());
+ log.debug("getPageControl(" + view + ") ->
pageControlProperties: " + pageControlProperties);
if (pageControlProperties.size() == 0) {
+ log.debug("getPageControl(" + view + ") ->
getDefaultPageControl for empty properties");
PageControl defaultControl = getDefaultPageControl(view, defaultPageSize);
return defaultControl;
} else {
@@ -722,6 +727,7 @@ public class WebUserPreferences extends SubjectPreferencesBase {
i += 2;
}
+ log.debug("getPageControl(" + view + ") -> " +
pageControl);
if (view.isUnlimited() && pageSize != PageControl.SIZE_UNLIMITED)
{
// make sure pageSize for an unlimited view is actually unlimited
@@ -739,6 +745,7 @@ public class WebUserPreferences extends SubjectPreferencesBase {
* persist and load just fine because the logic in this method and its
counterpart
* setPageControl are kept in sync
*/
+ log.debug("getPageControl(" + view + ") ->
getDefaultPageControl for exception: " + t.getMessage());
pageControl = getDefaultPageControl(view, defaultPageSize);
}
return pageControl;
@@ -770,6 +777,7 @@ public class WebUserPreferences extends SubjectPreferencesBase {
pageControlProperties.add(field.getOrdering().toString());
pageControlProperties.add(field.getField());
}
+ System.out.println("setPageControl(" + view + ", " +
pageControl + ")");
setPreference(view.toString(), pageControlProperties);
}
commit 85f04f40d6ca346279b916804e3c23a486ba98a8
Author: Joseph Marques <joseph(a)redhat.com>
Date: Tue Apr 27 16:25:19 2010 -0400
do now swallow the error message when their appears to be an error handling
PageControl data
diff --git
a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/common/paging/PagedListDataModel.java
b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/common/paging/PagedListDataModel.java
index adbc7cf..ca3f353 100644
---
a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/common/paging/PagedListDataModel.java
+++
b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/common/paging/PagedListDataModel.java
@@ -340,9 +340,7 @@ public abstract class PagedListDataModel<T> extends DataModel {
* ordering (though the underlying SLSB may add a default ordering
downstream).
*/
resetToDefaults(pc);
- if (log.isTraceEnabled()) {
- log.trace(pageControlView + ": Received error[" +
t.getMessage() + "], resetting to " + pc);
- }
+ log.error(pageControlView + ": Received error[" + t.getMessage() +
"], resetting to " + pc);
tryQueryAgain = true;
}
commit d568a683944cbb81c717589f7c8c1a341a0ae433
Author: Joseph Marques <joseph(a)redhat.com>
Date: Tue Apr 27 16:24:38 2010 -0400
BZ-584149 fix for broken sorting on the inventory browser (resources and groups)
* CriteriaQueryGenerator now automatically prepends the alias to the ordering fields
when building the query
* needed to remove explicit alias identifier from the sortableColumnHeader
definitions
* also, updated CriteriaQueryGenerator to support sorting by column ordinals (required
by group browser's availability columns)
diff --git
a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/inventory/browseGroups.xhtml
b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/inventory/browseGroups.xhtml
index 65be544..70d9821 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/inventory/browseGroups.xhtml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/inventory/browseGroups.xhtml
@@ -144,7 +144,7 @@
<rich:column>
<f:facet name="header">
- <onc:sortableColumnHeader sort="rg.name">
+ <onc:sortableColumnHeader sort="name">
<h:outputText styleClass="headerText"
value="Name" />
</onc:sortableColumnHeader>
</f:facet>
@@ -157,7 +157,7 @@
<rich:column>
<f:facet name="header">
- <onc:sortableColumnHeader
sort="rg.resourceType.name">
+ <onc:sortableColumnHeader sort="resourceType.name">
<h:outputText styleClass="headerText"
value="Group Type" />
</onc:sortableColumnHeader>
</f:facet>
@@ -167,7 +167,7 @@
<rich:column>
<f:facet name="header">
- <onc:sortableColumnHeader
sort="rg.resourceType.plugin">
+ <onc:sortableColumnHeader
sort="resourceType.plugin">
<h:outputText styleClass="headerText"
value="Plugin" />
</onc:sortableColumnHeader>
</f:facet>
@@ -177,7 +177,7 @@
<rich:column>
<f:facet name="header">
- <onc:sortableColumnHeader sort="rg.description">
+ <onc:sortableColumnHeader sort="description">
<h:outputText styleClass="headerText"
value="Description" />
</onc:sortableColumnHeader>
</f:facet>
diff --git
a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/inventory/browseResources.xhtml
b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/inventory/browseResources.xhtml
index 90d45c0..3a4c7ea 100644
---
a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/inventory/browseResources.xhtml
+++
b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/inventory/browseResources.xhtml
@@ -157,7 +157,7 @@
<rich:column>
<f:facet name="header">
- <onc:sortableColumnHeader sort="r.name">
+ <onc:sortableColumnHeader sort="name">
<h:outputText styleClass="headerText"
value="Name" />
</onc:sortableColumnHeader>
</f:facet>
@@ -178,7 +178,7 @@
<rich:column>
<f:facet name="header">
- <onc:sortableColumnHeader
sort="r.resourceType.category">
+ <onc:sortableColumnHeader
sort="resourceType.category">
<h:outputText styleClass="headerText"
value="Category" />
</onc:sortableColumnHeader>
</f:facet>
@@ -188,7 +188,7 @@
<rich:column>
<f:facet name="header">
- <onc:sortableColumnHeader
sort="r.resourceType.name">
+ <onc:sortableColumnHeader sort="resourceType.name">
<h:outputText styleClass="headerText"
value="Type" />
</onc:sortableColumnHeader>
</f:facet>
@@ -198,7 +198,7 @@
<rich:column>
<f:facet name="header">
- <onc:sortableColumnHeader
sort="r.resourceType.plugin">
+ <onc:sortableColumnHeader
sort="resourceType.plugin">
<h:outputText styleClass="headerText"
value="Plugin" />
</onc:sortableColumnHeader>
</f:facet>
@@ -208,7 +208,7 @@
<rich:column>
<f:facet name="header">
- <onc:sortableColumnHeader sort="r.description">
+ <onc:sortableColumnHeader sort="description">
<h:outputText styleClass="headerText"
value="Description" />
</onc:sortableColumnHeader>
</f:facet>
@@ -218,7 +218,7 @@
<rich:column>
<f:facet name="header">
- <onc:sortableColumnHeader
sort="r.currentAvailability.availabilityType">
+ <onc:sortableColumnHeader
sort="currentAvailability.availabilityType">
<h:outputText styleClass="headerText"
value="Availability" />
</onc:sortableColumnHeader>
</f:facet>
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQueryGenerator.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQueryGenerator.java
index ff71760..2272f12 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQueryGenerator.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQueryGenerator.java
@@ -302,15 +302,15 @@ public final class CriteriaQueryGenerator {
String fieldName = orderingField.getField();
String override = criteria.getJPQLSortOverride(fieldName);
- if (override == null) {
- override = alias + "." + fieldName;
- } else {
- override = alias + "." + override;
- }
+ String suffix = (override == null) ? fieldName : override;
+
+ // if the suffix is numerical, do not prefix the alias
+ // this allows us to sort by column ordinal, which is required for
availability on the group browser
+ String sortFragment = (isNumber(suffix)) ? suffix : (alias +
"." + suffix);
PageOrdering ordering = orderingField.getOrdering();
- results.append(override).append(' ').append(ordering);
+ results.append(sortFragment).append(' ').append(ordering);
}
}
results.append(NL);
@@ -319,6 +319,18 @@ public final class CriteriaQueryGenerator {
return results.toString();
}
+ private boolean isNumber(String input) {
+ if (input == null) {
+ return false;
+ }
+ for (char next : input.toCharArray()) {
+ if (Character.isDigit(next) == false) {
+ return false;
+ }
+ }
+ return true;
+ }
+
public List<String> getFetchFields(Criteria criteria) {
List<String> results = new ArrayList<String>();
for (Field fetchField : getFields(criteria, Criteria.Type.FETCH)) {