Hi all

Attached is a patch to implement this API call.

Comments/criticisms welcome.

CC

-- 
RHCE#805007969328369
From cd3e390a1b16b35d999860231577fe74f641a093 Mon Sep 17 00:00:00 2001
From: Colin Coe <[email protected]>
Date: Fri, 26 Mar 2010 21:48:46 +0800
Subject: [PATCH] Implement 'channel.software.listChildren' API call

---
 .../common/db/datasource/xml/Channel_queries.xml   |    9 ++++++-
 .../channel/software/ChannelSoftwareHandler.java   |   27 ++++++++++++++++++++
 .../redhat/rhn/manager/channel/ChannelManager.java |   14 ++++++++++
 3 files changed, 49 insertions(+), 1 deletions(-)

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 e3e2330..e38086d 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
@@ -1172,7 +1172,14 @@ GROUP BY C.id, C.name
   </query>
 </mode>
 
-
+<mode name="child_channels_of_channel" class="com.redhat.rhn.frontend.dto.ChildChannelDto">
+  <query params="cid">
+  SELECT DISTINCT id, label
+  FROM rhnChannel
+  WHERE parent_channel = :cid
+  ORDER BY id
+  </query>
+</mode>
 
 </datasource_modes>
 
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/software/ChannelSoftwareHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/software/ChannelSoftwareHandler.java
index de46f02..bf3faa8 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/software/ChannelSoftwareHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/software/ChannelSoftwareHandler.java
@@ -1987,4 +1987,31 @@ public class ChannelSoftwareHandler extends BaseHandler {
 
     }
 
+    /**
+     * List the children of a channel
+     * @param sessionKey the session key
+     * @param channelLabel the channel label
+     * @return list of channel id's and labels
+     *
+     * @xmlrpc.doc List the children of a channel
+     * @xmlrpc.param #session_key()
+     * @xmlrpc.param #param_desc("string", "channelLabel", "the label of the channel")
+     * @xmlrpc.returntype
+     *      #array()
+     *          string
+     *          string
+     *      #array_end()
+     *
+     */
+
+    public Object[] listChildren(String sessionKey, String channelLabel) {
+        // Get Logged in user
+        User loggedInUser = getLoggedInUser(sessionKey);
+        channelAdminPermCheck(loggedInUser);
+        Channel chan = lookupChannelByLabel(loggedInUser, channelLabel);
+
+        DataResult dr = ChannelManager.childChannels(chan.getId());
+        return dr.toArray();
+    }
+
 }
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 66a51ee..f191786 100644
--- a/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
+++ b/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
@@ -2813,4 +2813,18 @@ public class ChannelManager extends BaseManager {
         return logPath + possibleList.get(possibleList.size() - 1);
     }
 
+    /**
+     * Returns a DataResult containing maps representing the child channels of a
+     * particular channel.
+     * @param channelId The server in question.
+     * @return Returns a DataResult of maps representing the child channels a
+     * particular channel.
+     */
+    public static DataResult childChannels(Long channelId) {
+        Map params = new HashMap();
+        params.put("cid", channelId);
+        SelectMode m = ModeFactory.getMode("Channel_queries", "child_channels_of_channel", Map.class);
+        return m.execute(params);
+    }
+
 }
-- 
1.5.5.6

_______________________________________________
Spacewalk-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/spacewalk-devel

Reply via email to