Skip to content

Commit

Permalink
Add file parser controller
Browse files Browse the repository at this point in the history
BilledTrain380 committed Aug 26, 2018
1 parent 4412b13 commit 8c149d3
Showing 3 changed files with 76 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -54,6 +54,7 @@ interface GroupFileParser {
* @param file the file to parse
*
* @return the content of the parsed file in form of a list of {@link FlatParticipant}
* @throws IllegalArgumentException if the file does not match the format csv or is empty
* @throws CSVParsingException if the given file can not be parsed
*/
fun parseCSV(file: MultipartFile): List<FlatParticipant>
Original file line number Diff line number Diff line change
@@ -64,6 +64,7 @@ class GroupFileParserImpl : GroupFileParser {
* @param file the file to parse
*
* @return the content of the parsed file in form of a list of {@link FlatParticipant}
* @throws IllegalArgumentException if the file does not match the format csv or is empty
* @throws CSVParsingException if the given file can not be parsed
*/
override fun parseCSV(file: MultipartFile): List<FlatParticipant> {
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/*
* Copyright (c) 2018 by Nicolas Märchy
*
* This file is part of Sporttag PSA.
*
* Sporttag PSA is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Sporttag PSA is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Sporttag PSA. If not, see <http://www.gnu.org/licenses/>.
*
* Diese Datei ist Teil von Sporttag PSA.
*
* Sporttag PSA ist Freie Software: Sie können es unter den Bedingungen
* der GNU General Public License, wie von der Free Software Foundation,
* Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren
* veröffentlichten Version, weiterverbreiten und/oder modifizieren.
*
* Sporttag PSA wird in der Hoffnung, dass es nützlich sein wird, aber
* OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite
* Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK.
* Siehe die GNU General Public License für weitere Details.
*
* Sie sollten eine Kopie der GNU General Public License zusammen mit diesem
* Programm erhalten haben. Wenn nicht, siehe <http://www.gnu.org/licenses/>.
*
*
*/

package ch.schulealtendorf.sporttagpsa.controller.web.groupimport

import ch.schulealtendorf.sporttagpsa.business.group.CSVParsingException
import ch.schulealtendorf.sporttagpsa.business.group.GroupFileParser
import ch.schulealtendorf.sporttagpsa.business.group.GroupManager
import ch.schulealtendorf.sporttagpsa.controller.rest.BadRequestException
import org.springframework.stereotype.Controller
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.multipart.MultipartFile

/**
* @author nmaerchy <billedtrain380@gmail.com>
* @since 2.0.0
*/
@Controller
class GroupImportController(
private val fileParser: GroupFileParser,
private val groupManager: GroupManager
) {

@PostMapping("/import-group")
fun importGroup(@RequestParam("group-input") file: MultipartFile) {

try {

val participants = fileParser.parseCSV(file)

participants.forEach(groupManager::import)

} catch (exception: CSVParsingException) {
// we increment the line, so its not zero based line number for the user
throw BadRequestException("${exception.message} (at line ${exception.line+1}:${exception.column})")
} catch (exception: IllegalArgumentException) {
throw BadRequestException(exception.message)
}
}
}

0 comments on commit 8c149d3

Please sign in to comment.