java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java | 15 + java/code/src/com/redhat/rhn/domain/channel/ContentSource.hbm.xml | 9 java/code/src/com/redhat/rhn/frontend/action/channel/manage/SyncRepositoriesAction.java | 104 ++++++++++ java/code/webapp/WEB-INF/pages/channel/manage/syncrepos.jsp | 55 +++++ 4 files changed, 183 insertions(+)
New commits: commit c9bd1c458c2e4d99fecd2268c145d52e1d3cbe7c Author: Shannon Hughes shughes@redhat.com Date: Tue Jun 8 13:36:38 2010 -0400
new page: list of repos to sync (session sets)
diff --git a/java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java b/java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java index ce9ca82..b0022da 100644 --- a/java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java +++ b/java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java @@ -145,6 +145,21 @@ public class ChannelFactory extends HibernateFactory { }
/** + * Lookup a content source by org/channel + * @param org the org to lookup + * @param c the channel + * @return the ContentSource(s) + */ + public static List<ContentSource> lookupContentSources(Org org, Channel c) { + Map params = new HashMap(); + params.put("org", org); + params.put("channel", c); + return singleton.listObjectsByNamedQuery( + "ContentSource.findByOrgandChannel", params); + } + + + /** * lookup content source by id and org * @param id * @param orgIn diff --git a/java/code/src/com/redhat/rhn/domain/channel/ContentSource.hbm.xml b/java/code/src/com/redhat/rhn/domain/channel/ContentSource.hbm.xml index 0225674..b0a7aad 100644 --- a/java/code/src/com/redhat/rhn/domain/channel/ContentSource.hbm.xml +++ b/java/code/src/com/redhat/rhn/domain/channel/ContentSource.hbm.xml @@ -46,8 +46,17 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" </query> <query name="ContentSource.findByOrg"> <![CDATA[from com.redhat.rhn.domain.channel.ContentSource as c where c.org = :org]]> + </query> + <query name="ContentSource.findByOrgandChannel"> + <![CDATA[SELECT cs from com.redhat.rhn.domain.channel.ContentSource as cs, + com.redhat.rhn.domain.channel.Channel as c + where cs.org = :org + and c = :channel + and cs in elements(c.sources) + ]]> </query>
+
</hibernate-mapping> diff --git a/java/code/src/com/redhat/rhn/frontend/action/channel/manage/SyncRepositoriesAction.java b/java/code/src/com/redhat/rhn/frontend/action/channel/manage/SyncRepositoriesAction.java new file mode 100644 index 0000000..157949a --- /dev/null +++ b/java/code/src/com/redhat/rhn/frontend/action/channel/manage/SyncRepositoriesAction.java @@ -0,0 +1,104 @@ +/** + * Copyright (c) 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.channel.manage; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.struts.action.ActionForm; +import org.apache.struts.action.ActionForward; +import org.apache.struts.action.ActionMapping; + +import com.redhat.rhn.domain.channel.Channel; +import com.redhat.rhn.domain.channel.ChannelFactory; +import com.redhat.rhn.domain.channel.ContentSource; +import com.redhat.rhn.domain.user.User; +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.frontend.taglibs.list.helper.ListSessionSetHelper; +import com.redhat.rhn.frontend.taglibs.list.helper.Listable; + + +public class SyncRepositoriesAction extends RhnAction implements Listable { + + + public ActionForward execute(ActionMapping mapping, + ActionForm formIn, + HttpServletRequest request, + HttpServletResponse response) { + + RequestContext context = new RequestContext(request); + User user = context.getLoggedInUser(); + + long cid = context.getRequiredParam("cid"); + Channel chan = ChannelFactory.lookupByIdAndUser(cid, user); + request.setAttribute("channel_name", chan.getName()); + + Map params = new HashMap(); + params.put(RequestContext.CID, chan.getId().toString()); + + ListSessionSetHelper helper = new ListSessionSetHelper(this, request,params); + + if (!context.isSubmitted()) { + List<ContentSource> result = getResult(context); + Set<String> preSelect = new HashSet<String>(); + for (int i = 0; i < result.size(); i++) { + ContentSource src = result.get(i); + if(src.getChannels().contains(chan)) { + preSelect.add(src.getId().toString()); + } + } + helper.preSelect(preSelect); + } + + helper.ignoreEmptySelection(); + helper.execute(); + + if(helper.isDispatched()) { + Set<ContentSource> foo = chan.getSources(); + foo.clear(); + Set <String> set = helper.getSet(); + for (String id : set) { + Long sgid = Long.valueOf(id); + ContentSource tmp = ChannelFactory.lookupContentSource(sgid); + foo.add(tmp); + } + + ChannelFactory.save(chan); + + StrutsDelegate strutsDelegate = getStrutsDelegate(); + strutsDelegate.saveMessage("channel.edit.repo.updated", new String[] {chan.getName()}, request ); + + return strutsDelegate.forwardParams + (mapping.findForward("success"), params); + } + + return mapping.findForward("default"); + } + + public List<ContentSource> getResult(RequestContext context) { + User user = context.getLoggedInUser(); + long cid = context.getRequiredParam("cid"); + Channel chan = ChannelFactory.lookupByIdAndUser(cid, user); + return ChannelFactory.lookupContentSources(user.getOrg(), chan); + } +} diff --git a/java/code/webapp/WEB-INF/pages/channel/manage/syncrepos.jsp b/java/code/webapp/WEB-INF/pages/channel/manage/syncrepos.jsp new file mode 100644 index 0000000..96180fc --- /dev/null +++ b/java/code/webapp/WEB-INF/pages/channel/manage/syncrepos.jsp @@ -0,0 +1,55 @@ +<%@ taglib uri="http://rhn.redhat.com/rhn" prefix="rhn" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %> +<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> +<%@ taglib uri="http://rhn.redhat.com/tags/list" prefix="rl" %> + +html:xhtml/ +<html> +<head> + <meta name="page-decorator" content="none" /> +</head> +<body> + +<%@ include file="/WEB-INF/pages/common/fragments/channel/manage/manage_channel_header.jspf" %> +<BR> + +<h2><img src="/img/rhn-icon-packages.gif"> <bean:message key="repos.jsp.channel.repos"/></h2> + +<rl:listset name="packageSet"> + +<input type="hidden" name="cid" value="${cid}" /> + + <rl:list + decorator="SelectableDecorator" + emptykey="repos.jsp.norepos" + alphabarcolumn="label" + > + + <rl:decorator name="PageSizeDecorator"/> + + <rl:selectablecolumn value="${current.id}" + styleclass="first-column"/> + + <rl:column sortable="true" + bound="false" + headerkey="repos.jsp.channel.header" + sortattr="label" + defaultsort="asc" + > + + <a href="/rhn/channels/manage/repos/RepoEdit.do?id=${current.id}">${current.label}</a> + </rl:column> + + </rl:list> + <div align="right"> + <hr /> + <input type="submit" name="dispatch" + value="<bean:message key="repos.jsp.update.channel"/>" /> + </div> + rhn:submitted/ + +</rl:listset> + +</body> +</html> \ No newline at end of file
spacewalk-commits@lists.fedorahosted.org