java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java | 63
++++++++++
java/code/src/com/redhat/rhn/domain/errata/impl/PublishedErrata.hbm.xml | 24 +++
java/code/src/com/redhat/rhn/frontend/action/errata/ErrataSearchAction.java | 5
java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java | 13 ++
4 files changed, 103 insertions(+), 2 deletions(-)
New commits:
commit 9ae544812d7bd0cfb3a20339fe9620f168ab221e
Author: John Matthews <jmatthew(a)redhat.com>
Date: Thu May 28 15:03:46 2009 -0400
490960 - ErrataSearch limit returned results to current or trusted orgs
diff --git a/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
b/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
index 7d71db7..0d6733a 100644
--- a/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
@@ -987,5 +987,68 @@ public class ErrataFactory extends HibernateFactory {
}
+ /**
+ * Returns a list of ErrataOverview of Errata that match the given Package
+ * ids.
+ * @param pids Package ids whose Errata are being sought.
+ * @param org Organization to match results with
+ * @return a list of ErrataOverview of Errata that match the given Package
+ * ids.
+ */
+ public static List<ErrataOverview> searchByPackageIdsWithOrg(List pids, Org
org) {
+ List<Long> orgIds = new ArrayList<Long>();
+ orgIds.add(org.getId());
+ for (Org o : org.getTrustedOrgs()) {
+ orgIds.add(o.getId());
+ }
+ Map params = new HashMap();
+ params.put("pids", pids);
+ params.put("org_ids", orgIds);
+ if (log.isDebugEnabled()) {
+ log.debug("pids = " + pids);
+ log.debug("org_ids = " + orgIds);
+ }
+ List results = singleton.listObjectsByNamedQuery(
+ "PublishedErrata.searchByPackageIdsWithOrg", params);
+ if (log.isDebugEnabled()) {
+ log.debug("Query 'PublishedErrata.searchByPackageIdsWithOrg'
returned " +
+ results.size() + " entries");
+ }
+ List<ErrataOverview> errata = new ArrayList<ErrataOverview>();
+ Long lastId = null;
+ ErrataOverview eo = null;
+ for (Object result : results) {
+ Object[] values = (Object[]) result;
+ // e.id, e.advisory, e.advisoryName, e.advisoryType, e.synopsis,
e.updateDate
+ Long curId = (Long)values[0];
+
+ if (!curId.equals(lastId)) {
+ eo = new ErrataOverview();
+ }
+ eo.setId((Long)values[0]);
+ eo.setAdvisory((String)values[1]);
+ eo.setAdvisoryName((String)values[2]);
+ eo.setAdvisoryType((String)values[3]);
+ eo.setAdvisorySynopsis((String)values[4]);
+ eo.setUpdateDate((Date)values[5]);
+ eo.setIssueDate((Date)values[6]);
+ eo.addPackageName((String)values[7]);
+ if (!curId.equals(lastId)) {
+ errata.add(eo);
+ lastId = curId;
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("curId = " + curId + ", lastId = " +
lastId);
+ log.debug("ErrataOverview formed: " + eo.getAdvisoryName() +
" for " +
+ eo.getPackageNames());
+ }
+ }
+
+ return errata;
+ }
+
+
+
+
}
diff --git a/java/code/src/com/redhat/rhn/domain/errata/impl/PublishedErrata.hbm.xml
b/java/code/src/com/redhat/rhn/domain/errata/impl/PublishedErrata.hbm.xml
index f8c8a77..d2f19a4 100644
--- a/java/code/src/com/redhat/rhn/domain/errata/impl/PublishedErrata.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/errata/impl/PublishedErrata.hbm.xml
@@ -149,6 +149,30 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<return-scalar column="name" type="string" />
</sql-query>
+ <sql-query name="PublishedErrata.searchByPackageIdsWithOrg">
+ <![CDATA[select distinct e.id, e.advisory, e.advisory_name as advisoryName,
e.advisory_type as advisoryType, e.synopsis as advisorySynopsis,
+ e.update_date as updateDate, e.issue_date as issueDate, pn.name
+ from rhnErrata e,
+ rhnErrataPackage ep,
+ rhnPackage p,
+ rhnPackageName pn
+ where e.id = ep.errata_id
+ and p.id = ep.package_id
+ and p.name_id = pn.id
+ and ep.package_id IN (:pids)
+ and e.org_id IN (:org_ids)
+ order by e.id]]>
+ <return-scalar column="id" type="long" />
+ <return-scalar column="advisory" type="string" />
+ <return-scalar column="advisoryName" type="string" />
+ <return-scalar column="advisoryType" type="string" />
+ <return-scalar column="advisorySynopsis" type="string"
/>
+ <return-scalar column="updateDate" type="timestamp" />
+ <return-scalar column="issueDate" type="timestamp" />
+ <return-scalar column="name" type="string" />
+ </sql-query>
+
+
<sql-query name="PublishedErrata.lookupFromSet">
<![CDATA[SELECT {e.*}
from rhnErrata e left join
diff --git a/java/code/src/com/redhat/rhn/frontend/action/errata/ErrataSearchAction.java
b/java/code/src/com/redhat/rhn/frontend/action/errata/ErrataSearchAction.java
index a76467e..2ea77af 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/errata/ErrataSearchAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/errata/ErrataSearchAction.java
@@ -262,7 +262,7 @@ public class ErrataSearchAction extends RhnAction {
throws XmlRpcFault, MalformedURLException {
log.warn("Performing errata search");
-
+ RequestContext ctx = new RequestContext(request);
// call search server
XmlRpcClient client = new XmlRpcClient(Config.get().getSearchServerUrl(), true);
String path = null;
@@ -356,7 +356,8 @@ public class ErrataSearchAction extends RhnAction {
// to a better user experience.
List<ErrataOverview> unsorted = new ArrayList<ErrataOverview>();
if (OPT_PKG_NAME.equals(mode)) {
- unsorted = ErrataManager.searchByPackageIds(ids);
+ unsorted = ErrataManager.searchByPackageIdsWithOrg(ids,
+ ctx.getCurrentUser().getOrg());
}
else {
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 8ff0a6f..8b42266 100644
--- a/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
+++ b/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
@@ -31,6 +31,7 @@ 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.org.Org;
import com.redhat.rhn.domain.rhnset.RhnSet;
import com.redhat.rhn.domain.role.RoleFactory;
import com.redhat.rhn.domain.user.User;
@@ -292,6 +293,18 @@ public class ErrataManager extends BaseManager {
}
/**
+ * Returns a list of ErrataOverview whose errata contains the packages
+ * with the given pids.
+ * @param pids list of package ids whose errata are sought.
+ * @param org Organization to match results with
+ * @return a list of ErrataOverview whose errata contains the packages
+ * with the given pids.
+ */
+ public static List<ErrataOverview> searchByPackageIdsWithOrg(List pids, Org
org) {
+ return ErrataFactory.searchByPackageIdsWithOrg(pids, org);
+ }
+
+ /**
* Returns a list of ErrataOverview matching the given errata ids.
* @param eids Errata ids sought.
* @return a list of ErrataOverview matching the given errata ids.