// leggo il file e lo metto in un Array
while ((inputLine = in.readLine()) != null) {
if (inputLine.length() != 120) {
throw new AttivazioneRIDException("LUNGHEZZA RECORD FLUSSO ERRATA");
} else {
mioFile.add(inputLine);
}
}
// il primo record dell'array dev'essere " AL" e lungo 120 e
// l'ultimo record � " EF"
if (!mioFile.get(0).startsWith(" AL")) {
throw new AttivazioneRIDException("il FLUSSO ["+fileInput.getName()+"]non � un file di flussi RID valido (AL)");
} else if (!mioFile.get(mioFile.size() - 1).startsWith(" EF")) {
throw new AttivazioneRIDException("il FLUSSO ["+fileInput.getName()+"]non � un file di flussi RID valido (EF)");
} else {
List<RidErrato> tabRidErrati = gestionePraticaDao.getFlussiErratiRID(new ArrayList<SearchCriteriaLogicProduct>());
for (int i = 0; i < mioFile.size(); i++) {
String record = mioFile.get(i);
boolean ridErrati = false;
if (record.startsWith(" AL")) {
codiceSiaFlusso = record.substring(8, 13);
nomeSupporto = record.substring(19, 39);
if (!codSia.equals(codiceSiaFlusso)) {
throw new AttivazioneRIDException("Il Codice SIA del Flusso ("+codiceSiaFlusso+") non coincide con il codice Sia della Banca ("+codSia+")");
}
}
if (record.startsWith(" 12") && i > 1
&& !mioFile.get(i - 1).startsWith(" 70")) {
throw new AttivazioneRIDException("SEQUENZA FLUSSO ERRATO: [12 - 70]");
} else {
if (record.startsWith(" 12")) {
causale = record.substring(28, 33);
String dataInvioStr = record.substring(16, 22);
if(dataInvioStr != null && "".equals(dataInvioStr.trim())) {
dataInvioStr ="01/01/1900";
SimpleDateFormat formatterData = new SimpleDateFormat("dd/MM/yyyy");
try {
dataInvio = formatterData.parse(dataInvioStr);
} catch (ParseException e) {
log.error(e.toString());
e.printStackTrace();
throw new AttivazioneRIDException("Errore nella formattazione delle date presenti nel FILE.");
}
} else{
dataInvio = convertiDataFlusso(dataInvioStr);
}
log.info("dataInvioStr: <"+dataInvioStr+">");
try{
mutuoFlusso = Long.parseLong(record.substring(97, 113));
log.info("mutuoFlusso: <"+mutuoFlusso+">");
}catch (NumberFormatException nfe) {
log.error("parseLong sul mutuo non riuscito!!!");
nfe.printStackTrace();
mutuoFlusso = null;
}
String ridFlusso = record.substring(97, 113);
log.info("ridFlusso: <"+ridFlusso+">");
Long progDisposizione = null;
try{
progDisposizione = Long.parseLong(record.substring(3, 11));
log.info("progDisposizione: <"+progDisposizione+">");
}catch (NumberFormatException nfe) {
log.error("parseLong su progDisposizione non riuscito!!!");
nfe.printStackTrace();
progDisposizione = null;
}
String dataRicezioneStr = record.substring(10, 16);
dataRicezione = convertiDataFlusso(dataRicezioneStr);
log.info("dataRicezioneStr: <"+dataRicezioneStr+">");
ibanFlusso = record.substring(43, 45)
+ " " + record.substring(45, 47) + " "
+ record.substring(68, 69) + " "
+ record.substring(69, 74) + " "
+ record.substring(74, 79) + " "
+ record.substring(79, 91);
log.info("ibanFlusso: <"+ibanFlusso+">");
int count = 0;
if(mutuoFlusso == null || progDisposizione == null) {
count = 0;
} else {
count = gestionePraticaDaoJdbc.contaRecordIndRateFlussoRID(mutuoFlusso,ridFlusso);
}
if (count == 0) {
ridErrati = true;
esistonoErrati = true;
for(RidErrato re : tabRidErrati) {
if(re.getNomeSupporto().equals(nomeSupporto)
&& re.getProgressivoDisposizione() == progDisposizione)
//throw new AttivazioneRIDException("IL FLUSSO E' GIA' STATO CARICATO A SISTEMA.");
erratiCaricati = true;
}
RidErrato ridErrato = new RidErrato();
ridErrato.setNomeSupporto(nomeSupporto);
if(progDisposizione != null) ridErrato.setProgressivoDisposizione(progDisposizione);
else ridErrato.setProgressivoDisposizione(contaDisposizioni+1);
ridErrato.setCodiceRid(ridFlusso);
ridErrato.setCodiceCausale(causale);
ridErrato.setDataInvio(dataInvio);
ridErrato.setDataRicezione(dataRicezione);
ridErrato.setNomeFile(fileInput.getName());
ridErrato.setIbanFlusso(ibanFlusso);
if(!erratiCaricati) gestionePraticaDao.inserisciRidErrati(ridErrato);
}
}
if (record.startsWith(" 70")) {
riferimOrig = record.substring(10, 100);
log.info("riferimOrig: <"+riferimOrig+">");
contaDisposizioni++;
if (!ridErrati && mutuoFlusso != null){
m = new Mutuo();
m.setNumeroMutuoCustom(mutuoFlusso);
Set<AttivazioneRid> listaAtt = new HashSet<AttivazioneRid>();
AttivazioneRid att = new AttivazioneRid();
att.setCodiceCausale(causale);
att.setIbanCorrente(ibanFlusso);
att.setDataRegistrazione(dataAttivazioneFlusso);
att.setDataInvio(dataInvio);
att.setDataRicezione(dataRicezione);
att.setRiferimentoOrig(riferimOrig);
att.setMutuo(m);
listaAtt.add(att);
m.setAttivazioniRid(listaAtt);
mAcquisiti.add(m);
}
}
if (record.startsWith(" EF")) {
totDisposizioniFlusso = Long.parseLong(record.substring(45, 52));
log.info("totDisposizioniFlusso: <"+totDisposizioniFlusso+">");
totRecordFlusso = Long.parseLong(record.substring(82, 89));
log.info("totRecordFlusso: <"+totRecordFlusso+">");
if(mioFile.size() != totRecordFlusso) {
throw new AttivazioneRIDException("Il numero di record indicato nel file non corrisponde al totale dei record inviati. " +
"L'operazione verra' annullata.");
}
}
}
}
if(esistonoErrati && erratiCaricati){
m = new Mutuo();
m.setNoteStipula("IL FLUSSO E' GIA' STATO CARICATO A SISTEMA.");
mAcquisiti.add(m);
} else if (esistonoErrati){
m = new Mutuo();
m.setNoteStipula("Sono Presenti Flussi RID Scartati.");
mAcquisiti.add(m);
}
if(totDisposizioniFlusso != contaDisposizioni ){
throw new AttivazioneRIDException("Il numero di disposizioni indicato nel file non corrisponde al totale delle disposizioni inviate. " +
"L'operazione verra' annullata.");
}
}
} catch (IOException ex) {
//System.out.println("IOException : " + ex.toString());
log.error(ex.toString());
ex.printStackTrace();
throw new AttivazioneRIDException(ex.toString());
}
// catch (NumberFormatException nfe) {
// //System.out.println("IOException : " + ex.toString());
// log.error(nfe.toString());