java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml
| 20 ++++
java/code/src/com/redhat/rhn/domain/errata/impl/PublishedErrata.java
| 4
java/code/src/com/redhat/rhn/frontend/action/errata/ErrataPackagesSetupAction.java
| 31 ++++--
java/code/src/com/redhat/rhn/frontend/action/errata/PackagePushAction.java
| 2
java/code/src/com/redhat/rhn/frontend/action/errata/RemovePackagesAction.java
| 19 ---
java/code/src/com/redhat/rhn/frontend/action/errata/test/ErrataPackagesSetupActionTest.java
| 2
java/code/src/com/redhat/rhn/frontend/dto/ChannelOverview.java
| 24 +++++
java/code/src/com/redhat/rhn/frontend/events/CloneErrataAction.java
| 2
java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
| 14 ++
java/code/src/com/redhat/rhn/manager/channel/test/ChannelManagerTest.java
| 34 +++++++
java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
| 48 ----------
java/code/webapp/WEB-INF/pages/errata/erratapackages.jsp
| 37 +++----
12 files changed, 131 insertions(+), 106 deletions(-)
New commits:
commit 004a652398b123b548218a28d28cc158f69afcbb
Author: Justin Sherrill <jsherril(a)redhat.com>
Date: Fri Mar 27 10:37:06 2009 -0400
490987 - fixed issue where errata files werent being refreshed, by removing the need
for errata files
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 f0d00b9..fb24cdc 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
@@ -1125,5 +1125,25 @@ GROUP BY C.id, C.name
</query>
</mode>
+<mode name="channel_errata_packages"
class="com.redhat.rhn.frontend.dto.PackageDto">
+ <query params="eid, cid">
+ SELECT P.id, P.md5sum,
+ PN.name || '-' || PE.version
+ || '-' || PE.release || (CASE WHEN PE.epoch IS NULL THEN '' ELSE
':' || PE.epoch END)
+ || '-' || PA.label name
+ from rhnPackage P inner join
+ rhnChannelPackage CP on P.id = CP.package_id inner join
+ rhnErrataPackage EP on EP.package_id = CP.package_id inner join
+ rhnPackageName PN on P.name_id = PN.id inner join
+ rhnPackageEvr PE on P.evr_id = PE.id inner join
+ rhnPackageArch PA on P.package_arch_id = PA.id
+ where CP.channel_id = :cid
+ and EP.errata_id = :eid
+ ORDER by name
+ </query>
+</mode>
+
+
+
</datasource_modes>
diff --git a/java/code/src/com/redhat/rhn/domain/errata/impl/PublishedErrata.java
b/java/code/src/com/redhat/rhn/domain/errata/impl/PublishedErrata.java
index 03f1ba9..bf087c4 100644
--- a/java/code/src/com/redhat/rhn/domain/errata/impl/PublishedErrata.java
+++ b/java/code/src/com/redhat/rhn/domain/errata/impl/PublishedErrata.java
@@ -16,7 +16,6 @@ package com.redhat.rhn.domain.errata.impl;
import com.redhat.rhn.domain.channel.Channel;
import com.redhat.rhn.domain.errata.AbstractErrata;
-import com.redhat.rhn.manager.errata.ErrataManager;
import com.redhat.rhn.domain.errata.Cve;
import org.apache.log4j.Logger;
@@ -32,7 +31,7 @@ public class PublishedErrata extends AbstractErrata {
private static Logger log = Logger.getLogger(PublishedErrata.class);
- private Set channels;
+ private Set channels = new HashSet();
private Set<Cve> cves = new HashSet<Cve>();
/**
@@ -58,7 +57,6 @@ public class PublishedErrata extends AbstractErrata {
this.channels = new HashSet();
}
channels.add(channelIn);
- ErrataManager.refreshErrataFiles(channelIn, this);
}
/**
diff --git
a/java/code/src/com/redhat/rhn/frontend/action/errata/ErrataPackagesSetupAction.java
b/java/code/src/com/redhat/rhn/frontend/action/errata/ErrataPackagesSetupAction.java
index fc6c6b6..3253673 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/errata/ErrataPackagesSetupAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/errata/ErrataPackagesSetupAction.java
@@ -14,20 +14,23 @@
*/
package com.redhat.rhn.frontend.action.errata;
-import com.redhat.rhn.common.db.datasource.DataResult;
+import com.redhat.rhn.domain.channel.Channel;
import com.redhat.rhn.domain.errata.Errata;
import com.redhat.rhn.domain.user.User;
-import com.redhat.rhn.frontend.dto.ErrataPackageFile;
+import com.redhat.rhn.frontend.dto.ChannelOverview;
import com.redhat.rhn.frontend.struts.RequestContext;
import com.redhat.rhn.frontend.struts.RhnAction;
import com.redhat.rhn.frontend.struts.StrutsDelegate;
-import com.redhat.rhn.manager.errata.ErrataManager;
+import com.redhat.rhn.manager.channel.ChannelManager;
+import com.redhat.rhn.manager.user.UserManager;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
-import java.util.Iterator;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -48,17 +51,23 @@ public class ErrataPackagesSetupAction extends RhnAction {
User user = requestContext.getLoggedInUser();
Errata errata = requestContext.lookupErratum();
- DataResult files = ErrataManager.packages(errata.getId(), user);
- Iterator test = files.iterator();
- while (test.hasNext()) { //remove from filename everything we won't display
- ErrataPackageFile next = (ErrataPackageFile)test.next();
- String filename = next.getFilename();
- next.setFilename(filename.substring(filename.lastIndexOf("/") +
1));
+ List<ChannelOverview> chans = new ArrayList<ChannelOverview>();
+
+ for (Channel chan : errata.getChannels()) {
+ if (UserManager.verifyChannelSubscribable(user, chan)) {
+ ChannelOverview co = new ChannelOverview();
+ co.setName(chan.getName());
+ co.setId(chan.getId());
+ co.setPackages(ChannelManager.listErrataPackages(chan, errata));
+ chans.add(co);
+ }
}
+ Collections.sort(chans);
+
request.setAttribute("errata", errata);
- request.setAttribute("files", files);
+ request.setAttribute("channels", chans);
return strutsDelegate.forwardParams(mapping.findForward("default"),
request.getParameterMap());
diff --git a/java/code/src/com/redhat/rhn/frontend/action/errata/PackagePushAction.java
b/java/code/src/com/redhat/rhn/frontend/action/errata/PackagePushAction.java
index 504e535..642cded 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/errata/PackagePushAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/errata/PackagePushAction.java
@@ -94,8 +94,6 @@ public class PackagePushAction extends RhnSetAction {
}
//publish them and the errata to the channel
errata = ErrataFactory.publishToChannel(errata, c, user, filePackages);
- //not sure what this is here for, but i'm scrared to remove it
- ErrataManager.refreshErrataFiles(c, errata);
RhnSet targetChannels = RhnSetDecl.CHANNELS_FOR_ERRATA.get(user);
targetChannels.removeElement(cid);
diff --git a/java/code/src/com/redhat/rhn/frontend/action/errata/RemovePackagesAction.java
b/java/code/src/com/redhat/rhn/frontend/action/errata/RemovePackagesAction.java
index 4511656..e1de4bd 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/errata/RemovePackagesAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/errata/RemovePackagesAction.java
@@ -17,8 +17,6 @@ package com.redhat.rhn.frontend.action.errata;
import com.redhat.rhn.common.db.datasource.DataResult;
import com.redhat.rhn.domain.channel.Channel;
import com.redhat.rhn.domain.errata.Errata;
-import com.redhat.rhn.domain.errata.ErrataFactory;
-import com.redhat.rhn.domain.errata.ErrataFile;
import com.redhat.rhn.domain.rhnpackage.Package;
import com.redhat.rhn.domain.rhnset.RhnSet;
import com.redhat.rhn.domain.rhnset.RhnSetElement;
@@ -92,23 +90,6 @@ public class RemovePackagesAction extends RhnSetAction {
//removed from the errata.
packagesRemoved++;
}
-
- //We have to do this round about way of removing errata files
- // otherwise we are modifying the set that we are working on
- // I really *hate* errata files
- List<ErrataFile> efsToRemove = new ArrayList<ErrataFile>();
- for (ErrataFile ef : errata.getFiles()) {
- if (ef.getPackages().contains(pkg)) {
- efsToRemove.add(ef);
- }
- }
- for (ErrataFile ef : efsToRemove) {
- errata.removeFile(ef.getId());
- ef.getPackages().remove(pkg);
- if (ef.getPackages().isEmpty()) {
- ErrataFactory.removeFile(ef);
- }
- }
}
//Save the errata
ErrataManager.storeErrata(errata);
diff --git
a/java/code/src/com/redhat/rhn/frontend/action/errata/test/ErrataPackagesSetupActionTest.java
b/java/code/src/com/redhat/rhn/frontend/action/errata/test/ErrataPackagesSetupActionTest.java
index 6849b79..1d861b4 100644
---
a/java/code/src/com/redhat/rhn/frontend/action/errata/test/ErrataPackagesSetupActionTest.java
+++
b/java/code/src/com/redhat/rhn/frontend/action/errata/test/ErrataPackagesSetupActionTest.java
@@ -40,7 +40,7 @@ public class ErrataPackagesSetupActionTest extends RhnBaseTestCase {
sah.executeAction();
assertNotNull(sah.getRequest().getAttribute("errata"));
- assertNotNull(sah.getRequest().getAttribute("files"));
+ assertNotNull(sah.getRequest().getAttribute("channels"));
}
}
diff --git a/java/code/src/com/redhat/rhn/frontend/dto/ChannelOverview.java
b/java/code/src/com/redhat/rhn/frontend/dto/ChannelOverview.java
index 793185f..d0ce40b 100644
--- a/java/code/src/com/redhat/rhn/frontend/dto/ChannelOverview.java
+++ b/java/code/src/com/redhat/rhn/frontend/dto/ChannelOverview.java
@@ -16,6 +16,9 @@ package com.redhat.rhn.frontend.dto;
import org.apache.commons.lang.builder.ToStringBuilder;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* ChannelOverview
* @version $Rev$
@@ -31,6 +34,7 @@ public class ChannelOverview extends BaseDto implements Comparable {
private String url;
private Long relevantPackages;
private Long originalId;
+ private List<PackageDto> packages = new ArrayList<PackageDto>();
/**
@@ -225,4 +229,24 @@ public class ChannelOverview extends BaseDto implements Comparable {
return hasSubscription;
}
+
+
+ /**
+ * @return Returns the packages.
+ */
+ public List<PackageDto> getPackages() {
+ return packages;
+ }
+
+
+
+ /**
+ * @param packagesIn The packages to set.
+ */
+ public void setPackages(List<PackageDto> packagesIn) {
+ this.packages = packagesIn;
+ }
+
+
+
}
diff --git a/java/code/src/com/redhat/rhn/frontend/events/CloneErrataAction.java
b/java/code/src/com/redhat/rhn/frontend/events/CloneErrataAction.java
index f270ffc..9221b59 100644
--- a/java/code/src/com/redhat/rhn/frontend/events/CloneErrataAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/events/CloneErrataAction.java
@@ -21,7 +21,6 @@ import com.redhat.rhn.domain.errata.Errata;
import com.redhat.rhn.domain.errata.ErrataFactory;
import com.redhat.rhn.domain.errata.impl.PublishedClonedErrata;
import com.redhat.rhn.frontend.action.channel.manage.PublishErrataHelper;
-import com.redhat.rhn.manager.errata.ErrataManager;
import com.redhat.rhn.manager.errata.cache.ErrataCacheManager;
import org.apache.log4j.Logger;
@@ -63,7 +62,6 @@ public class CloneErrataAction
Errata published = PublishErrataHelper.cloneErrataFast(errata,
msg.getUser().getOrg());
published.setChannels(channelSet);
- ErrataManager.refreshErrataFiles(currChan, published);
}
ErrataCacheManager.insertCacheForChannelErrata(cids, errata);
diff --git a/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
b/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
index c4e2039..d573a1a 100644
--- a/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
+++ b/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
@@ -2404,6 +2404,20 @@ public class ChannelManager extends BaseManager {
ErrataCacheManager.deleteCacheEntriesForChannelErrata(chan.getId(), ids);
}
+ /**
+ * List packages that are contained in an errata and in a channel
+ * @param chan The channel
+ * @param errata the Errata
+ * @return A list of PackageDto that are in the channel and errata
+ */
+ public static List<PackageDto> listErrataPackages(Channel chan, Errata errata)
{
+ Map params = new HashMap();
+ params.put("cid", chan.getId());
+ params.put("eid", errata.getId());
+ SelectMode mode = ModeFactory.getMode(
+ "Channel_queries", "channel_errata_packages");
+ return (List<PackageDto>) mode.execute(params);
+ }
}
diff --git a/java/code/src/com/redhat/rhn/manager/channel/test/ChannelManagerTest.java
b/java/code/src/com/redhat/rhn/manager/channel/test/ChannelManagerTest.java
index 44aea87..4f52632 100644
--- a/java/code/src/com/redhat/rhn/manager/channel/test/ChannelManagerTest.java
+++ b/java/code/src/com/redhat/rhn/manager/channel/test/ChannelManagerTest.java
@@ -30,6 +30,8 @@ import com.redhat.rhn.domain.errata.ErrataFactory;
import com.redhat.rhn.domain.errata.test.ErrataFactoryTest;
import
com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.domain.org.OrgFactory;
+import com.redhat.rhn.domain.rhnpackage.Package;
+import com.redhat.rhn.domain.rhnpackage.test.PackageTest;
import com.redhat.rhn.domain.rhnset.RhnSet;
import com.redhat.rhn.domain.role.RoleFactory;
import com.redhat.rhn.domain.server.Server;
@@ -40,6 +42,7 @@ import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.frontend.dto.ChannelOverview;
import com.redhat.rhn.frontend.dto.ErrataOverview;
import com.redhat.rhn.frontend.dto.EssentialChannelDto;
+import com.redhat.rhn.frontend.dto.PackageDto;
import com.redhat.rhn.frontend.dto.PackageOverview;
import com.redhat.rhn.frontend.dto.SystemsPerChannelDto;
import com.redhat.rhn.frontend.xmlrpc.NoSuchChannelException;
@@ -713,4 +716,35 @@ public class ChannelManagerTest extends BaseTestCaseWithUser {
c = ChannelManager.lookupByLabel(user.getOrg(), c.getLabel());
assertFalse(c.getErratas().contains(eids));
}
+
+ public void testListErrataPackages() throws Exception {
+
+ Channel c = ChannelFactoryTest.createBaseChannel(user);
+ Errata e = ErrataFactoryTest.createTestErrata(user.getOrg().getId());
+
+ Package bothP = PackageTest.createTestPackage();
+ Package channelP = PackageTest.createTestPackage();
+ Package errataP = PackageTest.createTestPackage();
+
+
+ c.addPackage(bothP);
+ e.addPackage(bothP);
+
+ c.addPackage(channelP);
+ e.addPackage(errataP);
+
+ c.addErrata(e);
+
+ c = (Channel) TestUtils.saveAndReload(c);
+ e = (Errata) TestUtils.saveAndReload(e);
+
+ bothP = (Package) TestUtils.saveAndReload(bothP);
+
+
+ List<PackageDto> list = ChannelManager.listErrataPackages(c, e);
+ assertEquals(list.size(), 1);
+ assertEquals(list.get(0).getId(), (bothP.getId()));
+
+
+ }
}
diff --git a/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
b/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
index 2a48b22..6a0070c 100644
--- a/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
+++ b/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
@@ -31,8 +31,6 @@ import com.redhat.rhn.domain.errata.Errata;
import com.redhat.rhn.domain.errata.ErrataFactory;
import com.redhat.rhn.domain.errata.ErrataFile;
import com.redhat.rhn.domain.errata.ErrataFileType;
-import com.redhat.rhn.domain.errata.impl.PublishedErrataFile;
-import com.redhat.rhn.domain.rhnpackage.Package;
import com.redhat.rhn.domain.rhnset.RhnSet;
import com.redhat.rhn.domain.rhnset.RhnSetFactory;
import com.redhat.rhn.domain.role.RoleFactory;
@@ -56,7 +54,6 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
@@ -913,51 +910,6 @@ public class ErrataManager extends BaseManager {
public static List lookupByOriginal(User user, Errata original) {
return ErrataFactory.lookupByOriginal(user.getOrg(), original);
}
-
- /**
- * Refresh the ErrataFiles associated with this Errata and the passed in Channel.
- * @param channelIn to refresh errata files.
- * @param errata of Errata you want to refresh.
- */
- public static void refreshErrataFiles(Channel channelIn, Errata errata) {
- if (log.isDebugEnabled()) {
- log.debug("files? " + (errata.getFiles() != null) + "
packages: " +
- (channelIn.getPackages() != null));
- }
- if (errata.getFiles() != null && channelIn.getPackages() != null) {
- log.debug("This errata has files and the channel has packages.");
- Set addedPackages = new HashSet();
- Iterator i = errata.getFiles().iterator();
- while (i.hasNext()) {
- log.debug("loop 2.");
- PublishedErrataFile ef = (PublishedErrataFile) i.next();
- if (log.isDebugEnabled()) {
- log.debug("Working with ef: " + ef.getFileName() +
- " id: " + ef.getId() + " cs: " +
ef.getChecksum());
- }
- if (ef.getPackages() != null) {
- Iterator j = ef.getPackages().iterator();
- while (j.hasNext()) {
- Package p = (Package) j.next();
- if (log.isDebugEnabled()) {
- log.debug("Package: " +
p.getPackageName().getName() +
- " arch: " +
p.getPackageArch().getLabel());
- log.debug("added packages: " + addedPackages);
- }
- if (channelIn.getPackages().contains(p) &&
- !addedPackages.contains(p)) {
- if (log.isDebugEnabled()) {
- log.debug("ChannelHasPackage, adding to ef");
- }
- ef.addChannel(channelIn);
- addedPackages.add(p);
- }
- }
- }
- }
- }
-
- }
/**
* Lookup packages that are associated with errata in the RhnSet
"errata_list"
diff --git a/java/code/webapp/WEB-INF/pages/errata/erratapackages.jsp
b/java/code/webapp/WEB-INF/pages/errata/erratapackages.jsp
index 69d9864..69b42b3 100644
--- a/java/code/webapp/WEB-INF/pages/errata/erratapackages.jsp
+++ b/java/code/webapp/WEB-INF/pages/errata/erratapackages.jsp
@@ -14,31 +14,28 @@
<h2><bean:message
key="packagelist.jsp.header.packages"/></h2>
- <c:if test="${empty files}">
- <div class="page-summary">
- <bean:message key="details.jsp.none"/>
- </div>
- </c:if>
- <c:forEach items="${files}" var="current">
+
+ <c:forEach items="${channels}" var="current">
<div class="page-summary">
+ <b><c:out value="${current.name}"/> </b>
+ <br/>
- <c:if test="${previousChannel != current.channelName}">
- <br/><b>${current.channelName}:</b> <br/>
- </c:if>
-
- <tt>${current.md5sum}</tt>
-
- <c:if test="${not empty current.packageId}">
- <a
href="/rhn/software/packages/Details.do?pid=${current.packageId}">${current.filename}</a>
- </c:if>
- <c:if test="${empty current.packageId}">
- ${current.filename}
- </c:if>
- <br/>
+ <c:if test="${empty current.packages}">
+ <div class="page-summary">
+ <bean:message key="details.jsp.none"/>
+ </div>
+ </c:if>
+ <c:forEach items="${current.packages}" var="pack">
+ <tt>${pack.md5sum}</tt>
+ <a href="/rhn/software/packages/Details.do?pid=${pack.id}">
+ <c:out value="${pack.name}"/>
+ </a>
+ <br/>
+ </c:forEach>
+ <br/>
</div>
- <c:set var="previousChannel"
value="${current.channelName}" />
</c:forEach>
</body>
</html>