com.github.mmauro94.siopeDownloader.datastruct.anagrafiche.Anagrafiche Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of siopeDownloader Show documentation
Show all versions of siopeDownloader Show documentation
Una libreria per scaricare i dati di siope.it
The newest version!
package com.github.mmauro94.siopeDownloader.datastruct.anagrafiche;
import com.github.mmauro94.siopeDownloader.utils.AbstractDownloader;
import com.github.mmauro94.siopeDownloader.utils.ParseUtils;
import com.github.mmauro94.siopeDownloader.utils.ReaderUtils;
import com.github.mmauro94.siopeDownloader.utils.URLUtils;
import lombok.Getter;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class Anagrafiche {
public static final String FILE_LOCATION = "/Siope2Web/documenti/siope2/open/last/SIOPE_ANAGRAFICHE.zip";
@NotNull
@Getter
private final Comparto.Map comparti;
@NotNull
@Getter
private final Sottocomparto.Map sottocomparti;
@NotNull
@Getter
private final RipartizioneGeografica.Map ripartizioniGeografiche;
@NotNull
@Getter
private final Regione.Map regioni;
@NotNull
@Getter
private final Provincia.Map provincie;
@NotNull
@Getter
private final Comune.Map comuni;
@NotNull
@Getter
private final Ente.Map enti;
@NotNull
@Getter
private final CodiceGestionaleEntrate.Map codiciGestionaliEntrate;
@NotNull
@Getter
private final CodiceGestionaleUscite.Map codiciGestionaliUscite;
public Anagrafiche(@NotNull Comparto.Map comparti, @NotNull Sottocomparto.Map sottocomparti, @NotNull RipartizioneGeografica.Map ripartizioniGeografiche, @NotNull Regione.Map regioni, @NotNull Provincia.Map provincie, @NotNull Comune.Map comuni, @NotNull Ente.Map enti, @NotNull CodiceGestionaleEntrate.Map codiciGestionaliEntrate, @NotNull CodiceGestionaleUscite.Map codiciGestionaliUscite) {
this.comparti = comparti;
this.sottocomparti = sottocomparti;
this.ripartizioniGeografiche = ripartizioniGeografiche;
this.regioni = regioni;
this.provincie = provincie;
this.comuni = comuni;
this.enti = enti;
this.codiciGestionaliEntrate = codiciGestionaliEntrate;
this.codiciGestionaliUscite = codiciGestionaliUscite;
}
public static class Downloader extends AbstractDownloader {
public Downloader() {
}
@Override
protected Downloader me() {
return this;
}
@NotNull
@Override
protected URL getURL() throws MalformedURLException {
return new URL(URLUtils.SIOPE_WEBSITE + FILE_LOCATION);
}
@NotNull
@Override
protected Anagrafiche fromInputStream(@NotNull InputStream inputStream) throws IOException {
final ZipInputStream zis = new ZipInputStream(inputStream);
ZipEntry entry;
List compartiRecords = null, sottocompartiRecords = null, regProvRecords = null, comuniRecords = null, entiRecords = null, codGestEntRecords = null, codGestUscRecords = null;
while ((entry = zis.getNextEntry()) != null) {
final List records = CSVParser.parse(ReaderUtils.readAll(new InputStreamReader(zis)), ParseUtils.CSV_FORMAT).getRecords();
switch (entry.getName().substring(0, entry.getName().indexOf('.'))) {
case "ANAG_COMPARTI":
compartiRecords = records;
break;
case "ANAG_SOTTOCOMPARTI":
sottocompartiRecords = records;
break;
case "ANAG_REG_PROV":
regProvRecords = records;
break;
case "ANAG_COMUNI":
case "ANAGRAFE_COMUNI":
comuniRecords = records;
break;
case "ANAG_ENTI_SIOPE":
entiRecords = records;
break;
case "ANAG_CODGEST_ENTRATE":
codGestEntRecords = records;
break;
case "ANAG_CODGEST_USCITE":
codGestUscRecords = records;
continue;
default:
throw new IllegalStateException("Unexpected file: " + entry.getName());
}
}
if (compartiRecords == null) {
throw new IllegalStateException("File ANAG_COMPARTI not found");
} else if (sottocompartiRecords == null) {
throw new IllegalStateException("File ANAG_SOTTOCOMPARTI not found");
} else if (regProvRecords == null) {
throw new IllegalStateException("File ANAG_REG_PROV not found");
} else if (comuniRecords == null) {
throw new IllegalStateException("File ANAGRAFE_COMUNI/ANAG_COMUNI not found");
} else if (entiRecords == null) {
throw new IllegalStateException("File ANAG_ENTI_SIOPE not found");
} else if (codGestEntRecords == null) {
throw new IllegalStateException("File ANAG_CODGEST_ENTRATE not found");
} else if (codGestUscRecords == null) {
throw new IllegalStateException("File ANAG_CODGEST_USCITE not found");
}
final Comparto.Map comparti = Comparto.parseAll(compartiRecords);
final Sottocomparto.Map sottocomparti = Sottocomparto.parseAll(sottocompartiRecords, comparti);
final RipartizioneGeografica.Map ripartizioniGeografiche = RipartizioneGeografica.parseAll(regProvRecords);
final Regione.Map regioni = Regione.parseAll(regProvRecords, ripartizioniGeografiche);
final Provincia.Map provincie = Provincia.parseAll(regProvRecords, regioni);
final Comune.Map comuni = Comune.parseAll(comuniRecords, provincie);
final Ente.Map enti = Ente.parseAll(entiRecords, comuni, provincie, sottocomparti);
final CodiceGestionaleEntrate.Map codiciGestionaliEntrate = CodiceGestionaleEntrate.parseAll(codGestEntRecords, comparti);
final CodiceGestionaleUscite.Map codiciGestionaliUscite = CodiceGestionaleUscite.parseAll(codGestUscRecords, comparti);
return new Anagrafiche(comparti, sottocomparti, ripartizioniGeografiche, regioni, provincie, comuni, enti, codiciGestionaliEntrate, codiciGestionaliUscite);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy