Skip to content
Snippets Groups Projects
Commit 7194ccb5 authored by srosse's avatar srosse
Browse files

OO-3996: closed courses / inactive elements at the end

parent ec6a4306
No related branches found
No related tags found
No related merge requests found
...@@ -406,6 +406,18 @@ public class CurriculumElementWithViewsRow implements CurriculumElementWithView, ...@@ -406,6 +406,18 @@ public class CurriculumElementWithViewsRow implements CurriculumElementWithView,
public void setAccessTypes(List<PriceMethod> accessTypes) { public void setAccessTypes(List<PriceMethod> accessTypes) {
this.accessTypes = accessTypes; this.accessTypes = accessTypes;
} }
public boolean isClosedOrInactive() {
if(isCurriculumElementOnly()) {
return element.getElementStatus() == CurriculumElementStatus.inactive || element.getElementStatus() == CurriculumElementStatus.deleted;
}
if(isRepositoryEntryOnly()) {
return status != null && status.decommissioned();
}
return (status != null && status.decommissioned())
|| (element != null && element.getElementStatus() != null
&& (element.getElementStatus() == CurriculumElementStatus.inactive || element.getElementStatus() == CurriculumElementStatus.deleted));
}
@Override @Override
public CurriculumElementWithViewsRow getParent() { public CurriculumElementWithViewsRow getParent() {
......
...@@ -78,13 +78,7 @@ public class CurriculumElementViewsRowComparator extends FlexiTreeNodeComparator ...@@ -78,13 +78,7 @@ public class CurriculumElementViewsRowComparator extends FlexiTreeNodeComparator
int c = 0; int c = 0;
if((c1.isCurriculumElementOnly() || c1.isCurriculumElementWithEntry()) && (c2.isCurriculumElementOnly() || c2.isCurriculumElementWithEntry())) { if((c1.isCurriculumElementOnly() || c1.isCurriculumElementWithEntry()) && (c2.isCurriculumElementOnly() || c2.isCurriculumElementWithEntry())) {
// compare by position // compare by position
Long pos1 = c1.getCurriculumElementPos(); c = compareCurriculumElements(c1, c2);
Long pos2 = c2.getCurriculumElementPos();
if(pos1 == null || pos2 == null) {
c = compareNullObjects(pos1, pos2);
} else {
c = Long.compare(pos1.longValue(), pos2.longValue());
}
} else if(c1.isCurriculumElementOnly() || c1.isCurriculumElementWithEntry()) { } else if(c1.isCurriculumElementOnly() || c1.isCurriculumElementWithEntry()) {
c = 1; c = 1;
} else if(c2.isCurriculumElementOnly() || c2.isCurriculumElementWithEntry()) { } else if(c2.isCurriculumElementOnly() || c2.isCurriculumElementWithEntry()) {
...@@ -97,10 +91,18 @@ public class CurriculumElementViewsRowComparator extends FlexiTreeNodeComparator ...@@ -97,10 +91,18 @@ public class CurriculumElementViewsRowComparator extends FlexiTreeNodeComparator
private int compareCurriculumElements(CurriculumElementWithViewsRow c1, CurriculumElementWithViewsRow c2) { private int compareCurriculumElements(CurriculumElementWithViewsRow c1, CurriculumElementWithViewsRow c2) {
int c = 0; int c = 0;
if(c1.getCurriculumElementBeginDate() == null || c2.getCurriculumElementBeginDate() == null) { if(c1.isClosedOrInactive() && !c2.isClosedOrInactive()) {
c = compareNullObjects(c1.getCurriculumElementBeginDate(), c2.getCurriculumElementBeginDate()); c = 1;
} else { } else if(!c1.isClosedOrInactive() && c2.isClosedOrInactive()) {
c = c1.getCurriculumElementBeginDate().compareTo(c2.getCurriculumElementBeginDate()); c = -1;
}
if(c == 0) {
if(c1.getCurriculumElementBeginDate() == null || c2.getCurriculumElementBeginDate() == null) {
c = compareNullObjects(c1.getCurriculumElementBeginDate(), c2.getCurriculumElementBeginDate());
} else {
c = c1.getCurriculumElementBeginDate().compareTo(c2.getCurriculumElementBeginDate());
}
} }
if(c == 0) { if(c == 0) {
...@@ -127,10 +129,19 @@ public class CurriculumElementViewsRowComparator extends FlexiTreeNodeComparator ...@@ -127,10 +129,19 @@ public class CurriculumElementViewsRowComparator extends FlexiTreeNodeComparator
private int compareRepositoryEntry(CurriculumElementWithViewsRow c1, CurriculumElementWithViewsRow c2) { private int compareRepositoryEntry(CurriculumElementWithViewsRow c1, CurriculumElementWithViewsRow c2) {
int c = 0; int c = 0;
if(c1.getRepositoryEntryDisplayName() == null || c2.getRepositoryEntryDisplayName() == null) {
c = compareNullObjects(c1.getRepositoryEntryDisplayName(), c2.getRepositoryEntryDisplayName()); if(c1.isClosedOrInactive() && !c2.isClosedOrInactive()) {
} else { c = 1;
c = collator.compare(c1.getRepositoryEntryDisplayName(), c2.getRepositoryEntryDisplayName()); } else if(!c1.isClosedOrInactive() && c2.isClosedOrInactive()) {
c = -1;
}
if(c == 0) {
if(c1.getRepositoryEntryDisplayName() == null || c2.getRepositoryEntryDisplayName() == null) {
c = compareNullObjects(c1.getRepositoryEntryDisplayName(), c2.getRepositoryEntryDisplayName());
} else {
c = collator.compare(c1.getRepositoryEntryDisplayName(), c2.getRepositoryEntryDisplayName());
}
} }
if(c == 0) { if(c == 0) {
......
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <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 the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <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>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.modules.curriculum.ui.component;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import org.junit.Assert;
import org.junit.Test;
import org.olat.core.commons.persistence.DB;
import org.olat.core.id.Identity;
import org.olat.modules.curriculum.Curriculum;
import org.olat.modules.curriculum.CurriculumCalendars;
import org.olat.modules.curriculum.CurriculumElement;
import org.olat.modules.curriculum.CurriculumElementStatus;
import org.olat.modules.curriculum.CurriculumLectures;
import org.olat.modules.curriculum.CurriculumService;
import org.olat.modules.curriculum.manager.CurriculumDAO;
import org.olat.modules.curriculum.manager.CurriculumElementDAO;
import org.olat.modules.curriculum.ui.CurriculumElementWithViewsRow;
import org.olat.repository.RepositoryEntry;
import org.olat.repository.RepositoryEntryStatusEnum;
import org.olat.repository.model.RepositoryEntryMyCourseImpl;
import org.olat.test.JunitTestHelper;
import org.olat.test.OlatTestCase;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
* Initial date: 26 mars 2019<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class CurriculumElementViewsRowComparatorTest extends OlatTestCase {
@Autowired
private DB dbInstance;
@Autowired
private CurriculumDAO curriculumDao;
@Autowired
private CurriculumService curriculumService;
@Autowired
private CurriculumElementDAO curriculumElementDao;
@Test
public void testCurriculumElementActiveInactive() {
Curriculum curriculum = curriculumDao.createAndPersist("Cur-for-el-1", "Curriculum for element", "Curriculum", null);
CurriculumElement element1 = curriculumElementDao.createCurriculumElement("Element-1", "1. Element", CurriculumElementStatus.inactive,
new Date(), new Date(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
CurriculumElement element2 = curriculumElementDao.createCurriculumElement("Element-1", "2. Element", CurriculumElementStatus.inactive,
new Date(), new Date(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
CurriculumElement element3 = curriculumElementDao.createCurriculumElement("Element-1", "3. Element", CurriculumElementStatus.active,
new Date(), new Date(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
CurriculumElement element4 = curriculumElementDao.createCurriculumElement("Element-1", "4. Element", CurriculumElementStatus.active,
new Date(), new Date(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
dbInstance.commitAndCloseSession();
CurriculumElementWithViewsRow row1 = new CurriculumElementWithViewsRow(element1, null, 0);
CurriculumElementWithViewsRow row2 = new CurriculumElementWithViewsRow(element2, null, 0);
CurriculumElementWithViewsRow row3 = new CurriculumElementWithViewsRow(element3, null, 0);
CurriculumElementWithViewsRow row4 = new CurriculumElementWithViewsRow(element4, null, 0);
List<CurriculumElementWithViewsRow> rows = new ArrayList<>();
rows.add(row1);
rows.add(row2);
rows.add(row3);
rows.add(row4);
Collections.sort(rows, new CurriculumElementViewsRowComparator(Locale.ENGLISH));
Assert.assertEquals(element3.getKey(), rows.get(0).getCurriculumElementKey());
Assert.assertEquals(element4.getKey(), rows.get(1).getCurriculumElementKey());
Assert.assertEquals(element1.getKey(), rows.get(2).getCurriculumElementKey());
Assert.assertEquals(element2.getKey(), rows.get(3).getCurriculumElementKey());
}
/**
* Simulate a list of repository entries under the same curriculum element.
*
*/
@Test
public void testRepositoryEntryActiveInactive() {
Identity author = JunitTestHelper.createAndPersistIdentityAsRndAuthor("sort-cur-el");
Curriculum curriculum = curriculumDao.createAndPersist("Cur-for-el-1", "Curriculum for element", "Curriculum", null);
CurriculumElement element = curriculumElementDao.createCurriculumElement("Element-1", "1. Element", CurriculumElementStatus.inactive,
new Date(), new Date(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
dbInstance.commitAndCloseSession();
RepositoryEntry entry1 = JunitTestHelper.deployBasicCourse(author, "1 course", RepositoryEntryStatusEnum.closed, false, false);
RepositoryEntry entry2 = JunitTestHelper.deployBasicCourse(author, "2 course", RepositoryEntryStatusEnum.trash, false, false);
RepositoryEntry entry3 = JunitTestHelper.deployBasicCourse(author, "3 course", RepositoryEntryStatusEnum.published, false, false);
RepositoryEntry entry4 = JunitTestHelper.deployBasicCourse(author, "4 course", RepositoryEntryStatusEnum.published, false, false);
// add the course and a participant to the curriculum
curriculumService.addRepositoryEntry(element, entry1, false);
curriculumService.addRepositoryEntry(element, entry2, false);
curriculumService.addRepositoryEntry(element, entry3, false);
curriculumService.addRepositoryEntry(element, entry4, false);
dbInstance.commitAndCloseSession();
CurriculumElementWithViewsRow row1 = new CurriculumElementWithViewsRow(element, null,
new RepositoryEntryMyCourseImpl(entry1, null, false, 0, 0), false);
CurriculumElementWithViewsRow row2 = new CurriculumElementWithViewsRow(element, null,
new RepositoryEntryMyCourseImpl(entry2, null, false, 0, 0), false);
CurriculumElementWithViewsRow row3 = new CurriculumElementWithViewsRow(element, null,
new RepositoryEntryMyCourseImpl(entry3, null, false, 0, 0), false);
CurriculumElementWithViewsRow row4 = new CurriculumElementWithViewsRow(element, null,
new RepositoryEntryMyCourseImpl(entry4, null, false, 0, 0), false);
List<CurriculumElementWithViewsRow> rows = new ArrayList<>();
rows.add(row1);
rows.add(row2);
rows.add(row3);
rows.add(row4);
Collections.sort(rows, new CurriculumElementViewsRowComparator(Locale.ENGLISH));
Assert.assertEquals(entry3.getKey(), rows.get(0).getRepositoryEntryKey());
Assert.assertEquals(entry4.getKey(), rows.get(1).getRepositoryEntryKey());
Assert.assertEquals(entry1.getKey(), rows.get(2).getRepositoryEntryKey());
Assert.assertEquals(entry2.getKey(), rows.get(3).getRepositoryEntryKey());
}
/**
* Simulate a list of repository entries under their own curriculum element.
*
*/
@Test
public void testActiveInactiveClosedOrNot() {
Identity author = JunitTestHelper.createAndPersistIdentityAsRndAuthor("sort-cur-el");
Curriculum curriculum = curriculumDao.createAndPersist("Cur-for-el-1", "Curriculum for element", "Curriculum", null);
CurriculumElement element1 = curriculumElementDao.createCurriculumElement("Element-1", "1. Element", CurriculumElementStatus.inactive,
new Date(), new Date(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
CurriculumElement element2 = curriculumElementDao.createCurriculumElement("Element-2", "2. Element", CurriculumElementStatus.inactive,
new Date(), new Date(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
CurriculumElement element3 = curriculumElementDao.createCurriculumElement("Element-3", "3. Element", CurriculumElementStatus.active,
new Date(), new Date(), null, null, CurriculumCalendars.disabled, CurriculumLectures.enabled, curriculum);
CurriculumElement element4 = curriculumElementDao.createCurriculumElement("Element-4", "4. Element", CurriculumElementStatus.active,
new Date(), new Date(), null, null, CurriculumCalendars.disabled, CurriculumLectures.enabled, curriculum);
dbInstance.commitAndCloseSession();
RepositoryEntry entry1 = JunitTestHelper.deployBasicCourse(author, "1 course", RepositoryEntryStatusEnum.closed, false, false);
RepositoryEntry entry2 = JunitTestHelper.deployBasicCourse(author, "2 course", RepositoryEntryStatusEnum.published, false, false);
RepositoryEntry entry3 = JunitTestHelper.deployBasicCourse(author, "3 course", RepositoryEntryStatusEnum.closed, false, false);
RepositoryEntry entry4 = JunitTestHelper.deployBasicCourse(author, "4 course", RepositoryEntryStatusEnum.published, false, false);
// add the course and a participant to the curriculum
curriculumService.addRepositoryEntry(element1, entry1, false);
curriculumService.addRepositoryEntry(element2, entry2, false);
curriculumService.addRepositoryEntry(element3, entry3, false);
curriculumService.addRepositoryEntry(element4, entry4, false);
dbInstance.commitAndCloseSession();
CurriculumElementWithViewsRow row1 = new CurriculumElementWithViewsRow(element1, null,
new RepositoryEntryMyCourseImpl(entry1, null, false, 0, 0), true);
CurriculumElementWithViewsRow row2 = new CurriculumElementWithViewsRow(element2, null,
new RepositoryEntryMyCourseImpl(entry2, null, false, 0, 0), true);
CurriculumElementWithViewsRow row3 = new CurriculumElementWithViewsRow(element3, null,
new RepositoryEntryMyCourseImpl(entry3, null, false, 0, 0), true);
CurriculumElementWithViewsRow row4 = new CurriculumElementWithViewsRow(element4, null,
new RepositoryEntryMyCourseImpl(entry4, null, false, 0, 0), true);
List<CurriculumElementWithViewsRow> rows = new ArrayList<>();
rows.add(row1);
rows.add(row2);
rows.add(row3);
rows.add(row4);
Collections.sort(rows, new CurriculumElementViewsRowComparator(Locale.ENGLISH));
Assert.assertEquals(entry4.getKey(), rows.get(0).getRepositoryEntryKey());
Assert.assertEquals(entry1.getKey(), rows.get(1).getRepositoryEntryKey());
Assert.assertEquals(entry2.getKey(), rows.get(2).getRepositoryEntryKey());
Assert.assertEquals(entry3.getKey(), rows.get(3).getRepositoryEntryKey());
}
}
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