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