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 e140b3721dc03b0a802c418c0b06dc6ac9e80e08 Author: John Matthews jmatthew@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.
spacewalk-commits@lists.fedorahosted.org