diff --git a/src/main/java/org/olat/ims/qti/qpool/QTIImportProcessor.java b/src/main/java/org/olat/ims/qti/qpool/QTIImportProcessor.java index 3bc313278e4d9bb6e0c84ef4fd1ca87c720cdfb5..4959859d3f35713a4812d026bf180513c0e1692f 100644 --- a/src/main/java/org/olat/ims/qti/qpool/QTIImportProcessor.java +++ b/src/main/java/org/olat/ims/qti/qpool/QTIImportProcessor.java @@ -29,6 +29,7 @@ import java.io.OutputStream; import java.io.StringReader; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -78,6 +79,7 @@ class QTIImportProcessor { private static final OLog log = Tracing.createLoggerFor(QTIImportProcessor.class); private final Identity owner; + private final Locale defaultLocale; private final String importedFilename; private final File importedFile; @@ -86,10 +88,11 @@ class QTIImportProcessor { private final QuestionItemDAO questionItemDao; private final QEducationalContextDAO qEduContextDao; - public QTIImportProcessor(Identity owner, String importedFilename, File importedFile, + public QTIImportProcessor(Identity owner, Locale defaultLocale, String importedFilename, File importedFile, QuestionItemDAO questionItemDao, QItemTypeDAO qItemTypeDao, QEducationalContextDAO qEduContextDao, FileStorage qpoolFileStorage) { this.owner = owner; + this.defaultLocale = defaultLocale; this.importedFilename = importedFilename; this.importedFile = importedFile; this.qItemTypeDao = qItemTypeDao; @@ -164,6 +167,8 @@ class QTIImportProcessor { QuestionItemImpl poolItem = questionItemDao.create(title, QTIConstants.QTI_12_FORMAT, dir, filename); //description poolItem.setDescription(itemInfos.getComment()); + //language from default + poolItem.setLanguage(defaultLocale.getLanguage()); //question type first processItemQuestionType(poolItem, ident, itemEl); //if question type not found, can be overridden by the metadatas diff --git a/src/main/java/org/olat/ims/qti/qpool/QTIQPoolServiceProvider.java b/src/main/java/org/olat/ims/qti/qpool/QTIQPoolServiceProvider.java index a1c812ee70a81476238519b633a182f2602a4591..f52c45abfcf721443dd30434f3d016e03810c337 100644 --- a/src/main/java/org/olat/ims/qti/qpool/QTIQPoolServiceProvider.java +++ b/src/main/java/org/olat/ims/qti/qpool/QTIQPoolServiceProvider.java @@ -22,6 +22,7 @@ package org.olat.ims.qti.qpool; import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.zip.ZipOutputStream; import org.olat.core.gui.UserRequest; @@ -88,8 +89,9 @@ public class QTIQPoolServiceProvider implements QPoolSPI { } @Override - public List<QuestionItem> importItems(Identity owner, String filename, File file) { - QTIImportProcessor processor = new QTIImportProcessor(owner, filename, file, questionItemDao, qItemTypeDao, qEduContextDao, qpoolFileStorage); + public List<QuestionItem> importItems(Identity owner, Locale defaultLocale, String filename, File file) { + QTIImportProcessor processor = new QTIImportProcessor(owner, defaultLocale, filename, file, + questionItemDao, qItemTypeDao, qEduContextDao, qpoolFileStorage); return processor.process(); } diff --git a/src/main/java/org/olat/modules/qpool/QPoolSPI.java b/src/main/java/org/olat/modules/qpool/QPoolSPI.java index 1a238dde191bc22c0b028adc7763a643cc2ef32e..55b85801f19bf030ea0f3e32f11a25049d62c6c0 100644 --- a/src/main/java/org/olat/modules/qpool/QPoolSPI.java +++ b/src/main/java/org/olat/modules/qpool/QPoolSPI.java @@ -21,6 +21,7 @@ package org.olat.modules.qpool; import java.io.File; import java.util.List; +import java.util.Locale; import java.util.zip.ZipOutputStream; import org.olat.core.gui.UserRequest; @@ -45,7 +46,7 @@ public interface QPoolSPI { public boolean isCompatible(String filename, VFSLeaf file); - public List<QuestionItem> importItems(Identity owner, String filename, File file); + public List<QuestionItem> importItems(Identity owner, Locale defaultLocale, String filename, File file); /** * Export the item to the Zip diff --git a/src/main/java/org/olat/modules/qpool/QPoolService.java b/src/main/java/org/olat/modules/qpool/QPoolService.java index 12086bccdefa154c9db7c10ae8efcfe4228b8f43..797594826675eb653c779d50a144f46c78a72e53 100644 --- a/src/main/java/org/olat/modules/qpool/QPoolService.java +++ b/src/main/java/org/olat/modules/qpool/QPoolService.java @@ -21,6 +21,7 @@ package org.olat.modules.qpool; import java.io.File; import java.util.List; +import java.util.Locale; import java.util.zip.ZipOutputStream; import org.olat.core.commons.persistence.ResultInfos; @@ -86,7 +87,7 @@ public interface QPoolService { //import / export public void exportItem(QuestionItemShort item, ZipOutputStream zout); - public List<QuestionItem> importItems(Identity owner, String filename, File file); + public List<QuestionItem> importItems(Identity owner, Locale defaultLocale, String filename, File file); public VFSLeaf getRootFile(QuestionItem item); diff --git a/src/main/java/org/olat/modules/qpool/manager/AbstractQPoolServiceProvider.java b/src/main/java/org/olat/modules/qpool/manager/AbstractQPoolServiceProvider.java index 74e4adf4794f5f41bb76ea945bfc9268688fe37a..869e7f0db4d33877488ecae5f2590a0ffde0361a 100644 --- a/src/main/java/org/olat/modules/qpool/manager/AbstractQPoolServiceProvider.java +++ b/src/main/java/org/olat/modules/qpool/manager/AbstractQPoolServiceProvider.java @@ -27,6 +27,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -57,16 +58,16 @@ public abstract class AbstractQPoolServiceProvider implements QPoolSPI { public abstract FileStorage getFileStorage(); @Override - public List<QuestionItem> importItems(Identity owner, String filename, File file) { + public List<QuestionItem> importItems(Identity owner, Locale defaultLocale, String filename, File file) { List<QuestionItem> items = new ArrayList<QuestionItem>(); - QuestionItem item = importItem(owner, filename, file); + QuestionItem item = importItem(owner, defaultLocale, filename, file); if(item != null) { items.add(item); } return items; } - public QuestionItem importItem(Identity owner, String filename, File file) { + public QuestionItem importItem(Identity owner, Locale defaultLocale, String filename, File file) { String dir = getFileStorage().generateDir(); VFSContainer itemDir = getFileStorage().getContainer(dir); @@ -84,8 +85,10 @@ public abstract class AbstractQPoolServiceProvider implements QPoolSPI { IOUtils.closeQuietly(in); IOUtils.closeQuietly(out); } + + String language = defaultLocale.getLanguage(); return CoreSpringFactory.getImpl(QPoolService.class) - .createAndPersistItem(owner, filename, getFormat(), "de", null, dir, filename, null); + .createAndPersistItem(owner, filename, getFormat(), language, null, dir, filename, null); } @Override diff --git a/src/main/java/org/olat/modules/qpool/manager/QuestionPoolServiceImpl.java b/src/main/java/org/olat/modules/qpool/manager/QuestionPoolServiceImpl.java index cf84ae8ca0b3b4b811dbc7a626d0fd60c3b0acad..f016397f7bd74d7256a441a16b5f5b6da8185d32 100644 --- a/src/main/java/org/olat/modules/qpool/manager/QuestionPoolServiceImpl.java +++ b/src/main/java/org/olat/modules/qpool/manager/QuestionPoolServiceImpl.java @@ -22,6 +22,7 @@ package org.olat.modules.qpool.manager; import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.zip.ZipOutputStream; import org.olat.basesecurity.BaseSecurity; @@ -185,12 +186,12 @@ public class QuestionPoolServiceImpl implements QPoolService { } @Override - public List<QuestionItem> importItems(Identity owner, String filename, File file) { + public List<QuestionItem> importItems(Identity owner, Locale defaultLocale, String filename, File file) { List<QuestionItem> importedItem = null; List<QPoolSPI> providers = qpoolModule.getQuestionPoolProviders(); for(QPoolSPI provider:providers) { if(provider.isCompatible(filename, file)) { - importedItem = provider.importItems(owner, filename, file); + importedItem = provider.importItems(owner, defaultLocale, filename, file); } } return importedItem; diff --git a/src/main/java/org/olat/modules/qpool/ui/ImportController.java b/src/main/java/org/olat/modules/qpool/ui/ImportController.java index 0d30215cc6e05ed34bdd2b53f0941902f1810bf5..698e2a406d75a8d60aedb0977213e296df926c9b 100644 --- a/src/main/java/org/olat/modules/qpool/ui/ImportController.java +++ b/src/main/java/org/olat/modules/qpool/ui/ImportController.java @@ -73,7 +73,7 @@ public class ImportController extends FormBasicController { protected void formOK(UserRequest ureq) { String filename = fileEl.getUploadFileName(); File file = fileEl.getUploadFile(); - qpoolservice.importItems(getIdentity(), filename, file); + qpoolservice.importItems(getIdentity(), getLocale(), filename, file); fireEvent(ureq, Event.DONE_EVENT); } diff --git a/src/main/java/org/olat/modules/qpool/ui/QuestionsController.java b/src/main/java/org/olat/modules/qpool/ui/QuestionsController.java index 66ec154230e62a04eed1d3a563e7dda28b492a23..00ee8c833d20a1247870060b1f81c38e2be62bca 100644 --- a/src/main/java/org/olat/modules/qpool/ui/QuestionsController.java +++ b/src/main/java/org/olat/modules/qpool/ui/QuestionsController.java @@ -79,7 +79,9 @@ public class QuestionsController extends BasicController implements StackedContr mainVC.put("preview", previewCtrl.getInitialComponent()); deleteItem = LinkFactory.createButton("delete.item", mainVC, this); + deleteItem.setEnabled(false); selectItem = LinkFactory.createButton("select.item", mainVC, this); + selectItem.setEnabled(false); String[] js = new String[]{"js/jquery/uilayout/jquery.layout-latest.min.js"}; JSAndCSSComponent jsAndCssComp = new JSAndCSSComponent("layouting", js, null); @@ -162,6 +164,9 @@ public class QuestionsController extends BasicController implements StackedContr QuestionItem item = qpoolService.loadItemById(itemView.getKey()); detailsCtrl.updateItem(item, itemView.isEditable()); previewCtrl.updateItem(ureq, item); + + selectItem.setEnabled(true); + deleteItem.setEnabled(true); } private void doDelete(UserRequest ureq, QuestionItemShort item) { diff --git a/src/test/java/org/olat/ims/qti/qpool/QTIExportProcessorTest.java b/src/test/java/org/olat/ims/qti/qpool/QTIExportProcessorTest.java index 3b2f6bce075e5cca09a753036ab087cdfc69d959..13aabcd03a900c709e368a70c0e4f6efb6ca5ced 100644 --- a/src/test/java/org/olat/ims/qti/qpool/QTIExportProcessorTest.java +++ b/src/test/java/org/olat/ims/qti/qpool/QTIExportProcessorTest.java @@ -25,6 +25,7 @@ import java.net.URISyntaxException; import java.net.URL; import java.util.Collections; import java.util.List; +import java.util.Locale; import junit.framework.Assert; @@ -78,7 +79,7 @@ public class QTIExportProcessorTest extends OlatTestCase { URL itemUrl = QTIExportProcessorTest.class.getResource("mchc_asmimr_106.zip"); Assert.assertNotNull(itemUrl); File itemFile = new File(itemUrl.toURI()); - QTIImportProcessor proc = new QTIImportProcessor(owner, itemFile.getName(), itemFile, questionItemDao, qItemTypeDao, qEduContextDao, qpoolFileStorage); + QTIImportProcessor proc = new QTIImportProcessor(owner, Locale.ENGLISH, itemFile.getName(), itemFile, questionItemDao, qItemTypeDao, qEduContextDao, qpoolFileStorage); List<QuestionItem> items = proc.process(); Assert.assertNotNull(items); dbInstance.commitAndCloseSession(); diff --git a/src/test/java/org/olat/ims/qti/qpool/QTIImportProcessorTest.java b/src/test/java/org/olat/ims/qti/qpool/QTIImportProcessorTest.java index 2bb368d2179aa8082a3f05177c72e54755572688..92068686a165723bbdb442b8b3b9eef5c711d874 100644 --- a/src/test/java/org/olat/ims/qti/qpool/QTIImportProcessorTest.java +++ b/src/test/java/org/olat/ims/qti/qpool/QTIImportProcessorTest.java @@ -25,6 +25,7 @@ import java.io.InputStream; import java.net.URISyntaxException; import java.net.URL; import java.util.List; +import java.util.Locale; import junit.framework.Assert; @@ -98,7 +99,7 @@ public class QTIImportProcessorTest extends OlatTestCase { File itemFile = new File(itemUrl.toURI()); //get the document informations - QTIImportProcessor proc = new QTIImportProcessor(owner, itemFile.getName(), itemFile, questionItemDao, qItemTypeDao, qEduContextDao, qpoolFileStorage); + QTIImportProcessor proc = new QTIImportProcessor(owner, Locale.ENGLISH, itemFile.getName(), itemFile, questionItemDao, qItemTypeDao, qEduContextDao, qpoolFileStorage); DocInfos docInfos = proc.getDocInfos(); Assert.assertNotNull(docInfos); Assert.assertNotNull(docInfos.getFilename()); @@ -148,7 +149,7 @@ public class QTIImportProcessorTest extends OlatTestCase { File itemFile = new File(itemUrl.toURI()); //get the document informations - QTIImportProcessor proc = new QTIImportProcessor(owner, itemFile.getName(), itemFile, questionItemDao, qItemTypeDao, qEduContextDao, qpoolFileStorage); + QTIImportProcessor proc = new QTIImportProcessor(owner, Locale.ENGLISH, itemFile.getName(), itemFile, questionItemDao, qItemTypeDao, qEduContextDao, qpoolFileStorage); List<QuestionItem> items = proc.process(); Assert.assertNotNull(items); Assert.assertEquals(1, items.size()); @@ -181,7 +182,7 @@ public class QTIImportProcessorTest extends OlatTestCase { File testFile = new File(testUrl.toURI()); //get the document informations - QTIImportProcessor proc = new QTIImportProcessor(owner, testFile.getName(), testFile, questionItemDao, qItemTypeDao, qEduContextDao, qpoolFileStorage); + QTIImportProcessor proc = new QTIImportProcessor(owner, Locale.ENGLISH, testFile.getName(), testFile, questionItemDao, qItemTypeDao, qEduContextDao, qpoolFileStorage); DocInfos docInfos = proc.getDocInfos(); Assert.assertNotNull(docInfos); Assert.assertNotNull(docInfos.getFilename()); @@ -201,7 +202,7 @@ public class QTIImportProcessorTest extends OlatTestCase { File itemFile = new File(itemUrl.toURI()); //get the document informations - QTIImportProcessor proc = new QTIImportProcessor(owner, itemFile.getName(), itemFile, questionItemDao, qItemTypeDao, qEduContextDao, qpoolFileStorage); + QTIImportProcessor proc = new QTIImportProcessor(owner, Locale.ENGLISH, itemFile.getName(), itemFile, questionItemDao, qItemTypeDao, qEduContextDao, qpoolFileStorage); List<QuestionItem> items = proc.process(); Assert.assertNotNull(items); Assert.assertEquals(4, items.size()); @@ -263,7 +264,7 @@ public class QTIImportProcessorTest extends OlatTestCase { File itemFile = new File(itemUrl.toURI()); //get the document informations - QTIImportProcessor proc = new QTIImportProcessor(owner, itemFile.getName(), itemFile, questionItemDao, qItemTypeDao, qEduContextDao, qpoolFileStorage); + QTIImportProcessor proc = new QTIImportProcessor(owner, Locale.ENGLISH, itemFile.getName(), itemFile, questionItemDao, qItemTypeDao, qEduContextDao, qpoolFileStorage); List<QuestionItem> items = proc.process(); Assert.assertNotNull(items); Assert.assertEquals(2, items.size()); @@ -309,7 +310,7 @@ public class QTIImportProcessorTest extends OlatTestCase { File itemFile = new File(itemUrl.toURI()); //get the document informations - QTIImportProcessor proc = new QTIImportProcessor(owner, itemFile.getName(), itemFile, questionItemDao, qItemTypeDao, qEduContextDao, qpoolFileStorage); + QTIImportProcessor proc = new QTIImportProcessor(owner, Locale.ENGLISH, itemFile.getName(), itemFile, questionItemDao, qItemTypeDao, qEduContextDao, qpoolFileStorage); List<QuestionItem> items = proc.process(); Assert.assertNotNull(items); Assert.assertEquals(3, items.size()); @@ -362,7 +363,7 @@ public class QTIImportProcessorTest extends OlatTestCase { File itemFile = new File(itemUrl.toURI()); //get the document informations - QTIImportProcessor proc = new QTIImportProcessor(owner, itemFile.getName(), itemFile, questionItemDao, qItemTypeDao, qEduContextDao, qpoolFileStorage); + QTIImportProcessor proc = new QTIImportProcessor(owner, Locale.ENGLISH, itemFile.getName(), itemFile, questionItemDao, qItemTypeDao, qEduContextDao, qpoolFileStorage); List<QuestionItem> items = proc.process(); Assert.assertNotNull(items); Assert.assertEquals(1, items.size()); diff --git a/src/test/java/org/olat/modules/qpool/manager/QuestionPoolServiceTest.java b/src/test/java/org/olat/modules/qpool/manager/QuestionPoolServiceTest.java index ccc5b7a741806741c36f5486d2f13101403d4804..5adf0650cc256ec71ba8448461fc06ff0a0c304c 100644 --- a/src/test/java/org/olat/modules/qpool/manager/QuestionPoolServiceTest.java +++ b/src/test/java/org/olat/modules/qpool/manager/QuestionPoolServiceTest.java @@ -136,7 +136,7 @@ public class QuestionPoolServiceTest extends OlatTestCase { assertNotNull(itemUrl); File itemFile = new File(itemUrl.toURI()); - qpoolService.importItems(owner, "mchc_i_001.xml", itemFile); + qpoolService.importItems(owner, Locale.ENGLISH, "mchc_i_001.xml", itemFile); } @Test @@ -147,7 +147,7 @@ public class QuestionPoolServiceTest extends OlatTestCase { assertNotNull(itemUrl); File itemFile = new File(itemUrl.toURI()); - qpoolService.importItems(owner, "mchc_asmimr_101.xml", itemFile); + qpoolService.importItems(owner, Locale.ENGLISH, "mchc_asmimr_101.xml", itemFile); }