java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml |
16 +
java/code/src/com/redhat/rhn/frontend/action/multiorg/SoftwareEntitlementsAction.java |
24 +-
java/code/src/com/redhat/rhn/frontend/action/multiorg/SoftwareEntitlementsFilter.java |
42 ----
java/code/src/com/redhat/rhn/frontend/dto/MultiOrgEntitlementsDto.java |
75 ++++++++
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml |
32 ++-
java/code/webapp/WEB-INF/pages/admin/multiorg/softwareentitlements.jsp |
89 +++++++---
6 files changed, 193 insertions(+), 85 deletions(-)
New commits:
commit a0e93438c91b5ed14527efb83ee94995ad088125
Author: Partha Aji <paji(a)redhat.com>
Date: Wed Jun 23 13:14:09 2010 -0400
Updated the software entitlements page to deal with FVE
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml
b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml
index f43463e..8e4b073 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml
@@ -362,14 +362,18 @@ SELECT MAX(cfo.id) as id,
SUM(cfo.max_members) as total,
SUM(cfo.current_members) as used,
(SELECT (cfo2.max_members) - (cfo2.current_members)
- FROM rhnChannelFamilyOverview cfo2
- WHERE 1=1
- AND cfo2.name = cfo.name
- AND cfo2.org_id = 1) as available
+ FROM rhnChannelFamilyOverview cfo2
+ WHERE cfo2.label = cfo.label
+ AND cfo2.org_id = 1) as available,
+ SUM(cfo.fve_max_members) as total_flex,
+ SUM(cfo.fve_current_members) as used_flex,
+ (SELECT (cfo2.fve_max_members) - (cfo2.fve_current_members)
+ FROM rhnChannelFamilyOverview cfo2
+ WHERE cfo2.label = cfo.label AND cfo2.org_id = 1) as available_flex
FROM rhnChannelFamilyOverview cfo
-WHERE cfo.max_members is not null
+WHERE cfo.max_members is not null
GROUP BY cfo.label, cfo.name
-HAVING SUM(cfo.max_members) is not null
+HAVING (SUM(cfo.max_members) is not null)
ORDER by cfo.name DESC
</query>
</mode>
diff --git
a/java/code/src/com/redhat/rhn/frontend/action/multiorg/SoftwareEntitlementsAction.java
b/java/code/src/com/redhat/rhn/frontend/action/multiorg/SoftwareEntitlementsAction.java
index 61deb7a..f5ebb98 100644
---
a/java/code/src/com/redhat/rhn/frontend/action/multiorg/SoftwareEntitlementsAction.java
+++
b/java/code/src/com/redhat/rhn/frontend/action/multiorg/SoftwareEntitlementsAction.java
@@ -14,11 +14,11 @@
*/
package com.redhat.rhn.frontend.action.multiorg;
-import com.redhat.rhn.common.db.datasource.DataList;
import com.redhat.rhn.domain.user.User;
-import com.redhat.rhn.frontend.dto.MultiOrgEntitlementsDto;
import com.redhat.rhn.frontend.struts.RequestContext;
import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.taglibs.list.helper.ListHelper;
+import com.redhat.rhn.frontend.taglibs.list.helper.Listable;
import com.redhat.rhn.manager.channel.ChannelManager;
import com.redhat.rhn.manager.org.OrgManager;
@@ -26,6 +26,8 @@ import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
+import java.util.List;
+
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -34,7 +36,7 @@ import javax.servlet.http.HttpServletResponse;
* SoftwareEntitlementsAction
* @version $Rev$
*/
-public class SoftwareEntitlementsAction extends RhnAction {
+public class SoftwareEntitlementsAction extends RhnAction implements Listable {
/**
* ${@inheritDoc}
@@ -44,17 +46,19 @@ public class SoftwareEntitlementsAction extends RhnAction {
RequestContext requestContext = new RequestContext(request);
User u = requestContext.getLoggedInUser();
-
- DataList<MultiOrgEntitlementsDto> result =
- ChannelManager.entitlementsForAllMOrgs();
-
+ ListHelper helper = new ListHelper(this, request);
+ helper.execute();
Long orgCount = OrgManager.getTotalOrgCount(u);
-
request.setAttribute("orgCount", orgCount);
- request.setAttribute("pageList", result);
- request.setAttribute("parentUrl", request.getRequestURI());
return mapping.findForward("default");
}
+ /**
+ * {@inheritDoc}
+ */
+ public List getResult(RequestContext contextIn) {
+ return ChannelManager.entitlementsForAllMOrgs();
+ }
+
}
diff --git
a/java/code/src/com/redhat/rhn/frontend/action/multiorg/SoftwareEntitlementsFilter.java
b/java/code/src/com/redhat/rhn/frontend/action/multiorg/SoftwareEntitlementsFilter.java
deleted file mode 100644
index 5b0d420..0000000
---
a/java/code/src/com/redhat/rhn/frontend/action/multiorg/SoftwareEntitlementsFilter.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Copyright (c) 2009--2010 Red Hat, Inc.
- *
- * This software is licensed to you under the GNU General Public License,
- * version 2 (GPLv2). There is NO WARRANTY for this software, express or
- * implied, including the implied warranties of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
- * along with this software; if not, see
- *
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
- *
- * Red Hat trademarks are not licensed under GPLv2. No permission is
- * granted to use or replicate Red Hat trademarks that are incorporated
- * in this software or its documentation.
- */
-package com.redhat.rhn.frontend.action.multiorg;
-
-import com.redhat.rhn.common.localization.LocalizationService;
-import com.redhat.rhn.frontend.taglibs.list.BaseListFilter;
-
-import java.util.Locale;
-import java.util.Map;
-
-
-/**
- * SoftwareEntitlementsFilter
- * @version $Rev$
- */
-public class SoftwareEntitlementsFilter extends BaseListFilter {
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void processMap(Map map, Locale userLocale) {
- LocalizationService ls =
- LocalizationService.getInstance();
- String filterBy =
ls.getMessage("softwareentitlements.header.entitlement.name",
- userLocale);
- map.put(filterBy, "name");
- }
-
-}
diff --git a/java/code/src/com/redhat/rhn/frontend/dto/MultiOrgEntitlementsDto.java
b/java/code/src/com/redhat/rhn/frontend/dto/MultiOrgEntitlementsDto.java
index c4012cd..8f26351 100644
--- a/java/code/src/com/redhat/rhn/frontend/dto/MultiOrgEntitlementsDto.java
+++ b/java/code/src/com/redhat/rhn/frontend/dto/MultiOrgEntitlementsDto.java
@@ -24,6 +24,7 @@ import java.math.BigDecimal;
public class MultiOrgEntitlementsDto extends BaseDto {
private Long id;
private Long total, used, available;
+ private Long totalFlex, usedFlex, availableFlex;
private String label;
private String name;
@@ -108,6 +109,9 @@ public class MultiOrgEntitlementsDto extends BaseDto {
* @return the number of used slots.
*/
public Long getAllocated() {
+ if (getTotal() == null || getAvailable() == null) {
+ return 0L;
+ }
return getTotal() - getAvailable();
}
@@ -143,5 +147,76 @@ public class MultiOrgEntitlementsDto extends BaseDto {
*/
public void setName(String nameIn) {
this.name = nameIn;
+ }
+
+
+ /**
+ * @return Returns the totalFlex.
+ */
+ public Long getTotalFlex() {
+ return totalFlex;
+ }
+
+
+ /**
+ * @param totalFlexIn The totalFlex to set.
+ */
+ public void setTotalFlex(Long totalFlexIn) {
+ totalFlex = totalFlexIn;
+ }
+
+
+ /**
+ * @return Returns the usedFlex.
+ */
+ public Long getUsedFlex() {
+ return usedFlex;
+ }
+
+
+ /**
+ * @param usedFlexIn The usedFlex to set.
+ */
+ public void setUsedFlex(Long usedFlexIn) {
+ usedFlex = usedFlexIn;
+ }
+
+
+ /**
+ * @return Returns the availableFlex.
+ */
+ public Long getAvailableFlex() {
+ return availableFlex;
+ }
+
+
+ /**
+ * @param availableFlexIn The availableFlex to set.
+ */
+ public void setAvailableFlex(Long availableFlexIn) {
+ availableFlex = availableFlexIn;
+ }
+
+ /**
+ * @return the number of used slots.
+ */
+ public Long getAllocatedFlex() {
+ if (getTotal() == null || getAvailable() == null) {
+ return 0L;
+ }
+ return getTotalFlex() - getAvailableFlex();
+ }
+
+ /**
+ * @return the ratio of current: allocated
+ */
+ public BigDecimal getFlexRatio() {
+ BigDecimal allocated = BigDecimal.valueOf(getAllocatedFlex());
+ if (!allocated.equals(BigDecimal.ZERO)) {
+ BigDecimal hundred = BigDecimal.TEN.multiply(BigDecimal.TEN);
+ BigDecimal dividend = BigDecimal.valueOf(getUsedFlex()).multiply(hundred);
+ return dividend.divide(allocated, BigDecimal.ROUND_UP);
+ }
+ return BigDecimal.ZERO;
}
}
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
index 98cc570..402af22 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
@@ -4459,24 +4459,44 @@ button below, and <b>will be unable to log back
in</b>.</source>
<context
context-type="sourcefile">/rhn/admin/multiorg/SoftwareEntitlements</context>
</context-group>
</trans-unit>
- <trans-unit id="softwareentitlements.header.available">
-<source>Available</source>
+ <trans-unit id="Available/Total">
+<source>Available/Total</source>
<context-group name="ctx">
<context
context-type="sourcefile">/rhn/admin/multiorg/SoftwareEntitlements</context>
</context-group>
</trans-unit>
- <trans-unit id="softwareentitlements.header.total">
-<source>Total*</source>
+ <trans-unit id="None Allocated">
+<source>None Alloted</source>
+ <context-group name="ctx">
+ <context
context-type="sourcefile">/rhn/admin/multiorg/SoftwareEntitlements</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="Regular Counts">
+<source>Regular Entitlement Counts</source>
<context-group name="ctx">
<context
context-type="sourcefile">/rhn/admin/multiorg/SoftwareEntitlements</context>
</context-group>
</trans-unit>
- <trans-unit id="softwareentitlements.header.usage">
-<source>Usage</source>
+ <trans-unit id="Regular Usage">
+<source>Regular Usage</source>
<context-group name="ctx">
<context
context-type="sourcefile">/rhn/admin/multiorg/SoftwareEntitlements</context>
</context-group>
</trans-unit>
+ <trans-unit id="Flex Counts">
+<source>Flex Entitlement Counts</source>
+ <context-group name="ctx">
+ <context
context-type="sourcefile">/rhn/admin/multiorg/SoftwareEntitlements</context>
+ </context-group>
+ </trans-unit>
+
+ <trans-unit id="Flex Usage">
+<source>Flex Usage</source>
+ <context-group name="ctx">
+ <context
context-type="sourcefile">/rhn/admin/multiorg/SoftwareEntitlements</context>
+ </context-group>
+ </trans-unit>
+
<trans-unit id="softwareentitlements.usagedata">
<source>{0} of {1} ({2}%)</source>
<context-group name="ctx">
diff --git a/java/code/webapp/WEB-INF/pages/admin/multiorg/softwareentitlements.jsp
b/java/code/webapp/WEB-INF/pages/admin/multiorg/softwareentitlements.jsp
index c4b6a9e..6675676 100644
--- a/java/code/webapp/WEB-INF/pages/admin/multiorg/softwareentitlements.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/multiorg/softwareentitlements.jsp
@@ -22,15 +22,27 @@
<p/>
+<c:choose>
+ <c:when test = "${orgCount > 1}">
+ <c:set var = "countstyle" value= ""/>
+ <c:set var = "usagestyle" value = "last-column"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var = "countstyle" value= "last-column"/>
+ <c:set var = "usagestyle" value = ""/>
+ </c:otherwise>
+</c:choose>
+
+
+
<rl:listset name="entitlementSet">
- <rl:list dataset="pageList"
- width="100%"
- name="pageList"
-
filter="com.redhat.rhn.frontend.action.multiorg.SoftwareEntitlementsFilter"
+ <rl:list
styleclass="list"
- emptykey="softwareentitlements.noentitlements">
- <rl:column bound="false"
- sortable="false"
+ emptykey="softwareentitlements.noentitlements">
+
+ <rl:column
+ sortattr="name"
+ filterattr="name"
headerkey="softwareentitlements.header.entitlement.name"
styleclass="first-column"
@@ -39,26 +51,61 @@
</a>
</rl:column>
- <rl:column bound="false"
- sortable="false"
- headerkey="softwareentitlements.header.total">
- ${current.total}
+ <rl:column
+ headertext="${rhn:localize('Regular Counts')} <br/>
(${rhn:localize('Available/Total')}*)">
+ <c:choose>
+ <c:when test="${empty current.total or current.total ==
0}">
+ <bean:message key="softwareentitlements.noentitlements"/>
+ </c:when>
+ <c:otherwise>
+ ${current.available} / ${current.total}
+ </c:otherwise>
+ </c:choose>
</rl:column>
+
+ <c:if test="${orgCount > 1}">
+ <rl:column headerkey="Regular Usage">
+ <c:choose>
+ <c:when test="${empty current.allocated or current.allocated ==
0}">
+ <bean:message key="None Allocated"/>
+ </c:when>
+ <c:otherwise>
+ <bean:message key="softwareentitlements.usagedata"
arg0="${current.used}" arg1="${current.allocated}"
arg2="${current.ratio}"/>
+ </c:otherwise>
+ </c:choose>
+ </rl:column>
+ </c:if>
- <rl:column bound="false"
- sortable="false"
- headerkey="softwareentitlements.header.available">
- ${current.available}
- </rl:column>
+ <rl:column
+ styleclass="${countstyle}"
+ headertext="${rhn:localize('Flex Counts')} <br/>
(${rhn:localize('Available/Total')}*)">
+ <c:choose>
+ <c:when test="${empty current.totalFlex or current.totalFlex ==
0}">
+ <bean:message key="softwareentitlements.noentitlements"/>
+ </c:when>
+ <c:otherwise>
+ ${current.availableFlex} / ${current.totalFlex}
+ </c:otherwise>
+ </c:choose>
+ </rl:column>
<c:if test="${orgCount > 1}">
<rl:column bound="false"
- sortable="false"
- headerkey="softwareentitlements.header.usage"
- styleclass="last-column">
- <bean:message key="softwareentitlements.usagedata"
arg0="${current.used}" arg1="${current.allocated}"
arg2="${current.ratio}"/>
+ headerkey="Flex Usage"
+ styleclass="${usagestyle}">
+ <c:choose>
+
+ <c:when test="${empty current.allocatedFlex or current.allocatedFlex
== 0}">
+ <bean:message key="None Allocated"/>
+ </c:when>
+ <c:otherwise>
+ <bean:message key="softwareentitlements.usagedata"
arg0="${current.usedFlex}" arg1="${current.allocatedFlex}"
arg2="${current.flexRatio}"/>
+ </c:otherwise>
+ </c:choose>
+
+
</rl:column>
- </c:if>
+ </c:if>
</rl:list>
</rl:listset>