Compare commits
No commits in common. "main" and "master" have entirely different histories.
29 changed files with 84683 additions and 2 deletions
23
.gitignore
vendored
Normal file
23
.gitignore
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
# IntelliJ
|
||||||
|
.idea/
|
||||||
|
*.iml
|
||||||
|
out/
|
||||||
|
|
||||||
|
# Eclipse
|
||||||
|
.classpath
|
||||||
|
.project
|
||||||
|
.settings/
|
||||||
|
bin/
|
||||||
|
|
||||||
|
# NetBeans
|
||||||
|
/nbproject/private/
|
||||||
|
/nbbuild/
|
||||||
|
/dist/
|
||||||
|
/nbdist/
|
||||||
|
/.nb-gradle/
|
||||||
|
|
||||||
|
# VS Code
|
||||||
|
.vscode/
|
||||||
|
|
||||||
|
# macOS
|
||||||
|
.DS_Store
|
8
.idea/.gitignore
generated
vendored
Normal file
8
.idea/.gitignore
generated
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
10
.idea/libraries/google_code_gson.xml
generated
Normal file
10
.idea/libraries/google_code_gson.xml
generated
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="google.code.gson" type="repository">
|
||||||
|
<properties maven-id="com.google.code.gson:gson:2.10.1" />
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/lib/gson-2.10.1.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
9
.idea/libraries/kibofplib_1_0.xml
generated
Normal file
9
.idea/libraries/kibofplib_1_0.xml
generated
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="kibofplib-1.0">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/lib/kibofplib-1.0.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
6
.idea/misc.xml
generated
Normal file
6
.idea/misc.xml
generated
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_19" default="true" project-jdk-name="corretto-19" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
|
</component>
|
||||||
|
</project>
|
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/PatenteELibbrettoPregoh.iml" filepath="$PROJECT_DIR$/PatenteELibbrettoPregoh.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
212
.idea/workspace.xml
generated
Normal file
212
.idea/workspace.xml
generated
Normal file
|
@ -0,0 +1,212 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="AutoImportSettings">
|
||||||
|
<option name="autoReloadType" value="SELECTIVE" />
|
||||||
|
</component>
|
||||||
|
<component name="ChangeListManager">
|
||||||
|
<list default="true" id="af162031-d7bc-4a6c-bf85-8552ba253018" name="Changes" comment="Save diary" />
|
||||||
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
|
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||||
|
</component>
|
||||||
|
<component name="FileTemplateManagerImpl">
|
||||||
|
<option name="RECENT_TEMPLATES">
|
||||||
|
<list>
|
||||||
|
<option value="Class" />
|
||||||
|
<option value="Enum" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="Git.Settings">
|
||||||
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectColorInfo">{
|
||||||
|
"associatedIndex": 3
|
||||||
|
}</component>
|
||||||
|
<component name="ProjectId" id="2viDAWzJ9gaEHvUFcho7UWwFSvI" />
|
||||||
|
<component name="ProjectViewState">
|
||||||
|
<option name="hideEmptyMiddlePackages" value="true" />
|
||||||
|
<option name="showLibraryContents" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PropertiesComponent">{
|
||||||
|
"keyToString": {
|
||||||
|
"Application.PatenteELibbrettoPregohMain.executor": "Run",
|
||||||
|
"Downloaded.Files.Path.Enabled": "true",
|
||||||
|
"Repository.Attach.Annotations": "false",
|
||||||
|
"Repository.Attach.JavaDocs": "false",
|
||||||
|
"Repository.Attach.Sources": "false",
|
||||||
|
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||||
|
"RunOnceActivity.git.unshallow": "true",
|
||||||
|
"SHARE_PROJECT_CONFIGURATION_FILES": "true",
|
||||||
|
"git-widget-placeholder": "master",
|
||||||
|
"kotlin-language-version-configured": "true",
|
||||||
|
"last_opened_file_path": "/Users/leonardo-orizio/Desktop/Scuola/UniBs/PrimoAnno/Fondamenti di info/ProgettoArnaldo/PatenteELibbrettoPregoh",
|
||||||
|
"node.js.detected.package.eslint": "true",
|
||||||
|
"node.js.detected.package.tslint": "true",
|
||||||
|
"node.js.selected.package.eslint": "(autodetect)",
|
||||||
|
"node.js.selected.package.tslint": "(autodetect)",
|
||||||
|
"nodejs_package_manager_path": "npm",
|
||||||
|
"project.structure.last.edited": "Project",
|
||||||
|
"project.structure.proportion": "0.15",
|
||||||
|
"project.structure.side.proportion": "0.2",
|
||||||
|
"settings.editor.selected.configurable": "preferences.pluginManager",
|
||||||
|
"vue.rearranger.settings.migration": "true"
|
||||||
|
}
|
||||||
|
}</component>
|
||||||
|
<component name="RecentsManager">
|
||||||
|
<key name="CreateClassDialog.RecentsKey">
|
||||||
|
<recent name="it.unibs.fp.patenteelibbrettopregoh" />
|
||||||
|
</key>
|
||||||
|
<key name="MoveFile.RECENT_KEYS">
|
||||||
|
<recent name="$PROJECT_DIR$" />
|
||||||
|
<recent name="$PROJECT_DIR$/lib" />
|
||||||
|
</key>
|
||||||
|
</component>
|
||||||
|
<component name="SharedIndexes">
|
||||||
|
<attachedChunks>
|
||||||
|
<set>
|
||||||
|
<option value="bundled-jdk-9823dce3aa75-fbdcb00ec9e3-intellij.indexing.shared.core-IU-251.23774.435" />
|
||||||
|
<option value="bundled-js-predefined-d6986cc7102b-f27c65a3e318-JavaScript-IU-251.23774.435" />
|
||||||
|
</set>
|
||||||
|
</attachedChunks>
|
||||||
|
</component>
|
||||||
|
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
||||||
|
<component name="TaskManager">
|
||||||
|
<task active="true" id="Default" summary="Default task">
|
||||||
|
<changelist id="af162031-d7bc-4a6c-bf85-8552ba253018" name="Changes" comment="" />
|
||||||
|
<created>1744618859254</created>
|
||||||
|
<option name="number" value="Default" />
|
||||||
|
<option name="presentableId" value="Default" />
|
||||||
|
<updated>1744618859254</updated>
|
||||||
|
<workItem from="1744618862239" duration="6795000" />
|
||||||
|
<workItem from="1744796155390" duration="10205000" />
|
||||||
|
<workItem from="1744899816172" duration="2720000" />
|
||||||
|
<workItem from="1745060286799" duration="3585000" />
|
||||||
|
<workItem from="1746090394771" duration="7577000" />
|
||||||
|
<workItem from="1746098459756" duration="164000" />
|
||||||
|
<workItem from="1746099005276" duration="376000" />
|
||||||
|
<workItem from="1746099462736" duration="181000" />
|
||||||
|
</task>
|
||||||
|
<task id="LOCAL-00001" summary="First commit">
|
||||||
|
<option name="closed" value="true" />
|
||||||
|
<created>1744619010467</created>
|
||||||
|
<option name="number" value="00001" />
|
||||||
|
<option name="presentableId" value="LOCAL-00001" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1744619010467</updated>
|
||||||
|
</task>
|
||||||
|
<task id="LOCAL-00002" summary="First classes and C.F.">
|
||||||
|
<option name="closed" value="true" />
|
||||||
|
<created>1744625521049</created>
|
||||||
|
<option name="number" value="00002" />
|
||||||
|
<option name="presentableId" value="LOCAL-00002" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1744625521049</updated>
|
||||||
|
</task>
|
||||||
|
<task id="LOCAL-00003" summary="Game logic">
|
||||||
|
<option name="closed" value="true" />
|
||||||
|
<created>1744806827798</created>
|
||||||
|
<option name="number" value="00003" />
|
||||||
|
<option name="presentableId" value="LOCAL-00003" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1744806827798</updated>
|
||||||
|
</task>
|
||||||
|
<task id="LOCAL-00004" summary="Diary implementation, refactoring">
|
||||||
|
<option name="closed" value="true" />
|
||||||
|
<created>1745064335338</created>
|
||||||
|
<option name="number" value="00004" />
|
||||||
|
<option name="presentableId" value="LOCAL-00004" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1745064335338</updated>
|
||||||
|
</task>
|
||||||
|
<task id="LOCAL-00005" summary="Parsing in JSON, Javadoc">
|
||||||
|
<option name="closed" value="true" />
|
||||||
|
<created>1746096671150</created>
|
||||||
|
<option name="number" value="00005" />
|
||||||
|
<option name="presentableId" value="LOCAL-00005" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1746096671150</updated>
|
||||||
|
</task>
|
||||||
|
<task id="LOCAL-00006" summary="Build">
|
||||||
|
<option name="closed" value="true" />
|
||||||
|
<created>1746097962786</created>
|
||||||
|
<option name="number" value="00006" />
|
||||||
|
<option name="presentableId" value="LOCAL-00006" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1746097962786</updated>
|
||||||
|
</task>
|
||||||
|
<task id="LOCAL-00007" summary="Build fix">
|
||||||
|
<option name="closed" value="true" />
|
||||||
|
<created>1746098566296</created>
|
||||||
|
<option name="number" value="00007" />
|
||||||
|
<option name="presentableId" value="LOCAL-00007" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1746098566296</updated>
|
||||||
|
</task>
|
||||||
|
<task id="LOCAL-00008" summary="Bug fix">
|
||||||
|
<option name="closed" value="true" />
|
||||||
|
<created>1746099310889</created>
|
||||||
|
<option name="number" value="00008" />
|
||||||
|
<option name="presentableId" value="LOCAL-00008" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1746099310889</updated>
|
||||||
|
</task>
|
||||||
|
<task id="LOCAL-00009" summary="Save diary">
|
||||||
|
<option name="closed" value="true" />
|
||||||
|
<created>1746099535428</created>
|
||||||
|
<option name="number" value="00009" />
|
||||||
|
<option name="presentableId" value="LOCAL-00009" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1746099535428</updated>
|
||||||
|
</task>
|
||||||
|
<option name="localTasksCounter" value="10" />
|
||||||
|
<servers />
|
||||||
|
</component>
|
||||||
|
<component name="TypeScriptGeneratedFilesManager">
|
||||||
|
<option name="version" value="3" />
|
||||||
|
</component>
|
||||||
|
<component name="Vcs.Log.Tabs.Properties">
|
||||||
|
<option name="RECENT_FILTERS">
|
||||||
|
<map>
|
||||||
|
<entry key="Branch">
|
||||||
|
<value>
|
||||||
|
<list>
|
||||||
|
<RecentGroup>
|
||||||
|
<option name="FILTER_VALUES">
|
||||||
|
<option value="origin/master" />
|
||||||
|
</option>
|
||||||
|
</RecentGroup>
|
||||||
|
<RecentGroup>
|
||||||
|
<option name="FILTER_VALUES">
|
||||||
|
<option value="master" />
|
||||||
|
</option>
|
||||||
|
</RecentGroup>
|
||||||
|
</list>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
</map>
|
||||||
|
</option>
|
||||||
|
<option name="TAB_STATES">
|
||||||
|
<map>
|
||||||
|
<entry key="MAIN">
|
||||||
|
<value>
|
||||||
|
<State />
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
</map>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="VcsManagerConfiguration">
|
||||||
|
<MESSAGE value="First commit" />
|
||||||
|
<MESSAGE value="First classes and C.F." />
|
||||||
|
<MESSAGE value="Game logic" />
|
||||||
|
<MESSAGE value="Diary implementation, refactoring" />
|
||||||
|
<MESSAGE value="Parsing in JSON, Javadoc" />
|
||||||
|
<MESSAGE value="Build" />
|
||||||
|
<MESSAGE value="Build fix" />
|
||||||
|
<MESSAGE value="Bug fix" />
|
||||||
|
<MESSAGE value="Save diary" />
|
||||||
|
<option name="LAST_COMMIT_MESSAGE" value="Save diary" />
|
||||||
|
</component>
|
||||||
|
</project>
|
9002
FileEsercizio/IDpersone.json
Normal file
9002
FileEsercizio/IDpersone.json
Normal file
File diff suppressed because it is too large
Load diff
9003
FileEsercizio/IDpersone.xml
Normal file
9003
FileEsercizio/IDpersone.xml
Normal file
File diff suppressed because it is too large
Load diff
32370
FileEsercizio/comuni.json
Normal file
32370
FileEsercizio/comuni.json
Normal file
File diff suppressed because it is too large
Load diff
32371
FileEsercizio/comuni.xml
Normal file
32371
FileEsercizio/comuni.xml
Normal file
File diff suppressed because it is too large
Load diff
22
PatenteELibbrettoPregoh.iml
Normal file
22
PatenteELibbrettoPregoh.iml
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="JAVA_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="library" name="kibofplib-1.0" level="project" />
|
||||||
|
<orderEntry type="module-library">
|
||||||
|
<library>
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$USER_HOME$/Downloads/gson-2.10.1.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</orderEntry>
|
||||||
|
<orderEntry type="library" name="google.code.gson" level="project" />
|
||||||
|
</component>
|
||||||
|
</module>
|
|
@ -1,2 +0,0 @@
|
||||||
# PatenteELibbrettoPregoh
|
|
||||||
|
|
BIN
lib/gson-2.10.1.jar
Normal file
BIN
lib/gson-2.10.1.jar
Normal file
Binary file not shown.
BIN
lib/kibofplib-1.0.jar
Normal file
BIN
lib/kibofplib-1.0.jar
Normal file
Binary file not shown.
51
src/it/unibs/fp/patenteelibbrettopregoh/Comune.java
Normal file
51
src/it/unibs/fp/patenteelibbrettopregoh/Comune.java
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
package it.unibs.fp.patenteelibbrettopregoh;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Classe che rappresenta un comune con nome e codice.
|
||||||
|
*/
|
||||||
|
public class Comune {
|
||||||
|
private final String nome;
|
||||||
|
private final String codice;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Costruttore della classe Comune.
|
||||||
|
*
|
||||||
|
* @param nome il nome del comune
|
||||||
|
* @param codice il codice del comune
|
||||||
|
*/
|
||||||
|
public Comune(String nome, String codice) {
|
||||||
|
this.nome = nome;
|
||||||
|
this.codice = codice;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il nome del comune.
|
||||||
|
*
|
||||||
|
* @return il nome del comune
|
||||||
|
*/
|
||||||
|
public String getNome() {
|
||||||
|
return nome;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il codice del comune.
|
||||||
|
*
|
||||||
|
* @return il codice del comune
|
||||||
|
*/
|
||||||
|
public String getCodice() {
|
||||||
|
return codice;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce una rappresentazione testuale del comune.
|
||||||
|
*
|
||||||
|
* @return una stringa che rappresenta il comune
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Comune{" +
|
||||||
|
"nome='" + nome + '\'' +
|
||||||
|
", codice='" + codice + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
61
src/it/unibs/fp/patenteelibbrettopregoh/Comuni.java
Normal file
61
src/it/unibs/fp/patenteelibbrettopregoh/Comuni.java
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
package it.unibs.fp.patenteelibbrettopregoh;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Classe che rappresenta una lista di comuni.
|
||||||
|
*/
|
||||||
|
public class Comuni {
|
||||||
|
private final ArrayList<Comune> comuni;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Costruttore della classe Comuni.
|
||||||
|
* Inizializza la lista di comuni.
|
||||||
|
*/
|
||||||
|
public Comuni() {
|
||||||
|
this.comuni = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Aggiunge un comune alla lista.
|
||||||
|
*
|
||||||
|
* @param comune il comune da aggiungere
|
||||||
|
*/
|
||||||
|
public void addComune(Comune comune) {
|
||||||
|
this.comuni.add(comune);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rimuove un comune dalla lista.
|
||||||
|
*
|
||||||
|
* @param comune il comune da rimuovere
|
||||||
|
*/
|
||||||
|
public void removeComune(Comune comune) {
|
||||||
|
this.comuni.remove(comune);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce la lista di comuni.
|
||||||
|
*
|
||||||
|
* @return la lista di comuni
|
||||||
|
*/
|
||||||
|
public ArrayList<Comune> getComuni() {
|
||||||
|
return comuni;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il codice del comune dato il nome.
|
||||||
|
*
|
||||||
|
* @param nomeComune il nome del comune
|
||||||
|
* @return il codice del comune, oppure null se non trovato
|
||||||
|
*/
|
||||||
|
public String getCodiceComune(String nomeComune) {
|
||||||
|
for (Comune comune : comuni) {
|
||||||
|
if (comune.getNome().equalsIgnoreCase(nomeComune)) {
|
||||||
|
return comune.getCodice();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null; // Comune non trovato
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
5
src/it/unibs/fp/patenteelibbrettopregoh/Formato.java
Normal file
5
src/it/unibs/fp/patenteelibbrettopregoh/Formato.java
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
package it.unibs.fp.patenteelibbrettopregoh;
|
||||||
|
|
||||||
|
public enum Formato {
|
||||||
|
JSON, XML;
|
||||||
|
}
|
230
src/it/unibs/fp/patenteelibbrettopregoh/GameData.java
Normal file
230
src/it/unibs/fp/patenteelibbrettopregoh/GameData.java
Normal file
|
@ -0,0 +1,230 @@
|
||||||
|
package it.unibs.fp.patenteelibbrettopregoh;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GameData.java
|
||||||
|
* questa classe rappresenta i dati di gioco, come il formato, il nome del personaggio,
|
||||||
|
* il diario, le persone, il saldo, il numero di mazzette accettate dalla polizia,
|
||||||
|
* il numero di rivoluzionari accettati, lo stato del gioco e la data.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class GameData {
|
||||||
|
private final Formato formato;
|
||||||
|
private final String nomePersonaggio;
|
||||||
|
private final ArrayList<PaginaDiario> diario;
|
||||||
|
private final Comuni comuni;
|
||||||
|
private final ArrayList<Persona> persone;
|
||||||
|
private double saldo;
|
||||||
|
private int numeroMazzetteAccettatePolizia;
|
||||||
|
private int numeroRivoluzionariAccettati;
|
||||||
|
private StatoGioco statoGioco;
|
||||||
|
private int giorno;
|
||||||
|
private LocalDate data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* costruttore della classe GameData.
|
||||||
|
* Inizializza i dati di gioco con il formato specificato.
|
||||||
|
*
|
||||||
|
* @param formato il formato del gioco
|
||||||
|
*/
|
||||||
|
public GameData(Formato formato) {
|
||||||
|
this.formato = formato;
|
||||||
|
this.diario = new ArrayList<>();
|
||||||
|
this.comuni = Parser.parseComuni(formato, "FileEsercizio/comuni");
|
||||||
|
this.persone = Parser.parsePersone(formato, "FileEsercizio/IDpersone");
|
||||||
|
this.saldo = 0;
|
||||||
|
this.numeroMazzetteAccettatePolizia = 0;
|
||||||
|
this.numeroRivoluzionariAccettati = 0;
|
||||||
|
this.statoGioco = StatoGioco.IN_CORSO;
|
||||||
|
this.nomePersonaggio = "Ajeje Brazorf";
|
||||||
|
this.giorno = 1;
|
||||||
|
this.data = LocalDate.of(2024, 4, 26);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* getter per il diario.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public ArrayList<PaginaDiario> getDiario() {
|
||||||
|
return diario;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* getter per i comuni.
|
||||||
|
*
|
||||||
|
* @return i comuni
|
||||||
|
*/
|
||||||
|
public Comuni getComuni() {
|
||||||
|
return comuni;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* getter per le persone.
|
||||||
|
*
|
||||||
|
* @return le persone
|
||||||
|
*/
|
||||||
|
public ArrayList<Persona> getPersone() {
|
||||||
|
return persone;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* getter per il saldo.
|
||||||
|
*
|
||||||
|
* @return il saldo
|
||||||
|
*/
|
||||||
|
public double getSaldo() {
|
||||||
|
return saldo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* getter di una persona casuale da controllare.
|
||||||
|
*
|
||||||
|
* @return la persona casuale da controllare
|
||||||
|
*/
|
||||||
|
public Persona getPersonaDaControlare() {
|
||||||
|
return persone.get((int) (Math.random() * (persone.size() + 1)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* getter per il numero di mazzette accettate dalla polizia.
|
||||||
|
*
|
||||||
|
* @return il numero di mazzette accettate dalla polizia
|
||||||
|
*/
|
||||||
|
public int getNumeroMazzetteAccettatePolizia() {
|
||||||
|
return numeroMazzetteAccettatePolizia;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* getter per il numero di rivoluzionari accettati.
|
||||||
|
*
|
||||||
|
* @return il numero di rivoluzionari accettati
|
||||||
|
*/
|
||||||
|
public int getNumeroRivoluzionariAccettati() {
|
||||||
|
return numeroRivoluzionariAccettati;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* aggiunge una pagina al diario.
|
||||||
|
*/
|
||||||
|
public void addPaginaDiario(PaginaDiario pagina) {
|
||||||
|
diario.add(pagina);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* incrementa il saldo di un valore specificato.
|
||||||
|
*/
|
||||||
|
public void addSaldo(double valore) {
|
||||||
|
saldo += valore;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* paga una multa di un valore specificato.
|
||||||
|
*/
|
||||||
|
public void pagaMulta(double valore) {
|
||||||
|
paga(valore);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* aumenta il numero di mazzette accettate dalla polizia.
|
||||||
|
*/
|
||||||
|
public void incrementaMazzetteAccettatePolizia() {
|
||||||
|
numeroMazzetteAccettatePolizia++;
|
||||||
|
if (numeroMazzetteAccettatePolizia >= 2) {
|
||||||
|
statoGioco = StatoGioco.GIUSTIZIATO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* aumenta il numero di rivoluzionari accettati.
|
||||||
|
*/
|
||||||
|
public void incrementaRivoluzionariAccettati() {
|
||||||
|
numeroRivoluzionariAccettati++;
|
||||||
|
if (numeroRivoluzionariAccettati >= 5) {
|
||||||
|
statoGioco = StatoGioco.RIVOLUZIONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* getter per il nome del personaggio.
|
||||||
|
*
|
||||||
|
* @return il nome del personaggio
|
||||||
|
*/
|
||||||
|
public String getNomePersonaggio() {
|
||||||
|
return nomePersonaggio;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* getter per lo stato del gioco.
|
||||||
|
*
|
||||||
|
* @return lo stato del gioco
|
||||||
|
*/
|
||||||
|
public StatoGioco getStatoGioco() {
|
||||||
|
return statoGioco;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* getter per il giorno corrente del gioco.
|
||||||
|
*
|
||||||
|
* @return il giorno corrente del gioco
|
||||||
|
*/
|
||||||
|
public int getGiorno() {
|
||||||
|
return giorno;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* aumenta il giorno corrente e aggiorna il saldo.
|
||||||
|
*
|
||||||
|
* @param personeControllate la lista delle persone controllate
|
||||||
|
*/
|
||||||
|
public void incrementaGiorno(ArrayList<PersonaControllata> personeControllate) {
|
||||||
|
if (!personeControllate.isEmpty()) {
|
||||||
|
addSaldo(50 * personeControllate.size());
|
||||||
|
}
|
||||||
|
paga(200);
|
||||||
|
|
||||||
|
PaginaDiario pagina = new PaginaDiario(String.format("%d-%02d-%02d", data.getYear(), data.getMonthValue(), data.getDayOfMonth()), saldo);
|
||||||
|
for (PersonaControllata persona : personeControllate) {
|
||||||
|
pagina.addPersonaControllata(persona);
|
||||||
|
}
|
||||||
|
diario.add(pagina);
|
||||||
|
|
||||||
|
giorno++;
|
||||||
|
|
||||||
|
data = LocalDate.of(data.getYear(), data.getMonthValue(), data.getDayOfMonth() + 1);
|
||||||
|
|
||||||
|
if (giorno > 12 && statoGioco == StatoGioco.IN_CORSO && saldo > 2300) {
|
||||||
|
statoGioco = StatoGioco.DODICESIMO_GIORNO;
|
||||||
|
} else if (giorno > 12 && statoGioco == StatoGioco.IN_CORSO) {
|
||||||
|
statoGioco = StatoGioco.NON_ABBASTANZA_SOLDI;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fa pagare un valore specificato al saldo.
|
||||||
|
*/
|
||||||
|
private void paga(double valore) {
|
||||||
|
saldo -= valore;
|
||||||
|
if (saldo < 0) {
|
||||||
|
statoGioco = StatoGioco.ARRESTATO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* getter per la data del gioco.
|
||||||
|
*
|
||||||
|
* @return la data del gioco
|
||||||
|
*/
|
||||||
|
public LocalDate getData() {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* salva il diario in un file.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void saveDiario() {
|
||||||
|
Parser.saveDiario("FileEsercizio/diario", diario, formato);
|
||||||
|
}
|
||||||
|
}
|
84
src/it/unibs/fp/patenteelibbrettopregoh/PaginaDiario.java
Normal file
84
src/it/unibs/fp/patenteelibbrettopregoh/PaginaDiario.java
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
package it.unibs.fp.patenteelibbrettopregoh;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
// import java.time.LocalDate;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* La classe PaginaDiario rappresenta una pagina del diario di un personaggio.
|
||||||
|
* Ogni pagina contiene la data, il bilancio e una lista di persone controllate.
|
||||||
|
*/
|
||||||
|
public class PaginaDiario {
|
||||||
|
private final String data; // per nevitare problemi con Gson e la serializzazione di LocalDate
|
||||||
|
private final double bilancio;
|
||||||
|
@SerializedName("persone")
|
||||||
|
private final ArrayList<PersonaControllata> personeControllate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Costruttore della classe PaginaDiario.
|
||||||
|
*
|
||||||
|
* @param data la data della pagina
|
||||||
|
* @param bilancio il bilancio della pagina
|
||||||
|
*/
|
||||||
|
public PaginaDiario(String data, double bilancio) {
|
||||||
|
this.data = data;
|
||||||
|
this.bilancio = bilancio;
|
||||||
|
this.personeControllate = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il giorno.
|
||||||
|
*
|
||||||
|
* @return il giorno della data
|
||||||
|
*/
|
||||||
|
public int getGiorno() {
|
||||||
|
return Integer.parseInt(data.split("-")[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce la data.
|
||||||
|
*
|
||||||
|
* @return la data
|
||||||
|
*/
|
||||||
|
public String getData() {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il bilancio.
|
||||||
|
*
|
||||||
|
* @return il bilancio
|
||||||
|
*/
|
||||||
|
public double getBilancio() {
|
||||||
|
return bilancio;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce la lista di persone controllate.
|
||||||
|
*
|
||||||
|
* @return la lista di persone controllate
|
||||||
|
*/
|
||||||
|
public ArrayList<PersonaControllata> getPersoneControllate() {
|
||||||
|
return personeControllate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* aggiunge una persona controllata alla pagina del diario.
|
||||||
|
*
|
||||||
|
* @param persona la persona da aggiungere
|
||||||
|
*/
|
||||||
|
public void addPersonaControllata(PersonaControllata persona) {
|
||||||
|
this.personeControllate.add(persona);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* rimuove una persona controllata dalla pagina del diario.
|
||||||
|
*
|
||||||
|
* @param persona la persona da rimuovere
|
||||||
|
*/
|
||||||
|
public void removePersonaControllata(PersonaControllata persona) {
|
||||||
|
this.personeControllate.remove(persona);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
342
src/it/unibs/fp/patenteelibbrettopregoh/Parser.java
Normal file
342
src/it/unibs/fp/patenteelibbrettopregoh/Parser.java
Normal file
|
@ -0,0 +1,342 @@
|
||||||
|
package it.unibs.fp.patenteelibbrettopregoh;
|
||||||
|
|
||||||
|
import javax.xml.stream.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.JsonIOException;
|
||||||
|
import com.google.gson.JsonSyntaxException;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
|
||||||
|
import java.io.FileWriter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parser.java
|
||||||
|
* Questa classe è responsabile della lettura e scrittura dei dati di gioco in formato JSON e XML.
|
||||||
|
* Utilizza la libreria Gson per la serializzazione e deserializzazione dei dati.
|
||||||
|
*/
|
||||||
|
public class Parser {
|
||||||
|
/**
|
||||||
|
* Metodo per il parsing delle persone da un file JSON o XML.
|
||||||
|
*
|
||||||
|
* @param formato il formato del file (JSON o XML)
|
||||||
|
* @param fileName il nome del file senza estensione
|
||||||
|
* @return una lista di oggetti Persona
|
||||||
|
*/
|
||||||
|
public static ArrayList<Persona> parsePersone(Formato formato, String fileName) {
|
||||||
|
ArrayList<Persona> persone = new ArrayList<>();
|
||||||
|
if (formato == Formato.XML) {
|
||||||
|
parsePersoneXML(fileName, persone);
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
persone = parsePersoneJSON(fileName, persone);
|
||||||
|
|
||||||
|
}
|
||||||
|
return persone;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo per il parsing delle persone da un file JSON.
|
||||||
|
*
|
||||||
|
* @param fileName il nome del file senza estensione
|
||||||
|
* @param persone la lista di persone da riempire
|
||||||
|
* @return la lista di persone
|
||||||
|
*/
|
||||||
|
private static ArrayList<Persona> parsePersoneJSON(String fileName, ArrayList<Persona> persone) {
|
||||||
|
fileName = fileName + ".json";
|
||||||
|
try (FileReader reader = new FileReader(fileName)) {
|
||||||
|
Gson gson = new Gson();
|
||||||
|
Type listType = new TypeToken<ArrayList<Persona>>(){}.getType();
|
||||||
|
persone = gson.fromJson(reader, listType);
|
||||||
|
} catch (JsonIOException | JsonSyntaxException | IOException e) {
|
||||||
|
System.out.println("Error reading the JSON file: " + e.getMessage());
|
||||||
|
}
|
||||||
|
return persone;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo per il parsing delle persone da un file XML.
|
||||||
|
*
|
||||||
|
* @param fileName il nome del file senza estensione
|
||||||
|
* @param persone la lista di persone da riempire
|
||||||
|
*/
|
||||||
|
private static void parsePersoneXML(String fileName, ArrayList<Persona> persone) {
|
||||||
|
fileName = fileName + ".xml";
|
||||||
|
XMLInputFactory xmlif;
|
||||||
|
XMLStreamReader xmlr;
|
||||||
|
String currentElement = null;
|
||||||
|
String nome = null;
|
||||||
|
String cognome = null;
|
||||||
|
String sesso = null;
|
||||||
|
String dataNascita = null;
|
||||||
|
String comuneNascita = null;
|
||||||
|
String codiceFiscale = null;
|
||||||
|
String scadenzaDocumento = 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(); // <- sposta qui, nel posto giusto
|
||||||
|
break;
|
||||||
|
case XMLStreamConstants.CHARACTERS:
|
||||||
|
String text = xmlr.getText().trim();
|
||||||
|
if (!text.isEmpty() && currentElement != null) {
|
||||||
|
switch (currentElement) {
|
||||||
|
case "nome" -> nome = text;
|
||||||
|
case "cognome" -> cognome = text;
|
||||||
|
case "sesso" -> sesso = text;
|
||||||
|
case "data_nascita" -> dataNascita = text;
|
||||||
|
case "comune_nascita" -> comuneNascita = text;
|
||||||
|
case "codice_fiscale" -> codiceFiscale = text;
|
||||||
|
case "scadenza_documento" -> scadenzaDocumento = text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case XMLStreamConstants.END_ELEMENT:
|
||||||
|
String endTag = xmlr.getLocalName();
|
||||||
|
if (endTag.equals("persona")) {
|
||||||
|
Persona persona = new Persona(nome, cognome, sesso, dataNascita, comuneNascita, codiceFiscale, scadenzaDocumento);
|
||||||
|
persone.add(persona);
|
||||||
|
}
|
||||||
|
currentElement = null; // reset solo alla fine di un elemento
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
xmlr.next(); // importante: avanza solo una volta per ciclo
|
||||||
|
}
|
||||||
|
xmlr.close();
|
||||||
|
} catch (FactoryConfigurationError | XMLStreamException | IOException e) {
|
||||||
|
System.out.println("Error reading the file: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo per il parsing dei comuni da un file JSON o XML.
|
||||||
|
*
|
||||||
|
* @param formato il formato del file (JSON o XML)
|
||||||
|
* @param fileName il nome del file senza estensione
|
||||||
|
* @return un oggetto Comuni contenente la lista di comuni
|
||||||
|
*/
|
||||||
|
public static Comuni parseComuni(Formato formato, String fileName) {
|
||||||
|
Comuni comuni = new Comuni();
|
||||||
|
if (formato == Formato.XML) {
|
||||||
|
parseComuniXML(fileName, comuni);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
comuni = parseComuniJSON(fileName, comuni);
|
||||||
|
}
|
||||||
|
|
||||||
|
return comuni;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo per il parsing dei comuni da un file JSON.
|
||||||
|
*
|
||||||
|
* @param fileName il nome del file senza estensione
|
||||||
|
* @param comuni l'oggetto Comuni da riempire
|
||||||
|
* @return l'oggetto Comuni
|
||||||
|
*/
|
||||||
|
private static Comuni parseComuniJSON(String fileName, Comuni comuni) {
|
||||||
|
fileName = fileName + ".json";
|
||||||
|
try (FileReader reader = new FileReader(fileName)) {
|
||||||
|
Gson gson = new Gson();
|
||||||
|
Type listType = new TypeToken<ArrayList<Comune>>() {}.getType();
|
||||||
|
ArrayList<Comune> listaComuni = gson.fromJson(reader, listType);
|
||||||
|
|
||||||
|
comuni = new Comuni();
|
||||||
|
for (Comune comune : listaComuni) {
|
||||||
|
comuni.addComune(comune);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (JsonIOException | JsonSyntaxException | IOException e) {
|
||||||
|
System.out.println("Error reading the JSON file: " + e.getMessage());
|
||||||
|
}
|
||||||
|
return comuni;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo per il parsing dei comuni da un file XML.
|
||||||
|
*
|
||||||
|
* @param fileName il nome del file senza estensione
|
||||||
|
* @param comuni l'oggetto Comuni da riempire
|
||||||
|
*/
|
||||||
|
private static void parseComuniXML(String fileName, Comuni comuni) {
|
||||||
|
fileName = fileName + ".xml";
|
||||||
|
XMLInputFactory xmlif;
|
||||||
|
XMLStreamReader xmlr;
|
||||||
|
String currentElement = null;
|
||||||
|
String nome = null;
|
||||||
|
String codice = 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();
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
case XMLStreamConstants.CHARACTERS:
|
||||||
|
String text = xmlr.getText().trim();
|
||||||
|
if (!text.isEmpty() && currentElement != null) {
|
||||||
|
if (currentElement.equals("nome")) {
|
||||||
|
nome = text;
|
||||||
|
} else if (currentElement.equals("codice")) {
|
||||||
|
codice = text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case XMLStreamConstants.END_ELEMENT:
|
||||||
|
String endTag = xmlr.getLocalName();
|
||||||
|
if (endTag.equals("comune")) {
|
||||||
|
Comune comune = new Comune(nome, codice);
|
||||||
|
comuni.addComune(comune);
|
||||||
|
|
||||||
|
nome = null;
|
||||||
|
codice = null;
|
||||||
|
}
|
||||||
|
currentElement = null;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
xmlr.next();
|
||||||
|
}
|
||||||
|
|
||||||
|
xmlr.close();
|
||||||
|
} catch (FactoryConfigurationError | XMLStreamException | IOException e) {
|
||||||
|
System.out.println("Error reading the file: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo per il salvataggio del diario in formato JSON o XML.
|
||||||
|
*
|
||||||
|
* @param fileName il nome del file senza estensione
|
||||||
|
* @param pagineDiario la lista di pagine del diario
|
||||||
|
* @param formato il formato del file (JSON o XML)
|
||||||
|
*/
|
||||||
|
public static void saveDiario (String fileName, ArrayList<PaginaDiario> pagineDiario, Formato formato) {
|
||||||
|
if (formato == Formato.XML) {
|
||||||
|
salvaDiarioXML(fileName, pagineDiario);
|
||||||
|
|
||||||
|
} else if (formato == Formato.JSON) {
|
||||||
|
salvaDiarioJSON(fileName, pagineDiario);
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("Diario salvato nella cartella corrente con nome: " + fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo per il salvataggio del diario in formato JSON.
|
||||||
|
*
|
||||||
|
* @param fileName il nome del file senza estensione
|
||||||
|
* @param pagineDiario la lista di pagine del diario
|
||||||
|
*/
|
||||||
|
private static void salvaDiarioJSON(String fileName, ArrayList<PaginaDiario> pagineDiario) {
|
||||||
|
fileName = fileName + ".json";
|
||||||
|
Gson gson = new Gson();
|
||||||
|
try (FileWriter writer = new FileWriter(fileName)) {
|
||||||
|
gson.toJson(pagineDiario, writer);
|
||||||
|
} catch (JsonIOException | IOException e) {
|
||||||
|
System.out.println("Error in initializing the writer:");
|
||||||
|
System.out.println(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo per il salvataggio del diario in formato XML.
|
||||||
|
*
|
||||||
|
* @param fileName il nome del file senza estensione
|
||||||
|
* @param pagineDiario la lista di pagine del diario
|
||||||
|
*/
|
||||||
|
private static void salvaDiarioXML(String fileName, ArrayList<PaginaDiario> pagineDiario) {
|
||||||
|
fileName = fileName + ".xml";
|
||||||
|
try (FileOutputStream outputStream = new FileOutputStream(fileName)) {
|
||||||
|
XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
|
||||||
|
XMLStreamWriter xmlWriter = xmlOutputFactory.createXMLStreamWriter(outputStream, "UTF-8");
|
||||||
|
|
||||||
|
xmlWriter.writeStartDocument("UTF-8", "1.0");
|
||||||
|
xmlWriter.writeStartElement("diario");
|
||||||
|
|
||||||
|
for (PaginaDiario pagina : pagineDiario) {
|
||||||
|
xmlWriter.writeStartElement("giornata");
|
||||||
|
xmlWriter.writeAttribute("numero", String.valueOf(pagina.getGiorno()));
|
||||||
|
|
||||||
|
xmlWriter.writeStartElement("data");
|
||||||
|
xmlWriter.writeCharacters(pagina.getData());
|
||||||
|
xmlWriter.writeEndElement();
|
||||||
|
|
||||||
|
xmlWriter.writeStartElement("bilancio");
|
||||||
|
xmlWriter.writeCharacters(String.valueOf(pagina.getBilancio()));
|
||||||
|
xmlWriter.writeEndElement();
|
||||||
|
|
||||||
|
xmlWriter.writeStartElement("persone");
|
||||||
|
xmlWriter.writeAttribute("numero", String.valueOf(pagina.getPersoneControllate().size()));
|
||||||
|
|
||||||
|
for (int i = 0; i < pagina.getPersoneControllate().size(); i++) {
|
||||||
|
PersonaControllata persona = pagina.getPersoneControllate().get(i);
|
||||||
|
|
||||||
|
xmlWriter.writeStartElement("persona");
|
||||||
|
xmlWriter.writeAttribute("id", String.valueOf(i + 1));
|
||||||
|
|
||||||
|
xmlWriter.writeStartElement("nome");
|
||||||
|
xmlWriter.writeCharacters(persona.getNome());
|
||||||
|
xmlWriter.writeEndElement();
|
||||||
|
|
||||||
|
xmlWriter.writeStartElement("cognome");
|
||||||
|
xmlWriter.writeCharacters(persona.getCognome());
|
||||||
|
xmlWriter.writeEndElement();
|
||||||
|
|
||||||
|
xmlWriter.writeStartElement("sesso");
|
||||||
|
xmlWriter.writeCharacters(persona.getSesso());
|
||||||
|
xmlWriter.writeEndElement();
|
||||||
|
|
||||||
|
xmlWriter.writeStartElement("data_nascita");
|
||||||
|
xmlWriter.writeCharacters(persona.getDataNascita());
|
||||||
|
xmlWriter.writeEndElement();
|
||||||
|
|
||||||
|
xmlWriter.writeStartElement("comune_nascita");
|
||||||
|
xmlWriter.writeCharacters(persona.getComuneNascita());
|
||||||
|
xmlWriter.writeEndElement();
|
||||||
|
|
||||||
|
xmlWriter.writeStartElement("codice_fiscale");
|
||||||
|
xmlWriter.writeCharacters(persona.getCodiceFiscale());
|
||||||
|
xmlWriter.writeEndElement();
|
||||||
|
|
||||||
|
xmlWriter.writeStartElement("data_scadenza_id");
|
||||||
|
xmlWriter.writeCharacters(persona.getScadenzaDocumento());
|
||||||
|
xmlWriter.writeEndElement();
|
||||||
|
|
||||||
|
xmlWriter.writeStartElement("stato_transito");
|
||||||
|
xmlWriter.writeCharacters(persona.getStatoTransito());
|
||||||
|
xmlWriter.writeEndElement();
|
||||||
|
|
||||||
|
xmlWriter.writeEndElement(); // persona
|
||||||
|
}
|
||||||
|
|
||||||
|
xmlWriter.writeEndElement(); // persone
|
||||||
|
xmlWriter.writeEndElement(); // giornata
|
||||||
|
}
|
||||||
|
|
||||||
|
xmlWriter.writeEndElement(); // diario
|
||||||
|
xmlWriter.writeEndDocument();
|
||||||
|
xmlWriter.flush();
|
||||||
|
} catch (XMLStreamException | IOException e) {
|
||||||
|
System.out.println("Error writing the file: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,268 @@
|
||||||
|
package it.unibs.fp.patenteelibbrettopregoh;
|
||||||
|
|
||||||
|
import it.kibo.fp.lib.InputData;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PatenteELibbrettoPregohMain.java
|
||||||
|
* Questa classe rappresenta il punto di ingresso del gioco "Patente e Libretto Pregoh".
|
||||||
|
* Inizializza il gioco, gestisce il ciclo di gioco e termina il gioco.
|
||||||
|
*/
|
||||||
|
public class PatenteELibbrettoPregohMain {
|
||||||
|
/**
|
||||||
|
* Metodo principale che avvia il gioco.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
System.out.println("PatenteELibbrettoPregoh!");
|
||||||
|
|
||||||
|
Formato formato = getFormato();
|
||||||
|
GameData gameData = new GameData(formato);
|
||||||
|
gameLoop(gameData);
|
||||||
|
endGame(gameData);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo che gestisce il ciclo di gioco.
|
||||||
|
*
|
||||||
|
* @param gameData i dati di gioco
|
||||||
|
*/
|
||||||
|
private static void gameLoop(GameData gameData) {
|
||||||
|
while (gameData.getStatoGioco() == StatoGioco.IN_CORSO) {
|
||||||
|
int personeChePassano = ((int)(Math.random() * 5) + 3);
|
||||||
|
System.out.println("\nIl giorno " + gameData.getData() + " passeranno " + personeChePassano + " persone\nIl tuo saldo è di: " + gameData.getSaldo() + "§\n");
|
||||||
|
ArrayList<PersonaControllata> personeControllate = new ArrayList<>();
|
||||||
|
for (int i = 0; i < personeChePassano; i++) {
|
||||||
|
|
||||||
|
if (gameData.getStatoGioco() == StatoGioco.IN_CORSO) {
|
||||||
|
System.out.println("\nPassa la persona " + (i + 1) + " di " + personeChePassano + "\n");
|
||||||
|
gestisciPersona(gameData, personeControllate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gameData.incrementaGiorno(personeControllate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo che gestisce una persona controllata.
|
||||||
|
*
|
||||||
|
* @param gameData i dati di gioco
|
||||||
|
* @param personeControllate la lista delle persone controllate
|
||||||
|
*/
|
||||||
|
private static void gestisciPersona(GameData gameData, ArrayList<PersonaControllata> personeControllate) {
|
||||||
|
Persona personaDaControllare = gameData.getPersonaDaControlare();
|
||||||
|
boolean esito = controllaPersona(personaDaControllare, gameData.getComuni(), gameData);
|
||||||
|
boolean accettata = InputData.readYesOrNo("Si presenta\n" + personaDaControllare + "\nC.F. calcolato: " + personaDaControllare.calcolaCodiceFiscale(gameData.getComuni()) + "\nAccettare");
|
||||||
|
if (accettata) {
|
||||||
|
if (esito){
|
||||||
|
datiCorrettiAccettati(personaDaControllare, personeControllate);
|
||||||
|
} else {
|
||||||
|
datiSbagliatiAccettati(personaDaControllare, personeControllate, gameData);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (esito) {
|
||||||
|
datiCorrettiRifiutati(personaDaControllare, personeControllate, gameData);
|
||||||
|
} else {
|
||||||
|
datiSbagliatiRifiutati(personaDaControllare, gameData, personeControllate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo che gestisce i dati errati rifiutati.
|
||||||
|
*
|
||||||
|
* @param personaDaControllare la persona da controllare
|
||||||
|
* @param gameData i dati di gioco
|
||||||
|
* @param personeControllate la lista delle persone controllate
|
||||||
|
*/
|
||||||
|
private static void datiSbagliatiRifiutati(Persona personaDaControllare, GameData gameData, ArrayList<PersonaControllata> personeControllate) {
|
||||||
|
System.out.println("La persona aveva i dati errati");
|
||||||
|
PersonaControllata personaControllata;
|
||||||
|
|
||||||
|
if (Math.random() < 0.4){
|
||||||
|
gestisciMazzetta(personaDaControllare, gameData, personeControllate);
|
||||||
|
} else {
|
||||||
|
personaRifiutata(personaDaControllare, personeControllate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo che gestisce la persona rifiutata.
|
||||||
|
*
|
||||||
|
* @param personaDaControllare la persona da controllare
|
||||||
|
* @param personeControllate la lista delle persone controllate
|
||||||
|
*/
|
||||||
|
private static void personaRifiutata(Persona personaDaControllare, ArrayList<PersonaControllata> personeControllate) {
|
||||||
|
PersonaControllata personaControllata;
|
||||||
|
personaControllata = new PersonaControllata(personaDaControllare, false, TipoPersonaControllata.PERSONA_NORMALE);
|
||||||
|
personeControllate.add(personaControllata);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo che gestisce la mazzetta.
|
||||||
|
*
|
||||||
|
* @param personaDaControllare la persona da controllare
|
||||||
|
* @param gameData i dati di gioco
|
||||||
|
* @param personeControllate la lista delle persone controllate
|
||||||
|
*/
|
||||||
|
private static void gestisciMazzetta(Persona personaDaControllare, GameData gameData, ArrayList<PersonaControllata> personeControllate) {
|
||||||
|
PersonaControllata personaControllata;
|
||||||
|
int mazzetta = ((int)((Math.random() * 251))) + 250;
|
||||||
|
System.out.println(personaDaControllare.getNome() + " " + personaDaControllare.getCognome() + " prova a corromperti con " + mazzetta + "§");
|
||||||
|
boolean accettataMazzetta = InputData.readYesOrNo("Accettare la mazzetta");
|
||||||
|
if (accettataMazzetta){
|
||||||
|
gameData.addSaldo(mazzetta);
|
||||||
|
if (Math.random() < 0.7){
|
||||||
|
mazzettaRivoluzionario(personaDaControllare, gameData, personeControllate);
|
||||||
|
} else {
|
||||||
|
mazzettaPoliziotto(personaDaControllare, gameData, personeControllate);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
mazzettaRifiutata(personaDaControllare, personeControllate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo che gestisce la mazzetta rifiutata.
|
||||||
|
*
|
||||||
|
* @param personaDaControllare la persona da controllare
|
||||||
|
* @param personeControllate la lista delle persone controllate
|
||||||
|
*/
|
||||||
|
private static void mazzettaRifiutata(Persona personaDaControllare, ArrayList<PersonaControllata> personeControllate) {
|
||||||
|
PersonaControllata personaControllata;
|
||||||
|
personaControllata = new PersonaControllata(personaDaControllare, false, TipoPersonaControllata.PERSONA_NORMALE);
|
||||||
|
personeControllate.add(personaControllata);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo che gestisce la mazzetta di un poliziotto.
|
||||||
|
*
|
||||||
|
* @param personaDaControllare la persona da controllare
|
||||||
|
* @param gameData i dati di gioco
|
||||||
|
* @param personeControllate la lista delle persone controllate
|
||||||
|
*/
|
||||||
|
private static void mazzettaPoliziotto(Persona personaDaControllare, GameData gameData, ArrayList<PersonaControllata> personeControllate) {
|
||||||
|
PersonaControllata personaControllata;
|
||||||
|
System.out.println("Hai accettato la mazzetta ... era un poliziotto");
|
||||||
|
gameData.incrementaMazzetteAccettatePolizia();
|
||||||
|
gameData.pagaMulta(gameData.getSaldo() * 0.6);
|
||||||
|
personaControllata = new PersonaControllata(personaDaControllare, true, TipoPersonaControllata.POLIZIOTTO);
|
||||||
|
personeControllate.add(personaControllata);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo che gestisce la mazzetta di un rivoluzionario.
|
||||||
|
*
|
||||||
|
* @param personaDaControllare la persona da controllare
|
||||||
|
* @param gameData i dati di gioco
|
||||||
|
* @param personeControllate la lista delle persone controllate
|
||||||
|
*/
|
||||||
|
private static void mazzettaRivoluzionario(Persona personaDaControllare, GameData gameData, ArrayList<PersonaControllata> personeControllate) {
|
||||||
|
PersonaControllata personaControllata;
|
||||||
|
System.out.println("Hai accettato la mazzetta, ti è andata bene ... era un rivoluzionario");
|
||||||
|
gameData.incrementaRivoluzionariAccettati();
|
||||||
|
personaControllata = new PersonaControllata(personaDaControllare, true, TipoPersonaControllata.RIVOLUZIONARIO);
|
||||||
|
personeControllate.add(personaControllata);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo che gestisce i dati corretti rifiutati.
|
||||||
|
*
|
||||||
|
* @param personaDaControllare la persona da controllare
|
||||||
|
* @param personeControllate la lista delle persone controllate
|
||||||
|
* @param gameData i dati di gioco
|
||||||
|
*/
|
||||||
|
private static void datiCorrettiRifiutati(Persona personaDaControllare, ArrayList<PersonaControllata> personeControllate, GameData gameData) {
|
||||||
|
System.out.println("La persona aveva i dati corretti ... come sei salato");
|
||||||
|
PersonaControllata personaControllata = new PersonaControllata(personaDaControllare, false, TipoPersonaControllata.PERSONA_NORMALE);
|
||||||
|
personeControllate.add(personaControllata);
|
||||||
|
if (Math.random() < 0.5){
|
||||||
|
System.out.println("Sei stato fortunato, non hai presso la multa");
|
||||||
|
} else {
|
||||||
|
System.out.println("Hai preso una multa da 150§");
|
||||||
|
gameData.pagaMulta(150);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo che gestisce i dati errati accettati.
|
||||||
|
*
|
||||||
|
* @param personaDaControllare la persona da controllare
|
||||||
|
* @param personeControllate la lista delle persone controllate
|
||||||
|
* @param gameData i dati di gioco
|
||||||
|
*/
|
||||||
|
private static void datiSbagliatiAccettati(Persona personaDaControllare, ArrayList<PersonaControllata> personeControllate, GameData gameData) {
|
||||||
|
System.out.println("La persona aveva i dati errati");
|
||||||
|
PersonaControllata personaControllata = new PersonaControllata(personaDaControllare, true, TipoPersonaControllata.PERSONA_NORMALE);
|
||||||
|
personeControllate.add(personaControllata);
|
||||||
|
if (Math.random() < 0.5){
|
||||||
|
System.out.println("Sei stato fortunato, non hai presso la multa");
|
||||||
|
} else {
|
||||||
|
System.out.println("Hai preso una multa da 300§");
|
||||||
|
gameData.pagaMulta(300);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo che gestisce i dati corretti accettati.
|
||||||
|
*
|
||||||
|
* @param personaDaControllare la persona da controllare
|
||||||
|
* @param personeControllate la lista delle persone controllate
|
||||||
|
*/
|
||||||
|
private static void datiCorrettiAccettati(Persona personaDaControllare, ArrayList<PersonaControllata> personeControllate) {
|
||||||
|
System.out.println("La persona aveva i dati corretti");
|
||||||
|
PersonaControllata personaControllata = new PersonaControllata(personaDaControllare, true, TipoPersonaControllata.PERSONA_NORMALE);
|
||||||
|
personeControllate.add(personaControllata);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo che termina il gioco e mostra il risultato finale.
|
||||||
|
*
|
||||||
|
* @param gameData i dati di gioco
|
||||||
|
*/
|
||||||
|
private static void endGame(GameData gameData) {
|
||||||
|
gameData.saveDiario();
|
||||||
|
|
||||||
|
switch (gameData.getStatoGioco()){
|
||||||
|
case ARRESTATO -> System.out.println("Sei stato arrestato");
|
||||||
|
case GIUSTIZIATO -> System.out.println("Sei stato giustiziato");
|
||||||
|
case RIVOLUZIONE -> System.out.println("Hai vinto la rivoluzione");
|
||||||
|
case DODICESIMO_GIORNO -> System.out.println("Hai vinto, sei sopravvissuto 12 giorni");
|
||||||
|
case NON_ABBASTANZA_SOLDI -> System.out.println("Non hai abbastanza soldi");
|
||||||
|
default -> System.out.println("Hai perso");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo che controlla se una persona ha i dati corretti.
|
||||||
|
*
|
||||||
|
* @param persona la persona da controllare
|
||||||
|
* @param comuni la lista dei comuni
|
||||||
|
* @param gameData i dati di gioco
|
||||||
|
* @return true se la persona ha i dati corretti, false altrimenti
|
||||||
|
*/
|
||||||
|
private static boolean controllaPersona(Persona persona, Comuni comuni, GameData gameData) {
|
||||||
|
return persona.isCodiceFiscaleValido(comuni) && persona.isDocumentoValido(gameData.getData());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo che chiede all'utente di scegliere il formato di salvataggio.
|
||||||
|
*
|
||||||
|
* @return il formato scelto
|
||||||
|
*/
|
||||||
|
private static Formato getFormato() {
|
||||||
|
Formato formato = null;
|
||||||
|
|
||||||
|
int sceltaFormato = InputData.readIntegerBetween("Inserisci il formato (0: JSON, 1: XML): ", 0, 1);
|
||||||
|
if (sceltaFormato == 0) {
|
||||||
|
System.out.println("Hai scelto il formato JSON");
|
||||||
|
formato = Formato.JSON;
|
||||||
|
} else {
|
||||||
|
System.out.println("Hai scelto il formato XML");
|
||||||
|
formato = Formato.XML;
|
||||||
|
}
|
||||||
|
return formato;
|
||||||
|
}
|
||||||
|
}
|
362
src/it/unibs/fp/patenteelibbrettopregoh/Persona.java
Normal file
362
src/it/unibs/fp/patenteelibbrettopregoh/Persona.java
Normal file
|
@ -0,0 +1,362 @@
|
||||||
|
package it.unibs.fp.patenteelibbrettopregoh;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Classe che rappresenta una persona con i suoi dati anagrafici e il codice fiscale.
|
||||||
|
* La classe fornisce metodi per calcolare il codice fiscale e verificarne la validità.
|
||||||
|
*/
|
||||||
|
public class Persona {
|
||||||
|
private final String nome;
|
||||||
|
private final String cognome;
|
||||||
|
private final String sesso;
|
||||||
|
@SerializedName("data_nascita") // Per la serializzazione/deserializzazione JSON
|
||||||
|
private final String dataNascita;
|
||||||
|
|
||||||
|
@SerializedName("comune_nascita") // Per la serializzazione/deserializzazione JSON
|
||||||
|
private final String comuneNascita;
|
||||||
|
|
||||||
|
@SerializedName("codice_fiscale") // Per la serializzazione/deserializzazione JSON
|
||||||
|
private final String codiceFiscale;
|
||||||
|
|
||||||
|
@SerializedName("scadenza_documento") // Per la serializzazione/deserializzazione JSON
|
||||||
|
private final String scadenzaDocumento;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Costruttore della classe Persona.
|
||||||
|
*
|
||||||
|
* @param nome Nome della persona.
|
||||||
|
* @param cognome Cognome della persona.
|
||||||
|
* @param sesso Sesso
|
||||||
|
* @param dataNascita Data di nascita in formato "YYYY-MM-DD".
|
||||||
|
* @param comuneNascita Comune di nascita.
|
||||||
|
* @param codiceFiscale Codice fiscale.
|
||||||
|
* @param scadenzaDocumento Data di scadenza del documento in formato "YYYY-MM-DD".
|
||||||
|
*/
|
||||||
|
public Persona(String nome, String cognome, String sesso, String dataNascita, String comuneNascita, String codiceFiscale, String scadenzaDocumento) {
|
||||||
|
this.nome = nome;
|
||||||
|
this.cognome = cognome;
|
||||||
|
this.sesso = sesso;
|
||||||
|
this.dataNascita = dataNascita;
|
||||||
|
this.comuneNascita = comuneNascita;
|
||||||
|
this.codiceFiscale = codiceFiscale;
|
||||||
|
this.scadenzaDocumento = scadenzaDocumento;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il nome della persona.
|
||||||
|
*
|
||||||
|
* @return Nome della persona.
|
||||||
|
*/
|
||||||
|
public String getNome() {
|
||||||
|
return nome;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il cognome della persona.
|
||||||
|
*
|
||||||
|
* @return Cognome della persona.
|
||||||
|
*/
|
||||||
|
public String getCognome() {
|
||||||
|
return cognome;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il sesso della persona.
|
||||||
|
*
|
||||||
|
* @return Sesso della persona.
|
||||||
|
*/
|
||||||
|
public String getSesso() {
|
||||||
|
return sesso;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce la data di nascita della persona.
|
||||||
|
*
|
||||||
|
* @return Data di nascita della persona in formato "YYYY-MM-DD".
|
||||||
|
*/
|
||||||
|
public String getDataNascita() {
|
||||||
|
return dataNascita;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il comune di nascita della persona.
|
||||||
|
*
|
||||||
|
* @return Comune di nascita della persona.
|
||||||
|
*/
|
||||||
|
public String getComuneNascita() {
|
||||||
|
return comuneNascita;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il codice fiscale della persona.
|
||||||
|
*
|
||||||
|
* @return Codice fiscale della persona.
|
||||||
|
*/
|
||||||
|
public String getCodiceFiscale() {
|
||||||
|
return codiceFiscale;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce la data di scadenza del documento della persona.
|
||||||
|
*
|
||||||
|
* @return Data di scadenza del documento in formato "YYYY-MM-DD".
|
||||||
|
*/
|
||||||
|
public String getScadenzaDocumento() {
|
||||||
|
return scadenzaDocumento;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verifica se il codice fiscale fornito è valido confrontandolo con quello calcolato.
|
||||||
|
*
|
||||||
|
* @param comuni Oggetto Comuni per ottenere il codice del comune di nascita.
|
||||||
|
* @return true se il codice fiscale è valido, false altrimenti.
|
||||||
|
*/
|
||||||
|
public boolean isCodiceFiscaleValido(Comuni comuni) {
|
||||||
|
return codiceFiscale.equals(calcolaCodiceFiscale(comuni));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calcola il codice fiscale della persona in base ai suoi dati anagrafici.
|
||||||
|
*
|
||||||
|
* @param comuni Oggetto Comuni per ottenere il codice del comune di nascita.
|
||||||
|
* @return Il codice fiscale calcolato.
|
||||||
|
*/
|
||||||
|
public String calcolaCodiceFiscale(Comuni comuni) {
|
||||||
|
ArrayList<String> consonantiCognome = getCaratteri(cognome, true);
|
||||||
|
ArrayList<String> consonantiNome = getCaratteri(nome, true);
|
||||||
|
StringBuilder codiceFiscaleCalcolato = new StringBuilder();
|
||||||
|
|
||||||
|
int stillMissing = 3 - consonantiCognome.size();
|
||||||
|
if (stillMissing <= 0) {
|
||||||
|
for (int i = 0; i < 3; i++) {
|
||||||
|
codiceFiscaleCalcolato.append(consonantiCognome.get(i));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ArrayList<String> vocaliCognome = getCaratteri(cognome, false);
|
||||||
|
for (String consonante : consonantiCognome) {
|
||||||
|
codiceFiscaleCalcolato.append(consonante);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < stillMissing; i++) {
|
||||||
|
if (i < vocaliCognome.size()) {
|
||||||
|
codiceFiscaleCalcolato.append(vocaliCognome.get(i));
|
||||||
|
} else {
|
||||||
|
codiceFiscaleCalcolato.append("X");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (consonantiNome.size() > 3){
|
||||||
|
codiceFiscaleCalcolato.append(consonantiNome.get(0));
|
||||||
|
codiceFiscaleCalcolato.append(consonantiNome.get(2));
|
||||||
|
codiceFiscaleCalcolato.append(consonantiNome.get(3));
|
||||||
|
} else if (consonantiNome.size() == 3){
|
||||||
|
for (String consonante : consonantiNome) {
|
||||||
|
codiceFiscaleCalcolato.append(consonante);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
stillMissing = 3 - consonantiNome.size();
|
||||||
|
ArrayList<String> vocaliNome = getCaratteri(nome, false);
|
||||||
|
for (String consonante : consonantiNome) {
|
||||||
|
codiceFiscaleCalcolato.append(consonante);
|
||||||
|
}
|
||||||
|
if (vocaliNome.size() >= stillMissing){
|
||||||
|
for (int i = 0; i < stillMissing; i++) {
|
||||||
|
codiceFiscaleCalcolato.append(vocaliNome.get(i));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
stillMissing = stillMissing - vocaliNome.size();
|
||||||
|
for (String vocali : vocaliNome) {
|
||||||
|
codiceFiscaleCalcolato.append(vocali);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < stillMissing; i++) {
|
||||||
|
codiceFiscaleCalcolato.append("X");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
codiceFiscaleCalcolato.append(dataNascita, 2, 4);
|
||||||
|
;
|
||||||
|
int mese = Integer.parseInt(dataNascita.substring(5, 7));
|
||||||
|
|
||||||
|
codiceFiscaleCalcolato.append(getLetteraMese(mese));
|
||||||
|
|
||||||
|
int giorno = Integer.parseInt(dataNascita.substring(8, 10));
|
||||||
|
|
||||||
|
if (sesso.equalsIgnoreCase("F")) {
|
||||||
|
giorno += 40;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (giorno < 10) {
|
||||||
|
codiceFiscaleCalcolato.append("0");
|
||||||
|
}
|
||||||
|
|
||||||
|
codiceFiscaleCalcolato.append(giorno);
|
||||||
|
|
||||||
|
String codiceComune = comuni.getCodiceComune(comuneNascita);
|
||||||
|
|
||||||
|
codiceFiscaleCalcolato.append(codiceComune);
|
||||||
|
|
||||||
|
Character carattereDiControllo;
|
||||||
|
|
||||||
|
int somma = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < codiceFiscaleCalcolato.length(); i++) {
|
||||||
|
char c = codiceFiscaleCalcolato.charAt(i);
|
||||||
|
somma += getValueOf(c, (i + 1)%2 == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int resto = somma % 26;
|
||||||
|
|
||||||
|
carattereDiControllo = (char) ('A' + resto);
|
||||||
|
|
||||||
|
codiceFiscaleCalcolato.append(carattereDiControllo);
|
||||||
|
|
||||||
|
|
||||||
|
return codiceFiscaleCalcolato.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il valore numerico associato a un carattere in base alla sua posizione.
|
||||||
|
*
|
||||||
|
* @param c Carattere da convertire.
|
||||||
|
* @param b Indica se il carattere è in una posizione pari o dispari.
|
||||||
|
* @return Valore numerico associato al carattere.
|
||||||
|
*/
|
||||||
|
private int getValueOf(char c, boolean b) {
|
||||||
|
if (!b) {
|
||||||
|
return switch (c) {
|
||||||
|
case '0', 'A' -> 1;
|
||||||
|
case '1', 'B' -> 0;
|
||||||
|
case '2', 'C' -> 5;
|
||||||
|
case '3', 'D' -> 7;
|
||||||
|
case '4', 'E' -> 9;
|
||||||
|
case '5', 'F' -> 13;
|
||||||
|
case '6', 'G' -> 15;
|
||||||
|
case '7', 'H' -> 17;
|
||||||
|
case '8', 'I' -> 19;
|
||||||
|
case '9', 'J' -> 21;
|
||||||
|
case 'K' -> 2;
|
||||||
|
case 'L' -> 4;
|
||||||
|
case 'M' -> 18;
|
||||||
|
case 'N' -> 20;
|
||||||
|
case 'O' -> 11;
|
||||||
|
case 'P' -> 3;
|
||||||
|
case 'Q' -> 6;
|
||||||
|
case 'R' -> 8;
|
||||||
|
case 'S' -> 12;
|
||||||
|
case 'T' -> 14;
|
||||||
|
case 'U' -> 16;
|
||||||
|
case 'V' -> 10;
|
||||||
|
case 'W' -> 22;
|
||||||
|
case 'X' -> 25;
|
||||||
|
case 'Y' -> 24;
|
||||||
|
case 'Z' -> 23;
|
||||||
|
default -> -1; // Invalid character
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return switch (c) {
|
||||||
|
case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' -> c - '0';
|
||||||
|
case 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' -> c - 'A';
|
||||||
|
default -> -1; // Invalid character
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce la lettera corrispondente al mese fornito.
|
||||||
|
*
|
||||||
|
* @param mese Mese in formato numerico (1-12).
|
||||||
|
* @return Lettera corrispondente al mese.
|
||||||
|
*/
|
||||||
|
private String getLetteraMese(int mese) {
|
||||||
|
return switch (mese) {
|
||||||
|
case 1 -> "A";
|
||||||
|
case 2 -> "B";
|
||||||
|
case 3 -> "C";
|
||||||
|
case 4 -> "D";
|
||||||
|
case 5 -> "E";
|
||||||
|
case 6 -> "H";
|
||||||
|
case 7 -> "L";
|
||||||
|
case 8 -> "M";
|
||||||
|
case 9 -> "P";
|
||||||
|
case 10 -> "R";
|
||||||
|
case 11 -> "S";
|
||||||
|
case 12 -> "T";
|
||||||
|
default -> "";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verifica se il documento della persona è valido in base alla data fornita.
|
||||||
|
*
|
||||||
|
* @param date Data da confrontare con la scadenza del documento.
|
||||||
|
* @return true se il documento è valido, false altrimenti.
|
||||||
|
*/
|
||||||
|
public boolean isDocumentoValido(LocalDate date) {
|
||||||
|
LocalDate scadenza = LocalDate.parse(scadenzaDocumento);
|
||||||
|
return date.isBefore(scadenza) || date.isEqual(scadenza);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verifica se il carattere fornito è una vocale.
|
||||||
|
*
|
||||||
|
* @param c Carattere da verificare.
|
||||||
|
* @return true se il carattere è una vocale, false altrimenti.
|
||||||
|
*/
|
||||||
|
private static boolean isVocale(char c) {
|
||||||
|
c = Character.toLowerCase(c);
|
||||||
|
return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verifica se il carattere fornito è una consonante.
|
||||||
|
*
|
||||||
|
* @param c Carattere da verificare.
|
||||||
|
* @return true se il carattere è una consonante, false altrimenti.
|
||||||
|
*/
|
||||||
|
public static boolean isConsonante(char c) {
|
||||||
|
return Character.isLetter(c) && !isVocale(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce un ArrayList di caratteri consonanti o vocali presenti nella stringa fornita.
|
||||||
|
*
|
||||||
|
* @param s Stringa da analizzare.
|
||||||
|
* @param tipo true per consonanti, false per vocali.
|
||||||
|
* @return ArrayList di caratteri consonanti o vocali.
|
||||||
|
*/
|
||||||
|
private ArrayList<String> getCaratteri(String s, boolean tipo){
|
||||||
|
ArrayList<String> ret = new ArrayList<>();
|
||||||
|
if (tipo){ // consonanti
|
||||||
|
for (char c : s.toCharArray()) {
|
||||||
|
if (isConsonante(c)) {
|
||||||
|
ret.add(String.valueOf(c).toUpperCase());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else { // vocali
|
||||||
|
for (char c : s.toCharArray()) {
|
||||||
|
if (isVocale(c)) {
|
||||||
|
ret.add(String.valueOf(c).toUpperCase());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce una rappresentazione testuale della persona.
|
||||||
|
*
|
||||||
|
* @return Stringa contenente i dati anagrafici e il codice fiscale della persona.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return nome + " " + cognome + " (" + sesso + ") nato il " + dataNascita + " a " + comuneNascita + " con C.F. " + codiceFiscale + ", validità documento " + scadenzaDocumento;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,71 @@
|
||||||
|
package it.unibs.fp.patenteelibbrettopregoh;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* La classe PersonaControllata estende la classe Persona e rappresenta una persona che è stata controllata.
|
||||||
|
* Contiene informazioni sul risultato del controllo e sul tipo di persona controllata.
|
||||||
|
*/
|
||||||
|
public class PersonaControllata extends Persona {
|
||||||
|
@SerializedName("approvato")
|
||||||
|
private final boolean esitoControllo;
|
||||||
|
private transient final TipoPersonaControllata tipoPersonaControllata;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Costruttore della classe PersonaControllata.
|
||||||
|
*
|
||||||
|
* @param persona L'oggetto Persona da cui estrarre le informazioni.
|
||||||
|
* @param esitoControllo Il risultato del controllo (true se approvato, false se rifiutato).
|
||||||
|
* @param tipoPersonaControllata Il tipo di persona controllata.
|
||||||
|
*/
|
||||||
|
public PersonaControllata(Persona persona, boolean esitoControllo, TipoPersonaControllata tipoPersonaControllata) {
|
||||||
|
super(persona.getNome(), persona.getCognome(), persona.getSesso(), persona.getDataNascita(), persona.getComuneNascita(), persona.getCodiceFiscale(), persona.getScadenzaDocumento());
|
||||||
|
this.esitoControllo = esitoControllo;
|
||||||
|
this.tipoPersonaControllata = tipoPersonaControllata;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il risultato del controllo.
|
||||||
|
*
|
||||||
|
* @return true se il controllo è positivo, false altrimenti.
|
||||||
|
*/
|
||||||
|
public boolean isEsitoControllo() {
|
||||||
|
return esitoControllo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il tipo di persona controllata.
|
||||||
|
*
|
||||||
|
* @return Il tipo di persona controllata.
|
||||||
|
*/
|
||||||
|
public TipoPersonaControllata getTipoPersonaControllata() {
|
||||||
|
return tipoPersonaControllata;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce lo stato del transito in base all'esito del controllo.
|
||||||
|
*
|
||||||
|
* @return "APPROVATO" se il controllo è positivo, "RIFIUTATO" altrimenti.
|
||||||
|
*/
|
||||||
|
public String getStatoTransito() {
|
||||||
|
return esitoControllo ? "APPROVATO" : "RIFIUTATO";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce una rappresentazione testuale della PersonaControllata.
|
||||||
|
*
|
||||||
|
* @return Una stringa contenente le informazioni della persona controllata.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Nome: " + getNome() + "\n" +
|
||||||
|
"Cognome: " + getCognome() + "\n" +
|
||||||
|
"Sesso: " + getSesso() + "\n" +
|
||||||
|
"Data di Nascita: " + getDataNascita() + "\n" +
|
||||||
|
"Comune di Nascita: " + getComuneNascita() + "\n" +
|
||||||
|
"Codice Fiscale: " + getCodiceFiscale() + "\n" +
|
||||||
|
"Scadenza Documento: " + getScadenzaDocumento() + "\n" +
|
||||||
|
"Esito Controllo: " + (esitoControllo ? "Positivo" : "Negativo") + "\n" +
|
||||||
|
"Tipo Persona Controllata: " + tipoPersonaControllata.toString() + "\n";
|
||||||
|
}
|
||||||
|
}
|
5
src/it/unibs/fp/patenteelibbrettopregoh/StatoGioco.java
Normal file
5
src/it/unibs/fp/patenteelibbrettopregoh/StatoGioco.java
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
package it.unibs.fp.patenteelibbrettopregoh;
|
||||||
|
|
||||||
|
public enum StatoGioco {
|
||||||
|
ARRESTATO, GIUSTIZIATO, RIVOLUZIONE, DODICESIMO_GIORNO, NON_ABBASTANZA_SOLDI, IN_CORSO;
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
package it.unibs.fp.patenteelibbrettopregoh;
|
||||||
|
|
||||||
|
public enum TipoPersonaControllata {
|
||||||
|
RIVOLUZIONARIO, POLIZIOTTO, PERSONA_NORMALE;
|
||||||
|
}
|
BIN
uml.png
Normal file
BIN
uml.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 404 KiB |
149
uml.puml
Normal file
149
uml.puml
Normal file
|
@ -0,0 +1,149 @@
|
||||||
|
@startuml
|
||||||
|
class Comune {
|
||||||
|
- nome: String
|
||||||
|
- codice: String
|
||||||
|
+ getNome(): String
|
||||||
|
+ getCodice(): String
|
||||||
|
}
|
||||||
|
|
||||||
|
class Comuni {
|
||||||
|
- comuni: ArrayList<Comune>
|
||||||
|
+ addComune(Comune): void
|
||||||
|
+ removeComune(Comune): void
|
||||||
|
+ getComuni(): ArrayList<Comune>
|
||||||
|
+ getCodiceComune(String): String
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Formato {
|
||||||
|
JSON
|
||||||
|
XML
|
||||||
|
}
|
||||||
|
|
||||||
|
enum StatoGioco {
|
||||||
|
IN_CORSO
|
||||||
|
GIUSTIZIATO
|
||||||
|
RIVOLUZIONE
|
||||||
|
DODICESIMO_GIORNO
|
||||||
|
NON_ABBASTANZA_SOLDI
|
||||||
|
ARRESTATO
|
||||||
|
}
|
||||||
|
|
||||||
|
class PatenteELibbrettoPregohMain {
|
||||||
|
+main(String[]): void
|
||||||
|
-gameLoop(GameData): void
|
||||||
|
-gestisciPersona(GameData, ArrayList<PersonaControllata>): void
|
||||||
|
-datiSbagliatiRifiutati(Persona, GameData, ArrayList<PersonaControllata>): void
|
||||||
|
-personaRifiutata(Persona, ArrayList<PersonaControllata>): void
|
||||||
|
-gestisciMazzetta(Persona, GameData, ArrayList<PersonaControllata>): void
|
||||||
|
-mazzettaRifiutata(Persona, ArrayList<PersonaControllata>): void
|
||||||
|
-mazzettaPoliziotto(Persona, GameData, ArrayList<PersonaControllata>): void
|
||||||
|
-mazzettaRivoluzionario(Persona, GameData, ArrayList<PersonaControllata>): void
|
||||||
|
-datiCorrettiRifiutati(Persona, ArrayList<PersonaControllata>, GameData): void
|
||||||
|
-datiSbagliatiAccettati(Persona, ArrayList<PersonaControllata>, GameData): void
|
||||||
|
-datiCorrettiAccettati(Persona, ArrayList<PersonaControllata>): void
|
||||||
|
-endGame(GameData): void
|
||||||
|
-controllaPersona(Persona, Comuni, GameData): boolean
|
||||||
|
-getFormato(): Formato
|
||||||
|
}
|
||||||
|
|
||||||
|
class Persona {
|
||||||
|
-nome: String
|
||||||
|
-cognome: String
|
||||||
|
-sesso: String
|
||||||
|
-dataNascita: String
|
||||||
|
-comuneNascita: String
|
||||||
|
-codiceFiscale: String
|
||||||
|
-scadenzaDocumento: String
|
||||||
|
+getNome(): String
|
||||||
|
+getCognome(): String
|
||||||
|
+getSesso(): String
|
||||||
|
+getDataNascita(): String
|
||||||
|
+getComuneNascita(): String
|
||||||
|
+getCodiceFiscale(): String
|
||||||
|
+getScadenzaDocumento(): String
|
||||||
|
+isCodiceFiscaleValido(Comuni): boolean
|
||||||
|
+calcolaCodiceFiscale(Comuni): String
|
||||||
|
}
|
||||||
|
|
||||||
|
class GameData {
|
||||||
|
- formato: Formato
|
||||||
|
- nomePersonaggio: String
|
||||||
|
- diario: ArrayList<PaginaDiario>
|
||||||
|
- comuni: Comuni
|
||||||
|
- persone: ArrayList<Persona>
|
||||||
|
- saldo: double
|
||||||
|
- numeroMazzetteAccettatePolizia: int
|
||||||
|
- numeroRivoluzionariAccettati: int
|
||||||
|
- statoGioco: StatoGioco
|
||||||
|
- giorno: int
|
||||||
|
- data: LocalDate
|
||||||
|
+ getDiario(): ArrayList<PaginaDiario>
|
||||||
|
+ getComuni(): Comuni
|
||||||
|
+ getPersone(): ArrayList<Persona>
|
||||||
|
+ getSaldo(): double
|
||||||
|
+ getPersonaDaControlare(): Persona
|
||||||
|
+ getNumeroMazzetteAccettatePolizia(): int
|
||||||
|
+ getNumeroRivoluzionariAccettati(): int
|
||||||
|
+ addPaginaDiario(PaginaDiario): void
|
||||||
|
+ addSaldo(double): void
|
||||||
|
+ pagaMulta(double): void
|
||||||
|
+ incrementaMazzetteAccettatePolizia(): void
|
||||||
|
+ incrementaRivoluzionariAccettati(): void
|
||||||
|
+ getNomePersonaggio(): String
|
||||||
|
+ getStatoGioco(): StatoGioco
|
||||||
|
+ getGiorno(): int
|
||||||
|
+ incrementaGiorno(ArrayList<PersonaControllata>): void
|
||||||
|
+ getData(): LocalDate
|
||||||
|
+ saveDiario(): void
|
||||||
|
}
|
||||||
|
|
||||||
|
class PaginaDiario {
|
||||||
|
- data: String
|
||||||
|
- bilancio: double
|
||||||
|
- personeControllate: ArrayList<PersonaControllata>
|
||||||
|
+ getGiorno(): int
|
||||||
|
+ getData(): String
|
||||||
|
+ getBilancio(): double
|
||||||
|
+ getPersoneControllate(): ArrayList<PersonaControllata>
|
||||||
|
+ addPersonaControllata(PersonaControllata): void
|
||||||
|
+ removePersonaControllata(PersonaControllata): void
|
||||||
|
}
|
||||||
|
|
||||||
|
class Parser {
|
||||||
|
+ parsePersone(Formato, String): ArrayList<Persona>
|
||||||
|
+ parseComuni(Formato, String): Comuni
|
||||||
|
+ saveDiario(String, ArrayList<PaginaDiario>, Formato): void
|
||||||
|
}
|
||||||
|
|
||||||
|
class PersonaControllata {
|
||||||
|
- esitoControllo: boolean <<@SerializedName("approvato")>>
|
||||||
|
- tipoPersonaControllata: TipoPersonaControllata <<transient>>
|
||||||
|
--
|
||||||
|
+ PersonaControllata(persona: Persona, esitoControllo: boolean, tipoPersonaControllata: TipoPersonaControllata)
|
||||||
|
+ isEsitoControllo(): boolean
|
||||||
|
+ getTipoPersonaControllata(): TipoPersonaControllata
|
||||||
|
+ getStatoTransito(): String
|
||||||
|
+ toString(): String
|
||||||
|
}
|
||||||
|
|
||||||
|
PersonaControllata --|> Persona
|
||||||
|
|
||||||
|
PatenteELibbrettoPregohMain --> GameData
|
||||||
|
PatenteELibbrettoPregohMain --> PersonaControllata
|
||||||
|
PatenteELibbrettoPregohMain --> Persona
|
||||||
|
PatenteELibbrettoPregohMain --> Formato
|
||||||
|
PatenteELibbrettoPregohMain --> StatoGioco
|
||||||
|
PatenteELibbrettoPregohMain --> Comuni
|
||||||
|
PatenteELibbrettoPregohMain --> Parser
|
||||||
|
Persona --> Comuni
|
||||||
|
Comune <-- Comuni
|
||||||
|
GameData --> Comuni
|
||||||
|
GameData --> "0..*" Persona
|
||||||
|
GameData --> "0..*" PaginaDiario
|
||||||
|
GameData --> Formato
|
||||||
|
GameData --> StatoGioco
|
||||||
|
|
||||||
|
GameData --> "0..*" PersonaControllata
|
||||||
|
|
||||||
|
}
|
||||||
|
@enduml
|
Loading…
Add table
Reference in a new issue