package com.tinesoft.droidlinguist.server.controller;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.tinesoft.droidlinguist.server.exception.SourceStringsParserException;
import com.tinesoft.droidlinguist.server.json.translation.source.SourceItem;
import com.tinesoft.droidlinguist.server.json.translation.source.SourceStringsResource;
import com.tinesoft.droidlinguist.server.json.translation.target.TranslationFile;
import com.tinesoft.droidlinguist.server.service.TranslationService;
@Controller
@RequestMapping(value = "/api")
public class FileUploadController
{
private static final Logger LOG = LoggerFactory.getLogger(FileUploadController.class);
@Autowired
private TranslationService translationService;
@RequestMapping(value = "/upload", //
method = RequestMethod.POST, //
consumes = { MediaType.MULTIPART_FORM_DATA_VALUE }, //
produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody SourceStringsResource upload(@RequestParam("sourceLang") String sourceLang, @RequestParam("targetLangs") String targetLangs,
@RequestParam("sourceFile") MultipartFile sourceFile, @RequestParam("translator") String translator)
{
if (!sourceFile.isEmpty())
{
try
{
List<SourceItem> strings = translationService.parseSourceFile(sourceFile.getBytes());
Map<String, TranslationFile> files = translationService.translate(strings, sourceLang, Arrays.asList(targetLangs.split(", ")), translator);
return new SourceStringsResource(HttpStatus.ACCEPTED.value(), strings, files);
}
catch (IOException e)
{
LOG.error("Failed to parse uploaded file", e);
throw new SourceStringsParserException(Arrays.asList("Server could not read your source file. Please review your file and try again"));
}
}
else
{
LOG.error("Uploaded source file is empty");
throw new SourceStringsParserException(Arrays.asList("Uploaded source file is empty! Please, try again with a valid file"));
}
}
}