Skip to content
Snippets Groups Projects
Commit 153cb945 authored by srosse's avatar srosse
Browse files

OO-4761: cache the reference entry of QTI test for specific purposes

parent 052b78ee
No related branches found
No related tags found
No related merge requests found
......@@ -140,6 +140,8 @@ public class IQTESTCourseNode extends AbstractAccessableCourseNode implements QT
private static final int CURRENT_CONFIG_VERSION = 2;
private transient RepositoryEntry cachedReferenceRepositoryEntry;
public IQTESTCourseNode() {
this(null);
}
......@@ -424,12 +426,27 @@ public class IQTESTCourseNode extends AbstractAccessableCourseNode implements QT
sd.setActivateableViewIdentifier(pane);
status.add(sd);
}
/**
* @return A cached instance of the reference repository entry. May be not suitable
* to insert an assessment entry.
*/
public RepositoryEntry getCachedReferencedRepositoryEntry() {
RepositoryEntry cachedEntry = cachedReferenceRepositoryEntry;
if(IQEditController.matchIQReference(cachedEntry, getModuleConfiguration())) {
return cachedEntry;
}
// The method updates the cache
return getReferencedRepositoryEntry();
}
@Override
public RepositoryEntry getReferencedRepositoryEntry() {
// ",false" because we do not want to be strict, but just indicate whether
// the reference still exists or not
return IQEditController.getIQReference(getModuleConfiguration(), false);
RepositoryEntry entry = IQEditController.getIQReference(getModuleConfiguration(), false);
cachedReferenceRepositoryEntry = entry;
return entry;
}
@Override
......
......@@ -380,6 +380,11 @@ public class IQEditController extends ActivateableTabbableDefaultController impl
moduleConfiguration.set(CONFIG_KEY_REPOSITORY_SOFTKEY, re.getSoftkey());
}
public static boolean matchIQReference(RepositoryEntry re, ModuleConfiguration moduleConfiguration) {
String repoSoftkey = (String)moduleConfiguration.get(CONFIG_KEY_REPOSITORY_SOFTKEY);
return repoSoftkey != null && re != null && repoSoftkey.equals(re.getSoftkey());
}
/**
* Remove the reference to the repository entry.
*
......
......@@ -78,7 +78,7 @@ public class IQTESTAssessmentConfig implements AssessmentConfig {
|| IQEditController.CONFIG_VALUE_QTI1.equals(config.get(IQEditController.CONFIG_KEY_TYPE_QTI))) {
maxScore = (Float) config.get(IQEditController.CONFIG_KEY_MAXSCORE);
} else {
RepositoryEntry testEntry = courseNode.getReferencedRepositoryEntry();
RepositoryEntry testEntry = courseNode.getCachedReferencedRepositoryEntry();
if (testEntry != null) {
if(QTIResourceTypeModule.isQtiWorks(testEntry.getOlatResource())) {
AssessmentTest assessmentTest = courseNode.loadAssessmentTest(testEntry);
......@@ -107,7 +107,7 @@ public class IQTESTAssessmentConfig implements AssessmentConfig {
|| IQEditController.CONFIG_VALUE_QTI1.equals(config.get(IQEditController.CONFIG_KEY_TYPE_QTI))) {
minScore = (Float) config.get(IQEditController.CONFIG_KEY_MINSCORE);
} else {
RepositoryEntry testEntry = courseNode.getReferencedRepositoryEntry();
RepositoryEntry testEntry = courseNode.getCachedReferencedRepositoryEntry();
if (testEntry != null) {
if(QTIResourceTypeModule.isQtiWorks(testEntry.getOlatResource())) {
AssessmentTest assessmentTest = courseNode.loadAssessmentTest(testEntry);
......@@ -135,7 +135,7 @@ public class IQTESTAssessmentConfig implements AssessmentConfig {
|| IQEditController.CONFIG_VALUE_QTI1.equals(config.get(IQEditController.CONFIG_KEY_TYPE_QTI))) {
mode = Mode.setByNode;
} else {
RepositoryEntry testEntry = courseNode.getReferencedRepositoryEntry();
RepositoryEntry testEntry = courseNode.getCachedReferencedRepositoryEntry();
if (testEntry != null) {
if(QTIResourceTypeModule.isQtiWorks(testEntry.getOlatResource())) {
AssessmentTest assessmentTest = courseNode.loadAssessmentTest(testEntry);
......@@ -168,7 +168,7 @@ public class IQTESTAssessmentConfig implements AssessmentConfig {
|| IQEditController.CONFIG_VALUE_QTI1.equals(config.get(IQEditController.CONFIG_KEY_TYPE_QTI))) {
cutValue = (Float) config.get(IQEditController.CONFIG_KEY_CUTVALUE);
} else {
RepositoryEntry testEntry = courseNode.getReferencedRepositoryEntry();
RepositoryEntry testEntry = courseNode.getCachedReferencedRepositoryEntry();
if (testEntry != null) {
if(QTIResourceTypeModule.isQtiWorks(testEntry.getOlatResource())) {
AssessmentTest assessmentTest = courseNode.loadAssessmentTest(testEntry);
......
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