Skip to content
This repository has been archived by the owner on Jun 10, 2023. It is now read-only.

Commit

Permalink
Added tests
Browse files Browse the repository at this point in the history
Public constructors
Added download progress
  • Loading branch information
Mauro Molin committed Jan 22, 2018
1 parent 7c5349e commit 54c6c30
Show file tree
Hide file tree
Showing 21 changed files with 294 additions and 25 deletions.
2 changes: 2 additions & 0 deletions siopeDownloader.iml
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/main/test" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: org.jetbrains:annotations:15.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-csv:1.5" level="project" />
<orderEntry type="library" name="Maven: org.jetbrains:annotations:15.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.16.18" level="project" />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package com.github.mmauro94.siopeDownloader.datastruct.anagrafiche;

import com.github.mmauro94.siopeDownloader.download.SiopeZipDownloader;
import com.github.mmauro94.siopeDownloader.utils.OnProgressListener;
import com.github.mmauro94.siopeDownloader.utils.ParseUtils;
import com.github.mmauro94.siopeDownloader.utils.URLUtils;
import lombok.Getter;
import com.github.mmauro94.siopeDownloader.utils.ReaderUtils;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.io.IOException;
import java.io.InputStreamReader;
Expand Down Expand Up @@ -48,7 +50,7 @@ public class Anagrafiche {
@Getter
private final CodiceGestionaleUscite.Map codiciGestionaliUscite;

private 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) {
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;
Expand All @@ -62,9 +64,13 @@ private Anagrafiche(@NotNull Comparto.Map comparti, @NotNull Sottocomparto.Map s

@NotNull
public static Anagrafiche downloadAnagrafiche() throws IOException {
ZipInputStream download = new SiopeZipDownloader(new URL(URLUtils.SIOPE_WEBSITE + FILE_LOCATION)).download();
ZipEntry entry;
return downloadAnagrafiche(null);
}

@NotNull
public static Anagrafiche downloadAnagrafiche(@Nullable OnProgressListener progressListener) throws IOException {
ZipInputStream download = new SiopeZipDownloader(new URL(URLUtils.SIOPE_WEBSITE + FILE_LOCATION), progressListener).download();
ZipEntry entry;

List<CSVRecord> compartiRecords = null, sottocompartiRecords = null, regProvRecords = null, comuniRecords = null, entiRecords = null, codGestEntRecords = null, codGestUscRecords = null;
while ((entry = download.getNextEntry()) != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public interface Creator<T extends CodiceGestionale, M extends Map<T>> {
@Getter
private final Date fineValidita;

protected CodiceGestionale(@NotNull String codice, @NotNull String nome, @NotNull Comparto comparto, @NotNull Date inizioValidita, @Nullable Date fineValidita) {
public CodiceGestionale(@NotNull String codice, @NotNull String nome, @NotNull Comparto comparto, @NotNull Date inizioValidita, @Nullable Date fineValidita) {
this.codice = codice;
this.nome = nome;
this.comparto = comparto;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public static class Map extends CodiceGestionale.Map<CodiceGestionaleEntrate> {

}

protected CodiceGestionaleEntrate(@NotNull String codice, @NotNull String nome, @NotNull Comparto comparto, @NotNull Date inizioValidita, @Nullable Date fineValidita) {
public CodiceGestionaleEntrate(@NotNull String codice, @NotNull String nome, @NotNull Comparto comparto, @NotNull Date inizioValidita, @Nullable Date fineValidita) {
super(codice, nome, comparto, inizioValidita, fineValidita);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public static class Map extends CodiceGestionale.Map<CodiceGestionaleUscite> {

}

protected CodiceGestionaleUscite(@NotNull String codice, @NotNull String nome, @NotNull Comparto comparto, @NotNull Date inizioValidita, @Nullable Date fineValidita) {
public CodiceGestionaleUscite(@NotNull String codice, @NotNull String nome, @NotNull Comparto comparto, @NotNull Date inizioValidita, @Nullable Date fineValidita) {
super(codice, nome, comparto, inizioValidita, fineValidita);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ protected String getKey(@NotNull Comparto value) {
@Getter
private final String codice, nome;

private Comparto(@NotNull String codice, @NotNull String nome) {
public Comparto(@NotNull String codice, @NotNull String nome) {
this.codice = codice;
this.nome = nome;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
import lombok.Getter;
import org.apache.commons.csv.CSVRecord;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.Collection;
import java.util.List;

@EqualsAndHashCode(of = {"comuneId"})
public final class Comune {
public final class Comune implements GeoItem {

public static final String COMUNE_DI = "COMUNE DI ";

Expand Down Expand Up @@ -47,6 +49,7 @@ public ComuneId(int codice, @NotNull Provincia provincia) {
public Comune(ComuneId comuneId, @NotNull String nome) {
this.comuneId = comuneId;
this.nome = nome;
comuneId.getProvincia().addComune(this);
}

@NotNull
Expand Down Expand Up @@ -89,4 +92,16 @@ public static Comune parse(@NotNull CSVRecord record, @NotNull Provincia.Map pro
public static Comune.Map parseAll(@NotNull List<CSVRecord> records, @NotNull Provincia.Map provincie) {
return AutoMap.parse(records, x -> parse(x, provincie), Comune.Map::new);
}

@Override
@NotNull
public GeoItem getParent() {
return getProvincia();
}

@Override
@Nullable
public Collection<@NotNull ? extends GeoItem> getChildren() {
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ protected String getKey(@NotNull Ente value) {
@Getter
private final Sottocomparto sottocomparto;

private Ente(@NotNull String codice, @NotNull Date dataInclusione, @Nullable Date dataEsclusione, @Nullable String codiceFiscale, @NotNull String nome, @NotNull Comune comune, @Nullable Integer numeroAbitanti, @NotNull Sottocomparto sottocomparto) {
public Ente(@NotNull String codice, @NotNull Date dataInclusione, @Nullable Date dataEsclusione, @Nullable String codiceFiscale, @NotNull String nome, @NotNull Comune comune, @Nullable Integer numeroAbitanti, @NotNull Sottocomparto sottocomparto) {
this.codice = codice;
this.dataInclusione = dataInclusione;
this.dataEsclusione = dataEsclusione;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.github.mmauro94.siopeDownloader.datastruct.anagrafiche;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.Collection;

public interface GeoItem {

@Nullable
GeoItem getParent();

@Nullable
Collection<@NotNull ? extends GeoItem> getChildren();

@NotNull
String getNome();
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,15 @@
import lombok.Getter;
import org.apache.commons.csv.CSVRecord;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

@EqualsAndHashCode(of = {"codice"})
public final class Provincia {
public final class Provincia implements GeoItem {
public static final class Map extends AutoMap<Integer, Provincia> {

@NotNull
Expand All @@ -27,11 +31,17 @@ protected Integer getKey(@NotNull Provincia value) {
@Getter
@NotNull
private final Regione regione;
private final ArrayList<@NotNull Comune> comuni = new ArrayList<>();

private Provincia(int codice, @NotNull String nome, @NotNull Regione regione) {
public Provincia(int codice, @NotNull String nome, @NotNull Regione regione) {
this.codice = codice;
this.nome = nome;
this.regione = regione;
regione.addProvincia(this);
}

void addComune(@NotNull Comune comune) {
comuni.add(comune);
}

@NotNull
Expand Down Expand Up @@ -66,4 +76,21 @@ public static Provincia parse(@NotNull CSVRecord record, @NotNull Regione.Map re
public static Provincia.Map parseAll(@NotNull List<CSVRecord> records, @NotNull Regione.Map regioni) {
return AutoMap.parse(records, x -> parse(x, regioni), Provincia.Map::new);
}

@Override
@NotNull
public Regione getParent() {
return regione;
}

@Override
@NotNull
public Collection<@NotNull Comune> getChildren() {
return getComuni();
}

@NotNull
public List<@NotNull Comune> getComuni() {
return Collections.unmodifiableList(comuni);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,15 @@
import lombok.Getter;
import org.apache.commons.csv.CSVRecord;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

@EqualsAndHashCode(of = {"codice"})
public final class Regione {
public final class Regione implements GeoItem {

public static final class Map extends AutoMap<Integer, Regione> {

Expand All @@ -28,11 +32,17 @@ protected Integer getKey(@NotNull Regione value) {
@NotNull
@Getter
private final RipartizioneGeografica ripartizioneGeografica;
private final ArrayList<@NotNull Provincia> provincie = new ArrayList<>();

private Regione(int codice, @NotNull String nome, @NotNull RipartizioneGeografica ripartizioneGeografica) {
public Regione(int codice, @NotNull String nome, @NotNull RipartizioneGeografica ripartizioneGeografica) {
this.codice = codice;
this.nome = nome;
this.ripartizioneGeografica = ripartizioneGeografica;
ripartizioneGeografica.addRegione(this);
}

void addProvincia(@NotNull Provincia p) {
provincie.add(p);
}

@NotNull
Expand Down Expand Up @@ -62,4 +72,21 @@ public static Regione parse(@NotNull CSVRecord record, @NotNull RipartizioneGeog
public static Regione.Map parseAll(@NotNull List<CSVRecord> records, @NotNull RipartizioneGeografica.Map ripartizioniGeografiche) {
return AutoMap.parse(records, x -> parse(x, ripartizioniGeografiche), Regione.Map::new);
}

@Override
@NotNull
public RipartizioneGeografica getParent() {
return ripartizioneGeografica;
}

@Override
@NotNull
public Collection<@NotNull Provincia> getChildren() {
return getProvincie();
}

@NotNull
public List<@NotNull Provincia> getProvincie() {
return Collections.unmodifiableList(provincie);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,17 @@
import lombok.Getter;
import org.apache.commons.csv.CSVRecord;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;


@EqualsAndHashCode(of = {"nome"})
public final class RipartizioneGeografica {
public final class RipartizioneGeografica implements GeoItem {


public final static class Map extends AutoMap<String, RipartizioneGeografica> {

Expand All @@ -24,11 +29,17 @@ protected String getKey(@NotNull RipartizioneGeografica value) {
@NotNull
@Getter
private final String nome;
private final ArrayList<@NotNull Regione> regioni = new ArrayList<>();

private RipartizioneGeografica(@NotNull String nome) {
public RipartizioneGeografica(@NotNull String nome) {
this.nome = nome;
}

void addRegione(@NotNull Regione regione) {
regioni.add(regione);
}


@NotNull
public static RipartizioneGeografica parse(@NotNull CSVRecord record) {
if (record.size() != 5) {
Expand All @@ -47,4 +58,22 @@ public static RipartizioneGeografica parse(@NotNull CSVRecord record) {
public static RipartizioneGeografica.Map parseAll(@NotNull List<CSVRecord> records) {
return AutoMap.parse(records, RipartizioneGeografica::parse, RipartizioneGeografica.Map::new);
}


@Override
@Nullable
public GeoItem getParent() {
return null;
}

@Override
@NotNull
public Collection<@NotNull Regione> getChildren() {
return getRegioni();
}

@NotNull
public List<@NotNull Regione> getRegioni() {
return Collections.unmodifiableList(regioni);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ protected String getKey(@NotNull Sottocomparto value) {
@NotNull
private final Comparto comparto;

private Sottocomparto(@NotNull String codice, @NotNull String nome, @NotNull Comparto comparto) {
public Sottocomparto(@NotNull String codice, @NotNull String nome, @NotNull Comparto comparto) {
this.codice = codice;
this.nome = nome;
this.comparto = comparto;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.github.mmauro94.siopeDownloader.datastruct.operazioni;

import com.github.mmauro94.siopeDownloader.utils.OnProgressListener;
import com.github.mmauro94.siopeDownloader.datastruct.anagrafiche.Anagrafiche;
import com.github.mmauro94.siopeDownloader.datastruct.anagrafiche.CodiceGestionaleEntrate;
import com.github.mmauro94.siopeDownloader.datastruct.anagrafiche.Ente;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.io.IOException;
import java.math.BigDecimal;
Expand All @@ -17,7 +19,7 @@ private Entrata(@NotNull Ente ente, int year, int month, @NotNull CodiceGestiona
private final static Operazione.Creator<CodiceGestionaleEntrate, Entrata> CREATOR = (Creator<CodiceGestionaleEntrate, Entrata>) (anagrafiche, ente, year, month, codiceGestionale, amount) -> new Entrata(ente, year, month, anagrafiche.getCodiciGestionaliEntrate().get(codiceGestionale), amount);

@NotNull
public static Iterable<Entrata> downloadEntrate(int year, @NotNull Anagrafiche anagrafiche) throws IOException {
return download(year, anagrafiche, "SIOPE_ENTRATE", CREATOR);
public static Iterable<Entrata> downloadEntrate(int year, @NotNull Anagrafiche anagrafiche, @Nullable OnProgressListener onProgressListener) throws IOException {
return download(year, anagrafiche, onProgressListener, "SIOPE_ENTRATE", CREATOR);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.github.mmauro94.siopeDownloader.datastruct.operazioni;

import com.github.mmauro94.siopeDownloader.utils.OnProgressListener;
import lombok.Getter;
import com.github.mmauro94.siopeDownloader.datastruct.anagrafiche.Anagrafiche;
import com.github.mmauro94.siopeDownloader.datastruct.anagrafiche.CodiceGestionale;
Expand All @@ -10,6 +11,7 @@
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.io.IOException;
import java.io.InputStreamReader;
Expand Down Expand Up @@ -65,8 +67,8 @@ public static <CG extends CodiceGestionale, T extends Operazione<CG>> T parse(@N
}

@NotNull
public static <CG extends CodiceGestionale, T extends Operazione<CG>> Iterable<T> download(int year, @NotNull Anagrafiche anagrafiche, @NotNull String zipName, @NotNull Creator<CG, T> creator) throws IOException {
final ZipInputStream zis = new SiopeZipDownloader(new URL(URLUtils.SIOPE_WEBSITE + "/Siope2Web/documenti/siope2/open/last/" + zipName + "." + year + ".zip")).download();
public static <CG extends CodiceGestionale, T extends Operazione<CG>> Iterable<T> download(int year, @NotNull Anagrafiche anagrafiche, @Nullable OnProgressListener onProgressListener, @NotNull String zipName, @NotNull Creator<CG, T> creator) throws IOException {
final ZipInputStream zis = new SiopeZipDownloader(new URL(URLUtils.SIOPE_WEBSITE + "/Siope2Web/documenti/siope2/open/last/" + zipName + "." + year + ".zip"), onProgressListener).download();
final ZipEntry entry = zis.getNextEntry();
if (!entry.getName().endsWith(".csv")) {
throw new IllegalStateException("File contained in zip file is not a csv");
Expand Down
Loading

0 comments on commit 54c6c30

Please sign in to comment.