use of teammates.common.datatransfer.attributes.FeedbackQuestionAttributes in project teammates by TEAMMATES.
the class BackDoorTest method testCreateFeedbackResponse.
@Test
public void testCreateFeedbackResponse() {
FeedbackResponseAttributes fr = new FeedbackResponseAttributes();
FeedbackQuestionAttributes fq = dataBundle.feedbackQuestions.get("qn1InSession1InCourse1");
StudentAttributes student = dataBundle.students.get("student3InCourse1");
fq = BackDoor.getFeedbackQuestion(fq.courseId, fq.feedbackSessionName, fq.questionNumber);
fr.feedbackSessionName = fq.feedbackSessionName;
fr.courseId = fq.courseId;
fr.feedbackQuestionId = fq.getId();
fr.feedbackQuestionType = fq.questionType;
fr.giver = student.email;
fr.giverSection = student.section;
fr.recipient = student.email;
fr.recipientSection = student.section;
fr.responseMetaData = new Text("Student 3 self feedback");
fr.setId(fq.getId() + "%" + fr.giver + "%" + fr.recipient);
// Make sure not already inside
BackDoor.deleteFeedbackResponse(fr.feedbackQuestionId, fr.giver, fr.recipient);
verifyAbsentInDatastore(fr);
// Perform creation
BackDoor.createFeedbackResponse(fr);
verifyPresentInDatastore(fr);
// Clean up
BackDoor.deleteFeedbackResponse(fr.feedbackQuestionId, fr.giver, fr.recipient);
verifyAbsentInDatastore(fr);
}
use of teammates.common.datatransfer.attributes.FeedbackQuestionAttributes in project teammates by TEAMMATES.
the class FeedbackSessionResultsBundle method getQuestionResponseMapByGiverTeam.
/**
* Returns an ordered Map with {@code giverTeam} name as key
* sorted by giverTeam > question > giverName > recipientTeam > recipientName.
*/
public Map<String, Map<FeedbackQuestionAttributes, List<FeedbackResponseAttributes>>> getQuestionResponseMapByGiverTeam() {
LinkedHashMap<String, Map<FeedbackQuestionAttributes, List<FeedbackResponseAttributes>>> sortedMap = new LinkedHashMap<>();
responses.sort(compareByTeamQuestionGiverTeamRecipient);
for (FeedbackResponseAttributes response : responses) {
String giverTeam = getTeamNameForEmail(response.giver);
if (giverTeam.isEmpty()) {
giverTeam = getNameForEmail(response.giver);
}
Map<FeedbackQuestionAttributes, List<FeedbackResponseAttributes>> responsesFromOneGiver = sortedMap.computeIfAbsent(giverTeam, key -> new LinkedHashMap<>());
FeedbackQuestionAttributes question = questions.get(response.feedbackQuestionId);
responsesFromOneGiver.computeIfAbsent(question, key -> new ArrayList<>()).add(response);
}
return sortedMap;
}
use of teammates.common.datatransfer.attributes.FeedbackQuestionAttributes in project teammates by TEAMMATES.
the class FeedbackSessionResultsBundle method hideResponsesGiverRecipient.
/**
* Hides response names/emails and teams that are not visible to the current user.
* Replaces the giver/recipient email in responses to an email with two "@@"s
* to indicate it is invalid and should not be displayed.
*/
private void hideResponsesGiverRecipient() {
for (FeedbackResponseAttributes response : responses) {
// Hide recipient details if its not visible to the current user
String name = emailNameTable.get(response.recipient);
FeedbackQuestionAttributes question = questions.get(response.feedbackQuestionId);
FeedbackParticipantType participantType = question.recipientType;
if (participantType == FeedbackParticipantType.SELF) {
// recipient type for self-feedback is the same as the giver type
participantType = question.giverType;
}
if (!isRecipientVisible(response)) {
String anonEmail = getAnonEmail(participantType, name);
name = getAnonName(participantType, name);
emailNameTable.put(anonEmail, name);
emailTeamNameTable.put(anonEmail, name + Const.TEAM_OF_EMAIL_OWNER);
response.recipient = anonEmail;
}
// Hide giver details if its not visible to the current user
name = emailNameTable.get(response.giver);
participantType = question.giverType;
if (!isGiverVisible(response)) {
String anonEmail = getAnonEmail(participantType, name);
name = getAnonName(participantType, name);
emailNameTable.put(anonEmail, name);
emailTeamNameTable.put(anonEmail, name + Const.TEAM_OF_EMAIL_OWNER);
if (participantType == FeedbackParticipantType.TEAMS) {
emailTeamNameTable.put(anonEmail, name);
}
response.giver = anonEmail;
}
}
}
use of teammates.common.datatransfer.attributes.FeedbackQuestionAttributes in project teammates by TEAMMATES.
the class FeedbackSessionResultsBundle method getQuestionResponseMap.
// TODO: make responses to the student calling this method always on top.
/**
* Gets the questions and responses in this bundle as a map.
*
* @return An ordered {@code Map} with keys as {@link FeedbackQuestionAttributes}
* sorted by questionNumber.
* The mapped values for each key are the corresponding
* {@link FeedbackResponseAttributes} as a {@code List}.
*/
public Map<FeedbackQuestionAttributes, List<FeedbackResponseAttributes>> getQuestionResponseMap() {
if (questions == null || responses == null) {
return null;
}
Map<FeedbackQuestionAttributes, List<FeedbackResponseAttributes>> sortedMap = new LinkedHashMap<>();
List<FeedbackQuestionAttributes> sortedQuestions = new ArrayList<>(questions.values());
// sorts the questions by its natural ordering, which is by question number
sortedQuestions.sort(null);
for (FeedbackQuestionAttributes question : sortedQuestions) {
sortedMap.put(question, new ArrayList<FeedbackResponseAttributes>());
}
for (FeedbackResponseAttributes response : responses) {
FeedbackQuestionAttributes question = questions.get(response.feedbackQuestionId);
List<FeedbackResponseAttributes> responsesForQuestion = sortedMap.get(question);
responsesForQuestion.add(response);
}
for (List<FeedbackResponseAttributes> responsesForQuestion : sortedMap.values()) {
responsesForQuestion.sort(compareByGiverRecipient);
}
return sortedMap;
}
use of teammates.common.datatransfer.attributes.FeedbackQuestionAttributes in project teammates by TEAMMATES.
the class DataBundleRegenerator method regenerateSessionTemplateJson.
private static void regenerateSessionTemplateJson() throws IOException {
File file = new File("./src/main/resources/feedbackSessionTeamEvaluationTemplate.json");
regenerateGenericJson(file);
String jsonString = FileHelper.readFile(file.getCanonicalPath());
List<FeedbackQuestionAttributes> template = JsonUtils.fromJson(jsonString, new TypeToken<List<FeedbackQuestionAttributes>>() {
}.getType());
for (FeedbackQuestionAttributes question : template) {
fixQuestion(question);
}
String regeneratedJsonString = JsonUtils.toJson(template).replace("+0000", "UTC");
saveFile(file.getCanonicalPath(), regeneratedJsonString + System.lineSeparator());
}
Aggregations