diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/DefaultFlexiTableDataSourceModel.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/DefaultFlexiTableDataSourceModel.java index 54976b4bf62d29f879b4be21e94ecc3e23ec12cb..69475426199040734d148ddbbc7571f309861d9a 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/DefaultFlexiTableDataSourceModel.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/DefaultFlexiTableDataSourceModel.java @@ -202,6 +202,8 @@ public abstract class DefaultFlexiTableDataSourceModel<U> implements FlexiTableD if(firstResult == 0) { if(newRows.getObjects().size() < correctMaxResults) { rowCount = newRows.getObjects().size(); + } else if(newRows.getCorrectedRowCount() >= 0) { + rowCount = newRows.getCorrectedRowCount(); } else { rowCount = sourceDelegate.getRowCount(); } diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiDataTablesRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiDataTablesRenderer.java index 194b8e16fd7e44c88a01ae5c5c6a971c583f3124..dc0396ab8f4d59ccb44b8a3b412d0ebc5aa86ef3 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiDataTablesRenderer.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiDataTablesRenderer.java @@ -58,7 +58,7 @@ class FlexiDataTablesRenderer extends AbstractFlexiTableRenderer implements Comp Form rootForm = ftE.getRootForm(); String id = ftC.getFormDispatchId(); - int rows = dataModel.getRowCount(); + int loadedRows = dataModel.getRowCount(); int selectPos = -1; Object selectedObject = ftE.getSelectedObj(); @@ -74,16 +74,17 @@ class FlexiDataTablesRenderer extends AbstractFlexiTableRenderer implements Comp target.append("<script type='text/javascript'>") .append("/* <![CDATA[ */ \n") .append("jQuery(function() {\n") + .append(" var scrollHeight = (jQuery('#qitems').height() - 130) + 'px';\n") .append(" var selectedIndex =").append(selectPos).append(";\n") .append(" jQuery('#").append(id).append("').dataTable( {\n") .append(" 'bScrollInfinite': true,\n") .append(" 'bScrollCollapse': true,\n") .append(" 'bFilter': false,\n") - .append(" 'sScrollY': '1px',\n") + .append(" 'sScrollY': scrollHeight,\n") .append(" 'bProcessing': true,\n") .append(" 'bServerSide': true,\n") .append(" 'iDisplayLength': ").append(ftE.getPageSize()).append(",\n") - .append(" 'iDeferLoading': ").append(rows).append(",\n") + .append(" 'iDeferLoading': ").append(loadedRows).append(",\n") .append(" 'sAjaxSource': '").append(ftE.getMapperUrl()).append("',\n") .append(" 'asStripeClasses': ['','b_table_odd'],\n") .append(" 'fnRowCallback': function( nRow, aData, iDisplayIndex, iDisplayIndexFull) {\n") diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java index 671c18c18b7d7fe6472f2468a58f4c371e82f078..8b45f43b8c7bac4b692b1681199f8cf2e7d3ccdc 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java @@ -477,8 +477,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle if(dataSource != null) { resetInternComponents(); dataSource.clear(); - ResultInfos<?> infos = dataSource.load(search, conditionalQueries, 0, getPageSize(), orderBy); - System.out.println("Found: " + infos.getObjects().size()); + dataSource.load(search, conditionalQueries, 0, getPageSize(), orderBy); } } 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 ba841009d76ba858e0e3b0de497980a0a0f525fd..23f2ccec4509d1cf6c91c02bccf59766d28566c5 100644 --- a/src/main/java/org/olat/modules/qpool/manager/QuestionPoolServiceImpl.java +++ b/src/main/java/org/olat/modules/qpool/manager/QuestionPoolServiceImpl.java @@ -122,6 +122,8 @@ public class QuestionPoolServiceImpl implements QPoolService { for(QuestionItemShort item:items) { lifeIndexer.deleteDocument(QItemDocument.TYPE, item.getKey()); } + + dbInstance.getCurrentEntityManager().flush();//allow reload of data } @Override @@ -173,6 +175,7 @@ public class QuestionPoolServiceImpl implements QPoolService { return questionItemDao.loadById(key); } + @Override public QuestionItem updateItem(QuestionItem item) { QuestionItem mergedItem = questionItemDao.merge(item); dbInstance.commit();// @@ -192,6 +195,9 @@ public class QuestionPoolServiceImpl implements QPoolService { } copies.add(copy); } + if(copies.size()> 0) {// reload of data must be possible in the same transaction + dbInstance.getCurrentEntityManager().flush(); + } return copies; } @@ -262,6 +268,10 @@ public class QuestionPoolServiceImpl implements QPoolService { @Override public VFSLeaf getRootFile(QuestionItem item) { QuestionItemImpl reloadedItem = questionItemDao.loadById(item.getKey()); + if(reloadedItem == null) { + return null; + } + VFSContainer root = qpoolModule.getRootContainer(); VFSItem dir = root.resolve(reloadedItem.getDirectory()); if(dir instanceof VFSContainer) { diff --git a/src/main/java/org/olat/modules/qpool/ui/QuestionItemDataModel.java b/src/main/java/org/olat/modules/qpool/ui/QuestionItemDataModel.java index 487939153d52542ab01457d1b024b0f8b6006d18..528721d6a4439d30a8ad1e852410d4fd3001bfc7 100644 --- a/src/main/java/org/olat/modules/qpool/ui/QuestionItemDataModel.java +++ b/src/main/java/org/olat/modules/qpool/ui/QuestionItemDataModel.java @@ -95,7 +95,7 @@ public class QuestionItemDataModel extends DefaultFlexiTableDataSourceModel<Item taxnonomyLevel("classification.taxonomy.level"), difficulty("question.difficulty"), - type("question.assessmentType"), + type("question.type"), format("technical.format"), rating("rating"), status("lifecycle.status"), diff --git a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java index 9c19326eb72a312e4a11a6b7024cae31b60f220f..4c298038c8edb8b24bfb6c9471c78ae3bea84f9c 100644 --- a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java +++ b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java @@ -66,6 +66,9 @@ import org.olat.repository.controllers.RepositoryAddController; import org.olat.repository.controllers.RepositoryDetailsController; /** + * + * This controller wrap the table of qitems and decorate it with + * features like copy, delete...<br/> * * Initial date: 22.01.2013<br> * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com 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 9518d096b0c98831b736626d8a66cb717885b733..cfd47305a6baef9bdc07be9900ce40c0cda66474 100644 --- a/src/main/java/org/olat/modules/qpool/ui/QuestionsController.java +++ b/src/main/java/org/olat/modules/qpool/ui/QuestionsController.java @@ -49,6 +49,9 @@ import org.olat.modules.qpool.ui.events.QItemViewEvent; import org.olat.modules.qpool.ui.events.QPoolEvent; /** + * + * This controller build the GUI with the table of items, + * the preview and the short summary of metadatas.<br/> * * Initial date: 12.02.2013<br> * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com diff --git a/src/main/java/org/olat/modules/qpool/ui/admin/PoolsAdminController.java b/src/main/java/org/olat/modules/qpool/ui/admin/PoolsAdminController.java index a457dbccb056b349afd6426ad58f875de8f49bc0..98a21d007934b63c3c0a78db9b9a3b90cd5735cd 100644 --- a/src/main/java/org/olat/modules/qpool/ui/admin/PoolsAdminController.java +++ b/src/main/java/org/olat/modules/qpool/ui/admin/PoolsAdminController.java @@ -98,7 +98,7 @@ public class PoolsAdminController extends FormBasicController { protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { //add the table FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel(); - columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.id.i18nKey(), Cols.id.ordinal(), true, "key")); + columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, Cols.id.i18nKey(), Cols.id.ordinal(), true, "key")); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.publicPool.i18nKey(), Cols.publicPool.ordinal(), true, "name")); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.name.i18nKey(), Cols.name.ordinal(), true, "name")); columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel("edit", translate("edit"), "edit-pool")); diff --git a/src/main/java/org/olat/modules/qpool/ui/admin/QEducationalContextsAdminController.java b/src/main/java/org/olat/modules/qpool/ui/admin/QEducationalContextsAdminController.java index 67348986b8473f2fd2ee0121fada0a243e89631f..d3c1491a58b49fd57d98c013cf83ddbf68b2a145 100644 --- a/src/main/java/org/olat/modules/qpool/ui/admin/QEducationalContextsAdminController.java +++ b/src/main/java/org/olat/modules/qpool/ui/admin/QEducationalContextsAdminController.java @@ -101,7 +101,7 @@ public class QEducationalContextsAdminController extends FormBasicController { protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { //add the table FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel(); - columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.id.i18nKey(), Cols.id.ordinal(), true, "key")); + columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, Cols.id.i18nKey(), Cols.id.ordinal(), true, "key")); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.level.i18nKey(), Cols.level.ordinal(), true, "level")); FlexiCellRenderer renderer = new StaticFlexiCellRenderer("translate", new TextFlexiCellRenderer()); columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel(Cols.levelI18n.i18nKey(), Cols.levelI18n.ordinal(), "translate", renderer)); diff --git a/src/main/java/org/olat/modules/qpool/ui/admin/QItemTypesAdminController.java b/src/main/java/org/olat/modules/qpool/ui/admin/QItemTypesAdminController.java index 29ff9d84e7cc3863391c4f1e1d1868ebf1cb5baf..c69cd39a1854f690c8b13627c93d683cd5dc2875 100644 --- a/src/main/java/org/olat/modules/qpool/ui/admin/QItemTypesAdminController.java +++ b/src/main/java/org/olat/modules/qpool/ui/admin/QItemTypesAdminController.java @@ -101,7 +101,7 @@ public class QItemTypesAdminController extends FormBasicController { protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { //add the table FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel(); - columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.id.i18nKey(), Cols.id.ordinal(), true, "key")); + columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, Cols.id.i18nKey(), Cols.id.ordinal(), true, "key")); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.type.i18nKey(), Cols.type.ordinal(), true, "name")); FlexiCellRenderer renderer = new StaticFlexiCellRenderer("translate", new TextFlexiCellRenderer()); columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel(Cols.typeI18n.i18nKey(), Cols.typeI18n.ordinal(), "translate", renderer)); diff --git a/src/main/java/org/olat/modules/qpool/ui/admin/QLicensesAdminController.java b/src/main/java/org/olat/modules/qpool/ui/admin/QLicensesAdminController.java index 249ad692831356fc04c5b1b01843cf92650cf265..7a9c696bcc9e01b34e9f9d225fb24684f0b3fba6 100644 --- a/src/main/java/org/olat/modules/qpool/ui/admin/QLicensesAdminController.java +++ b/src/main/java/org/olat/modules/qpool/ui/admin/QLicensesAdminController.java @@ -93,7 +93,7 @@ public class QLicensesAdminController extends FormBasicController { protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { //add the table FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel(); - columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.id.i18nKey(), Cols.id.ordinal(), true, "key")); + columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, Cols.id.i18nKey(), Cols.id.ordinal(), true, "key")); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.licenseKey.i18nKey(), Cols.licenseKey.ordinal(), true, "licenseKey")); FlexiCellRenderer delRenderer = new BooleanCellRenderer(new StaticFlexiCellRenderer(translate("delete"), "delete-license"), null); columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel("delete", Cols.deletable.ordinal(), "delete-license", delRenderer)); diff --git a/src/main/java/org/olat/modules/qpool/ui/metadata/EducationalMetadataEditController.java b/src/main/java/org/olat/modules/qpool/ui/metadata/EducationalMetadataEditController.java index 9baa930e0ebf755c2039308a25232f24ea2ae26a..87481584789b995bfc866d4361c5bc9d0e156707 100644 --- a/src/main/java/org/olat/modules/qpool/ui/metadata/EducationalMetadataEditController.java +++ b/src/main/java/org/olat/modules/qpool/ui/metadata/EducationalMetadataEditController.java @@ -82,7 +82,8 @@ public class EducationalMetadataEditController extends FormBasicController { contextValues[count++] = translation; } contextEl = uifactory.addDropdownSingleselect("educational.context", "educational.context", formLayout, contextKeys, contextValues, null); - + contextEl.setEnabled(count > 0); + String page = velocity_root + "/learning_time.html"; learningTimeContainer = FormLayoutContainer.createCustomFormLayout("learningTime", getTranslator(), page); learningTimeContainer.setRootForm(mainForm); diff --git a/src/main/java/org/olat/modules/qpool/ui/metadata/MetaUIFactory.java b/src/main/java/org/olat/modules/qpool/ui/metadata/MetaUIFactory.java index 634060c3631c95bae3c657ba6c318db76cba1cf7..dda89680bd3cc4d43a4d29ff7e1225c676a2e4ac 100644 --- a/src/main/java/org/olat/modules/qpool/ui/metadata/MetaUIFactory.java +++ b/src/main/java/org/olat/modules/qpool/ui/metadata/MetaUIFactory.java @@ -143,6 +143,31 @@ public class MetaUIFactory { return allOk; } + protected static boolean validateInteger(TextElement el, int min, int max, boolean enabled) { + boolean allOk = true; + el.clearError(); + if(enabled) { + String val = el.getValue(); + if(StringHelper.containsNonWhitespace(val)) { + + try { + double value = Integer.parseInt(val); + if(min > value) { + el.setErrorKey("error.wrongFloat", null); + allOk = false; + } else if(max < value) { + el.setErrorKey("error.wrongFloat", null); + allOk = false; + } + } catch (NumberFormatException e) { + el.setErrorKey("error.wrongFloat", null); + allOk = false; + } + } + } + return allOk; + } + protected static boolean validateBigDecimal(TextElement el, double min, double max, boolean enabled) { boolean allOk = true; el.clearError(); diff --git a/src/main/java/org/olat/modules/qpool/ui/metadata/MetadatasController.java b/src/main/java/org/olat/modules/qpool/ui/metadata/MetadatasController.java index d1ec2d76cca33a125752087d1bdef4cbd7211d0b..810d1122e97dd8264fe9ca7c46152b5d01456433 100644 --- a/src/main/java/org/olat/modules/qpool/ui/metadata/MetadatasController.java +++ b/src/main/java/org/olat/modules/qpool/ui/metadata/MetadatasController.java @@ -175,6 +175,7 @@ public class MetadatasController extends BasicController { } private void doEditEducationalMetadata(UserRequest ureq) { + removeAsListenerAndDispose(educationalEditCtrl); educationalEditCtrl= new EducationalMetadataEditController(ureq, getWindowControl(), item); listenTo(educationalEditCtrl); mainVC.put("details_educational", educationalEditCtrl.getInitialComponent()); @@ -187,6 +188,7 @@ public class MetadatasController extends BasicController { } private void doEditQuestionMetadata(UserRequest ureq) { + removeAsListenerAndDispose(questionEditCtrl); questionEditCtrl= new QuestionMetadataEditController(ureq, getWindowControl(), item); listenTo(questionEditCtrl); mainVC.put("details_question", questionEditCtrl.getInitialComponent()); diff --git a/src/main/java/org/olat/modules/qpool/ui/metadata/QuestionMetadataEditController.java b/src/main/java/org/olat/modules/qpool/ui/metadata/QuestionMetadataEditController.java index 54603462fcc08fd0204d28963adea1adc933acc5..c0210e2c0f6460760eec84949652f4e9ac682970 100644 --- a/src/main/java/org/olat/modules/qpool/ui/metadata/QuestionMetadataEditController.java +++ b/src/main/java/org/olat/modules/qpool/ui/metadata/QuestionMetadataEditController.java @@ -25,6 +25,7 @@ import static org.olat.modules.qpool.ui.metadata.MetaUIFactory.toBigDecimal; import static org.olat.modules.qpool.ui.metadata.MetaUIFactory.toInt; import static org.olat.modules.qpool.ui.metadata.MetaUIFactory.validateBigDecimal; import static org.olat.modules.qpool.ui.metadata.MetaUIFactory.validateSelection; +import static org.olat.modules.qpool.ui.metadata.MetaUIFactory.validateInteger; import java.math.BigDecimal; @@ -128,6 +129,7 @@ public class QuestionMetadataEditController extends FormBasicController { allOk &= validateBigDecimal(difficultyEl, 0.0d, 1.0d, true); allOk &= validateBigDecimal(stdevDifficultyEl, 0.0d, 1.0d, true); allOk &= validateBigDecimal(differentiationEl, -1.0d, 1.0d, true); + allOk &= validateInteger(numAnswerAltEl, 0, Integer.MAX_VALUE, true); allOk &= validateSelection(assessmentTypeEl, true); return allOk && super.validateFormLogic(ureq); }