Skip to content
Snippets Groups Projects
Commit 01a2334f authored by uhensler's avatar uhensler
Browse files

OO-3304: Quality analysis filter for series

parent 152560a3
No related branches found
No related tags found
No related merge requests found
Showing
with 242 additions and 102 deletions
......@@ -53,6 +53,7 @@ public class AnalysisSearchParameter {
private Collection<? extends CurriculumRef> contextCurriculumRefs;
private List<? extends CurriculumElementRef> contextCurriculumElementRefs;
private List<? extends TaxonomyLevelRef> contextTaxonomyLevelRefs;
private Collection<Integer> seriesIndexes;
private boolean withUserInfosOnly;
public RepositoryEntryRef getFormEntryRef() {
......@@ -164,6 +165,14 @@ public class AnalysisSearchParameter {
return withUserInfosOnly;
}
public Collection<Integer> getSeriesIndexes() {
return seriesIndexes;
}
public void setSeriesIndexes(Collection<Integer> seriesIndexes) {
this.seriesIndexes = seriesIndexes;
}
public void setWithUserInfosOnly(boolean withUserInfosOnly) {
this.withUserInfosOnly = withUserInfosOnly;
}
......@@ -204,6 +213,9 @@ public class AnalysisSearchParameter {
clone.contextTaxonomyLevelRefs = this.contextTaxonomyLevelRefs != null
? new ArrayList<>(this.contextTaxonomyLevelRefs)
: null;
clone.seriesIndexes = this.seriesIndexes != null
? new ArrayList<>(this.seriesIndexes)
: null;
clone.withUserInfosOnly = this.withUserInfosOnly;
return clone;
}
......
......@@ -37,11 +37,12 @@ public class AvailableAttributes {
private final boolean contextCurriculum;
private final boolean contextCurriculumElement;
private final boolean contextTaxonomyLevel;
private final boolean seriesIndex;
public AvailableAttributes(boolean topicIdentity, boolean topicRepository, boolean topicOrganisation,
boolean topicCurriculum, boolean topicCurriculumElement, Boolean contextLocation,
boolean contextOrganisation, boolean contextCurriculum, boolean contextCurriculumElement,
boolean contextTaxonomyLevel) {
boolean contextTaxonomyLevel, boolean seriesIndex) {
this.topicIdentity = topicIdentity;
this.topicRepository = topicRepository;
this.topicOrganisation = topicOrganisation;
......@@ -52,6 +53,7 @@ public class AvailableAttributes {
this.contextCurriculum = contextCurriculum;
this.contextCurriculumElement = contextCurriculumElement;
this.contextTaxonomyLevel = contextTaxonomyLevel;
this.seriesIndex = seriesIndex;
}
public boolean isTopicIdentity() {
......@@ -94,4 +96,8 @@ public class AvailableAttributes {
return contextTaxonomyLevel;
}
public boolean isSeriesIndex() {
return seriesIndex;
}
}
......@@ -76,6 +76,8 @@ public interface QualityAnalysisService {
public List<CurriculumElement> loadContextCurriculumElements(AnalysisSearchParameter searchParams, boolean withParents);
public List<TaxonomyLevel> loadContextTaxonomyLevels(AnalysisSearchParameter searchParams, boolean withParents);
public Integer loadMaxSeriesIndex(AnalysisSearchParameter searchParams);
public SessionFilter createSessionFilter(AnalysisSearchParameter searchParams);
......
......@@ -73,6 +73,7 @@ public class AnalysisFilterDAO {
sb.append(" , count(contextToCurriculum.curriculum.key) > 0");
sb.append(" , count(contextToCurriculumElement.curriculumElement.key) > 0");
sb.append(" , count(contextToTaxonomyLevel.taxonomyLevel.key) > 0");
sb.append(" , CASE WHEN max(survey.seriesIndex) is not null THEN max(survey.seriesIndex) ELSE 0 END >= 2");
sb.append(" )");
appendFrom(sb, searchParams);
appendWhere(sb, searchParams);
......@@ -255,6 +256,18 @@ public class AnalysisFilterDAO {
return query.getResultList();
}
public Integer loadMaxSeriesIndex(AnalysisSearchParameter searchParams) {
QueryBuilder sb = new QueryBuilder();
sb.append("select max(survey.seriesIndex)");
appendFrom(sb, searchParams);
appendWhere(sb, searchParams);
TypedQuery<Integer> query = dbInstance.getCurrentEntityManager()
.createQuery(sb.toString(), Integer.class);
appendParameters(query, searchParams);
return query.getResultList().get(0);
}
List<Long> loadSessionKeys(AnalysisSearchParameter searchParams) {
QueryBuilder sb = new QueryBuilder();
appendSelectSessionKeys(sb, searchParams);
......@@ -459,6 +472,9 @@ public class AnalysisFilterDAO {
}
}
}
if (searchParams.getSeriesIndexes() != null && !searchParams.getSeriesIndexes().isEmpty()) {
sb.and().append("survey.seriesIndex in :seriesIndexes");
}
if (searchParams.isWithUserInfosOnly()) {
sb.and();
sb.append("(");
......@@ -534,6 +550,9 @@ public class AnalysisFilterDAO {
query.setParameter(parameter, value);
}
}
if (searchParams.getSeriesIndexes() != null && !searchParams.getSeriesIndexes().isEmpty()) {
query.setParameter("seriesIndexes", searchParams.getSeriesIndexes());
}
}
}
......@@ -229,6 +229,11 @@ public class QualityAnalysisServiceImpl implements QualityAnalysisService {
return levels;
}
@Override
public Integer loadMaxSeriesIndex(AnalysisSearchParameter searchParams) {
return filterDao.loadMaxSeriesIndex(searchParams);
}
private boolean isUnusedChild(String pathToCheck, List<String> pathes) {
for (String path : pathes) {
if (path.contains(pathToCheck)) {
......
......@@ -17,6 +17,8 @@ filter.date.range.from=Datenerhebungen von
filter.date.range.to=Datenerhebungen to
filter.hide=Filter
filter.panel.header=Filter
filter.series.index=Serie
filter.series.index.value=Datenerhebung {0}
filter.show=Filter
filter.topic.curriculum.elements=Beurteilungsgegenstand Curriculumelement
filter.topic.curriculums=Beurteilungsgegenstand Curriculum
......
......@@ -17,6 +17,8 @@ filter.date.range.from=Data collections from
filter.date.range.to=Data collections to
filter.hide=Filters
filter.panel.header=Filters
filter.series.index=Series
filter.series.index.value=Data collection {0}
filter.show=Filters
filter.topic.curriculum.elements=Topic curriculum element
filter.topic.curriculums=Topic curriculum
......
......@@ -208,6 +208,7 @@ public class AnalysisFilterDAOTest extends OlatTestCase {
assertThat(attributes.isContextCurriculum()).isFalse();
assertThat(attributes.isContextCurriculumElement()).isFalse();
assertThat(attributes.isContextTaxonomyLevel()).isFalse();
assertThat(attributes.isSeriesIndex()).isFalse();
}
@Test
......@@ -369,6 +370,21 @@ public class AnalysisFilterDAOTest extends OlatTestCase {
assertThat(attributes.isContextTaxonomyLevel()).isTrue();
}
@Test
public void shouldGetAvailableAttributeForSeriesIndex() {
RepositoryEntry formEntry = JunitTestHelper.createAndPersistRepositoryEntry();
Organisation dcOrganisation = qualityTestHelper.createOrganisation();
QualityDataCollection dc1 = qualityService.createDataCollection(asList(dcOrganisation), formEntry);
QualityDataCollection dc2 = qualityService.createDataCollection(asList(dcOrganisation), dc1, null, null);
finish(asList(dc1, dc2));
dbInstance.commitAndCloseSession();
AnalysisSearchParameter searchParams = new AnalysisSearchParameter();
AvailableAttributes attributes = sut.getAvailableAttributes(searchParams);
assertThat(attributes.isSeriesIndex()).isTrue();
}
private QualityDataCollection createFinishedDataCollection() {
RepositoryEntry formEntry = JunitTestHelper.createAndPersistRepositoryEntry();
......@@ -715,6 +731,25 @@ public class AnalysisFilterDAOTest extends OlatTestCase {
.doesNotContainNull();
}
@Test
public void shouldLoadMaxSerieIndex() {
RepositoryEntry formEntry = JunitTestHelper.createAndPersistRepositoryEntry();
Organisation dcOrganisation = organisationService.createOrganisation("", "", null, null, null);
QualityDataCollection dc1 = qualityService.createDataCollection(asList(dcOrganisation), formEntry);
QualityDataCollection dc2 = qualityService.createDataCollection(asList(dcOrganisation), dc1, null, null);
QualityDataCollection dc3 = qualityService.createDataCollection(asList(dcOrganisation), dc2, null, null);
QualityDataCollection dc4 = qualityService.createDataCollection(asList(dcOrganisation), formEntry);
QualityDataCollection dc5 = qualityService.createDataCollection(asList(dcOrganisation), dc4, null, null);
QualityDataCollection dc6 = qualityService.createDataCollection(asList(dcOrganisation), formEntry);
finish(asList(dc1, dc2, dc3, dc4, dc5, dc6));
dbInstance.commitAndCloseSession();
AnalysisSearchParameter searchParams = new AnalysisSearchParameter();
Integer maxLevels = sut.loadMaxSeriesIndex(searchParams);
assertThat(maxLevels).isEqualTo(3);
}
@Test
public void shouldLoadGroupedStatistics() {
RepositoryEntry formEntry = JunitTestHelper.createAndPersistRepositoryEntry();
......@@ -819,7 +854,6 @@ public class AnalysisFilterDAOTest extends OlatTestCase {
}
}
}
@Test
public void shouldLoadGroupedStatisticForEveryGroupBy() {
......@@ -1348,7 +1382,27 @@ public class AnalysisFilterDAOTest extends OlatTestCase {
long expectedUnfiltered = asList(executor1, executor2, executorOther).size();
assertThat(countUnfiltered).isEqualTo(expectedUnfiltered);
}
@Test
public void shouldFilterBySerieNumber() {
RepositoryEntry formEntry = JunitTestHelper.createAndPersistRepositoryEntry();
Organisation dcOrganisation = organisationService.createOrganisation("", "", null, null, null);
QualityDataCollection dc1 = qualityService.createDataCollection(asList(dcOrganisation), formEntry);
QualityDataCollection dc2 = qualityService.createDataCollection(asList(dcOrganisation), dc1, null, null);
QualityDataCollection dc3 = qualityService.createDataCollection(asList(dcOrganisation), dc2, null, null);
QualityDataCollection dc4 = qualityService.createDataCollection(asList(dcOrganisation), formEntry);
QualityDataCollection dc5 = qualityService.createDataCollection(asList(dcOrganisation), dc4, null, null);
QualityDataCollection dc6 = qualityService.createDataCollection(asList(dcOrganisation), formEntry);
finish(asList(dc1, dc2, dc3, dc4, dc5, dc6));
dbInstance.commitAndCloseSession();
AnalysisSearchParameter searchParams = new AnalysisSearchParameter();
searchParams.setSeriesIndexes(asList(1, 3));
Long count = sut.loadAnalyticFigures(searchParams).getDataCollectionCount();
long expected = asList(dc1, dc3, dc4, dc6).size();
assertThat(count).isEqualTo(expected);
}
private void finish(Collection<QualityDataCollection> dataCollections) {
for (QualityDataCollection dataCollection: dataCollections) {
......
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