step2VC = createVelocityContainer("bulkstep2");
back2 = LinkFactory.createLinkBack(step2VC, this);
selectedBulk = bulkStep1Form.getSelectedBulkAction();
bulkType = Integer.parseInt(selectedBulk);
BulkAction ba = (BulkAction) bulkActions.get(bulkType);
bulkActionDisplayName = ba.getDisplayName();
step2VC.contextPut("bulkActionDisplayName", bulkActionDisplayName);
doNodeChoose(ureq);
wc.setWizardTitle(translate("wizard.step2.title"));
wc.setNextWizardStep(translate("wizard.step2.howto"), step2VC);
}
// event from step 2, preparing step 3
if (source == nodeListCtr && event.getCommand().equals(Table.COMMANDLINK_ROWACTION_CLICKED)) {
TableEvent te = (TableEvent) event;
String actionid = te.getActionId();
if (actionid.equals(CMD_SELECT_NODE)) {
int rowid = te.getRowId();
Map nodeData = (Map) nodeTableModel.getObject(rowid);
ICourse course = CourseFactory.loadCourse(ores);
this.currentCourseNode = course.getRunStructure().getNode((String) nodeData.get(AssessmentHelper.KEY_IDENTIFYER));
currentNodeShortTitle = currentCourseNode.getShortTitle();
removeAsListenerAndDispose(bulkStep3Form);
bulkStep3Form = new BulkStep3Form(ureq, getWindowControl());
listenTo(bulkStep3Form);
step3VC = createVelocityContainer("bulkstep3");
step3VC.contextPut("currentNodeShortTitle", currentNodeShortTitle);
step3VC.contextPut("bulkActionDisplayName", bulkActionDisplayName);
back3 = LinkFactory.createLinkBack(step3VC, this);
step3VC.put("step3Form", bulkStep3Form.getInitialComponent());
wc.setWizardTitle(translate("wizard.step3.title"));
wc.setNextWizardStep(translate("wizard.step3.howto"), step3VC);
}
}
// events from step 3, preparing step 4
else if (source == bulkStep3Form && event == Event.DONE_EVENT) {
this.rows = bulkStep3Form.getInputRows();
this.numOfLines = bulkStep3Form.getNumOfLines();
this.numOfValPerLine = bulkStep3Form.getNumOfValPerLine();
columnNames = new ArrayList();
tableConfig = new TableGuiConfiguration();
tableConfig.setDownloadOffered(false);
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