diff --git a/src/main/java/org/olat/modules/qpool/QPoolService.java b/src/main/java/org/olat/modules/qpool/QPoolService.java index d831f22642840612843f1e9f43958c5b2e0d90b7..5d9e52fadddecf82991caf76378fecc02b64a19b 100644 --- a/src/main/java/org/olat/modules/qpool/QPoolService.java +++ b/src/main/java/org/olat/modules/qpool/QPoolService.java @@ -202,5 +202,7 @@ public interface QPoolService { public QLicense updateLicense(QLicense license); + public boolean deleteLicense(QLicense license); + } diff --git a/src/main/java/org/olat/modules/qpool/manager/QLicenseDAO.java b/src/main/java/org/olat/modules/qpool/manager/QLicenseDAO.java index aaa2556ae555c5b0c8867d810e3ad027dc2327ad..53b36b37954a5980c064d71fcb5faaf8f21bc1dd 100644 --- a/src/main/java/org/olat/modules/qpool/manager/QLicenseDAO.java +++ b/src/main/java/org/olat/modules/qpool/manager/QLicenseDAO.java @@ -121,13 +121,28 @@ public class QLicenseDAO implements ApplicationListener<ContextRefreshedEvent> { public boolean delete(QLicense license) { QLicense reloadLicense = loadById(license.getKey()); - if(reloadLicense.isDeletable()) { - dbInstance.getCurrentEntityManager().remove(reloadLicense); - return true; + if(reloadLicense != null && reloadLicense.isDeletable()) { + int used = countItemUsing(reloadLicense); + if(used == 0) { + dbInstance.getCurrentEntityManager().remove(reloadLicense); + return true; + } + return false; } return false; } + public int countItemUsing(QLicense license) { + StringBuilder sb = new StringBuilder(); + sb.append("select count(item) from questionitem item where item.license.key=:licenseKey"); + List<Number> count = dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), Number.class) + .setParameter("licenseKey", license.getKey()) + .getResultList(); + + return count == null || count.isEmpty() || count.get(0) == null ? 0 : count.get(0).intValue(); + } + public List<QLicense> getLicenses() { return dbInstance.getCurrentEntityManager() .createNamedQuery("loadQLicenses", QLicense.class) diff --git a/src/main/java/org/olat/modules/qpool/manager/QuestionPoolServiceImpl.java b/src/main/java/org/olat/modules/qpool/manager/QuestionPoolServiceImpl.java index 363d451201e4ceb9997b6ae8d6c45e6d565ea551..d1c14ce42a3fa0030a96c82a216f79c48b98593d 100644 --- a/src/main/java/org/olat/modules/qpool/manager/QuestionPoolServiceImpl.java +++ b/src/main/java/org/olat/modules/qpool/manager/QuestionPoolServiceImpl.java @@ -760,6 +760,11 @@ public class QuestionPoolServiceImpl implements QPoolService { return qpoolLicenseDao.update(license); } + @Override + public boolean deleteLicense(QLicense license) { + return qpoolLicenseDao.delete(license); + } + @Override public List<TaxonomyLevel> getTaxonomyLevels() { return taxonomyLevelDao.loadAllLevels(); diff --git a/src/main/java/org/olat/modules/qpool/ui/admin/QLicensesAdminController.java b/src/main/java/org/olat/modules/qpool/ui/admin/QLicensesAdminController.java index 1041d9cd247edbc7e49361175d6653c3213fd819..27499a78cf5515d50fe6334a5ad606436785b1b0 100644 --- a/src/main/java/org/olat/modules/qpool/ui/admin/QLicensesAdminController.java +++ b/src/main/java/org/olat/modules/qpool/ui/admin/QLicensesAdminController.java @@ -136,8 +136,8 @@ public class QLicensesAdminController extends FormBasicController { cleanUp(); } else if(source == confirmDeleteCtrl) { if(DialogBoxUIFactory.isOkEvent(event) || DialogBoxUIFactory.isYesEvent(event)) { - QLicense type = (QLicense)confirmDeleteCtrl.getUserObject(); - doDelete(ureq, type); + QLicense license = (QLicense)confirmDeleteCtrl.getUserObject(); + doDelete(license); } } else if(source == cmc) { cleanUp(); @@ -164,9 +164,13 @@ public class QLicensesAdminController extends FormBasicController { confirmDeleteCtrl.setUserObject(type); } - private void doDelete(UserRequest ureq, QLicense type) { - //qpoolService.deldeletePool(pool); - reloadModel(); + private void doDelete(QLicense license) { + if(qpoolService.deleteLicense(license)) { + reloadModel(); + showInfo("item.license.deleted"); + } else { + showError("item.license.notdeleted"); + } } private void doEdit(UserRequest ureq, QLicense license) { diff --git a/src/main/java/org/olat/modules/qpool/ui/admin/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/qpool/ui/admin/_i18n/LocalStrings_de.properties index 3b5c81be41aa50da309c96d2f49a092a7e585929..6bd86003b36291ae8a7666ae24463fbd71f59f80 100644 --- a/src/main/java/org/olat/modules/qpool/ui/admin/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/modules/qpool/ui/admin/_i18n/LocalStrings_de.properties @@ -19,6 +19,8 @@ delete.type.confirm=Wollen Sie wirklich diesen Typ l\u00F6schen? edit.taxonomyLevel=Fachbereich bearbeiten educational.context.deleted=Fachbereich wurde erfolgreich gel\u00F6scht educational.context.notdeleted=Fachbereich konnte nicht gel\u00F6scht werden, eventuell wird er bereits verwendet +item.license.deleted=Lizenz wurde erfolgreich gel\u00F6scht +item.license.notdeleted=Lizenz konnte nicht gel\u00F6scht werden, eventuell wird er bereits verwendet error.item.type.unique=Ein Fragetyp mit diesem Name existiert schon. item.type.deleted=Fragetyp wurde erfolgreich gel\u00F6scht item.type.notdeleted=Fragetyp konnte nicht gel\u00F6scht werden, eventuell wird er bereits verwendet diff --git a/src/main/java/org/olat/modules/qpool/ui/admin/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/qpool/ui/admin/_i18n/LocalStrings_en.properties index c0fa43e907eba6fa2f5b3789b3a51735e5c04a16..e9842ca6e2285e5f043a208b3c84a4c93230392d 100644 --- a/src/main/java/org/olat/modules/qpool/ui/admin/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/modules/qpool/ui/admin/_i18n/LocalStrings_en.properties @@ -20,6 +20,8 @@ edit.taxonomyLevel=Edit subject educational.context.deleted=Subject has been successfully deleted. educational.context.notdeleted=Subject cannot be deleted, it is probably in use. error.item.type.unique=A question type with this name already exists. +item.license.deleted=License has been successfully deleted. +item.license.notdeleted=License cannot be deleted, it is probably in use. item.type.deleted=Type has been successfully deleted. item.type.notdeleted=Type cannot be deleted, it is probably in use. level.key=ID diff --git a/src/main/java/org/olat/modules/qpool/ui/admin/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/modules/qpool/ui/admin/_i18n/LocalStrings_fr.properties index de1ac666df0dd39aa6f74b1649d963aa7c2be733..c7e97059f1b5d1fd4215b02e7923309e1298e5c0 100644 --- a/src/main/java/org/olat/modules/qpool/ui/admin/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/modules/qpool/ui/admin/_i18n/LocalStrings_fr.properties @@ -20,6 +20,8 @@ edit.taxonomyLevel=Editer le sujet educational.context.deleted=Le sujet a \u00E9t\u00E9 effac\u00E9 avec succ\u00E8s. educational.context.notdeleted=Le sujet n'a pas pu \u00EAtre effac\u00E9, il est probablement utilis\u00E9. error.item.type.unique=Un type de question avec ce nom existe déjà. +item.license.deleted=Le license a \u00E9t\u00E9 effac\u00E9 avec succ\u00E8s. +item.license.notdeleted=Le license n'a pas pu \u00EAtre effac\u00E9 avec succ\u00E8s, il est probablement encore utilis\u00E9. item.type.deleted=Le type a \u00E9t\u00E9 effac\u00E9 avec succ\u00E8s. item.type.notdeleted=Le type n'a pas pu \u00EAtre effac\u00E9 avec succ\u00E8s, il est probablement encore utilis\u00E9. level.key=ID