From 59f405c9786182467b1bce5ed411162bec4d89d3 Mon Sep 17 00:00:00 2001
From: Colin Coe <colin.coe@gmail.com>
Date: Fri, 3 Oct 2008 08:29:47 +0800
Subject: [PATCH] Add setCustomOptions API call

---
 .../system/profile/ServerProfileHandler.java       |  107 ++++++++++++++------
 1 files changed, 75 insertions(+), 32 deletions(-)

diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/profile/ServerProfileHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/profile/ServerProfileHandler.java
index d5ae021..a65e520 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/profile/ServerProfileHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/profile/ServerProfileHandler.java
@@ -14,57 +14,100 @@
  */
 package com.redhat.rhn.frontend.xmlrpc.system.profile;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
+import java.util.Date;
+import java.util.HashSet;
 import java.util.Set;
 import java.util.SortedSet;
 
 import com.redhat.rhn.domain.kickstart.KickstartCommand;
 import com.redhat.rhn.domain.kickstart.KickstartData;
 import com.redhat.rhn.domain.kickstart.KickstartFactory;
-import com.redhat.rhn.domain.server.Server;
 import com.redhat.rhn.domain.user.User;
 import com.redhat.rhn.frontend.xmlrpc.BaseHandler;
-import com.redhat.rhn.frontend.xmlrpc.serializer.KickstartCustomOptionSerializer;
-import com.redhat.rhn.frontend.xmlrpc.system.XmlRpcSystemHelper;
+import com.redhat.rhn.manager.kickstart.KickstartOptionsCommand;
 
-import redstone.xmlrpc.XmlRpcArray;
+import com.redhat.rhn.frontend.action.kickstart.KickstartHelper;
+import com.redhat.rhn.frontend.xmlrpc.kickstart.XmlRpcKickstartHelper;
+
+//import redstone.xmlrpc.XmlRpcArray;
 
 /**
  * ServerProfileHandler
  * @version $Rev$
  * @xmlrpc.namespace system.profile
- * @xmlrpc.doc Provides methods to access and modify many aspects of 
+ * @xmlrpc.doc Provides methods to access and modify many aspects of
  * kickstart profile and server association.
  * basically system.profile name space
  */
 public class ServerProfileHandler extends BaseHandler {
 
-    /**
-     * List custom options in a kickstart profile
-     * @param sessionKey the session key
-     * @param ksLabel the kickstart label
-     * @return a list of hashes holding this info.
-     *
-     * @xmlrpc.doc List custom options in a kickstart profile
-     * @xmlrpc.param #session_key() 
-     * @xmlrpc.param #param("int","serverId")
-     * @xmlrpc.param #param("string","ksLabel")
-     *  
-     * @xmlrpc.returntype
-     * #array()
-     * $KickstartCommandSerializer
-     * #array_end()
-     */
+   private static final String NEWLINE = "\n";
+
+   /**
+    * Set custom options in a kickstart profile
+    * @param sessionKey the session key
+    * @param ksLabel the kickstart label
+    * @param options the custom options to set
+    * @return a int being the number of options set
+    *
+    * @xmlrpc.doc Set custom options in a kickstart profile
+    * @xmlrpc.param #session_key()
+    * @xmlrpc.param #param("int","serverId")
+    * @xmlrpc.param #param("string","ksLabel")
+    * @xmlrpc.param #param("string[]","options")
+    *
+    * @xmlrpc.returntype
+    * int
+    */
+
+   public int setCustomOptions(String sessionKey, String ksLabel, String options) {
+       User user = getLoggedInUser(sessionKey);
+       KickstartData ksdata = 
+               XmlRpcKickstartHelper.getInstance().lookupKsData(ksLabel, user.getOrg());
+       Long ksid = ksdata.getId();
+       KickstartHelper helper = new KickstartHelper(null);
+       KickstartOptionsCommand cmd = new KickstartOptionsCommand(ksid, user, helper);
+       Set customSet = new HashSet();
+       if (options != null) {
+           KickstartCommand custom = new KickstartCommand();
+           custom.setCommandName(
+                    KickstartFactory.lookupKickstartCommandName("custom"));
+           custom.setArguments(options);
+           custom.setKickstartData(cmd.getKickstartData());
+           custom.setCustomPosition(customSet.size());
+           custom.setCreated(new Date());
+           custom.setModified(new Date());
+           customSet.add(custom);
+           cmd.getKickstartData().getCustomOptions().clear();
+           cmd.getKickstartData().getCustomOptions().addAll(customSet);
+       }
+       cmd.store();
+       return 1;
+   }
+
+   /**
+    * List custom options in a kickstart profile
+    * @param sessionKey the session key
+    * @param ksLabel the kickstart label
+    * @return a list of hashes holding this info.
+    *
+    * @xmlrpc.doc List custom options in a kickstart profile
+    * @xmlrpc.param #session_key()
+    * @xmlrpc.param #param("int","serverId")
+    * @xmlrpc.param #param("string","ksLabel")
+    *
+    * @xmlrpc.returntype
+    * #array()
+    * $KickstartCommandSerializer
+    * #array_end()
+    */
 
-    public Object[] getCustomOptions(String sessionKey, String ksLabel) {
-        User user = getLoggedInUser(sessionKey);
-        KickstartData k = KickstartFactory.lookupKickstartDataByLabelAndOrgId(
-                ksLabel, user.getOrg().getId());
-        SortedSet options = k.getCustomOptions();
-        return options.toArray();
-    }
+   public Object[] getCustomOptions(String sessionKey, String ksLabel) {
+       User user = getLoggedInUser(sessionKey);
+       KickstartData k = KickstartFactory.lookupKickstartDataByLabelAndOrgId(
+               ksLabel, user.getOrg().getId());
+       SortedSet options = k.getCustomOptions();
+       return options.toArray();
+   }
 
 }
-- 
1.5.5.1

