From d725b81aa11ad906b53d603d0f00a52fed5893c1 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Wed, 4 Jul 2012 17:10:29 +0200 Subject: [PATCH] OO-291: start work on condition interpreter --- .../condition/AreaSelectionController.java | 162 ++++++++++++++++++ .../ConditionConfigEasyController.java | 30 ++-- ...ler.java => GroupSelectionController.java} | 132 ++++---------- .../olat/course/editor/CourseEditorEnv.java | 7 + .../course/editor/CourseEditorEnvImpl.java | 27 ++- .../groupsandrights/CourseGroupManager.java | 8 +- .../PersistingCourseGroupManager.java | 16 +- .../olat/course/nodes/co/COConfigForm.java | 34 ++-- .../en/ENEditGroupAreaFormController.java | 34 ++-- .../preview/PreviewCourseGroupManager.java | 5 + .../run/preview/PreviewSettingsForm.java | 26 +-- .../org/olat/group/area/BGAreaManager.java | 4 +- .../olat/group/area/BGAreaManagerImpl.java | 8 +- .../group/manager/BusinessGroupArchiver.java | 2 +- .../ui/management/BGManagementController.java | 6 +- .../ui/wizard/MemberListWizardController.java | 2 +- .../indexer/repository/RepositoryIndexer.java | 5 +- .../olat/group/test/BGAreaManagerTest.java | 4 +- .../test/BusinessGroupImportExportTest.java | 2 +- 19 files changed, 306 insertions(+), 208 deletions(-) create mode 100644 src/main/java/org/olat/course/condition/AreaSelectionController.java rename src/main/java/org/olat/course/condition/{GroupOrAreaSelectionController.java => GroupSelectionController.java} (60%) diff --git a/src/main/java/org/olat/course/condition/AreaSelectionController.java b/src/main/java/org/olat/course/condition/AreaSelectionController.java new file mode 100644 index 00000000000..3c921d0f14d --- /dev/null +++ b/src/main/java/org/olat/course/condition/AreaSelectionController.java @@ -0,0 +1,162 @@ +/** +* OLAT - Online Learning and Training<br> +* http://www.olat.org +* <p> +* Licensed under the Apache License, Version 2.0 (the "License"); <br> +* you may not use this file except in compliance with the License.<br> +* You may obtain a copy of the License at +* <p> +* http://www.apache.org/licenses/LICENSE-2.0 +* <p> +* Unless required by applicable law or agreed to in writing,<br> +* software distributed under the License is distributed on an "AS IS" BASIS, <br> +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> +* See the License for the specific language governing permissions and <br> +* limitations under the License. +* <p> +* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> +* University of Zurich, Switzerland. +* <hr> +* <a href="http://www.openolat.org"> +* OpenOLAT - Online Learning and Training</a><br> +* This file has been modified by the OpenOLAT community. Changes are licensed +* under the Apache 2.0 license as the original file. +*/ +package org.olat.course.condition; + +import java.util.List; +import java.util.Set; + +import org.olat.core.gui.UserRequest; +import org.olat.core.gui.components.form.flexible.FormItem; +import org.olat.core.gui.components.form.flexible.FormItemContainer; +import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement; +import org.olat.core.gui.components.form.flexible.elements.Reset; +import org.olat.core.gui.components.form.flexible.elements.Submit; +import org.olat.core.gui.components.form.flexible.impl.FormBasicController; +import org.olat.core.gui.components.form.flexible.impl.FormEvent; +import org.olat.core.gui.components.form.flexible.impl.elements.FormLinkImpl; +import org.olat.core.gui.components.form.flexible.impl.elements.FormReset; +import org.olat.core.gui.components.form.flexible.impl.elements.FormSubmit; +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.course.groupsandrights.CourseGroupManager; +import org.olat.group.ui.BGControllerFactory; +import org.olat.group.ui.NewAreaController; + +/** + * Description:<br> + * TODO: patrickb Class Description for MultiSelectColumnController + * <P> + * Initial Date: 15.06.2007 <br> + * + * @author patrickb + */ +public class AreaSelectionController extends FormBasicController { + + private MultipleSelectionElement entrySelector; + protected String[] entries; + private FormLinkImpl createNew; + private CourseGroupManager courseGrpMngr; + private NewAreaController areaCreateCntrllr; + private CloseableModalController cmc; + + public AreaSelectionController(UserRequest ureq, WindowControl wControl, String title, + CourseGroupManager courseGrpMngr, String selectionAsCsvStr) { + super(ureq, wControl, "group_or_area_selection"); + /* + * before initialising the element, prepare data + */ + this.courseGrpMngr = courseGrpMngr; + // group or area mode + + // unique names from list to arry + List<String> uniqueNames = courseGrpMngr.getUniqueAreaNamesFromAllContexts(); + entries = new String[uniqueNames.size()]; + uniqueNames.toArray(entries); + + initForm(ureq); + + String[] activeSelection = selectionAsCsvStr != null ? selectionAsCsvStr.split(",") : new String[] {}; + for (int i = 0; i < activeSelection.length; i++) { + entrySelector.select(activeSelection[i].trim(), true); + } + } + + @Override + protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { + if (source == createNew) { + //user wants to create a new area -> show new area create form + removeAsListenerAndDispose(areaCreateCntrllr); + areaCreateCntrllr = BGControllerFactory.getInstance().createNewAreaController(ureq, getWindowControl(), courseGrpMngr.getCourseResource()); + listenTo(areaCreateCntrllr); + + removeAsListenerAndDispose(cmc); + cmc = new CloseableModalController(getWindowControl(),"close",areaCreateCntrllr.getInitialComponent()); + listenTo(cmc); + cmc.activate(); + } + } + + @Override + protected void event(UserRequest ureq, Controller source, Event event) { + if(source == areaCreateCntrllr) { + cmc.deactivate(); + if (event == Event.DONE_EVENT) { + List<String> uniqueNames = null; + uniqueNames = courseGrpMngr.getUniqueAreaNamesFromAllContexts(); + // update entries + entries = new String[uniqueNames.size()]; + uniqueNames.toArray(entries); + entrySelector.setKeysAndValues(entries, entries, null); + // + // select new value + entrySelector.select(areaCreateCntrllr.getCreatedAreaName(), true); + + //inform condition config easy about new groups -> which informs further + fireEvent(ureq, Event.CHANGED_EVENT); + } + } + } + + @Override + protected void doDispose() { + // + } + + @Override + protected void initForm(FormItemContainer boundTo, Controller listener, UserRequest ureq) { + // easy creation only possible if a default group context available + createNew = new FormLinkImpl("create"); + //is a button + createNew.setCustomEnabledLinkCSS("b_button"); + createNew.setCustomDisabledLinkCSS("b_button b_disabled"); + // create new group/area on the right side + boundTo.add(createNew); + + entrySelector = uifactory.addCheckboxesVertical("entries", null, boundTo, entries, entries, null, 1); + // submitCancel after checkboxes + // + Submit subm = new FormSubmit("subm", "apply"); + Reset reset = new FormReset("reset", "cancel"); + boundTo.add(subm); + boundTo.add(reset); + } + + @Override + protected void formOK(UserRequest ureq) { + fireEvent(ureq, Event.DONE_EVENT); + } + + @Override + protected void formResetted(UserRequest ureq) { + fireEvent(ureq, Event.CANCELLED_EVENT); + } + + public Set<String> getSelectedEntries() { + return entrySelector.getSelectedKeys(); + } + +} diff --git a/src/main/java/org/olat/course/condition/ConditionConfigEasyController.java b/src/main/java/org/olat/course/condition/ConditionConfigEasyController.java index 92e267bbf1e..6e026b09a82 100644 --- a/src/main/java/org/olat/course/condition/ConditionConfigEasyController.java +++ b/src/main/java/org/olat/course/condition/ConditionConfigEasyController.java @@ -100,8 +100,8 @@ public class ConditionConfigEasyController extends FormBasicController implement private TextElement easyAreaTE; private FormLink chooseAreasLink; private MultipleSelectionElement groupSwitch; - private GroupOrAreaSelectionController groupChooseC; - private GroupOrAreaSelectionController areaChooseC; + private GroupSelectionController groupChooseC; + private AreaSelectionController areaChooseC; private FormLink fixGroupError; private FormLink fixAreaError; private MultipleSelectionElement assessmentSwitch; @@ -332,10 +332,8 @@ public class ConditionConfigEasyController extends FormBasicController implement if (source == chooseGroupsLink) { removeAsListenerAndDispose(groupChooseC); - groupChooseC = new GroupOrAreaSelectionController( - 0, getWindowControl(), ureq, "group", courseEditorEnv.getCourseGroupManager(), - easyGroupTE.getValue() - ); + groupChooseC = new GroupSelectionController(ureq, getWindowControl(), "group", + courseEditorEnv.getCourseGroupManager(), easyGroupTE.getValue()); listenTo(groupChooseC); removeAsListenerAndDispose(cmc); @@ -371,10 +369,8 @@ public class ConditionConfigEasyController extends FormBasicController implement } else if (source == chooseAreasLink) { removeAsListenerAndDispose(areaChooseC); - areaChooseC = new GroupOrAreaSelectionController( - 1, getWindowControl(), ureq, "area", courseEditorEnv.getCourseGroupManager(), - easyAreaTE.getValue() - ); + areaChooseC = new AreaSelectionController(ureq, getWindowControl(), "area", + courseEditorEnv.getCourseGroupManager(), easyAreaTE.getValue()); listenTo(areaChooseC); removeAsListenerAndDispose(cmc); @@ -687,15 +683,13 @@ public class ConditionConfigEasyController extends FormBasicController implement if (!easyAreaTE.isEmpty()) { // check whether areas exist activeAreaSelection = easyAreaTE.getValue().split(","); - boolean exists = false; - Set<String> missingAreas = new HashSet<String>(); - for (int i = 0; i < activeAreaSelection.length; i++) { - String trimmed = activeAreaSelection[i].trim(); - exists = courseEditorEnv.existsArea(trimmed); - if (!exists) { - missingAreas.add(trimmed); - } + + List<String> activeAreaList = new ArrayList<String>(); + for (int i=activeAreaSelection.length; i-->0; ) { + activeAreaList.add(activeAreaSelection[i].trim()); } + List<String> missingAreas = courseEditorEnv.validateAreas(activeAreaList); + if (missingAreas.size() > 0) { retVal = false; String labelKey = missingAreas.size() == 1 ? "error.notfound.name" : "error.notfound.names"; diff --git a/src/main/java/org/olat/course/condition/GroupOrAreaSelectionController.java b/src/main/java/org/olat/course/condition/GroupSelectionController.java similarity index 60% rename from src/main/java/org/olat/course/condition/GroupOrAreaSelectionController.java rename to src/main/java/org/olat/course/condition/GroupSelectionController.java index b773f3a64ac..899433c61ef 100644 --- a/src/main/java/org/olat/course/condition/GroupOrAreaSelectionController.java +++ b/src/main/java/org/olat/course/condition/GroupSelectionController.java @@ -42,7 +42,6 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; import org.olat.course.groupsandrights.CourseGroupManager; import org.olat.group.ui.BGControllerFactory; -import org.olat.group.ui.NewAreaController; import org.olat.group.ui.NewBGController; /** @@ -53,7 +52,7 @@ import org.olat.group.ui.NewBGController; * * @author patrickb */ -public class GroupOrAreaSelectionController extends FormBasicController { +public class GroupSelectionController extends FormBasicController { private MultipleSelectionElement entrySelector; protected String[] entries; @@ -61,35 +60,20 @@ public class GroupOrAreaSelectionController extends FormBasicController { private CourseGroupManager courseGrpMngr; private boolean inGroupMode; private NewBGController groupCreateCntrllr; - private NewAreaController areaCreateCntrllr; private CloseableModalController cmc; - public GroupOrAreaSelectionController(int groupOrArea, WindowControl wControl, UserRequest ureq, String title, + public GroupSelectionController(UserRequest ureq, WindowControl wControl, String title, CourseGroupManager courseGrpMngr, String selectionAsCsvStr) { super(ureq, wControl, "group_or_area_selection"); - /* - * before initialising the element, prepare data - */ this.courseGrpMngr = courseGrpMngr; - // group or area mode - this.inGroupMode = groupOrArea == 0; - // unique names from list to arry - List<String> uniqueNames = null; - if (inGroupMode) { - uniqueNames = courseGrpMngr.getUniqueLearningGroupNamesFromAllContexts(); - } else { - uniqueNames = courseGrpMngr.getUniqueAreaNamesFromAllContexts(); - } - + // unique names from list to array + List<String> uniqueNames = courseGrpMngr.getUniqueLearningGroupNamesFromAllContexts(); + entries = new String[uniqueNames.size()]; uniqueNames.toArray(entries); - /* - * init form elements - */ - initForm(this.flc, this, ureq); - /* - * after initialising the element, select the entries - */ + + initForm(ureq); + // after initialising the element, select the entries String[] activeSelection = selectionAsCsvStr != null ? selectionAsCsvStr.split(",") : new String[] {}; for (int i = 0; i < activeSelection.length; i++) { entrySelector.select(activeSelection[i].trim(), true); @@ -100,51 +84,26 @@ public class GroupOrAreaSelectionController extends FormBasicController { protected void formInnerEvent(UserRequest ureq, org.olat.core.gui.components.form.flexible.FormItem source, org.olat.core.gui.components.form.flexible.impl.FormEvent event) { if (source == createNew) { - if (inGroupMode) { - - // user wants to create a new group -> show group create form - - removeAsListenerAndDispose(groupCreateCntrllr); - groupCreateCntrllr = BGControllerFactory.getInstance().createNewBGController( - ureq, getWindowControl(), true, courseGrpMngr.getCourseResource(), true, null - ); - listenTo(groupCreateCntrllr); - - removeAsListenerAndDispose(cmc); - cmc = new CloseableModalController( - getWindowControl(),"close",groupCreateCntrllr.getInitialComponent() - ); - listenTo(cmc); - - cmc.activate(); - - } else { - - //user wants to create a new area -> show new area create form - - removeAsListenerAndDispose(areaCreateCntrllr); - areaCreateCntrllr = BGControllerFactory.getInstance().createNewAreaController( - ureq, getWindowControl(), courseGrpMngr.getCourseResource() - ); - listenTo(areaCreateCntrllr); - - removeAsListenerAndDispose(cmc); - cmc = new CloseableModalController( - getWindowControl(),"close",areaCreateCntrllr.getInitialComponent() - ); - listenTo(cmc); - - cmc.activate(); - } + // user wants to create a new group -> show group create form + removeAsListenerAndDispose(groupCreateCntrllr); + groupCreateCntrllr = BGControllerFactory.getInstance().createNewBGController( + ureq, getWindowControl(), true, courseGrpMngr.getCourseResource(), true, null + ); + listenTo(groupCreateCntrllr); + + removeAsListenerAndDispose(cmc); + cmc = new CloseableModalController( + getWindowControl(),"close",groupCreateCntrllr.getInitialComponent() + ); + listenTo(cmc); + cmc.activate(); } } @Override protected void event(UserRequest ureq, Controller source, Event event) { if (source == groupCreateCntrllr) { - cmc.deactivate(); - if (event == Event.DONE_EVENT) { List<String> uniqueNames = null; uniqueNames = courseGrpMngr.getUniqueLearningGroupNamesFromAllContexts(); @@ -159,25 +118,7 @@ public class GroupOrAreaSelectionController extends FormBasicController { //inform condition config easy about new groups -> which informs further fireEvent(ureq, Event.CHANGED_EVENT); } - } else if(source == areaCreateCntrllr){ - - cmc.deactivate(); - - if (event == Event.DONE_EVENT) { - List<String> uniqueNames = null; - uniqueNames = courseGrpMngr.getUniqueAreaNamesFromAllContexts(); - // update entries - entries = new String[uniqueNames.size()]; - uniqueNames.toArray(entries); - entrySelector.setKeysAndValues(entries, entries, null); - // - // select new value - entrySelector.select(areaCreateCntrllr.getCreatedAreaName(), true); - - //inform condition config easy about new groups -> which informs further - fireEvent(ureq, Event.CHANGED_EVENT); - } - } + } } /** @@ -190,31 +131,16 @@ public class GroupOrAreaSelectionController extends FormBasicController { @Override protected void initForm(FormItemContainer boundTo, Controller listener, UserRequest ureq) { - /* - // | [] group 1 | create group | - // | [] group 2 | | - // | submit | cancel | | - // - * - */ - - // easy creation only possible if a default group context available - if (inGroupMode) { - createNew = new FormLinkImpl("create"); - } else { - createNew = new FormLinkImpl("create"); - } - //is a button - createNew.setCustomEnabledLinkCSS("b_button"); - createNew.setCustomDisabledLinkCSS("b_button b_disabled"); - // create new group/area on the right side - boundTo.add(createNew); - - + // easy creation only possible if a default group context available + createNew = new FormLinkImpl("create"); + //is a button + createNew.setCustomEnabledLinkCSS("b_button"); + createNew.setCustomDisabledLinkCSS("b_button b_disabled"); + // create new group/area on the right side + boundTo.add(createNew); entrySelector = uifactory.addCheckboxesVertical("entries", null, boundTo, entries, entries, null, 1); // submitCancel after checkboxes - // Submit subm = new FormSubmit("subm", "apply"); Reset reset = new FormReset("reset", "cancel"); boundTo.add(subm); diff --git a/src/main/java/org/olat/course/editor/CourseEditorEnv.java b/src/main/java/org/olat/course/editor/CourseEditorEnv.java index 93c96bd6f10..633ef432f26 100644 --- a/src/main/java/org/olat/course/editor/CourseEditorEnv.java +++ b/src/main/java/org/olat/course/editor/CourseEditorEnv.java @@ -71,6 +71,13 @@ public interface CourseEditorEnv { * @return */ boolean existsArea(String areaname); + + /** + * Return the invalid areas + * @param areaname + * @return + */ + public List<String> validateAreas(List<String> areaname); /** * @return diff --git a/src/main/java/org/olat/course/editor/CourseEditorEnvImpl.java b/src/main/java/org/olat/course/editor/CourseEditorEnvImpl.java index 2b202591b28..489548cd649 100644 --- a/src/main/java/org/olat/course/editor/CourseEditorEnvImpl.java +++ b/src/main/java/org/olat/course/editor/CourseEditorEnvImpl.java @@ -178,14 +178,33 @@ public class CourseEditorEnvImpl implements CourseEditorEnv { public boolean existsArea(String areaname) { // FIXME:fg:b improve performance by adding a special query for the existence // check! - List cnt = cgm.getAllAreasFromAllContexts(); - for (Iterator iter = cnt.iterator(); iter.hasNext();) { - BGArea element = (BGArea) iter.next(); - if (element.getName().equals(areaname)) { return true; } + List<BGArea> cnt = cgm.getAllAreasFromAllContexts(); + for (BGArea element : cnt) { + if (element.getName().equals(areaname)) { + return true; + } } return false; } + @Override + public List<String> validateAreas(List<String> areanames) { + List<BGArea> cnt = cgm.getAllAreasFromAllContexts(); + List<String> invalidNames = new ArrayList<String>(); + + a_a: + for(String areaname:areanames) { + for (BGArea element : cnt) { + if (element.getName().equals(areaname)) { + continue a_a; + } + } + invalidNames.add(areaname); + + } + return invalidNames; + } + /** * @see org.olat.course.editor.CourseEditorEnv#getCurrentCourseNodeId() */ diff --git a/src/main/java/org/olat/course/groupsandrights/CourseGroupManager.java b/src/main/java/org/olat/course/groupsandrights/CourseGroupManager.java index dbf91a20b0a..58e5ccac031 100644 --- a/src/main/java/org/olat/course/groupsandrights/CourseGroupManager.java +++ b/src/main/java/org/olat/course/groupsandrights/CourseGroupManager.java @@ -142,12 +142,6 @@ public interface CourseGroupManager { * contexts of this course */ public List<BusinessGroup> getLearningGroupsFromAllContexts(String groupName); - /** - * - * @param groupName - * @return - */ - //public List<BusinessGroup> getRightGroupsFromAllContexts(String groupName); /** * @param areaName @@ -195,6 +189,8 @@ public interface CourseGroupManager { * @return A list of all group areas from this course */ public List<BGArea> getAllAreasFromAllContexts(); + + public List<BGArea> getAreasFromContext(String areaname); /** * Deletes the course group management. This will unlink all group contexts diff --git a/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java b/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java index 193596e18a0..916bbbc1c9c 100644 --- a/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java +++ b/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java @@ -64,7 +64,7 @@ public class PersistingCourseGroupManager extends BasicManager implements Course private static final String LEARNINGGROUPEXPORT_XML = "learninggroupexport.xml"; private static final String RIGHTGROUPEXPORT_XML = "rightgroupexport.xml"; private static final String LEARNINGGROUPARCHIVE_XLS = "learninggroup_archiv.xls"; - private static final String RIGHTGROUPARCHIVE_XLS = "rightgroup_archiv.xls"; + //private static final String RIGHTGROUPARCHIVE_XLS = "rightgroup_archiv.xls"; private final OLATResource courseResource; @@ -201,16 +201,24 @@ public class PersistingCourseGroupManager extends BasicManager implements Course * @see org.olat.course.groupsandrights.CourseGroupManager#getAllAreasFromAllContexts() */ public List<BGArea> getAllAreasFromAllContexts() { - List<BusinessGroup> learningGroups = getAllLearningGroupsFromAllContexts(); - List<BGArea> areas = areaManager.findBGAreasOfBusinessGroups(learningGroups); + List<BGArea> areas = areaManager.findBGAreasInContext(courseResource); return areas; } + @Override + public List<BGArea> getAreasFromContext(String areaname) { + BGArea area = areaManager.findBGArea(areaname, courseResource); + if(area == null) { + return Collections.emptyList(); + } + return Collections.singletonList(area); + } + /** * @see org.olat.course.groupsandrights.CourseGroupManager#getLearningGroupsInAreaFromAllContexts(java.lang.String) */ public List<BusinessGroup> getLearningGroupsInAreaFromAllContexts(String areaName) { - List<BGArea> areas = areaManager.findBGAreasOfBGContext(courseResource); + List<BGArea> areas = areaManager.findBGAreasInContext(courseResource); List<BusinessGroup> groups = areaManager.findBusinessGroupsOfAreas(areas); return groups; } diff --git a/src/main/java/org/olat/course/nodes/co/COConfigForm.java b/src/main/java/org/olat/course/nodes/co/COConfigForm.java index 653a7734c75..7c4ce35bce8 100644 --- a/src/main/java/org/olat/course/nodes/co/COConfigForm.java +++ b/src/main/java/org/olat/course/nodes/co/COConfigForm.java @@ -49,7 +49,8 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; import org.olat.core.util.StringHelper; import org.olat.core.util.mail.MailHelper; -import org.olat.course.condition.GroupOrAreaSelectionController; +import org.olat.course.condition.AreaSelectionController; +import org.olat.course.condition.GroupSelectionController; import org.olat.course.editor.CourseEditorEnv; import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.group.ui.BGControllerFactory; @@ -90,8 +91,8 @@ public class COConfigForm extends FormBasicController { private NewAreaController areaCreateCntrllr; private NewBGController groupCreateCntrllr; - private GroupOrAreaSelectionController areaChooseC; - private GroupOrAreaSelectionController groupChooseC; + private AreaSelectionController areaChooseC; + private GroupSelectionController groupChooseC; private FormLayoutContainer areaChooseSubContainer, groupChooseSubContainer ; @@ -251,15 +252,12 @@ public class COConfigForm extends FormBasicController { if (!easyAreaTE.isEmpty()) { // check whether areas exist activeAreaSelection = easyAreaTE.getValue().split(","); - boolean exists = false; - Set<String> missingAreas = new HashSet<String>(); - for (int i = 0; i < activeAreaSelection.length; i++) { - String trimmed = activeAreaSelection[i].trim(); - exists = cev.existsArea(trimmed); - if (!exists && trimmed.length() > 0 && !missingAreas.contains(trimmed) ) { - missingAreas.add(trimmed); - } + + List<String> activeAreaList = new ArrayList<String>(); + for (int i=activeAreaSelection.length; i-->0; ) { + activeAreaList.add(activeAreaSelection[i].trim()); } + List<String> missingAreas = cev.validateAreas(activeAreaList); if (missingAreas.size() > 0) { retVal = false; String labelKey = missingAreas.size() == 1 ? "error.notfound.name" : "error.notfound.names"; @@ -525,11 +523,8 @@ public class COConfigForm extends FormBasicController { if (source == chooseGroupsLink) { removeAsListenerAndDispose(groupChooseC); - groupChooseC = new GroupOrAreaSelectionController( - 0, getWindowControl(), ureq, "group", - cev.getCourseGroupManager(), - easyGroupTE.getValue() - ); + groupChooseC = new GroupSelectionController(ureq, getWindowControl(), "group", + cev.getCourseGroupManager(), easyGroupTE.getValue()); listenTo(groupChooseC); removeAsListenerAndDispose(cmc); @@ -568,11 +563,8 @@ public class COConfigForm extends FormBasicController { // already areas -> choose areas removeAsListenerAndDispose(areaChooseC); - areaChooseC = new GroupOrAreaSelectionController ( - 1, getWindowControl(), ureq, "area", - cev.getCourseGroupManager(), - easyAreaTE.getValue() - ); + areaChooseC = new AreaSelectionController (ureq, getWindowControl(), "area", + cev.getCourseGroupManager(), easyAreaTE.getValue()); listenTo(areaChooseC); diff --git a/src/main/java/org/olat/course/nodes/en/ENEditGroupAreaFormController.java b/src/main/java/org/olat/course/nodes/en/ENEditGroupAreaFormController.java index 57db98e7bdf..be0255069a8 100644 --- a/src/main/java/org/olat/course/nodes/en/ENEditGroupAreaFormController.java +++ b/src/main/java/org/olat/course/nodes/en/ENEditGroupAreaFormController.java @@ -53,8 +53,9 @@ import org.olat.core.util.event.EventBus; import org.olat.core.util.event.GenericEventListener; import org.olat.core.util.event.MultiUserEvent; import org.olat.core.util.resource.OresHelper; +import org.olat.course.condition.AreaSelectionController; import org.olat.course.condition.Condition; -import org.olat.course.condition.GroupOrAreaSelectionController; +import org.olat.course.condition.GroupSelectionController; import org.olat.course.editor.CourseEditorEnv; import org.olat.course.editor.NodeEditController; import org.olat.course.nodes.ENCourseNode; @@ -95,8 +96,8 @@ class ENEditGroupAreaFormController extends FormBasicController implements Gener private NewAreaController areaCreateCntrllr; private NewBGController groupCreateCntrllr; - private GroupOrAreaSelectionController areaChooseC; - private GroupOrAreaSelectionController groupChooseC; + private AreaSelectionController areaChooseC; + private GroupSelectionController groupChooseC; private FormLayoutContainer areaChooseSubContainer, groupChooseSubContainer ; private FormItemContainer groupsAndAreasSubContainer; @@ -302,15 +303,12 @@ class ENEditGroupAreaFormController extends FormBasicController implements Gener if (!easyAreaTE.isEmpty()) { // check whether areas exist activeAreaSelection = easyAreaTE.getValue().split(","); - boolean exists = false; - Set<String> missingAreas = new HashSet<String>(); - for (int i = 0; i < activeAreaSelection.length; i++) { - String trimmed = activeAreaSelection[i].trim(); - exists = cev.existsArea(trimmed); - if (!exists && trimmed.length() > 0 && !missingAreas.contains(trimmed) ) { - missingAreas.add(trimmed); - } + + List<String> activeAreaList = new ArrayList<String>(); + for (int i=activeAreaSelection.length; i-->0; ) { + activeAreaList.add(activeAreaSelection[i].trim()); } + List<String> missingAreas = cev.validateAreas(activeAreaList); if (missingAreas.size() > 0) { retVal = false; String labelKey = missingAreas.size() == 1 ? "error.notfound.name" : "error.notfound.names"; @@ -385,11 +383,8 @@ class ENEditGroupAreaFormController extends FormBasicController implements Gener if (source == chooseGroupsLink) { removeAsListenerAndDispose(groupChooseC); - groupChooseC = new GroupOrAreaSelectionController( - 0, getWindowControl(), ureq, "group", - cev.getCourseGroupManager(), - easyGroupTE.getValue() - ); + groupChooseC = new GroupSelectionController(ureq, getWindowControl(), "group", + cev.getCourseGroupManager(), easyGroupTE.getValue()); listenTo(groupChooseC); removeAsListenerAndDispose(cmc); @@ -429,11 +424,8 @@ class ENEditGroupAreaFormController extends FormBasicController implements Gener // already areas -> choose areas removeAsListenerAndDispose(areaChooseC); - areaChooseC = new GroupOrAreaSelectionController ( - 1, getWindowControl(), ureq, "area", - cev.getCourseGroupManager(), - easyAreaTE.getValue() - ); + areaChooseC = new AreaSelectionController (ureq, getWindowControl() , "area", + cev.getCourseGroupManager(), easyAreaTE.getValue()); listenTo(areaChooseC); diff --git a/src/main/java/org/olat/course/run/preview/PreviewCourseGroupManager.java b/src/main/java/org/olat/course/run/preview/PreviewCourseGroupManager.java index f5a6307df56..d40ccff1248 100644 --- a/src/main/java/org/olat/course/run/preview/PreviewCourseGroupManager.java +++ b/src/main/java/org/olat/course/run/preview/PreviewCourseGroupManager.java @@ -200,6 +200,11 @@ final class PreviewCourseGroupManager extends BasicManager implements CourseGrou return areas; } + @Override + public List<BGArea> getAreasFromContext(String areaname) { + return null; + } + /** * @see org.olat.course.groupsandrights.CourseGroupManager#deleteCourseGroupmanagement() */ diff --git a/src/main/java/org/olat/course/run/preview/PreviewSettingsForm.java b/src/main/java/org/olat/course/run/preview/PreviewSettingsForm.java index 3a8250a1df8..fa502ddb9a9 100644 --- a/src/main/java/org/olat/course/run/preview/PreviewSettingsForm.java +++ b/src/main/java/org/olat/course/run/preview/PreviewSettingsForm.java @@ -47,7 +47,8 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; import org.olat.core.util.StringHelper; import org.olat.course.ICourse; -import org.olat.course.condition.GroupOrAreaSelectionController; +import org.olat.course.condition.AreaSelectionController; +import org.olat.course.condition.GroupSelectionController; /** * Description:<br> @@ -78,8 +79,8 @@ public class PreviewSettingsForm extends FormBasicController { private SingleSelection roles; private ICourse course; - //private GroupAndAreaSelectController chooser; - private GroupOrAreaSelectionController groupChooser, areaChooser; + private AreaSelectionController areaChooser; + private GroupSelectionController groupChooser; private CloseableModalController cmc; @@ -194,12 +195,8 @@ public class PreviewSettingsForm extends FormBasicController { protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { if (source == groupChooserLink) { removeAsListenerAndDispose (groupChooser); - groupChooser = new GroupOrAreaSelectionController( - 0, //group - getWindowControl(), ureq, - "group", course.getCourseEnvironment().getCourseGroupManager(), - group.getValue() - ); + groupChooser = new GroupSelectionController(ureq, getWindowControl(), "group", + course.getCourseEnvironment().getCourseGroupManager(), group.getValue()); listenTo(groupChooser); removeAsListenerAndDispose(cmc); @@ -213,15 +210,10 @@ public class PreviewSettingsForm extends FormBasicController { } else if (source == areaChooserLink) { removeAsListenerAndDispose (areaChooser); - areaChooser = new GroupOrAreaSelectionController( - 1, // area - getWindowControl(), ureq, - "area", course.getCourseEnvironment().getCourseGroupManager(), - area.getValue() - ); + areaChooser = new AreaSelectionController(ureq, getWindowControl(), "area", + course.getCourseEnvironment().getCourseGroupManager(), area.getValue()); listenTo(areaChooser); - - + removeAsListenerAndDispose(cmc); cmc = new CloseableModalController( getWindowControl(), diff --git a/src/main/java/org/olat/group/area/BGAreaManager.java b/src/main/java/org/olat/group/area/BGAreaManager.java index f270e3359ed..8185afd0f74 100644 --- a/src/main/java/org/olat/group/area/BGAreaManager.java +++ b/src/main/java/org/olat/group/area/BGAreaManager.java @@ -157,7 +157,7 @@ public interface BGAreaManager { * @param resource * @return Number of business gropu areas */ - public abstract int countBGAreasOfBGContext(OLATResource resource); + public abstract int countBGAreasInContext(OLATResource resource); /** * Searches for all business group areas in the given business group context @@ -165,7 +165,7 @@ public interface BGAreaManager { * @param resource * @return A list of business group areas */ - public List<BGArea> findBGAreasOfBGContext(OLATResource resource); + public List<BGArea> findBGAreasInContext(OLATResource resource); /** * Checks if an identity is in a business group areas with a given name in the diff --git a/src/main/java/org/olat/group/area/BGAreaManagerImpl.java b/src/main/java/org/olat/group/area/BGAreaManagerImpl.java index 7be7083a228..b26d98e640b 100644 --- a/src/main/java/org/olat/group/area/BGAreaManagerImpl.java +++ b/src/main/java/org/olat/group/area/BGAreaManagerImpl.java @@ -92,7 +92,7 @@ public class BGAreaManagerImpl extends BasicManager implements BGAreaManager { */ // o_clusterOK by:cg ; must be synchronized too ? => not 100% sure, public Map<BGArea,BGArea> copyBGAreasOfBGContext(OLATResource origBgContext, final OLATResource targetBgContext) { - List<BGArea> origAreas = findBGAreasOfBGContext(origBgContext); + List<BGArea> origAreas = findBGAreasInContext(origBgContext); Map<BGArea,BGArea> areas = new HashMap<BGArea,BGArea>(); Iterator<BGArea> iterator = origAreas.iterator(); while (iterator.hasNext()) { @@ -300,7 +300,8 @@ public class BGAreaManagerImpl extends BasicManager implements BGAreaManager { /** * @see org.olat.group.area.BGAreaManager#countBGAreasOfBGContext(org.olat.group.context.BGContext) */ - public int countBGAreasOfBGContext(OLATResource resource) { + @Override + public int countBGAreasInContext(OLATResource resource) { StringBuilder sb = new StringBuilder(); sb.append("select count(area) from ").append(BGAreaImpl.class.getName()).append(" area where area.resource.key=:resourceKey"); Number count = dbInstance.getCurrentEntityManager().createQuery(sb.toString(), Number.class) @@ -312,7 +313,8 @@ public class BGAreaManagerImpl extends BasicManager implements BGAreaManager { /** * @see org.olat.group.area.BGAreaManager#findBGAreasOfBGContext(org.olat.group.context.BGContext) */ - public List<BGArea> findBGAreasOfBGContext(OLATResource resource) { + @Override + public List<BGArea> findBGAreasInContext(OLATResource resource) { StringBuilder sb = new StringBuilder(); sb.append("select area from ").append(BGAreaImpl.class.getName()).append(" area where area.resource.key=:resourceKey"); List<BGArea> areas = dbInstance.getCurrentEntityManager().createQuery(sb.toString(), BGArea.class) diff --git a/src/main/java/org/olat/group/manager/BusinessGroupArchiver.java b/src/main/java/org/olat/group/manager/BusinessGroupArchiver.java index 72b2ee7f972..152f3365b1b 100644 --- a/src/main/java/org/olat/group/manager/BusinessGroupArchiver.java +++ b/src/main/java/org/olat/group/manager/BusinessGroupArchiver.java @@ -261,7 +261,7 @@ public class BusinessGroupArchiver { List<Member> participants = new ArrayList<Member>(); List<Member> waitings = new ArrayList<Member>(); - List<BGArea> areas = areaManager.findBGAreasOfBGContext(resource); + List<BGArea> areas = areaManager.findBGAreasInContext(resource); for (BGArea area :areas) { if (areaList.contains(area)) { //rely on the equals() method of the BGArea impl List<BusinessGroup> areaBusinessGroupList = areaManager.findBusinessGroupsOfArea(area); diff --git a/src/main/java/org/olat/group/ui/management/BGManagementController.java b/src/main/java/org/olat/group/ui/management/BGManagementController.java index dba89129d1c..0dc6ebbbd3e 100644 --- a/src/main/java/org/olat/group/ui/management/BGManagementController.java +++ b/src/main/java/org/olat/group/ui/management/BGManagementController.java @@ -825,7 +825,7 @@ public class BGManagementController extends MainLayoutBasicController implements overviewVC.contextPut("numbParticipants", new Integer(numOfParticipants)); // number of areas if (flags.isEnabled(BGConfigFlags.AREAS)) { - overviewVC.contextPut("numbAreas", new Integer(areaManager.countBGAreasOfBGContext(resource))); + overviewVC.contextPut("numbAreas", new Integer(areaManager.countBGAreasInContext(resource))); } setTools(STATE_OVERVIEW); } @@ -963,7 +963,7 @@ public class BGManagementController extends MainLayoutBasicController implements // 2. find areas for group list filter if (flags.isEnabled(BGConfigFlags.AREAS)) { - List<BGArea> areas = areaManager.findBGAreasOfBGContext(resource); + List<BGArea> areas = areaManager.findBGAreasInContext(resource); areaFilters = new ArrayList<ShortName>(areas); groupListCtr.setFilters(this.areaFilters, currentAreaFilter); } @@ -993,7 +993,7 @@ public class BGManagementController extends MainLayoutBasicController implements private void doAreaList(UserRequest ureq, boolean initializeModel) { if (areaListModel == null || initializeModel) { - List<BGArea> areas = areaManager.findBGAreasOfBGContext(resource); + List<BGArea> areas = areaManager.findBGAreasInContext(resource); areaListModel = new BGAreaTableModel(areas, getTranslator()); if (areaListCtr != null) areaListCtr.dispose(); diff --git a/src/main/java/org/olat/group/ui/wizard/MemberListWizardController.java b/src/main/java/org/olat/group/ui/wizard/MemberListWizardController.java index 1f1e93ca31c..a7d61f6cc13 100644 --- a/src/main/java/org/olat/group/ui/wizard/MemberListWizardController.java +++ b/src/main/java/org/olat/group/ui/wizard/MemberListWizardController.java @@ -236,7 +236,7 @@ public class MemberListWizardController extends BasicController { objectArrays.add(groupChoiceRowData); } } else if (AREAS_MEMBERS.equals(wizardType)) { - List<BGArea> areas = areaManager.findBGAreasOfBGContext(resource); + List<BGArea> areas = areaManager.findBGAreasInContext(resource); Collections.sort(areas, new Comparator<BGArea>() { @Override public int compare(BGArea a1, BGArea a2) { diff --git a/src/main/java/org/olat/search/service/indexer/repository/RepositoryIndexer.java b/src/main/java/org/olat/search/service/indexer/repository/RepositoryIndexer.java index af8feba93a9..78a4132eed8 100644 --- a/src/main/java/org/olat/search/service/indexer/repository/RepositoryIndexer.java +++ b/src/main/java/org/olat/search/service/indexer/repository/RepositoryIndexer.java @@ -41,6 +41,7 @@ import org.olat.core.logging.AssertException; import org.olat.core.util.resource.OresHelper; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; +import org.olat.repository.SearchRepositoryEntryParameters; import org.olat.search.service.SearchResourceContext; import org.olat.search.service.document.RepositoryEntryDocument; import org.olat.search.service.indexer.AbstractHierarchicalIndexer; @@ -76,7 +77,9 @@ public class RepositoryIndexer extends AbstractHierarchicalIndexer { Roles roles = new Roles(true, true, true, true, false, true, false); int counter = 0; //fxdiff VCRP-1,2: access control of resources - List<RepositoryEntry> repositoryList = repositoryManager.genericANDQueryWithRolesRestriction(null,null,null,null,null,roles, null); + SearchRepositoryEntryParameters params = new SearchRepositoryEntryParameters(); + params.setRoles(roles); + List<RepositoryEntry> repositoryList = repositoryManager.genericANDQueryWithRolesRestriction(params, 0, -1, true); if (isLogDebugEnabled()) logDebug("RepositoryIndexer repositoryList.size=" + repositoryList.size()); // loop over all repository-entries // committing here to make sure the loadBusinessGroup below does actually diff --git a/src/test/java/org/olat/group/test/BGAreaManagerTest.java b/src/test/java/org/olat/group/test/BGAreaManagerTest.java index d959f35fd01..e184400d225 100644 --- a/src/test/java/org/olat/group/test/BGAreaManagerTest.java +++ b/src/test/java/org/olat/group/test/BGAreaManagerTest.java @@ -231,11 +231,11 @@ public class BGAreaManagerTest extends OlatTestCase { dbInstance.commitAndCloseSession(); //count - int numOfAreas = areaManager.countBGAreasOfBGContext(resource); + int numOfAreas = areaManager.countBGAreasInContext(resource); Assert.assertEquals(3, numOfAreas); //find areas - List<BGArea> areas = areaManager.findBGAreasOfBGContext(resource); + List<BGArea> areas = areaManager.findBGAreasInContext(resource); Assert.assertNotNull(areas); Assert.assertEquals(3, areas.size()); Assert.assertTrue(areas.contains(area1)); diff --git a/src/test/java/org/olat/group/test/BusinessGroupImportExportTest.java b/src/test/java/org/olat/group/test/BusinessGroupImportExportTest.java index 8550ed3cd1b..a6de45fc406 100644 --- a/src/test/java/org/olat/group/test/BusinessGroupImportExportTest.java +++ b/src/test/java/org/olat/group/test/BusinessGroupImportExportTest.java @@ -151,7 +151,7 @@ public class BusinessGroupImportExportTest extends OlatTestCase { Assert.assertEquals(3, groups.size()); //check if all three areas are imported - List<BGArea> areas = areaManager.findBGAreasOfBGContext(resource); + List<BGArea> areas = areaManager.findBGAreasInContext(resource); Assert.assertNotNull(areas); Assert.assertEquals(3, areas.size()); -- GitLab