java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.hbm.xml | 7 java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.java | 56 +-- java/code/src/com/redhat/rhn/domain/kickstart/KickstartFactory.java | 25 + java/code/src/com/redhat/rhn/domain/kickstart/KickstartPackage.hbm.xml | 32 + java/code/src/com/redhat/rhn/domain/kickstart/KickstartPackage.java | 170 ++++++++++ java/code/src/com/redhat/rhn/domain/kickstart/builder/KickstartBuilder.java | 18 - java/code/src/com/redhat/rhn/domain/kickstart/builder/test/KickstartBuilderTest.java | 6 java/code/src/com/redhat/rhn/domain/kickstart/test/KickstartDataTest.java | 19 - java/code/src/com/redhat/rhn/frontend/action/kickstart/EditPackagesAction.java | 37 +- java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/ProfileHandler.java | 21 - java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/software/SoftwareHandler.java | 17 - java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/software/test/SoftwareHandlerTest.java | 19 - java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/test/ProfileHandlerTest.java | 24 - java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/KickstartDataSerializer.java | 2 java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java | 6 15 files changed, 350 insertions(+), 109 deletions(-)
New commits: commit 01141f852a53f3b3f4e2d6e55ccd91478cb12209 Author: Tomas Lestach tlestach@redhat.com Date: Mon Oct 26 12:54:51 2009 +0100
527724 - fix for kickstart upgrade issue
list index according to that a list gets sorted wasn't unique after upgrade, what caused a trouble to hibernate, so the list was replaced by a ordered set
diff --git a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.hbm.xml b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.hbm.xml index d21fb86..c3ee13a 100644 --- a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.hbm.xml +++ b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.hbm.xml @@ -34,11 +34,10 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" <property name="nonChrootPost" column="nonchrootpost" not-null="false" type="yes_no" /> <property name="verboseUp2date" column="verboseup2date" not-null="false" type="yes_no" /> <property name="cobblerId" column="cobbler_id" type="string" length="64" /> - <list name="packageNames" table="rhnKickstartPackage" lazy="true"> + <set name="ksPackages" lazy="true" sort="natural" inverse="true"> <key column="kickstart_id"/> - <index column="position"/> - <many-to-many column="package_name_id" class="com.redhat.rhn.domain.rhnpackage.PackageName" /> - </list> + <one-to-many class="com.redhat.rhn.domain.kickstart.KickstartPackage" /> + </set>
<set name="cryptoKeys" table="rhnCryptoKeyKickstart" lazy="true"> <key column="ksdata_id"/> diff --git a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.java b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.java index e8c17ec..ca1cd8d 100644 --- a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.java +++ b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.java @@ -21,7 +21,7 @@ import com.redhat.rhn.domain.channel.Channel; import com.redhat.rhn.domain.common.FileList; import com.redhat.rhn.domain.kickstart.crypto.CryptoKey; import com.redhat.rhn.domain.org.Org; -import com.redhat.rhn.domain.rhnpackage.PackageName; +import com.redhat.rhn.domain.kickstart.KickstartPackage; import com.redhat.rhn.domain.token.Token; import com.redhat.rhn.domain.user.User; import com.redhat.rhn.manager.kickstart.KickstartFormatter; @@ -33,7 +33,6 @@ import org.apache.log4j.Logger; import org.cobbler.CobblerConnection; import org.cobbler.Profile;
-import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -75,7 +74,7 @@ public class KickstartData { private Set childChannels; private Set defaultRegTokens; private Set preserveFileLists; - private List<PackageName> packageNames; + private Set<KickstartPackage> ksPackages; private Collection<KickstartCommand> commands = new HashSet<KickstartCommand>(); private Set ips; // rhnKickstartIpRange private Set<KickstartScript> scripts; // rhnKickstartScript @@ -106,7 +105,7 @@ public class KickstartData { cryptoKeys = new HashSet(); defaultRegTokens = new HashSet(); preserveFileLists = new HashSet(); - packageNames = new ArrayList<PackageName>(); + ksPackages = new HashSet<KickstartPackage>(); commands = new HashSet<KickstartCommand>(); ips = new HashSet(); scripts = new HashSet<KickstartScript>(); @@ -377,7 +376,7 @@ public class KickstartData {
/** * Getter for defaultRegTokens - * @return Returns the pacakageLists. + * @return Returns the packageLists. */ public Set<Token> getDefaultRegTokens() { return defaultRegTokens; @@ -385,7 +384,7 @@ public class KickstartData {
/** * Setter for defaultRegTokens - * @param p The pacakgeLists to set. + * @param p The packageLists to set. */ public void setDefaultRegTokens(Set p) { this.defaultRegTokens = p; @@ -427,27 +426,38 @@ public class KickstartData { }
/** - * Adds a PackageName object to packageNames. - * @param p PackageName to add + * Adds a KickstartPackage object to ksPackages. + * @param p KickstartPackage to add */ - public void addPackageName(PackageName p) { - packageNames.add(p); + + public void addKsPackage(KickstartPackage kp) { + kp.setPosition((long)ksPackages.size()); + this.ksPackages.add(kp); + } + + /** + * Removes a KickstartPackage object from ksPackages. + * @param p KickstartPackage to remove + */ + + public void removeKsPackage(KickstartPackage kp) { + this.ksPackages.remove(kp); }
/** - * Getter for packageNames - * @return Returns the pacakageNames. + * Getter for ksPackages + * @return Returns the ksPackages. */ - public List<PackageName> getPackageNames() { - return packageNames; + public Set<KickstartPackage> getKsPackages() { + return ksPackages; }
/** - * Setter for packageNames - * @param p The pacakgeLists to set. + * Setter for ksPackages + * @param p The KickstartPackage set to set. */ - public void setPackageNames(List<PackageName> p) { - this.packageNames = p; + public void setKsPackages(Set<KickstartPackage> p) { + this.ksPackages = p; }
/** @@ -1215,8 +1225,8 @@ public class KickstartData { cloned.setKickstartDefaults(this.getKickstartDefaults().deepCopy(cloned)); } cloned.setOrg(this.getOrg()); - if (this.getPackageNames() != null) { - cloned.setPackageNames(new ArrayList(this.getPackageNames())); + if (this.getKsPackages() != null) { + cloned.setKsPackages(new HashSet(this.getKsPackages())); } if (this.getPreserveFileLists() != null) { cloned.setPreserveFileLists(new HashSet(this.getPreserveFileLists())); @@ -1265,7 +1275,6 @@ public class KickstartData { else { return false; } - }
/** @@ -1284,7 +1293,6 @@ public class KickstartData { return ConfigDefaults.get().getKickstartPackageName();
} -
/** * @return Returns if the post scripts should be logged. @@ -1306,7 +1314,6 @@ public class KickstartData { public Boolean getKsCfg() { return ksCfg; } -
/** * @param postLogIn The postLog to set. @@ -1328,7 +1335,6 @@ public class KickstartData { public void setKsCfg(Boolean ksCfgIn) { this.ksCfg = ksCfgIn; } -
/** * Returns the SE Linux mode associated to this kickstart profile @@ -1370,8 +1376,6 @@ public class KickstartData { return getKickstartDefaults() != null && getKickstartDefaults().getRemoteCommandFlag(); } - -
/** * @return the cobblerName diff --git a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartFactory.java b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartFactory.java index fc8255e..4e269fb 100644 --- a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartFactory.java +++ b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartFactory.java @@ -19,6 +19,7 @@ import com.redhat.rhn.common.util.FileUtils; import com.redhat.rhn.domain.kickstart.crypto.CryptoKey; import com.redhat.rhn.domain.kickstart.crypto.CryptoKeyType; import com.redhat.rhn.domain.org.Org; +import com.redhat.rhn.domain.rhnpackage.PackageName; import com.redhat.rhn.manager.kickstart.KickstartFormatter; import com.redhat.rhn.manager.kickstart.KickstartUrlHelper; import com.redhat.rhn.manager.kickstart.cobbler.CobblerXMLRPCHelper; @@ -123,7 +124,8 @@ public class KickstartFactory extends HibernateFactory { .setString("id", cobblerId) .setLong("org_id", orgIn.getId()) .uniqueResult(); - } + } + /** * Lookup a KickstartData based on a label and orgId * @param label to lookup @@ -1044,4 +1046,25 @@ public class KickstartFactory extends HibernateFactory { return custom; }
+ public static void savePackage(KickstartPackage p) { + singleton.saveObject(p); + } + + public static void removePackage(KickstartPackage p) { + singleton.removeObject(p); + } + + /** + * @param ksData KcikstartDate to lookup + * @param packageName PackageName to lookup + * @return KickstartPackge list + */ + public static List<KickstartPackage> lookupKsPackageByKsDataAndPackageName( + KickstartData ksData, PackageName packageName) { + return HibernateFactory.getSession() + .getNamedQuery("KickstartPackage.findByKickstartDataAndPackageName") + .setLong("ks_data", ksData.getId()) + .setLong("package_name", packageName.getId()) + .list(); + } } diff --git a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartPackage.hbm.xml b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartPackage.hbm.xml new file mode 100644 index 0000000..87c5cac --- /dev/null +++ b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartPackage.hbm.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE hibernate-mapping +PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" +"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> +<hibernate-mapping> + <class name="com.redhat.rhn.domain.kickstart.KickstartPackage" + table="rhnKickstartPackage"> + + <composite-id> + <key-many-to-one name="ksData" + class="com.redhat.rhn.domain.kickstart.KickstartData" + access="field" + column="kickstart_id" + /> + <key-many-to-one name="packageName" + class="com.redhat.rhn.domain.rhnpackage.PackageName" + column="package_name_id" + /> + </composite-id> + + <property name="position" column="position" not-null="true"/> + <property name="created" column="created" not-null="true" type="timestamp" insert="false" update="false"/> + <property name="modified" column="modified" not-null="true" type="timestamp" insert="false" update="false"/> + + </class> + + + <query name="KickstartPackage.findByKickstartDataAndPackageName"> + <![CDATA[from com.redhat.rhn.domain.kickstart.KickstartPackage as kp where kp.ksData = :ks_data and kp.packageName = :package_name]]> + </query> + +</hibernate-mapping> diff --git a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartPackage.java b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartPackage.java new file mode 100644 index 0000000..c00bfd0 --- /dev/null +++ b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartPackage.java @@ -0,0 +1,170 @@ +/** + * Copyright (c) 2008 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.domain.kickstart; + +import java.util.Date; +import java.io.Serializable; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import com.redhat.rhn.domain.rhnpackage.PackageName; + +/** + * KickstartPackage + * @version $Rev$ + */ +public class KickstartPackage + implements Serializable, Comparable<KickstartPackage> { + + private Long position; + private Date created; + private Date modified; + private KickstartData ksData; + private PackageName packageName; + + /** + * + */ + public KickstartPackage() { + super(); + } + + /** + * @param ksdata + * @param package_name_id + */ + public KickstartPackage(KickstartData ksdata, PackageName package_name_id) { + super(); + this.ksData = ksdata; + this.packageName = package_name_id; + } + + /** + * @return Returns the position. + */ + public Long getPosition() { + return position; + } + + /** + * @param position The position to set. + */ + public void setPosition(Long position) { + this.position = position; + } + + /** + * @return Returns the created. + */ + public Date getCreated() { + return created; + } + + /** + * @param created The created to set. + */ + public void setCreated(Date created) { + this.created = created; + } + + /** + * @return Returns the modified. + */ + public Date getModified() { + return modified; + } + + /** + * @param modified The modified to set. + */ + public void setModified(Date modified) { + this.modified = modified; + } + + /** + * @return Returns the ksdata. + */ + public KickstartData getKsData() { + return ksData; + } + + /** + * @param ksdata The ksdata to set. + */ + public void setKsData(KickstartData ksdata) { + this.ksData = ksdata; + } + + /** + * @return Returns the packageName. + */ + public PackageName getPackageName() { + return packageName; + } + + /** + * @param pn The packageName to set. + */ + public void setPackageName(PackageName pn) { + this.packageName = pn; + } + + public int compareTo(KickstartPackage that) { + + final int EQUAL = 0; + + if (this.equals(that)) { + return EQUAL; + } + + int comparism = this.getKsData().getId().compareTo(that.getKsData().getId()); + if (EQUAL != comparism) { + return comparism; + } + + comparism = this.getPosition().compareTo(that.getPosition()); + if (EQUAL != comparism){ + return comparism; + } + return this.getPackageName().compareTo(that.getPackageName()); + } + + /** + * {@inheritDoc} + */ + public boolean equals(final Object other) { + if (!(other instanceof KickstartPackage)) { + return false; + } + KickstartPackage that = (KickstartPackage) other; + return this.hashCode()== other.hashCode(); + } + + /** + * {@inheritDoc} + */ + public int hashCode() { + return new HashCodeBuilder() + .append(getKsData().getId()) + .append(getPosition()) + .append(getPackageName()) + .toHashCode(); + } + + public String toString() { + return "packageName: ".concat(this.getKsData().getId().toString()) + .concat(", ").concat(this.getPosition().toString()) + .concat(", ").concat(this.getPackageName().getName()); + } +} diff --git a/java/code/src/com/redhat/rhn/domain/kickstart/builder/KickstartBuilder.java b/java/code/src/com/redhat/rhn/domain/kickstart/builder/KickstartBuilder.java index b8f1b7f..046bb14 100644 --- a/java/code/src/com/redhat/rhn/domain/kickstart/builder/KickstartBuilder.java +++ b/java/code/src/com/redhat/rhn/domain/kickstart/builder/KickstartBuilder.java @@ -22,6 +22,7 @@ import com.redhat.rhn.domain.kickstart.KickstartCommandName; import com.redhat.rhn.domain.kickstart.KickstartData; import com.redhat.rhn.domain.kickstart.KickstartDefaults; import com.redhat.rhn.domain.kickstart.KickstartFactory; +import com.redhat.rhn.domain.kickstart.KickstartPackage; import com.redhat.rhn.domain.kickstart.KickstartRawData; import com.redhat.rhn.domain.kickstart.KickstartScript; import com.redhat.rhn.domain.kickstart.KickstartVirtualizationType; @@ -38,7 +39,6 @@ import com.redhat.rhn.manager.kickstart.KickstartWizardHelper; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger;
-import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -209,7 +209,7 @@ public class KickstartBuilder { "%packages tag."); }
- List<PackageName> packageNames = new ArrayList<PackageName>(); + Set<KickstartPackage> ksPackagesSet = new HashSet<KickstartPackage>();
for (Iterator<String> it = lines.iterator(); it.hasNext();) { String currentLine = (String)it.next(); @@ -219,10 +219,10 @@ public class KickstartBuilder { }
PackageName pn = PackageFactory.lookupOrCreatePackageByName(currentLine); - packageNames.add(pn); + ksPackagesSet.add(new KickstartPackage(ksData, pn)); }
- ksData.getPackageNames().addAll(packageNames); + ksData.getKsPackages().addAll(ksPackagesSet); }
/** @@ -349,8 +349,8 @@ public class KickstartBuilder { KickstartData ksdata = new KickstartData(); setupBasicInfo(label, ksdata, tree, virtualizationType);
- if (ksdata.getPackageNames() == null) { - ksdata.setPackageNames(new ArrayList<PackageName>()); + if (ksdata.getKsPackages() == null) { + ksdata.setKsPackages(new HashSet<KickstartPackage>()); }
buildCommands(ksdata, parser.getOptionLines(), tree, kickstartHost); @@ -530,11 +530,11 @@ public class KickstartBuilder { setPartitionScheme(cmd, ksdata); cmd.processSkipKey(ksdata); cmd.processRepos(ksdata); - if (ksdata.getPackageNames() == null) { - ksdata.setPackageNames(new ArrayList<PackageName>()); + if (ksdata.getKsPackages() == null) { + ksdata.setKsPackages(new HashSet<KickstartPackage>()); } PackageName pn = cmd.findPackageName("@ Base"); - ksdata.getPackageNames().add(pn); + ksdata.addKsPackage(new KickstartPackage(ksdata, pn)); cmd.store(ksdata); return ksdata;
diff --git a/java/code/src/com/redhat/rhn/domain/kickstart/builder/test/KickstartBuilderTest.java b/java/code/src/com/redhat/rhn/domain/kickstart/builder/test/KickstartBuilderTest.java index c519d0b..4ac4fdb 100644 --- a/java/code/src/com/redhat/rhn/domain/kickstart/builder/test/KickstartBuilderTest.java +++ b/java/code/src/com/redhat/rhn/domain/kickstart/builder/test/KickstartBuilderTest.java @@ -195,7 +195,7 @@ public class KickstartBuilderTest extends BaseTestCaseWithUser {
KickstartData ksData = createBareKickstartData(); builder.buildPackages(ksData, lines); - assertEquals(6, ksData.getPackageNames().size()); + assertEquals(6, ksData.getKsPackages().size()); }
public void testBuidEmptyPackages() throws Exception { @@ -205,7 +205,7 @@ public class KickstartBuilderTest extends BaseTestCaseWithUser { List<String> lines = new LinkedList<String>(); KickstartData ksData = createBareKickstartData(); builder.buildPackages(ksData, lines); - assertEquals(0, ksData.getPackageNames().size()); + assertEquals(0, ksData.getKsPackages().size()); }
public void testBuildPreScripts() throws Exception { @@ -332,7 +332,7 @@ public class KickstartBuilderTest extends BaseTestCaseWithUser { KickstartData ksData = builder.createFromParser(parser, "mykslabel", KickstartVirtualizationType.XEN_PARAVIRT, tree, null); assertEquals(19, ksData.getCommands().size()); - assertEquals(100, ksData.getPackageNames().size()); + assertEquals(100, ksData.getKsPackages().size()); assertEquals(1, ksData.getScripts().size());
KickstartScript preScript = ksData.getScripts().iterator().next(); diff --git a/java/code/src/com/redhat/rhn/domain/kickstart/test/KickstartDataTest.java b/java/code/src/com/redhat/rhn/domain/kickstart/test/KickstartDataTest.java index a3a5d08..ba27013 100644 --- a/java/code/src/com/redhat/rhn/domain/kickstart/test/KickstartDataTest.java +++ b/java/code/src/com/redhat/rhn/domain/kickstart/test/KickstartDataTest.java @@ -31,6 +31,7 @@ import com.redhat.rhn.domain.kickstart.KickstartDefaultRegToken; import com.redhat.rhn.domain.kickstart.KickstartDefaults; import com.redhat.rhn.domain.kickstart.KickstartFactory; import com.redhat.rhn.domain.kickstart.KickstartInstallType; +import com.redhat.rhn.domain.kickstart.KickstartPackage; import com.redhat.rhn.domain.kickstart.KickstartPreserveFileList; import com.redhat.rhn.domain.kickstart.KickstartScript; import com.redhat.rhn.domain.kickstart.KickstartVirtualizationType; @@ -130,7 +131,7 @@ public class KickstartDataTest extends BaseTestCaseWithUser { KickstartData k = createTestKickstartData(user.getOrg()); assertNotNull(k); assertNotNull(k.getId()); - assertNotNull(k.getPackageNames()); + assertNotNull(k.getKsPackages());
KickstartData k2 = lookupById(user.getOrg(), k.getId()); assertEquals(k2.getLabel(), k.getLabel()); @@ -275,7 +276,7 @@ public class KickstartDataTest extends BaseTestCaseWithUser { KickstartData ksd = createKickstartWithOptions(user.getOrg()); assertNotNull(ksd); assertNotNull(ksd.getId()); - assertNotNull(ksd.getPackageNames()); + assertNotNull(ksd.getKsPackages()); KickstartFactory.saveKickstartData(ksd); flushAndEvict(ksd);
@@ -463,8 +464,8 @@ public class KickstartDataTest extends BaseTestCaseWithUser {
k.setKernelParams(KERNEL_PARAMS);
- k.addPackageName(pn); - k.addPackageName(pn2); + k.addKsPackage(new KickstartPackage(k,pn)); + k.addKsPackage(new KickstartPackage(k,pn2));
@@ -691,7 +692,7 @@ public class KickstartDataTest extends BaseTestCaseWithUser { verifySet(cloned.getDefaultRegTokens(), k.getDefaultRegTokens(), Token.class);
verifySet(cloned.getLogvols(), k.getLogvols(), KickstartCommand.class); - verifyList(cloned.getPackageNames(), k.getPackageNames(), PackageName.class); + verifySet(cloned.getKsPackages(), k.getKsPackages(), PackageName.class); verifySet(cloned.getPreserveFileLists(), k.getPreserveFileLists(), FileList.class); verifySet(cloned.getRaids(), k.getRaids(), KickstartCommand.class); verifySet(cloned.getVolgroups(), k.getVolgroups(), KickstartCommand.class); @@ -712,7 +713,7 @@ public class KickstartDataTest extends BaseTestCaseWithUser { k.setCommands(null); k.setDefaultRegTokens(null); k.setIps(null); - k.setPackageNames(null); + k.setKsPackages(null); k.setPreserveFileLists(null); k.setScripts(null); // Now we deep copy it, save and reload @@ -728,7 +729,8 @@ public class KickstartDataTest extends BaseTestCaseWithUser { assertTrue("Not instance of: " + clazz.getName(), clazz.isInstance(cloned.iterator().next())); } - + + /* private void verifyList(List cloned, List orig, Class clazz) { assertTrue("orig doesnt have any: " + clazz.getName(), orig.size() > 0); assertTrue("cloned doesnt have any: " + clazz.getName(), cloned.size() > 0); @@ -736,7 +738,8 @@ public class KickstartDataTest extends BaseTestCaseWithUser { assertTrue("Not instance of: " + clazz.getName(), clazz.isInstance(cloned.iterator().next())); } - + */ + public void testISRhelRevMethods() throws Exception {
KickstartData k = createKickstartWithChannel(user.getOrg()); diff --git a/java/code/src/com/redhat/rhn/frontend/action/kickstart/EditPackagesAction.java b/java/code/src/com/redhat/rhn/frontend/action/kickstart/EditPackagesAction.java index d910996..0f3c88e 100644 --- a/java/code/src/com/redhat/rhn/frontend/action/kickstart/EditPackagesAction.java +++ b/java/code/src/com/redhat/rhn/frontend/action/kickstart/EditPackagesAction.java @@ -15,6 +15,7 @@ package com.redhat.rhn.frontend.action.kickstart;
import com.redhat.rhn.domain.kickstart.KickstartData; +import com.redhat.rhn.domain.kickstart.KickstartPackage; import com.redhat.rhn.domain.kickstart.KickstartFactory; import com.redhat.rhn.domain.rhnpackage.PackageFactory; import com.redhat.rhn.domain.rhnpackage.PackageName; @@ -27,9 +28,9 @@ import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.DynaActionForm;
-import java.util.ArrayList; +import java.util.HashSet; import java.util.Iterator; -import java.util.List; +import java.util.Set; import java.util.StringTokenizer;
import javax.servlet.http.HttpServletRequest; @@ -118,16 +119,13 @@ public class EditPackagesAction extends RhnAction { }
private void prepareForm(KickstartData ksdata, DynaActionForm form) { - List packageNames = ksdata.getPackageNames(); - if (packageNames != null && packageNames.size() > 0) { + Set ksPackages = ksdata.getKsPackages(); + if (ksPackages != null && ksPackages.size() > 0) { StringBuffer buf = new StringBuffer(); - StringBuffer buf2 = new StringBuffer(); - int i = 0; - for (Iterator iter = packageNames.iterator(); iter.hasNext();) { - PackageName pn = (PackageName) iter.next(); - buf.append(pn.getName()); + for (Iterator iter = ksPackages.iterator(); iter.hasNext();) { + KickstartPackage pn = (KickstartPackage)iter.next(); + buf.append(pn.getPackageName().getName()); buf.append("\n"); - i++; } form.set(PACKAGE_LIST, buf.toString()); } @@ -136,12 +134,14 @@ public class EditPackagesAction extends RhnAction {
private void transferEdits(KickstartData ksdata, DynaActionForm form, RequestContext ctx) { - List packageNames = ksdata.getPackageNames(); - if (packageNames == null) { - packageNames = new ArrayList(); - ksdata.setPackageNames(packageNames); + + // first clear the kickstart packages set + Set ksPackages = ksdata.getKsPackages(); + for (Iterator iter = ksPackages.iterator(); iter.hasNext();) { + KickstartFactory.removePackage((KickstartPackage)iter.next()); // remove from DB + iter.remove(); // remove from collection } - packageNames.clear(); + String newPackages = form.getString(PACKAGE_LIST); if (newPackages != null && newPackages.length() > 0) { for (StringTokenizer strtok = new StringTokenizer(newPackages, "\n"); @@ -152,7 +152,12 @@ public class EditPackagesAction extends RhnAction { continue; } PackageName pn = PackageFactory.lookupOrCreatePackageByName(pkg); - packageNames.add(pn); + KickstartPackage ks_p = new KickstartPackage(ksdata,pn); + + if (KickstartFactory.lookupKsPackageByKsDataAndPackageName(ksdata, pn).isEmpty()) { + ksdata.addKsPackage(ks_p); // save to collection + KickstartFactory.savePackage(ks_p); // save to DB + } } } KickstartFactory.saveKickstartData(ksdata); diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/ProfileHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/ProfileHandler.java index df83b8a..61feda3 100644 --- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/ProfileHandler.java +++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/ProfileHandler.java @@ -27,6 +27,7 @@ import com.redhat.rhn.domain.kickstart.KickstartData; import com.redhat.rhn.domain.kickstart.KickstartDefaults; import com.redhat.rhn.domain.kickstart.KickstartFactory; import com.redhat.rhn.domain.kickstart.KickstartIpRange; +import com.redhat.rhn.domain.kickstart.KickstartPackage; import com.redhat.rhn.domain.kickstart.KickstartScript; import com.redhat.rhn.domain.kickstart.KickstartableTree; import com.redhat.rhn.domain.org.Org; @@ -823,23 +824,23 @@ public class ProfileHandler extends BaseHandler { loggedInUser.getOrg().getId());
// Set operations to determine deltas - Set<PackageName> onlyInProfile1 = - new HashSet<PackageName>(profile1.getPackageNames()); - onlyInProfile1.removeAll(profile2.getPackageNames()); + Set<KickstartPackage> onlyInProfile1 = + new HashSet<KickstartPackage>(profile1.getKsPackages()); + onlyInProfile1.removeAll(profile2.getKsPackages());
- Set<PackageName> onlyInProfile2 = - new HashSet<PackageName>(profile2.getPackageNames()); - onlyInProfile2.removeAll(profile1.getPackageNames()); + Set<KickstartPackage> onlyInProfile2 = + new HashSet<KickstartPackage>(profile2.getKsPackages()); + onlyInProfile2.removeAll(profile1.getKsPackages());
// Convert the remaining into strings for return Set<String> profile1PackageNameStrings = new HashSet<String>(onlyInProfile1.size()); - for (PackageName packageName : onlyInProfile1) { - profile1PackageNameStrings.add(packageName.getName()); + for (KickstartPackage ksPackage : onlyInProfile1) { + profile1PackageNameStrings.add(ksPackage.getPackageName().getName()); }
Set<String> profile2PackageNameStrings = new HashSet<String>(onlyInProfile2.size()); - for (PackageName packageName : onlyInProfile2) { - profile2PackageNameStrings.add(packageName.getName()); + for (KickstartPackage ksPackage : onlyInProfile2) { + profile2PackageNameStrings.add(ksPackage.getPackageName().getName()); }
// Package for return diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/software/SoftwareHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/software/SoftwareHandler.java index d8fd6ad..db1e611 100644 --- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/software/SoftwareHandler.java +++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/software/SoftwareHandler.java @@ -18,6 +18,7 @@ import com.redhat.rhn.common.localization.LocalizationService; import com.redhat.rhn.common.security.PermissionException; import com.redhat.rhn.domain.kickstart.KickstartData; import com.redhat.rhn.domain.kickstart.KickstartFactory; +import com.redhat.rhn.domain.kickstart.KickstartPackage; import com.redhat.rhn.domain.org.Org; import com.redhat.rhn.domain.rhnpackage.PackageFactory; import com.redhat.rhn.domain.rhnpackage.PackageName; @@ -28,6 +29,7 @@ import com.redhat.rhn.frontend.xmlrpc.kickstart.XmlRpcKickstartHelper;
import java.util.ArrayList; import java.util.List; +import java.util.Set;
/** * SoftwareHandler @@ -57,8 +59,8 @@ public class SoftwareHandler extends BaseHandler { checkKickstartPerms(user); KickstartData ksdata = lookupKsData(ksLabel, user.getOrg()); List<String> list = new ArrayList<String>(); - for (PackageName p : ksdata.getPackageNames()) { - list.add(p.getName()); + for (KickstartPackage p : ksdata.getKsPackages()) { + list.add(p.getPackageName().getName()); } return list; } @@ -86,11 +88,11 @@ public class SoftwareHandler extends BaseHandler { User user = getLoggedInUser(sessionKey); checkKickstartPerms(user); KickstartData ksdata = lookupKsData(ksLabel, user.getOrg()); - List<PackageName> packages = ksdata.getPackageNames(); + Set<KickstartPackage> packages = ksdata.getKsPackages(); packages.clear(); for (String p : packageList) { PackageName pn = PackageFactory.lookupOrCreatePackageByName(p); - packages.add(pn); + packages.add(new KickstartPackage(ksdata,pn)); } KickstartFactory.saveKickstartData(ksdata); return 1; @@ -118,11 +120,12 @@ public class SoftwareHandler extends BaseHandler { User user = getLoggedInUser(sessionKey); checkKickstartPerms(user); KickstartData ksdata = lookupKsData(ksLabel, user.getOrg()); - List<PackageName> packages = ksdata.getPackageNames(); + Set<KickstartPackage> packages = ksdata.getKsPackages(); for (String p : packageList) { PackageName pn = PackageFactory.lookupOrCreatePackageByName(p); - if (!packages.contains(pn)) { - packages.add(pn); + KickstartPackage ks_p = new KickstartPackage(ksdata, pn); + if (!packages.contains(ks_p)) { + packages.add(ks_p); } } KickstartFactory.saveKickstartData(ksdata); diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/software/test/SoftwareHandlerTest.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/software/test/SoftwareHandlerTest.java index 1bcd982..ccf9536 100644 --- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/software/test/SoftwareHandlerTest.java +++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/software/test/SoftwareHandlerTest.java @@ -15,6 +15,7 @@ package com.redhat.rhn.frontend.xmlrpc.kickstart.profile.software.test;
import com.redhat.rhn.domain.kickstart.KickstartData; +import com.redhat.rhn.domain.kickstart.KickstartPackage; import com.redhat.rhn.domain.kickstart.test.KickstartDataTest; import com.redhat.rhn.domain.rhnpackage.PackageName; import com.redhat.rhn.frontend.xmlrpc.kickstart.profile.software.SoftwareHandler; @@ -39,8 +40,8 @@ public class SoftwareHandlerTest extends BaseHandlerTestCase { List<String> packages = handler.getSoftwareList(adminKey, ksProfile.getLabel());
// Note: the test profile created should have had at least 1 package listed - assertTrue(ksProfile.getPackageNames().size() > 0); - assertEquals(ksProfile.getPackageNames().size(), packages.size()); + assertTrue(ksProfile.getKsPackages().size() > 0); + assertEquals(ksProfile.getKsPackages().size(), packages.size()); }
public void testSetSoftwareList() throws Exception { @@ -53,16 +54,16 @@ public class SoftwareHandlerTest extends BaseHandlerTestCase { int result = handler.setSoftwareList(adminKey, ksProfile.getLabel(), packages);
boolean pkgFound = false; - for (Iterator<PackageName> itr = ksProfile.getPackageNames().iterator(); + for (Iterator<KickstartPackage> itr = ksProfile.getKsPackages().iterator(); itr.hasNext();) { - PackageName pkg = (PackageName) itr.next(); - if (pkg.getName().equals("gcc")) { + KickstartPackage pkg = (KickstartPackage) itr.next(); + if (pkg.getPackageName().getName().equals("gcc")) { pkgFound = true;
} } assertEquals(1, result); - assertEquals(ksProfile.getPackageNames().size(), 1); + assertEquals(ksProfile.getKsPackages().size(), 1); assertEquals(pkgFound, true); }
@@ -70,7 +71,7 @@ public class SoftwareHandlerTest extends BaseHandlerTestCase {
KickstartData ksProfile = KickstartDataTest.createKickstartWithProfile(admin);
- int numPackagesInitial = ksProfile.getPackageNames().size(); + int numPackagesInitial = ksProfile.getKsPackages().size();
List<String> packages = new ArrayList<String>(); packages.add("bash"); @@ -80,7 +81,7 @@ public class SoftwareHandlerTest extends BaseHandlerTestCase {
assertEquals(1, result); assertEquals(numPackagesInitial + packages.size(), - ksProfile.getPackageNames().size()); + ksProfile.getKsPackages().size());
// attempt to add the same packages again and verify that the list did not change // (i.e. we don't allow duplicates) @@ -88,6 +89,6 @@ public class SoftwareHandlerTest extends BaseHandlerTestCase {
assertEquals(1, result); assertEquals(numPackagesInitial + packages.size(), - ksProfile.getPackageNames().size()); + ksProfile.getKsPackages().size()); } } diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/test/ProfileHandlerTest.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/test/ProfileHandlerTest.java index ca80dac..870ec17 100644 --- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/test/ProfileHandlerTest.java +++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/test/ProfileHandlerTest.java @@ -22,6 +22,7 @@ import com.redhat.rhn.domain.kickstart.KickstartCommandName; import com.redhat.rhn.domain.kickstart.KickstartData; import com.redhat.rhn.domain.kickstart.KickstartFactory; import com.redhat.rhn.domain.kickstart.KickstartIpRange; +import com.redhat.rhn.domain.kickstart.KickstartPackage; import com.redhat.rhn.domain.kickstart.KickstartScript; import com.redhat.rhn.domain.kickstart.KickstartVirtualizationType; import com.redhat.rhn.domain.kickstart.KickstartableTree; @@ -185,8 +186,7 @@ public class ProfileHandlerTest extends BaseHandlerTestCase {
public void testDownloadKickstart() throws Exception { KickstartData ks1 = KickstartDataTest.createKickstartWithProfile(admin); - ks1.addPackageName(PackageFactory.lookupOrCreatePackageByName( - "blahPackage")); + ks1.addKsPackage(new KickstartPackage(ks1, PackageFactory.lookupOrCreatePackageByName("blahPackage")));
ActivationKey key = ActivationKeyTest.createTestActivationKey(admin); ks1.addDefaultRegToken(key.getToken()); @@ -449,20 +449,20 @@ public class ProfileHandlerTest extends BaseHandlerTestCase {
// Clear any packages on the profile so we have a known starting state KickstartData ks1 = KickstartDataTest.createKickstartWithProfile(admin); - ks1.getPackageNames().clear(); + ks1.getKsPackages().clear();
KickstartData ks2 = KickstartDataTest.createKickstartWithProfile(admin); - ks2.getPackageNames().clear(); + ks2.getKsPackages().clear();
Package package1 = PackageTest.createTestPackage(admin.getOrg()); Package package2 = PackageTest.createTestPackage(admin.getOrg()); Package package3 = PackageTest.createTestPackage(admin.getOrg());
- ks1.addPackageName(package1.getPackageName()); - ks1.addPackageName(package2.getPackageName()); + ks1.addKsPackage(new KickstartPackage(ks1,package1.getPackageName())); + ks1.addKsPackage(new KickstartPackage(ks1,package2.getPackageName()));
- ks2.addPackageName(package1.getPackageName()); - ks2.addPackageName(package3.getPackageName()); + ks2.addKsPackage(new KickstartPackage(ks2,package1.getPackageName())); + ks2.addKsPackage(new KickstartPackage(ks2,package3.getPackageName()));
KickstartFactory.saveKickstartData(ks1); KickstartFactory.saveKickstartData(ks2); @@ -494,11 +494,11 @@ public class ProfileHandlerTest extends BaseHandlerTestCase {
// Clear any packages on the profile so we have a known starting state KickstartData ks1 = KickstartDataTest.createKickstartWithProfile(admin); - ks1.getPackageNames().clear(); + ks1.getKsPackages().clear();
Package package1 = PackageTest.createTestPackage(admin.getOrg());
- ks1.addPackageName(package1.getPackageName()); + ks1.addKsPackage(new KickstartPackage(ks1,package1.getPackageName()));
KickstartFactory.saveKickstartData(ks1);
@@ -519,10 +519,10 @@ public class ProfileHandlerTest extends BaseHandlerTestCase {
// Clear any packages on the profile so we have a known starting state KickstartData ks1 = KickstartDataTest.createKickstartWithProfile(admin); - ks1.getPackageNames().clear(); + ks1.getKsPackages().clear();
KickstartData ks2 = KickstartDataTest.createKickstartWithProfile(admin); - ks2.getPackageNames().clear(); + ks2.getKsPackages().clear();
KickstartFactory.saveKickstartData(ks1); KickstartFactory.saveKickstartData(ks2); diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/KickstartDataSerializer.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/KickstartDataSerializer.java index 23f8353..e355330 100644 --- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/KickstartDataSerializer.java +++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/KickstartDataSerializer.java @@ -63,7 +63,7 @@ public class KickstartDataSerializer implements XmlRpcCustomSerializer { helper.add("kernelParams", kd.getKernelParams()); helper.add("nonChrootPost", kd.getNonChrootPost()); helper.add("verboseUp2date", kd.getVerboseUp2date()); - helper.add("packageNames", kd.getPackageNames()); + helper.add("packageNames", kd.getKsPackages()); helper.add("commands", kd.getCommands()); helper.add("defaultRegTokens", kd.getDefaultRegTokens()); helper.add("ips", kd.getIps()); diff --git a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java index 87ff227..7b399f0 100644 --- a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java +++ b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java @@ -19,6 +19,7 @@ import com.redhat.rhn.common.conf.ConfigDefaults; import com.redhat.rhn.domain.channel.Channel; import com.redhat.rhn.domain.kickstart.KickstartCommand; import com.redhat.rhn.domain.kickstart.KickstartData; +import com.redhat.rhn.domain.kickstart.KickstartPackage; import com.redhat.rhn.domain.kickstart.KickstartScript; import com.redhat.rhn.domain.kickstart.KickstartSession; import com.redhat.rhn.domain.kickstart.KickstartVirtualizationType; @@ -27,7 +28,6 @@ import com.redhat.rhn.domain.kickstart.cobbler.CobblerSnippet; import com.redhat.rhn.domain.kickstart.crypto.CryptoKey; import com.redhat.rhn.domain.rhnpackage.Package; import com.redhat.rhn.domain.rhnpackage.PackageFactory; -import com.redhat.rhn.domain.rhnpackage.PackageName; import com.redhat.rhn.domain.token.ActivationKey; import com.redhat.rhn.domain.token.ActivationKeyFactory; import com.redhat.rhn.domain.token.Token; @@ -443,8 +443,8 @@ public class KickstartFormatter { */ private String getPackages() { StringBuffer buf = new StringBuffer(); - for (Iterator itr = ksdata.getPackageNames().iterator(); itr.hasNext();) { - buf.append(((PackageName)itr.next()).getName() + NEWLINE); + for (Iterator itr = ksdata.getKsPackages().iterator(); itr.hasNext();) { + buf.append(((KickstartPackage)itr.next()).getPackageName().getName() + NEWLINE); } if (KickstartVirtualizationType.paraHost().equals(ksdata.getKickstartDefaults(). getVirtualizationType())) {
spacewalk-commits@lists.fedorahosted.org