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

OO-4093: add time column in test settings overview

parent f29c0a91
No related branches found
No related tags found
No related merge requests found
Showing with 201 additions and 163 deletions
...@@ -1371,7 +1371,7 @@ public class AssessmentTestComposerController extends MainLayoutBasicController ...@@ -1371,7 +1371,7 @@ public class AssessmentTestComposerController extends MainLayoutBasicController
removeAsListenerAndDispose(overviewConfigCtrl); removeAsListenerAndDispose(overviewConfigCtrl);
overviewConfigCtrl = new AssessmentTestOverviewConfigurationController(ureq, getWindowControl(), toolbar, overviewConfigCtrl = new AssessmentTestOverviewConfigurationController(ureq, getWindowControl(), toolbar,
testEntry, resolvedAssessmentTest); testEntry, resolvedAssessmentTest, manifestBuilder);
listenTo(overviewConfigCtrl); listenTo(overviewConfigCtrl);
toolbar.pushController(translate("configuration.overview"), overviewConfigCtrl); toolbar.pushController(translate("configuration.overview"), overviewConfigCtrl);
} }
......
...@@ -31,6 +31,9 @@ delete=L\u00F6schen ...@@ -31,6 +31,9 @@ delete=L\u00F6schen
delete.item=$org.olat.ims.qti.editor\:delete.item delete.item=$org.olat.ims.qti.editor\:delete.item
delete.section=$org.olat.ims.qti.editor\:delete.section delete.section=$org.olat.ims.qti.editor\:delete.section
delete.testPart=Wollen Sie den Test-Part mit allen Fragen wirklich l\u00F6schen? delete.testPart=Wollen Sie den Test-Part mit allen Fragen wirklich l\u00F6schen?
duration.m=m
duration.h=h
duration.s=s
editor.sc.title=Single choice editor.sc.title=Single choice
editor.unkown.title=Unbekanntes interaction editor.unkown.title=Unbekanntes interaction
error.assessment.item=$\:error.assessment.test error.assessment.item=$\:error.assessment.test
...@@ -241,6 +244,7 @@ table.header.attempts=L\u00F6sungsversuche ...@@ -241,6 +244,7 @@ table.header.attempts=L\u00F6sungsversuche
table.header.comment=Kommentar erlauben table.header.comment=Kommentar erlauben
table.header.feedback=Feedback table.header.feedback=Feedback
table.header.identifier=Frage ID table.header.identifier=Frage ID
table.header.learning.time=Zeit
table.header.points=Punkte table.header.points=Punkte
table.header.review=R\u00FCckblick erlauben table.header.review=R\u00FCckblick erlauben
table.header.skipping=\u00DCberspringen erlauben table.header.skipping=\u00DCberspringen erlauben
......
...@@ -31,6 +31,9 @@ delete=Delete ...@@ -31,6 +31,9 @@ delete=Delete
delete.item=$org.olat.ims.qti.editor\:delete.item delete.item=$org.olat.ims.qti.editor\:delete.item
delete.section=$org.olat.ims.qti.editor\:delete.section delete.section=$org.olat.ims.qti.editor\:delete.section
delete.testPart=Do you really want to delete the test part along with all its questions? delete.testPart=Do you really want to delete the test part along with all its questions?
duration.m=m
duration.h=h
duration.s=s
editor.sc.title=Single choice editor.sc.title=Single choice
editor.unkown.title=Unkown interaction editor.unkown.title=Unkown interaction
error.assessment.item=$\:error.assessment.test error.assessment.item=$\:error.assessment.test
...@@ -241,6 +244,7 @@ table.header.attempts=Attempts ...@@ -241,6 +244,7 @@ table.header.attempts=Attempts
table.header.comment=Allow comment table.header.comment=Allow comment
table.header.identifier=Question ID table.header.identifier=Question ID
table.header.feedback=Feedback table.header.feedback=Feedback
table.header.learning.time=Time
table.header.points=Points table.header.points=Points
table.header.review=Allow review table.header.review=Allow review
table.header.skipping=Allow skipping table.header.skipping=Allow skipping
......
...@@ -19,9 +19,9 @@ ...@@ -19,9 +19,9 @@
*/ */
package org.olat.ims.qti21.ui.editor.overview; package org.olat.ims.qti21.ui.editor.overview;
import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.atomic.DoubleAdder;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItem;
...@@ -49,6 +49,7 @@ import org.olat.core.gui.translator.Translator; ...@@ -49,6 +49,7 @@ import org.olat.core.gui.translator.Translator;
import org.olat.core.util.StringHelper; import org.olat.core.util.StringHelper;
import org.olat.core.util.Util; import org.olat.core.util.Util;
import org.olat.course.assessment.AssessmentHelper; import org.olat.course.assessment.AssessmentHelper;
import org.olat.ims.qti21.model.xml.ManifestBuilder;
import org.olat.ims.qti21.model.xml.QtiNodesExtractor; import org.olat.ims.qti21.model.xml.QtiNodesExtractor;
import org.olat.ims.qti21.ui.assessment.components.QuestionTypeFlexiCellRenderer; import org.olat.ims.qti21.ui.assessment.components.QuestionTypeFlexiCellRenderer;
import org.olat.ims.qti21.ui.editor.AssessmentTestComposerController; import org.olat.ims.qti21.ui.editor.AssessmentTestComposerController;
...@@ -83,15 +84,17 @@ public class AssessmentTestOverviewConfigurationController extends FormBasicCont ...@@ -83,15 +84,17 @@ public class AssessmentTestOverviewConfigurationController extends FormBasicCont
private final TooledStackedPanel toolbar; private final TooledStackedPanel toolbar;
private final RepositoryEntry testEntry; private final RepositoryEntry testEntry;
private final ManifestBuilder manifestBuilder;
private final ResolvedAssessmentTest resolvedAssessmentTest; private final ResolvedAssessmentTest resolvedAssessmentTest;
@Autowired @Autowired
private UserManager userManager; private UserManager userManager;
public AssessmentTestOverviewConfigurationController(UserRequest ureq, WindowControl wControl, TooledStackedPanel toolbar, public AssessmentTestOverviewConfigurationController(UserRequest ureq, WindowControl wControl, TooledStackedPanel toolbar,
RepositoryEntry testEntry, ResolvedAssessmentTest resolvedAssessmentTest) { RepositoryEntry testEntry, ResolvedAssessmentTest resolvedAssessmentTest, ManifestBuilder manifestBuilder) {
super(ureq, wControl, "overview", Util.createPackageTranslator(AssessmentTestComposerController.class, ureq.getLocale())); super(ureq, wControl, "overview", Util.createPackageTranslator(AssessmentTestComposerController.class, ureq.getLocale()));
this.testEntry = testEntry; this.testEntry = testEntry;
this.manifestBuilder = manifestBuilder;
this.resolvedAssessmentTest = resolvedAssessmentTest; this.resolvedAssessmentTest = resolvedAssessmentTest;
this.toolbar = toolbar; this.toolbar = toolbar;
initForm(ureq); initForm(ureq);
...@@ -174,6 +177,8 @@ public class AssessmentTestOverviewConfigurationController extends FormBasicCont ...@@ -174,6 +177,8 @@ public class AssessmentTestOverviewConfigurationController extends FormBasicCont
DefaultFlexiColumnModel scoreCol = new DefaultFlexiColumnModel(PartCols.maxScore, SelectionTarget.maxpoints.name()); DefaultFlexiColumnModel scoreCol = new DefaultFlexiColumnModel(PartCols.maxScore, SelectionTarget.maxpoints.name());
scoreCol.setCellRenderer(new AssessmentSectionScoreCellRenderer(SelectionTarget.maxpoints.name())); scoreCol.setCellRenderer(new AssessmentSectionScoreCellRenderer(SelectionTarget.maxpoints.name()));
tableColumnModel.addFlexiColumnModel(scoreCol); tableColumnModel.addFlexiColumnModel(scoreCol);
// typical learning time
tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(PartCols.learningTime, new DurationFlexiCellRenderer(getTranslator())));
// max attempts // max attempts
tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(PartCols.attempts, tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(PartCols.attempts,
SelectionTarget.attempts.name(), new MaxAttemptsCellRenderer(getTranslator()))); SelectionTarget.attempts.name(), new MaxAttemptsCellRenderer(getTranslator())));
...@@ -217,74 +222,84 @@ public class AssessmentTestOverviewConfigurationController extends FormBasicCont ...@@ -217,74 +222,84 @@ public class AssessmentTestOverviewConfigurationController extends FormBasicCont
List<ControlObjectRow> rows = new ArrayList<>(); List<ControlObjectRow> rows = new ArrayList<>();
AssessmentTest test = resolvedAssessmentTest.getTestLookup().getRootNodeHolder().getRootNode(); AssessmentTest test = resolvedAssessmentTest.getTestLookup().getRootNodeHolder().getRootNode();
rows.add(ControlObjectRow.valueOf(test)); ControlObjectRow testRow = ControlObjectRow.valueOf(test);
rows.add(testRow);
AggregatedValues aggregatedValues = new AggregatedValues();
List<TestPart> parts = test.getTestParts(); List<TestPart> parts = test.getTestParts();
if(parts.size() == 1) { if(parts.size() == 1) {
List<AssessmentSection> sections = parts.get(0).getAssessmentSections(); List<AssessmentSection> sections = parts.get(0).getAssessmentSections();
for(AssessmentSection section:sections) { for(AssessmentSection section:sections) {
loadModel(section, rows); AggregatedValues values = loadModel(section, rows);
aggregatedValues.add(values);
} }
} else { } else {
for(int i=0; i<parts.size(); i++) { for(int i=0; i<parts.size(); i++) {
loadModel(parts.get(i), (i+1), rows); AggregatedValues values = loadModel(parts.get(i), (i+1), rows);
aggregatedValues.add(values);
} }
} }
if(aggregatedValues.getLearningTime() != null) {
testRow.setLearningTime(aggregatedValues.getLearningTime());
}
tableModel.setObjects(rows); tableModel.setObjects(rows);
tableEl.reset(true, true, true); tableEl.reset(true, true, true);
} }
private void loadModel(TestPart part, int pos, List<ControlObjectRow> rows) { private AggregatedValues loadModel(TestPart part, int pos, List<ControlObjectRow> rows) {
ControlObjectRow partRow = ControlObjectRow.valueOf(part, pos); ControlObjectRow partRow = ControlObjectRow.valueOf(part, pos);
rows.add(partRow); rows.add(partRow);
boolean someMaxScore = false; AggregatedValues aggregatedValues = new AggregatedValues();
DoubleAdder atomicMaxScore = new DoubleAdder();
List<AssessmentSection> sections = part.getAssessmentSections(); List<AssessmentSection> sections = part.getAssessmentSections();
for(AssessmentSection section:sections) { for(AssessmentSection section:sections) {
Double maxScore = loadModel(section, rows); AggregatedValues values = loadModel(section, rows);
if(maxScore != null) { aggregatedValues.add(values);
someMaxScore = true;
atomicMaxScore.add(maxScore.doubleValue());
}
} }
if(someMaxScore) { if(aggregatedValues.getMaxScore() != null) {
partRow.setMaxScore(Double.valueOf(atomicMaxScore.sum())); partRow.setMaxScore(aggregatedValues.getMaxScore());
}
if(aggregatedValues.getLearningTime() != null) {
partRow.setLearningTime(aggregatedValues.getLearningTime());
} }
return aggregatedValues;
} }
private Double loadModel(AssessmentSection section, List<ControlObjectRow> rows) { private AggregatedValues loadModel(AssessmentSection section, List<ControlObjectRow> rows) {
ControlObjectRow sectionRow = ControlObjectRow.valueOf(section); ControlObjectRow sectionRow = ControlObjectRow.valueOf(section);
rows.add(sectionRow); rows.add(sectionRow);
boolean someMaxScore = false; AggregatedValues aggregatedValues = new AggregatedValues();
DoubleAdder atomicMaxScore = new DoubleAdder();
for(SectionPart part: section.getSectionParts()) { for(SectionPart part: section.getSectionParts()) {
Double maxScore = null; AggregatedValues values = null;
if(part instanceof AssessmentItemRef) { if(part instanceof AssessmentItemRef) {
maxScore = loadModel((AssessmentItemRef)part, rows); values = loadModel((AssessmentItemRef)part, rows);
} else if(part instanceof AssessmentSection) { } else if(part instanceof AssessmentSection) {
maxScore = loadModel((AssessmentSection) part, rows); values = loadModel((AssessmentSection) part, rows);
} }
if(maxScore != null) { if(values != null) {
someMaxScore = true; aggregatedValues.add(values);
atomicMaxScore.add(maxScore.doubleValue());
} }
} }
if(someMaxScore) { if(aggregatedValues.getMaxScore() != null) {
sectionRow.setMaxScore(Double.valueOf(atomicMaxScore.sum())); sectionRow.setMaxScore(aggregatedValues.getMaxScore());
}
if(aggregatedValues.getLearningTime() != null) {
sectionRow.setLearningTime(aggregatedValues.getLearningTime());
} }
return sectionRow.getMaxScore(); return new AggregatedValues(sectionRow.getMaxScore(), sectionRow.getLearningTime());
} }
private Double loadModel(AssessmentItemRef itemRef, List<ControlObjectRow> rows) { private AggregatedValues loadModel(AssessmentItemRef itemRef, List<ControlObjectRow> rows) {
Double maxScore = null; Double maxScore = null;
Long learningTime = null;
ResolvedAssessmentItem resolvedAssessmentItem = resolvedAssessmentTest.getResolvedAssessmentItem(itemRef); ResolvedAssessmentItem resolvedAssessmentItem = resolvedAssessmentTest.getResolvedAssessmentItem(itemRef);
if(resolvedAssessmentItem == null || resolvedAssessmentItem.getItemLookup() == null if(resolvedAssessmentItem == null || resolvedAssessmentItem.getItemLookup() == null
|| resolvedAssessmentItem.getItemLookup().getRootNodeHolder() == null) { || resolvedAssessmentItem.getItemLookup().getRootNodeHolder() == null) {
...@@ -295,13 +310,13 @@ public class AssessmentTestOverviewConfigurationController extends FormBasicCont ...@@ -295,13 +310,13 @@ public class AssessmentTestOverviewConfigurationController extends FormBasicCont
rows.add(ControlObjectRow.errorOf(itemRef)); rows.add(ControlObjectRow.errorOf(itemRef));
} else { } else {
AssessmentItem assessmentItem = resolvedAssessmentItem.getItemLookup().getRootNodeHolder().getRootNode(); AssessmentItem assessmentItem = resolvedAssessmentItem.getItemLookup().getRootNodeHolder().getRootNode();
ControlObjectRow row = ControlObjectRow.valueOf(itemRef, assessmentItem); ControlObjectRow row = ControlObjectRow.valueOf(itemRef, assessmentItem, manifestBuilder);
maxScore = row.getMaxScore(); maxScore = row.getMaxScore();
learningTime = row.getLearningTime();
rows.add(row); rows.add(row);
} }
} }
return maxScore; return new AggregatedValues(maxScore, learningTime);
} }
@Override @Override
...@@ -324,6 +339,45 @@ public class AssessmentTestOverviewConfigurationController extends FormBasicCont ...@@ -324,6 +339,45 @@ public class AssessmentTestOverviewConfigurationController extends FormBasicCont
// //
} }
private static class AggregatedValues {
private BigDecimal maxScore = null;
private Long learningTime = null;
public AggregatedValues() {
//
}
public AggregatedValues(Double maxScore, Long learningTime) {
this.maxScore = maxScore == null ? null : BigDecimal.valueOf(maxScore.doubleValue());
this.learningTime = learningTime;
}
public Double getMaxScore() {
return maxScore == null ? null : Double.valueOf(maxScore.doubleValue());
}
public Long getLearningTime() {
return learningTime;
}
public void add(AggregatedValues values) {
if(values != null) {
if(maxScore == null) {
maxScore = values.maxScore;
} else if(values.getMaxScore() != null) {
maxScore = maxScore.add(values.maxScore);
}
if(learningTime == null) {
learningTime = values.getLearningTime();
} else if(values.getLearningTime() != null) {
learningTime += values.getLearningTime();
}
}
}
}
private static class TestAndSectionCellRenderer implements FlexiCellRenderer { private static class TestAndSectionCellRenderer implements FlexiCellRenderer {
private final FlexiCellRenderer delegate; private final FlexiCellRenderer delegate;
......
...@@ -49,6 +49,7 @@ public class AssessmentTestOverviewDataModel extends DefaultFlexiTableDataModel< ...@@ -49,6 +49,7 @@ public class AssessmentTestOverviewDataModel extends DefaultFlexiTableDataModel<
case type: return partRow.getType(); case type: return partRow.getType();
case identifier: return partRow.getIdentifier(); case identifier: return partRow.getIdentifier();
case feedback: return partRow.getFeedbacks(); case feedback: return partRow.getFeedbacks();
case learningTime: return partRow.getLearningTime();
default: return "ERROR"; default: return "ERROR";
} }
} }
...@@ -69,7 +70,8 @@ public class AssessmentTestOverviewDataModel extends DefaultFlexiTableDataModel< ...@@ -69,7 +70,8 @@ public class AssessmentTestOverviewDataModel extends DefaultFlexiTableDataModel<
solution("table.header.solution"), solution("table.header.solution"),
type("table.header.type"), type("table.header.type"),
identifier("table.header.identifier"), identifier("table.header.identifier"),
feedback("table.header.feedback"); feedback("table.header.feedback"),
learningTime("table.header.learning.time");
private final String i18nKey; private final String i18nKey;
......
...@@ -21,8 +21,13 @@ package org.olat.ims.qti21.ui.editor.overview; ...@@ -21,8 +21,13 @@ package org.olat.ims.qti21.ui.editor.overview;
import java.util.List; import java.util.List;
import org.olat.core.util.StringHelper;
import org.olat.ims.qti21.model.QTI21QuestionType; import org.olat.ims.qti21.model.QTI21QuestionType;
import org.olat.ims.qti21.model.xml.ManifestBuilder;
import org.olat.ims.qti21.model.xml.ManifestMetadataBuilder;
import org.olat.ims.qti21.model.xml.QtiNodesExtractor; import org.olat.ims.qti21.model.xml.QtiNodesExtractor;
import org.olat.modules.qpool.manager.MetadataConverterHelper;
import org.olat.modules.qpool.model.LOMDuration;
import uk.ac.ed.ph.jqtiplus.node.QtiNode; import uk.ac.ed.ph.jqtiplus.node.QtiNode;
import uk.ac.ed.ph.jqtiplus.node.item.AssessmentItem; import uk.ac.ed.ph.jqtiplus.node.item.AssessmentItem;
...@@ -56,6 +61,8 @@ public class ControlObjectRow { ...@@ -56,6 +61,8 @@ public class ControlObjectRow {
private OptionAndInheritance solution; private OptionAndInheritance solution;
private MaxAttemptOption attemptOption; private MaxAttemptOption attemptOption;
private Long typicalLearningTime;
public ControlObjectRow(String title, ControlObject<?> part, String iconCssClass) { public ControlObjectRow(String title, ControlObject<?> part, String iconCssClass) {
this.part = part; this.part = part;
this.title = title; this.title = title;
...@@ -93,7 +100,7 @@ public class ControlObjectRow { ...@@ -93,7 +100,7 @@ public class ControlObjectRow {
return new ControlObjectRow("ERROR", itemRef, "o_icon_error"); return new ControlObjectRow("ERROR", itemRef, "o_icon_error");
} }
public static ControlObjectRow valueOf(AssessmentItemRef itemRef, AssessmentItem assessmentItem) { public static ControlObjectRow valueOf(AssessmentItemRef itemRef, AssessmentItem assessmentItem, ManifestBuilder manifestBuilder) {
String itemCssClass; String itemCssClass;
QTI21QuestionType type = QTI21QuestionType.getType(assessmentItem); QTI21QuestionType type = QTI21QuestionType.getType(assessmentItem);
if(type != null) { if(type != null) {
...@@ -107,6 +114,16 @@ public class ControlObjectRow { ...@@ -107,6 +114,16 @@ public class ControlObjectRow {
boolean hasFeedbacks = !assessmentItem.getModalFeedbacks().isEmpty(); boolean hasFeedbacks = !assessmentItem.getModalFeedbacks().isEmpty();
row.feedbacks = Boolean.valueOf(hasFeedbacks); row.feedbacks = Boolean.valueOf(hasFeedbacks);
configuration(row, itemRef); configuration(row, itemRef);
ManifestMetadataBuilder metadata = manifestBuilder.getResourceBuilderByHref(itemRef.getHref().toString());
if(metadata != null && metadata.getLom(false) != null) {
String learningTime = metadata.getEducationalLearningTime();
if(StringHelper.containsNonWhitespace(learningTime)) {
LOMDuration duration = MetadataConverterHelper.convertDuration(learningTime);
row.typicalLearningTime = Long.valueOf(MetadataConverterHelper.convertToSeconds(duration));
}
}
return row; return row;
} }
...@@ -232,6 +249,9 @@ public class ControlObjectRow { ...@@ -232,6 +249,9 @@ public class ControlObjectRow {
return OptionEnum.no; return OptionEnum.no;
} }
public String getTitle() { public String getTitle() {
return title; return title;
} }
...@@ -284,6 +304,14 @@ public class ControlObjectRow { ...@@ -284,6 +304,14 @@ public class ControlObjectRow {
return attemptOption; return attemptOption;
} }
public Long getLearningTime() {
return typicalLearningTime;
}
public void setLearningTime(Long learningTime) {
this.typicalLearningTime = learningTime;
}
public int getDepth() { public int getDepth() {
int depth = 0; int depth = 0;
for(ControlObject<?> parent=part.getParent(); parent != null; parent = parent.getParent()) { for(ControlObject<?> parent=part.getParent(); parent != null; parent = parent.getParent()) {
......
/**
* <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.ims.qti21.ui.editor.overview;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiCellRenderer;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableComponent;
import org.olat.core.gui.render.Renderer;
import org.olat.core.gui.render.StringOutput;
import org.olat.core.gui.render.URLBuilder;
import org.olat.core.gui.translator.Translator;
/**
*
* Initial date: 25 juin 2019<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class DurationFlexiCellRenderer implements FlexiCellRenderer {
private final Translator translator;
public DurationFlexiCellRenderer(Translator translator) {
this.translator = translator;
}
@Override
public void render(Renderer renderer, StringOutput target, Object cellValue,
int row, FlexiTableComponent source, URLBuilder ubu, Translator trans) {
if(cellValue instanceof Long) {
long duration = ((Long)cellValue).longValue();
long h = duration / (60*60);
long hmins = h*60*60;
long m = (duration - hmins) / (60);
long s = (duration - hmins - m * 60)/1000;
if(h > 0) {
target.append(" ").append(h).append(translator.translate("duration.h"));
}
target.append(" ").append(m).append(translator.translate("duration.m"));
if(s > 0) {
target.append(" ").append(s).append(translator.translate("duration.s"));
}
}
}
}
\ No newline at end of file
...@@ -134,6 +134,16 @@ public class MetadataConverterHelper { ...@@ -134,6 +134,16 @@ public class MetadataConverterHelper {
} }
} }
public static long convertToSeconds(LOMDuration duration) {
long time = duration.getSeconds();
time += (duration.getMinute() * 60);
time += (duration.getHour() * (60 * 60));
time += (duration.getDay() * (60 * 60 * 24));
time += (duration.getMonth() * (60 * 60 * 24 * 30));
time += (duration.getYear() * (60 * 60 * 24 * 30 * 365));
return time;
}
private static void convertDurationT(String durationStr, LOMDuration duration) { private static void convertDurationT(String durationStr, LOMDuration duration) {
int indexH = durationStr.indexOf('H'); int indexH = durationStr.indexOf('H');
if(indexH >= 0) { if(indexH >= 0) {
...@@ -158,131 +168,4 @@ public class MetadataConverterHelper { ...@@ -158,131 +168,4 @@ public class MetadataConverterHelper {
String intVal = durationStr.substring(0, index); String intVal = durationStr.substring(0, index);
return Integer.parseInt(intVal); return Integer.parseInt(intVal);
} }
/*
protected void toLom(QuestionItemImpl item, OutputStream out) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
factory.setNamespaceAware(false);
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
Element lomEl = (Element)document.appendChild(document.createElement("lom"));
generalToLom(item, lomEl, document);
DOMSource domSource = new DOMSource(document);
StreamResult streamResult = new StreamResult(out);
Transformer serializer = TransformerFactory.newInstance().newTransformer();
serializer.transform(domSource, streamResult);
} catch (Exception e) {
log.error("", e);
}
}
protected void generalToLom(QuestionItemImpl item, Node lomEl, Document doc) {
Node generalEl = lomEl.appendChild(doc.createElement("general"));
//identifier
//master identifier
//title
Node titleEl = generalEl.appendChild(doc.createElement("title"));
stringToLom(item, item.getTitle(), titleEl, doc);
//description
Node descEl = generalEl.appendChild(doc.createElement("description"));
stringToLom(item, item.getDescription(), descEl, doc);
//keywords
//coverage
//additional information
//language
Element languageEl = (Element)generalEl.appendChild(doc.createElement("language"));
languageEl.setAttribute("value", item.getLanguage());
}
protected void taxonomyToLom(QuestionItemImpl item, Node lomEl, Document doc) {
Node generalEl = lomEl.appendChild(doc.createElement("classification"));
}
protected void educationalToLom(QuestionItemImpl item, Node lomEl, Document doc) {
Node generalEl = lomEl.appendChild(doc.createElement("educational"));
}
protected void lifecycleToLom(QuestionItemImpl item, Node lomEl, Document doc) {
Node generalEl = lomEl.appendChild(doc.createElement("lifecycle"));
//version
//status
//urheber / contribute
}
protected void rightsToLom(QuestionItemImpl item, Node lomEl, Document doc) {
Node generalEl = lomEl.appendChild(doc.createElement("rights"));
//copyright
//description
}
protected void stringToLom(QuestionItemImpl item, String value, Node el, Document doc) {
Element stringEl = (Element)el.appendChild(doc.createElement("string"));
stringEl.setAttribute("value", value);
stringEl.setAttribute("language", item.getLanguage());
}
protected void toItem(QuestionItemImpl item, InputStream in) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
factory.setNamespaceAware(false);
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new InputSource(in));
for(Node child=document.getDocumentElement().getFirstChild(); child != null; child=child.getNextSibling()) {
if(Node.ELEMENT_NODE != child.getNodeType()) continue;
String name = child.getNodeName().toLowerCase();
if("educational".equals(name)) {
} else if("general".equals(name)) {
generalToItem(item, (Element)child);
}
}
} catch (Exception e) {
log.error("", e);
}
}
private void generalToItem(QuestionItemImpl item, Element generalEl) {
for(Node child=generalEl.getFirstChild(); child != null; child=child.getNextSibling()) {
if(Node.ELEMENT_NODE != child.getNodeType()) continue;
String name = child.getNodeName().toLowerCase();
if("title".equals(name)) {
item.setTitle(getString((Element)child));
} else if("description".equals(name)) {
item.setDescription(getString((Element)child));
}
}
}
private String getString(Element el) {
String val = null;
for(Node child=el.getFirstChild(); child != null; child=child.getNextSibling()) {
if(Node.ELEMENT_NODE != child.getNodeType()) continue;
String name = child.getNodeName().toLowerCase();
if("string".equals(name)) {
val = ((Element)child).getAttribute("value");
}
}
return val;
}*/
} }
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