Skip to content
Snippets Groups Projects
Commit 299ad977 authored by srosse's avatar srosse
Browse files

OO-865: implements the deletion of taxonomy levels (only if not used or without children)

parent 472969d3
No related branches found
No related tags found
No related merge requests found
Showing with 88 additions and 4 deletions
......@@ -158,6 +158,8 @@ public interface QPoolService {
public TaxonomyLevel updateTaxonomyLevel(String newField, TaxonomyLevel level);
public boolean delete(TaxonomyLevel level);
//pool administration
public void createPool(Identity identity, String name, boolean publicPool);
......
......@@ -752,4 +752,9 @@ public class QuestionPoolServiceImpl implements QPoolService {
public TaxonomyLevel updateTaxonomyLevel(String newField, TaxonomyLevel level) {
return taxonomyLevelDao.update(newField, level);
}
@Override
public boolean delete(TaxonomyLevel level) {
return taxonomyLevelDao.delete(level);
}
}
\ No newline at end of file
......@@ -88,6 +88,28 @@ public class TaxonomyLevelDAO {
return mergedField;
}
public boolean delete(TaxonomyLevel field) {
int used = countItemUsing(field);
int children = countChildren(field);
if(used == 0 && children == 0) {
TaxonomyLevel impl = loadLevelById(field.getKey());
if(impl != null) {
dbInstance.getCurrentEntityManager().remove(impl);
}
return true;
}
return false;
}
public int countChildren(TaxonomyLevel field) {
StringBuilder sb = new StringBuilder();
sb.append("select count(taxonomyLevel) from qtaxonomylevel taxonomyLevel where taxonomyLevel.parentField.key=:taxonomyLevelKey");
return dbInstance.getCurrentEntityManager()
.createQuery(sb.toString(), Number.class)
.setParameter("taxonomyLevelKey", field.getKey())
.getSingleResult().intValue();
}
public int countItemUsing(TaxonomyLevel field) {
StringBuilder sb = new StringBuilder();
sb.append("select count(item) from questionitem item where item.taxonomyLevel.key=:taxonomyLevelKey");
......
......@@ -19,6 +19,7 @@
*/
package org.olat.modules.qpool.ui.admin;
import org.olat.core.CoreSpringFactory;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.form.flexible.FormItem;
import org.olat.core.gui.components.form.flexible.FormItemContainer;
......@@ -32,8 +33,12 @@ import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
import org.olat.core.gui.control.generic.modal.DialogBoxController;
import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
import org.olat.core.util.Util;
import org.olat.modules.qpool.QPoolService;
import org.olat.modules.qpool.TaxonomyLevel;
import org.olat.modules.qpool.model.QItemType;
import org.olat.modules.qpool.ui.QuestionsController;
/**
......@@ -48,11 +53,14 @@ public class TaxonomyLevelController extends FormBasicController {
private StaticTextElement pathEl, fieldEl;
private CloseableModalController cmc;
private TaxonomyLevelEditController editCtrl;
private DialogBoxController confirmDeleteCtrl;
private TaxonomyLevel taxonomyLevel;
private final QPoolService qpoolService;
public TaxonomyLevelController(UserRequest ureq, WindowControl wControl) {
super(ureq, wControl, Util.createPackageTranslator(QuestionsController.class, ureq.getLocale()));
qpoolService = CoreSpringFactory.getImpl(QPoolService.class);
initForm(ureq);
//make it invisible, no level to show
flc.setVisible(false);
......@@ -72,8 +80,7 @@ public class TaxonomyLevelController extends FormBasicController {
buttonsCont.setRootForm(mainForm);
formLayout.add(buttonsCont);
editButton = uifactory.addFormLink("edit", buttonsCont, Link.BUTTON);
//TODO define behavior of the delete (cascade, reattach...)
//deleteButton = uifactory.addFormLink("delete", buttonsCont, Link.BUTTON);
deleteButton = uifactory.addFormLink("delete", buttonsCont, Link.BUTTON);
}
public TaxonomyLevel getTaxonomyLevel() {
......@@ -106,7 +113,7 @@ public class TaxonomyLevelController extends FormBasicController {
if(editButton == source) {
doEditLevel(ureq);
} else if(deleteButton == source) {
doConfirmDelete(ureq);
}
super.formInnerEvent(ureq, source, event);
}
......@@ -122,6 +129,10 @@ public class TaxonomyLevelController extends FormBasicController {
cleanUp();
} else if(cmc == source) {
cleanUp();
} else if(source == confirmDeleteCtrl) {
if(DialogBoxUIFactory.isOkEvent(event) || DialogBoxUIFactory.isYesEvent(event)) {
doDelete(ureq);
}
}
}
......@@ -131,6 +142,21 @@ public class TaxonomyLevelController extends FormBasicController {
editCtrl = null;
cmc = null;
}
private void doConfirmDelete(UserRequest ureq) {
String title = translate("delete.taxonomyLevel");
String text = translate("delete.taxonomyLevel.confirm", new String[]{ taxonomyLevel.getField() });
confirmDeleteCtrl = activateOkCancelDialog(ureq, title, text, confirmDeleteCtrl);
}
private void doDelete(UserRequest ureq) {
if(qpoolService.delete(taxonomyLevel)) {
showInfo("taxonomyLevel.deleted");
fireEvent(ureq, Event.CHANGED_EVENT);
} else {
showError("taxonomyLevel.notdeleted");
}
}
private void doEditLevel(UserRequest ureq) {
if(taxonomyLevel == null) return;
......
......@@ -68,7 +68,7 @@ public class TaxonomyTreeModel extends GenericTreeModel {
GenericTreeNode parentNode = fieldKeyToNode.get(parentKey);
if(parentNode == null) {
parentNode = new GenericTreeNode(parentField.getField(), parentField);
fieldKeyToNode.put(key, parentNode);
fieldKeyToNode.put(parentKey, parentNode);
}
parentNode.addChild(node);
}
......
......@@ -12,6 +12,8 @@ delete.level=L\u00F6schen
delete.level.confirm=Wollen Sie wirklich diese Stufe l\u00F6schen?
delete.license=L\u00F6schen
delete.license.confirm=Wollen Sie wirklich diese Lizenz l\u00F6schen?
delete.taxonomyLevel=L\u00F6schen
delete.taxonomyLevel.confirm=Wollen Sie wirklich diese Fachbereich "{0}" l\u00F6schen?
delete.type=L\u00F6schen
delete.type.confirm=Wollen Sie wirklich diesen Typ l\u00F6schen?
edit.taxonomyLevel=Fachbereich bearbeiten
......@@ -24,6 +26,8 @@ level.level=Stufe
level.translation=\u00DCbersetzung
license.id=ID
license.key=Lizenz
taxonomyLevel.deleted=Fachbereich wurde erfolgreich gel\u00F6scht
taxonomyLevel.notdeleted=Fachbereich konnte nicht gel\u00F6scht werden, eventuell wird er bereits verwendet.
type.key=ID
type.translation=\u00DCbersetzung
type.type=Typ
......
......@@ -10,6 +10,8 @@ create.license=Create license
create.type=Create type
delete.level=Delete
delete.level.confirm=Do you really want to delete this level?
delete.taxonomyLevel=Delete
delete.taxonomyLevel.confirm=Do you really want to delete this subject "{0}"?
delete.license=Delete
delete.license.confirm=Do you really want to delete this license?
delete.type=Delete
......@@ -24,6 +26,8 @@ level.level=Level
level.translation=Translation
license.id=ID
license.key=License
taxonomyLevel.deleted=Subject has been successfully deleted.
taxonomyLevel.notdeleted=The subject cannot be deleted, it is probably in use.
type.key=ID
type.translation=Translation
type.type=Type
......
......@@ -10,6 +10,8 @@ create.license=Cr\u00E9er une license
create.type=Cr\u00E9er un type
delete.level=Effacer
delete.level.confirm=Voulez-vous vraiment effacer ce niveau?
delete.taxonomyLevel=Effacer
delete.taxonomyLevel.confirm=Voulez-vous vraiment effacer le sujet suivant "{0}"?
delete.license=Effacer
delete.license.confirm=Voulez-vous vraiment effacer cette license?
delete.type=Effacer
......@@ -24,6 +26,8 @@ level.level=Niveau
level.translation=Traduction
license.id=ID
license.key=License
taxonomyLevel.deleted=Le sujet a \u00E9t\u00E9 effac\u00E9 avec succ\u00E8s.
taxonomyLevel.notdeleted=Le sujet n'a pas pu \u00EAtre effac\u00E9 avec succ\u00E8s, il est probablement encore utilis\u00E9.
type.key=ID
type.translation=Traduction
type.type=Type
......
......@@ -195,4 +195,21 @@ public class TaxonomyLevelDAOTest extends OlatTestCase {
int numOfItems = taxonomyLevelDao.countItemUsing(level);
Assert.assertEquals(2, numOfItems);
}
@Test
public void countChildren_TaxonomyLevel() {
TaxonomyLevel galaxy = taxonomyLevelDao.createAndPersist(null, "Galaxy");
TaxonomyLevel andromeda = taxonomyLevelDao.createAndPersist(galaxy, "Andromeda");
TaxonomyLevel ngc = taxonomyLevelDao.createAndPersist(galaxy, "NGC 2502");
Assert.assertNotNull(andromeda);
Assert.assertNotNull(ngc);
dbInstance.commitAndCloseSession();
//check count
int numOfChildrenGalaxy = taxonomyLevelDao.countChildren(galaxy);
Assert.assertEquals(2, numOfChildrenGalaxy);
int numOfChildrenAdnromeda = taxonomyLevelDao.countChildren(andromeda);
Assert.assertEquals(0, numOfChildrenAdnromeda);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment