java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.hbm.xml | 3 + java/code/src/com/redhat/rhn/domain/kickstart/KickstartFactory.java | 19 ++++++++++ java/code/src/com/redhat/rhn/domain/kickstart/builder/KickstartBuilder.java | 11 +++-- java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml | 2 - 4 files changed, 29 insertions(+), 6 deletions(-)
New commits: commit 0dbf215f788a7294d3bf2a21bbe27f859bd0be91 Author: Tomas Lestach tlestach@redhat.com Date: Thu Oct 18 10:06:15 2012 +0200
822834 - do not allow creating kickstart profiles that differ from existing ones just by case
due to cobbler behavior that converts the kickstart profiles to lowercase
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 7c3eab1..2f88292 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 @@ -99,6 +99,9 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" <query name="KickstartData.findByIdAndOrg"> <![CDATA[from com.redhat.rhn.domain.kickstart.KickstartData as t where t.id = :id and t.org = :org_id]]> </query> + <query name="KickstartData.findByCILabelAndOrg"> + <![CDATA[from com.redhat.rhn.domain.kickstart.KickstartData as t where LOWER(t.label) = LOWER(:label) and t.org = :org_id]]> + </query> <query name="KickstartData.findByLabelAndOrg"> <![CDATA[from com.redhat.rhn.domain.kickstart.KickstartData as t where t.label = :label and t.org = :org_id]]> </query> 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 c2c6f66..a328cd4 100644 --- a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartFactory.java +++ b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartFactory.java @@ -146,6 +146,25 @@ public class KickstartFactory extends HibernateFactory { }
/** + * Lookup a KickstartData based on a case insensitive label and orgId + * This is needed due to the cobbler converts the kickstart profiles to lowecase + * @param label to lookup + * @param orgId who owns KickstartData + * @return KickstartData if found, null if not + */ + public static KickstartData lookupKickstartDataByCILabelAndOrgId( + String label, Long orgId) { + if (StringUtils.isBlank(label)) { + throw new IllegalArgumentException("kickstartLabel cannot be null"); + } + return (KickstartData) HibernateFactory.getSession(). + getNamedQuery("KickstartData.findByCILabelAndOrg") + .setString("label", label) + .setLong("org_id", orgId.longValue()) + .uniqueResult(); + } + + /** * Lookup a KickstartData based on a label * @param label to lookup * @return KickstartData if found, null if not 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 2173c16..d713b03 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 @@ -391,9 +391,9 @@ public class KickstartBuilder { * @param label the Ks label * @return checks for duplicate labels */ - private boolean labelAlreadyExists(String label) { - return (KickstartFactory. - lookupKickstartDataByLabelAndOrgId(label, user.getOrg().getId()) != null); + private KickstartData labelAlreadyExists(String label) { + return KickstartFactory. + lookupKickstartDataByCILabelAndOrgId(label, user.getOrg().getId()); }
/** @@ -406,8 +406,9 @@ public class KickstartBuilder { ValidatorException.raiseException("kickstart.details.nolabel", MIN_KS_LABEL_LENGTH); } - if (labelAlreadyExists(label)) { - ValidatorException.raiseException("kickstart.error.labelexists"); + KickstartData existing = labelAlreadyExists(label); + if (existing != null) { + ValidatorException.raiseException("kickstart.error.labelexists", existing.getLabel()); } if (!isLabelValid(label)) { ValidatorException.raiseException("kickstart.error.invalidlabel", diff --git a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml index 5ce6f57..5b4f5bb 100644 --- a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml +++ b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml @@ -1840,7 +1840,7 @@ available for this kickstart profile to function properly. </context-group> </trans-unit> <trans-unit id="kickstart.error.labelexists"> - <source>Kickstart label already exists. Please choose a unique kickstart label.</source> + <source>Kickstart label already exists: '{0}'. Please choose a unique kickstart label.</source> <context-group name="ctx"> <context context-type="sourcefile">/rhn/kickstart/KickstartDetailsEdit</context> </context-group>
spacewalk-commits@lists.fedorahosted.org