use of ai.elimu.model.content.Sound in project webapp by elimu-ai.
the class LetterSoundCorrespondenceCreateController method handleRequest.
@RequestMapping(method = RequestMethod.GET)
public String handleRequest(Model model) {
logger.info("handleRequest");
LetterSoundCorrespondence letterSoundCorrespondence = new LetterSoundCorrespondence();
model.addAttribute("letterSoundCorrespondence", letterSoundCorrespondence);
List<Letter> letters = letterDao.readAllOrdered();
model.addAttribute("letters", letters);
List<Sound> sounds = soundDao.readAllOrdered();
model.addAttribute("sounds", sounds);
model.addAttribute("timeStart", System.currentTimeMillis());
return "content/letter-sound-correspondence/create";
}
use of ai.elimu.model.content.Sound in project webapp by elimu-ai.
the class LetterSoundCorrespondenceCreateController method handleSubmit.
@RequestMapping(method = RequestMethod.POST)
public String handleSubmit(HttpServletRequest request, HttpSession session, @Valid LetterSoundCorrespondence letterSoundCorrespondence, BindingResult result, Model model) {
logger.info("handleSubmit");
// Check if the LetterSoundCorrespondence already exists
LetterSoundCorrespondence existingLetterSoundCorrespondence = letterSoundCorrespondenceDao.read(letterSoundCorrespondence.getLetters(), letterSoundCorrespondence.getSounds());
if (existingLetterSoundCorrespondence != null) {
result.rejectValue("letters", "NonUnique");
}
if (result.hasErrors()) {
model.addAttribute("letterSoundCorrespondence", letterSoundCorrespondence);
List<Letter> letters = letterDao.readAllOrdered();
model.addAttribute("letters", letters);
List<Sound> sounds = soundDao.readAllOrdered();
model.addAttribute("sounds", sounds);
model.addAttribute("timeStart", System.currentTimeMillis());
return "content/letter-sound-correspondence/create";
} else {
letterSoundCorrespondence.setTimeLastUpdate(Calendar.getInstance());
letterSoundCorrespondenceDao.create(letterSoundCorrespondence);
LetterSoundCorrespondenceContributionEvent letterSoundCorrespondenceContributionEvent = new LetterSoundCorrespondenceContributionEvent();
letterSoundCorrespondenceContributionEvent.setContributor((Contributor) session.getAttribute("contributor"));
letterSoundCorrespondenceContributionEvent.setTime(Calendar.getInstance());
letterSoundCorrespondenceContributionEvent.setLetterSoundCorrespondence(letterSoundCorrespondence);
letterSoundCorrespondenceContributionEvent.setRevisionNumber(letterSoundCorrespondence.getRevisionNumber());
letterSoundCorrespondenceContributionEvent.setComment(StringUtils.abbreviate(request.getParameter("contributionComment"), 1000));
letterSoundCorrespondenceContributionEvent.setTimeSpentMs(System.currentTimeMillis() - Long.valueOf(request.getParameter("timeStart")));
letterSoundCorrespondenceContributionEvent.setPlatform(Platform.WEBAPP);
letterSoundCorrespondenceContributionEventDao.create(letterSoundCorrespondenceContributionEvent);
String contentUrl = "http://" + EnvironmentContextLoaderListener.PROPERTIES.getProperty("content.language").toLowerCase() + ".elimu.ai/content/letter-sound-correspondence/edit/" + letterSoundCorrespondence.getId();
DiscordHelper.sendChannelMessage("Letter-sound correspondence created: " + contentUrl, "\"" + letterSoundCorrespondence.getLetters().stream().map(Letter::getText).collect(Collectors.joining()) + "\"", "Comment: \"" + letterSoundCorrespondenceContributionEvent.getComment() + "\"", null, null);
return "redirect:/content/letter-sound-correspondence/list#" + letterSoundCorrespondence.getId();
}
}
use of ai.elimu.model.content.Sound in project webapp by elimu-ai.
the class SoundsRestController method handleGetRequest.
@RequestMapping(method = RequestMethod.GET)
public String handleGetRequest() {
logger.info("handleGetRequest");
JSONArray soundsJsonArray = new JSONArray();
for (Sound sound : soundDao.readAllOrdered()) {
SoundGson soundGson = JpaToGsonConverter.getSoundGson(sound);
String json = new Gson().toJson(soundGson);
soundsJsonArray.put(new JSONObject(json));
}
String jsonResponse = soundsJsonArray.toString();
logger.info("jsonResponse: " + jsonResponse);
return jsonResponse;
}
use of ai.elimu.model.content.Sound in project webapp by elimu-ai.
the class JpaToGsonConverter method getLetterSoundCorrespondenceGson.
public static LetterSoundCorrespondenceGson getLetterSoundCorrespondenceGson(LetterSoundCorrespondence letterSoundCorrespondence) {
if (letterSoundCorrespondence == null) {
return null;
} else {
LetterSoundCorrespondenceGson letterSoundCorrespondenceGson = new LetterSoundCorrespondenceGson();
// BaseEntity
letterSoundCorrespondenceGson.setId(letterSoundCorrespondence.getId());
// LetterSoundCorrespondence
List<LetterGson> letters = new ArrayList<>();
for (Letter letter : letterSoundCorrespondence.getLetters()) {
LetterGson letterGson = getLetterGson(letter);
letters.add(letterGson);
}
letterSoundCorrespondenceGson.setLetters(letters);
List<SoundGson> sounds = new ArrayList<>();
for (Sound sound : letterSoundCorrespondence.getSounds()) {
SoundGson soundGson = getSoundGson(sound);
sounds.add(soundGson);
}
letterSoundCorrespondenceGson.setSounds(sounds);
letterSoundCorrespondenceGson.setUsageCount(letterSoundCorrespondence.getUsageCount());
return letterSoundCorrespondenceGson;
}
}
use of ai.elimu.model.content.Sound in project webapp by elimu-ai.
the class SoundUsageCountScheduler method execute.
// At 06:30 every day
@Scheduled(cron = "00 30 06 * * *")
public synchronized void execute() {
logger.info("execute");
logger.info("Calculating usage count of Sounds");
// Long = Sound ID
// Integer = Usage count
Map<Long, Integer> soundFrequencyMap = new HashMap<>();
// Summarize the usage count of each Word's Sounds based on the LetterSoundCorrespondence's
// usage count (see LetterSoundCorrespondenceUsageCountScheduler).
List<Word> words = wordDao.readAllOrdered();
logger.info("words.size(): " + words.size());
for (Word word : words) {
for (LetterSoundCorrespondence letterSoundCorrespondence : word.getLetterSoundCorrespondences()) {
for (Sound sound : letterSoundCorrespondence.getSounds()) {
soundFrequencyMap.put(sound.getId(), soundFrequencyMap.getOrDefault(sound.getId(), 0) + letterSoundCorrespondence.getUsageCount());
}
}
}
// Update each Sound's usage count in the database
for (Long soundId : soundFrequencyMap.keySet()) {
Sound sound = soundDao.read(soundId);
sound.setUsageCount(soundFrequencyMap.get(soundId));
soundDao.update(sound);
}
logger.info("execute complete");
}
Aggregations