Parsing
This commit is contained in:
parent
06d54872ec
commit
dc0fda419d
5 changed files with 214 additions and 0 deletions
34
src/it/unibs/arnaldo/rovineperdute/Coordinata.java
Normal file
34
src/it/unibs/arnaldo/rovineperdute/Coordinata.java
Normal 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 +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
31
src/it/unibs/arnaldo/rovineperdute/Graph.java
Normal file
31
src/it/unibs/arnaldo/rovineperdute/Graph.java
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
22
src/it/unibs/arnaldo/rovineperdute/Links.java
Normal file
22
src/it/unibs/arnaldo/rovineperdute/Links.java
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
103
src/it/unibs/arnaldo/rovineperdute/Parser.java
Normal file
103
src/it/unibs/arnaldo/rovineperdute/Parser.java
Normal 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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
24
src/it/unibs/arnaldo/rovineperdute/RovinaPerduta.java
Normal file
24
src/it/unibs/arnaldo/rovineperdute/RovinaPerduta.java
Normal 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() + ")";
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue