This commit is contained in:
L3o15 2025-05-26 18:07:55 +00:00
parent 06d54872ec
commit dc0fda419d
5 changed files with 214 additions and 0 deletions

View file

@ -0,0 +1,34 @@
package it.unibs.arnaldo.rovineperdute;
public class Coordinata {
private final int x;
private final int y;
private final int altezza;
public Coordinata(int x, int y, int altezza){
this.altezza = altezza;
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public int getAltezza() {
return altezza;
}
@Override
public String toString() {
return "Coordinata{" +
"x=" + x +
", y=" + y +
", altezza=" + altezza +
'}';
}
}

View file

@ -0,0 +1,31 @@
package it.unibs.arnaldo.rovineperdute;
import java.util.HashMap;
import java.util.List;
public class Graph {
private final HashMap<RovinaPerduta, List<RovinaPerduta>> graph = new HashMap<>();
public Graph(){}
public void add(RovinaPerduta rp, List<RovinaPerduta> links) {
graph.put(rp, links);
}
public List<RovinaPerduta> getListaCollegamenti(RovinaPerduta rp){
return graph.get(rp);
}
@Override
public String toString() {
StringBuilder ret = new StringBuilder();
for (RovinaPerduta rp : graph.keySet()){
ret.append(rp.toString()).append(": \n");
List<RovinaPerduta> rovineCollegate = graph.get(rp);
for (RovinaPerduta rpCollegata: rovineCollegate){
ret.append("\t").append(rpCollegata.toString()).append("\n");
}
}
return ret.toString();
}
}

View file

@ -0,0 +1,22 @@
package it.unibs.arnaldo.rovineperdute;
import java.util.HashMap;
import java.util.List;
public class Links {
private final HashMap<Integer, List<Integer>> mappaCollegamenti;
private final HashMap<Integer, RovinaPerduta> mappa;
public Links(HashMap<Integer, RovinaPerduta> mappa, HashMap<Integer, List<Integer>> mappaCollegamenti) {
this.mappa = mappa;
this.mappaCollegamenti = mappaCollegamenti;
}
public HashMap<Integer, List<Integer>> getMappaCollegamenti() {
return mappaCollegamenti;
}
public HashMap<Integer, RovinaPerduta> getMappa() {
return mappa;
}
}

View file

@ -0,0 +1,103 @@
package it.unibs.arnaldo.rovineperdute;
import javax.xml.stream.*;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class Parser {
// rovina = città
public static void parseRovinePerduteXML(String fileName) {
XMLInputFactory xmlif;
XMLStreamReader xmlr = null;
String currentElement = null;
// momentanea
List<Integer> link = new ArrayList<>();
// mappa id -> rovina
HashMap<Integer, RovinaPerduta> rovineMap = new HashMap<>();
// mappa id -> link collegamenti
HashMap<Integer, List<Integer>> mappaCollegamenti = new HashMap<>();
// variabili momentanee
int cityId = -1;
int x = -1;
int y = -1;
int h = -1;
String nome = null;
try (FileInputStream reader = new FileInputStream(fileName)) {
xmlif = XMLInputFactory.newInstance();
xmlr = xmlif.createXMLStreamReader(fileName, reader);
while (xmlr.hasNext()) {
int event = xmlr.getEventType();
switch (event) {
case XMLStreamConstants.START_ELEMENT:
currentElement = xmlr.getLocalName();
if (currentElement.equals("city")) {
cityId = Integer.parseInt(xmlr.getAttributeValue(null, "id"));
nome = xmlr.getAttributeValue(null, "name");
x = Integer.parseInt(xmlr.getAttributeValue(null, "x"));
y = Integer.parseInt(xmlr.getAttributeValue(null, "y"));
h = Integer.parseInt(xmlr.getAttributeValue(null, "h"));
}
if (currentElement.equals("link")) {
link.add(Integer.parseInt(xmlr.getAttributeValue(null, "to")));
}
break;
case XMLStreamConstants.END_ELEMENT:
String endTag = xmlr.getLocalName();
if (endTag.equals("city")) {
mappaCollegamenti.put(cityId, link);
link = new ArrayList<>();
RovinaPerduta rovinaPerduta = new RovinaPerduta(new Coordinata(x, y, h), nome);
nome = null;
x = -1;
y = -1;
h = -1;
if (cityId != -1){
rovineMap.put(cityId, rovinaPerduta);
}
cityId = -1;
}
break;
}
xmlr.next();
}
xmlr.close();
Graph grafo = new Graph();
for (Integer idx : mappaCollegamenti.keySet()){
List<Integer> listaIndiciCollegamenti = mappaCollegamenti.get(idx);
List<RovinaPerduta> listaCollegamenti = new ArrayList<>();
RovinaPerduta rp = rovineMap.get(idx);
for(int i : listaIndiciCollegamenti){
listaCollegamenti.add(rovineMap.get(i));
}
grafo.add(rp, listaCollegamenti);
}
System.out.println(grafo);
} catch (FactoryConfigurationError | XMLStreamException | IOException e) {
System.out.println("Error reading the file: " + e.getMessage());
}
}
}

View file

@ -0,0 +1,24 @@
package it.unibs.arnaldo.rovineperdute;
public class RovinaPerduta {
private final Coordinata coordinata;
private final String nome;
public RovinaPerduta(Coordinata coordinata, String nome) {
this.coordinata = coordinata;
this.nome = nome;
}
public Coordinata getCoordinata() {
return coordinata;
}
public String getNome() {
return nome;
}
@Override
public String toString() {
return nome + " (" + coordinata.getX() + ", " + coordinata.getY() + ", " + coordinata.getAltezza() + ")";
}
}