tableConfig.setSortingEnabled(false);
tableConfig.setColumnMovingOffered(false);
hcTranslator = new HeaderColumnTranslator(getTranslator());
dataTableCtr = new TableController(tableConfig, ureq, getWindowControl(), hcTranslator, this);
for(int i = 0;i < numOfValPerLine; i++){
dataTableCtr.addColumnDescriptor(new DefaultColumnDescriptor("ccc"+(i+1), i, null, ureq.getLocale()));
// add every name of a column to a list deployed as pulldown to the user for matching column with olat key
columnNames.add(getTranslator().translate("column", new String[]{""+(i+1)}));
}
step4VC = createVelocityContainer("bulkstep4");
step4VC.contextPut("bulkActionDisplayName", bulkActionDisplayName);
step4VC.contextPut("currentNodeShortTitle", currentNodeShortTitle);
back4 = LinkFactory.createLinkBack(step4VC, this);
dataModel = new GenericObjectArrayTableDataModel(rows, numOfLines);
// the data model already contains the column for the feedback,
// which is used at step 6 and not yet shown to the user
dataTableCtr.setTableDataModel(dataModel);
step4VC.put("dataTable", dataTableCtr.getInitialComponent());
olatKeys = new ArrayList();
// adding order is relevant for the "if-else if"-statement below at events from step 5
olatKeys.add(translate("username"));
olatKeys.add(translate("form.name.email"));
removeAsListenerAndDispose(bulkStep4Form);
bulkStep4Form = new BulkStep4Form(ureq, getWindowControl(), olatKeys,columnNames);
listenTo(bulkStep4Form);
step4VC.put("step4Form", bulkStep4Form.getInitialComponent());
wc.setWizardTitle(translate("wizard.step4.title"));
wc.setNextWizardStep(translate("wizard.step4.howto"), step4VC);
}
// events from step 4, preparing step 5
else if (source == bulkStep4Form && event == Event.DONE_EVENT) {
selectedColForOlatKey = Integer.parseInt(bulkStep4Form.getSelectedColumn());
selectedOlatKey = Integer.parseInt(bulkStep4Form.getSelectedOlatKey());
selectedValueOfOlatKey = (String) olatKeys.get(selectedOlatKey);
step5VC = createVelocityContainer("bulkstep5");
step5VC.contextPut("bulkActionDisplayName", bulkActionDisplayName);
step5VC.contextPut("currentNodeShortTitle", currentNodeShortTitle);
back5 = LinkFactory.createLinkBack(step5VC, this);
dataTableCtr = new TableController(tableConfig, ureq, getWindowControl(), hcTranslator, this);
columnNames = null;
columnNames = new ArrayList();
for(int i = 0;i < numOfValPerLine; i++){
if (i != selectedColForOlatKey){
dataTableCtr.addColumnDescriptor(new DefaultColumnDescriptor("ccc"+(i+1), i, null, ureq.getLocale()));
// add every name of a column to a list deployed as pulldown to the user for matching column with bulk action
columnNames.add(getTranslator().translate("column", new String[]{""+(i+1)}));
}else{
dataTableCtr.addColumnDescriptor(new DefaultColumnDescriptor("hhh" + selectedValueOfOlatKey, i, null, ureq.getLocale()));
}
}
dataTableCtr.setTableDataModel(dataModel);
step5VC.put("dataTable", dataTableCtr.getInitialComponent());
removeAsListenerAndDispose(bulkStep5Form);
bulkStep5Form = new BulkStep5Form(ureq, getWindowControl(), columnNames, bulkActions);
listenTo(bulkStep5Form);
step5VC.put("step5Form", bulkStep5Form.getInitialComponent());
wc.setWizardTitle(translate("wizard.step5.title"));
wc.setNextWizardStep(translate("wizard.step5.howto"), step5VC);
}
// events from step 5, preparing step 6
else if (source == bulkStep5Form && event == Event.DONE_EVENT) { // user clicked 'next'-button !!!!!!!
List rowsFeedbackStep = new ArrayList(rows.size());
for (Iterator iter = rows.iterator(); iter.hasNext();) {
Object[] values = (Object[]) iter.next();
rowsFeedbackStep.add(values.clone());
}
String selectedColForBulk = bulkStep5Form.getSelectedColumn();
int colForBulk = Integer.parseInt(selectedColForBulk);
// While the user is matching the olatKey with a table column the relation between
// table indices and pulldown menu indices is ok, but now while matching the bulkaction
// with a table column the indices are only ok in certain cases, because the user choosen
// column for the olatKey is not more shown in the second pulldown menu. It means by example
// if the user choose pulldown index [1] for the olatKey, it really meets the table index[1],
// then in the next step the pulldown has not more as many indices as before.
// If the user is now choosing the pulldown index[1] for the bulkaction he would meet the before selected
// column for the olatKey, if the system id not adding 1 to the index count.
if (selectedColForOlatKey <= colForBulk) colForBulk++;
step6VC = createVelocityContainer("bulkstep6");
finishedButton = LinkFactory.createButtonSmall("finished", step6VC, this);
step6VC.put("finishedButton", finishedButton);
step6VC.contextPut("bulkActionDisplayName", bulkActionDisplayName);
step6VC.contextPut("currentNodeShortTitle", currentNodeShortTitle);
back6 = LinkFactory.createLinkBack(step6VC, this);
GenericObjectArrayTableDataModel feedbackDataModel = new GenericObjectArrayTableDataModel(rowsFeedbackStep, numOfLines);
UserManager um = UserManager.getInstance();
Manager secMgr = ManagerFactory.getManager();
BulkActionModule bam = new BulkActionModule();
BulkAction ba = (BulkAction) bulkActions.get(bulkType);
// TODO: as:b may be add additional class hierarchy (ask pb !!!)
if ((ba instanceof BulkActionSetNodeScore)){
((BulkActionSetNodeScore) ba).setCourseNode((AssessableCourseNode)currentCourseNode);
}else if ((ba instanceof BulkActionSetNodePassed)){
((BulkActionSetNodePassed) ba).setCourseNode((AssessableCourseNode)currentCourseNode);
}else if ((ba instanceof BulkActionSetNodeUserComment)){
((BulkActionSetNodeUserComment) ba).setCourseNode((AssessableCourseNode)currentCourseNode);
}
List identitiesAndTheirAssessments = new ArrayList(feedbackDataModel.getRowCount());
// read values from the column which the user has defined as olat key (e.g. username)
// and add them to a list.
for(int i = 0; i < feedbackDataModel.getRowCount(); i ++ ){
String val = (String) feedbackDataModel.getValueAt(i, selectedColForOlatKey);
val = val.trim();
String assessment = (String) feedbackDataModel.getValueAt(i, colForBulk);
Identity identity = null;
if (selectedOlatKey == 0){ // username
identity = secMgr.findIdentityByName(val);
}else if (selectedOlatKey == 1) { // email
identity = um.findIdentityByEmail(val);
}
identitiesAndTheirAssessments.add(new Object[]{identity,assessment});
}
List bulkResults = bam.apply(identitiesAndTheirAssessments, ba);
// add the bulk results to the data model
for(int i = 0; i < feedbackDataModel.getRowCount(); i++ ){
Object[] feedback = (Object[]) bulkResults.get(i);
feedbackDataModel.setValueAt(feedback[2],i, numOfValPerLine);
}
tableConfig.setDownloadOffered(true);
feedbackDataTableCtr = new TableController(tableConfig, ureq, getWindowControl(), hcTranslator, this);
columnNames = null;
columnNames = new ArrayList();
for(int i = 0;i < numOfValPerLine; i++){
if (i == selectedColForOlatKey){
feedbackDataTableCtr.addColumnDescriptor(new DefaultColumnDescriptor("hhh" + selectedValueOfOlatKey, i, null, ureq.getLocale()));
}else if (i == colForBulk){
feedbackDataTableCtr.addColumnDescriptor(new DefaultColumnDescriptor("hhh" + ba.getDisplayName(), i, null, ureq.getLocale()));
}else{
feedbackDataTableCtr.addColumnDescriptor(new DefaultColumnDescriptor("ccc"+(i+1), i, null, ureq.getLocale()));
}
}
// add feedback columns
feedbackDataTableCtr.addColumnDescriptor(new DefaultColumnDescriptor("wizard.step6.feedback.column", numOfValPerLine, null, ureq.getLocale()));
feedbackDataTableCtr.setTableDataModel(feedbackDataModel);
step6VC.put("dataTable", feedbackDataTableCtr.getInitialComponent());
wc.setWizardTitle(translate("wizard.step6.title"));