Search in sources :

Example 21 with Number

use of ai.elimu.model.content.Number in project webapp by elimu-ai.

the class NumberEditController method handleRequest.

@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public String handleRequest(Model model, @PathVariable Long id) {
    logger.info("handleRequest");
    Number number = numberDao.read(id);
    model.addAttribute("number", number);
    model.addAttribute("timeStart", System.currentTimeMillis());
    model.addAttribute("words", wordDao.readAllOrdered());
    model.addAttribute("emojisByWordId", getEmojisByWordId());
    model.addAttribute("numberContributionEvents", numberContributionEventDao.readAll(number));
    model.addAttribute("numberPeerReviewEvents", numberPeerReviewEventDao.readAll(number));
    return "content/number/edit";
}
Also used : Number(ai.elimu.model.content.Number) RequestMapping(org.springframework.web.bind.annotation.RequestMapping)

Example 22 with Number

use of ai.elimu.model.content.Number in project webapp by elimu-ai.

the class NumberCreateController method handleRequest.

@RequestMapping(method = RequestMethod.GET)
public String handleRequest(Model model) {
    logger.info("handleRequest");
    Number number = new Number();
    model.addAttribute("number", number);
    model.addAttribute("timeStart", System.currentTimeMillis());
    model.addAttribute("words", wordDao.readAllOrdered());
    model.addAttribute("emojisByWordId", getEmojisByWordId());
    return "content/number/create";
}
Also used : Number(ai.elimu.model.content.Number) RequestMapping(org.springframework.web.bind.annotation.RequestMapping)

Example 23 with Number

use of ai.elimu.model.content.Number in project webapp by elimu-ai.

the class NumberCreateController method handleSubmit.

@RequestMapping(method = RequestMethod.POST)
public String handleSubmit(HttpServletRequest request, HttpSession session, @Valid Number number, BindingResult result, Model model) {
    logger.info("handleSubmit");
    Number existingNumber = numberDao.readByValue(number.getValue());
    if (existingNumber != null) {
        result.rejectValue("value", "NonUnique");
    }
    if (result.hasErrors()) {
        model.addAttribute("number", number);
        model.addAttribute("timeStart", request.getParameter("timeStart"));
        model.addAttribute("words", wordDao.readAllOrdered());
        model.addAttribute("emojisByWordId", getEmojisByWordId());
        return "content/number/create";
    } else {
        number.setTimeLastUpdate(Calendar.getInstance());
        numberDao.create(number);
        NumberContributionEvent numberContributionEvent = new NumberContributionEvent();
        numberContributionEvent.setContributor((Contributor) session.getAttribute("contributor"));
        numberContributionEvent.setTime(Calendar.getInstance());
        numberContributionEvent.setNumber(number);
        numberContributionEvent.setRevisionNumber(number.getRevisionNumber());
        numberContributionEvent.setComment(StringUtils.abbreviate(request.getParameter("contributionComment"), 1000));
        numberContributionEvent.setTimeSpentMs(System.currentTimeMillis() - Long.valueOf(request.getParameter("timeStart")));
        numberContributionEvent.setPlatform(Platform.WEBAPP);
        numberContributionEventDao.create(numberContributionEvent);
        String contentUrl = "http://" + EnvironmentContextLoaderListener.PROPERTIES.getProperty("content.language").toLowerCase() + ".elimu.ai/content/number/edit/" + number.getId();
        DiscordHelper.sendChannelMessage("Number created: " + contentUrl, String.valueOf(numberContributionEvent.getNumber().getValue()), "Comment: \"" + numberContributionEvent.getComment() + "\"", null, null);
        return "redirect:/content/number/list#" + number.getId();
    }
}
Also used : Number(ai.elimu.model.content.Number) NumberContributionEvent(ai.elimu.model.contributor.NumberContributionEvent) RequestMapping(org.springframework.web.bind.annotation.RequestMapping)

Example 24 with Number

use of ai.elimu.model.content.Number in project webapp by elimu-ai.

the class NumberPeerReviewEventCreateController method handleSubmit.

@RequestMapping(method = RequestMethod.POST)
public String handleSubmit(@RequestParam Long numberContributionEventId, @RequestParam Boolean approved, @RequestParam(required = false) String comment, HttpSession session) {
    logger.info("handleSubmit");
    Contributor contributor = (Contributor) session.getAttribute("contributor");
    logger.info("numberContributionEventId: " + numberContributionEventId);
    NumberContributionEvent numberContributionEvent = numberContributionEventDao.read(numberContributionEventId);
    logger.info("numberContributionEvent: " + numberContributionEvent);
    // Store the peer review event
    NumberPeerReviewEvent numberPeerReviewEvent = new NumberPeerReviewEvent();
    numberPeerReviewEvent.setContributor(contributor);
    numberPeerReviewEvent.setNumberContributionEvent(numberContributionEvent);
    numberPeerReviewEvent.setApproved(approved);
    numberPeerReviewEvent.setComment(StringUtils.abbreviate(comment, 1000));
    numberPeerReviewEvent.setTime(Calendar.getInstance());
    numberPeerReviewEvent.setPlatform(Platform.WEBAPP);
    numberPeerReviewEventDao.create(numberPeerReviewEvent);
    String contentUrl = "http://" + EnvironmentContextLoaderListener.PROPERTIES.getProperty("content.language").toLowerCase() + ".elimu.ai/content/number/edit/" + numberContributionEvent.getNumber().getId();
    DiscordHelper.sendChannelMessage("Number peer-reviewed: " + contentUrl, "\"" + numberContributionEvent.getNumber().getValue() + "\"", "Comment: \"" + numberPeerReviewEvent.getComment() + "\"", numberPeerReviewEvent.isApproved(), null);
    // Update the number's peer review status
    int approvedCount = 0;
    int notApprovedCount = 0;
    for (NumberPeerReviewEvent peerReviewEvent : numberPeerReviewEventDao.readAll(numberContributionEvent)) {
        if (peerReviewEvent.isApproved()) {
            approvedCount++;
        } else {
            notApprovedCount++;
        }
    }
    logger.info("approvedCount: " + approvedCount);
    logger.info("notApprovedCount: " + notApprovedCount);
    Number number = numberContributionEvent.getNumber();
    if (approvedCount >= notApprovedCount) {
        number.setPeerReviewStatus(PeerReviewStatus.APPROVED);
    } else {
        number.setPeerReviewStatus(PeerReviewStatus.NOT_APPROVED);
    }
    numberDao.update(number);
    return "redirect:/content/number/edit/" + numberContributionEvent.getNumber().getId() + "#contribution-events";
}
Also used : Number(ai.elimu.model.content.Number) NumberContributionEvent(ai.elimu.model.contributor.NumberContributionEvent) Contributor(ai.elimu.model.contributor.Contributor) NumberPeerReviewEvent(ai.elimu.model.contributor.NumberPeerReviewEvent) RequestMapping(org.springframework.web.bind.annotation.RequestMapping)

Example 25 with Number

use of ai.elimu.model.content.Number in project webapp by elimu-ai.

the class NumberDaoTest method testStoreWithMultipleNumberWords.

@Test
public void testStoreWithMultipleNumberWords() {
    Word word1 = new Word();
    wordDao.create(word1);
    Word word2 = new Word();
    wordDao.create(word2);
    List<Word> numberWords = new ArrayList<>();
    numberWords.add(word1);
    numberWords.add(word2);
    Number number = new Number();
    number.setWords(numberWords);
    numberDao.create(number);
    assertThat(number.getWords().size(), is(2));
}
Also used : Word(ai.elimu.model.content.Word) Number(ai.elimu.model.content.Number) ArrayList(java.util.ArrayList) Test(org.junit.Test)

Aggregations

Number (ai.elimu.model.content.Number)27 RequestMapping (org.springframework.web.bind.annotation.RequestMapping)19 Word (ai.elimu.model.content.Word)17 Letter (ai.elimu.model.content.Letter)10 ArrayList (java.util.ArrayList)7 Contributor (ai.elimu.model.Contributor)5 ResponseBody (org.springframework.web.bind.annotation.ResponseBody)5 NumberContributionEvent (ai.elimu.model.contributor.NumberContributionEvent)4 LetterGson (ai.elimu.model.gson.content.LetterGson)3 NumberGson (ai.elimu.model.gson.content.NumberGson)3 WordGson (ai.elimu.model.gson.content.WordGson)3 JSONArray (org.json.JSONArray)3 Audio (ai.elimu.model.content.multimedia.Audio)2 Image (ai.elimu.model.content.multimedia.Image)2 Video (ai.elimu.model.content.multimedia.Video)2 Contributor (ai.elimu.model.contributor.Contributor)2 Gson (com.google.gson.Gson)2 IOException (java.io.IOException)2 CSVFormat (org.apache.commons.csv.CSVFormat)2 JSONObject (org.json.JSONObject)2