modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/ReportExporter.java
| 15 -
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/inventory/InventorySummaryReportTable.java
| 18 -
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/StringUtility.java
| 35 ++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/reporting/DriftComplianceHandler.java
| 21 -
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/reporting/DriftComplianceLocal.java
| 6
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/reporting/InventorySummaryHandler.java
| 137 ++++++----
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/reporting/InventorySummaryLocal.java
| 6
7 files changed, 157 insertions(+), 81 deletions(-)
New commits:
commit 7289e4201d26a649df9643aa5580bcbf36f167b1
Author: John Sanda <jsanda(a)redhat.com>
Date: Fri Mar 30 12:00:24 2012 -0400
[BZ 800453] Refactoring logic for including details
The requirements for the inventory summary and drift compliance reports
have changed a bit. This commit makes those changes. All of the resource
type rows are always included now. If one or more resource type ids are
specified, then the resource details for the types will be included in
the report as well. If the showAllDetails param is true, then all
resource details for all types will be included.
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/ReportExporter.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/ReportExporter.java
index 4ed3c5c..d0ff226 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/ReportExporter.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/ReportExporter.java
@@ -20,13 +20,15 @@
*/
package org.rhq.enterprise.gui.coregui.client.components;
+import java.util.Set;
+
import com.google.gwt.core.client.GWT;
import com.google.gwt.http.client.URL;
import com.google.gwt.user.client.Window;
+
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.Messages;
-
-import java.util.Set;
+import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
/**
* Exporter for building urls to reports (csv).
@@ -124,9 +126,12 @@ public class ReportExporter {
public String determineUrl() {
StringBuilder queryString = new StringBuilder();
-// if (showAllDetail) {
-//
queryString.append("details=").append(form.getValueAsString(DETAILS_FIELD));
-// }
+ if (showAllDetail) {
+ queryString.append("showAllDetails=").append("true");
+ } else if (!resourceTypeIds.isEmpty()) {
+
queryString.append("resourceTypeId=").append(StringUtility.toString(resourceTypeIds));
+ }
+
if(!isEmpty(operationRequestStatuses)){
StringBuilder operationRequestStatusBuffer = new StringBuilder();
for (String operationRequestStatus : operationRequestStatuses) {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/inventory/InventorySummaryReportTable.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/inventory/InventorySummaryReportTable.java
index bbd00de..a2dfa5a 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/inventory/InventorySummaryReportTable.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/inventory/InventorySummaryReportTable.java
@@ -21,6 +21,10 @@
package org.rhq.enterprise.gui.coregui.client.report.inventory;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
import com.smartgwt.client.types.ListGridEditEvent;
import com.smartgwt.client.types.ListGridFieldType;
import com.smartgwt.client.widgets.events.DoubleClickEvent;
@@ -28,7 +32,12 @@ import com.smartgwt.client.widgets.events.DoubleClickHandler;
import com.smartgwt.client.widgets.form.fields.CheckboxItem;
import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
import com.smartgwt.client.widgets.form.fields.events.ChangedHandler;
-import com.smartgwt.client.widgets.grid.*;
+import com.smartgwt.client.widgets.grid.CellFormatter;
+import com.smartgwt.client.widgets.grid.HoverCustomizer;
+import com.smartgwt.client.widgets.grid.ListGrid;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+
import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.ImageManager;
@@ -37,10 +46,6 @@ import org.rhq.enterprise.gui.coregui.client.components.table.Table;
import org.rhq.enterprise.gui.coregui.client.components.table.TableAction;
import org.rhq.enterprise.gui.coregui.client.report.ExportChangeHandler;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
/**
* @author jsanda
*/
@@ -188,7 +193,8 @@ public class InventorySummaryReportTable extends
Table<InventorySummaryDataSourc
@Override
public void executeAction(ListGridRecord[] selection, Object actionValue) {
- ReportExporter exportModalWindow =
ReportExporter.createExporterForInventorySummary(getReportNameForDownloadURL(), exportAll,
exportChangeHandler.getResourceTypeIds());
+ ReportExporter exportModalWindow =
ReportExporter.createExporterForInventorySummary(
+ getReportNameForDownloadURL(), exportAll,
exportChangeHandler.getResourceTypeIds());
exportModalWindow.export();
refreshTableInfo();
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/reporting/DriftComplianceHandler.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/reporting/DriftComplianceHandler.java
index e795cf5..23ce85c 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/reporting/DriftComplianceHandler.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/reporting/DriftComplianceHandler.java
@@ -18,9 +18,7 @@
*/
package org.rhq.enterprise.server.rest.reporting;
-import java.util.Collections;
import java.util.List;
-import java.util.Map;
import javax.ejb.Stateless;
import javax.interceptor.Interceptors;
@@ -41,12 +39,9 @@ import org.rhq.enterprise.server.rest.SetCallerInterceptor;
public class DriftComplianceHandler extends InventorySummaryHandler implements
DriftComplianceLocal {
@Override
- public StreamingOutput generateReport(UriInfo uriInfo, Request request, HttpHeaders
headers, boolean includeDetails,
- List<Integer> resourceTypeIds) {
- // We pass an empty list here for the resourceTypeIds param because this report
- // not support the typeId query para.
- List<Integer> ids = Collections.emptyList();
- return super.generateReport(uriInfo, request, headers, includeDetails, ids);
+ public StreamingOutput generateReport(UriInfo uriInfo, Request request, HttpHeaders
headers, boolean showAllDetails,
+ String resourceTypeIds) {
+ return super.generateReport(uriInfo, request, headers, showAllDetails,
"");
}
@Override
@@ -55,10 +50,9 @@ public class DriftComplianceHandler extends InventorySummaryHandler
implements D
}
@Override
- protected ResourceCriteria getDetailsQueryCriteria(Map <Integer,
ResourceInstallCount> installCounts) {
- ResourceCriteria criteria = super.getDetailsQueryCriteria(installCounts);
+ protected ResourceCriteria getDetailsQueryCriteria(Integer resourceTypeId) {
+ ResourceCriteria criteria = super.getDetailsQueryCriteria(resourceTypeId);
criteria.fetchDriftDefinitions(true);
- criteria.addFilterResourceTypeIds(installCounts.keySet().toArray(new
Integer[installCounts.size()]));
return criteria;
}
@@ -68,6 +62,11 @@ public class DriftComplianceHandler extends InventorySummaryHandler
implements D
}
@Override
+ protected String getDetailsHeader() {
+ return super.getDetailsHeader() + ",In Compliance?";
+ }
+
+ @Override
protected String toCSV(ResourceInstallCount installCount) {
return super.toCSV(installCount) + "," +
installCount.isInCompliance();
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/reporting/DriftComplianceLocal.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/reporting/DriftComplianceLocal.java
index b6ea4cc..013e768 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/reporting/DriftComplianceLocal.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/reporting/DriftComplianceLocal.java
@@ -18,8 +18,6 @@
*/
package org.rhq.enterprise.server.rest.reporting;
-import java.util.List;
-
import javax.ejb.Local;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
@@ -43,7 +41,7 @@ public interface DriftComplianceLocal {
@Context UriInfo uriInfo,
@Context Request request,
@Context HttpHeaders headers,
- @QueryParam("details") @DefaultValue("false") boolean
includeDetails,
- @QueryParam("resourceTypes") List<Integer> resourceTypeIds);
+ @QueryParam("showAllDetails") @DefaultValue("false") boolean
includeDetails,
+ @QueryParam("resourceTypeId") String resourceTypeId);
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/reporting/InventorySummaryHandler.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/reporting/InventorySummaryHandler.java
index 55ee582..1531b0c 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/reporting/InventorySummaryHandler.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/reporting/InventorySummaryHandler.java
@@ -18,6 +18,28 @@
*/
package org.rhq.enterprise.server.rest.reporting;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.interceptor.Interceptors;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Request;
+import javax.ws.rs.core.StreamingOutput;
+import javax.ws.rs.core.UriInfo;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+
import org.rhq.core.domain.criteria.ResourceCriteria;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.composite.ResourceInstallCount;
@@ -28,18 +50,6 @@ import org.rhq.enterprise.server.rest.SetCallerInterceptor;
import org.rhq.enterprise.server.util.CriteriaQuery;
import org.rhq.enterprise.server.util.CriteriaQueryExecutor;
-import javax.ejb.EJB;
-import javax.ejb.Stateless;
-import javax.interceptor.Interceptors;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.*;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Marshaller;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.*;
-
import static org.rhq.core.domain.resource.InventoryStatus.COMMITTED;
import static org.rhq.core.domain.util.PageOrdering.ASC;
@@ -51,13 +61,16 @@ public class InventorySummaryHandler extends AbstractRestBean
implements Invento
protected ResourceManagerLocal resourceMgr;
@Override
- public StreamingOutput generateReport(UriInfo uriInfo, Request request, HttpHeaders
headers, boolean includeDetails,
- final List<Integer> resourceTypeIds) {
+ public StreamingOutput generateReport(UriInfo uriInfo, Request request, HttpHeaders
headers,
+ boolean showAllDetails, final String resourceTypeIds) {
final List<ResourceInstallCount> results = getSummaryCounts();
final MediaType mediaType = headers.getAcceptableMediaTypes().get(0);
- if (includeDetails) {
- return new OutputDetailedInventorySummary(results, new
TreeSet<Integer>(resourceTypeIds));
+ if (showAllDetails) {
+ Set<Integer> ids = Collections.emptySet();
+ return new OutputDetailedInventorySummary(results, ids);
+ } else if (resourceTypeIds != null) {
+ return new OutputDetailedInventorySummary(results,
parseIds(resourceTypeIds));
} else {
return new StreamingOutput() {
@Override
@@ -79,20 +92,9 @@ public class InventorySummaryHandler extends AbstractRestBean
implements Invento
}
} else if (mediaType.toString().equals("text/csv")) {
stream.write((getHeader() + "\n").getBytes());
-
- if (resourceTypeIds.isEmpty()) {
- for (ResourceInstallCount installCount : results) {
- String record = toCSV(installCount) + "\n";
- stream.write(record.getBytes());
- }
- } else {
- Set<Integer> ids = new
TreeSet<Integer>(resourceTypeIds);
- for (ResourceInstallCount installCount : results) {
- if (ids.contains(installCount.getTypeId())) {
- String record = toCSV(installCount) +
"\n";
- stream.write(record.getBytes());
- }
- }
+ for (ResourceInstallCount installCount : results) {
+ String record = toCSV(installCount) + "\n";
+ stream.write(record.getBytes());
}
}
}
@@ -100,56 +102,88 @@ public class InventorySummaryHandler extends AbstractRestBean
implements Invento
}
}
+ private Set<Integer> parseIds(String resourceTypeIdParam) {
+ Set<Integer> ids = new TreeSet<Integer>();
+ for (String id : resourceTypeIdParam.split(",")) {
+ ids.add(Integer.parseInt(id));
+ }
+ return ids;
+ }
+
private class OutputDetailedInventorySummary implements StreamingOutput {
// map of counts keyed by resource type id
- private Map<Integer, ResourceInstallCount> installCounts = new
HashMap<Integer, ResourceInstallCount>();
+ private Map<Integer, ResourceInstallCount> installCounts = new
LinkedHashMap<Integer, ResourceInstallCount>();
private Set<Integer> resourceTypeIds;
- public OutputDetailedInventorySummary(List<ResourceInstallCount>
installCountList,
+ public OutputDetailedInventorySummary(List<ResourceInstallCount>
installCounts,
Set<Integer> resourceTypeIds) {
this.resourceTypeIds = resourceTypeIds;
- for (ResourceInstallCount installCount : installCountList) {
- installCounts.put(installCount.getTypeId(), installCount);
+ for (ResourceInstallCount installCount : installCounts) {
+ this.installCounts.put(installCount.getTypeId(), installCount);
}
}
@Override
public void write(OutputStream output) throws IOException,
WebApplicationException {
- final ResourceCriteria criteria = getDetailsQueryCriteria(installCounts);
- if (!resourceTypeIds.isEmpty()) {
- criteria.addFilterResourceTypeIds(resourceTypeIds.toArray(new
Integer[resourceTypeIds.size()]));
- }
+ ResourceCriteria criteria;
+ CriteriaQueryExecutor<Resource, ResourceCriteria> queryExecutor;
+ CriteriaQuery<Resource, ResourceCriteria> query;
+
+ output.write((getHeader() + "," + getDetailsHeader() +
"\n").getBytes());
- CriteriaQueryExecutor<Resource, ResourceCriteria> queryExecutor =
- new CriteriaQueryExecutor<Resource, ResourceCriteria>() {
+ // if there are no resource type ids, that means we fetching everything -
all
+ // details for all types.
+ if (resourceTypeIds.isEmpty()) {
+ criteria = getDetailsQueryCriteria(null);
+ queryExecutor = new CriteriaQueryExecutor<Resource,
ResourceCriteria>() {
@Override
public PageList<Resource> execute(ResourceCriteria criteria) {
return resourceMgr.findResourcesByCriteria(caller, criteria);
}
};
-
- CriteriaQuery<Resource, ResourceCriteria> query =
- new CriteriaQuery<Resource, ResourceCriteria>(criteria,
queryExecutor);
- output.write((getHeader() + "\n").getBytes());
- for (Resource resource : query) {
- ResourceInstallCount installCount =
installCounts.get(resource.getResourceType().getId());
- if (installCount != null) {
+ query = new CriteriaQuery<Resource, ResourceCriteria>(criteria,
queryExecutor);
+ for (Resource resource : query) {
+ ResourceInstallCount installCount =
installCounts.get(resource.getResourceType().getId());
String record = toCSV(installCount) + "," + toCSV(resource)
+ "\n";
output.write(record.getBytes());
}
+ } else {
+ for (ResourceInstallCount installCount : installCounts.values()) {
+ if (resourceTypeIds.contains(installCount.getTypeId())) {
+ criteria = getDetailsQueryCriteria(installCount.getTypeId());
+ queryExecutor = new CriteriaQueryExecutor<Resource,
ResourceCriteria>() {
+ @Override
+ public PageList<Resource> execute(ResourceCriteria
criteria) {
+ return resourceMgr.findResourcesByCriteria(caller,
criteria);
+ }
+ };
+ query = new CriteriaQuery<Resource,
ResourceCriteria>(criteria, queryExecutor);
+ for (Resource resource : query) {
+ String record = toCSV(installCount) + "," +
toCSV(resource) + "\n";
+ output.write(record.getBytes());
+ }
+ } else {
+ String record = toCSV(installCount) + ",,,,,,,\n";
+ output.write(record.getBytes());
+ }
+ }
}
}
}
- protected ResourceCriteria getDetailsQueryCriteria(Map<Integer,
ResourceInstallCount> installCounts) {
+ protected ResourceCriteria getDetailsQueryCriteria(Integer resourceTypeId) {
ResourceCriteria criteria = new ResourceCriteria();
criteria.addFilterInventoryStatus(COMMITTED);
criteria.addSortResourceCategory(ASC);
criteria.addSortPluginName(ASC);
criteria.addSortResourceTypeName(ASC);
+ if (resourceTypeId != null) {
+ criteria.addFilterResourceTypeId(resourceTypeId);
+ }
+
return criteria;
}
@@ -162,6 +196,10 @@ public class InventorySummaryHandler extends AbstractRestBean
implements Invento
return "Resource Type,Plugin,Category,Version,Count";
}
+ protected String getDetailsHeader() {
+ return "Name,Ancestry,Description,Type,Version,Availability";
+ }
+
protected String toCSV(ResourceInstallCount installCount) {
return installCount.getTypeName() + "," + installCount.getTypePlugin()
+ "," +
installCount.getCategory().getDisplayName() + "," +
installCount.getVersion() + "," +
@@ -169,8 +207,9 @@ public class InventorySummaryHandler extends AbstractRestBean
implements Invento
}
protected String toCSV(Resource resource) {
- return resource.getName() + "," +
ReportFormatHelper.parseAncestry(resource.getAncestry()) + "," +
+ return resource.getName() + "," +
ReportHelper.parseAncestry(resource.getAncestry()) + "," +
resource.getDescription() + "," +
resource.getResourceType().getName() + "," + resource.getVersion() +
"," + resource.getCurrentAvailability().getAvailabilityType();
}
+
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/reporting/InventorySummaryLocal.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/reporting/InventorySummaryLocal.java
index b2c7190..882251b 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/reporting/InventorySummaryLocal.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/reporting/InventorySummaryLocal.java
@@ -18,8 +18,6 @@
*/
package org.rhq.enterprise.server.rest.reporting;
-import java.util.List;
-
import javax.ejb.Local;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
@@ -43,7 +41,7 @@ public interface InventorySummaryLocal {
@Context UriInfo uriInfo,
@Context Request request,
@Context HttpHeaders headers,
- @QueryParam("details") @DefaultValue("false") boolean
includeDetails,
- @QueryParam("typeId") List<Integer> resourceTypeIds);
+ @QueryParam("showAllDetails") @DefaultValue("false") boolean
includeDetails,
+ @QueryParam("resourceTypeId") String resourceTypeId);
}
commit c8a13b163d27b2a1f40d6c5b177bda3d7c1fdada
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Mar 29 22:02:18 2012 -0400
[BZ 800453] Adding string util methods for converting query params
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/StringUtility.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/StringUtility.java
index 97cfe47..2959af6 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/StringUtility.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/StringUtility.java
@@ -19,11 +19,12 @@
*/
package org.rhq.enterprise.gui.coregui.client.util;
-import com.google.gwt.safehtml.shared.SimpleHtmlSanitizer;
-
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
+import com.google.gwt.safehtml.shared.SimpleHtmlSanitizer;
+
/**
* A collection of utility methods for working with Strings.
*
@@ -52,6 +53,36 @@ public class StringUtility {
return res;
}
+ /**
+ * Converts the collection into a comma-delimited list, Use
+ * {@link #toString(Collection, String)} if you need a different delimiter.
+ *
+ * @param collection The collection to convert to a String
+ * @param <T> The type of elements in the collection
+ * @return A comma-delimited list as a String
+ */
+ public static <T> String toString(Collection<T> collection) {
+ return toString(collection, ",");
+ }
+
+ /**
+ * Converts the collection into a delimited list with the specified delimiter.
+ *
+ * @param collection The collection to convert to a String
+ * @param delimiter The delimiter to use
+ * @param <T> The type of elements in the collection
+ * @return A delimited list as a String
+ */
+ public static <T> String toString(Collection<T> collection, String
delimiter) {
+ StringBuilder builder = new StringBuilder();
+ for (T obj : collection) {
+ builder.append(obj).append(delimiter);
+ }
+ builder.delete(builder.length() - delimiter.length(), builder.length());
+
+ return builder.toString();
+ }
+
// TODO: I18N. The logic here may need to be pluggable for different localizations.
public static String pluralize(String singularNoun) {
String pluralNoun;