faltou um @Component no DiscoDAO
Pessoal,
Estou tentando validar a minha aplicação, eu tenho uma página em que são enviados três arquivos, os nomes desses arquivos tem um regra envolvida, dai criei uma classe que será responsável por esse upload, e nela tenho as regras para os nomes dos meus arquivos. A partir do controller eu invoco o método que inicia o processo de upload(valida o nome, cria os diretórios e envia os arquivos).
Problema:
Implementei a funcionalidade utilizando exceções(“IllegalArgumentsException”) para informar os problemas na minha regra de negócios. a classe subia as exceções até o controller e no controller eu mostrava elas na tela. Porém caso o erro estivesse no nome do primeiro arquivo, como eu lancei uma exceção, o fluxo é interrompido e não valido os demais arquivos.
Questionamentos:
Teria uma forma melhor em fazer isso? Preciso validar todos os arquivos e depois mostrar todas as mensagens de erro na tela.
Vi muitas discussões a respeito de ExceptionHandler, isso já foi incorporado na versão 3.5.1?
[b]Classe responsável pela validação e upload.
[code]@Component
public class UploadArquivosContraChequeBKP {
public void salvarArquivos(List<UploadedFile> arquivos, String path)
throws Exception {
if (!arquivos.isEmpty()) {
criaDiretorio(path);
for (Iterator<UploadedFile> iterator = arquivos.iterator(); iterator
.hasNext();) {
UploadedFile uploadedFile = (UploadedFile) iterator.next();
String fileName = uploadedFile.getFileName();
if (validaNomeArquivo(fileName)) {
try {
IOUtils.copyLarge(uploadedFile.getFile(),
new FileOutputStream(new File(path + fileName)));
} catch (FileNotFoundException e) {
throw new FileNotFoundException(
"Problemas ao enviar arquivo!" + e.getMessage());
}
} else {
throw new IllegalArgumentException(
"Problemas ao enviar arquivo!");
}
}
}
}
private void criaDiretorio(String novoDiretorio)
throws FileNotFoundException {
String nomeDiretorio = null;
nomeDiretorio = novoDiretorio;
if (!new File(nomeDiretorio).exists()) {
(new File(nomeDiretorio)).mkdirs();
}
}
private boolean validaNomeArquivo(String nomeArquivo) throws Exception {
List<String> subStrings = separaString(nomeArquivo);
if (subStrings.size() != 3) {
throw new IllegalArgumentException(
"Formato do nome do arquivo inválido! Arquivo: "
+ nomeArquivo);
} else {
for (int i = 0; i < subStrings.size(); i++) {
if (i == 0) {
validaTipo(nomeArquivo, subStrings, i);
} else if (i == 1) {
validaPeriodo(nomeArquivo, subStrings, i);
} else if (i == 2) {
validaExtensao(nomeArquivo, subStrings, i);
}
}
}
return true;
}
public List<String> separaString(String nomeArquivo) {
List<String> parametros = new ArrayList<String>();
if (nomeArquivo.contains(".")) {
String[] arrayPonto = nomeArquivo.split("\\.");
for (int i = 0; i < arrayPonto.length; i++) {
String str = arrayPonto[i];
if (str.contains("-")) {
String[] arrayHifen = str.split("-");
for (int j = 0; j < arrayHifen.length; j++) {
parametros.add(arrayHifen[j]);
}
} else {
parametros.add(str);
}
}
}
return parametros;
}
private boolean validaTipo(String nomeArquivo, List<String> subStrings,
int i) {
String tipo = subStrings.get(i);
if (!(tipo.equalsIgnoreCase("cabecalho"))
&& !(tipo.equalsIgnoreCase("repeticao"))
&& !(tipo.equalsIgnoreCase("totais"))) {
throw new IllegalArgumentException(
"Campo tipo na nomeação do arquivo é incompatível com padrão estabelecido! Nome do Arquivo: "
+ nomeArquivo + " Formato não permitido: " + tipo);
}
return true;
}
private boolean validaPeriodo(String nomeArquivo, List<String> subStrings,
int i) {
String periodo = subStrings.get(i);
if (periodo.length() == 6) {
if (periodo.matches("[0-9]+")) {
String mes = periodo.substring(0, 2);
String ano = periodo.substring(2, 6);
if (Integer.parseInt(mes) <= 0 || Integer.parseInt(mes) > 12) {
throw new IllegalArgumentException(
"Mês informado no nome do arquivo é inválido! Nome do Arquivo: "
+ nomeArquivo + ", Mês: " + mes);
}
if (Integer.parseInt(ano) < 1971) {
throw new IllegalArgumentException(
"Ano informado no nome do arquivo inválido! Nome do Arquivo: "
+ nomeArquivo + ", Ano: " + ano
+ " É menor que o menor ano permitido.");
} else if (Integer.parseInt(ano) > new GregorianCalendar()
.get(GregorianCalendar.YEAR)) {
throw new IllegalArgumentException(
"Ano informado no nome do arquivo é inválido! Nome do Arquivo: "
+ nomeArquivo + ", Ano: " + ano
+ " É maior que o maior ano permitido.");
}
} else {
throw new IllegalArgumentException(
"Período informado não tem somente digítos! Período:"
+ periodo);
}
} else {
throw new IllegalArgumentException(
"Periodo informado inválido! Período: " + periodo);
}
return true;
}
private boolean validaExtensao(String nomeArquivo, List<String> subStrings,
int i) {
String extensao = subStrings.get(i);
if (!extensao.equalsIgnoreCase("txt")) {
throw new IllegalArgumentException(
"Arquivo enviado não é um txt! Arquivo: " + nomeArquivo);
}
return true;
}
}[/code]
Adicione tudo em uma lista e depois lance a exception mostrando todos os erros da lista.