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@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@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@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)) {