un` interfaccia di accesso alle risorse

UNIVERSITA’ DEGLI STUDI DI NAPOLI
“FEDERICO II”
FACOLTA’ DI SCIENZE MM.FF.NN.
TESI DI LAUREA IN INFORMATICA
(TRIENNALE)
Progetto S.I.Re.Na. integrazione di risorse per i Quartieri
Spagnoli: un’interfaccia di accesso alle risorse
Relatore
Candidato
prof. Francesco Mele
Gennaro Gambardella
matricola 566/136
Tutor Aziendale
arch. Brunella Como
ANNO ACCADEMICO 2005-2006
La teoria è quando si sa tutto e niente
funziona. La pratica è quando tutto
funziona e nessuno sa il perché. Noi
abbiamo messo insieme la teoria e la
pratica: non c'è niente che funzioni... e
nessuno sa il perché!
Albert Einstein
RINGRAZIAMENTI
Questo stage è stata una bella “avventura”, supportata da due amici, oltre che colleghi
eccezionali, come Diego e Dario ed è per questo che a loro vanno i mie primi ringraziamenti.
Grazie a loro durante questo periodo di lavoro ci sono stati momenti di grande divertimento oltre
a quelli di intenso lavoro. Inizialmente non è stato facile poiché molte delle cose che
affrontavamo erano nuove per noi, ma con l’aiuto reciproco queste prime difficoltà sono state
subito superate.
Ringrazio Luca e Nino per i loro preziosi cosigli che spesso ci hanno sbloccato da situazioni di
stallo.
Ringrazio il prof. F. Mele innanzitutto per avermi offerto la possibilità di partecipare a questo
stage oltre che per i suoi saggi consigli.
Ringrazio i mie genitori che fin dall’inizio del mio percorso universitario mi hanno sostenuto e
spronato ad andare avanti.
Ringrazio infine Sara, una persona speciale, che mi è sempre stata vicina nei momenti del
bisogno con tutto il suo amore.
Sommario
1. INTRODUZIONE
5
2. STRUMENTI E LINGUAGGI
7
2.1 ONTOLOGIE
2.2 PROTÉGÉ E ONTOVIZ
2.3 XSB PROLOG
2.4 FLORA2
2.5 LIBRERIA JAVA-SWING
7
10
12
15
17
3. ARCHITETTURA DEL SISTEMA REALIZZATO
21
3.1 ARCHITETTURA
3.2 STRUMENTI DI CONNESSIONE
3.2.1 L’INTERFACCIA ODBC PER XSB PROLOG
3.2.2 L’INTERFACCIA JDBC
3.3 JAVA2FLORA E LA CLASSE XSBFLORA
21
24
24
27
29
4. INTEGRAZIONE DI SORGENTI DATI MEDIANTE ONTOLOGIA
32
4.1 ANALISI DEL PROBLEMA
4.2 IL DATABASE ACCESS DELLA SOCIETÀ S.I.RE.NA.
4.3 UN’ONTOLOGIA PER RAPPRESENTARE I METADATI DEL DATABASE ACCESS
4.3.1 CLASSI E CORRISPONDENZE
4.4 IL DATABASE POSTGRES DEI LIBRETTI DI MANUTENZIONE
4.5 UN’ONTOLOGIA PER RAPPRESENTARE I METADATI DEL LIBRETTO DI MANUTENZIONE
4.5.1 LE CLASSI
4.5.2 CORRISPONDENZE FRA LE TUPLE DEL DB E LE CLASSI FLORA2 DELL’ONTOLOGIA
4.6 INTEGRAZIONE DI ONTOLOGIE
4.7 INTRODUZIONE DI NUOVI METADATI
4.7.1 DATABASE DIA, RELAZIONE TECNICA, APPROVAZIONE BENI CULTURALI
4.7.2 DATABASE POPOLAMENTO BASSI
32
33
36
36
37
49
49
52
53
56
56
57
5. INTERFACCIA DEL SISTEMA ED ESEMPI DI FUNZIONAMENTO
59
5.1 L’INTERFACCIA DEL SISTEMA
5.2 ESEMPIO DI FUNZIONAMENTO
59
60
6. CONCLUSIONI E SVILUPPI FUTURI
67
BIBLIOGRAFIA
68
APPENDICE
72
CODICE XSB
CODICE FLORA
CODICE JAVA
72
80
101
Capitolo 1: Introduzione
1. Introduzione
Il lavoro di tesi è stato svolto nell’ambito di un progetto software della Società S.I.Re.Na che
aveva come principale scopo la creazione di un sistema in grado integrare tutte le risorse
possedute dall’azienda S.I.Re.Na., di fornire un servizio di supporto che permettesse di tener
conto della trasformazione dei bassi dei Quartieri Spagnoli di Napoli nel tempo e che aiutasse in
tal modo il gruppo di lavoro di S.I.Re.Na ed altri operatori nella decisione di quali edifici sia più
urgente apportare ristrutturazioni.
L’obbiettivo principale di questa tesi (presentato in dettaglio nel Capitolo 4) è stato quello di
costruire un sistema in grado di integrare tutte le risorse possedute da S.I.Re.Na. e di fornire
un’interfaccia d’accesso a tali risorse. Per raggiungere tale obbiettivo ho costruito un’ontologia
[1, 2] di riferimento che fosse in grado di “catturare” attraverso una rappresentazione tutte le
risorse possedute dall’azienda. In particolare l’ontologia è stata definita mediante la fusione di
due ontologie: una per il database Access contenente dati sugli edifici ed un'altra per il database
Postgres [3] dei libretti di manutenzione, una raccolta di documenti presenti in S.I.Re.Na. dove
sono contenuti i dati e le informazioni della manutenzione di un gruppo di edifici storici di
Napoli. L’ontologia, anche se progettata in Protegé [4], è stata costruita in Flora2 [5], un sistema
basato sulla F-Logic [6] orientato ad oggetti per lo sviluppo di programmi logici. Per popolare
l’ontologia di riferimento, precedentemente menzionata, ho costruito un programma in XSB
Prolog [7], in grado di prelevare i dati dalle diverse sorgenti dati ed immetterli in predicati da
richiamare in Flora2.
Alcune risorse possedute da S.I.Re.Na. erano contenute in documenti cartacei, in particolare tali
documenti erano: la relazione tecnica asseverata di un edificio, la denuncia di inizio attività di un
edificio, l’approvazione dei beni cultura per l’adempimento dei lavori su di un edificio e schede
sul popolamento e la destinazione d’uso dei bassi. La conversione dei documenti cartacei, anche
se è stata un’attività presa in considerazione in questo lavoro di tesi, è stata posticipata in tempi
futuri del progetto di integrazione globale di S.I.Re.Na. Al fine di effettuare però un’analisi
completa delle risorse disponibili, e per la futura attività di conversione cartecea-digitale di
S.I.Re.Na, ho definito per tali documenti dei metadati e creato dei database (presentati nel
dettaglio nel paragrafo 4.7). Ho effettuato prima una metadatazione e poi costruito le relative
tabelle messe in corrispondenze con le classi dell’ontologia scelta come riferimento.
5
Capitolo 1: Introduzione
Per accedere ai dati contenuti nell’ontologia ho costruito un’interfaccia in Java presentata nel
Capitolo 5. Nell’interfaccia realizzata sono state utilizzate le librerie Swing di Java 2 [8], che
permettono di costruire potenti GUI (Graphical User Interface) in maniera semplice e veloce. Le
librerie Swing contengono tutti i componenti adatti alla costruzione di un’interfaccia utente
moderna, dai pulsanti che contengono immagini alle strutture ad alberi e tabelle. Swing di Java 2
è una libreria di grandi dimensioni, concepita per avere tutte le componenti adeguate al compito
da affrontare e cioè quello di costruire programmi per interfacce utenti.
Il sistema realizzato ha reso necessaria l’integrazione di due ambienti di programmazione: Flora2,
implementazione di Frame Logic basata su XSB (un sistema Prolog Open Source) e Java, messi
in connessione mediante un bridge denominato Java2Flora [9], che permette di effettuare
interrogazioni Flora2 da Java. Java2Flora (presentato nel capitolo 3), è dunque lo strumento
utilizzato per poter richiamare comandi Flora2 da Java.
La tesi è articolata in sei capitoli più un’appendice contenente il codice XSB, Flora2 e Java
creato.
Nel Capitolo 2 si affrontano i temi riguardanti tutti gli strumenti utilizzati per la realizzazione del
sistema: Flora2, XSB, Protégé ecc.
Il Capitolo 3 è dedicato all’architettura che è stata utilizzata per la creazione del sistema software
realizzato.
Nel Capitolo 4 viene descritto l’argomento principale della tesi che è l’attività di integrazione
delle risorse possedute dall’azienda.
Nel Capitolo 5 viene presenta l’interfaccia del sistema costruita in Java utilizzando le librerie
Swing e degli esempi di funzionamento della stessa.
Nel Capitolo 6, infine, vengono tracciate le conclusioni e quello che in futuro potrebbe essere
realizzato come estensione del sistema realizzato.
Nell’appendice viene presentato il codice realizzato in Flora2, XSB Prolog e Java.
6
Capitolo 2: Strumenti e linguaggi
2. Strumenti e linguaggi
In questo capitolo sono presentati i principali strumenti adoperati per la realizzazione
dell’integrazione delle sorgenti dati e della costruzione dell’interfaccia per l’accesso a tali risorse.
In particolare saranno presentate le Ontologie, Protégé, XSB Prolog, Flora2 e le librerie Swing di
Java2.
2.1 Ontologie
Il concetto di ontologia deriva dalla teologia, dove ha il significato dello studio dell’essere o
dell’esistere. Aristotele, dopo aver cercato una risposta a tutte le domande dell'uomo, pensò infine
a come ordinare il sapere. Questa fatica era in fondo dettata dalla sua stessa opera che spaziava
dalla Fisica alla Metafisica, dall'Etica all'Estetica. Nell'avviare questa ampia sistematizzazione
dovette definire gli argomenti ed i sotto-argomenti, come diremmo oggi con un linguaggio
moderno. A questi avrebbe poi assegnato i vari contenuti del sapere. Aristotele chiamò categorie
universali gli argomenti che riguardano tutte le entità del mondo, e quindi le categorie sussidiarie
che definiscono aspetti speciali e particolari. In questo modo per primo varò l'Ontologia, per
secoli rimasta una specializzazione della filosofia.
Con la definizione data da Gruber [10], un’ontologia è una specifica esplicita di una
concettualizzazione. Seguendo tale definizione, in informatica una ontologia è il tentativo di
formulare uno schema concettuale esaustivo e rigoroso nell'ambito di un dato dominio.
Un’ontologia definisce i termini usati per descrivere e rappresentare un‘area di conoscenza. Le
ontologie sono utilizzate dalla gente comune, dai database e dalle applicazioni che hanno bisogno
di scambiarsi informazioni di un certo dominio. L’ontologia [11] è vista come un vocabolario
(tassonomia) di concetti, che rappresenta un determinato dominio d’interesse, dotato di un
insieme di relazioni tra i concetti stessi che consentono di capire come sono legati tra loro.
Come si vede il termine “ontologia” può avere diversi significati per la comunità scientifica; nel
suo articolo [12] Guarino prova ad isolare questi diversi significati in sette possibili
interpretazioni:
1. Ontologia come una disciplina filosofica.
2. Ontologia come una concettualizzazione informale di un sistema.
3. Onntologia come una relazione semantica formale.
4. Ontologia come una specifica esplicita di una “concettualizzazione”.
7
Capitolo 2: Strumenti e linguaggi
2.1 Ontologie
5. Ontologia come rappresentazione di un sistema concettuale attraverso una teoria logica.
i.
Caratterizzata da specifiche proprità formali
ii.
Caratterizzata solo dal suo scopo specifico
6. Ontologia come vocabolario utilizzato in una teoria logica.
7. Ontologia come una specificazione (meta-livello) di una teoria logica.
Solitamente un’ontologia (figura 1) è rappresentata mediante una struttura dati gerarchica che
contiene tutte le entità principali classi (o concetti), le relazioni esistenti fra di esse (is a, part
of…), le proprietà (slot, ruoli) attribuite a ciascun concetto, che permettono di caratterizzare una
classe, e le restrizioni sulle proprietà.
Figura 1. Esempio di ontologia in Protégé.
I programmi nei computer possono utilizzare un'ontologia per una grande varietà di scopi, fra cui
il ragionamento induttivo e la classificazione, ma in generale sono lo strumento principe da
utilizzare tutte le volte in cui si desidera descrivere la conoscenza di una sorgente informativa e
realizzare uno scambio di informazioni in ambito distribuito. Un campo in cui le ontologie sono
comunemente utilizzate è quello dell’intelligenza artificiale. Le ontologie insomma possono
aiutarci a rendere i nostri programmi più “intelligenti” e a migliorare il recupero d’informazioni,
basti pensare ad Internet: una mole enorme di dati viene messa a disposizione dalla rete ma la sua
consultazione è tutt'oggi onerosa. La classificazione e l’ordinamento delle informazioni mediante
l’uso di ontologie può migliorare la situazione.
8
Capitolo 2: Strumenti e linguaggi
2.1 Ontologie
In un’ontologia basata su frame, le classi rappresentano l’entità di base e sono in rapporto tra loro
mediante relazioni gerarchiche del tipo classe – sottoclasse (o classe – superclasse). Ogni classe
esprime le sue caratteristiche mediante degli slot (o attributi) e ad ogni slot è associato un
insieme di entità detti valori degli slot. All’interno della struttura gerarchica di un’ontologia le
classi che sono più vicine alla radice solitamente contengono meno slot e sono astratte, mentre
man mano che si scende nell’albero gli slot aumentano e le classi diventano più specializzate.
Una notazione di tipo ontologico gode inoltre di una delle proprità fondamentali della
programmazione ad oggetti, vale a dire la proprietà per la quale ogni classe eredita dalle sue
superclassi membri e metodi, nota con il nome di Ereditarietà. Altri concetti fondamentali (figura
2) per questo tipo di rappresentazione sono quello di istanza di una classe, cioè la creazione di un
oggetto che abbia le caratteristiche possedute dalla classe d’appartenenza e quello di constraints
(vincoli) sugli slot di una classe.
acquista
istanze
Figura 2. Esempio di ontologia in Protégé: relazioni ed istanze
9
Capitolo 2: Strumenti e linguaggi
2.2 Protégé e Ontoviz
2.2 Protégé e Ontoviz
Protégé [4] è un tool Open Source, sviluppato presso l’Università di Stanford, per la creazione e
sviluppo di Ontologie basate su frame. Esso vuole essere di aiuto agli ingegneri della conoscenza
ed agli esperti di dominio per la realizzazione di ontologie.
Ognuna delle componenti principali di Protégé ha una interfaccia ben definita con il resto del
sistema ed è perfettamente sostituibile da componenti analoghe. Le caratteristiche principali di
Protégé sono quelle di avere un editor per creare, visualizzare e gestire ontologie, API
(Application Programming Interface) per un accesso universale ed una interfaccia utente (GUI
Graphical User Interface) estensibile. L’interfaccia grafica di Protégé è realizzata in maniera
molto semplice ed intuitiva, la barra dei componenti è composta da linguette selezionabili
chiamate tab, ognuna delle linguette rappresenta un elemento distinto dell’ontologia.
Selezionando un tab l’utente può navigare tra i diversi elementi (classes, slots, forms,
instances,…) dell’ontologia in fase di definizione.
Nella figura 3 viene riportata la schermata che si presenta all’apertura di Protégé, come si può
notare il tab selezionato di default è quello Classes. Classes è il pannello che gestisce la parte di
costruzione dell’albero e di definizione delle relazioni esistenti tra i concetti che ne fanno parte.
In esso si possono distinguere chiaramente quattro componenti principali. Il primo, in alto a
sinistra, è il pannello che definisce la tassonomia dell’ontologia: quali sono gli elementi
dell’albero e la loro gerarchia. Il secondo, in basso a sinistra, serve per gestire la relazione di
ereditarietà tra i concetti, e permette di aggiungere o rimuovere parenti ad un nodo dell’albero.
Nella parte alta di destra, invece, si trova il pannello che mostra gli attributi legati al concetto
selezionato sull’albero. Così organizzato, i progettisti di ontologie possono accedere alle
informazioni velocemente ogni qual volta ne hanno bisogno e possono modificare ed interagire
con l’ontologia direttamente navigando l’albero che la rappresenta.
10
Capitolo 2: Strumenti e linguaggi
2.2 Protégé e Ontoviz
Barra dei Componenti
Classi
Attributi classe selezionata
Figura 3. GUI Protégé.
Uno dei maggiori vantaggi derivanti dall’architettura di Protégé è di essere uno strumento aperto
e modulare. I programmatori, grazie a ciò, possono aggiungere nuove funzionalità semplicemente
creando gli appropriati plug-ins in Java.
Come già detto Protégé è dotato di numerosi plug-ins che ne aumentano le potenzialità, uno di
questi è Ontoviz [13]. Questo plug-in permette di visualizzare le ontologie precedentemente
create, con l’aiuto di un software per la visualizzazione grafica chiamato GraphViz, che è un
software open source sviluppato dai laboratori di ricerca AT&T. La rappresentazione grafica
dell’ontologia data da Ontoviz è fornita sotto forma di grafo (figura 4), anziché nella classica
forma ad albero. Con Ontoviz si può navigare nel grafo, da un nodo all’altro cliccando sul nodo
stesso nel grafo o sulla classe corrispondente nello schema ad albero dell’ontologia. Ontoviz oltre
a permettere di rimpicciolire o ingrandire l’immagine a proprio piacimento grazie alla funzione di
zoom permette di personalizzare la visualizzazione del grafo. L’utente ha la possibilità di
scegliere cosa visualizzare per ogni classe come le sottoclassi, le superclassi, le proprietà o le
istanze e gli slot.
11
Capitolo 2: Strumenti e linguaggi
2.2 Protégé e Ontoviz
Altre personalizzazioni possibili riguardano i colori dei nodi che rappresentano le classi, le
istanze o gli archi che rappresentano relazioni is-a e le proprietà delle classi. La cosa importante
da ricordare è che comunque Ontoviz è solo un visualizzatore e non consente come tale
modifiche alle definizioni delle classi e alle relazioni fra esse.
Classi da visualizzare
e personalizzazione
della visualizzazione
Grafo dell’ontologia
navigabile cliccando
su di un nodo
Albero ontologia
navigabile
Figura 4. GUI di Ontoviz.
2.3 XSB Prolog
L'uso della logica come linguaggio di programmazione è molto recente. Sino agli anni '70 era
stata solo un indispensabile supporto teorico nell'ambito della ricerca in Intelligenza Artificiale
per la formalizzazione di concetti e la definizione di sistemi di deduzione automatica, ma non
costituiva un vero è proprio modello di calcolo. Solamente in seguito ai risultati di Robinson sul
Principio di risoluzione, Colmerauer sviluppò il primo linguaggio logico denominato Prolog, che
è ancora oggi il più diffuso. L'affermazione crescente della programmazione logica è dovuta
principalmente alla sua importante proprietà di essere dichiarativa: il programma cioè definisce
12
Capitolo 2: Strumenti e linguaggi
2.3 XSB Prolog
che cosa si vuol calcolare senza dover specificare come questo deve essere calcolato. Il Prolog è
un linguaggio che si presta a risolvere problemi che riguardano oggetti e loro relazioni, esso è
caratterizzato essenzialmente da 3 proprietà:
•
dichiarare fatti
•
definire regole
•
porre domande su fatti e relazioni
XSB [7] è un sistema deduttivo e di programmazione logica sviluppato per piattaforme Windows
e Unix. Oltre a fornire tutte le funzionalità del Prolog, XSB contiene diverse caratteristiche che
solitamente non sono incluse nei sistemi di programmazione logica come: un elevato numero di
interfacce verso altri sistemi (C, Java, Perl, ODBC, SModels , and Oracle), una migliore
portabilità ed estendibilità, un insieme di packages che estendono XSB a valutare F-Logic
tramite il package Flora2 e tante altre. Per quanto riguarda un po’ la sintassi di XSB diciamo che:
1- le costanti iniziano per lettera minuscola:
a, b, c, f7, u6, penna, carta, andrea, camilleri, numeroStudenti, prezzoLibri;
2- gli interi sono costanti:
1,3, 44, 100;
3- le stringhe sono costanti:
'penna', 'il corso delle cose', 'Andrea'
4- Le variabili iniziano con la lettera maiuscola:
X, Y, F1, F2, Testi, Titoli, MarcheProdotti, ListaLibri
13
Capitolo 2: Strumenti e linguaggi
2.3 XSB Prolog
Abbiamo detto che un programma Prolog è composto da fatti, regole e query, in XSB la sintassi
è:
Fatti
personaggio(montalbano).
personaggio(maigret).
personaggio('Pepe Carvalho').
scrittore(georges,simenon).
scrittore(andrea,camilleri).
scrittore(manuel,montalban).
libro('Tatuaggio', montalban, 'Universale Economica Feltrinelli').
libro('La gita a Tindari',camilleri,'Sellerio').
libro('Il profumo della notte',camilleri,'Sellerio').
Query
| ?- personaggio(X).
X = montalbano ;
Risposte del sistema
X = maigret
| ?-
14
Capitolo 2: Strumenti e linguaggi
2.4 Flora2
2.4 Flora2
In questo paragrafo si introduce una breve descrizione della Frame Logic, il linguaggio adottato
per implementare l’ontologia (paragrafo 4.6) definita per il processo d’integrazioni di dati. La
Frame Logic (o F-logic) [6] fornisce un formalismo logico per linguaggi basati su frame per la
rappresentazione di dati e di conoscenza. Inoltre F-Logic combina la semantica dichiarativa e
l’espressività di un linguaggio di database deduttivo con le capacità della programmazione ad
oggetti. E’ stata sviluppata al fine di fornire delle basi teoriche per un linguaggio di
programmazione logica orientata agli oggetti, che possa essere usato sia come strumento di
rappresentazione dati che come strumento di computazione. Si è parlato precedentemente di cos’è
un’ontologia definendola come il tentativo di formulare uno schema concettuale esaustivo e
rigoroso nell'ambito di un dato dominio, che è solitamente rappresentata mediante una struttura
gerarchica le cui componenti principali sono: Concetti, Relazioni, Attributi, Istanze, Assiomi.
F-Logic permette di descrivere ontologie basate su frame [14] e quindi classi di oggetti e
gerarchie di classi allo stesso modo dello stile della programmazione orientata agli oggetti.
Inoltre, consente di effettuare interrogazioni e computazioni su classi, attributi, oggetti e valori
degli attributi.
Flora2 (F-Logic Translator) [5] è una piattaforma di sviluppo di applicazioni e un sofisticato
compilatore per basi di conoscenza orientato ad oggetti. Il linguaggio di programmazione
supportato da Flora2 è un dialetto di F-Logic con numerose estensioni, che include naturalmente
stili di meta-programmazione. Flora2 fu creato con l’idea di sviluppare un nuovo linguaggio di
programmazione estensibile e flessibile che permettesse di supportare eventuali nuovi moduli
sviluppati in futuro. In genere, Flora2 viene implementato come modulo XSB, il quale come
accennato nel precedente paragrafo, è un sistema deduttivo e di programmazione logica.
Diamo un esempio di come si crea una semplice ontologia in Flora2, supponiamo di avere
un’ontologia come quella rappresentata in figura 4bis.
15
Capitolo 2: Strumenti e linguaggi
2.4 Flora2
Figura 4bis. Esempio di ontologia.
In Flora2 la sintassi per definire le classi è:
y::x è sottoclasse x;
x[a =>string] a è uno slot di tipo string di x;
y[s=>string,d=>string]
s e d sono slot di tipo string di y;
Un oggetto si definisce:
i:y
i è istanza di y;
i: y[s->v1,d->v2,a->v3]
v1, v2, v3 sono rispettivamente i valori degli slot s, d, a della classe y;
Nei programmi Flora2 è resa possibile l’inclusione di tipici programmi o predicati Prolog.
L’invocazione di predicati Prolog avviene attraverso il semplice simbolo ‘@’.La sintassi è la
seguente:
?- predicate@prolog module.
oppure
?- predicate@prolog(module).
16
Capitolo 2: Strumenti e linguaggi
2.5 Libreria Java Swing
2.5 Libreria Java-Swing
Java Swing [8] è una libreria di grandi dimensioni che contiene un insieme di controlli GUI
(Graphical User Interface) atti alla creazione di un’interfaccia utente moderna composta da
bottoni, menu, liste di elementi, spazi per disegnare oggetti e immagini. Swing fa parte delle JFC
(Java Foundation Classes) introdotte in Java 2. Il nuovo pacchetto JFC/Swing di Java2 si
sovrappone ad AWT (Abstract Windowing Toolkit) della precedente versione di Java
introducendo alcuni nuovi componenti grafici e migliorando l’aspetto esteriore di altri. Le Swing
sono state realizzate con l’architettura MVC (Model - View - Conrtroller). Tale logica crea una
netta separazione della veste grafica del cmponente dalla sua logica di controllo.
Le classi di Swing sono contenute nel pacchetto javax.swing. Per assicurare la velocità, tutti i
componenti sono “leggeri” e Swing è interamente scritto in Java per garantire la trasferibilità. La
navigazione tramite tastiera è automatica, si può eseguire un applicazione Swing senza utilizzare
il mouse e per questo non occorre alcun lavoro supplementare di programmazione.
Una caratteristica degli oggetti swing è il “pluggable look and feel”, ovvero “aspetto inseribile”,
che permette di individuare l’aspetto grafico dinamicamente al fine di adattarsi alle aspettative di
utenti che lavorano su piattaforme e sistemi diversi. E’ possibile fare in modo che l'utente
modifichi l'aspetto visuale dell'applicazione o applet a runtime senza riavviare l'applicazione,
utilizzando sempre un aspetto a loro familiare.
La classe più importante della libreria swing e Container (figura 5). Le sottoclassi di Container
servono a contenere componenti e controllano la disposizione degli elementi all'interno tramite
Layout Managers. Un container a sua volta può contenere un altro container o più.
Container
JApplet
JFrame
JDialog
Figura 5. La classe Container.
17
JWindow
JComponen
Capitolo 2: Strumenti e linguaggi
2.5 Libreria Java Swing
JApplet, JFrame, JDialog, JWindow sono container toplevel, che possono essere visualizzati
senza essere contenuti in altri. Tutti hanno un “pannello dei contenuti” (JRootPane) nel quale
vanno aggiunti i componenti, tramite il metodo add() ereditato dalla classe Container.
Una sottoclasse di Container è la classe JComponent le cui sottoclassi rappresentano i
componenti grafici delle GUI quali JButton, JMenu, JLabel e tanti altri (figura 5 bis).
Figura 5 bis. La classe JComponent.
Il modo col quale si posizionano i componenti su un form Java è diverso da molti sistemi GUI:
come prima cosa si può dire che si fa tutto con il codice; per secondo che il modo in cui i
componenti vengono posizionati su un form è governato non da posizionamenti assoluti, ma da
un “gestore di layout”, che decide come si collocano i componenti in base all’ordine col quali li si
18
Capitolo 2: Strumenti e linguaggi
2.5 Libreria Java Swing
aggiunge tramite il metodo add(). Dimensione, forma e piazzamento dei componenti variano in
modo notevole da un gestore di layout all’altro. Inoltre, i gestori di layout si adattano alle
dimensioni delle finestre dell’applicazione o applet. Ogni oggetto Container ha associato un
oggetto LayoutManager di default ed esistono diversi LayoutManager per disporre i componenti
all'interno del Container in base a regole differenti. Il LayoutManager associato al Container può
essere cambiato dal programmatore al momento della creazione del Container utilizzando il
metodo setLayout(). Come si evince dalla figura 8 i gestori di layout disponibili sono:
FlowLayout, BorderLayout, GridLayout, GridBagLayout, CardLayout e BoxLayout.
java.lang.Object
FlowLayout
BorderLayout
GridLayout
GridBagLayout
BoxLayout
CardLayout
javax.swing
java.awt
Figura 6. I LayoutManager disponibili
Gli oggetti grafici (JButton, JMenu, JFrame …) producono eventi collegati alle azioni dell'utente:
•
Click del mouse su un elemento;
•
Ridimensionamento di una finestra;
•
Selezione di un elemento;
•
Attraversamento di un’area con il cursore
19
Capitolo 2: Strumenti e linguaggi
2.5 Libreria Java Swing
Ciascun tipo di evento è rappresentato da una classe distinta. Quando un evento viene innescato,
e ricevuto da uno o più “ascoltatori” o “listener”, che agisce su quell’evento. Di conseguenza,
l’origine dell’evento e il luogo nel quale viene gestito possono essere separati.
Ciascun ascoltatore di eventi è un oggetto di una classe che implementa una particolare
interfaccia dell’ascoltatore. Quindi, tutto ciò che i programmatori devono fare è creare un oggetto
ascoltatore e registralo presso il componente che innesca l’evento. Questa registrazione viene
eseguita chiamando l metodo addXXXListener() nel componente che innesca l’evento, nel quale
“XXX” rappresenta il tipo di evento che viene ascoltato. Tutta la logica di un evento, quindi, si
troverà all’interno di una classe listener. Quando si crea una classe listener, l’unico vincolo è che
deve implementare l’interfaccia appropriata.
20
Capitolo 3: Architettura del sistema realizzato
3. Architettura del sistema realizzato
In questo capitolo verrà innanzitutto presentata l’architettura generale del sistema, definita in
concomitanza dei lavori in [15, 16], realizzata per far fronte alle esigenze del progetto S.I.Re.Na.
In particolare si focalizzerà poi l’attenzione sul sottositema riguardante il mio lavoro di tesi, che
interessa il processo di mediazione integrazione delle sorgenti dati e lo sviluppo dell’interfaccia
d’accesso a tali risorse.
Nel paragrafo 3.2 si mostrano le interfacce di connessione utilizzate: ODBC per XSB Prolog e
JDBC per Java. Ricordiamo che la prima è stata usata per prelevare dati dai database Access e
Postgres per importarli in XSB e Flora2; mentre l’interfaccia JDBC è stata utilizzata in Java per
prelevare ed immettere i dati nei nuovi database creati. Nel paragrafo 3.3 viene presentato il
bridge denominato Java2Flora, che permette l’integrazione di due ambienti di programmazione:
Flora2, implementazione di Frame Logic basata su XSB (un sistema Prolog Open Source) e Java,
in modo che si possano effettuare interrogazioni Flora2 da Java.
3.1 Architettura
L’architettura utilizzata visibile in figura 7 è stata definita in base alle esigenze e
all’organizzazione delle risorse dell’azienda S.I.Re.Na.
La presenza di più database e di materiale cartaceo, da cui ricavare nuovi database, ha richiesto
l’utilizzo di un procedimento di d’ integrazione delle sorgenti. Partendo dai dati in possesso
dell’azienda, è stata creata un’ontologia che integra l’insieme dei metadati utili a rappresentare le
informazioni di interesse al progetto. Il popolamento dell’ontologia definita avviene attraverso un
processo di mediazione . Tale processo preleva le informazioni dalle verie fonti e le adatta
all’ontologia. La fase di interfacciamento del sistema con le varie sorgenti avviene mediante un
modulo creato in XSB che permette di connettersi ai vari databases in modo semplice.
Inoltre, con alcuni dei dati è stato costruito un GIS [15] dell’area riquardante i quartieri spagnoli
che permette all’utente di visualizzare geograficamente sul territorio i singoli edifici. Ogni
edificio è stato corredato di un insieme di informazioni provenienti dalle sorgenti mediante una
loro catalogalizzazione definita tramite
una serie di specifiche quali Popolazione,
Descrizione,ecc…
21
Capitolo 3: Architettura del sistema realizzato
3.1 Architettura
Infine è stato creato un algoritmo [16], che sfrutta le librerie di Java 3D e ricostruisce un basso
appartenente all’area inclusa nel progetto di rivalutazione territoriale dei quartieri spagnoli
dell’azienda S.I.Re.Na.
L’insieme delle informazioni sono fruibili mediante un’interfaccia, definita in Java, la quale
permette agli utenti di eseguire le seguenti operazioni:
i.
accedere alle risorse integrate mediante l’ontologia di riferimento utilizzando il bridge
Java2Flora che permette di effettuare interrogazione Flora2 da Java;
ii.
accedere ad un GIS dell’area lanciando il browser locale della macchina sulla quale
“gira” l’interfaccia;
iii.
visualizzare in 3D i modelli di bassi appartenenti all’area inclusa nel progetto di
rivalutazione territoriale dei quartieri spagnoli dell’azienda S.I.Re.Na.
Figura 7. Architettura del sistema globale d’integrazione
22
Capitolo 3: Architettura del sistema realizzato
3.1 Architettura
La scelta di quest’architettura è stata compiuta in previsione del fatto che il progetto realizzato,
potrà essere esteso con nuove funzionalità e nuove sorgenti di dati. L’ introduzione di un nuovo
database contenente ulteriori informazioni comporterebbe solo l’aggiunta di un nuovo ramo
nell’ontologia di riferimento; l’inserimento di nuovi palazzi comporterà solo l’aumento di nuovi
punti o poligoni (a seconda del caso in cui si aggiunga un basso o un palazzo) nello shapefile del
GIS, che si relazioneranno automaticamente con i dati presenti nei database; anche l’immissione
di un nuovo modello di basso comporterà la sola catalogazione del modello attraverso alcuni
parametri per la visualizzazione tridimensionale.
Nei successivi paragrafi viene spiegata in maniere più dettagliata la parte di architettura che è
stata realizzata per il processo d’integrazione delle sorgenti dati e lo sviluppo dell’interfaccia
d’accesso a tali risorse, argomenti di questa tesi (figura 7 bis). In particolare si spiegheranno le
interfacce di connessioni utilizzate (paragrafo 3.2) ed il bridge Java2Flora utilizzato per
richiamare predicati Flora2 da Java (paragrafo 3.3).
Figura 7 bis. Elementi dell’architettura realizzata in questa tesi
23
Capitolo 3: Architettura del sistema realizzato
3.2 Strumenti di connessione
3.2 Strumenti di connessione
Per poter importare i dati dai database ed inserirli nelle ontologie, occorre uno strumento che sia
capace di effettuare la connessione ai database selezionati ed estrarre i dati. Nei paragrafi 3.2.1 e
3.2.2 verranno presentate brevemente le interfacce ODBC e JDBC. Ricordiamo che la prima è
stata usata per prelevare dati dai database Access e Postgres per importarli in XSB e Flora2;
mentre l’interfaccia JDBC è stata utilizzata in Java per prelevare ed immettere i dati nei nuovi
database creati.
3.2.1 L’interfaccia ODBC per XSB Prolog
ODBC è l’abbreviazione di Open Database Connectivity, un metodo standard (o Application
Programming Interface, API) di accesso a database. ODBC è stato creato da SQL Access Group
e rilasciato per la prima volta nel settembre1992. Microsoft Windows è stato il primo sistema
operativo ad avere un prodotto ODBC, ma esistono versioni anche per piattaforme UNIX, OS/2,
e Macintosh. ODBC è un “linguaggio” (o meglio, un protocollo) che i client possono usare per
interrogare un server database. I client che supportano ODBC passano le richieste ad un ODBC
Driver manager, che decide quale sorgente dati è appropriata e quale driver ODBC corrisponde
a quella sorgente dati. La richiesta è trasmessa attraverso il driver al database e la risposta
attraverso ODBC Driver Manager raggiunge il client. ODBC permette ai programmi che lo usano
di inviare ai database stringhe SQL senza il bisogno di conoscerne le API proprietarie, genera
automaticamente richieste che il sistema di database utilizzato sia in grado di capire. In tal modo,
i programmi possono connettersi a diversi tipi di database utilizzando più o meno lo stesso
codice. Il linguaggio supportato da ODBC è un SQL particolarmente ristretto, ovvero, è
caratterizzato da un insieme minino di istruzioni, definito dal SAG ( SQL Access Group).
L’interfaccia XSB-ODBC [17] è un sottosistema che permette agli utenti XSB di accedere a basi
di dati attraverso una connessione ODBC. Questa interfaccia permette agli utenti XSB di
accedere ai dati contenuti in un Database Management System (DBMS). Usando questa
interfaccia è possibile dunque prelevare differenti informazioni da diversi DBMS e trasferirli
come fatti Prolog. L’interfaccia XSB-ODBC permette agli utenti di interrogare un database in
diversi modi. Ad esempio gli utenti possono passare all’interfaccia specifiche query, o dichiarare
predicati XSB che si connettono a singole tabelle di un database e prelevano i dati a run-time da
24
Capitolo 3: Architettura del sistema realizzato
3.2 Strumenti di connessione
inserire in altri predicati, oppure ancora di utilizzare complesse query che includono operazioni di
congiunzione, negazione o aggregazione.
Le principali funzionalità fornite dal modulo XSB-ODBC sono:
•
accesso concorrente da più processi XSB ad un singolo DBMS;
•
accesso da un singolo processo XSB a più DBMS;
•
un potente compilatore Prolog/SQL, il quale serve a generare codice SQL necessario per
effettuare le query sui database, a partire da i predicati Prolog, definiti per la connessione
e l’importazione;
•
disponibilità di codice sorgente.
Nelle prossime righe verrà mostrata la sintassi XSB per connettersi ad un database ed effettuare
una query [17].
L’insieme dei predicati per gestire l’interfaccia XSB-ODBC sono definiti nel modulo odbc_call
da cui devono essere importati prima di essere invocati.
Vediamo come si effettua una connessione ad una sorgente dati. Una volta che l’amministratore
ha registrato il database nel DSN di sistema, la connessione avviene invocando il comando:
| ?- odbc_open(nome_sorgente_dati, username, passwd).
Prima di poter utilizzare il predicato odbc_open bisogna importarlo:
| ?- import odbc_open/3 from odbc_call.
Per chiudere la sessione in uso, dopo averlo importato:
| ?- import odbc_close/0 from odbc_call.
| ?- odbc_close.
Esiste anche un altro modo per aprire la connessione ad una Sorgente Dati. Tale metodo utilizza
rispetto al precedente un parametro in più che specifica il nome della connessione:
| ?- odbc_open(nome_sorgente_dati,username, passwd,nome_connessione).
25
Capitolo 3: Architettura del sistema realizzato
3.2 Strumenti di connessione
La chiusura della sessione sarà:
| ?- odbc_close(nome_connessione).
Utilizzando questi due predicati le importazioni da fare saranno rispettivamente:
| ?- import odbc_open/4 from odbc_call.
| ?- import odbc_close/1 from odbc_call.
Diciamo che in generale la sintassi per importare un predicato sarà sempre:
import nome_del_predicato/numero_di_parametri from odbc_call
Per poter vedere una lista dei nomi e delle descrizioni delle Sorgenti Dati esistenti sul computer
importando il modulo odbc_data_sources/2 basta fare:
| ?- odbc_data_sources(DSN,DSNDescr).
/* Risultati */
DSN = mycdf
DSNDescr = MySQL driver;
DSN = mywincdf
DSNDescr = TDS driver (Sybase/MS SQL);
Ora vediamo come si effettua una query su una tabella di una sorgente dati usando SQL. Esistono
diversi modi per estrarre informazioni da una sorgente Dati, uno di questi consiste nel passare
uno statement SQL direttamente al driver ODBC.
/* Ricordarsi di importare odbc_sql/2 */
| ?- odbc_sql(ListaVal,SQLStmt,RigaRisultato).
26
Capitolo 3: Architettura del sistema realizzato
3.2 Strumenti di connessione
Il significato dei tre parametri è:
•
ListaVal: E’ una lista di valori corrispondenti ai parametri indicati nell’ SQL statement
dal simbolo ? (dall’esempio sarà più chiaro). Tale parametro se non utilizzato sarà
rappresentato da una lista vuota;
•
SQLStmt: E’ la query di estrazione dei dati in SQL;
•
RigaRisultato: E’ la variabile in cui vengono messi i risultati ottenuti.
Esempio:
/* Elencare i titoli dei Supporti che sono dvd dal database MioDB */
|
?-
odbc_sql([‘dvd’],’SELECT
titolo
FROM
Supporto
WHERE
tipo
=?’,TitRis).
/* Risultati */
TitRis = Il Padrino;
TitRis = 8 mile
3.2.2 L’interfaccia JDBC
Un pregio di Java è la capacità di costruire applicazioni database client/server indipendenti dalla
piattaforma. Caratteristica ottenuta grazie alla Java Database Connectivity (JDBC) [8].
Siccome uno dei problemi principali dei database è stato il conflitto sulle specifiche fra le società
produttrici, l’interfaccia JDBC è stata concepita per essere indipendente dalla piattaforma, quindi
mentre si programma non è necessario preoccuparsi del database che si sta utilizzando.
Per consentire l’indipendenza dalla piattaforma, JDBC mette a disposizione un gestore dei driver
che gestisce dinamicamente tutti gli oggetti driver di cui avranno bisogno le query eseguite sul
database. Per cui se dovremo connetterci con tre database di tre diversi fornitori, ci serviranno tre
oggetti driver diversi. Gli oggetti driver si registrano presso il gestore dei driver al momento del
caricamento utilizzando il metodo static Class.forName().
Per aprire un database bisogna creare un “URL del database” che specifichi:
1. che si sta utilizzando JDBC, con “jdbc”
27
Capitolo 3: Architettura del sistema realizzato
3.2 Strumenti di connessione
2. il “sotto protocollo”: il nome del driver o il nome del meccanismo per la connettività del
database.
3. l’identificatore del database.
Ad esempio, per connettersi tramite il sottoprotocollo ODBC a un database identificato dal nome
“pippo”, l’URL del database potrebbe essere:
String url = “jdbc:odbc:pippo”;
Impostato l’URL del database, lo si passa al metodo static DriverManager.getConnection() il
quale restituisce un oggetto Connection che può essere utilizzato per interrogare e manipolare il
database. Una volta stabilita la connessione con quest’ultimo metodo si può utilizzare l’oggetto
Connction
risultante per creare un oggetto Statement mediante il metodo creteStatement().
Con lo Statement che ne risulta, si può chiamare executeQuery(), passandogli una stringa che
contiene un enunciato SQL.
Il metodo executeQuery() restituisce un oggetto ResultSet, che è un iteratore contenente i
record che sono il risultato della query che possono essere estratti utilizzando opportuni metodi
(getInt(), getString(), …).
Un semplice esempio di connessione ad un database utilizzado i driver jdbc è riportato nella
figura 8.
28
Capitolo 3: Architettura del sistema realizzato
3.2 Strumenti di connessione
Figura 8. Esempio connessione ad un db con JDBC.
3.3 Java2Flora e la classe XSBFlora
Java2Flora [9] è lo strumento utilizzato per poter richiamare comandi Flora2 da Java. Per
accedere ad XSB da Java, Java2Flora usa interprolog mediante una porzione di codice
addizionale, contenuta nel file jutils.P, che è utilizzato per inizializzare la shell Flora2.
Interprolog permette di chiamare un qualsiasi predicato XSB Prolog da Java, attraverso un
oggetto PrologEngine.
Nel package com.ontotext.flora2 si trova la classe XSBFlora, attraverso la quale è possibile
valutare arbitrarie espressioni Prolog e F-logic. La classe XSBFlora è sottoclasse di
java.lang.Object ed il suo costruttore ha un singolo argomento, che rappresenta la root di XSB.
Nella variabile di classe XSBFlora.sFloraRootDir bisogna settare la root di flora2.
Nelle figure 9-10-11 vengono riportate le specifiche della classe XSBFlora
29
Capitolo 3: Architettura del sistema realizzato
3.3 Java2Flora e la classe XSBFlora
Figura 9. Attributi di classe della classe XSBFlora.
Figura 10. Sintassi del costruttore della classe XSBFlora.
Figura 11. I metodi della classe XSBFlora.
30
Capitolo 3: Architettura del sistema realizzato
3.3 Java2Flora e la classe XSBFlora
Nella figura 12 viene riportato un semplice esempio di utilizzo della classe XSBFlora
import com.declarativa.interprolog.TermModel;
...
// Istanzio la variabile flora di classe XSBFlora
XSBFlora flora = new XSBFlora(XSBRoot);
...
// Interrogo flora chiedendo di darmi tutte le istanze della
// classe someClass
Object[] bindings = flora.FLogicCommand("Inst : someClass.");
for (int i = 0; i < bindings.length; i++) {
TermModel tm = (TermModel)bindings[i];
System.out.println("Inst="+flora.findValue(tm,"Inst"));
}
Figura 12. Utilizzo della classe XSBFlora.
31
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4. Integrazione di sorgenti dati mediante ontologia
Il lavoro svolto per questa tesi si pone nell’ambito dell’integrazione di sorgenti dati eterogenee.
Nei prossimi paragrafi saranno presentati i passi necessari alla realizzazione di questo lavoro.
4.1 Analisi del problema
L’azienda S.I.Re.Na. possiede una serie d’informazioni su progetti di ristrutturazione e
manutenzione d’edifici. In particolare tale informazioni riguardano il progetto di ristrutturazione
e rivalutazione dei quartieri spagnoli [18, 19, 20, 21]. E’ stato richiesto al nostro team di creare
un sistema in grado integrare tutte le risorse possedute dall’azienda e di fornire un servizio di
supporto che permetta di tener conto della trasformazione dei bassi nel tempo e aiuti in tal modo
l’azienda a decidere a quali edifici è più urgente apportare le ristrutturazioni.
La parte che riguarda questa tesi è l’integrazione della risorsa posseduta da S.I.Re.Na.. In
particolare le risorse possedute dall’azienda sono:
•
un database access (sirena_struttura.mdb) gestito mediante un applicazione visual basic
contenente i dati relativi ai singoli condomini (paragrafo 4.2);
•
un database in Postgres gestito mediante un’applicazione java contenente i dati relativi ai
libretti di manutenzione associati ad un edificio (paragrafo 4.4);
•
alcuni documenti cartacei, sempre ognuno relativo ad un edificio, come la DIA (Denuncia
Inizio Attività), la relazione tecnica asseverata e l’approvazione dei beni culturali. Per
gestire questi documenti cartacei di cui non esiste alcuna implementazione elettronica ne
è stata realizzata una per gestirli nel modo più efficace (paragrafo 4.7).
Si è scelta la strada dell’integrazione perché consente di non distruggere le strutture di
archiviazione presenti, nel nostro caso gli archivi S.I.Re.Na., e non obbliga il personale abituato a
ragionare in termini della vecchia tipologia di archiviazione a dover imparare ad utilizzarne una
nuova.
32
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.1 Analisi del problema
Dunque il lavoro svolto (presentato nei prossimi paragrafi) al fine di riuscire ad integrare le
risorse possedute dall’azienda S.I.Re.Na. è stato:
•
La costruzione di un’ontologia per il database access sirena_struttura.mdb (paragrafo 4.3)
•
La costruzione di un’ontologia per il database Postgres contenente i libretti di
manutenzione (paragrafo 4.5)
•
L’integrazione delle ontologie dette nei precedenti due punti (paragrafo 4.6).
•
La realizzazione dei nuovi database con le rispettive ontologie da integrare con quella
detta al punto precedente (paragrafo 4.7).
4.2 Il Database Access della società S.I.Re.Na.
Il database Access posseduto dall’azienda S.I.Re.Na. contiene le informazioni relative ad un
condominio che partecipa al progetto di ristrutturazione del territorio ricoperto dall’azienda
S.I.Re.Na. Un approssimazione del modello E/R del database è rappresentato in figura.
.
Figura 13. Approssimazione del modello E/R del database access.
33
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.2 Il Database Access della società S.I.Re.Na.
Nel diagramma E/R sono stati omessi gli attributi perché il loro numero è molto elevato è sarebbe
stato impossibile rappresentarli in figura.
Le entità CONDOMINIO, RICHIEDENTE, CIRCOSCRIZIONE, TECNICO, IMPRESA, FOTO
sono rispettivamente realizzate nel database con le tabelle condomini, richiedenti, circoscrizione,
tecnici, imprese, archivio foto. L’entità VISITE invece è realizzata nel DB con le due tabelle
visite_cpt e visite_sirena.
Adesso andiamo ad analizzare le relazioni:
1. la relazione “ha_chiesto_lavori” è implementata mediante la chiave esterna della tabella
condominio sulla tabella richiedenti.
2. la relazione “appartiene_ha” è implementata mediante la chiave esterna della tabella
condominio sulla tabella circoscrizione..
3. la relazione “è_riparato_da” è implementata mediante la chiave esterna della tabella
condominio sulla tabella imprese.
4. la relazione “è corredato_di” è implementata mediante la chiave esterna della tabella
archivio_foto sulla tabella condominio.
Figura 14. Relazioni dei punti 1-2-3-4.
34
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.2 Il Database Access della società S.I.Re.Na.
5. la relazione “partecipa_ai_lavori” è implementata mediante le chiavi esterne della tabella
condominio sulla tabella tecnici.
Figura 15. Relazione dei punto 5.
6. la relazione “sono_stati_fatti_sopralluoghi” è tradotta dalle chiavi esterne delle tabelle
visite_sirena e visite_cpt sulla tabella condominio.
Figura 16. Relazione del punto 6.
35
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.3 Un’Ontologia per rappresentare i metadati del database Access
4.3 Un’Ontologia per rappresentare i metadati del database Access
Vedremo adesso come è stata strutturata l’ontologia che rappresenta i metadati del database
access.
4.3.1 Classi e corrispondenze
Per meglio progettare la struttura dell’ontologia è stata
realizzata una versione in Protégé da cui sono tratte le
immagini presenti in questo paragrafo; si ricordi
comunque che l’ontologia è stata realizzata in Flora2 e che
il codice è presentato in appendice.
In
questo
paragrafo
vedremo
le
classi
principali
dell’ontologia e la loro corrispondenza nel database.
Come si evince dalla figura 17 l’ontologia creata è
abbastanza semplice da capire, una classe interessante è
comunque la classe Tecnici (figura 18), che ha un attributo
“ruolo” che può essere istanza multipla della classe Ruoli.
Questo vuol dire che un Tecnico può avere più ruoli
ovvero può essere Progettista, Direttore_Lavori ecc.
Figura 17. L’ontologia del db access.
Figura 18. Attributo Ruolo della classe Tecnici.
36
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.3 Un’Ontologia per rappresentare i metadati del database Access
La classe principale dell’ontologia è Edifici (figura 19) i cui attributi sono alcuni degli attributi
(riguardanti l’edificio) contenuti nella tabella condominio del database. La classe Edifici ha
inoltre l’attributo ha_progetto che può essere istanza della classe Progetto che contiene tutti gli
altri dati dalla tabella condominio.
Figura 19. L’attributo “ha progetto della” classe Edifici.
4.4 Il Database Postgres dei libretti di manutenzione
Il database Postgres posseduto dall’azienda S.I.Re.Na. contiene le informazioni relative al libretto
di manutenzione di un edificio. Prima di cominciare a spiegare come è strutturato tale database è
necessario però definire cosa sia un libretto di manutenzione. Brevemente possiamo dire che un
libretto di manutenzione [22] relativo ad un edificio permette di tener traccia del suo piano di
manutenzione ed è composto da due sezioni:
•
la sezione “Anagrafe”, che riporta i dati caratteristici dell’edificio (geometrici,
morfologici, tipologici, tecnologici, ecc.) .
•
la sezione “Programmazione della manutenzione”, suddivisa a sua volta in due
sottosezioni costituite da altrettanti elaborati:
37
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.4 Il Database Postgres dei libretti di manutenzione
o il manuale di manutenzione (nel quale viene esplicitato come intervenire),
composto da schede di intervento, nelle quali si individuano le caratteristiche
salienti di ogni attività di manutenzione prevista (fasi di lavoro, risorse da
impiegare, provvedimenti nei riguardi della sicurezza, ecc.);
o il programma di manutenzione (che indica quando intervenire), strutturato come
un planning nel quale è indicato il calendario degli interventi programmati, e nel
quale ognuna delle attività comprese nel manuale di manutenzione ha la sua
collocazione temporale.
Figura 20. Una parte della sezione “Anagrafe” del libretto di manutenzione.
Data la definizione di libretto di manutenzione, possiamo vedere come è struttura il database
posseduto da S.I.Re.Na.. In particolare nella figura 21 viene riportato il modello E/R del
database.
38
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.4 Il Database Postgres dei libretti di manutenzione
Figura 21. modello E/R del database “libretti di manutenzione”.
Nel diagramma E/R sono stati omessi gli attributi perché il loro numero è molto elevato è sarebbe
stato impossibile rappresentarli in figura.
Andiamo ad analizzare lo schema del database
1. Nell’implementazione del database l’entità edificio viene tradotta con 11 tabelle, essendo
i dati inerenti un edificio troppi per essere gestiti con una sola tabella. La tabella
principale delle 11 è Edifici-dati_generali; tutte le altre si collegano a queste tramite
l’attributo di chiave esterno cod_sirena. Le 11 tabelle sono:
a. Edifici-dati_catastali
b. Edifici-dati_generali
c. Edifici-dati_quantitativi
d. Edifici-dati_storici
e. Edifici-dati_tecnologici1
f. Edifici-dati_tecnologici2
39
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.4 Il Database Postgres dei libretti di manutenzione
g. Edifici-dati_tecnologici3
h. Edifici-dati_tecnologici_prospetti
i. Edifici-dati_tipologici
j. Edifici-dati_urb_normativi
k. Edifici-inq_territoriale
Figura 22. Realizzazione dell’entità EDIFICIO nel database
2. L’entità FOTO database è implementata mediante 6 tabelle, per meglio specificare
l’ambito di riferimento. Foto è la tabella principale, tutte le altre, ad eccezione di
Foto_prospetti, si collegano ad Edifici-dati_generali tramite l’attributo di chiave esterno
40
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.4 Il Database Postgres dei libretti di manutenzione
cod_sirena, Foto_prospetti invece si collega alla tabella Edifici-dati_tecnologici_prospetti.
Le tabelle sono:
a.
b.
c.
d.
e.
f.
Foto
Foto_altre
Foto_inquadramento_planimetrico
Foto_piante
Foto_sezioni
Foto_prospetti
Figura 23. Realizzazione dell’entità FOTO nel database.
41
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.4 Il Database Postgres dei libretti di manutenzione
3. Le entità TIPO ELEMENTO TECNICO, FUNZIONE, TIPO MATERIALE e
MATERIALE vengono implementate nel database con le tabelle Tipi_elementi_tecnici,
Funzioni, Tipi_materiali e Materiali; le relazioni “è_composto_di” e “può_essere_di”
vengono tradotte mettendo un vincolo di chiave esterna, in particolare viene aggiunto un
attributo nella tabella che traduce l’entità del lato N della relazione. La relazione
“comprende” viene tradotta con la tabella Materiali_dei_tipi
Figura 24. Realizzazione dell’entità TIPO ELEMENTO TECNICO, FUNZIONE, TIPO_MATERIALE e
MATERIALE nel database.
42
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.4 Il Database Postgres dei libretti di manutenzione
4. L’entità SOLUZIONE RICORRENTE corrisponde nel database implementato a
Soluzioni_tipi_elementi_tecnici e la relazione “prevede”, viene implementata tramite
l’attributo di chiave esterna id_tipi_elementi_tecnici. La relazione “caratterizzata_da”
viene tradotta mediante la tabella Composizione_soluzione
Figura 25. Realizzazione dell’entità SOLUZIONE RICCORENTE nel database
43
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.4 Il Database Postgres dei libretti di manutenzione
5. l’entità ANOMALIA corrisponde alla tabella Anomalie del db implementato; la relazione
“si_presenta_con” è tradotta dalla chiave esterna della tabella Anomalie sulla tabella
Tipi_materiali. Praticamente, data un’anomalia, essa si può presentare con un solo tipo di
materiale e quindi con una sola funzione essendo un tipo di materiale collegato con una
sola funzione
Figura 26. Realizzazione dell’entità ANOMALIA nel database
44
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.4 Il Database Postgres dei libretti di manutenzione
6. l’entità scheda di diagnosi viene tradotta dalla tabella Schede_diagnosi, le relazioni
“si_riferisce_a” e “fa_riferimento_a” sono tradotte mettendo chiavi esterne in
Schede_diagnosi; in particolare la relazione si_riferisce_a viene tradotta con una chiave
esterna su Edifici-dati_tecnologici_prospetti, essendo una scheda di diagnosi riferita ad un
prospetto di un edificio; quindi data una scheda di diagnosi, essa fa riferimento ad una
data soluzione ricorrente di un dato tipo di elemento tecnico (ad es. la soluzione ppv1
delle pareti perimetrali verticali) posta su un dato prospetto di un dato edificio.
Figura 27. Realizzazione dell’entità SCHEDA DI DIAGNOSI nel database
45
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.4 Il Database Postgres dei libretti di manutenzione
7. L’entità OPERAZIONE è tradotta nel database dalla tabella Operazioni, mentre la
relazione “è_riparata_da” è tradotta con una chiave esterna di Operazioni sulla tabella
Anomalie.
Figura 28. Realizzazione dell’entità OPERAZIONE nel database
8. l’entità SCHEDA OPERAZIONE viene descritta dalla tabella Schede_operazioni,
Schede_interventi e Schede_controlli; Schede_operazioni è la tabella madre mentre le
altre due sono sottotabelle e descrivono rispettivamente le operazioni di intervento e le
operazioni di controllo. La relazione “è_descritta_da” è tradotta da una chiave esterna in
Schede_interventi o Schede_controlli. In definitiva, ciascun tipo di operazione, sia esso
un controllo o un intervento (ad es. il rifacimento dell’intonaco) può essere eseguito in
46
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.4 Il Database Postgres dei libretti di manutenzione
vari modi; ciascuna modalità di esecuzione è descritta da un record in Schede_controlli o
Schede_interventi
Figura 29. Realizzazione dell’entità SCHEDA OPERAZIONE nel database
9. La relazione “presenta_la_scelta_di” viene tradotta nel database mediante la tabella
Scelta_operazioni che presenta una chiave esterna sulla tabella Schede_diagnosi, una
chiave esterna sulla tabella Operazioni e una chiave esterna sulla tabella
Schede_operazioni (quest’ultima è garantita via software), quindi, data una scheda di
diagnosi ciascun record della tabella Scelta_operazioni che fa riferimento a tale scheda
indica quale operazione è stata scelta e con quale modalità essa viene eseguita (si fa
47
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.4 Il Database Postgres dei libretti di manutenzione
riferimento cioè ad un record di Schede_interventi e Schede_controlli a seconda che
l’operazione sia un intervento o un controllo).
Figura 30. Realizzazione della “relazione presenta_la_scelta di” nel database.
10. Nel db vi sono poi altre tre tabelle: Info_libretto, Planning e Validazione che per
semplicità non sono state indicate nel diagramma E/R. Tutte e tre le tabelle hanno una
chiave esterna su Edifici-dati_generali. In particolare:
a. Info_libretto indica informazioni di carattere generale sul libretto (progettista,
revisione, ..).
b. Planning indica il planning ottenuto per l’edificio in esame e che ha una chiave
esterna anche sulla tabella Operazioni.
c. Validazione indica il giudizio espresso dal tecnico sul libretto
48
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.4 Il Database Postgres dei libretti di manutenzione
Prima di terminare però, occorre fare ancora alcune considerazioni. Per quanto riguarda i punti 3
e 4 vale quindi che: dato un tipo di elemento tecnico (ad es. una parete perimetrale verticale), essa
è formata da un numero preciso di funzioni; ogni funzione di detto tipo di elemento tecnico può
essere di vari tipi materiale (ad es. pittura), ciascuno dei quali prevede vari materiali (pittura
acrilica, pittura al quarzo e cosi via). Data una istanza di un tipo di elemento tecnico (ad es. la
parete perimetrale verticale X del prospetto Y dell’edificio Z), essa è di tipo ricorrente (o
soluzione ricorrente); ogni soluzione ricorrente prevede un certo numero di funzioni tra quelle
possibili per l’elemento tecnico, e ogni funzione è fatta di un certo tipo di materiale.
Una soluzione ricorrente di un tipo di elemento tecnico specifica il tipo di materiale per ogni
funzione, ma non il materiale; ad es. se ppv1 è la soluzione ricorrente per le pareti perimetrali
verticali che prevede la pittura per la funzione finitura esterna, essa non mi specifica che tipo di
pittura; per fare ciò nel database (non c’è nel diagramma ER) è presente la tabella
Specifiche_elementi_tecnici la quale, data una scheda di diagnosi, specifica quale è il materiale di
ogni funzione della soluzione ricorrente cui fa riferimento la scheda stessa
4.5 Un’Ontologia per rappresentare i metadati del libretto di manutenzione
Vedremo adesso come è stata strutturata l’ontologia che rappresenta i metadati del libretto di
manutenzione presenti nel database Postgres.
4.5.1 Le classi
Per meglio progettare la struttura dell’ontologia è stata realizzata una versione in Protégé da cui
sono tratte le immagini presenti in questo paragrafo; si ricordi comunque che l’ontologia è stata
realizzata in Flora2 e che il codice è presente nell’appendice
49
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.5 Un’Ontologia per rappresentare i metadati del libretto di manutenzione
Figura 31. L’ontologia del database Postgres.
La classe principale dell’ontologia è Dati_edifici in quanto tutte le altre classi ad eccezione di
Anomalia sono sue sottoclassi. La classe Dati_edifici è astratta e contiene il solo attributo
cod_sirena che ereditano tutte le sue sottoclassi. Le sottoclassi di Dati_edifici (Figura 32) sono
Validazione, Dati_anagrafici, Info_libretto, Planning, schede_di_diagnosi, Dati_multimediali e
Schede_operazioni.
Figura 32. La classe Dati_Edifici e le sue sottoclassi.
50
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.5 Un’Ontologia per rappresentare i metadati del libretto di manutenzione
La classe Dati_anagrafici contiene tutti i dati anagrafici corrispondenti ad un determinato
edificio
e
le
sue
sottoclassi
Edifici_dati_quantitativi,
(figur
33
Edifici_dati_storici,
Edifici_dati_tecnologici_prospetti,
e
34)
sono:
Edifici_dati_inq_territoriale,
Edifici_dati_catastali,
Edifici_dati_tecnologici1,
Edifici_dati_generali,
Edifici_dati_tecnologici2,
Edifici_dati_tecnologici3, Edifici_dati_urbanistici_normativi, Edifici_dati_tipologici.
Figura 33. La classe Dati_anagrafici e le sue sottoclassi (parte 1di2).
Figura 34. La classe Dati_anagrafici e le sue sottoclassi (parte 2di2).
La classe Dati_multimediali contiene tutti i dati multimediali come le foto ( o video se in futuro
servissero) e le sue sottoclassi sono Foto e Video
51
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.5 Un’Ontologia per rappresentare i metadati del libretto di manutenzione
Figura 35. La classe Dati_multimediali e le sue sottoclassi.
La classe Schede_operazioni ha due sottoclassi che sono: Schede_interventi e Schede_controlli.
Figura 36. La classe Schede_operazioni e le sue sottoclassi.
4.5.2 Corrispondenze fra le tuple del DB e le classi Flora2 dell’ontologia
Nel paragrafo precedente sono state riportate le classi che compongono l’ontologia e la loro
gerarchie in questo paragrafo verranno
invece riportate le corrispondenze tra
classi
e
tabelle
del
database.
In
particolare in tale corrispondenze per
ogni tabella del database esiste una
classe corrispondente nell’ontologia i
cui slot coincidono con gli attributi
della suddetta tabella. Questo implica
che ogni tupla di una tabella presente
nel database corrisponde ad un oggetto
(o istanza) dell’ontologia.
Figura 37. Corrispondenze Classe-Tabella, slot-attributo.
52
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.6 Integrazione di Ontologie
4.6 Integrazione di Ontologie
Per effettuare il processo d’integrazione delle sorgenti dati possedute da S.I.Re.Na è stata
costruita un’ontologia di riferimento che fosse in grado di “catturare” attraverso una
rappresentazione tutte le risorse possedute dall’azienda [2]. In particolare l’ontologia di
riferimento è stata definita mediante l’integrazione e il riuso [23] dell’ontologia ricavata dai
metadati del database Access con quella costruita a partire dai metadati del database Postgress.
Esistono diversi modi per integrare ontologie, supponiamo di avere due ontologie p e q come in
figura 38.
Figura 38. Due generiche ontologie.
Come scritto da S. Pinto [24] è possibile integrare ontologie in tre diversi modi:
1. creazione di una nuova ontologia riutilizzando le esistenti. In pratica viene creata una
terza ontologia alla quale “attaccare” le precedenti due;
Figura 39. Integrazione di ontologie: creazione.
53
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.6 Integrazione di Ontologie
2. fusione delle ontologie. Le due ontologie vengono fuse in una soltanto utilizzando una
classe comune. Se le classi comuni alle due ontologie hanno attributi diversi all’ora nel
momento in cui le due ontologie vengono fuse (facendo collassare le due classi comuni)
la nuova classe risultane avrà gli attributi di ambedue le classi;
Figura 40. Integrazione di ontologie: fusione.
3. uso, l’integrazione avviene mediante un’applicazione che fa da mediatore utilizzando
regole ponte per passare da un’ontologia all’altra.
Figura 41. Integrazione di ontologie: uso.
54
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.6 Integrazione di Ontologie
Una considerazione molto importante da fare è che le integrazione 1 e 2 (creazione e fusione)
sono due tipi di integrazioni completamente diverse dalla 3 (uso): nelle prime due dopo
l’integrazione le ontologie integrate perdono la propria identità, mentre con il terzo metodo (uso)
le ontologie integrate dopo il processo d’integrazione mantengono la propria identità.
Il tipo di integrazione utilizzato in questa tesi è stato quello della fusione, infatti una volta
costruite le due ontologie (quella per il database access e quella per il database Postgres) si è visto
che queste avevano due classi molto “simili”. In particolare le due classi erano Edifici (per
l’ontologia ricavata dal db Access) e Edifici_dati_generali (per l’ontologia ricavata dal db
Postgres) che sono state fuse formandone una sola avente attributi pari all’unione degli attributi
delle due.
Nel processo d’integrazione sono state affrontate le problematiche legate all’adattamento delle
sorgenti allo schema globale rappresentato dall’ontologia sopra descritta. Il problema era che
alcuni degli attributi chiave di un database erano rappresentati con un altro tipo di dato nell’altro
database, oppure una chiave di un database era riportata come coppia di chiavi nell’altro DB. Ad
esempio nel DB Postgres la chiave di molte tabelle è l’attributo cod_sirena che corrisponde nel
DB Access all’unione delle due chiavi protocollo e anno_protocollo. Il problema era che
cod_sirena è di tipo varchar, mentre protocollo ed anno protocollo sono di tipo intero, è stato
quindi costruito un piccolo modulo XSB crea_cod_sirena in grado di costruire il cod_sirena a
partire dal numero di protocollo e l’anno del protocollo di un condominio presente nel database
Access. Di seguito viene riportato il modulo crea_cod_sirena che crea il cod_sirena nella
variabile Cod:
crea_cod_sir(Protocollo,Anno,Cod):int2char(Anno,Str),
% Anno viene trasformato da intero a stringa di caratteri Str
str_cat(-,Str,Str3),
% Ad Str viene concatenate il carattere – che diventa Str3
int2char(Protocollo,Str2), % Protocollo è trasformato da intero a stringa di caratteri Str2
str_cat(Str2,Str3,Cod). % Ad Str2 viene concatenata Str3
Il modulo crea_cod_sirena utilizza il modulo int2char che permette di trasformare un intero in
stringa di caratteri:
55
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.6 Integrazione di Ontologie
int2char(Int,Char):term_to_codes(Int,_L1), %
append([39],_L1,_L2),
%
append(_L2,[39],_L3),
%
codes_to_term(_L3,Char).
Metto in _L1 lista di valori ASCII che rappresenta variabile Int
Per essere trasformata in stringa _L1 viene racchiusa dai
caratteri ‘ ’ (il cui codice ASCII è 39) e diviene _L3
% Traformo _L3 da lista dei codici ASCII a stringa
4.7 Introduzione di nuovi metadati
Tra le risorse messe a disposizione dall’azienda S.I.Re.Na. ce ne sono alcune che sono solo
documenti cartacei. Tali documenti ognuno relativo ad un edificio, sono la DIA (Denuncia Inizio
Attività), relazione tecnica asseverata, approvazione beni culturali e popolamento dei bassi. Sono
stati proposti dei database in grado di gestire tali documenti.
4.7.1 Database DIA, Relazione Tecnica, Approvazione Beni Culturali
Si.Re.Na dispone dei documenti DIA, relazione tecnica, approvazione beni culturali in formato
elettronico (documenti word, excel o pdf) e siccome all’azienda solitamente importa sapere solo
se questi documenti sono presenti oppure no, si è pensato di costruire un semplice db che
permetta di tener traccia di dove sono locati sul disco questi file.
La struttura del database è banale, esso è composto di tre tabelle una per tener tracce delle
denuncie di inizio attività (DIA), un’altra per le relazioni tecniche ed una per le approvazioni dei
beni culturali, ogniuna delle tabelle ha tre attributi:
1. cod_sirena che permette di associarlo ad un edificio
2. id che è la chiave
3. url che contiene il percorso del file
Nel capitolo 5 è presentata l’interfaccia costruita in java per l’accesso a tale database.
Anche l’ontologia ricavata come si vede in figura 42 è molto banale, si compone di tre classi
Rel_Tecnica, DIA e App_Beni_Cult, ogniuna delle quali ha i tre attributi cod_sirena, id e url.
56
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.8 Introduzione di nuovi metadati
Figura 42. Ontologia dei documenti cartacei in Protégé.
4.7.2 Database popolamento bassi
Sempre nell’ambito della ristrutturazione e rivalutazione dei quartieri spagnoli S.I.Re.Na. ha in
programma di fare una valutazione del popolamento dei bassi. L’azienda effettuerà una sorta di
censimento facendo compilare ad ogni famiglia locata in un basso una scheda contenete alcune
domande. Ci è stato chiesto dunque di realizzare un database in grado di contenere le
informazioni che verranno un giorno acquisite. Il database è stato costruito a partire da suddette
schede e anche in questo caso la sua struttura è abbastanza semplice, come si vede in figura 43
esso si compone di dieci tabelle. La tabella principale è localizzazione che contiene informazioni
come l’indirizzo, l’edificio a cui il basso fa riferimento e così via.
Figura 43. struttura del database di popolamento e destinazione d’uso bassi.
57
Capitolo 4: Integrazione di sorgenti dati mediante ontologia
4.8 Introduzione di nuovi metadati
Nel capitolo 5 è presentata l’interfaccia costruita in java per l’accesso a tale database.
Una definizione più dettagliata del database è definita nel lavoro del mio collega riportato in
bibliografia [15].
58
Capitolo 5: Interfaccia del sistema ed esempi di funzionamento
5. Interfaccia del sistema ed esempi di funzionamento
In questo capitolo viene presentata l’interfaccia realizzata per accedere alle risorse integrate
tramite l’ontologia ed un esempio di funzionamento del sistema realizzato.
5.1 L’interfaccia del sistema
La parte grafica dell’interfaccia utente è stata realizzata usando il linguaggio Java della Sun
Microsystems, ed in particolare, la libreria Swing. Il programma è composto da una singola
finestra con la quale l’utente può interagire. Il layout della finestra (figura 44) è strutturato come
segue: nella parte sinistra appare un elenco di edifici identificati dal numero_protocollo-anno
mentre nella parte destra appare la barra dei componenti composta da linguette selezionabili
chiamate tab, ognuna delle linguette rappresenta un insieme distinto di informazioni da
visualizzare. Selezionando un edificio dalla tabella sulla sinistra e cliccando su una linguetta e
possibile visualizzare un insieme di informazioni su di un edificio.
Barra dei componenti
Elenco degli edifici
rappresentati da
numero_protocollo-anno
Figura 44. Struttura dell’interfaccia costruita.
59
Capitolo 5: Interfaccia del sistema ed esempi di funzionamento
5.1 L’interfaccia del sistema
Come si vede in figura alcuni edifici sono evidenziati in giallo, ciò significa che sono edifici che
hanno stipulato un libretto di manutenzione
Le linguette selezionabili del tab sono otto e sono:
•
Dati Generali: sono alcuni dati riguardanti l’edificio (in origine questi dati si trovano nel
db Access);
•
Dati Generali – LM: sono alcuni dati riguardanti il libretto di manutenzione associato
all’edificio (in origine questi dati si trovano nel db Postgres);
•
Dati Catastali – Storici: sono i dati catastali e storici riguardanti l’edificio selezionato (in
origine questi dati si trovano nel db Postgres);
•
Imprese: sono i dati riguardanti le imprese che partecipano al rifacimento dell’edificio (in
origine questi dati si trovano nel db Access);
•
Rel. Tecnica Ass – DIA – Beni Culturali: selezionando questa linguetta è possibile
visualizzare se sono presenti i file riguardanti la relazione tecnica asseverata, la denuncia
di inizio attività e l’approvazione dei beni culturali ed eventualmente di visualizzarli
(questo è uno dei nuovi db realizzati).
•
Inserimento caratt. e dest. d’uso bassi: selezionando questo tab è possibile inserire
informazioni riguardanti la destinazione d’uso di un basso facente parte dell’edificio
selezionato (questo è uno dei nuovi db realizzati).
•
Visualizza/Modifica info bassi: selezionando questa linguetta è possibile modificare le
info di un basso inserito utilizzando il tab spigato al punto precedente.
•
Bassi 3D – Gis: in questo tab sono presenti i tasti per lanciare il sistema GIS e la
visualizzazione 3D di un basso
5.2 Esempio di funzionamento
Quando il programma viene avviato la prima
schermata
che
ci
compare
è
quella
di
caricamento dei dati (figura 45). Una volta che
ciò è avvenuto il pulsante OK si attiverà e
cliccando su di esso si potrà andare avanti.
60
Figura 45. Il caricamento dei dati.
Capitolo 5: Interfaccia del sistema ed esempi di funzionamento
5.2 Esempio di funzionamento
La situazione che ci apparirà dopo il caricamento dei dati (figura 46) è la seguente: la linguetta
selezionata di default è Dati Generali nella quale però non compaiono inizialmente dati perchè
bisogna ancora selezionare un edificio dalla tabella alla sinistra. Inoltre si può notare che gli
edifici contenuti nella tabella di sinistra non sono ordinati alfabeticamente, questo lo si può
ottenere cliccando sull’intestazione della tabella.
Cliccando gli edifici si
ordinano
Figura 46. La schermata dopo il caricamento dei dati.
Se si prova a cliccare su una linguetta senza aver
selezionato
un
edificio
viene
lanciato
un
messaggio di avvertimento (figura 47).
Figura 47. Messaggio d’avvertimento.
61
Capitolo 5: Interfaccia del sistema ed esempi di funzionamento
5.2 Esempio di funzionamento
Selezionando la linguetta Dati Generali – LM possiamo accedere ai dati riguardanti il libretto di
manutenzione associato all’edificio come in figura 48.
Figura 48. Il pannello Dati-Generali LM
Se l’edificio selezionato non ha un libretto di manutenzione la schermata che appare è quella
mostrata in figura 49.
Figura 49. L’edificio non ha un libretto di manutenzione.
62
Capitolo 5: Interfaccia del sistema ed esempi di funzionamento
5.2 Esempio di funzionamento
Lo stesso comportamento della linguetta Dati Generali – LM lo ha il tab Dati Catastali – Storici,
anche in quest’ultimo essendo i dati prelevati dal db Postgres, se l’edificio selezionato non ha un
libretto di manutenzione alla selezione del tab comparirà la scritta “Libretto di Manutenzione non
presente”.
Il tab Imprese contiene le informazioni riguardanti l’impresa che si occupa dei lavori nell’edificio
(figura 50).
Figura 50. La linguetta Imprese.
Cliccando sulla linguetta Rel. Tecnica Ass – DIA – Beni Culturali è possibile visualizzare la
relazione tecnica osseverata, la denuncia di inizio attività e l’approvazione dei beni culturali ed
eventualmente di visualizzarli (figura 51).
63
Capitolo 5: Interfaccia del sistema ed esempi di funzionamento
5.2 Esempio di funzionamento
Figura 51. Il tab Rel. Tecnica Ass – DIA – Beni Culturali.
L’uso di questa parte dell’interfaccia è molto semplice: spuntando si o no è possibile indicare se
il documento in questione è presente,
dopodiché cliccando sul tasto seleziona
file e possibile aprire una finestra di
dialogo (figura 52) nella quale esplorare
le
risorse
del
computer
locale
e
selezionare il file desiderato.
Cliccando
invece
sul
tasto
Apri
Relazione Tecnica oppure sul tasto Apri
Dia oppure ancora sul tasto Apri File
Approvazione è possibile lanciare il
documento selezionato.
Figura 52. La finestra di dialogo per selezionare il file
64
Capitolo 5: Interfaccia del sistema ed esempi di funzionamento
5.2 Esempio di funzionamento
Cliccando invece sul tab Inserimento caratt. e dest. d’uso bassi (figura 53) è possibile inserire
informazioni riguardanti la destinazione d’uso di un basso facente parte dell’edificio selezionato.
In pratica questo tab contiene un semplice form riguardante il popolamento e la destinazione
d’uso dei bassi presenti nell’edificio da compilare. Se si osserva bene la figura sottostante si
noterà che le voci Ricadente nell’edificio sito in (Via, Piazza, ecc.) e n. civico sono già compilate
e corrisponde all’indirizzo dell’edificio selezionato sulla sinistra, questo per evitare che l’utente
possa sbagliare ad immettere i dati.
Il form continua
Figura 53. Il tab Inserimento caratt. e dest. d’uso bassi.
In fine selezionando la linguetta Visualizza/Modifica info bassi (figura 54) è possibile modificare
le info di un basso inserito utilizzando il tab precedente (Inserimento caratt. e dest. d’uso bassi).
Come si vede nella figura sottostante, nella parte alta del tab è presente una tabella che riassume
tutti i bassi presenti nell’edificio, mentre nella parte bassa sono riportate le informazioni
riguardanti la locazione del basso selezionato nella tabella.
65
Capitolo 5: Interfaccia del sistema ed esempi di funzionamento
5.2 Esempio di funzionamento
Figura 54. Il tab Visualizza/Modifica info bassi.
Con il tasto Modifica Localizzazione Basso è possibile modificare le info di localizzazione del
basso, mentre premendo il tasto
Visualizza le altre info si aprirà una
finestra di dialogo (figura 55) in cui ci
sono le altre informazioni riguardante
il basso, inoltre in tale finestra è anche
possibile modificare le informazioni
del basso.
Figura 55. La finestra di dialogo che visualizza le altre info
relative ad un basso.
66
Capitolo 6: Conclusioni e sviluppi futuri
6. Conclusioni e sviluppi futuri
Nei mesi trascorsi a lavorare su questo progetto, l’obbiettivo è sempre stato quello di riuscire a
creare un qualcosa che fosse in grado di fornire un aiuto a coloro che lavorano nell’azienda
S.I.Re.Na. al progetto di ristrutturazione e rivalutazione dei Quartieri Spagnoli. Certamente far
coincidere i tempi di uno stage con quelli di un’azienda che lavora ad un progetto che dura molti
anni non è stato semplice. Spero in ogni caso che il mio impegno come quello degli altri due miei
colleghi nel creare questo sistema sia stato apprezzato.
Al termine di questo stage il risultato ottenuto è stato di costruire un sistema in grado di integrare
tutte le risorse possedute dall’azienda ed un’interfaccia d’accesso a tali risorse. Alle risorse già
possedute da S.I.Re.Na. ne sono state aggiunte delle altre a loro volta integrate nel sistema.
Struttura portante dell’intero sistema è stata l’ontologia creata in Flora2 che ha permesso di
integrare tutte le risorse di S.I.Re.Na.
Per quanto riguarda gli sviluppi futuri ritengo che il sistema realizzato sia compatibile e si possa
facilmente integrare con quello che saranno le nuove funzionalità che saranno definite. A tal
proposto si può pensare di costruire nuove funzioni all’interfaccia che riguarderanno ulteriori
viste di dati, come ad esempio il computo metrico degli edifici.
Per quanto concerne la rappresentazione il sistema realizzato, si presta a future integrazioni con
nuove sorgenti dati, mediante la definizione di nuove classi dell’ontologia costruita.
67
Bibliografia
Bibliografia
[1] N. Guarino(1997)
Understanding, building, and using ontologies.
”Using Explicit Ontologies in KBS Development", by van Heijst, Schreiber, and Wielinga.”
International Journal of Human and Computer Studies 46: 293-310.
[2] N. Guarino
Il ruolo dell’ontologia formale per l’integrazione e la condivisione di conoscenze.
Attivita' di Ricerca presso il LADSEB-CNR. Giornata di Lavoro AI*IA su "Accesso, Estrazione
e Integrazione di Conoscenza", Napoli, 28/9/96.
http://www.ladseb.pd.cnr.it/infor/Ontology/Papers/AIIA96.pdf
http://www.ladseb.pd.cnr.it/infor/Ontology/Papers/AIIA96.doc
[3] The PostgreSQL Global Development Group
PostgreSQL 8.1.0 Documentation
http://www.postgresql.org/docs/manuals/
[4] University of Stanford
Protégé-Frames User's Guide
http://protege.stanford.edu
[5] Guizhen Yang, Michael Kifer, Chang Zhao, Vishal Chowdhary
Flora-2 : User's Manual
http://flora.sourceforge.net/docs/floraManual.pdf
[6] Kifer M., Lausen G., Wu J. Dawson, M. Kifer
Logical Foundations of Object-Oriented and Frame-Based languages.
In journal of the Association fo Computing Machinery, May 1995.
68
Bibliografia
[7] K. Sagonas, T. Swift, D. S. Warren, J. Freire, P. Rao, B. Cui, E. Johnson, L. de Castro, S.
Dawson, M. Kifer
The XSB System - Volume 1: Programmer’s Manual
http://xsb.sourceforge.net/manual1/manual1.pdf
[8] B. Eckel
Thinking in Java - Apogeo
http://www.bruceeckel.com
[9] Java2Flora Utility
Ontotext – Semantic Tecnhnology Lab.
http://www.ontotext.com/java2flora
[10] Groub
“What is an Ontology?”
http://www-kls.stanford.edu/kst/what-is-an-ontology.html
[11] C. Lagoze, J. B. Chandrasekaran, John R. Josephson, V. Richard Benjamins
What are the Ontologies, and why do we need them?
IEEE Intelligent System January/February 1999
[12] N. Guarino, P. Giaretta. (1995).
Ontologies and Knowledge Bases: To-wards a Terminological Clarification.
In N. Mars (ed.) Towards Very Large Knowledge Bases: Knowledge Building and Knowledge
Sharing 1995. IOS Press, Amsterdam: 25-32.
[13] I. Agarossi, N. Bunkheila
Tool per la visualizzazione grafica di Ontologie
http://ra.crema.unimi.it/turing/MATERIALE/paolo/allegati/ToolVisualizzazioneOntologie.pdf
69
Bibliografia
[14] J. Angele, G. Lausen
Ontologies in F-Logic
http://www.deri.at/teaching/seminars/interna/literature/ontologyhandbookV217.pdp
[15] D. Donato
Progetto S.I.Re.Na. integrazione di risorse per i quartieri spagnoli: un GIS dell’area.
Università degli studi di Napoli Federico II – Facolta di Scienze MM. FF. NN. – CDL in
Informatica - Tesi di Laurea triennale (triennale), anno accademico 2005-2006
[16] D. Fiore
Progetto S.I.Re.Na. integrazione di risorse per i quartieri spagnoli: modello 3D di bassi.
Università degli studi di Napoli Federico II – Facolta di Scienze MM. FF. NN. – CDL in
Informatica - Tesi di Laurea triennale (triennale), anno accademico 2005-2006
[17] K. Sagonas, T. Swift, D. S. Warren, J. Freire, P. Rao, B. Cui, E. Johnson, L. de Castro, S.
Dawson, M. Kifer
The XSB System - Volume 2: Libraries, Interfaces and Packages
http://xsb.sourceforge.net/manual2/manua2.pdf
[18] S.I.Re.Na.
Studio di fattibilità per l'avvio di un programma pilota di intervento per l'eliminazione dei
"bassi" ricadenti in un'area dei quartieri spagnoli di napoli a monte di via Toledo: Sintesi
dello studio
A cura di S.I.RE.NA. Città Storica Scpa con il contributo dell'Università Federico II di Napoli,
SEDIM, Napoli, 2002
[19] S.I.Re.Na.
Studio di fattibilità per l'avvio di un programma pilota di intervento per l'eliminazione dei
"bassi" ricadenti in un'area dei quartieri spagnoli di napoli a monte di via Toledo - Questioni
di metodo
A cura di S.I.RE.NA. Città Storica Scpa con il contributo dell'Università Federico II di Napoli,
SEDIM, Napoli, 2002
70
Bibliografia
[20] S.I.Re.Na.
Studio di fattibilità per l'avvio di un programma pilota di intervento per l'eliminazione dei
"bassi" ricadenti in un'area dei quartieri spagnoli di napoli a monte di via Toledo: I quartieri
spagnoli e l'area di studio - letture critiche
A cura di S.I.RE.NA. Città Storica Scpa con il contributo dell'Università Federico II di Napoli,
SEDIM, Napoli, 2002
[21] S.I.Re.Na.
Studio di fattibilità per l'avvio di un programma pilota di intervento per l'eliminazione dei
"bassi" ricadenti in un'area dei quartieri spagnoli di napoli a monte di via Toledo: Elementi
per la redazione del programma pilota
A cura di S.I.RE.NA. Città Storica Scpa con il contributo dell'Università Federico II di Napoli,
SEDIM, Napoli, 2002
[22] M. Nicolella
Programmazione degli interventi in edilizia
Sirena città storica - Università degli Studi di Napoli Federico II D.I.N.E. (Dipartimento di
ingegneria Edile)
[23] Calabrese A., Mele F., Serino L., Sorgente A., Talamo O.
Rappresentazioni di Conoscenze Spaziali di Siti Archeologici
Workshop intelligenza artificiale per i beni culturali 23/9/2003 Pisa
[24] Pinto Sofia H.,
Some Issue on Ontologies Integration, Proceedings of IJCAI-99 Workshop on Ontologies and
Problem-solving methods Stockholm, Sweden
71
Appendice
Appendice
Nell’ampendice è riportato il codice XSB, Flora e Java realizzato.
Codice XSB
:-import
:-import
:-import
:-import
:-import
:-import
:-import
:-import
:-import
:-import
:-import
:-import
odbc_open/3 from odbc_call.
odbc_open/4 from odbc_call.
odbc_close/0 from odbc_call.
odbc_close/1 from odbc_call.
odbc_sql/4 from odbc_call.
odbc_import/2 from odbc_call.
odbc_import/3 from odbc_call.
odbc_query/2 from odbc_call.
odbc_insert/2 from odbc_call.
odbc_delete/2 from odbc_call.
odbc_create_table/2 from odbc_call.
member/2 from lists.
:-odbc_open('PostgreSQL','SIRENA','SIRENA','ConPostgres').
:-odbc_open('SirenaDB','','','ConAccess').
:-odbc_open('SirenaDB2','','','ConAccess2').
:-carica_circoscrizioni.
:-carica_tecnici.
:-carica_utenti.
:-carica_richiedenti.
:-carica_raccomandata.
:-carica_imprese.
:-carica_riconferma.
:-carica_visiteSIR.
:-carica_visiteCPT.
:-carica_foto_SIR.
:-carica_foto_CPT.
:-carica_foto_cond.
:-carica_progetti.
:-carica_anomalie.
:-carica_foto.
:-carica_foto_piante.
:-carica_foto_prospetti.
:-carica_foto_sezioni.
:-carica_foto_altre.
:-carica_foto_inquadramento_planimetrico.
:-carica_materiali.
:-carica_schede_operazioni.
:-carica_schede_interventi.
:-carica_schede_controlli.
:-carica_tipi_elementi_tecnici.
:-carica_composizione_soluzioni.
:-carica_funzioni.
:-carica_scelta_operazioni.
:-carica_materiali_dei_tipi.
:-carica_soluzione_tipi_elementi_tecnici.
:-carica_tipi_materiali.
:-carica_edifici_dati_generali.
:-carica_edifici_dati_catastali.
:-carica_edifici_dati_storici.
:-carica_edifici_dati_quantitativi.
:-carica_edifici_inq_territoriali.
:-carica_edifici_dati_normativi.
:-carica_edifici_dati_tecnologici1.
:-carica_edifici_dati_tecnologici2.
72
Appendice
Codice XSB
:-carica_edifici_dati_tecnologici3.
:-carica_edifici_dati_tecnologici_prospetti.
:-carica_edifici_dati_tipologici.
:-carica_infolibretto.
:-carica_operazioni.
:-carica_schede_diagnosi.
:-carica_specifiche_elementi_tecnici.
:-carica_validazione.
:-carica_planning.
:-carica_computo.
:-carica_designazione.
:-carica_prospetto.
:-carica_relazione_tecnica.
:-carica_approvazione_beni.
:-carica_dia.
:-odbc_close('ConPostgres').
:-odbc_close('ConAccess').
:-odbc_close('ConAccess2').
carica_circoscrizioni:odbc_sql('ConAccess',[],'SELECT * FROM Circoscrizioni',[CODICE,CIRCOSCRIZIONE]),
asserta(pred_circoscrizione(CODICE,CIRCOSCRIZIONE)),
fail.
carica_circoscrizioni.
carica_tecnici:odbc_sql('ConAccess',[],'SELECT * FROM
TECNICI',[CODICE,TITOLO,NOMINATIVO,DOMICILIO,CITTA,CAP,TELEFONO,TELEFONO2,FAX,MAIL]),
asserta(pred_tecnici(CODICE,TITOLO,NOMINATIVO,DOMICILIO,CITTA,CAP,TELEFONO,TELEFONO2,FAX,MAIL)),
fail.
carica_tecnici.
carica_utenti:odbc_sql('ConAccess',[],'SELECT * FROM UTENTI',[CODICE,ID,PASS,SOGGETTO]),
asserta(pred_utenti(CODICE,ID,PASS,SOGGETTO)),
fail.
carica_utenti.
carica_richiedenti:odbc_sql('ConAccess',[],'SELECT * FROM
RICHIEDENTI',[CODICE,TIPO,NOMINATIVO,DOMICILIO,CITTA,CAP,TELEFONO,TELEFONO2,FAX,MAIL,X]),
asserta(pred_richiedenti(CODICE,TIPO,NOMINATIVO,DOMICILIO,CITTA,CAP,TELEFONO,TELEFONO2,FAX,MAIL,
X)),
fail.
carica_richiedenti.
carica_raccomandata:odbc_sql('ConAccess',[],'SELECT "CODICE","DATA INVIO RACCOMANDATA 2004","DATA INVIO RACCOMANDATA
2005","CODICE ULTIMA RACCOM 2004","CODICE ULTIMA RACCOM 2005" FROM
IMPRESE',[CODICE,DATA_INVIO_RACCOMANDATA_2004,DATA_INVIO_RACCOMANDATA_2005,CODICE_ULTIMA_RACCOM_2004,CO
DICE_ULTIMA_RACCOM_2005]),
asserta(pred_raccomandata(CODICE,DATA_INVIO_RACCOMANDATA_2004,DATA_INVIO_RACCOMANDATA_2005,CODIC
E_ULTIMA_RACCOM_2004,CODICE_ULTIMA_RACCOM_2005)),
fail.
carica_raccomandata.
carica_imprese:odbc_sql('ConAccess',[],'SELECT "CODICE","RAGIONE SOCIALE","TIPO IMPRESA","SEDE
LEGALE","CAP","CITTA","SEDE OPERATIVA","CAP1","CITTA1","TELEFONO","TELEFONO2","FAX","EMAIL","PARTITA
IVA","ALTRE INFORMAZIONI","DATA INSERIMENTO" FROM
IMPRESE',[CODICE,RAGIONE_SOCIALE,TIPO_IMPRESA,SEDE_LEGALE,CAP,CITTA,SEDE_OPERATIVA,CAP1,CITTA1,TELEFONO
,TELEFONO2,FAX,EMAIL,PARTITA_IVA,ALTRE_INFORMAZIONI,DATA_INSERIMENTO]),
73
Appendice
Codice XSB
asserta(pred_imprese(CODICE,RAGIONE_SOCIALE,TIPO_IMPRESA,SEDE_LEGALE,CAP,CITTA,SEDE_OPERATIVA,CA
P1,CITTA1,TELEFONO,TELEFONO2,FAX,EMAIL,PARTITA_IVA,ALTRE_INFORMAZIONI,DATA_INSERIMENTO)),
fail.
carica_imprese.
carica_riconferma:odbc_sql('ConAccess',[],'SELECT "CODICE","RICONFERMA 2004","RICONFERMA 2005" FROM
IMPRESE',[CODICE,RICONFERMA_2004,RICONFERMA_2005]),
asserta(pred_riconferma(CODICE,RICONFERMA_2004,RICONFERMA_2005)),
fail.
carica_riconferma.
carica_visiteSIR:odbc_sql('ConAccess',[],'SELECT "Protocollo servizio","Anno Protocollo","CENTRO STORICO URBANO O
PERIFERICO","data","rilevatore","risultato","nota" FROM "VISITE
SIRENA"',[Protocollo_servizio,Anno_Protocollo,CENTRO_STORICO_U_O_P,Data,Rilevatore,Risultato,Nota]),
asserta(pred_visiteSIR(Protocollo_servizio,Anno_Protocollo,CENTRO_STORICO_U_O_P,Data,Rilevatore,
Risultato,Nota)),
fail.
carica_visiteSIR.
carica_visiteCPT:odbc_sql('ConAccess',[],'SELECT "Protocollo servizio","Anno Protocollo","CENTRO STORICO URBANO O
PERIFERICO","data","rilevatore","risultato","nota" FROM "VISITE
CPT"',[Protocollo_servizio,Anno_Protocollo,CENTRO_STORICO_U_O_P,Data,Rilevatore,Risultato,Nota]),
asserta(pred_visiteCPT(Protocollo_servizio,Anno_Protocollo,CENTRO_STORICO_U_O_P,Data,Rilevatore,
Risultato,Nota)),
fail.
carica_visiteCPT.
carica_foto_SIR:odbc_sql('ConAccess',[],'SELECT "Protocollo servizio","FOTO" FROM "VISITE
SIRENA"',[Protocollo_servizio,FOTO]),
asserta(pred_foto_visiteSIR(Protocollo_servizio,FOTO)),
fail.
carica_foto_SIR.
carica_foto_CPT:odbc_sql('ConAccess',[],'SELECT "Protocollo servizio","FOTO" FROM "VISITE
CPT"',[Protocollo_servizio,FOTO]),
asserta(pred_foto_visiteCPT(Protocollo_servizio,FOTO)),
fail.
carica_foto_CPT.
carica_foto_cond:odbc_sql('ConAccess',[],'SELECT ID,FOTO FROM CONDOMINI',[ID,FOTO]),
asserta(pred_foto_cond(ID,FOTO)),
fail.
carica_foto_cond.
carica_progetti:odbc_sql('ConAccess',[],'SELECT * FROM
CONDOMINI',[ID,Protocollo_servizio,Anno_Protocollo,PROGETTO,Numero_elenco_aggiornato,Aggiornamento,Prop
rieta,INDIRIZZO,COMUNE,CODICE_CIRCOSCRIZIONE,POSSIBILE_INTERESSE_ARC,VINCOLATO_SENSI_1089,VINCOLATO_SEN
SI_1497,Riserva_20,CENTRO_STORICO_URBANO_PERIFERICO,CODICE_RICHIEDENTE,CODICE_PROGETTISTA,CODICE_DIRETT
ORE_LAVORI,CODICE_coordinatore_sicurezza,CODICE_coordinatore_sicurezza,CODICE_IMPRESA_APPALTATRICE,IMPR
ESE_SUBAPPALTATRICI,CODICE_DIRETTORE_TECNICO,TITOLO_EDILIZIO,DATA_ATTIVAZIONE_DIA,DATA_SCADENZA_DIA,TIP
OLOGIA_INTERVENTO,LOCALIZZAZIONE_LAVORI,TIPOLOGIA_LAVORI,AVANZAMENTO_FATTURE,DATA_NOTA1_EVASA,DATA_NOTA
2_EVASA,AVANZAMENTO_FATTURE2,CONTRIBUTO_FINANZIATO,IMPORTO_INTERVENTO_PREVENTIVATO_RICHIESTO,DATA_RICHI
ESTO_CONTRIBUTO_A_50,IMPORTO_INTERVENTO_PREVENTIVATO_OTTENUTO,IMPORTO_INTERVENTO_RIDETERMINATO,VARIAZIO
NI_SPESA_PREVISTE,CONTRIBUTO_RIDETERMINATO,IMPORTO_INTERVENTO_PRESUNTO_INIZIALE,LIBRETTO_MANUTENZIONE,C
ONTRIBUTI_OTTENUTI,DELTA_CONTRIBUTI,PERCENTUALE_CONTRIBUTI,IMPORTO_INTERVENTO_RICHIESTO,DATA_RICHIESTO_
CONTRIBUTO_A_SALDO,IMPORTO_INTERVENTO_OTTENUTO,DATA_ATTIVAZIONE_CANTIERE_PREVISTA,DATA_FINE_CANTIERE_PR
EVISTA,DATA_ATTIVAZIONE_CANTIERE_EFFETTIVA,DATA_FINE_CANTIERE_EFFETTIVA,STATO_CANTIERE,TRASMISSIONE_VER
BALE_O_INIZIO_LAVORI,TRASMISSIONE_COPIA_CONTRATTO,CONTRATTO_CONFORME_A_SIRENA,TRASMESSA_COPIA_POLIZZE,P
OLIZZE_CONFORMI_SCHEMA_SIRENA,COMUNICATO_DA_CONDOMINIO_INIZIO_LAVORI_A_ENTI,COMUNICATO_DA_IMPRESE_INIZI
O_LAVORI_A_ENTI,NUMERO_VISITE_SIRENA,ULTIMA_DATA_VISITA_SIRENA,NUMERO_VISITE_CPT,ULTIMA_DATA_VISITA_CPT
74
Appendice
Codice XSB
,ATTIVATO_PROGETTO_EURECHO,INFORMAZIONI_PROGETTO_EURECHO,ATTIVATO_36,ATTIVATA_PUBBLICITA_PONTEGGI,AVANZ
AMENTO_0_50,ULTIMATO_LAVORI,RICHIESTO_CONTRIBUTO_A_50,OTTENUTO_CONTRIBUTO_A_50,AVANZAMENTO_50_100,RICHI
ESTO_CONTRIBUTO_A_SALDO,OTTENUTO_CONTRIBUTO_A_SALDO,CONSEGNATO_LIBRETTO_MANUTENZIONE,DATA_CONSEGNA_DEFI
NITIVA_LM,CERTIFICATO_LIBRETTO_MANUTENZIONE,DATA_CERTIFICATO_LM,NOTA1,NOTA2,NOTA3,NOTA4,FOTO]),
asserta(pred_progetti(ID,Protocollo_servizio,Anno_Protocollo,PROGETTO,Numero_elenco_aggiornato,A
ggiornamento,Proprieta,INDIRIZZO,COMUNE,CODICE_CIRCOSCRIZIONE,POSSIBILE_INTERESSE_ARC,VINCOLATO_SENSI_1
089,VINCOLATO_SENSI_1497,Riserva_20,CENTRO_STORICO_URBANO_PERIFERICO,CODICE_RICHIEDENTE,CODICE_PROGETTI
STA,CODICE_DIRETTORE_LAVORI,CODICE_coordinatore_sicurezza_prog,CODICE_coordinatore_sicurezza_esec,CODIC
E_IMPRESA_APPALTATRICE,IMPRESE_SUBAPPALTATRICI,CODICE_DIRETTORE_TECNICO,TITOLO_EDILIZIO,DATA_ATTIVAZION
E_DIA,DATA_SCADENZA_DIA,TIPOLOGIA_INTERVENTO,LOCALIZZAZIONE_LAVORI,TIPOLOGIA_LAVORI,AVANZAMENTO_FATTURE
,DATA_NOTA1_EVASA,DATA_NOTA2_EVASA,AVANZAMENTO_FATTURE2,CONTRIBUTO_FINANZIATO,IMPORTO_INTERVENTO_PREVEN
TIVATO_RICHIESTO,DATA_RICHIESTO_CONTRIBUTO_A_50,IMPORTO_INTERVENTO_PREVENTIVATO_OTTENUTO,IMPORTO_INTERV
ENTO_RIDETERMINATO,VARIAZIONI_SPESA_PREVISTE,CONTRIBUTO_RIDETERMINATO,IMPORTO_INTERVENTO_PRESUNTO_INIZI
ALE,LIBRETTO_MANUTENZIONE,CONTRIBUTI_OTTENUTI,DELTA_CONTRIBUTI,PERCENTUALE_CONTRIBUTI,IMPORTO_INTERVENT
O_RICHIESTO,DATA_RICHIESTO_CONTRIBUTO_A_SALDO,IMPORTO_INTERVENTO_OTTENUTO,DATA_ATTIVAZIONE_CANTIERE_PRE
VISTA,DATA_FINE_CANTIERE_PREVISTA,DATA_ATTIVAZIONE_CANTIERE_EFFETTIVA,DATA_FINE_CANTIERE_EFFETTIVA,STAT
O_CANTIERE,TRASMISSIONE_VERBALE_O_INIZIO_LAVORI,TRASMISSIONE_COPIA_CONTRATTO,CONTRATTO_CONFORME_A_SIREN
A,TRASMESSA_COPIA_POLIZZE,POLIZZE_CONFORMI_SCHEMA_SIRENA,COMUNICATO_DA_CONDOMINIO_INIZIO_LAVORI_A_ENTI,
COMUNICATO_DA_IMPRESE_INIZIO_LAVORI_A_ENTI,NUMERO_VISITE_SIRENA,ULTIMA_DATA_VISITA_SIRENA,NUMERO_VISITE
_CPT,ULTIMA_DATA_VISITA_CPT,ATTIVATO_PROGETTO_EURECHO,INFORMAZIONI_PROGETTO_EURECHO,ATTIVATO_36,ATTIVAT
A_PUBBLICITA_PONTEGGI,AVANZAMENTO_0_50,ULTIMATO_LAVORI,RICHIESTO_CONTRIBUTO_A_50,OTTENUTO_CONTRIBUTO_A_
50,AVANZAMENTO_50_100,RICHIESTO_CONTRIBUTO_A_SALDO,OTTENUTO_CONTRIBUTO_A_SALDO,CONSEGNATO_LIBRETTO_MANU
TENZIONE,DATA_CONSEGNA_DEFINITIVA_LM,CERTIFICATO_LIBRETTO_MANUTENZIONE,DATA_CERTIFICATO_LM,NOTA1,NOTA2,
NOTA3,NOTA4,FOTO)),
fail.
carica_progetti.
carica_anomalie:odbc_sql('ConPostgres',[],'SELECT * FROM "Anomalie"',[A,B,C,D,E,F,G,H,I]),
asserta(pred_anomalie(A,B,C,D,E,F,G,H,I)),
fail.
carica_anomalie.
carica_foto_piante:odbc_sql('ConPostgres',[],'SELECT * FROM "Foto_piante"',[A,B]),
asserta(pred_foto_piante(A,B)),
fail.
carica_foto_piante.
carica_foto:odbc_sql('ConPostgres',[],'SELECT * FROM "Foto"',[A,B]),
asserta(pred_foto(A,B)),
fail.
carica_foto.
carica_foto_prospetti:odbc_sql('ConPostgres',[],'SELECT * FROM "Foto_prospetti"',[A,B,C]),
asserta(pred_foto_prospetti(A,B,C)),
fail.
carica_foto_prospetti.
carica_foto_sezioni:odbc_sql('ConPostgres',[],'SELECT * FROM "Foto_sezioni"',[A,B]),
asserta(pred_foto_sezioni(A,B)),
fail.
carica_foto_sezioni.
carica_foto_altre:odbc_sql('ConPostgres',[],'SELECT * FROM "Foto_altre"',[A,B]),
asserta(pred_foto_altre(A,B)),
fail.
carica_foto_altre.
carica_foto_inquadramento_planimetrico:odbc_sql('ConPostgres',[],'SELECT * FROM "Foto_inquadramento_planimetrico"',[A,B]),
asserta(pred_foto_inquadramento_planimetrico(A,B)),
fail.
carica_foto_inquadramento_planimetrico.
75
Appendice
Codice XSB
carica_materiali:odbc_sql('ConPostgres',[],'SELECT * FROM "Materiali"',[A,B]),
asserta(pred_materiali(A,B)),
fail.
carica_materiali.
carica_planning:odbc_sql('ConPostgres',[],'SELECT * FROM "Planning"',[A,B,C,D,E]),
asserta(pred_planning(A,B,C,D,E)),
fail.
carica_planning.
carica_schede_operazioni:odbc_sql('ConPostgres',[],'SELECT * FROM "Schede_operazioni"',[A,B,C,D,E,F,G,H,I]),
asserta(pred_schede_operazioni(A,B,C,D,E,F,G,H,I)),
fail.
carica_schede_operazioni.
carica_schede_interventi:odbc_sql('ConPostgres',[],'SELECT * FROM "Schede_interventi"',[A,B,C,D,E,F,G,H,I,L,M,N]),
asserta(pred_schede_interventi(A,B,C,D,E,F,G,H,I,L,M,N)),
fail.
carica_schede_interventi.
carica_schede_controlli:odbc_sql('ConPostgres',[],'SELECT * FROM "Schede_controlli"',[A,B,C,D,E,F,G,H,I,L,M,N,O,P]),
asserta(pred_schede_controlli(A,B,C,D,E,F,G,H,I,L,M,N,O,P)),
fail.
carica_schede_controlli.
carica_tipi_elementi_tecnici:odbc_sql('ConPostgres',[],'SELECT * FROM "Tipi_elementi_tecnici"',[A,B,C,D,E]),
asserta(pred_tipi_elementi_tecnici(A,B,C,D,E)),
fail.
carica_tipi_elementi_tecnici.
carica_composizione_soluzioni:odbc_sql('ConPostgres',[],'SELECT * FROM "Composizione_soluzioni"',[A,B,C]),
asserta(pred_composizione_soluzioni(A,B,C)),
fail.
carica_composizione_soluzioni.
carica_funzioni:odbc_sql('ConPostgres',[],'SELECT * FROM "Funzioni"',[A,B,C,D,E]),
asserta(pred_funzioni(A,B,C,D,E)),
fail.
carica_funzioni.
carica_materiali_dei_tipi:odbc_sql('ConPostgres',[],'SELECT * FROM "Schede_controlli"',[A,B]),
asserta(pred_materiali_dei_tipi(A,B)),
fail.
carica_materiali_dei_tipi.
carica_scelta_operazioni:odbc_sql('ConPostgres',[],'SELECT * FROM "Scelta_operazioni"',[A,B,C,D,E,F,G,H,I,L]),
asserta(pred_scelta_operazioni(A,B,C,D,E,F,G,H,I,L)),
fail.
carica_scelta_operazioni.
carica_soluzione_tipi_elementi_tecnici:odbc_sql('ConPostgres',[],'SELECT * FROM "Soluzioni_tipi_elementi_tecnici"',[A,B,C,D]),
asserta(pred_soluzione_tipi_elementi_tecnici(A,B,C,D)),
fail.
carica_soluzione_tipi_elementi_tecnici.
76
Appendice
Codice XSB
carica_tipi_materiali:odbc_sql('ConPostgres',[],'SELECT * FROM "Tipi_materiali"',[A,B,C]),
asserta(pred_tipi_materiali(A,B,C)),
fail.
carica_tipi_materiali.
carica_edifici_dati_generali:odbc_sql('ConPostgres',[],'SELECT * FROM "Edificidati_generali"',[A,B,C,D,E,F,G,H,K,L,M,N,O,P,R,S,T,U,V,W,Y,Z]),
asserta(pred_edifici_dati_generali(A,B,C,D,E,F,G,H,K,L,M,N,O,P,R,S,T,U,V,W,Y,Z)),
fail.
carica_edifici_dati_generali.
carica_edifici_dati_catastali:odbc_sql('ConPostgres',[],'SELECT * FROM "Edifici-dati_catastali"',[A,B,C,D]),
asserta(pred_edifici_dati_catastali(A,B,C,D)),
fail.
carica_edifici_dati_catastali.
carica_edifici_dati_storici:odbc_sql('ConPostgres',[],'SELECT * FROM "Edifici-dati_storici"',[A,B,C,D,E,F,G,H,I,L,M,N]),
asserta(pred_edifici_dati_storici(A,B,C,D,E,F,G,H,I,L,M,N)),
fail.
carica_edifici_dati_storici.
carica_edifici_dati_quantitativi:odbc_sql('ConPostgres',[],'SELECT * FROM "Edificidati_quantitativi"',[A,B,C,D,E,F,G,H,I,K,L,M,N,O,P,Q,R,S,T,U,V,W,Y,Z,A1]),
asserta(pred_edifici_dati_quantitativi(A,B,C,D,E,F,G,H,I,K,L,M,N,O,P,Q,R,S,T,U,V,W,Y,Z,A1)),
fail.
carica_edifici_dati_quantitativi.
carica_edifici_inq_territoriali:odbc_sql('ConPostgres',[],'SELECT * FROM "Edifici-inq_territoriale"',[A,B,C,D,E,F,G,H,K]),
asserta(pred_edifici_inq_territoriali(A,B,C,D,E,F,G,H,K)),
fail.
carica_edifici_inq_territoriali.
carica_edifici_dati_normativi:odbc_sql('ConPostgres',[],'SELECT * FROM "Edifici-dati_urb_normativi"',[A,B,C,D,E,F,G,H]),
asserta(pred_edifici_dati_urb_normativi(A,B,C,D,E,F,G,H)),
fail.
carica_edifici_dati_normativi.
carica_edifici_dati_tecnologici1:odbc_sql('ConPostgres',[],'SELECT * FROM "Edificidati_tecnologici1"',[A,B,C,D,E,F,G,H,I,K,L,M,N,O,P,Q,R,S,T,U,V,W,Y,Z,A1,B1,C1,D1,E1]),
asserta(pred_edifici_dati_tecnologici1(A,B,C,D,E,F,G,H,I,K,L,M,N,O,P,Q,R,S,T,U,V,W,Y,Z,A1,B1,C1,
D1,E1)),
fail.
carica_edifici_dati_tecnologici1.
carica_edifici_dati_tecnologici2:odbc_sql('ConPostgres',[],'SELECT * FROM "Edificidati_tecnologici2"',[A,B,C,D,E,F,G,H,I,K,L,M,N,O,P,Q,R,S,T,U,V,W,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,K1,L1,M
1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,K2,L2,M2,N2,O2,P2,Q2,R2]),
asserta(pred_edifici_dati_tecnologici2(A,B,C,D,E,F,G,H,I,K,L,M,N,O,P,Q,R,S,T,U,V,W,Y,Z,A1,B1,C1,
D1,E1,F1,G1,H1,I1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,K2,L2,M2,N2,O
2,P2,Q2,R2)),
fail.
carica_edifici_dati_tecnologici2.
77
Appendice
Codice XSB
carica_edifici_dati_tecnologici3:odbc_sql('ConPostgres',[],'SELECT * FROM "Edificidati_tecnologici3"',[A,B,C,D,E,F,G,H,I,K,L,M,N,O,P,Q,R,S,T,U,V,W,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,K1,L1,M
1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,K2,L2,M2,N2,O2,P2,Q2,R2,S2,T2,U2,V2,W2
,Y2,Z2]),
asserta(pred_edifici_dati_tecnologici3(A,B,C,D,E,F,G,H,I,K,L,M,N,O,P,Q,R,S,T,U,V,W,Y,Z,A1,B1,C1,
D1,E1,F1,G1,H1,I1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,K2,L2,M2,N2,O
2,P2,Q2,R2,S2,T2,U2,V2,W2,Y2,Z2)),
fail.
carica_edifici_dati_tecnologici3.
carica_edifici_dati_tecnologici_prospetti:odbc_sql('ConPostgres',[],'SELECT * FROM "Edificidati_tecnologici_prospetti"',[A,B,C,D,E,F,G,H,I,K,L,M,N,O,P,Q]),
asserta(pred_edifici_dati_tecnologici_prospetti(A,B,C,D,E,F,G,H,I,K,L,M,N,O,P,Q)),
fail.
carica_edifici_dati_tecnologici_prospetti.
carica_edifici_dati_tipologici:odbc_sql('ConPostgres',[],'SELECT * FROM "Edifici-dati_tipologici"',[A,B,C,D,E,F,G,H,I]),
asserta(pred_edifici_dati_tipologici(A,B,C,D,E,F,G,H,I)),
fail.
carica_edifici_dati_tipologici.
carica_infolibretto:odbc_sql('ConPostgres',[],'SELECT * FROM "Info_libretto"',[A,B,C,D,E,F]),
asserta(pred_infolibretto(A,B,C,D,E,F)),
fail.
carica_infolibretto.
carica_operazioni:odbc_sql('ConPostgres',[],'SELECT * FROM "Operazioni"',[A,B,C,D,E,F,G]),
asserta(pred_operazioni(A,B,C,D,E,F,G)),
fail.
carica_operazioni.
carica_schede_diagnosi:odbc_sql('ConPostgres',[],'SELECT * FROM "Schede_diagnosi"',[A,B,C,D,E,F,G,H]),
asserta(pred_schede_diagnosi(A,B,C,D,E,F,G,H)),
fail.
carica_schede_diagnosi.
carica_specifiche_elementi_tecnici:odbc_sql('ConPostgres',[],'SELECT * FROM "Specifiche_elementi_tecnici"',[A,B,C,D,E]),
asserta(pred_specifiche_elementi_tecnici(A,B,C,D,E)),
fail.
carica_specifiche_elementi_tecnici.
carica_validazionie:odbc_sql('ConPostgres',[],'SELECT * FROM "Validazione"',[A,B,C,D,E,F,G,H]),
asserta(pred_validazione(A,B,C,D,E,F,G,H)),
fail.
carica_validazione.
carica_computo:odbc_sql('ConAccess2',[],'SELECT * FROM Computo_estimativo',[A,B,C,D,E]),
asserta(pred_computo(A,B,C,D,E)),
fail.
carica_computo.
carica_designazione:odbc_sql('ConAccess2',[],'SELECT * FROM Designazione_lavori',[A,B,C,D,E,F,G]),
asserta(pred_designazione(A,B,C,D,E,F,G)),
fail.
carica_designazione.
78
Appendice
Codice XSB
carica_prospetto:odbc_sql('ConAccess2',[],'SELECT * FROM Prospetto',[A,B,C,D,E,F,G,H,I,L]),
asserta(pred_prospetto(A,B,C,D,E,F,G,H,I,L)),
fail.
carica_prospetto.
carica_relazione_tecnica:odbc_sql('ConAccess2',[],'SELECT * FROM Relazione_tecnica',[A,B,C]),
asserta(pred_relazione_tecnica(A,B,C)),
fail.
carica_relazione_tecnica.
carica_approvazione_beni:odbc_sql('ConAccess2',[],'SELECT * FROM Relazione_tecnica',[A,B,C]),
asserta(pred_approvazione_beni(A,B,C)),
fail.
carica_approvazione_beni.
carica_dia:odbc_sql('ConAccess2',[],'SELECT * FROM DIA',[A,B,C]),
asserta(pred_dia(A,B,C)),
fail.
carica_dia.
79
Appendice
Codice Flora2
Codice Flora
edifici_dati[cod_sirena=>string].
/*DATI ANAGRAFICI*/
edifici_dati::dati_anagrafici.
dati_anagrafici::edifici_dati_generali.
dati_anagrafici::edifici_dati_catastali.
dati_anagrafici::edifici_dati_quantitativi.
dati_anagrafici::edifici_dati_storici.
dati_anagrafici::edifici_dati_tecnologici1.
dati_anagrafici::edifici_dati_tecnologici2.
dati_anagrafici::edifici_dati_tecnologici3.
dati_anagrafici::edifici_dati_tecnologici_prospetti.
dati_anagrafici::edifici_dati_tipologici.
dati_anagrafici::edifici_dati_urb_normativi.
dati_anagrafici::edifici_inq_territoriale.
/*ALTRI DATI*/
edifici_dati::info_libretto.
edifici_dati::validazione.
edifici_dati::planning.
/*DATI MULTIMEDIALI*/
edifici_dati::dati_multimediali.
dati_multimediali::foto.
foto[path_foto=>string].
foto::foto_altre.
foto::foto_inquadramento_planimetrico.
foto::foto_piante.
foto::foto_sezioni.
foto::foto_prospetti.
foto::foto_visite.
foto_prospetti[nome=>string].
/*SCHEDA OPERAZIONE*/
edifici_dati::schede_operazioni.
schede_operazioni::schede_interventi.
schede_operazioni::schede_controlli.
/*SCHEDA DI DIAGNOSI*/
edifici_dati::scheda_di_diagnosi.
planning[
nome=>string,
cod=>string,
data=>number,
tipo_planning=>number].
edifici_dati_generali[
via=>string,
accessi=>string,
denominazione=>string,
circoscriz=>circoscrizione,
tipo=>string, /*UNICO O APPARTENENTE A COMPLESSO*/
nomeprop=>string,
cognomeprop=>string,
qualifica=>string,
domicilio=>string,
tel=>string,
licenza=>string,/*IMPLEMENTARE REGOLA PER ADERENZA A PROGETTI TRAMITE
COD_SIRENA*/
cal_strut=>string,
collaudatore=>string,
centro_storico=>string,
80
Appendice
Codice Flora2
comune=>string,
possibile_interesse_arch_tec=>string,
riserva_20_lavori_statici=>string,
tipologia_edificio=>string,/*CONDOMINIO O PROPRIETA'*/
vincolato_sensi_1098=>string,
prog_arch=>string,
prog_imp=>string,
prog_strut=>string,
n_fabbricati=>string,
n_scale=>string,
certificato_ag=>string,
impresa_esecutrice=>string,
direttore_lavori=>string,
vincolato_sensi_1497=>string].
edifici_dati_catastali[
foglio=>string,
sezione=>string,
p_lla=>string].
edifici_dati_storici[
epoca_costruzione=>string,
tipo_epoca_costruzione=>string,
scheda_post_sisma=>string,
num_schede_post_sisma=>number,
interventi_eseguiti=>string,
int_provvisionali_spicconatura=>string,
int_provvisionali_puntellamento=>string,
int_provvisionali_altro=>string,
data_verbale_diffida=>string,
descrizione_verbale_diffida=>string,
cep_verbale_diffida=>string].
edifici_dati_quantitativi[
area_sedime=>number,
altezza_max_edificio=>number,
num_piani_fuori_terra=>number,
n_min=>number,
n_max=>number,
num_piani_entro_terra=>number,
n_scale=>number,
vol_entro_terra=>number,
vol_fuori_terra=>number,
cantinole=>number,
parch_coperti=>number,
parch_scoperti=>number,
spazi_comuni=>number,
loc_caldaia=>number,
stenditoi=>number,
giardini=>number,
terrazzi=>number,
altrodq=>string,
destinazione_uni_immobiliari=>string,
sup_tot=>number,
sup_edi=>number,
area_a_verde=>number,
sup_scoperte=>number,
altrodqmq=>number].
edifici_inq_territoriale[
cav_sotterranee=>string,
scheda_cav_sotterranee=>string,
num_vie_accesso=>number,
acces_text=>string,
int_traffico=>string,
rapp_altri_edifici=>string,
n_lati=>number,
fabb_stat_autonomo=>string].
edifici_dati_tecnologici1[
fondazioni_profonde=>string,
81
Appendice
Codice Flora2
fondazioni_su_pali=>string,
fondazioni_superficiali=>string,
fondazioni_superficiali_plinti_iso=>string,
fondazioni_superficiali_plinti_coll=>string,
fondazioni_superficiali_travi=>string,
fondazioni_superficiali_platea=>string,
fondazioni_superficiali_continue_tufo=>string,
fondazioni_superficiali_continue_pietrame=>string,
fondazioni_prof_piano_di_posa=>number,
strutt_vert_muratura=>string,
strutt_vert_muratura_tufo=>string,
strutt_vert_muratura_tufo_con_irre=>string,
strutt_vert_muratura_tufo_con_re=>string,
strutt_vert_muratura_tufo_pietre_seg=>string,
strutt_vert_muratura_tufo_mat_pieni=>string,
strutt_vert_muratura_listata=>string,
strutt_vert_muratura_matt_pieni=>string,
strutt_vert_muratura_pietrame=>string,
strutt_vert_muratura_cordoli=>string,
strutt_vert_muratura_catene=>string,
strutt_vert_cong_cementizio_armato=>string,
strutt_vert_cong_cementizio_armato_setti=>string,
strutt_vert_cong_cementizio_armato_telaio=>string,
strutt_vert_mista=>string,
strutt_vert_mista_vert=>string,
strutt_vert_mista_orizz=>string,
strutt_vert_acciaio=>string].
edifici_dati_tecnologici2[
strutt_orizz_volte=>string,
strutt_orizz_volte_a_botte=>string,
strutt_orizz_volte_a_botte_tufo=>number,
strutt_orizz_volte_a_botte_mattoni=>number,
strutt_orizz_volte_a_botte_mattoncelle=>number,
strutt_orizz_volte_a_vela=>string,
strutt_orizz_volte_a_vela_tufo=>number,
strutt_orizz_volte_a_vela_mattoni=>number,
strutt_orizz_volte_a_vela_mattoncelle=>number,
strutt_orizz_volte_a_crociera=>string,
strutt_orizz_volte_a_crociera_tufo=>number,
strutt_orizz_volte_a_crociera_mattoni=>number,
strutt_orizz_volte_a_crociera_mattoncelle=>number,
strutt_orizz_volte_a_padiglione=>string,
strutt_orizz_volte_a_padiglione_tufo=>number,
strutt_orizz_volte_a_padiglione_mattoni=>number,
strutt_orizz_volte_a_padiglione_mattoncelle=>number,
strutt_orizz_volte_a_schifo=>string,
strutt_orizz_volte_a_schifo_tufo=>number,
strutt_orizz_volte_a_schifo_mattoni=>number,
strutt_orizz_volte_a_schifo_mattoncelle=>number,
strutt_orizz_solai=>string,
strutt_orizz_solai_late_opera=>number,
strutt_orizz_solai_late_semi=>number,
strutt_orizz_solai_legno=>number,
strutt_orizz_solai_ferro_tav=>number,
strutt_orizz_solai_ferro_legno=>number,
strutt_orizz_solai_non_noti=>number,
strutt_orizz_solai_altro=>string,
strutt_orizz_coperture=>string,
strutt_orizz_coperture_a_tetto=>string,
strutt_orizz_coperture_a_tetto_legno=>string,
strutt_orizz_coperture_a_tetto_legno_lat=>string,
strutt_orizz_coperture_a_tetto_cls_arm=>string,
strutt_orizz_coperture_a_tetto_cls_pre=>string,
strutt_orizz_coperture_a_tetto_cordolo=>string,
strutt_orizz_coperture_a_volta=>string,
strutt_orizz_coperture_a_volta_mur=>string,
strutt_orizz_coperture_a_volta_cls_arm=>string,
strutt_orizz_coperture_a_volta_cls_pre=>string,
strutt_orizz_coperture_a_volta_cordolo=>string,
strutt_orizz_coperture_piane=>string,
strutt_orizz_coperture_piane_legno=>string,
strutt_orizz_coperture_piane_legno_lat=>string,
82
Appendice
Codice Flora2
strutt_orizz_coperture_piane_cls_arm=>string,
strutt_orizz_coperture_piane_cls_pre=>string,
strutt_orizz_coperture_piane_cordolo=>string,
strutt_orizz_coperture_legg_non_portanti=>string,
strutt_orizz_coperture_legg_non_portanti_lam=>string,
strutt_orizz_coperture_legg_non_portanti_cem=>string,
strutt_orizz_coperture_legg_non_portanti_fib=>string,
strutt_orizz_coperture_legg_non_portanti_mat=>string,
strutt_orizz_coperture_legg_non_portanti_cordolo=>string,
strutt_orizz_scale=>string,
strutt_orizz_scale_cls=>string,
strutt_orizz_scale_cls_soletta=>string,
strutt_orizz_scale_cls_trave=>string,
strutt_orizz_scale_mur=>string,
strutt_orizz_scale_mur_voltine=>string,
strutt_orizz_scale_mur_altro=>string,
strutt_orizz_scale_ferro_lat=>string,
strutt_orizz_solai_altro_num=>number,
strutt_orizz_coperture_a_tetto_ferro_lat=>string,
strutt_orizz_coperture_piane_ferro_lat=>string].
edifici_dati_tecnologici3[
chiusure_esterne_mur_tufo=>string,
chiusure_esterne_mat_pieni=>string,
chiusure_esterne_lat=>string,
chiusure_esterne_cem=>string,
chiusure_esterne_pann=>string,
chiusure_esterne_altro=>string,
finiture_est_intonaco=>string,
finiture_est_intonaco_liscio=>string,
finiture_est_intonaco_spa=>string,
finiture_est_intonaco_sag=>string,
finiture_est_riv_ceramici=>string,
finiture_est_riv_ceramici=>string,
finiture_est_riv_ceramici_klinker=>string,
finiture_est_riv_ceramici_altro=>string,
finiture_est_facc_continue=>string,
finiture_est_lastre_di_marmo=>string,
finiture_est_altro=>string,
finiture_est_ele_pregio_arch=>string,
basamento_lastre_di_pietra=>string,
basamento_blocchi_di_pietra=>string,
basamento_lastre_di_marmo=>string,
basamento_intonaco_lavorato=>string,
basamento_altro=>string,
serramenti_legno=>float,
serramenti_all_preverniciato=>float,
serramenti_all_anodizzato=>float,
serramenti_ferro_verniciato=>float,
serramenti_ferro_battuto=>float,
serramenti_altro=>string,
fin_interne_pav_piastrelle_gres=>number,
fin_interne_pav_piastrelle_maiolica=>number,
fin_interne_pav_lastre_marmo=>string,
fin_interne_pav_bollettonato=>number,
fin_interne_pav_lastre_di_piatre=>number,
fin_interne_pav_cunetti=>number,
fin_interne_pav_altro=>number,
fin_interne_riv_intonaco=>number,
fin_interne_riv_lastre_di_marmo=>number,
fin_interne_riv_legno=>number,
fin_interne_riv_linoleum=>number,
fin_interne_riv_riv_ceramici=>number,
fin_interne_riv_riv_plastici=>number,
fin_interne_riv_altro=>string,
impianti_imp_ele_ill_parti_comuni=>string,
impianti_imp_ele_cancelli_moto=>string,
impianti_imp_ele_impianto_di_terra=>string,
impianti_imp_ele_imp_pro=>string,
impianti_imp_idrico_allaccciato=>string,
impianti_imp_idrico_scarico_misto=>string,
impianti_imp_idrico_stazione_pompaggio=>string,
83
Appendice
Codice Flora2
impianti_imp_idrico_relazione_ril=>string,
impianti_imp_anti_incendio_allacciato=>string,
impianti_imp_anti_incendio_serbatoio_autonomo=>string,
impianti_imp_anti_incendio_estintori=>string,
impianti_imp_riscaldamento_ali_caldaia=>string,
impianti_imp_riscaldamento_camini_canne_fumarie=>string,
altri_imp_distribuzione_gas=>string,
altri_imp_idrico_di_carico=>string,
altri_imp_citofonico=>string,
altri_imp_ascensore=>string,
altri_imp_montacarichi=>string,
altri_imp_antenna_tv=>string,
altri_imp_condizionamento=>string,
altri_imp_antenne_tel_mobile=>string,
altri_imp_altri=>string,
serramenti_altro_val=>float,
fin_interne_pav_lastre_marmo_val=>number,
fin_interne_pav_altro_val=>number,
fin_interne_pav_lastre_di_pietra_val=>number,
fin_interne_pav_cunetti_val=>number,
fin_interne_riv_altro_val=>number].
edifici_dati_tecnologici_prospetti[
nome=>string,
carattere_unitario=>string,
unif_vani=>string,
unif_infissi=>string,
pluv_esterne=>string,
canne_fum_esterne=>string,
ser_aggancio=>string,
cara_unitario_piano_terra=>string,
tabelle_insegne=>string,
vetrine=>string,
tende=>string,
pensiline=>string,
insegne_pubblicitarie=>string,
ind_top_interesse_storico=>string,
descrizione_ele_riscontrati=>string].
edifici_dati_tipologici[
tipo_edilizio_a_corte=>string,
tipo_edilizio_a_schiera=>string,
tipo_edilizio_a_blocco=>string,
tipo_edilizio_in_linea=>string,
tipo_edilizio_a_torre=>string,
tipo_edilizio_a_ballatoio=>string,
tipo_edilizio_a_galleria=>string,
tipo_edilizio_altro=>string].
edifici_dati_urb_normativi[
var_salvaguardia_zona=>string,
classificazione_tipologia_edificio=>string,
reg_vincolistico_art_2=>string,
reg_vincolistico_art_139=>string,
reg_vincolistico_idro=>string,
reg_vincolistico_archeo=>string,
reg_vincolistico_altro=>string].
info_libretto[
progettista=>string,
data_mese=>string,
data_anno=>string,
revisione=>string,
imm_copertina=>string].
84
Appendice
Codice Flora2
validazione[
anagrafe=>string,
sched_int=>string,
strategia=>string,
planning=>string,
costi=>string,
disagi=>string,
giudizio=>string].
/*Ontologia Libretto Manutenzione OLM*/
funzioni[
id_funzioni=>number,
nome_funzioni=>string,
id_tipi_elementi_tecnici=>number,
posizione=>string,
codice_funzione=>string].
tipi_elemento_tecnico[
id_tipi_elementi_tecnici=>number,
nome_tipo=>string,
nome_tipo_esteso=>string,
sottotipo=>string,
rif_uni=>string].
tipi_materiali[
id=>number,
nome_tipo=>string,
id_funzioni=>number].
materiali[
id_materiali=>number,
nome_material=>string].
anomalia[
nome_anomalie=>string,
id=>number,
id_anomalia=>number,
descrizione=>string,
localizzazione=>string,
cause=>string,
decadimenti=>string,
norme=>string,
path_foto=>string].
operazione[
id_operazione=>number,
cod=>string,
tipo_operazione=>string,
nome=>string,
periodicita=>number,
id_anomalia=>number,
categoria=>string].
specifiche_elementi_tecnici[
nome_prospetto=>string,
cod_sirena_elem_tec=>string,
cod_scheda_diagnosi=>string,
id_funzioni=>number,
id_materiali=>number].
85
Appendice
Codice Flora2
scheda_di_diagnosi[
nome_prospetto=>string,
cod_scheda_diagnosi=>string,
nome=>string,
tipo_soluzione=>string,
note=>string,
immagini=>string,
id_anomalia=>number].
schede_operazioni[
time_s=>string,
elab_progettuali=>string,
manodopera=>string,
materiali=>string,
attrezzature=>string,
dispositivi=>string,
note=>string,
id_operazione=>number].
schede_interventi[
descrizione=>string,
procedura_ese=>string,
norme_rif=>string].
schede_controlli[
oggetto=>string,
procedura_con=>string,
durata=>string,
procedure_pre=>string,
procedure_con=>string].
soluzione_tipi_elementi_tecnici[
nome=>string,
id_tipi_elementi_tecnici=>number,
numero_soluzione=>number,
tipo_soluzione=>string].
composizione_soluzioni[
nome=>string,
tipo_soluzione=>string,
id=>number].
materiali_dei_tipi[
id_materiale=>number,
id_tipo_materiale=>number].
/*Ontologia database Access ODBS */
ruoli::direttore_lavori.
ruoli::progettista.
ruoli::coordinatore_sicurezza_progettazione.
ruoli::coordinatore_sicurezza_esecuzione.
ruoli::direttore_tecnico_impresa.
partecipanti::tecnici.
partecipanti::utenti.
partecipanti::richiedenti.
partecipanti[
86
Appendice
Codice Flora2
id_partecipante=>number,
nominativo_partecipante=>string].
tecnici[
cap_tecnici=>string,
citta_tecnici=>string,
abitazione=>string,
fax_tecnici=>string,
mail_tecnici=>string,
telefono_tecnici=>string,
telefono2_tecnici=>string,
titolo=>string].
utenti[
id_utente=>string,
passwd=>string].
richiedenti[
cap_richiedenti=>string,
titolo_richiedenti=>string,
citta_richiedenti=>string,
domicilio_richiedenti=>string,
fax_richiedenti=>string,
mail_richiedenti=>string,
telefono_richiedenti=>string,
telefono2_richiedenti=>string].
doc_raccomandata[
anno=>string,
data=>string,
id_impresa=>string,
id_raccomandata=>string].
doc_riconferma[
anno=>string,
riconfermato=>string,
id_impresa=>string].
circoscrizioni[
id_circoscrizione=>string,
nome_circ=>string].
imprese[
id=>string,
ragione_sociale=>string,
cap1=>string,
cap2=>string,
citta1=>string,
citta2=>string,
email=>string,
partita_iva=>string,
data_inserimento=>string,
fax=>string,
sede_legale=>string,
sede_operativa=>string,
telefono1=>string,
telefono2=>string,
raccomandata=>doc_raccomandata,
riconferma=>doc_riconferma,
tipo_impresa=>string,
altre_info=>string
].
progetti[
anno_protocollo=>string,
87
Appendice
Codice Flora2
attivato36_per_cento=>string,
attivato_progetto_eurecho=>string,
attivato_pubblicita_su_ponteggi=>string,
avanzamento_0_50=>string,
avanzamento_50_100=>string,
avanzamento_fatture_1=>float,
avanzamento_fatture_2=>float,
certificato_LM=>string,
circoscrizione_pr=>circoscrizioni,
cod_sirena_prog=>string,
comune_pr=>string,
comunicazione_cond_inizio_lavori_a_enti=>string,
comunicazione_impr_inizio_lavori_a_enti=>string,
consegnato_LM=>string,
contratto_conforme_a_sirena=>string,
contributi_ottenuti=>float,
contributo_finanziato=>float,
contributo_rideterminato=>float,
coordinatore_sicurezza_e_progettazione=>tecnici,
coordinatore_sicurezza_esecuzione=>tecnici,
data_attivazione_cantiere_effettiva=>number,
data_attivazione_cantiere_prevista=>number,
data_attivazione_dia=>number,
data_certificato_LM=>number,
data_consegna_definitiva_LM=>number,
data_fine_cantiere_effettiva=>number,
data_fine_canitere_prevista=>number,
data_nota1_evasa=>number,
data_nota2_evasa=>number,
data_richiesta_contributo_a50=>number,
data_richiesta_contributo_a_saldo=>number,
data_scadenza_dia=>number,
data_ultimo_aggiornamento=>number,
delta_contributi=>float,
dir_lavori=>tecnici,
dir_tecnico=>tecnici,
foto_edi=>foto,
importo_intervento_ottenuto=>float,
importo_intervento_presunto_iniziale=>float,
importo_intervento_richiesto=>float,
importo_intervento_rideterminato=>float,
importo_preventivato_intervento_ottenuto=>float,
importo_preventivato_intervento_richiesto=>float,
impresa_appaltatrice=>imprese,
imprese_sub_appaltatrici=>imprese,
indirizzo_pr=>string,
informazione_progetto_eurecho=>string,
libretto_manutanzione=>string,
localizzazione_lavori=>string,
nota1=>string,
nota2=>string,
nota3=>string,
nota4=>string,
ottenuto_contributo_a50=>string,
ottenuto_contributo_a_saldo=>string,
percentuale_contributi=>float,
polizze_conformi_a_schema_sirena=>string,
progettista=>tecnici,
prog_arch=>tecnici, /*CHIEDERE COSA SONO*/
prog_imp=>tecnici,
prog_strut=>tecnici,
protocollo_servizi=>string,
richiedente=>richiedenti,
richiesto_contributo_a50=>string,
richiesto_contributo_a_saldo=>string,
stato_cantiere=>string,
tipologia_intervento=>string,
tipologia_lavori=>string,
titolo_edilizio=>string,
trasmessa_copia_polizze=>string,
trasmissione_copia_contratto=>string,
trasmissione_verbale_inizio_lavori=>string,
ultimati_lavori=>string,
88
Appendice
Codice Flora2
variazione_di_spese_previste=>float,
visiteCPT=>visite_cpt,
visiteSIRENA=>visite_sirena].
ruoli[
id_ruolo=>string].
visite::visite_sirena.
visite::visite_cpt.
visite[
data_visita=>string,
foto_visita=>>foto_visite,
protocollo=>string,
anno_protocollo=>string,
nota=>string,
rilevatore=>string,
risultato=>string].
/*CLASSI DEL DATABASE DEI DOCUMENTI CARTACEI*/
edifici_dati::dati_cartacei.
dati_cartacei::approvazione_beni_culturali.
dati_cartacei::dia.
dati_cartacei::prospetto.
dati_cartacei::computo_estimativo.
dati_cartacei::relazione_tecnica.
dati_cartacei::designazione_lavori.
computo_estimativo [
oggetto_computo=>string,
committente_computo=>string,
data_computo=>string,
tecnico_computo=>string].
approvazione_beni_culturali[
id_approvazione=>string,
url_approvazione=>string].
dia [
id_dia=>string,
url_dia=>string].
designazione_lavori [
data_des=>string,
id_designazione=>string,
num_ordinativo_des=>number,
categoria_des=>string,
lavoro_des=>string,
unita_misura_des=>string].
prospetto [
id_prospetto=>string,
id_designazione=>string,
nome_pros=>string,
par_ug_pros=>number,
lunghezza_pros=>number,
larghezza_pros=>number,
h_peso_pros=>number,
quantita_pros=>number,
importo_unitario_pros=>number
].
89
Appendice
Codice Flora2
relazione_tecnica[
id_relazione_tec=>string,
url_relazione_tec=>string].
/*---------------------------------------------------------------------------------------------------------------*/
/*INSERIMENTO DATI DATABASE DEI FATTI*/
B:planning[
nome->A,
cod_sirena->B,
cod->C,
data->D,
tipo_planning->E]:-pred_planning(A,B,C,D,E)@prolog().
C:anomalia[nome_anomalie->A,
id->B,
id_anomalia->C,
descrizione->D,
localizzazione->E,
cause->F,
decadimenti->G,
norme->H,
path_foto->I]:-pred_anomalie(A,B,C,D,E,F,G,H,I)@prolog().
CODSIRENA:edifici_dati_generali[
cod_sirena->CODSIRENA,
via->A,
accessi->B,
denominazione->C,
circoscriz->D,
tipo->E,
n_fabbricati->F,
nomeprop->G,
cognomeprop->H,
qualifica->K,
domicilio->L,
tel->M,
licenza->N,
cal_strut->T,
collaudatore->W,
prog_arch->P,
prog_imp->R,
prog_strut->S,
n_scale->Z,
certificato_ag->O,
impresa_esecutrice->U,
direttore_lavori->V,
centro_storico->CENTRO_STORICO,
comune->COMUNE,
possibile_interesse_arch_tec->POSSIBILE_INTERESSE,
riserva_20_lavori_statici->RISERVA20,
tipologia_edificio->PROPRIETA,
vincolato_sensi_1098->VINCOLATO1098,
vincolato_sensi_1497->VINCOLATO1497]:pred_progetti(_,Protocollo,Anno,_,_,_,PROPRIETA,_,COMUNE,_,POSSIBILE_INTERESSE,VINCOLATO1098,VIN
COLATO1497,RISERVA20,CENTRO_STORICO,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_)@prolog(),
crea_cod_sir(Protocollo,Anno,CODSIRENA)@prolog(),
pred_edifici_dati_generali(A,B,C,D,E,F,G,H,K,L,M,N,O,P,R,S,T,U,V,W,CODSIRENA,Z)@prolog().
D:edifici_dati_catastali[
foglio->A,
sezione->B,
p_lla->C,
90
Appendice
Codice Flora2
cod_sirena->D]:-pred_edifici_dati_catastali(A,B,C,D)@prolog().
N:edifici_dati_storici[epoca_costruzione->A,
tipo_epoca_costruzione->B,
scheda_post_sisma->C,
num_schede_post_sisma->D,
interventi_eseguiti->E,
int_provvisionali_spicconatura->F,
int_provvisionali_puntellamento->G,
int_provvisionali_altro->H,
data_verbale_diffida->I,
descrizione_verbale_diffida->L,
cep_verbale_diffida->M,
cod_sirena->N]:-pred_edifici_dati_storici(A,B,C,D,E,F,G,H,I,L,M,N)@prolog().
Z:edifici_dati_quantitativi[area_sedime->A,
altezza_max_edificio->B,
num_piani_fuori_terra->C,
n_min->D,
n_max->E,
num_piani_entro_terra->F,
n_scale->G,
vol_entro_terra->H,
vol_fuori_terra->I,
cantinole->L,
parch_coperti->M,
parch_scoperti->N,
spazi_comuni->O,
loc_caldaia->P,
stenditoi->Q,
giardini->R,
terrazzi->S,
altrodq->T,
destinazione_uni_immobiliari->U,
sup_tot->V,
sup_edi->W,
area_a_verde->X,
sup_scoperte->Y,
cod_sirena->Z,
altrodqmq->A1]:pred_edifici_dati_quantitativi(A,B,C,D,E,F,G,H,I,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1)@prolog().
K:edifici_inq_territoriale[
cav_sotterranee->A,
scheda_cav_sotterranee->B,
num_vie_accesso->C,
acces_text->D,
int_traffico->E,
rapp_altri_edifici->F,
n_lati->G,
fabb_stat_autonomo->H,
cod_sirena->K]:-pred_edifici_inq_territoriali(A,B,C,D,E,F,G,H,K)@prolog().
E1:edifici_dati_tecnologici1[
fondazioni_profonde->A,
fondazioni_su_pali->B,
fondazioni_superficiali->C,
fondazioni_superficiali_plinti_iso->D,
fondazioni_superficiali_plinti_coll->E,
fondazioni_superficiali_travi->F,
fondazioni_superficiali_platea->G,
fondazioni_superficiali_continue_tufo->H,
fondazioni_superficiali_continue_pietrame->I,
fondazioni_prof_piano_di_posa->K,
strutt_vert_muratura->L,
strutt_vert_muratura_tufo->M,
strutt_vert_muratura_tufo_con_irre->N,
strutt_vert_muratura_tufo_con_re->O,
strutt_vert_muratura_tufo_pietre_seg->P,
91
Appendice
Codice Flora2
strutt_vert_muratura_tufo_mat_pieni->Q,
strutt_vert_muratura_listata->R,
strutt_vert_muratura_matt_pieni->S,
strutt_vert_muratura_pietrame->T,
strutt_vert_muratura_cordoli->U,
strutt_vert_muratura_catene->V,
strutt_vert_cong_cementizio_armato->W,
strutt_vert_cong_cementizio_armato_setti->Y,
strutt_vert_cong_cementizio_armato_telaio->Z,
strutt_vert_mista->A1,
strutt_vert_mista_vert->B1,
strutt_vert_mista_orizz->C1,
strutt_vert_acciaio->D1,
cod_sirena->E1]:pred_edifici_dati_tecnologici1(A,B,C,D,E,F,G,H,I,K,L,M,N,O,P,Q,R,S,T,U,V,W,Y,Z,A1,B1,C1,D1,E1)@prolog()
.
O2:edifici_dati_tecnologici2[
strutt_orizz_volte->A,
strutt_orizz_volte_a_botte->B,
strutt_orizz_volte_a_botte_tufo->C,
strutt_orizz_volte_a_botte_mattoni->D,
strutt_orizz_volte_a_botte_mattoncelle->E,
strutt_orizz_volte_a_vela->F,
strutt_orizz_volte_a_vela_tufo->G,
strutt_orizz_volte_a_vela_mattoni->H,
strutt_orizz_volte_a_vela_mattoncelle->I,
strutt_orizz_volte_a_crociera->K,
strutt_orizz_volte_a_crociera_tufo->L,
strutt_orizz_volte_a_crociera_mattoni->M,
strutt_orizz_volte_a_crociera_mattoncelle->N,
strutt_orizz_volte_a_padiglione->O,
strutt_orizz_volte_a_padiglione_tufo->P,
strutt_orizz_volte_a_padiglione_mattoni->Q,
strutt_orizz_volte_a_padiglione_mattoncelle->R,
strutt_orizz_volte_a_schifo->S,
strutt_orizz_volte_a_schifo_tufo->T,
strutt_orizz_volte_a_schifo_mattoni->U,
strutt_orizz_volte_a_schifo_mattoncelle->V,
strutt_orizz_solai->W,
strutt_orizz_solai_late_opera->Y,
strutt_orizz_solai_late_semi->Z,
strutt_orizz_solai_legno->A1,
strutt_orizz_solai_ferro_tav->B1,
strutt_orizz_solai_ferro_legno->C1,
strutt_orizz_solai_non_noti->D1,
strutt_orizz_solai_altro->E1,
strutt_orizz_coperture->F1,
strutt_orizz_coperture_a_tetto->G1,
strutt_orizz_coperture_a_tetto_legno->H1,
strutt_orizz_coperture_a_tetto_legno_lat->I1,
strutt_orizz_coperture_a_tetto_cls_arm->K1,
strutt_orizz_coperture_a_tetto_cls_pre->L1,
strutt_orizz_coperture_a_tetto_cordolo->M1,
strutt_orizz_coperture_a_volta->N1,
strutt_orizz_coperture_a_volta_mur->O1,
strutt_orizz_coperture_a_volta_cls_arm->P1,
strutt_orizz_coperture_a_volta_cls_pre->Q1,
strutt_orizz_coperture_a_volta_cordolo->R1,
strutt_orizz_coperture_piane->S1,
strutt_orizz_coperture_piane_legno->T1,
strutt_orizz_coperture_piane_legno_lat->U1,
strutt_orizz_coperture_piane_cls_arm->V1,
strutt_orizz_coperture_piane_cls_pre->W1,
strutt_orizz_coperture_piane_cordolo->Y1,
strutt_orizz_coperture_legg_non_portanti->Z1,
strutt_orizz_coperture_legg_non_portanti_lam->A2,
strutt_orizz_coperture_legg_non_portanti_cem->B2,
strutt_orizz_coperture_legg_non_portanti_fib->C2,
strutt_orizz_coperture_legg_non_portanti_mat->D2,
strutt_orizz_coperture_legg_non_portanti_cordolo->E2,
strutt_orizz_scale->F2,
92
Appendice
Codice Flora2
strutt_orizz_scale_cls->G2,
strutt_orizz_scale_cls_soletta->H2,
strutt_orizz_scale_cls_trave->I2,
strutt_orizz_scale_mur->K2,
strutt_orizz_scale_mur_voltine->L2,
strutt_orizz_scale_mur_altro->M2,
strutt_orizz_scale_ferro_lat->N2,
cod_sirena->O2,
strutt_orizz_solai_altro_num->P2,
strutt_orizz_coperture_a_tetto_ferro_lat->Q2,
strutt_orizz_coperture_piane_ferro_lat->R2]:pred_edifici_dati_tecnologici2(A,B,C,D,E,F,G,H,I,K,L,M,N,O,P,Q,R,S,T,U,V,W,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,
I1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,K2,L2,M2,N2,O2,P2,Q2,R2)@pro
log().
S2:edifici_dati_tecnologici3[
chiusure_esterne_mur_tufo->A,
chiusure_esterne_mat_pieni->B,
chiusure_esterne_lat->C,
chiusure_esterne_cem->D,
chiusure_esterne_pann->E,
chiusure_esterne_altro->F,
finiture_est_intonaco->G,
finiture_est_intonaco_liscio->H,
finiture_est_intonaco_spa->I,
finiture_est_intonaco_sag->K,
finiture_est_riv_ceramici->L,
finiture_est_riv_ceramici_klinker->N,
finiture_est_riv_ceramici_altro->O,
finiture_est_facc_continue->P,
finiture_est_lastre_di_marmo->Q,
finiture_est_altro->R,
finiture_est_ele_pregio_arch->S,
basamento_lastre_di_pietra->T,
basamento_blocchi_di_pietra->U,
basamento_lastre_di_marmo->V,
basamento_intonaco_lavorato->W,
basamento_altro->Y,
serramenti_legno->Z,
serramenti_all_preverniciato->A1,
serramenti_all_anodizzato->B1,
serramenti_ferro_verniciato->C1,
serramenti_ferro_battuto->D1,
serramenti_altro->E1,
fin_interne_pav_piastrelle_gres->F1,
fin_interne_pav_piastrelle_maiolica->G1,
fin_interne_pav_lastre_marmo->H1,
fin_interne_pav_bollettonato->I1,
fin_interne_pav_lastre_di_piatre->K1,
fin_interne_pav_cunetti->L1,
fin_interne_pav_altro->M1,
fin_interne_riv_intonaco->N1,
fin_interne_riv_lastre_di_marmo->O1,
fin_interne_riv_legno->P1,
fin_interne_riv_linoleum->Q1,
fin_interne_riv_riv_ceramici->R1,
fin_interne_riv_riv_plastici->S1,
fin_interne_riv_altro->T1,
impianti_imp_ele_ill_parti_comuni->U1,
impianti_imp_ele_cancelli_moto->V1,
impianti_imp_ele_impianto_di_terra->W1,
impianti_imp_ele_imp_pro->Y1,
impianti_imp_idrico_allaccciato->Z1,
impianti_imp_idrico_scarico_misto->A2,
impianti_imp_idrico_stazione_pompaggio->B2,
impianti_imp_idrico_relazione_ril->C2,
impianti_imp_anti_incendio_allacciato->D2,
impianti_imp_anti_incendio_serbatoio_autonomo->E2,
impianti_imp_anti_incendio_estintori->F2,
impianti_imp_riscaldamento_ali_caldaia->G2,
impianti_imp_riscaldamento_camini_canne_fumarie->H2,
93
Appendice
Codice Flora2
altri_imp_distribuzione_gas->I2,
altri_imp_idrico_di_carico->K2,
altri_imp_citofonico->L2,
altri_imp_ascensore->M2,
altri_imp_montacarichi->N2,
altri_imp_antenna_tv->O2,
altri_imp_condizionamento->P2,
altri_imp_antenne_tel_mobile->Q2,
altri_imp_altri->R2,
cod_sirena->S2,
serramenti_altro_val->T2,
fin_interne_pav_lastre_marmo_val->U2,
fin_interne_pav_altro_val->V2,
fin_interne_pav_lastre_di_pietra_val->W2,
fin_interne_pav_cunetti_val->Y2,
fin_interne_riv_altro_val->Z2,
ciusurre_esterne_altro2->A3
]:pred_edifici_dati_tecnologici3(A,B,C,D,E,F,G,H,I,K,L,N,O,P,Q,R,S,T,U,V,W,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1
,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,K2,L2,M2,N2,O2,P2,Q2,R2,S2,T2,
V2,U2,W2,Y2,Z2,A3)@prolog().
Q:edifici_dati_tecnologici_prospetti[
nome->A,
carattere_unitario->B,
unif_vani->C,
unif_infissi->D,
pluv_esterne->E,
canne_fum_esterne->F,
ser_aggancio->G,
cara_unitario_piano_terra->H,
tabelle_insegne->I,
vetrine->K,
tende->L,
pensiline->M,
insegne_pubblicitarie->N,
ind_top_interesse_storico->O,
descrizione_ele_riscontrati->P,
cod_sirena->Q]:pred_edifici_dati_tecnologici_prospetti(A,B,C,D,E,F,G,H,I,K,L,M,N,O,P,Q)@prolog().
I:edifici_dati_tipologici[
tipo_edilizio_a_corte->A,
tipo_edilizio_a_schiera->B,
tipo_edilizio_a_blocco->C,
tipo_edilizio_in_linea->D,
tipo_edilizio_a_torre->E,
tipo_edilizio_a_ballatoio->F,
tipo_edilizio_a_galleria->G,
tipo_edilizio_altro->H,
cod_sirena->I]:-pred_edifici_dati_tipologici(A,B,C,D,E,F,G,H,I)@prolog().
H:edifici_dati_urb_normativi[
var_salvaguardia_zona->A,
classificazione_tipologia_edificio->B,
reg_vincolistico_art_2->C,
reg_vincolistico_art_139->D,
reg_vincolistico_idro->E,
reg_vincolistico_archeo->F,
reg_vincolistico_altro->G,
cod_sirena->H]:-pred_edifici_dati_urb_normativi(A,B,C,D,E,F,G,H)@prolog().
A:info_libretto[
cod_sirena->A,
progettista->B,
data_mese=>C,
data_anno=>D,
revisione=>E,
imm_copertina->F]:-pred_infolibretto(A,B,C,D,E,F)@prolog().
94
Appendice
Codice Flora2
H:validazione[
anagrafe->A,
sched_int->B,
strategia->C,
planning->D,
costi->E,
disagi->F,
giudizio->G,
cod_sirena->H]:-pred_validazione(A,B,C,D,E,F,G,H)@prolog().
A:funzioni[
id_funzioni->A,
nome_funzioni->B,
id_tipi_elementi_tecnici->C,
posizione->D,
codice_funzione->E]:-pred_funzioni(A,B,C,D,E)@prolog().
A:tipi_elemento_tecnico[
id_tipi_elementi_tecnici->A,
nome_tipo->B,
nome_tipo_esteso->C,
sottotipo->D,
rif_uni->E]:-pred_tipi_elementi_tecnici(A,B,C,D,E)@prolog().
A:tipi_materiali[
id->A,
nome_tipo->B,
id_funzioni->C]:-pred_tipi_materiali(A,B,C)@prolog().
A:materiali[
id_materiali->A,
nome_material->B]:-pred_materiali(A,B)@prolog().
A:operazione[
id_operazione->A,
cod->B,
tipo_operazione->C,
nome->D,
periodicita->E,
id_anomalia->F,
categoria->G]:-pred_operazioni(A,B,C,D,E,F,G)@prolog().
B:specifiche_elementi_tecnici[
nome_prospetto->A,
cod_sirena_elem_tec->B,
cod_scheda_diagnosi->C,
id_funzioni->D,
id_materiali->E]:-pred_specifiche_elementi_tecnici(A,B,C,D,E)@prolog().
B:scheda_di_diagnosi[
nome_prospetto->A,
cod_sirena->B,
cod_scheda_diagnosi->C,
nome->D,
tipo_soluzione->E,
note->F,
immagini->G,
id_anomalia->H]:-pred_schede_diagnosi(A,B,C,D,E,F,G,H)@prolog().
95
Appendice
Codice Flora2
[A,I]:schede_operazioni[
cod_sirena->A,
time_s->B,
elab_progettuali->C,
manodopera->D,
materiali->E,
attrezzature->F,
dispositivi->G,
note->H,
id_operazione->I]:-pred_schede_operazioni(A,B,C,D,E,F,G,H,I)@prolog().
[A,I]:schede_interventi[
cod_sirena->A,
time_s->B,
elab_progettuali->C,
manodopera->D,
materiali->E,
attrezzature->F,
dispositivi->G,
note->H,
id_operazione->I,
descrizione->L,
procedura_ese->M,
norme_rif->N]:-pred_schede_interventi(A,B,C,D,E,F,G,H,I,L,M,N)@prolog().
[A,I]:schede_controlli[
cod_sirena->A,
time_s->B,
elab_progettuali->C,
manodopera->D,
materiali->E,
attrezzature->F,
dispositivi->G,
note->H,
id_operazione->I,
oggetto->L,
procedura_con->M,
durata->N,
procedure_pre->O,
procedure_con->P]:-pred_schede_controlli(A,B,C,D,E,F,G,H,I,L,M,N,O,P)@prolog().
A:soluzione_tipi_elementi_tecnici[
nome->A,
id_tipi_elementi_tecnici->B,
numero_soluzione->C,
tipo_soluzione->D]:-pred_soluzione_tipi_elementi_tecnici(A,B,C,D)@prolog().
[A,C]:composizione_soluzioni[
nome->A,
tipo_soluzione->B,
id->C]:-pred_composizione_soluzioni(A,B,C)@prolog().
/*----------------------------------------DATABASE ACCESS------------------------------------------*/
CODICE:tecnici[
id_partecipante->CODICE,
nominativo_partecipante->NOMINATIVO,
cap_tecnici->CAP,
citta_tecnici->CITTA,
abitazione->DOMICILIO,
fax_tecnici->FAX,
mail_tecnici->MAIL,
telefono_tecnici->TELEFONO,
telefono2_tecnici->TELEFONO2,
titolo->TITOLO]:pred_tecnici(CODICE,TITOLO,NOMINATIVO,DOMICILIO,CITTA,CAP,TELEFONO,TELEFONO2,FAX,MAIL)@prolog().
96
Appendice
Codice Flora2
CODICE:utenti[
id_partecipante->CODICE,
nominativo_partecipante->SOGGETTO,
id_utente->ID,
passwd->PASS]:-pred_utenti(CODICE,ID,PASS,SOGGETTO)@prolog().
CODICE:richiedenti[
id_partecipante->CODICE,
nominativo_partecipante->NOMINATIVO,
cap_richiedenti->CAP,
titolo_richiedenti->TIPO,
citta_richiedenti->CITTA,
domicilio_richiedenti->DOMICILIO,
fax_richiedenti->FAX,
mail_richiedenti->MAIL,
telefono_richiedenti->TELEFONO,
telefono2_richiedenti->TELEFONO2]:pred_richiedenti(CODICE,TIPO,NOMINATIVO,DOMICILIO,CITTA,CAP,TELEFONO,TELEFONO2,FAX,MAIL,_)@prolog().
CODICE:circoscrizioni[
id_circoscrizione->CODICE,
nome_circ->CIRCOSCRIZIONE]:-pred_circoscrizione(CODICE,CIRCOSCRIZIONE)@prolog().
CODICE:imprese[
id->CODICE,
ragione_sociale->RAGIONE_SOCIALE,
cap1->CAP,
cap2->CAP1,
citta1->CITTA,
citta2->CITTA1,
email->EMAIL,
partita_iva->PARTITA_IVA,
data_inserimento->DATA_INSERIMENTO,
fax->FAX,
sede_legale->SEDE_LEGALE,
sede_operativa->SEDE_OPERATIVA,
telefono1->TELEFONO,
telefono2->TELEFONO2,
/*raccomandata->doc_raccomandata,*/
/*riconferma->doc_riconferma,*/
tipo_impresa->TIPO_IMPRESA,
altre_info->ALTRE_INFORMAZIONI
]:pred_imprese(CODICE,RAGIONE_SOCIALE,TIPO_IMPRESA,SEDE_LEGALE,CAP,CITTA,SEDE_OPERATIVA,CAP1,CITTA1,TELEF
ONO,TELEFONO2,FAX,EMAIL,PARTITA_IVA,ALTRE_INFORMAZIONI,DATA_INSERIMENTO)@prolog().
CODSIRENA:progetti[
anno_protocollo->Anno_Protocollo,
attivato36_per_cento->ATTIVATO_36,
attivato_progetto_eurecho->ATTIVATO_PROGETTO_EURECHO,
attivato_pubblicita_su_ponteggi->ATTIVATA_PUBBLICITA_PONTEGGI,
avanzamento_0_50->AVANZAMENTO_0_50,
avanzamento_50_100->AVANZAMENTO_50_100,
avanzamento_fatture_1->AVANZAMENTO_FATTURE,
avanzamento_fatture_2->AVANZAMENTO_FATTURE2,
certificato_LM->CERTIFICATO_LIBRETTO_MANUTENZIONE,
circoscrizione_pr->CIRC,
cod_sirena_prog->CODSIRENA,
comune_pr->COMUNE,
comunicazione_cond_inizio_lavori_a_enti->COMUNICATO_DA_CONDOMINIO_INIZIO_LAVORI_A_ENTI,
comunicazione_impr_inizio_lavori_a_enti->COMUNICATO_DA_IMPRESE_INIZIO_LAVORI_A_ENTI,
consegnato_LM->CONSEGNATO_LIBRETTO_MANUTENZIONE,
contratto_conforme_a_sirena->CONTRATTO_CONFORME_A_SIRENA,
contributi_ottenuti->CONTRIBUTI_OTTENUTI,
97
Appendice
Codice Flora2
contributo_finanziato->CONTRIBUTO_FINANZIATO,
contributo_rideterminato->CONTRIBUTO_RIDETERMINATO,
coordinatore_sicurezza_e_progettazione->CODICE_coordinatore_sicurezza_prog,
coordinatore_sicurezza_esecuzione->CODICE_coordinatore_sicurezza_esec,
data_attivazione_cantiere_effettiva->DATA_ATTIVAZIONE_CANTIERE_EFFETTIVA,
data_attivazione_cantiere_prevista->DATA_ATTIVAZIONE_CANTIERE_PREVISTA,
data_attivazione_dia->DATA_ATTIVAZIONE_DIA,
data_certificato_LM->DATA_CERTIFICATO_LM,
data_consegna_definitiva_LM->DATA_CONSEGNA_DEFINITIVA_LM,
data_fine_cantiere_effettiva->DATA_FINE_CANTIERE_EFFETTIVA,
data_fine_canitere_prevista->DATA_FINE_CANTIERE_PREVISTA,
data_nota1_evasa->DATA_NOTA1_EVASA,
data_nota2_evasa->DATA_NOTA2_EVASA,
data_richiesta_contributo_a50->DATA_RICHIESTO_CONTRIBUTO_A_50,
data_richiesta_contributo_a_saldo->DATA_RICHIESTO_CONTRIBUTO_A_SALDO,
data_scadenza_dia->DATA_SCADENZA_DIA,
data_ultimo_aggiornamento->Aggiornamento,
delta_contributi->DELTA_CONTRIBUTI,
dir_lavori>CODICE_DIRETTORE_LAVORI,
dir_tecnico->CODICE_DIRETTORE_TECNICO,
foto_edi->FOTO,
importo_intervento_ottenuto->IMPORTO_INTERVENTO_OTTENUTO,
importo_intervento_presunto_iniziale->IMPORTO_INTERVENTO_PRESUNTO_INIZIALE,
importo_intervento_richiesto->IMPORTO_INTERVENTO_RICHIESTO,
importo_intervento_rideterminato->IMPORTO_INTERVENTO_RIDETERMINATO,
importo_preventivato_intervento_ottenuto->IMPORTO_INTERVENTO_PREVENTIVATO_OTTENUTO,
importo_preventivato_intervento_richiesto->IMPORTO_INTERVENTO_PREVENTIVATO_RICHIESTO,
impresa_appaltatrice->CODICE_IMPRESA_APPALTATRICE,
imprese_sub_appaltatrici->IMPRESE_SUBAPPALTATRICI,
indirizzo_pr->INDIRIZ,
informazione_progetto_eurecho->INFORMAZIONI_PROGETTO_EURECHO,
libretto_manutanzione->LIBRETTO_MANUTENZIONE, /*VERIFICARE PERCHE' ESISTONO PIU' VOCI SU
LIBRETTO DI MANUTANZIONE*/
localizzazione_lavori->LOCALIZZAZIONE_LAVORI,
nota1->NOTA1,
nota2->NOTA2,
nota3->NOTA3,
nota4->NOTA4,
ottenuto_contributo_a50->OTTENUTO_CONTRIBUTO_A_50,
ottenuto_contributo_a_saldo->OTTENUTO_CONTRIBUTO_A_SALDO,
percentuale_contributi->PERCENTUALE_CONTRIBUTI,
polizze_conformi_a_schema_sirena->POLIZZE_CONFORMI_SCHEMA_SIRENA,
progettista->CODICE_PROGETTISTA,
protocollo_servizi->Protocollo_servizio,
richiedente->CODICE_RICHIEDENTE,
richiesto_contributo_a50->RICHIESTO_CONTRIBUTO_A_50,
richiesto_contributo_a_saldo->RICHIESTO_CONTRIBUTO_A_SALDO,
stato_cantiere->STATO_CANTIERE,
tipologia_intervento->TIPOLOGIA_INTERVENTO, /*CONTROLLARE SE CORRISPONDE A QUALCHE ALTRA VOCE*/
tipologia_lavori->TIPOLOGIA_LAVORI,
titolo_edilizio->TITOLO_EDILIZIO,
trasmessa_copia_polizze->TRASMESSA_COPIA_POLIZZE,
trasmissione_copia_contratto->TRASMISSIONE_COPIA_CONTRATTO,
trasmissione_verbale_inizio_lavori->TRASMISSIONE_VERBALE_O_INIZIO_LAVORI,
ultimati_lavori=>ULTIMATO_LAVORI,
variazione_di_spese_previste->VARIAZIONI_SPESA_PREVISTE,
visiteCPT=>visite_cpt,
visiteSIRENA=>visite_sirena]:pred_progetti(ID,Protocollo_servizio,Anno_Protocollo,_,_,Aggiornamento,_,INDIRIZ,COMUNE,CIRC,_,_,_,_,_,
CODICE_RICHIEDENTE,CODICE_PROGETTISTA,CODICE_DIRETTORE_LAVORI,CODICE_coordinatore_sicurezza_prog,CODICE
_coordinatore_sicurezza_esec,CODICE_IMPRESA_APPALTATRICE,IMPRESE_SUBAPPALTATRICI,CODICE_DIRETTORE_TECNI
CO,TITOLO_EDILIZIO,DATA_ATTIVAZIONE_DIA,DATA_SCADENZA_DIA,TIPOLOGIA_INTERVENTO,LOCALIZZAZIONE_LAVORI,TI
POLOGIA_LAVORI,AVANZAMENTO_FATTURE,DATA_NOTA1_EVASA,DATA_NOTA2_EVASA,AVANZAMENTO_FATTURE2,CONTRIBUTO_FI
NANZIATO,IMPORTO_INTERVENTO_PREVENTIVATO_RICHIESTO,DATA_RICHIESTO_CONTRIBUTO_A_50,IMPORTO_INTERVENTO_PR
EVENTIVATO_OTTENUTO,IMPORTO_INTERVENTO_RIDETERMINATO,VARIAZIONI_SPESA_PREVISTE,CONTRIBUTO_RIDETERMINATO
,IMPORTO_INTERVENTO_PRESUNTO_INIZIALE,LIBRETTO_MANUTENZIONE,CONTRIBUTI_OTTENUTI,DELTA_CONTRIBUTI,PERCEN
TUALE_CONTRIBUTI,IMPORTO_INTERVENTO_RICHIESTO,DATA_RICHIESTO_CONTRIBUTO_A_SALDO,IMPORTO_INTERVENTO_OTTE
NUTO,DATA_ATTIVAZIONE_CANTIERE_PREVISTA,DATA_FINE_CANTIERE_PREVISTA,DATA_ATTIVAZIONE_CANTIERE_EFFETTIVA
,DATA_FINE_CANTIERE_EFFETTIVA,STATO_CANTIERE,TRASMISSIONE_VERBALE_O_INIZIO_LAVORI,TRASMISSIONE_COPIA_CO
NTRATTO,CONTRATTO_CONFORME_A_SIRENA,TRASMESSA_COPIA_POLIZZE,POLIZZE_CONFORMI_SCHEMA_SIRENA,COMUNICATO_D
A_CONDOMINIO_INIZIO_LAVORI_A_ENTI,COMUNICATO_DA_IMPRESE_INIZIO_LAVORI_A_ENTI,_,ULTIMA_DATA_VISITA_SIREN
A,_,ULTIMA_DATA_VISITA_CPT,ATTIVATO_PROGETTO_EURECHO,INFORMAZIONI_PROGETTO_EURECHO,ATTIVATO_36,ATTIVATA
_PUBBLICITA_PONTEGGI,AVANZAMENTO_0_50,ULTIMATO_LAVORI,RICHIESTO_CONTRIBUTO_A_50,OTTENUTO_CONTRIBUTO_A_5
98
Appendice
Codice Flora2
0,AVANZAMENTO_50_100,RICHIESTO_CONTRIBUTO_A_SALDO,OTTENUTO_CONTRIBUTO_A_SALDO,CONSEGNATO_LIBRETTO_MANUT
ENZIONE,DATA_CONSEGNA_DEFINITIVA_LM,CERTIFICATO_LIBRETTO_MANUTENZIONE,DATA_CERTIFICATO_LM,NOTA1,NOTA2,N
OTA3,NOTA4,FOTO)@prolog(),
crea_cod_sir(Protocollo_servizio,Anno_Protocollo,CODSIRENA)@prolog().
[Protocollo_servizio,Data]:visite_sirena[
data_visita->Data,
foto_visita->FOTO,
protocollo->Protocollo_servizio,
anno_protocollo->Anno_Protocollo,
nota->Nota,
rilevatore->Rilevatore,
risultato->Risultato]:pred_visiteSIR(Protocollo_servizio,Anno_Protocollo,_,Data,Rilevatore,Risultato,Nota,FOTO)@prolog().
FOTO:foto_visite[
path_foto->FOTO]:-pred_visiteSIR(_,_,_,_,_,_,_,FOTO)@prolog().
[Protocollo_servizio,Data]:visite_cpt[
data_visita->Data,
foto_visita->FOTO,
protocollo->Protocollo_servizio,
anno_protocollo->Anno_Protocollo,
nota->Nota,
rilevatore->Rilevatore,
risultato->Risultato]:pred_visiteCPT(Protocollo_servizio,Anno_Protocollo,_,Data,Rilevatore,Risultato,Nota,FOTO)@prolog().
[A,B]:materiali_dei_tipi[
id_materiale->A,
id_tipo_materiale->B]:-pred_materiali_dei_tipi(A,B)@prolog().
/*--------------------------------------------DATABASE ACCESS DOC--------------------------------------------------*/
[A,D]:computo_estimativo [
cod_sirena->A,
oggetto_computo->B,
committente_computo->C,
data_computo->D,
tecnico_computo->E]:-pred_computo(A,B,C,D,E)@prolog().
B:approvazione_beni_culturali[
cod_sirena->A,
id_app->B,
url_dia->C]:-pred_approvazione_beni(A,B,C)@prolog().
B:dia [
cod_sirena->A,
id->B,
url_dia->C
]:-pred_dia(A,B,C)@prolog().
C:designazione_lavori [
cod_sirena->A,
data_des->B,
id_designazione->C,
num_ordinativo_des->D,
categoria_des->E,
lavoro_des->F,
unita_misura_des->G]:-pred_designazione(A,B,C,D,E,F,G)@prolog().
A:prospetto [
id_prospetto->A,
99
Appendice
Codice Flora2
id_designazione_pros->B,
nome_pros->C,
par_ug_pros->D,
lunghezza_pros->E,
larghezza_pros->F,
h_peso_pros->G,
quantita_pros->H,
importo_unitario_pros->I,
importo_totale_pros->L]:-pred_prospetto(A,B,C,D,E,F,G,H,I,L)@prolog().
B:relazione_tecnica[
cod_sirena->A,
id_rel->B,
url_rel->C]:-pred_relazione_tecnica(A,B,C)@prolog().
100
Appendice
Codice Java
Codice Java
import sirena.interfaccia.MainFrame;
public class Sirena {
public static void main(String[] args) {
MainFrame m;
m = new MainFrame();
}
}
/* PACKAGE INTERFACCIA */
package sirena.interfaccia;
import java.awt.*;
import javax.swing.*;
import com.ontotext.flora2.XSBFlora;
import java.awt.Font;
import java.awt.BorderLayout;
import javax.swing.BorderFactory;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MainFrame extends JFrame {
JPanel display = new JPanel();
JProgressBar barraProgresso = new JProgressBar();
JLabel jLabel1 = new JLabel();
JButton jButton1 = new JButton();
BorderLayout borderLayout1 = new BorderLayout();
XSBFlora flora;
Panello1 pan;
GridBagLayout gridBagLayout1 = new GridBagLayout();
public MainFrame() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
private void jbInit() throws Exception {
XSBFlora.sFloraRootDir = "C:\\sirena\\flora2";
flora = new XSBFlora("C:\\sirena\\XSB");
Object[] bindings = null;
getContentPane().setLayout(borderLayout1);
this.setSize(800,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocale(new java.util.Locale("it", "", ""));
this.setResizable(true);
this.setTitle("SIRENA DB");
this.setVisible(true);
barraProgresso.setStringPainted(true);
jLabel1.setFont(new java.awt.Font("Arial", Font.PLAIN, 20));
jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
jLabel1.setText("CARICAMENTO DATI");
jButton1.setBorder(BorderFactory.createEtchedBorder());
jButton1.setText("OK");
jButton1.addActionListener(new MainFrame_jButton1_actionAdapter(this));
display.setLayout(gridBagLayout1);
this.getContentPane().add(display, java.awt.BorderLayout.CENTER);
display.add(jButton1, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(19, 350, 245, 356), 61, 17));
jButton1.setEnabled(false);
101
Appendice
Codice Java
display.add(barraProgresso, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(6, 250, 0, 250), 200, 2));
display.add(jLabel1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(245, 250, 0, 250), 300, 39));
this.setVisible(true);
flora.FLogicCommand("[loader].");
barraProgresso.setValue(30);
flora.FLogicCommand("[sirena].");
barraProgresso.setValue(100);
jButton1.setEnabled(true);
this.setVisible(true);
}
public void jButton1_actionPerformed(ActionEvent e) {
display.removeAll();
this.repaint();
this.setVisible(true);
pan = new Panello1(this,display,flora);
}
}
class MainFrame_jButton1_actionAdapter implements ActionListener {
private MainFrame adaptee;
MainFrame_jButton1_actionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
package sirena.interfaccia;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GridBagLayout;
import java.awt.*;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class AvvisoEccezione extends JDialog {
String testo;
public AvvisoEccezione(JFrame padre,String t) {
super(padre,"ERRORE",true);
this.setSize(397,191);
testo = t;
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void jbInit() throws Exception {
this.getContentPane().setLayout(gridBagLayout1);
this.setDefaultCloseOperation(javax.swing.WindowConstants.
DISPOSE_ON_CLOSE);
jButton1.setText("CHIUDI");
jButton1.addActionListener(new AvvisoEccezione_jButton1_actionAdapter(this));
this.getContentPane().add(jScrollPane1,
new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
this.getContentPane().add(jButton1,
new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
102
Appendice
Codice Java
jScrollPane1.getViewport().add(jTextArea1);
jTextArea1.setMinimumSize(new Dimension(200, 100));
jTextArea1.setPreferredSize(new Dimension(300, 100));
jTextArea1.setEditable(false);
jScrollPane1.setMinimumSize(new Dimension(200, 100));
jScrollPane1.setPreferredSize(new Dimension(300, 100));
jTextArea1.setText(testo);
this.setVisible(true);
}
}
GridBagLayout gridBagLayout1 = new GridBagLayout();
JScrollPane jScrollPane1 = new JScrollPane();
JTextArea jTextArea1 = new JTextArea();
JButton jButton1 = new JButton();
public void jButton1_actionPerformed(ActionEvent e) {
this.dispose();
}
class AvvisoEccezione_jButton1_actionAdapter implements ActionListener {
private AvvisoEccezione adaptee;
AvvisoEccezione_jButton1_actionAdapter(AvvisoEccezione adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}
package sirena.interfaccia;
import
import
import
import
import
import
import
javax.swing.*;
java.awt.BorderLayout;
com.borland.jbcl.layout.XYLayout;
com.borland.jbcl.layout.*;
java.awt.Font;
java.awt.event.ActionEvent;
java.awt.event.ActionListener;
public class AvvisoSelezione extends JDialog {
XYLayout xYLayout1 = new XYLayout();
JLabel avviso = new JLabel();
JButton ok = new JButton();
public AvvisoSelezione(JFrame padre) {
super(padre,"AVVISO",true);
this.setSize(350,130);
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void jbInit() throws Exception {
this.setDefaultCloseOperation(javax.swing.WindowConstants.
DISPOSE_ON_CLOSE);
this.setResizable(false);
this.getContentPane().setLayout(xYLayout1);
xYLayout1.setWidth(350);
xYLayout1.setHeight(130);
avviso.setFont(new java.awt.Font("Verdana", Font.PLAIN, 13));
avviso.setHorizontalAlignment(SwingConstants.CENTER);
avviso.setText("Devi prima selezionare una riga della tabella");
ok.addActionListener(new AvvisoSelezione_ok_actionAdapter(this));
this.getContentPane().add(ok, new XYConstraints(112, 56, 107, 29));
this.getContentPane().add(avviso, new XYConstraints(7, 5, 336, 47));
ok.setText("OK");
103
Appendice
Codice Java
}
this.setVisible(true);
public void ok_actionPerformed(ActionEvent e) {
dispose();
}
}
class AvvisoSelezione_ok_actionAdapter implements ActionListener {
private AvvisoSelezione adaptee;
AvvisoSelezione_ok_actionAdapter(AvvisoSelezione adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.ok_actionPerformed(e);
}
}
package sirena.interfaccia;
import
import
import
import
import
import
import
javax.swing.*;
java.awt.GridBagLayout;
java.awt.*;
java.awt.Dimension;
java.awt.event.ActionEvent;
java.awt.event.ActionListener;
db.IterazioneDb;
public class DialogModLocalBassi extends JDialog {
int id;
JTextField txtLocaliz[];
public DialogModLocalBassi(JFrame padre, int key, JTextField txtLocal[]) {
super(padre,"Localizzazione Basso",true);
this.setSize(600,200);
IterazioneDb.caricaBassiInfo(key,txtArray);
id = key;
txtLocaliz = txtLocal;
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void jbInit() throws Exception {
this.setDefaultCloseOperation(javax.swing.WindowConstants.
DISPOSE_ON_CLOSE);
this.getContentPane().setLayout(gridBagLayout1);
jLabel1.setText("(Via, Piazza, Vico, Largo, ecc)");
jLabel2.setText("n. civico");
jTextField1.setMinimumSize(new Dimension(251, 19));
jTextField1.setColumns(30);
jTextField2.setMinimumSize(new Dimension(43, 19));
jTextField2.setColumns(4);
jLabel3.setText("ricadente nell\'edificio (Via, Piazza, ecc)");
jTextField3.setMinimumSize(new Dimension(171, 19));
jTextField3.setColumns(20);
jLabel4.setText("n. civico");
jTextField4.setMinimumSize(new Dimension(43, 19));
jTextField4.setColumns(4);
jButton1.setText("CHIUDI/APPLICA");
jButton1.addActionListener(new
DialogModLocalBassi_jButton1_actionAdapter(this));
this.getContentPane().add(jLabel2,
new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
this.getContentPane().add(jTextField2,
104
Appendice
Codice Java
new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 15, 0, 0), 0, 0));
this.getContentPane().add(jLabel1,
new GridBagConstraints(0, 0, 1, 1, 0.0,
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
this.getContentPane().add(jTextField4,
new GridBagConstraints(3, 2, 1, 1, 0.0,
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 10, 0, 0), 0, 0));
this.getContentPane().add(jLabel4,
new GridBagConstraints(2, 2, 1, 1, 0.0,
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
this.getContentPane().add(jTextField3,
new GridBagConstraints(1, 2, 1, 1, 0.0,
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 15, 0, 0), 0, 0));
this.getContentPane().add(jLabel3,
new GridBagConstraints(0, 2, 1, 1, 0.0,
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
this.getContentPane().add(jTextField1,
new GridBagConstraints(1, 0, 1, 1, 0.0,
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 15, 0, 0), 0, 0));
this.getContentPane().add(jButton1,
new GridBagConstraints(0, 3, 4, 1, 0.0,
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
this.setVisible(true);
}
0.0
0.0
0.0
0.0
0.0
0.0
0.0
GridBagLayout gridBagLayout1 = new GridBagLayout();
JLabel jLabel1 = new JLabel();
JTextField jTextField1 = new JTextField();
JLabel jLabel2 = new JLabel();
JTextField jTextField2 = new JTextField();
JLabel jLabel3 = new JLabel();
JTextField jTextField3 = new JTextField();
JLabel jLabel4 = new JLabel();
JTextField jTextField4 = new JTextField();
JButton jButton1 = new JButton();
JTextField txtArray[] = {jTextField1,jTextField2,jTextField3,jTextField4};
public void chiudiDialog(ActionEvent e) {
IterazioneDb.insertLocalBassi(id,txtArray);
txtLocaliz[0].setText(txtArray[0].getText());
txtLocaliz[1].setText(txtArray[1].getText());
txtLocaliz[2].setText(txtArray[2].getText());
txtLocaliz[3].setText(txtArray[3].getText());
this.dispose();
}
}
class DialogModLocalBassi_jButton1_actionAdapter implements ActionListener {
private DialogModLocalBassi adaptee;
DialogModLocalBassi_jButton1_actionAdapter(DialogModLocalBassi adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.chiudiDialog(e);
}
}
package sirena.interfaccia;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.*;
105
Appendice
Codice Java
public class DialogAltreInfo extends JDialog {
JFrame mainFrame;
int id;
public DialogAltreInfo(JFrame padre, int key) {
super(padre,"Altre Info Bassi",true);
this.setSize(800,500);
mainFrame = padre;
id = key;
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
private void jbInit() throws Exception {
this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
this.getContentPane().setLayout(borderLayout1);
pannello = new PanAltreInfoBassi(mainFrame,id,this);
jScrollPane1 = new JScrollPane(pannello);
this.add(jScrollPane1);
this.setVisible(true);
}
PanAltreInfoBassi pannello;
JScrollPane jScrollPane1;
BorderLayout borderLayout1 = new BorderLayout();
package sirena.interfaccia;
import
import
import
import
import
import
import
import
javax.swing.*;
java.awt.GridBagLayout;
java.awt.*;
javax.swing.border.TitledBorder;
java.awt.Dimension;
java.awt.event.ActionEvent;
java.awt.event.ActionListener;
javax.swing.table.DefaultTableModel;
public class InserimentoComponente extends JDialog {
public InserimentoComponente(JFrame padre,DefaultTableModel tab) {
super(padre,"Inserimento nuovo componente",true);
tabCompo = tab;
this.setSize(550,250);
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void jbInit() throws Exception {
this.setDefaultCloseOperation(javax.swing.WindowConstants.
DISPOSE_ON_CLOSE);
this.getContentPane().setLayout(gridBagLayout1);
jPanel1.setLayout(gridBagLayout2);
jPanel1.setBorder(titledBorder1);
jPanel1.setPreferredSize(new Dimension(500, 150));
jLabel1.setText("Sesso");
jLabel2.setText("Relazione di parentela");
jLabel3.setText("Età");
jTextField1.setMinimumSize(new Dimension(51, 19));
jTextField1.setColumns(5);
jTextField2.setMinimumSize(new Dimension(91, 19));
jTextField2.setColumns(10);
jLabel4.setText("Attività");
jTextField3.setMinimumSize(new Dimension(131, 19));
jTextField3.setColumns(15);
jButton1.setText("Annulla");
jButton1.addActionListener(new
InserimentoComponente_jButton1_actionAdapter(this));
jButton2.setText("Inserisci");
jButton2.addActionListener(new
106
Appendice
Codice Java
InserimentoComponente_jButton2_actionAdapter(this));
this.getContentPane().add(jPanel1,
new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
jPanel1.add(jLabel1, new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
jPanel1.add(jLabel2, new GridBagConstraints(0, 1, 2, 1, 0.0, 0.0
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
jPanel1.add(jComboBox1, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 20, 0, 0), 0, 0));
jPanel1.add(jLabel3, new GridBagConstraints(3, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 50, 0, 0), 0, 0));
jPanel1.add(jTextField1, new GridBagConstraints(4, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 20, 0, 0), 0, 0));
jPanel1.add(jTextField2, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 20, 0, 0), 0, 0));
jPanel1.add(jLabel4, new GridBagConstraints(3, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 50, 0, 0), 0, 0));
jPanel1.add(jTextField3, new GridBagConstraints(4, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 20, 0, 0), 0, 0));
jPanel1.add(jButton1, new GridBagConstraints(3, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 15, 0, 0), 0, 0));
jPanel1.add(jButton2, new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
this.setVisible(true);
}
DefaultTableModel tabCompo;
String scelte[] = {"M","F"};
TitledBorder titledBorder1 = new TitledBorder("Nuovo Componente");
GridBagLayout gridBagLayout1 = new GridBagLayout();
JPanel jPanel1 = new JPanel();
GridBagLayout gridBagLayout2 = new GridBagLayout();
JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
JComboBox jComboBox1 = new JComboBox(scelte);
JLabel jLabel3 = new JLabel();
JTextField jTextField1 = new JTextField();
JTextField jTextField2 = new JTextField();
JLabel jLabel4 = new JLabel();
JTextField jTextField3 = new JTextField();
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();
public void bottAnnulla(ActionEvent e) {
this.dispose();
}
public void insertCompo(ActionEvent e) {
Object v[] = new Object[5];
v[0] = tabCompo.getRowCount() + 1;
v[1] = jComboBox1.getSelectedItem().toString();
v[2] = jTextField1.getText();
v[3] = jTextField2.getText();
v[4] = jTextField3.getText();
tabCompo.addRow(v);
this.dispose();
}
}
class InserimentoComponente_jButton2_actionAdapter implements ActionListener {
107
Appendice
Codice Java
private InserimentoComponente adaptee;
InserimentoComponente_jButton2_actionAdapter(InserimentoComponente adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.insertCompo(e);
}
}
class InserimentoComponente_jButton1_actionAdapter implements ActionListener {
private InserimentoComponente adaptee;
InserimentoComponente_jButton1_actionAdapter(InserimentoComponente adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.bottAnnulla(e);
}
}
package sirena.interfaccia;
import
import
import
import
import
import
import
import
import
javax.swing.*;
java.awt.GridBagLayout;
java.awt.*;
java.awt.Dimension;
java.awt.Font;
java.awt.event.ActionEvent;
java.awt.event.ActionListener;
db.IterazioneDb;
javax.swing.table.DefaultTableModel;
public class InserimentoLavori extends JDialog {
DefaultTableModel tabella;
String codSirena;
public InserimentoLavori(JFrame padre, DefaultTableModel tab, String cod) {
super(padre,"Lavori",true);
this.setSize(585,352);
tabella = tab;
codSirena = cod;
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void jbInit() throws Exception {
this.getContentPane().setLayout(gridBagLayout1);
labelOrd.setFont(new java.awt.Font("Verdana", Font.BOLD, 12));
labelOrd.setText("Num. Ord. TARIFFA:");
labelLavoro.setFont(new java.awt.Font("Verdana", Font.BOLD, 12));
labelLavoro.setText("Designazione Lavori:");
txtOrd.setMinimumSize(new Dimension(50, 20));
bottOK.setText("OK");
bottOK.addActionListener(new InserimentoLavori_bottOK_actionAdapter(this));
bottAnnulla.setText("Annulla");
bottAnnulla.addActionListener(new
InserimentoLavori_bottAnnulla_actionAdapter(this));
scrollArea.setMinimumSize(new Dimension(200, 50));
scrollArea.setPreferredSize(new Dimension(300, 100));
labelTitolo.setFont(new java.awt.Font("Arial", Font.PLAIN, 18));
labelTitolo.setText("DESIGNAZIONE LAVORI");
txtOrd.setColumns(20);
areaLavori.setMinimumSize(new Dimension(200, 30));
areaLavori.setPreferredSize(new Dimension(300, 100));
108
Appendice
Codice Java
}
this.getContentPane().add(scrollArea,
new GridBagConstraints(2, 2, 1, 1, 0.0,
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
scrollArea.getViewport().add(areaLavori);
this.getContentPane().add(bottAnnulla,
new GridBagConstraints(2, 3, 1, 1, 0.0,
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(10, 15, 0, 0), 0, 0));
this.getContentPane().add(txtOrd,
new GridBagConstraints(2, 1, 1, 1, 0.0,
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 0, 30, 0), 0, 0));
this.getContentPane().add(labelOrd,
new GridBagConstraints(0, 1, 1, 1, 0.0,
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 30, 0), 0, 0));
this.getContentPane().add(labelLavoro,
new GridBagConstraints(0, 2, 1, 1, 0.0,
, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
this.getContentPane().add(bottOK,
new GridBagConstraints(1, 3, 1, 1, 0.0,
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(10, 0, 0, 0), 0, 0));
this.getContentPane().add(labelTitolo,
new GridBagConstraints(0, 0, 3, 1, 0.0,
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 50, 15), 0, 0));
this.setVisible(true);
0.0
0.0
0.0
0.0
0.0
0.0
0.0
GridBagLayout gridBagLayout1 = new GridBagLayout();
JLabel labelOrd = new JLabel();
JLabel labelLavoro = new JLabel();
JTextField txtOrd = new JTextField();
JScrollPane scrollArea = new JScrollPane();
JButton bottOK = new JButton();
JButton bottAnnulla = new JButton();
JLabel labelTitolo = new JLabel();
JTextPane areaLavori = new JTextPane();
public void bottAnnulla_actionPerformed(ActionEvent e) {
this.dispose();
}
public void bottOK_actionPerformed(ActionEvent e) {
IterazioneDb.InsertLavoro(tabella,codSirena,txtOrd,areaLavori);
this.dispose();
}
}
class InserimentoLavori_bottOK_actionAdapter implements ActionListener {
private InserimentoLavori adaptee;
InserimentoLavori_bottOK_actionAdapter(InserimentoLavori adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.bottOK_actionPerformed(e);
}
}
class InserimentoLavori_bottAnnulla_actionAdapter implements ActionListener {
private InserimentoLavori adaptee;
InserimentoLavori_bottAnnulla_actionAdapter(InserimentoLavori adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.bottAnnulla_actionPerformed(e);
109
Appendice
Codice Java
}
}
package sirena.interfaccia;
import
import
import
import
import
import
import
import
javax.swing.*;
java.awt.GridBagLayout;
java.awt.*;
java.awt.Font;
java.awt.Dimension;
db.IterazioneDb;
java.awt.event.ActionEvent;
java.awt.event.ActionListener;
public class ModificaComputo extends JDialog {
String codSir;
JTextField txtTP[] = new JTextField[4];
public ModificaComputo(JFrame padre, String cod,JTextField t[]) {
super(padre,"Modifica Computo Estimativo",true);
codSir = cod;
txtTP = t;
this.setSize(579,312);
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void jbInit() throws Exception {
this.getContentPane().setLayout(gridBagLayout1);
titolo.setFont(new java.awt.Font("Verdana", Font.PLAIN, 18));
titolo.setText("COMPUTO ESTIMATIVO");
labelData.setFont(new java.awt.Font("Verdana", Font.BOLD, 12));
txtData.setColumns(25);
labelData.setText("Data:");
txtComm.setColumns(25);
labelComm.setFont(new java.awt.Font("Tahoma", Font.BOLD, 12));
labelComm.setText("Committente:");
labelOgg.setFont(new java.awt.Font("Verdana", Font.BOLD, 12));
labelTecnico.setFont(new java.awt.Font("Verdana", Font.BOLD, 12));
labelTecnico.setText("Tecnico");
txtTecnico.setColumns(25);
jScrollPane1.setPreferredSize(new Dimension(300, 50));
jButton1.setText("CHIUDI");
jButton1.addActionListener(new ModificaComputo_jButton1_actionAdapter(this));
this.getContentPane().add(titolo,
new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 50, 0), 0, 0));
labelOgg.setText("Oggetto:");
this.getContentPane().add(labelComm,
new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 0, 10, 0), 0, 0));
this.getContentPane().add(labelData,
new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 0, 10, 0), 0, 0));
this.getContentPane().add(labelTecnico,
new GridBagConstraints(0, 4, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 0, 10, 0), 0, 0));
jScrollPane1.getViewport().add(jTextPane1);
this.getContentPane().add(labelOgg,
new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0
, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
new Insets(0, 0, 10, 0), 0, 0));
this.getContentPane().add(txtTecnico,
new GridBagConstraints(1, 4, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 15, 10, 0), 0, 0));
this.getContentPane().add(jScrollPane1,
110
Appendice
Codice Java
new GridBagConstraints(1, 3, 1, 1, 0.0,
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 15, 10, 0), 0, 0));
this.getContentPane().add(txtComm,
new GridBagConstraints(1, 2, 1, 1, 0.0,
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 15, 10, 0), 0, 0));
this.getContentPane().add(txtData,
new GridBagConstraints(1, 1, 1, 1, 0.0,
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 15, 10, 0), 0, 0));
this.getContentPane().add(jButton1,
new GridBagConstraints(1, 5, 1, 1, 0.0,
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
}
txt[0] = txtData;
txt[1] = txtComm;
txt[2] = txtTecnico;
IterazioneDb.CaricaComputoDaDialog(codSir,txt,jTextPane1);
this.setVisible(true);
GridBagLayout gridBagLayout1 = new GridBagLayout();
JLabel titolo = new JLabel();
JLabel labelData = new JLabel();
JTextField txtData = new JTextField();
JLabel labelComm = new JLabel();
JTextField txtComm = new JTextField();
JLabel labelOgg = new JLabel();
JLabel labelTecnico = new JLabel();
JTextField txtTecnico = new JTextField();
JScrollPane jScrollPane1 = new JScrollPane();
JTextPane jTextPane1 = new JTextPane();
JButton jButton1 = new JButton();
JTextField txt[] = new JTextField[3];
public void jButton1_actionPerformed(ActionEvent e) {
txt[0] = txtData;
txt[1] = txtComm;
txt[2] = txtTecnico;
IterazioneDb.ModificaComputo(codSir,txt,jTextPane1);
IterazioneDb.CaricaComputo(codSir,txtTP);
this.dispose();
}
}
class ModificaComputo_jButton1_actionAdapter implements ActionListener {
private ModificaComputo adaptee;
ModificaComputo_jButton1_actionAdapter(ModificaComputo adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}
package sirena.interfaccia;
import
import
import
import
import
import
import
import
import
import
javax.swing.*;
java.awt.GridBagLayout;
java.awt.*;
java.awt.Dimension;
javax.swing.border.TitledBorder;
sirena.utility.ModelloTabellaResidenti;
db.IterazioneDb;
sirena.utility.AzioneBottAddComponente;
java.awt.event.ActionEvent;
java.awt.event.ActionListener;
public class PanAltreInfoBassi extends JPanel {
JFrame mainFrame;
111
0.0
0.0
0.0
0.0
Appendice
Codice Java
int id;
JDialog dialog;
public PanAltreInfoBassi(JFrame mf, int key, JDialog dial) {
mainFrame = mf;
id = key;
dialog = dial;
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void jbInit() throws Exception {
this.setLayout(gridBagLayout1);
this.setPreferredSize(new Dimension(750, 1100));
panUbi.setBorder(titledBorder2);
panUbi.setMinimumSize(new Dimension(700, 100));
panUbi.setPreferredSize(new Dimension(700, 100));
panUbi.setLayout(gridBagLayout3);
jCheckBox1.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox1.setText("direttamente sulla strada");
jCheckBox2.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox2.setText("all\'interno di un cortile");
jCheckBox3.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox3.setText("all\'interno di un androne");
jCheckBox4.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox4.setText("terreneo a livello di strada");
jCheckBox5.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox5.setText("seminterrato");
jCheckBox6.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox6.setText("rialzato");
panTipologia.setBorder(titledBorder3);
panTipologia.setMinimumSize(new Dimension(700, 200));
panTipologia.setPreferredSize(new Dimension(700, 200));
panTipologia.setLayout(gridBagLayout4);
jCheckBox7.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox7.setText("1 porta ingresso");
jCheckBox8.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox8.setText("1 porta ingresso + 1 finestra laterale");
jCheckBox9.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox9.setText("1 porta ingresso + 2 finestra laterale");
jLabel5.setText("numero vani");
jTextField5.setColumns(3);
jLabel6.setText("n. vani ricavati in orizzontale");
jTextField6.setColumns(3);
jLabel7.setText("n. vani ricavati in verticale");
jTextField7.setColumns(3);
jCheckBox10.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox10.setText("altre aperture");
jLabel8.setText("tipo");
jTextField8.setColumns(20);
jLabel9.setText("numero");
jTextField9.setColumns(3);
panImm.setBorder(titledBorder4);
panImm.setMinimumSize(new Dimension(700, 100));
panImm.setPreferredSize(new Dimension(700, 100));
panImm.setLayout(gridBagLayout5);
jCheckBox11.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox11.setText("faticente");
jCheckBox12.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox12.setText("ristrutturata solo esternamente");
jCheckBox13.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox13.setText("ristrutturata solo internamente");
jCheckBox14.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox14.setText("ristrutturata esternamente ed internamente");
panEdi.setBorder(titledBorder5);
panEdi.setMinimumSize(new Dimension(700, 100));
panEdi.setPreferredSize(new Dimension(700, 100));
panEdi.setLayout(gridBagLayout6);
jCheckBox15.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox15.setText("fatiscente");
112
Appendice
Codice Java
jCheckBox16.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox16.setText("ristrutturato solo esternamente");
jCheckBox17.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox17.setText("ristrutturato solo internamente");
jCheckBox18.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox18.setText("ristrutturato esternamente ed internamente");
panUso.setBorder(titledBorder6);
panUso.setMinimumSize(new Dimension(700, 200));
panUso.setPreferredSize(new Dimension(700, 200));
panUso.setLayout(gridBagLayout7);
jCheckBox19.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox19.setText("abitazione");
jCheckBox20.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox20.setText("commerciale");
jCheckBox21.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox21.setText("artigianale");
jCheckBox22.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox22.setText("non utilizzato");
jTextPane1.setMinimumSize(new Dimension(150, 70));
jTextPane1.setPreferredSize(new Dimension(300, 100));
jScrollPane1.setMinimumSize(new Dimension(150, 70));
jScrollPane1.setPreferredSize(new Dimension(200, 100));
jLabel10.setText(
"(Se si tratta di uso non abitativo, specificare il tipo di attività, " +
"l\'anzianità d\'esercizio, le condizioni di gestione e il numero di " +
"addetti)");
panNucleo.setLayout(gridBagLayout8);
panNucleo.setBorder(titledBorder7);
panNucleo.setMinimumSize(new Dimension(700, 400));
panNucleo.setPreferredSize(new Dimension(700, 330));
jButton1.setText("Aggiungi");
jButton2.setText("Rimuovi");
jButton2.addActionListener(new PanAltreInfoBassi_jButton2_actionAdapter(this));
jScrollPane2.setPreferredSize(new Dimension(600, 100));
jTable1.setModel(modRes);
jLabel11.setText("Anzianità della residenza nell\'unità immobiliare");
jLabel12.setText("numero anni");
jTextField10.setColumns(5);
jLabel13.setText("Titolo di godimento dell\'unità immobiliare");
jCheckBox23.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox23.setText("proprietà");
jCheckBox24.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox24.setText("affitto");
jLabel14.setText(
"In caso di affitto, indicare orientativamente importo canone mensile " +
"tra le seguenti fasce");
jCheckBox25.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox25.setText("< 50 €");
jCheckBox26.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox26.setText("50 € - 100 €");
jCheckBox27.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox27.setText("100 € - 200 €");
jCheckBox28.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox28.setText("200 € - 300 €");
jCheckBox29.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox29.setText("> 300 €");
jButton3.setPreferredSize(new Dimension(187, 35));
jButton3.setText("CHIUDI/APPLICA CAMBIAMENTI");
jButton3.addActionListener(new PanAltreInfoBassi_jButton3_actionAdapter(this));
panUbi.add(jCheckBox1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
panUbi.add(jCheckBox2, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 15, 0, 0), 0, 0));
panUbi.add(jCheckBox3, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 15, 0, 0), 0, 0));
panUbi.add(jCheckBox4, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panUbi.add(jCheckBox5, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0
113
Appendice
Codice Java
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 15, 0, 0), 0, 0));
panUbi.add(jCheckBox6, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 15, 0, 0), 0, 0));
panTipologia.add(jCheckBox8, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 15, 0, 0), 0, 0));
panTipologia.add(jCheckBox9, new GridBagConstraints(4, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 15, 0, 0), 0, 0));
panTipologia.add(jTextField6, new GridBagConstraints(3, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 5, 0, 0), 0, 0));
panTipologia.add(jTextField7, new GridBagConstraints(5, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 5, 0, 0), 0, 0));
panTipologia.add(jCheckBox10, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panTipologia.add(jLabel8, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panTipologia.add(jTextField8, new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 5, 0, 0), 0, 0));
panTipologia.add(jLabel9, new GridBagConstraints(3, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panTipologia.add(jTextField9, new GridBagConstraints(4, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 5, 0, 0), 0, 0));
panImm.add(jCheckBox12, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 10, 0, 0), 0, 0));
panImm.add(jCheckBox13, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 10, 0, 0), 0, 0));
panImm.add(jCheckBox11, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
panEdi.add(jCheckBox15, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
panEdi.add(jCheckBox16, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 10, 0, 0), 0, 0));
panEdi.add(jCheckBox17, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 10, 0, 0), 0, 0));
panEdi.add(jCheckBox18, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panUso.add(jCheckBox19, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
panImm.add(jCheckBox14, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panUso.add(jCheckBox20, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 15, 0, 0), 0, 0));
panUso.add(jCheckBox21, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 15, 0, 0), 0, 0));
panUso.add(jScrollPane1, new GridBagConstraints(0, 1, 4, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(20, 0, 0, 0), 0, 0));
jScrollPane1.getViewport().add(jTextPane1);
panUso.add(jCheckBox22, new GridBagConstraints(3, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 15, 0, 0), 0, 0));
panUso.add(jLabel10, new GridBagConstraints(0, 2, 4, 1, 0.0, 0.0
114
Appendice
Codice Java
, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(5, 0, 0, 0), 0, 0));
jScrollPane2.getViewport().add(jTable1);
panNucleo.add(jButton2, new GridBagConstraints(1, 1, 3, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(5, 10, 0, 0), 0, 0));
panNucleo.add(jButton1, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(5, 0, 0, 0), 0, 0));
panNucleo.add(jLabel12, new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 60, 0, 0), 0, 0));
panNucleo.add(jTextField10, new GridBagConstraints(3, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 15, 0, 0), 0, 0));
panNucleo.add(jLabel13, new GridBagConstraints(0, 3, 2, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panNucleo.add(jCheckBox23, new GridBagConstraints(2, 3, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 60, 0, 0), 0, 0));
panNucleo.add(jCheckBox24, new GridBagConstraints(3, 3, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 15, 0, 0), 0, 0));
panNucleo.add(jLabel14, new GridBagConstraints(0, 4, 3, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panNucleo.add(jLabel11, new GridBagConstraints(0, 2, 2, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(30, 0, 0, 0), 0, 0));
panNucleo.add(jCheckBox25, new GridBagConstraints(0, 5, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(15, 0, 0, 0), 0, 0));
panNucleo.add(jScrollPane2, new GridBagConstraints(0, 0, 5, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
panNucleo.add(jCheckBox26, new GridBagConstraints(1, 5, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(15, 15, 0, 0), 0, 0));
panNucleo.add(jCheckBox27, new GridBagConstraints(2, 5, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(15, 15, 0, 0), 0, 0));
panNucleo.add(jCheckBox28, new GridBagConstraints(3, 5, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(15, 15, 0, 0), 0, 0));
panNucleo.add(jCheckBox29, new GridBagConstraints(4, 5, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(15, 15, 0, 0), 0, 0));
panTipologia.add(jLabel6, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panTipologia.add(jLabel7, new GridBagConstraints(4, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
jButton1.addActionListener(new AzioneBottAddComponente(mainFrame,modRes));
panTipologia.add(jTextField5,
new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST,
GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panTipologia.add(jCheckBox7,
new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST,
GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
panTipologia.add(jLabel5, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
this.add(panUbi, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER,
GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
this.add(panTipologia, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
115
Appendice
Codice Java
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
this.add(panImm, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER,
GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
this.add(panEdi, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER,
GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
this.add(panUso, new GridBagConstraints(0, 4, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER,
GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
this.add(panNucleo, new GridBagConstraints(0, 5, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
this.add(jButton3, new GridBagConstraints(0, 6, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER,
GridBagConstraints.NONE,
new Insets(10, 0, 0, 0), 0, 0));
IterazioneDb.caricaBassiAltreInfo(id,txtArray,chkArray,jTextPane1,modRes);
}
GridBagLayout gridBagLayout1 = new GridBagLayout();
TitledBorder titledBorder1 = new TitledBorder("Locazione");
JPanel panUbi = new JPanel();
GridBagLayout gridBagLayout3 = new GridBagLayout();
TitledBorder titledBorder2 = new TitledBorder("Ubicazione");
JCheckBox jCheckBox1 = new JCheckBox();
JCheckBox jCheckBox2 = new JCheckBox();
JCheckBox jCheckBox3 = new JCheckBox();
JCheckBox jCheckBox4 = new JCheckBox();
JCheckBox jCheckBox5 = new JCheckBox();
JCheckBox jCheckBox6 = new JCheckBox();
JPanel panTipologia = new JPanel();
GridBagLayout gridBagLayout4 = new GridBagLayout();
JCheckBox jCheckBox7 = new JCheckBox();
JCheckBox jCheckBox8 = new JCheckBox();
JCheckBox jCheckBox9 = new JCheckBox();
JLabel jLabel5 = new JLabel();
JTextField jTextField5 = new JTextField();
JLabel jLabel6 = new JLabel();
JTextField jTextField6 = new JTextField();
JLabel jLabel7 = new JLabel();
JTextField jTextField7 = new JTextField();
JCheckBox jCheckBox10 = new JCheckBox();
JLabel jLabel8 = new JLabel();
JTextField jTextField8 = new JTextField();
JLabel jLabel9 = new JLabel();
JTextField jTextField9 = new JTextField();
TitledBorder titledBorder3 = new TitledBorder("Tipologia");
JPanel panImm = new JPanel();
TitledBorder titledBorder4 = new TitledBorder("Condizioni fisiche dell'unità immobiliare");
GridBagLayout gridBagLayout5 = new GridBagLayout();
JCheckBox jCheckBox11 = new JCheckBox();
JCheckBox jCheckBox12 = new JCheckBox();
JCheckBox jCheckBox13 = new JCheckBox();
JCheckBox jCheckBox14 = new JCheckBox();
JPanel panEdi = new JPanel();
GridBagLayout gridBagLayout6 = new GridBagLayout();
TitledBorder titledBorder5 = new TitledBorder("Condizioni fisiche dell'edificio");
JCheckBox jCheckBox15 = new JCheckBox();
JCheckBox jCheckBox16 = new JCheckBox();
JCheckBox jCheckBox17 = new JCheckBox();
JCheckBox jCheckBox18 = new JCheckBox();
JPanel panUso = new JPanel();
TitledBorder titledBorder6 = new TitledBorder("Destinazione d'uso");
GridBagLayout gridBagLayout7 = new GridBagLayout();
JCheckBox jCheckBox19 = new JCheckBox();
JCheckBox jCheckBox20 = new JCheckBox();
JCheckBox jCheckBox21 = new JCheckBox();
116
Appendice
Codice Java
JCheckBox jCheckBox22 = new JCheckBox();
JScrollPane jScrollPane1 = new JScrollPane();
JTextPane jTextPane1 = new JTextPane();
JLabel jLabel10 = new JLabel();
JPanel panNucleo = new JPanel();
GridBagLayout gridBagLayout8 = new GridBagLayout();
TitledBorder titledBorder7 = new TitledBorder("Caratteristiche del nucle familiare residente");
ModelloTabellaResidenti modRes = new ModelloTabellaResidenti();
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();
JScrollPane jScrollPane2 = new JScrollPane();
JTable jTable1 = new JTable();
JLabel jLabel11 = new JLabel();
JLabel jLabel12 = new JLabel();
JTextField jTextField10 = new JTextField();
JLabel jLabel13 = new JLabel();
JCheckBox jCheckBox23 = new JCheckBox();
JCheckBox jCheckBox24 = new JCheckBox();
JLabel jLabel14 = new JLabel();
JCheckBox jCheckBox25 = new JCheckBox();
JCheckBox jCheckBox26 = new JCheckBox();
JCheckBox jCheckBox27 = new JCheckBox();
JCheckBox jCheckBox28 = new JCheckBox();
JCheckBox jCheckBox29 = new JCheckBox();
JTextField
txtArray[]
=
{null,null,null,null,jTextField5,jTextField6,jTextField7,jTextField8,jTextField9,jTextField10};
JCheckBox
chkArray[]
=
{jCheckBox1,jCheckBox2,jCheckBox3,jCheckBox4,jCheckBox5,jCheckBox6,jCheckBox7,jCheckBox8,jCheckBox9,jCh
eckBox10,jCheckBox11,jCheckBox12,jCheckBox13,jCheckBox14,jCheckBox15,jCheckBox16,jCheckBox17,jCheckBox1
8,jCheckBox19,jCheckBox20,jCheckBox21,jCheckBox22,jCheckBox23,jCheckBox24,jCheckBox25,jCheckBox26,jChec
kBox27,jCheckBox28,jCheckBox29};
JButton jButton3 = new JButton();
public void aggionaAltreInfo(ActionEvent e) {
IterazioneDb.insertAltreInfoBassi(id,txtArray,chkArray,jTextPane1,modRes);
dialog.dispose();
}
public void rimuoviCompo(ActionEvent e) {
int r = jTable1.getSelectedRow();
if(r>=0){
modRes.removeRow(r);
}
}
}
class PanAltreInfoBassi_jButton2_actionAdapter implements ActionListener {
private PanAltreInfoBassi adaptee;
PanAltreInfoBassi_jButton2_actionAdapter(PanAltreInfoBassi adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.rimuoviCompo(e);
}
}
class PanAltreInfoBassi_jButton3_actionAdapter implements ActionListener {
private PanAltreInfoBassi adaptee;
PanAltreInfoBassi_jButton3_actionAdapter(PanAltreInfoBassi adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.aggionaAltreInfo(e);
}
}
package sirena.interfaccia;
117
Appendice
Codice Java
import
import
import
import
import
import
import
import
import
import
import
javax.swing.*;
java.awt.GridBagLayout;
java.awt.*;
java.awt.Dimension;
javax.swing.border.TitledBorder;
sirena.utility.ModelloTabellaResidenti;
java.awt.Font;
java.awt.event.ActionEvent;
java.awt.event.ActionListener;
db.IterazioneDb;
sirena.utility.AzioneBottAddComponente;
public class panBassiPopolazione extends JPanel {
JFrame mainFrame;
public panBassiPopolazione(JTable tab, JFrame mf, JTextField txt[]) {
mainFrame = mf;
tabCond = tab;
jTextField3 = txt[0] ;
jTextField4 = txt[1] ;
txtArray[0] = jTextField1;
txtArray[1] = jTextField2;
txtArray[2] = jTextField3;
txtArray[3] = jTextField4;
txtArray[4] = jTextField5;
txtArray[5] = jTextField6;
txtArray[6] = jTextField7;
txtArray[7] = jTextField8;
txtArray[8] = jTextField9;
txtArray[9] = jTextField10;
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void jbInit() throws Exception {
this.setLayout(gridBagLayout1);
panLocazione.setBorder(titledBorder1);
panLocazione.setMinimumSize(new Dimension(700, 200));
panLocazione.setPreferredSize(new Dimension(700, 200));
panLocazione.setLayout(gridBagLayout2);
this.setPreferredSize(new Dimension(800, 1400));
jLabel1.setText("(Via, Piazza, Vico, Largo, ecc.)");
jTextField1.setMinimumSize(new Dimension(331, 19));
jTextField1.setColumns(40);
jLabel2.setText("n. civico");
jTextField2.setMinimumSize(new Dimension(67, 19));
jTextField2.setColumns(7);
jLabel3.setText("Ricadente nell\'edificio sito in (Via, Piazza, ecc.)");
jTextField3.setMinimumSize(new Dimension(251, 19));
jTextField3.setEditable(false);
jTextField3.setColumns(30);
jLabel4.setText("n. civico");
jTextField4.setMinimumSize(new Dimension(67, 19));
jTextField4.setEditable(false);
jTextField4.setColumns(7);
panUbi.setBorder(titledBorder2);
panUbi.setMinimumSize(new Dimension(700, 100));
panUbi.setPreferredSize(new Dimension(700, 100));
panUbi.setLayout(gridBagLayout3);
jCheckBox1.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox1.setText("direttamente sulla strada");
jCheckBox2.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox2.setText("all\'interno di un cortile");
jCheckBox3.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox3.setText("all\'interno di un androne");
jCheckBox4.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox4.setText("terreneo a livello di strada");
jCheckBox5.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox5.setText("seminterrato");
jCheckBox6.setHorizontalTextPosition(SwingConstants.LEFT);
118
Appendice
Codice Java
jCheckBox6.setText("rialzato");
panTipologia.setBorder(titledBorder3);
panTipologia.setMinimumSize(new Dimension(700, 200));
panTipologia.setPreferredSize(new Dimension(700, 200));
panTipologia.setLayout(gridBagLayout4);
jCheckBox7.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox7.setText("1 porta ingresso");
jCheckBox8.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox8.setText("1 porta ingresso + 1 finestra laterale");
jCheckBox9.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox9.setText("1 porta ingresso + 2 finestra laterale");
jLabel5.setText("numero vani");
jTextField5.setColumns(3);
jLabel6.setText("n. vani ricavati in orizzontale");
jTextField6.setColumns(3);
jLabel7.setText("n. vani ricavati in verticale");
jTextField7.setColumns(3);
jCheckBox10.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox10.setText("altre aperture");
jLabel8.setText("tipo");
jTextField8.setColumns(20);
jLabel9.setText("numero");
jTextField9.setColumns(3);
panImm.setBorder(titledBorder4);
panImm.setMinimumSize(new Dimension(700, 100));
panImm.setPreferredSize(new Dimension(700, 100));
panImm.setLayout(gridBagLayout5);
jCheckBox11.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox11.setText("faticente");
jCheckBox12.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox12.setText("ristrutturata solo esternamente");
jCheckBox13.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox13.setText("ristrutturata solo internamente");
jCheckBox14.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox14.setText("ristrutturata esternamente ed internamente");
panEdi.setBorder(titledBorder5);
panEdi.setMinimumSize(new Dimension(700, 100));
panEdi.setPreferredSize(new Dimension(700, 100));
panEdi.setLayout(gridBagLayout6);
jCheckBox15.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox15.setText("fatiscente");
jCheckBox16.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox16.setText("ristrutturato solo esternamente");
jCheckBox17.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox17.setText("ristrutturato solo internamente");
jCheckBox18.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox18.setText("ristrutturato esternamente ed internamente");
panUso.setBorder(titledBorder6);
panUso.setMinimumSize(new Dimension(700, 200));
panUso.setPreferredSize(new Dimension(700, 200));
panUso.setLayout(gridBagLayout7);
jCheckBox19.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox19.setText("abitazione");
jCheckBox20.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox20.setText("commerciale");
jCheckBox21.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox21.setText("artigianale");
jCheckBox22.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox22.setText("non utilizzato");
jTextPane1.setMinimumSize(new Dimension(150, 70));
jTextPane1.setPreferredSize(new Dimension(300, 100));
jScrollPane1.setMinimumSize(new Dimension(150, 70));
jScrollPane1.setPreferredSize(new Dimension(200, 100));
jLabel10.setText(
"(Se si tratta di uso non abitativo, specificare il tipo di attività, " +
"l\'anzianità d\'esercizio, le condizioni di gestione e il numero di " +
"addetti)");
panNucleo.setLayout(gridBagLayout8);
panNucleo.setBorder(titledBorder7);
panNucleo.setMinimumSize(new Dimension(700, 400));
panNucleo.setPreferredSize(new Dimension(700, 400));
jButton1.setText("Aggiungi");
jButton2.setText("Rimuovi");
119
Appendice
Codice Java
jButton2.addActionListener(new
panBassiPopolazione_jButton2_actionAdapter(this));
jScrollPane2.setPreferredSize(new Dimension(600, 100));
jTable1.setModel(modRes);
jLabel11.setText("Anzianità della residenza nell\'unità immobiliare");
jLabel12.setText("numero anni");
jTextField10.setColumns(5);
jLabel13.setText("Titolo di godimento dell\'unità immobiliare");
jCheckBox23.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox23.setText("proprietà");
jCheckBox24.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox24.setText("affitto");
jLabel14.setText(
"In caso di affitto, indicare orientativamente importo canone mensile " +
"tra le seguenti fasce");
jCheckBox25.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox25.setText("< 50 €");
jCheckBox26.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox26.setText("50 € - 100 €");
jCheckBox27.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox27.setText("100 € - 200 €");
jCheckBox28.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox28.setText("200 € - 300 €");
jCheckBox29.setHorizontalTextPosition(SwingConstants.LEFT);
jCheckBox29.setText("> 300 €");
jPanel8.setPreferredSize(new Dimension(700, 50));
jPanel8.setLayout(gridBagLayout9);
jButton3.setFont(new java.awt.Font("Verdana", Font.BOLD, 12));
jButton3.setPreferredSize(new Dimension(169, 40));
jButton3.setText("INSERISCI MODULO");
jButton3.addActionListener(new
panBassiPopolazione_jButton3_actionAdapter(this));
this.add(panLocazione, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER,
GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
panLocazione.add(jTextField2, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 15, 0, 0), 0, 0));
panLocazione.add(jTextField1, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 15, 0, 0), 0, 0));
panLocazione.add(jLabel2, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panLocazione.add(jLabel1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
panLocazione.add(jLabel3, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panLocazione.add(jTextField3, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 15, 0, 0), 0, 0));
this.add(panUbi, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER,
GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
panUbi.add(jCheckBox1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
panUbi.add(jCheckBox2, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 15, 0, 0), 0, 0));
panUbi.add(jCheckBox3, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 15, 0, 0), 0, 0));
panUbi.add(jCheckBox4, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panUbi.add(jCheckBox5, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 15, 0, 0), 0, 0));
120
Appendice
Codice Java
panUbi.add(jCheckBox6, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 15, 0, 0), 0, 0));
this.add(panTipologia, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER,
GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
panLocazione.add(jLabel4, new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panTipologia.add(jCheckBox8, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 15, 0, 0), 0, 0));
panTipologia.add(jCheckBox9, new GridBagConstraints(4, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 15, 0, 0), 0, 0));
panTipologia.add(jTextField6, new GridBagConstraints(3, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 5, 0, 0), 0, 0));
panTipologia.add(jTextField7, new GridBagConstraints(5, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 5, 0, 0), 0, 0));
panTipologia.add(jCheckBox10, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panTipologia.add(jLabel8, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panTipologia.add(jTextField8, new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 5, 0, 0), 0, 0));
panTipologia.add(jLabel9, new GridBagConstraints(3, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panTipologia.add(jTextField9, new GridBagConstraints(4, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 5, 0, 0), 0, 0));
this.add(panImm, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER,
GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
panImm.add(jCheckBox12, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 10, 0, 0), 0, 0));
panImm.add(jCheckBox13, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 10, 0, 0), 0, 0));
panImm.add(jCheckBox11, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
this.add(panEdi, new GridBagConstraints(0, 4, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER,
GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
panEdi.add(jCheckBox15, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
panEdi.add(jCheckBox16, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 10, 0, 0), 0, 0));
panEdi.add(jCheckBox17, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 10, 0, 0), 0, 0));
panEdi.add(jCheckBox18, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
this.add(panUso, new GridBagConstraints(0, 5, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER,
GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
panUso.add(jCheckBox19, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
121
Appendice
Codice Java
panImm.add(jCheckBox14, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panUso.add(jCheckBox20, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 15, 0, 0), 0, 0));
panUso.add(jCheckBox21, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 15, 0, 0), 0, 0));
panUso.add(jScrollPane1, new GridBagConstraints(0, 1, 4, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(20, 0, 0, 0), 0, 0));
jScrollPane1.getViewport().add(jTextPane1);
panUso.add(jCheckBox22, new GridBagConstraints(3, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 15, 0, 0), 0, 0));
panUso.add(jLabel10, new GridBagConstraints(0, 2, 4, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(5, 0, 0, 0), 0, 0));
this.add(panNucleo, new GridBagConstraints(0, 6, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER,
GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
jScrollPane2.getViewport().add(jTable1);
panNucleo.add(jButton2, new GridBagConstraints(1, 1, 3, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(5, 10, 0, 0), 0, 0));
panNucleo.add(jButton1, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(5, 0, 0, 0), 0, 0));
panNucleo.add(jLabel12, new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 60, 0, 0), 0, 0));
panNucleo.add(jTextField10, new GridBagConstraints(3, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 15, 0, 0), 0, 0));
panNucleo.add(jLabel13, new GridBagConstraints(0, 3, 2, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panNucleo.add(jCheckBox23, new GridBagConstraints(2, 3, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 60, 0, 0), 0, 0));
panNucleo.add(jCheckBox24, new GridBagConstraints(3, 3, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 15, 0, 0), 0, 0));
panNucleo.add(jLabel14, new GridBagConstraints(0, 4, 3, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panNucleo.add(jLabel11, new GridBagConstraints(0, 2, 2, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(30, 0, 0, 0), 0, 0));
panNucleo.add(jCheckBox25, new GridBagConstraints(0, 5, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(15, 0, 0, 0), 0, 0));
panNucleo.add(jScrollPane2, new GridBagConstraints(0, 0, 5, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
panNucleo.add(jCheckBox26, new GridBagConstraints(1, 5, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(15, 15, 0, 0), 0, 0));
panNucleo.add(jCheckBox27, new GridBagConstraints(2, 5, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(15, 15, 0, 0), 0, 0));
panNucleo.add(jCheckBox28, new GridBagConstraints(3, 5, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(15, 15, 0, 0), 0, 0));
panNucleo.add(jCheckBox29, new GridBagConstraints(4, 5, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(15, 15, 0, 0), 0, 0));
jPanel8.add(jButton3, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
this.add(jPanel8, new GridBagConstraints(0, 7, 1, 1, 0.0, 0.0
122
Appendice
Codice Java
, GridBagConstraints.CENTER,
GridBagConstraints.NONE,
new Insets(10, 0, 20, 0), 0, 0));
panTipologia.add(jLabel6, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panTipologia.add(jLabel7, new GridBagConstraints(4, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
gruppoBott1.add(jCheckBox7);
gruppoBott1.add(jCheckBox8);
gruppoBott1.add(jCheckBox9);
gruppoBott2.add(jCheckBox11);
gruppoBott2.add(jCheckBox12);
gruppoBott2.add(jCheckBox13);
gruppoBott2.add(jCheckBox14);
gruppoBott3.add(jCheckBox15);
gruppoBott3.add(jCheckBox16);
gruppoBott3.add(jCheckBox17);
gruppoBott3.add(jCheckBox18);
gruppoBott4.add(jCheckBox19);
gruppoBott4.add(jCheckBox20);
gruppoBott4.add(jCheckBox21);
gruppoBott4.add(jCheckBox22);
gruppoBott5.add(jCheckBox23);
gruppoBott5.add(jCheckBox24);
gruppoBott6.add(jCheckBox25);
gruppoBott6.add(jCheckBox26);
gruppoBott6.add(jCheckBox27);
gruppoBott6.add(jCheckBox28);
gruppoBott6.add(jCheckBox29);
jButton1.addActionListener(new AzioneBottAddComponente(mainFrame,modRes));
panTipologia.add(jTextField5,
new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST,
GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panTipologia.add(jCheckBox7,
new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST,
GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
panTipologia.add(jLabel5, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
panLocazione.add(jTextField4,
new GridBagConstraints(3, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST,
GridBagConstraints.NONE,
new Insets(20, 10, 0, 0), 0, 0));
}
GridBagLayout gridBagLayout1 = new GridBagLayout();
JPanel panLocazione = new JPanel();
TitledBorder titledBorder1 = new TitledBorder("Locazione");
GridBagLayout gridBagLayout2 = new GridBagLayout();
JLabel jLabel1 = new JLabel();
JTextField jTextField1 = new JTextField();
JLabel jLabel2 = new JLabel();
JTextField jTextField2 = new JTextField();
JLabel jLabel3 = new JLabel();
JTextField jTextField3 = new JTextField();
JLabel jLabel4 = new JLabel();
JTextField jTextField4 = new JTextField();
JPanel panUbi = new JPanel();
GridBagLayout gridBagLayout3 = new GridBagLayout();
TitledBorder titledBorder2 = new TitledBorder("Ubicazione");
JCheckBox jCheckBox1 = new JCheckBox();
JCheckBox jCheckBox2 = new JCheckBox();
JCheckBox jCheckBox3 = new JCheckBox();
JCheckBox jCheckBox4 = new JCheckBox();
JCheckBox jCheckBox5 = new JCheckBox();
JCheckBox jCheckBox6 = new JCheckBox();
123
Appendice
Codice Java
JPanel panTipologia = new JPanel();
GridBagLayout gridBagLayout4 = new GridBagLayout();
JCheckBox jCheckBox7 = new JCheckBox();
JCheckBox jCheckBox8 = new JCheckBox();
JCheckBox jCheckBox9 = new JCheckBox();
JLabel jLabel5 = new JLabel();
JTextField jTextField5 = new JTextField();
JLabel jLabel6 = new JLabel();
JTextField jTextField6 = new JTextField();
JLabel jLabel7 = new JLabel();
JTextField jTextField7 = new JTextField();
JCheckBox jCheckBox10 = new JCheckBox();
JLabel jLabel8 = new JLabel();
JTextField jTextField8 = new JTextField();
JLabel jLabel9 = new JLabel();
JTextField jTextField9 = new JTextField();
TitledBorder titledBorder3 = new TitledBorder("Tipologia");
JPanel panImm = new JPanel();
TitledBorder titledBorder4 = new TitledBorder("Condizioni fisiche dell'unità immobiliare");
GridBagLayout gridBagLayout5 = new GridBagLayout();
JCheckBox jCheckBox11 = new JCheckBox();
JCheckBox jCheckBox12 = new JCheckBox();
JCheckBox jCheckBox13 = new JCheckBox();
JCheckBox jCheckBox14 = new JCheckBox();
JPanel panEdi = new JPanel();
GridBagLayout gridBagLayout6 = new GridBagLayout();
TitledBorder titledBorder5 = new TitledBorder("Condizioni fisiche dell'edificio");
JCheckBox jCheckBox15 = new JCheckBox();
JCheckBox jCheckBox16 = new JCheckBox();
JCheckBox jCheckBox17 = new JCheckBox();
JCheckBox jCheckBox18 = new JCheckBox();
JPanel panUso = new JPanel();
TitledBorder titledBorder6 = new TitledBorder("Destinazione d'uso");
GridBagLayout gridBagLayout7 = new GridBagLayout();
JCheckBox jCheckBox19 = new JCheckBox();
JCheckBox jCheckBox20 = new JCheckBox();
JCheckBox jCheckBox21 = new JCheckBox();
JCheckBox jCheckBox22 = new JCheckBox();
JScrollPane jScrollPane1 = new JScrollPane();
JTextPane jTextPane1 = new JTextPane();
JLabel jLabel10 = new JLabel();
JPanel panNucleo = new JPanel();
GridBagLayout gridBagLayout8 = new GridBagLayout();
TitledBorder titledBorder7 = new TitledBorder("Caratteristiche del nucle familiare residente");
ModelloTabellaResidenti modRes = new ModelloTabellaResidenti();
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();
JScrollPane jScrollPane2 = new JScrollPane();
JTable jTable1 = new JTable();
JLabel jLabel11 = new JLabel();
JLabel jLabel12 = new JLabel();
JTextField jTextField10 = new JTextField();
JLabel jLabel13 = new JLabel();
JCheckBox jCheckBox23 = new JCheckBox();
JCheckBox jCheckBox24 = new JCheckBox();
JLabel jLabel14 = new JLabel();
JCheckBox jCheckBox25 = new JCheckBox();
JCheckBox jCheckBox26 = new JCheckBox();
JCheckBox jCheckBox27 = new JCheckBox();
JCheckBox jCheckBox28 = new JCheckBox();
JCheckBox jCheckBox29 = new JCheckBox();
JPanel jPanel8 = new JPanel();
GridBagLayout gridBagLayout9 = new GridBagLayout();
JButton jButton3 = new JButton();
JTextField txtArray[] = new JTextField[10];
JCheckBox
chkArray[]
=
{jCheckBox1,jCheckBox2,jCheckBox3,jCheckBox4,jCheckBox5,jCheckBox6,jCheckBox7,jCheckBox8,jCheckBox9,jCh
eckBox10,jCheckBox11,jCheckBox12,jCheckBox13,jCheckBox14,jCheckBox15,jCheckBox16,jCheckBox17,jCheckBox1
8,jCheckBox19,jCheckBox20,jCheckBox21,jCheckBox22,jCheckBox23,jCheckBox24,jCheckBox25,jCheckBox26,jChec
kBox27,jCheckBox28,jCheckBox29};
JTable tabCond;
ButtonGroup gruppoBott1 = new ButtonGroup();
124
Appendice
Codice Java
ButtonGroup
ButtonGroup
ButtonGroup
ButtonGroup
ButtonGroup
gruppoBott2
gruppoBott3
gruppoBott4
gruppoBott5
gruppoBott6
=
=
=
=
=
new
new
new
new
new
ButtonGroup();
ButtonGroup();
ButtonGroup();
ButtonGroup();
ButtonGroup();
public void insertModulo(ActionEvent e) {
String cod = tabCond.getValueAt(tabCond.getSelectedRow(),0).toString();
IterazioneDb.insertPopolaBassi(cod,txtArray,chkArray,jTextPane1,jTable1,modRes);
}
public void rimuoviComponente(ActionEvent e) {
int r = jTable1.getSelectedRow();
if(r>=0){
modRes.removeRow(r);
int max = jTable1.getRowCount();
for(int i=0;i<max;i++){
modRes.setValueAt(i+1,i,0);
}
}
}
}
class panBassiPopolazione_jButton2_actionAdapter implements ActionListener {
private panBassiPopolazione adaptee;
panBassiPopolazione_jButton2_actionAdapter(panBassiPopolazione adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.rimuoviComponente(e);
}
}
class panBassiPopolazione_jButton3_actionAdapter implements ActionListener {
private panBassiPopolazione adaptee;
panBassiPopolazione_jButton3_actionAdapter(panBassiPopolazione adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.insertModulo(e);
}
}
package sirena.interfaccia;
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
javax.swing.JPanel;
java.awt.GridBagLayout;
java.awt.*;
java.awt.Dimension;
javax.swing.border.TitledBorder;
javax.swing.JScrollPane;
javax.swing.JTable;
sirena.utility.ModelloTabellaBassiEsistenti;
javax.swing.JLabel;
javax.swing.JTextField;
javax.swing.JButton;
sirena.utility.TabellaBassiMouseListener;
java.awt.event.ActionEvent;
java.awt.event.ActionListener;
db.IterazioneDb;
javax.swing.JFrame;
public class PanDatiBassi extends JPanel {
JFrame mainFrame;
public PanDatiBassi(ModelloTabellaBassiEsistenti m, JFrame mf) {
mod = m;
mainFrame = mf;
jTable1.addMouseListener(new TabellaBassiMouseListener(jTable1,txtArray));
try {
jbInit();
125
Appendice
Codice Java
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void jbInit() throws Exception {
this.setLayout(gridBagLayout1);
jScrollPane1.setBorder(null);
jScrollPane1.setMinimumSize(new Dimension(600, 100));
jScrollPane1.setPreferredSize(new Dimension(600, 100));
jPanel1.setBorder(titledBorder2);
jPanel1.setMinimumSize(new Dimension(700, 200));
jPanel1.setPreferredSize(new Dimension(700, 200));
jPanel1.setLayout(gridBagLayout2);
jTable1.setModel(mod);
jLabel1.setText("(Via, Piazza, Vico, Largo, ecc.)");
jLabel2.setText("n. civico");
jLabel3.setText("Ricadente nell\'edificio sito in (Via, Piazza, ecc.)");
jTextField1.setEditable(false);
jTextField1.setColumns(40);
jTextField2.setEditable(false);
jTextField2.setColumns(5);
jTextField3.setEditable(false);
jTextField3.setColumns(30);
jLabel4.setText("n. civico");
jTextField4.setEditable(false);
jTextField4.setColumns(5);
jButton1.setText("Visualizza le altre info");
jButton1.addActionListener(new PanDatiBassi_jButton1_actionAdapter(this));
jPanel2.setBorder(titledBorder1);
jPanel2.setMinimumSize(new Dimension(700, 200));
jPanel2.setPreferredSize(new Dimension(700, 200));
jPanel2.setLayout(gridBagLayout3);
jButton2.setText("Rimuovi Basso");
jButton2.addActionListener(new PanDatiBassi_jButton2_actionAdapter(this));
jLabel5.setText(
"(Selezionare una riga della tabella per visualizzare le informazioni " +
"relative a quel Basso)");
jButton3.setText("Modifica Localizzazione Basso");
jButton3.addActionListener(new PanDatiBassi_jButton3_actionAdapter(this));
jPanel1.add(jLabel2, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
jPanel1.add(jLabel1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
jPanel1.add(jLabel3, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
jPanel1.add(jTextField2, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 15, 0, 0), 0, 0));
jPanel1.add(jTextField3, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 15, 0, 0), 0, 0));
jPanel1.add(jLabel4, new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(20, 20, 0, 0), 0, 0));
jPanel1.add(jTextField4, new GridBagConstraints(3, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(20, 10, 0, 0), 0, 0));
jPanel1.add(jTextField1, new GridBagConstraints(1, 0, 3, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 15, 0, 0), 0, 0));
this.add(jPanel2, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER,
GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
jScrollPane1.getViewport().add(jTable1);
this.add(jPanel1, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER,
GridBagConstraints.NONE,
new Insets(40, 0, 0, 0), 0, 0));
126
Appendice
Codice Java
jPanel2.add(jScrollPane1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
jPanel2.add(jButton2, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
jPanel2.add(jLabel5, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(5, 0, 0, 0), 0, 0));
jPanel1.add(jButton1, new GridBagConstraints(2, 3, 2, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 15, 0, 0), 0, 0));
jPanel1.add(jButton3, new GridBagConstraints(1, 3, 1, 1, 0.0, 0.0
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(20, 15, 0, 0), 0, 0));
}
ModelloTabellaBassiEsistenti mod;
GridBagLayout gridBagLayout1 = new GridBagLayout();
TitledBorder titledBorder1 = new TitledBorder("Elenco dei Bassi registrati in questo edificio");
JScrollPane jScrollPane1 = new JScrollPane();
JPanel jPanel1 = new JPanel();
TitledBorder titledBorder2 = new TitledBorder("Info Basso localizzazione");
TitledBorder titledBorder3 = new TitledBorder("Tipologia Basso");
JTable jTable1 = new JTable();
GridBagLayout gridBagLayout2 = new GridBagLayout();
JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
JLabel jLabel3 = new JLabel();
JTextField jTextField1 = new JTextField();
JTextField jTextField2 = new JTextField();
JTextField jTextField3 = new JTextField();
JLabel jLabel4 = new JLabel();
JTextField jTextField4 = new JTextField();
JButton jButton1 = new JButton();
JPanel jPanel2 = new JPanel();
GridBagLayout gridBagLayout3 = new GridBagLayout();
JButton jButton2 = new JButton();
JLabel jLabel5 = new JLabel();
JTextField txtArray[] = {jTextField1,jTextField2,jTextField3,jTextField4};
JButton jButton3 = new JButton();
public void rimuoviBasso(ActionEvent e) {
int id=-1;
int r = jTable1.getSelectedRow();
if(r>-1) {
String idString = jTable1.getValueAt(r, 0).toString();
id = Integer.parseInt(idString);
IterazioneDb.rimuoviBasso(id, jTable1, mod, txtArray);
}
}
public void visualAltreInfo(ActionEvent e) {
int id;
int r = jTable1.getSelectedRow();
if(r>-1) {
String idString = jTable1.getValueAt(r, 0).toString();
id = Integer.parseInt(idString);
new DialogAltreInfo(mainFrame,id);
}
}
public void modificaLocalizzazioneBasso(ActionEvent e) {
int id;
int r = jTable1.getSelectedRow();
if(r>-1) {
String idString = jTable1.getValueAt(r, 0).toString();
id = Integer.parseInt(idString);
new DialogModLocalBassi(mainFrame, id,txtArray);
}
}
}
127
Appendice
Codice Java
class PanDatiBassi_jButton3_actionAdapter implements ActionListener {
private PanDatiBassi adaptee;
PanDatiBassi_jButton3_actionAdapter(PanDatiBassi adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.modificaLocalizzazioneBasso(e);
}
}
class PanDatiBassi_jButton1_actionAdapter implements ActionListener {
private PanDatiBassi adaptee;
PanDatiBassi_jButton1_actionAdapter(PanDatiBassi adaptee) {
this.adaptee = adaptee;
}
}
public void actionPerformed(ActionEvent e) {
adaptee.visualAltreInfo(e);
}
class PanDatiBassi_jButton2_actionAdapter implements ActionListener {
private PanDatiBassi adaptee;
PanDatiBassi_jButton2_actionAdapter(PanDatiBassi adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.rimuoviBasso(e);
}
}
package sirena.interfaccia;
import
import
import
import
import
import
javax.swing.*;
java.awt.BorderLayout;
java.awt.Dimension;
javax.swing.border.TitledBorder;
java.awt.GridBagLayout;
java.awt.*;
public class PanEdGen extends JPanel {
public PanEdGen(JTextField txtArray[]) {
txtArray[0] = jTextField1;
txtArray[1] = jTextField2;
txtArray[2] = jTextField3;
txtArray[3] = jTextField4;
txtArray[4] = jTextField5;
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void jbInit() throws Exception {
this.setLayout(gridBagLayout1);
this.setPreferredSize(new Dimension(800, 600));
jPanel1.setBorder(titledBorder1);
jPanel1.setMinimumSize(new Dimension(750, 400));
jPanel1.setPreferredSize(new Dimension(750, 400));
jPanel1.setLayout(gridBagLayout2);
jLabel1.setText("Indirizzo");
jTextField1.setMinimumSize(new Dimension(251, 19));
jTextField1.setEditable(false);
jTextField1.setColumns(30);
jLabel2.setText("Comune");
jTextField2.setMinimumSize(new Dimension(171, 19));
jTextField2.setEditable(false);
jTextField2.setColumns(20);
128
Appendice
Codice Java
}
jLabel3.setText("Protocollo Servizio");
jLabel4.setText("Anno Protocollo");
jTextField3.setMinimumSize(new Dimension(171, 19));
jTextField3.setEditable(false);
jTextField3.setColumns(20);
jTextField4.setMinimumSize(new Dimension(91, 19));
jTextField4.setToolTipText("");
jTextField4.setEditable(false);
jTextField4.setColumns(10);
jLabel6.setText("Circoscrizione");
jTextField5.setMinimumSize(new Dimension(171, 19));
jTextField5.setEditable(false);
jTextField5.setColumns(25);
this.add(jPanel1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.CENTER,
GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
jPanel1.add(jTextField1, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 15, 0, 0), 0, 0));
jPanel1.add(jLabel1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
jPanel1.add(jTextField2, new GridBagConstraints(3, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 15, 0, 0), 0, 0));
jPanel1.add(jLabel2, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(0, 50, 0, 0), 0, 0));
jPanel1.add(jLabel3, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
jPanel1.add(jLabel4, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(20, 50, 0, 0), 0, 0));
jPanel1.add(jTextField3, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 15, 0, 0), 0, 0));
jPanel1.add(jTextField4, new GridBagConstraints(3, 1, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 15, 0, 0), 0, 0));
jPanel1.add(jTextField5, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(20, 15, 0, 0), 0, 0));
jPanel1.add(jLabel6, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(20, 0, 0, 0), 0, 0));
TitledBorder titledBorder1 = new TitledBorder("Info Generali");
GridBagLayout gridBagLayout1 = new GridBagLayout();
JPanel jPanel1 = new JPanel();
GridBagLayout gridBagLayout2 = new GridBagLayout();
JLabel jLabel1 = new JLabel();
JTextField jTextField1 = new JTextField();
JLabel jLabel2 = new JLabel();
JTextField jTextField2 = new JTextField();
JLabel jLabel3 = new JLabel();
JLabel jLabel4 = new JLabel();
JTextField jTextField3 = new JTextField();
JTextField jTextField4 = new JTextField();
JLabel jLabel6 = new JLabel();
JTextField jTextField5 = new JTextField();
}
package sirena.interfaccia;
import
import
import
import
import
import
import
java.awt.*;
javax.swing.*;
com.borland.jbcl.layout.XYLayout;
com.declarativa.interprolog.TermModel;
com.ontotext.flora2.XSBFlora;
javax.swing.border.TitledBorder;
sirena.utility.TabPaneMouseListener;
129
Appendice
Codice Java
import
import
import
import
import
import
import
import
import
import
import
import
import
sirena.utility.ModelloTabella;
sirena.utility.azioneRadioBottoneSi;
java.awt.event.MouseAdapter;
sirena.utility.AzioneRadioBottoneNo;
sirena.utility.EseguiFile;
sirena.utility.ModelloTabellaLavori;
sirena.utility.ModelloTabellaProspetti;
sirena.utility.AzioneBottAddLavoro;
sirena.utility.AzioneBottVisualLav;
sirena.utility.AzioneBottModificaComputo;
sirena.utility.ModelloTabellaBassiEsistenti;
sirena.utility.TableRenderCondomini;
sirena.utility.TabellaCondomini;
public class Panello1 {
ImageIcon titolo = new ImageIcon("./../java/immagini/splash.jpg","TITOLO");
JLabel labelTitolo = new JLabel();
JFrame mainFrame;
JPanel display;
JPanel panMenu = new JPanel();
JPanel panMain = new JPanel();
PanEdGen panTab0;
JPanel panTab1 = new JPanel();
JPanel panTab2 = new JPanel();
JPanel panTab3 = new JPanel();
JPanel panTab4 = new JPanel();
JPanel panTab5 = new JPanel();
panBassiPopolazione panTab6;
PanDatiBassi panTab7;
XYLayout xYLayout3 = new XYLayout();
XYLayout xYLayout2 = new XYLayout();
XSBFlora flora;
JTabbedPane schede = new JTabbedPane();
Font
Font
Font
Font
fontLabel = new Font("Verdana",1,11);
fontTxt = new Font("Verdana",0,11);
fontTxt2 = new Font("Verdana",Font.ITALIC,11);
fontBordo = new Font("Verdana",1,13);
Box bv = Box.createVerticalBox();
ModelloTabella modTab = new ModelloTabella();
TabellaCondomini tabCondomini = new TabellaCondomini(modTab);
ModelloTabellaLavori modLav = new ModelloTabellaLavori();
JTable tabLavori = new JTable(modLav);
ModelloTabellaBassiEsistenti modBassi = new ModelloTabellaBassiEsistenti();
JTextField [][] txtEdDatGen = new JTextField[8][];
JRadioButton [][] radioBott = new JRadioButton[8][];
JButton [][] bottoni = new JButton[8][];
ButtonGroup gruppoBott1 = new ButtonGroup();
ButtonGroup gruppoBott2 = new ButtonGroup();
ButtonGroup gruppoBott3 = new ButtonGroup();
JCheckBox [][] chackBox = new JCheckBox[8][];
JTextArea [][] txtArea = new JTextArea[8][];
JLabel
JLabel
JLabel
JLabel
[]
[]
[]
[]
labelImprese = new JLabel[16];
labelRelTec = new JLabel[6];
labelDIA = new JLabel[7];
labelComputo = new JLabel[6];
public Panello1(JFrame frame, JPanel panel, XSBFlora fl) {
mainFrame = frame;
display = panel;
display.setLayout(new BorderLayout());
flora = fl;
try {
jbInit();
130
Appendice
Codice Java
} catch (Exception exception) {
exception.printStackTrace();
}
}
private void jbInit() throws Exception {
Object[] bindings = null;
panMenu.setBorder(BorderFactory.createEtchedBorder());
panMenu.setSize(200,600);
panMain.setBackground(Color.lightGray);
panMain.setBorder(null);
panMain.setLayout(new BorderLayout());
panMain.setSize(600,600);
display.add("West",panMenu);
display.add("Center",panMain);
tabCondomini.setFont(fontTxt);
Object o = new Object();
tabCondomini.setDefaultRenderer(o.getClass(),new TableRenderCondomini(flora));
JScrollPane sp = new JScrollPane(tabCondomini);
tabCondomini.setPreferredScrollableViewportSize(new Dimension(100,400));
sp.setBackground(Color.lightGray);
labelTitolo.setHorizontalAlignment(SwingConstants.CENTER);
labelTitolo.setIcon(titolo);
labelTitolo.setSize(195,90);
txtEdDatGen[0]
txtEdDatGen[1]
txtEdDatGen[2]
txtEdDatGen[3]
txtEdDatGen[4]
txtEdDatGen[5]
txtEdDatGen[6]
=
=
=
=
=
=
=
new
new
new
new
new
new
new
JTextField[5];
JTextField[23];
JTextField[7];
JTextField[15];
JTextField[3];
JTextField[6];
JTextField[2];
radioBott[2] = new JRadioButton[4];
radioBott[4] = new JRadioButton[6];
bottoni[4] = new JButton[6];
chackBox[2] = new JCheckBox[3];
chackBox[6] = new JCheckBox[29];
txtArea[2] = new JTextArea[2];
txtArea[3] = new JTextArea[1];
txtArea[4] = new JTextArea[1];
txtArea[5] = new JTextArea[1];
this.costrisciImprese(panTab3);
this.costrusciDIA(panTab4);
this.costruisciComputoEstimativo(panTab5);
panTab0 = new PanEdGen(txtEdDatGen[0]);
txtEdDatGen[6][0] = new JTextField();
txtEdDatGen[6][1] = new JTextField();
panTab6 = new panBassiPopolazione(tabCondomini,mainFrame,txtEdDatGen[6]);
panTab7 = new PanDatiBassi(modBassi,mainFrame);
JScrollPane
JScrollPane
JScrollPane
JScrollPane
scrollTab0 = new JScrollPane(panTab0);
scrollTab = new JScrollPane(panTab1);
scrollTab2 = new JScrollPane(panTab2);
scrollTab3 = new JScrollPane(panTab3);
JScrollPane
JScrollPane
JScrollPane
JScrollPane
scrollTab5
scrollTab6
scrollTab7
scrollTab8
=
=
=
=
new
new
new
new
JScrollPane(panTab4);
JScrollPane(panTab5);
JScrollPane(panTab6);
JScrollPane(panTab7);
schede.addTab("Dati Generali",scrollTab0);
schede.addTab("Dati Generali - LM",scrollTab);
schede.addTab("Dati Catastali - Dati Storici",scrollTab2);
131
Appendice
Codice Java
schede.addTab("Imprese",scrollTab3);
schede.addTab("Rel. Tecnica Ass. - DIA - Beni Culturali",scrollTab5);
schede.addTab("Computo estimativo",scrollTab6);
schede.addTab("Inserimento caratt. e dest. d'uso bassi",scrollTab7);
schede.addTab("Visualizza/Modifica Info Bassi",scrollTab8);
MouseAdapter
listenerMouse
=
new
TabPaneMouseListener(schede,tabCondomini,txtEdDatGen,flora,mainFrame,radioBott,chackBox,txtArea,modLav,
bottoni, modBassi,panTab1,panTab2);
tabCondomini.addMouseListener(listenerMouse);
schede.addMouseListener(listenerMouse);
panMain.add(schede);
bv.add(labelTitolo);
bv.add(Box.createVerticalStrut(5));
bv.add(sp);
panMenu.add(bv);
mainFrame.setVisible(true);
/* Costruzione della tabella dei condomini */
Object elem[] = new Object[1];
bindings = flora.FLogicCommand("X:progetti.");
for (int i = 0; i < bindings.length; i++) {
TermModel tm = (TermModel)bindings[i];
elem[0] = flora.findValue(tm,"X");
modTab.insertRow(0,elem);
}
System.gc();
}
private
int
Box
Box
Box
Box
void costrisciImprese (JPanel pan) {
i=0;
bv[] = new Box[2];
bv2 = Box.createVerticalBox();
bh2 = Box.createHorizontalBox();
bh;
JPanel imprese = new JPanel();
JPanel impreseSub = new JPanel();
TitledBorder bordoImprese = new TitledBorder("Dati Imprese");
bordoImprese.setTitleColor(Color.RED);
bordoImprese.setTitleFont(fontBordo);
imprese.setBorder(bordoImprese);
TitledBorder bordoImpreseSub = new TitledBorder("Dati Imprese");
bordoImpreseSub.setTitleColor(Color.RED);
bordoImpreseSub.setTitleFont(fontBordo);
impreseSub.setBorder(bordoImprese);
for(i=0;i<2;i++) {
bv[i] = Box.createVerticalBox();
}
for(i=0;i<=13;i++) {
132
Appendice
Codice Java
txtEdDatGen[3][i] = new JTextField(20);
txtEdDatGen[3][i].setEditable(false);
txtEdDatGen[3][i].setFont(fontTxt);
labelImprese[i] = new JLabel();
labelImprese[i].setFont(fontLabel);
bh = Box.createHorizontalBox();
if(i%2==0){
bh.add(labelImprese[i]);
bh.add(Box.createHorizontalStrut(10));
bh.add(txtEdDatGen[3][i]);
bv[0].add(bh);
bv[0].add(Box.createVerticalStrut(15));
}
if(i%2!=0) {
bh.add(labelImprese[i]);
bh.add(Box.createHorizontalStrut(10));
bh.add(txtEdDatGen[3][i]);
bv[1].add(bh);
bv[1].add(Box.createVerticalStrut(15));
}
}
bh2.add(Box.createHorizontalStrut(20));
bh2.add(bv[0]);
bh2.add(Box.createHorizontalStrut(100));
bh2.add(bv[1]);
bv2.add(bh2);
bv2.add(Box.createVerticalStrut(15));
labelImprese[14] = new JLabel("Altre info");
labelImprese[14].setFont(fontLabel);
txtArea[3][0] = new JTextArea(10,70);
txtArea[3][0].setBorder(new TitledBorder(""));
txtArea[3][0].setEditable(false);
bh = Box.createHorizontalBox();
bh.add(labelImprese[14]);
bh.add(Box.createHorizontalStrut(10));
JScrollPane sp = new JScrollPane(txtArea[3][0]);
bh.add(sp);
bv2.add(bh);
imprese.add(bv2);
bv2 = Box.createVerticalBox();
bv2.add(Box.createVerticalStrut(30));
bv2.add(imprese);
bv2.add(Box.createVerticalStrut(30));
labelImprese[15] = new JLabel("Presente impresa subalpaltatrice");
labelImprese[15].setFont(fontLabel);
txtEdDatGen[3][14] = new JTextField(5);
txtEdDatGen[3][14].setEditable(false);
txtEdDatGen[3][14].setFont(fontTxt);
bh = Box.createHorizontalBox();
bh.add(labelImprese[15]);
bh.add(Box.createHorizontalStrut(10));
bh.add(txtEdDatGen[3][14]);
impreseSub.add(bh);
bv2.add(impreseSub);
pan.add(bv2);
133
Appendice
Codice Java
labelImprese[0].setText("Ragione sociale");
labelImprese[1].setText("CAP 1");
labelImprese[2].setText("CAP 2");
labelImprese[3].setText("Città 1");
labelImprese[4].setText("Città 2");
labelImprese[5].setText("E-mail");
labelImprese[6].setText("Partita IVA");
labelImprese[7].setText("Data inserimento");
labelImprese[8].setText("Fax");
labelImprese[9].setText("Sede legale");
labelImprese[10].setText("Sede Operativa");
labelImprese[11].setText("Telefono 1");
labelImprese[12].setText("Telefono 2");
labelImprese[13].setText("Tipo Impresa");
}
private
int
Box
Box
Box
void costrusciDIA (JPanel pan) {
i = 0;
bv[] = new Box[2];
bv2 = Box.createVerticalBox();
bh;
JPanel relazione = new JPanel();
TitledBorder bordoRel = new TitledBorder("Relazione Tecnica Asseverata");
bordoRel.setTitleColor(Color.RED);
bordoRel.setTitleFont(fontBordo);
relazione.setBorder(bordoRel);
JPanel dia = new JPanel();
TitledBorder bordoDia = new TitledBorder("Denuncia di Inizio Attività");
bordoDia.setTitleColor(Color.RED);
bordoDia.setTitleFont(fontBordo);
dia.setBorder(bordoDia);
JPanel approvazione = new JPanel();
TitledBorder bordoApp = new TitledBorder("Approvazione Beni Culturali");
bordoApp.setTitleColor(Color.RED);
bordoApp.setTitleFont(fontBordo);
approvazione.setBorder(bordoApp);
/* Pannello REL TECNICA */
labelDIA[0] = new JLabel();
labelDIA[0].setFont(fontLabel);
radioBott[4][0] = new JRadioButton("Si");
radioBott[4][1] = new JRadioButton("No");
gruppoBott1.add(radioBott[4][0]);
gruppoBott1.add(radioBott[4][1]);
bh = Box.createHorizontalBox();
bh.add(labelDIA[0]);
bh.add(Box.createHorizontalStrut(10));
bh.add(radioBott[4][0]);
bh.add(Box.createHorizontalStrut(10));
bh.add(radioBott[4][1]);
relazione.add(bh);
bv[0] = Box.createVerticalBox();
bv[0].add(bh);
bv[0].add(Box.createVerticalStrut(10));
bh = Box.createHorizontalBox();
bottoni[4][0] = new JButton("Seleziona File");
bh.add(bottoni[4][0]);
bh.add(Box.createHorizontalStrut(15));
txtEdDatGen[4][0] = new JTextField(60);
134
Appendice
Codice Java
txtEdDatGen[4][0].setFont(fontTxt2);
bh.add(txtEdDatGen[4][0]);
bottoni[4][0].addActionListener(new
SelectFileBeni(txtEdDatGen[4][0],mainFrame,tabCondomini,1));
bv[0].add(bh);
bh = Box.createHorizontalBox();
bottoni[4][1] = new JButton();
bottoni[4][1].setText("Apri Relazione Tecnica");
labelDIA[0].setText("File Relazione Tecnica Asseverata:");
bottoni[4][1].addActionListener(new EseguiFile(txtEdDatGen[4][0]));
bh.add(bottoni[4][1]);
radioBott[4][0].addActionListener(new
azioneRadioBottoneSi(bottoni[4][0],bottoni[4][1],txtEdDatGen[4][0]));
radioBott[4][1].addActionListener(new
AzioneRadioBottoneNo(bottoni[4][0],bottoni[4][1],txtEdDatGen[4][0],tabCondomini,1));
bv[0].add(Box.createVerticalStrut(10));
bv[0].add(bh);
relazione.add(bv[0]);
/* Pannello DIA */
labelDIA[1] = new JLabel();
labelDIA[1].setFont(fontLabel);
radioBott[4][2] = new JRadioButton("Si");
radioBott[4][3] = new JRadioButton("No");
gruppoBott2.add(radioBott[4][2]);
gruppoBott2.add(radioBott[4][3]);
bh = Box.createHorizontalBox();
bh.add(labelDIA[1]);
bh.add(Box.createHorizontalStrut(10));
bh.add(radioBott[4][2]);
bh.add(Box.createHorizontalStrut(10));
bh.add(radioBott[4][3]);
dia.add(bh);
bv[0] = Box.createVerticalBox();
bv[0].add(bh);
bv[0].add(Box.createVerticalStrut(10));
bh = Box.createHorizontalBox();
bottoni[4][2] = new JButton("Seleziona File");
bh.add(bottoni[4][2]);
bh.add(Box.createHorizontalStrut(15));
txtEdDatGen[4][1] = new JTextField(60);
txtEdDatGen[4][1].setFont(fontTxt2);
bh.add(txtEdDatGen[4][1]);
bottoni[4][2].addActionListener(new
SelectFileBeni(txtEdDatGen[4][1],mainFrame,tabCondomini,2));
bv[0].add(bh);
bh = Box.createHorizontalBox();
bottoni[4][3] = new JButton();
bottoni[4][3].setText("Apri File Dia");
labelDIA[1].setText("File Denuncia di Inizio Attività:");
bottoni[4][3].addActionListener(new EseguiFile(txtEdDatGen[3][1]));
bh.add(bottoni[4][3]);
135
Appendice
Codice Java
radioBott[4][2].addActionListener(new
azioneRadioBottoneSi(bottoni[4][2],bottoni[4][3],txtEdDatGen[4][1]));
radioBott[4][3].addActionListener(new
AzioneRadioBottoneNo(bottoni[4][2],bottoni[4][3],txtEdDatGen[4][1],tabCondomini,2));
bv[0].add(Box.createVerticalStrut(10));
bv[0].add(bh);
dia.add(bv[0]);
/* Pannello BENI CULTURALI */
labelDIA[2] = new JLabel();
labelDIA[2].setFont(fontLabel);
radioBott[4][4] = new JRadioButton("Si");
radioBott[4][5] = new JRadioButton("No");
gruppoBott3.add(radioBott[4][4]);
gruppoBott3.add(radioBott[4][5]);
bh = Box.createHorizontalBox();
bh.add(labelDIA[2]);
bh.add(Box.createHorizontalStrut(10));
bh.add(radioBott[4][4]);
bh.add(Box.createHorizontalStrut(10));
bh.add(radioBott[4][5]);
approvazione.add(bh);
bv[0] = Box.createVerticalBox();
bv[0].add(bh);
bv[0].add(Box.createVerticalStrut(10));
bh = Box.createHorizontalBox();
bottoni[4][4] = new JButton("Seleziona File");
bh.add(bottoni[4][4]);
bh.add(Box.createHorizontalStrut(15));
txtEdDatGen[4][2] = new JTextField(60);
txtEdDatGen[4][2].setFont(fontTxt2);
bh.add(txtEdDatGen[4][2]);
bottoni[4][4].addActionListener(new
SelectFileBeni(txtEdDatGen[4][2],mainFrame,tabCondomini,3));
bv[0].add(bh);
bh = Box.createHorizontalBox();
bottoni[4][5] = new JButton();
bottoni[4][5].setText("Apri File Approvazione");
labelDIA[2].setText("File Approvazione Beni Culturali:");
bottoni[4][5].addActionListener(new EseguiFile(txtEdDatGen[3][2]));
bh.add(bottoni[4][5]);
radioBott[4][4].addActionListener(new
azioneRadioBottoneSi(bottoni[4][4],bottoni[4][5],txtEdDatGen[4][2]));
radioBott[4][5].addActionListener(new
AzioneRadioBottoneNo(bottoni[4][4],bottoni[4][5],txtEdDatGen[4][2],tabCondomini,3));
bv[0].add(Box.createVerticalStrut(10));
bv[0].add(bh);
approvazione.add(bv[0]);
bv2.add(Box.createVerticalStrut(30));
bv2.add(relazione);
bv2.add(Box.createVerticalStrut(15));
bv2.add(dia);
136
Appendice
Codice Java
bv2.add(Box.createVerticalStrut(15));
bv2.add(approvazione);
pan.add(bv2);
}
private
int
Box
Box
Box
Box
Box
void costruisciComputoEstimativo (JPanel pan) {
i = 0;
bv[] = new Box[2];
bvTmp = Box.createVerticalBox();
bv2 = Box.createVerticalBox();
bh2 = Box.createHorizontalBox();
bh;
JPanel intestazione = new JPanel();
TitledBorder bordoIntestazione = new TitledBorder("Intestazione");
bordoIntestazione.setTitleColor(Color.RED);
bordoIntestazione.setTitleFont(fontBordo);
intestazione.setBorder(bordoIntestazione);
JPanel lavori = new JPanel();
TitledBorder bordoLavori = new TitledBorder("Lavori");
bordoLavori.setTitleColor(Color.RED);
bordoLavori.setTitleFont(fontBordo);
lavori.setBorder(bordoLavori);
JPanel prospetti = new JPanel();
TitledBorder bordoProspetti = new TitledBorder("Prospetti");
bordoProspetti.setTitleColor(Color.RED);
bordoProspetti.setTitleFont(fontBordo);
prospetti.setBorder(bordoProspetti);
JPanel addLavori = new JPanel();
JPanel addProspetto = new JPanel();
for(i=0;i<2;i++) {
bv[i] = Box.createVerticalBox();
}
for(i=0;i<=3;i++) {
txtEdDatGen[5][i] = new JTextField(20);
txtEdDatGen[5][i].setEditable(false);
txtEdDatGen[5][i].setFont(fontTxt);
labelComputo[i] = new JLabel();
labelComputo[i].setFont(fontLabel);
bh = Box.createHorizontalBox();
if(i%2==0){
bh.add(labelComputo[i]);
bh.add(Box.createHorizontalStrut(15));
bh.add(txtEdDatGen[5][i]);
bv[0].add(bh);
bv[0].add(Box.createVerticalStrut(20));
}
if(i%2!=0) {
bh.add(labelComputo[i]);
bh.add(Box.createHorizontalStrut(15));
bh.add(txtEdDatGen[5][i]);
bv[1].add(bh);
bv[1].add(Box.createVerticalStrut(20));
}
}
bh2.add(bv[0]);
bh2.add(Box.createHorizontalStrut(100));
bh2.add(bv[1]);
137
Appendice
Codice Java
bvTmp.add(bh2);
JButton modComputo = new JButton("Modifica");
modComputo.addActionListener(new
AzioneBottModificaComputo(mainFrame,tabCondomini,txtEdDatGen[5]));
bh = Box.createHorizontalBox();
bh.add(modComputo);
bvTmp.add(Box.createVerticalStrut(10));
bvTmp.add(bh);
intestazione.add(bvTmp);
//Tabella Lavori
lavori.setLayout(new BorderLayout());
tabLavori.setPreferredScrollableViewportSize(new Dimension(700,100));
JScrollPane scrollTabLavori = new JScrollPane(tabLavori);
scrollTabLavori.setViewportBorder(new TitledBorder(""));
lavori.add("Center",scrollTabLavori);
JButton addDesignazione = new JButton("Aggiungi");
addDesignazione.addActionListener(new AzioneBottAddLavoro(mainFrame,modLav,tabCondomini));
addLavori.add(addDesignazione);
JButton removeDesignazione = new JButton("Rimuovi");
addLavori.add(removeDesignazione);
JButton visualDesignazione = new JButton("Visualizza");
visualDesignazione.addActionListener(new AzioneBottVisualLav(mainFrame,tabLavori));
addLavori.add(visualDesignazione);
lavori.add("North",addLavori);
//Tabella Prospetti
prospetti.setLayout(new BorderLayout());
JTable tabProspetti = new JTable(new ModelloTabellaProspetti());
tabProspetti.setPreferredScrollableViewportSize(new Dimension(700,100));
JScrollPane scrollTabProspetti = new JScrollPane(tabProspetti);
scrollTabProspetti.setViewportBorder(new TitledBorder(""));
prospetti.add("Center",scrollTabProspetti);
JButton bottAdd = new JButton("Aggiungi");
addProspetto.add(bottAdd);
JButton removeProspetto = new JButton("Rimuovi");
addProspetto.add(removeProspetto);
JButton visualProspetto = new JButton("Visualizza");
addProspetto.add(visualProspetto);
prospetti.add("North",addProspetto);
bv2.add(Box.createVerticalStrut(30));
bv2.add(intestazione);
bv2.add(Box.createVerticalStrut(15));
bv2.add(lavori);
bv2.add(Box.createVerticalStrut(15));
bv2.add(prospetti);
pan.add(bv2);
labelComputo[0].setText("Data:");
labelComputo[1].setText("Committente:");
labelComputo[2].setText("Oggetto:");
labelComputo[3].setText("Tecnico:");
}
}
package sirena.interfaccia;
import javax.swing.table.DefaultTableModel;
138
Appendice
Codice Java
import
import
import
import
import
java.sql.DriverManager;
java.sql.ResultSet;
java.sql.Statement;
java.sql.Connection;
java.sql.SQLException;
public class RiempiTabellaLavori {
String cod_sirena;
DefaultTableModel tabella;
public RiempiTabellaLavori(String cod, DefaultTableModel tab) {
cod_sirena = cod;
tabella = tab;
riempi();
}
private void riempi() {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:odbc:SirenaDB2",
"", "");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(
"SELECT * FROM Designazione_lavori WHERE (Cod_sirena = '" +
cod_sirena + "') ORDER BY id_designazione desc");
if(rs.next()){
Object array[] = new Object[3];
array[0] = rs.getInt("id_designazione");
array[1] = rs.getString("Num_ordinativo");
array[2] = rs.getString("Lavoro");
tabella.insertRow(0,array);
}
}catch(SQLException e) {
System.out.println(e.getMessage());
e.printStackTrace(System.out);
System.exit(1);
}
catch(ClassNotFoundException e) {
System.out.println(e.toString());
System.out.println("Il driver non può essere caricato");
System.exit(1);
}
}
}
package sirena.interfaccia;
import
import
import
import
import
import
java.awt.event.*;
javax.swing.JTextField;
javax.swing.JFileChooser;
javax.swing.JFrame;
javax.swing.JTable;
db.IterazioneDb;
public class SelectFileBeni implements ActionListener {
private JTextField dir = new JTextField();
private JFrame mainFrame = new JFrame();
private JTable tabEdi;
private int tipoFile;
public SelectFileBeni(JTextField txt, JFrame mf,JTable tabEd, int tipo) {
dir = txt;
mainFrame = mf;
tabEdi = tabEd;
tipoFile = tipo;
}
139
Appendice
Codice Java
public void actionPerformed(ActionEvent e) {
JFileChooser c = new JFileChooser();
// Dimostra la finestra di dialogo Open
int rVal = c.showOpenDialog(mainFrame);
if (rVal == JFileChooser.APPROVE_OPTION)
{
String percorso = c.getSelectedFile().toString();
String codSir = tabEdi.getValueAt(tabEdi.getSelectedRow(),0).toString();
IterazioneDb.InsertFileSelezionato (codSir, percorso, tipoFile);
dir.setText(percorso);
}
}
}
package sirena.interfaccia;
import javax.swing.*;
import
import
import
import
import
import
import
javax.swing.*;
java.awt.GridBagLayout;
java.awt.*;
java.awt.Dimension;
java.awt.Font;
java.awt.event.ActionEvent;
java.awt.event.ActionListener;
public class VisualizzaLavori extends JDialog {
String ordinativo,lavoro;
public VisualizzaLavori(JFrame padre, String ord, String lav) {
super(padre,"Lavori",true);
this.setSize(585,352);
ordinativo = ord;
lavoro = lav;
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void jbInit() throws Exception {
this.getContentPane().setLayout(gridBagLayout1);
labelOrd.setFont(new java.awt.Font("Verdana", Font.BOLD, 12));
labelOrd.setText("Num. Ord. TARIFFA:");
labelLavoro.setFont(new java.awt.Font("Verdana", Font.BOLD, 12));
labelLavoro.setText("Designazione Lavori:");
areaLavori.setMinimumSize(new Dimension(200, 50));
txtOrd.setMinimumSize(new Dimension(50, 20));
bottOK.setText("CHIUDI");
bottOK.addActionListener(new VisualizzaLavori_bottOK_actionAdapter(this));
scrollArea.setMinimumSize(new Dimension(200, 50));
scrollArea.setPreferredSize(new Dimension(250,100));
labelTitolo.setFont(new java.awt.Font("Arial", Font.PLAIN, 18));
labelTitolo.setText("DESIGNAZIONE LAVORI");
areaLavori.setPreferredSize(new Dimension(250,100));
txtOrd.setColumns(20);
this.getContentPane().add(scrollArea,
new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
scrollArea.getViewport().add(areaLavori);
this.getContentPane().add(txtOrd,
140
Appendice
Codice Java
}
new GridBagConstraints(2, 1, 1, 1, 0.0,
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 0, 30, 0), 0, 0));
this.getContentPane().add(labelOrd,
new GridBagConstraints(0, 1, 1, 1, 0.0,
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 30, 0), 0, 0));
this.getContentPane().add(labelLavoro,
new GridBagConstraints(0, 2, 1, 1, 0.0,
, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
this.getContentPane().add(bottOK,
new GridBagConstraints(1, 3, 1, 1, 0.0,
, GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(10, 0, 0, 0), 0, 0));
this.getContentPane().add(labelTitolo,
new GridBagConstraints(0, 0, 3, 1, 0.0,
, GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 50, 15), 0, 0));
areaLavori.setText(lavoro);
txtOrd.setText(ordinativo);
this.setVisible(true);
GridBagLayout gridBagLayout1 = new GridBagLayout();
JLabel labelOrd = new JLabel();
JLabel labelLavoro = new JLabel();
JTextField txtOrd = new JTextField();
JScrollPane scrollArea = new JScrollPane();
JTextPane areaLavori = new JTextPane();
JButton bottOK = new JButton();
JLabel labelTitolo = new JLabel();
public void bottOK_actionPerformed(ActionEvent e) {
this.dispose();
}
}
class VisualizzaLavori_bottOK_actionAdapter implements ActionListener {
private VisualizzaLavori adaptee;
VisualizzaLavori_bottOK_actionAdapter(VisualizzaLavori adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.bottOK_actionPerformed(e);
}
}
/* Package Utility*/
package sirena.utility;
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
java.awt.event.MouseAdapter;
javax.swing.JTable;
javax.swing.JTabbedPane;
javax.swing.JTextField;
java.awt.event.MouseEvent;
com.declarativa.interprolog.TermModel;
com.ontotext.flora2.XSBFlora;
sirena.interfaccia.AvvisoSelezione;
javax.swing.JFrame;
javax.swing.JRadioButton;
javax.swing.JCheckBox;
javax.swing.JTextArea;
db.IterazioneDb;
javax.swing.JButton;
javax.swing.border.TitledBorder;
javax.swing.JPanel;
javax.swing.JLabel;
141
0.0
0.0
0.0
0.0
0.0
Appendice
Codice Java
import
import
import
import
java.awt.Color;
javax.swing.Box;
java.awt.Font;
javax.swing.JScrollPane;
public class TabPaneMouseListener extends MouseAdapter {
private
private
private
private
private
private
private
private
private
private
private
private
private
JTable tabella;
JTabbedPane scheda;
JTextField arrayTxt[][];
XSBFlora flora;
JFrame mainFrame;
JRadioButton radioBott[][];
JCheckBox chackBox[][];
JTextArea txtArea[][];
JButton bottoni[][];
ModelloTabellaLavori tabLav;
ModelloTabellaBassiEsistenti modBassi;
JPanel panLM;
JPanel panDatStoCat;
public TabPaneMouseListener (JTabbedPane sched,JTable tab, JTextField txt[][], XSBFlora fl, JFrame
fr,JRadioButton
rB[][],JCheckBox
cB[][],
JTextArea
tA[][],
ModelloTabellaLavori
tab2,
JButton
bot[][],ModelloTabellaBassiEsistenti modBas,JPanel pan1,JPanel pan2) {
tabella = tab;
scheda = sched;
arrayTxt = txt;
flora = fl;
mainFrame = fr;
radioBott = rB;
chackBox = cB;
txtArea = tA;
tabLav = tab2;
bottoni = bot;
modBassi = modBas;
panLM = pan1;
panDatStoCat = pan2;
}
public void mouseClicked(MouseEvent e) {
int r = tabella.getSelectedRow();
int index = scheda.getSelectedIndex();
if ((r>=0)&&(index>=0)) {
String codSirena = tabella.getValueAt(r, 0).toString();
switch(index) {
case 0 : riempiDaSirena(codSirena,arrayTxt[index]); break;
case 1 : riempiEdDatGen(arrayTxt[index], codSirena,panLM); break;
case
2
riempiDatiCatSto(arrayTxt[index],radioBott[index],chackBox[index],txtArea[index],
codSirena,panDatStoCat); break;
case 3 : riempiImprese(arrayTxt[index],txtArea[index], codSirena); break;
case
4
riempiFileSelezionati(arrayTxt[index],codSirena,radioBott[index],bottoni[index]); break;
case 5 : riempiComputo(arrayTxt[index], codSirena,tabLav); break;
case 6 : riempiTxtBassiInsert(arrayTxt[index],codSirena); break;
case 7 : riempiBassi(modBassi,codSirena); break;
}
} else new AvvisoSelezione(mainFrame);
}
:
:
private void riempiEdDatGen (JTextField txt[], String codSir, JPanel panLM) {
Object[] bindings2 = flora.FLogicCommand("''"+ codSir + "'':edifici_dati_generali.");
if (bindings2.length > 0) {
panLM.removeAll();
costrisciEdiDatiGen (panLM, txt);
mainFrame.repaint();
System.gc();
String s = new String();
s
=
"''"
+
codSir
+
"'':edifici_dati_generali[via->A,accessi->B,denominazione>C,circoscriz->D,certificato_ag->O,impresa_esecutrice->U,direttore_lavori->V,tipo->E,n_fabbricati>F,n_scale->Z,nomeprop->G,cognomeprop->H,qualifica->K,domicilio->L,tel->M,licenza->N,cal_strut-
142
Appendice
Codice Java
>T,collaudatore->W,prog_arch->P,prog_imp->R,prog_strut->S,centro_storico->CENTRO_STORICO,comune>COMUNE,possibile_interesse_arch_tec->POSSIBILE_INTERESSE,riserva_20_lavori_statici>RISERVA20,tipologia_edificio->PROPRIETA,vincolato_sensi_1098->VINCOLATO1098,vincolato_sensi_1497>VINCOLATO1497].";
Object bindings[] = flora.FLogicCommand(s);
if (bindings.length != 0) {
TermModel tm = (TermModel) bindings[0];
txt[0].setText(" " + flora.findValue(tm, "A"));
txt[1].setText(" " + flora.findValue(tm, "B"));
txt[2].setText(" " + flora.findValue(tm, "C"));
txt[3].setText(" " + flora.findValue(tm, "D"));
txt[4].setText(" " + flora.findValue(tm, "COMUNE"));
txt[5].setText(" " + flora.findValue(tm, "CENTRO_STORICO"));
txt[6].setText(" " + flora.findValue(tm, "F"));
txt[7].setText(" " + flora.findValue(tm, "Z"));
txt[8].setText(" " + flora.findValue(tm, "E"));
txt[9].setText(" " + flora.findValue(tm, "H"));
txt[10].setText(" " + flora.findValue(tm, "G"));
txt[11].setText(" " + flora.findValue(tm, "K"));
txt[12].setText(" " + flora.findValue(tm, "L"));
txt[13].setText(" " + flora.findValue(tm, "M"));
txt[14].setText(" " + flora.findValue(tm, "N"));
txt[15].setText(" " + flora.findValue(tm, "O"));
txt[16].setText(" " + flora.findValue(tm, "P"));
txt[17].setText(" " + flora.findValue(tm, "U"));
txt[18].setText(" " + flora.findValue(tm, "S"));
txt[19].setText(" " + flora.findValue(tm, "V"));
txt[20].setText(" " + flora.findValue(tm, "R"));
txt[21].setText(" " + flora.findValue(tm, "W"));
txt[22].setText(" " + flora.findValue(tm, "T"));
}
}
else {
panLM.removeAll();
JLabel avviso = new JLabel("Libretto di Manutenzione
avviso.setFont(new Font("Verdana",1,14));
panLM.add(avviso);
panLM.repaint();
mainFrame.repaint();
non presente");
}
}
private void riempiDatiCatSto
tA[], String codSir, JPanel panDSC) {
(JTextField
txt[],JRadioButton
rB[],JCheckBox
cB[],JTextArea
Object[] bindings3 = flora.FLogicCommand("''"+ codSir + "'':edifici_dati_generali.");
if (bindings3.length > 0) {
panDSC.removeAll();
costrisciDatiStorCat (panDSC, txt, rB, cB, tA);
mainFrame.repaint();
System.gc();
String s = new String();
s = "''" + codSir + "'':edifici_dati_catastali[foglio->A,sezione->B,p_lla->C].";
Object bindings[] = flora.FLogicCommand(s);
if (bindings.length != 0) {
TermModel tm = (TermModel) bindings[0];
txt[0].setText(" " + flora.findValue(tm, "A"));
txt[1].setText(" " + flora.findValue(tm, "B"));
txt[2].setText(" " + flora.findValue(tm, "C"));
}
String str = new String();
143
Appendice
Codice Java
str = "''" + codSir + "'':edifici_dati_storici[epoca_costruzione->A,tipo_epoca_costruzione>B,scheda_post_sisma->C,num_schede_post_sisma->D,interventi_eseguiti->E,int_provvisionali_spicconatura>F,int_provvisionali_puntellamento->G,int_provvisionali_altro->H,data_verbale_diffida>I,descrizione_verbale_diffida->L,cep_verbale_diffida->M].";
Object bindings2[] = flora.FLogicCommand(str);
if (bindings2.length != 0) {
TermModel tm = (TermModel) bindings2[0];
txt[3].setText(" " + flora.findValue(tm,
txt[4].setText(" " + flora.findValue(tm,
txt[5].setText(" " + flora.findValue(tm,
txt[6].setText(" " + flora.findValue(tm,
"A"));
"D"));
"I"));
"M"));
String tmp = new String();
tmp = flora.findValue(tm, "B");
if(tmp.compareToIgnoreCase("c")==0) {
rB[0].setSelected(true);
rB[1].setSelected(false);
}
else {
rB[0].setSelected(false);
rB[1].setSelected(true);
}
tmp = flora.findValue(tm, "C");
if(tmp.compareToIgnoreCase("1")==0) {
rB[2].setSelected(true);
rB[3].setSelected(false);
}
else {
rB[2].setSelected(false);
rB[3].setSelected(true);
}
tmp = flora.findValue(tm, "F");
if(tmp.compareToIgnoreCase("1")==0)
cB[0].setSelected(true);
else
cB[0].setSelected(false);
tmp = flora.findValue(tm, "G");
if(tmp.compareToIgnoreCase("1")==0)
cB[1].setSelected(true);
else
cB[1].setSelected(false);
tmp = flora.findValue(tm, "H");
if(tmp.compareToIgnoreCase("1")==0)
cB[2].setSelected(true);
else
cB[2].setSelected(false);
tA[0].setText(flora.findValue(tm, "E"));
tA[1].setText(flora.findValue(tm, "L"));
}
}
else {
panDSC.removeAll();
JLabel avviso = new JLabel("Libretto di Manutenzione
avviso.setFont(new Font("Verdana",1,14));
panDSC.add(avviso);
panDSC.repaint();
mainFrame.repaint();
}
}
144
non presente");
Appendice
Codice Java
private void riempiImprese (JTextField txt[],JTextArea tA[], String codSir) {
String s;
String s2= new String();
String idImpresa = new String();
String impresaSub = new String();
s=
new
String("''"
+
codSir
>A,imprese_sub_appaltatrici->B].");
Object bindings[] = flora.FLogicCommand(s);
+
"'':progetti[impresa_appaltatrice-
if(bindings.length!=0) {
TermModel tm = (TermModel) bindings[0];
idImpresa = flora.findValue(tm, "A");
impresaSub = flora.findValue(tm, "B");
s2
=
idImpresa
+
":imprese[ragione_sociale->A,cap1->B,cap2->C,citta1->D,citta2>H,email->I,partita_iva->F,data_inserimento->Z,fax->E,sede_legale->W,sede_operativa->G,telefono1>K,telefono2->L,tipo_impresa->M,altre_info->N].";
Object bindings2[] = flora.FLogicCommand(s2);
if (bindings2.length != 0) {
TermModel tm2 = (TermModel) bindings2[0];
}
txt[0].setText(" " + flora.findValue(tm2, "A"));
txt[1].setText(" " + flora.findValue(tm2, "B"));
txt[2].setText(" " + flora.findValue(tm2, "C"));
txt[3].setText(" " + flora.findValue(tm2, "D"));
txt[4].setText(" " + flora.findValue(tm2, "H"));
txt[5].setText(" " + flora.findValue(tm2, "I"));
txt[6].setText(" " + flora.findValue(tm2, "F"));
txt[7].setText(" " + flora.findValue(tm2, "Z"));
txt[8].setText(" " + flora.findValue(tm2, "E"));
txt[9].setText(" " + flora.findValue(tm2, "W"));
txt[10].setText(" " + flora.findValue(tm2, "G"));
txt[11].setText(" " + flora.findValue(tm2, "K"));
txt[12].setText(" " + flora.findValue(tm2, "L"));
txt[13].setText(" " + flora.findValue(tm2, "M"));
txt[14].setText(" " + impresaSub);
tA[0].setText(flora.findValue(tm2, "N"));
} else {
txt[0].setText("");
txt[1].setText("");
txt[2].setText("");
txt[3].setText("");
txt[4].setText("");
txt[5].setText("");
txt[6].setText("");
txt[7].setText("");
txt[8].setText("");
txt[9].setText("");
txt[10].setText("");
txt[11].setText("");
txt[12].setText("");
txt[13].setText("");
txt[14].setText("");
tA[0].setText("");
}
}
private void riempiComputo (JTextField txt[], String codSir, ModelloTabellaLavori tabLavori) {
IterazioneDb.CaricaComputo(codSir,txt);
IterazioneDb.caricaTabellaLavori(codSir,tabLavori);
}
private void
JButton bott[]) {
riempiFileSelezionati
(JTextField
145
txt[],String
codSir,
JRadioButton
radio[],
Appendice
Codice Java
IterazioneDb.CaricaFileSelezionati(codSir,1,txt[0],radio,bott);
IterazioneDb.CaricaFileSelezionati(codSir,2,txt[1],radio,bott);
IterazioneDb.CaricaFileSelezionati(codSir,3,txt[2],radio,bott);
}
private void riempiTxtBassiInsert (JTextField t[],String codSir) {
OperazioniStringhe op = new OperazioniStringhe();
String s= new String();
String indirizzo[] = new String[2];
s="''" + codSir + "'':progetti[indirizzo_pr->A].";
Object bindings[] = flora.FLogicCommand(s);
if( bindings.length!=0) {
TermModel tm = (TermModel) bindings[0];
String via = flora.findValue(tm, "A").toString();
System.out.println("VIA = " + via);
indirizzo = op.separaCivico(via);
t[0].setText(indirizzo[0]);
t[1].setText(indirizzo[1]);
}
}
private void riempiBassi (ModelloTabellaBassiEsistenti mod,String codSir) {
IterazioneDb.caricaBassiTab(mod, codSir);
}
private void costrisciEdiDatiGen (JPanel pan, JTextField txtEdDatGen[]) {
JLabel [] labelEdDatGen = new JLabel[23];
int i=0,j=0;
Box bv[] = new Box[2];
Box bv2 = Box.createVerticalBox();
Box bh2 = Box.createHorizontalBox();
Box bh;
Font fontLabel = new Font("Verdana",1,11);
Font fontTxt = new Font("Verdana",0,11);
Font fontBordo = new Font("Verdana",1,13);
JPanel ubiFabb = new JPanel();
JPanel datiP = new JPanel();
JPanel costEman = new JPanel();
TitledBorder bordoUbi = new TitledBorder("Ubicazione Fabbricato");
bordoUbi.setTitleColor(Color.RED);
bordoUbi.setTitleFont(fontBordo);
ubiFabb.setBorder(bordoUbi);
TitledBorder bordoDatiP = new TitledBorder("Dati del proprietario, titolare o amministratore
dell'immobile");
bordoDatiP.setTitleColor(Color.RED);
bordoDatiP.setTitleFont(fontBordo);
datiP.setBorder(bordoDatiP);
TitledBorder bordoCostruzione = new TitledBorder("Costruzione e manutenzione");
bordoCostruzione.setTitleColor(Color.RED);
bordoCostruzione.setTitleFont(fontBordo);
costEman.setBorder(bordoCostruzione);
for(i=0;i<2;i++) {
bv[i] = Box.createVerticalBox();
}
for(i=0;i<=8;i++) {
txtEdDatGen[i] = new JTextField(20);
txtEdDatGen[i].setEditable(false);
txtEdDatGen[i].setFont(fontTxt);
146
Appendice
Codice Java
labelEdDatGen[i] = new JLabel();
labelEdDatGen[i].setFont(fontLabel);
bh = Box.createHorizontalBox();
if(i%2==0){
bh.add(labelEdDatGen[i]);
bh.add(Box.createHorizontalStrut(10));
bh.add(txtEdDatGen[i]);
bv[0].add(bh);
bv[0].add(Box.createVerticalStrut(15));
}
if(i%2!=0) {
bh.add(labelEdDatGen[i]);
bh.add(Box.createHorizontalStrut(10));
bh.add(txtEdDatGen[i]);
bv[1].add(bh);
bv[1].add(Box.createVerticalStrut(15));
}
}
bh2.add(bv[0]);
bh2.add(Box.createHorizontalStrut(50));
bh2.add(bv[1]);
ubiFabb.add(bh2);
for(i=0;i<2;i++) {
bv[i] = Box.createVerticalBox();
}
bh2 = Box.createHorizontalBox();
for(i=9;i<=13;i++) {
txtEdDatGen[i] = new JTextField(20);
txtEdDatGen[i].setEditable(false);
txtEdDatGen[i].setFont(fontTxt);
labelEdDatGen[i] = new JLabel();
labelEdDatGen[i].setFont(fontLabel);
bh = Box.createHorizontalBox();
}
if(i%2==0){
bh.add(labelEdDatGen[i]);
bh.add(Box.createHorizontalStrut(10));
bh.add(txtEdDatGen[i]);
bv[0].add(bh);
bv[0].add(Box.createVerticalStrut(15));
}
if(i%2!=0) {
bh.add(labelEdDatGen[i]);
bh.add(Box.createHorizontalStrut(10));
bh.add(txtEdDatGen[i]);
bv[1].add(bh);
bv[1].add(Box.createVerticalStrut(15));
}
bh2.add(bv[0]);
bh2.add(Box.createHorizontalStrut(50));
bh2.add(bv[1]);
datiP.add(bh2);
for(i=0;i<2;i++) {
bv[i] = Box.createVerticalBox();
}
bh2 = Box.createHorizontalBox();
147
Appendice
Codice Java
for(i=14;i<=22;i++) {
txtEdDatGen[i] = new JTextField(20);
txtEdDatGen[i].setEditable(false);
txtEdDatGen[i].setFont(fontTxt);
labelEdDatGen[i] = new JLabel();
labelEdDatGen[i].setFont(fontLabel);
bh = Box.createHorizontalBox();
}
if(i%2==0){
bh.add(labelEdDatGen[i]);
bh.add(Box.createHorizontalStrut(10));
bh.add(txtEdDatGen[i]);
bv[0].add(bh);
bv[0].add(Box.createVerticalStrut(15));
}
if(i%2!=0) {
bh.add(labelEdDatGen[i]);
bh.add(Box.createHorizontalStrut(10));
bh.add(txtEdDatGen[i]);
bv[1].add(bh);
bv[1].add(Box.createVerticalStrut(15));
}
bh2.add(bv[0]);
bh2.add(Box.createHorizontalStrut(50));
bh2.add(bv[1]);
costEman.add(bh2);
bv2.add(Box.createVerticalStrut(30));
bv2.add(ubiFabb);
bv2.add(Box.createVerticalStrut(15));
bv2.add(datiP);
bv2.add(Box.createVerticalStrut(15));
bv2.add(costEman);
pan.add(bv2);
labelEdDatGen[0].setText("Accesso Principale");
labelEdDatGen[1].setText("Altri Accessi ");
labelEdDatGen[2].setText("Denominazione
");
labelEdDatGen[3].setText("Circoscrizione");
labelEdDatGen[4].setText("Comune
");
labelEdDatGen[5].setText("Centro Storico");
labelEdDatGen[6].setText("N° Fabbricati
");
labelEdDatGen[7].setText("N° Scale
");
labelEdDatGen[8].setText("Tipo Fabbricato
");
labelEdDatGen[9].setText("Cognome");
labelEdDatGen[10].setText("Nome
");
labelEdDatGen[11].setText("Qualifica ");
labelEdDatGen[12].setText("Domicilio");
labelEdDatGen[13].setText("Tel
");
labelEdDatGen[14].setText("Licenza o concessione
");
labelEdDatGen[15].setText("Certificato di agibilità");
labelEdDatGen[16].setText("Progettista Architettonico
");
labelEdDatGen[17].setText("Impresa esecutrice
");
labelEdDatGen[18].setText("Progettista strutturale
");
labelEdDatGen[19].setText("Direttore dei Lavori
");
labelEdDatGen[20].setText("Proggettista impiantista
");
labelEdDatGen[21].setText("Collaudatore
");
labelEdDatGen[22].setText("Disponibilità Calcoli strutturali");
}
private void costrisciDatiStorCat (JPanel pan, JTextField txtEdDatGen[], JRadioButton radioBott[],
JCheckBox chackBox[], JTextArea txtArea[]) {
int i=0;
148
Appendice
Codice Java
Box bv2 = Box.createVerticalBox();
Box bh2 = Box.createHorizontalBox();
Box bh,bv;
JPanel datiCat = new JPanel();
JPanel datiSto = new JPanel();
JLabel [] labelEdDatCat = new JLabel[3];
JLabel [] labelEdDatSto = new JLabel[9];
Font fontLabel = new Font("Verdana",1,11);
Font fontTxt = new Font("Verdana",0,11);
Font fontBordo = new Font("Verdana",1,13);
TitledBorder bordoDCat = new TitledBorder("Dati Catastali");
bordoDCat.setTitleColor(Color.RED);
bordoDCat.setTitleFont(fontBordo);
datiCat.setBorder(bordoDCat);
TitledBorder bordoDSto = new TitledBorder("Dati Storici");
bordoDSto.setTitleColor(Color.RED);
bordoDSto.setTitleFont(fontBordo);
datiSto.setBorder(bordoDSto);
bh2 = Box.createHorizontalBox();
for(i=0;i<=2;i++) {
txtEdDatGen[i] = new JTextField(20);
txtEdDatGen[i].setEditable(false);
txtEdDatGen[i].setFont(fontTxt);
labelEdDatCat[i] = new JLabel();
labelEdDatCat[i].setFont(fontLabel);
bh2.add(labelEdDatCat[i]);
bh2.add(Box.createHorizontalStrut(10));
bh2.add(txtEdDatGen[i]);
if(i!=2)
bh2.add(Box.createHorizontalStrut(20));
}
datiCat.add(bh2);
/*---------------------------------------*/
/*Epoca Costruzione*/
bh = Box.createHorizontalBox();
bv = Box.createVerticalBox();
labelEdDatSto[0] = new JLabel();
labelEdDatSto[0].setFont(fontLabel);
bh.add(labelEdDatSto[0]);
bh.add(Box.createHorizontalStrut(20));
txtEdDatGen[3] = new JTextField(40);
txtEdDatGen[3].setEditable(false);
txtEdDatGen[3].setFont(fontTxt);
bh.add(txtEdDatGen[3]);
bh.add(Box.createHorizontalStrut(40));
radioBott[0] = new JRadioButton("Certa");
radioBott[0].setEnabled(false);
radioBott[0].setFont(fontTxt);
radioBott[1] = new JRadioButton("Presunta");
radioBott[1].setEnabled(false);
radioBott[1].setFont(fontTxt);
bh.add(radioBott[0]);
bh.add(Box.createHorizontalStrut(20));
bh.add(radioBott[1]);
149
Appendice
Codice Java
bv.add(bh);
bv.add(Box.createVerticalStrut(20));
/*Scheda Rilevazione post-sisma*/
bh = Box.createHorizontalBox();
labelEdDatSto[1] = new JLabel();
labelEdDatSto[1].setFont(fontLabel);
bh.add(labelEdDatSto[1]);
bh.add(Box.createHorizontalStrut(40));
radioBott[2] = new JRadioButton(" Si");
radioBott[3] = new JRadioButton(" No");
radioBott[2].setEnabled(false);
radioBott[2].setFont(fontTxt);
radioBott[3].setEnabled(false);
radioBott[3].setFont(fontTxt);
bh.add(radioBott[2]);
bh.add(Box.createHorizontalStrut(20));
bh.add(radioBott[3]);
bh.add(Box.createHorizontalStrut(40));
labelEdDatSto[2] = new JLabel();
labelEdDatSto[2].setFont(fontLabel);
bh.add(labelEdDatSto[2]);
bh.add(Box.createHorizontalStrut(20));
txtEdDatGen[4] = new JTextField(20);
txtEdDatGen[4].setEditable(false);
txtEdDatGen[4].setFont(fontTxt);
bh.add(txtEdDatGen[4]);
bv.add(bh);
bv.add(Box.createVerticalStrut(20));
/*---------------------------------------*/
/* Interventi eseguiti*/
bh = Box.createHorizontalBox();
labelEdDatSto[3] = new JLabel();
labelEdDatSto[3].setFont(fontLabel);
bh.add(labelEdDatSto[3]);
bh.add(Box.createHorizontalStrut(20));
txtArea[0] = new JTextArea(8,70);
txtArea[0].setFont(fontTxt);
txtArea[0].setEditable(false);
txtArea[0].setBorder(new TitledBorder(""));
JScrollPane paneInter = new JScrollPane(txtArea[0]);
bh.add(paneInter);
bv.add(bh);
bv.add(Box.createVerticalStrut(20));
/*Interventi Provvisionali*/
bh = Box.createHorizontalBox();
labelEdDatSto[4] = new JLabel();
labelEdDatSto[4].setFont(fontLabel);
bh.add(labelEdDatSto[4]);
bh.add(Box.createHorizontalStrut(150));
chackBox[0] = new JCheckBox(" Spicconatura");
chackBox[0].setEnabled(false);
chackBox[0].setFont(fontTxt);
chackBox[1] = new JCheckBox(" Puntellamento");
chackBox[1].setEnabled(false);
chackBox[1].setFont(fontTxt);
chackBox[2] = new JCheckBox(" Altro");
chackBox[2].setEnabled(false);
chackBox[2].setFont(fontTxt);
150
Appendice
Codice Java
bh.add(chackBox[0]);
bh.add(Box.createHorizontalStrut(100));
bh.add(chackBox[1]);
bh.add(Box.createHorizontalStrut(100));
bh.add(chackBox[2]);
bh.add(Box.createHorizontalStrut(150));
bv.add(bh);
bv.add(Box.createVerticalStrut(20));
/*---------------------------------------*/
/*Verbali di diffida*/
bh = Box.createHorizontalBox();
labelEdDatSto[5] = new JLabel();
labelEdDatSto[5].setFont(fontLabel);
bh.add(labelEdDatSto[5]);
bh.add(Box.createHorizontalStrut(20));
labelEdDatSto[6] = new JLabel();
labelEdDatSto[6].setFont(fontLabel);
bh.add(labelEdDatSto[6]);
bh.add(Box.createHorizontalStrut(10));
txtEdDatGen[5] = new JTextField(20);
txtEdDatGen[5].setEditable(false);
txtEdDatGen[5].setFont(fontTxt);
bh.add(txtEdDatGen[5]);
bh.add(Box.createHorizontalStrut(40));
labelEdDatSto[7] = new JLabel();
labelEdDatSto[7].setFont(fontLabel);
bh.add(labelEdDatSto[7]);
bh.add(Box.createHorizontalStrut(20));
txtEdDatGen[6] = new JTextField(20);
txtEdDatGen[6].setEditable(false);
txtEdDatGen[6].setFont(fontTxt);
bh.add(txtEdDatGen[6]);
bv.add(bh);
bv.add(Box.createVerticalStrut(20));
/*---------------------------------------*/
/*Descrizione verbali diffida e ordinanza:*/
bh = Box.createHorizontalBox();
labelEdDatSto[8] = new JLabel();
labelEdDatSto[8].setFont(fontLabel);
bh.add(labelEdDatSto[8]);
bh.add(Box.createHorizontalStrut(20));
txtArea[1] = new JTextArea(7,40);
txtArea[1].setFont(fontTxt);
txtArea[1].setEditable(false);
txtArea[1].setBorder(new TitledBorder(""));
JScrollPane paneDes = new JScrollPane(txtArea[1]);
bh.add(paneDes);
bv.add(bh);
bv.add(Box.createVerticalStrut(10));
/*---------------------------------------*/
datiSto.add(bv);
bv2.add(Box.createVerticalStrut(30));
bv2.add(datiCat);
bv2.add(Box.createVerticalStrut(30));
bv2.add(datiSto);
151
Appendice
Codice Java
pan.add(bv2);
labelEdDatCat[0].setText("Foglio:");
labelEdDatCat[1].setText("Sezione:");
labelEdDatCat[2].setText("P.lla:");
labelEdDatSto[0].setText("Epoca di Costruzione:");
labelEdDatSto[1].setText("Scheda di rilevazione post-sisma:");
labelEdDatSto[2].setText("N°");
labelEdDatSto[3].setText("Interventi eseguiti:");
labelEdDatSto[4].setText("Interventi provvisionali:");
labelEdDatSto[5].setText("Verbali di diffida e ordinanza:");
labelEdDatSto[6].setText("Data:");
labelEdDatSto[7].setText("CEP:");
labelEdDatSto[8].setText("Descrizione verbali diffida e ordinanza:");
}
public void riempiDaSirena(String codSir, JTextField t[]){
String s = new String("''" + codSir +
"'':progetti[indirizzo_pr->A,comune_pr->B,protocollo_servizi->C,anno_protocollo>D,circoscrizione_pr->E].");
Object bindings[] = flora.FLogicCommand(s);
if (bindings.length != 0) {
TermModel tm = (TermModel) bindings[0];
t[0].setText(" " + flora.findValue(tm, "A"));
t[1].setText(" " + flora.findValue(tm, "B"));
t[2].setText(" " + flora.findValue(tm, "C"));
t[3].setText(" " + flora.findValue(tm, "D"));
String circ = flora.findValue(tm, "E");
}
Object bindings2[] = flora.FLogicCommand(circ + ":circoscrizioni[nome_circ->F].");
if (bindings2.length != 0) {
TermModel tm2 = (TermModel) bindings2[0];
t[4].setText(" " + flora.findValue(tm2, "F"));
}
}
}
package sirena.utility;
import
import
import
import
java.awt.event.*;
javax.swing.JFrame;
sirena.interfaccia.InserimentoComponente;
javax.swing.table.DefaultTableModel;
public class AzioneBottAddComponente implements ActionListener {
JFrame mainFrame;
DefaultTableModel tabCompo;
public AzioneBottAddComponente(JFrame mf, DefaultTableModel tab) {
mainFrame = mf;
tabCompo = tab;
}
/**
* Invoked when an action occurs.
*
* @param e ActionEvent
* @todo Implement this java.awt.event.ActionListener method
*/
public void actionPerformed(ActionEvent e) {
new InserimentoComponente(mainFrame,tabCompo);
}
}
package sirena.utility;
import
import
import
import
java.awt.event.*;
javax.swing.JFrame;
sirena.interfaccia.InserimentoLavori;
javax.swing.JTextField;
152
Appendice
Codice Java
import javax.swing.table.DefaultTableModel;
import javax.swing.JTextArea;
import javax.swing.JTable;
public class AzioneBottAddLavoro implements ActionListener {
JFrame mainFrame;
DefaultTableModel tabellaLav;
JTable tabellaEd;
String codSirena;
public AzioneBottAddLavoro(JFrame mf,DefaultTableModel tab, JTable tab2) {
mainFrame = mf;
tabellaLav = tab;
tabellaEd = tab2;
}
/**
* Invoked when an action occurs.
*
* @param e ActionEvent
* @todo Implement this java.awt.event.ActionListener method
*/
public void actionPerformed(ActionEvent e) {
String cod = tabellaEd.getValueAt(tabellaEd.getSelectedRow(),0).toString();
new InserimentoLavori(mainFrame,tabellaLav,cod);
}
}
package sirena.utility;
import
import
import
import
import
import
java.awt.event.*;
javax.swing.JTable;
sirena.interfaccia.ModificaComputo;
javax.swing.JFrame;
javax.swing.JTabbedPane;
javax.swing.JTextField;
public class AzioneBottModificaComputo implements ActionListener {
JTable tabellaEd;
JFrame mainFrame;
JTextField txtTP[] = new JTextField[4];
public AzioneBottModificaComputo(JFrame mf,JTable tab,JTextField t[]) {
tabellaEd = tab;
mainFrame = mf;
txtTP = t;
}
/**
* Invoked when an action occurs.
*
* @param e ActionEvent
* @todo Implement this java.awt.event.ActionListener method
*/
public void actionPerformed(ActionEvent e) {
String codSir = tabellaEd.getValueAt(tabellaEd.getSelectedRow(),0).toString();
new ModificaComputo(mainFrame,codSir,txtTP);
}
}
package sirena.utility;
import
import
import
import
java.awt.event.*;
javax.swing.JFrame;
sirena.interfaccia.VisualizzaLavori;
javax.swing.JTable;
153
Appendice
Codice Java
public class AzioneBottVisualLav implements ActionListener {
JFrame mainFrame;
JTable tabLavoro;
public AzioneBottVisualLav(JFrame padre, JTable lav) {
mainFrame = padre;
tabLavoro = lav;
}
/**
* Invoked when an action occurs.
*
* @param e ActionEvent
* @todo Implement this java.awt.event.ActionListener method
*/
public void actionPerformed(ActionEvent e) {
String ordinativo,lavoro;
if(tabLavoro.getValueAt(tabLavoro.getSelectedRow(),1) != null) {
ordinativo = tabLavoro.getValueAt(tabLavoro.getSelectedRow(), 1).
toString();
}
lavoro = tabLavoro.getValueAt(tabLavoro.getSelectedRow(), 2).
toString();
new VisualizzaLavori(mainFrame, ordinativo, lavoro);
}
}
package sirena.utility;
import
import
import
import
import
java.awt.event.*;
javax.swing.JTextField;
javax.swing.JButton;
javax.swing.JTable;
db.IterazioneDb;
public class AzioneRadioBottoneNo implements ActionListener {
JButton bottone,bottone2;
JTextField dir;
JTable tabEdi;
int tipoFile;
public AzioneRadioBottoneNo(JButton b,JButton b2,JTextField txt, JTable tabEd, int tipo) {
bottone=b;
bottone2=b2;
dir = txt;
tabEdi = tabEd;
tipoFile = tipo;
}
/**
* Invoked when an action occurs.
*
* @param e ActionEvent
* @todo Implement this java.awt.event.ActionListener method
*/
public void actionPerformed(ActionEvent e) {
bottone.setEnabled(false);
bottone2.setEnabled(false);
dir.setText("");
dir.setEditable(false);
String codSir = tabEdi.getValueAt(tabEdi.getSelectedRow(),0).toString();
IterazioneDb.RemoveFileSelezionato (codSir, tipoFile);
}
}
package sirena.utility;
import java.awt.event.*;
import javax.swing.JButton;
import javax.swing.JTextField;
154
Appendice
Codice Java
public class azioneRadioBottoneSi implements ActionListener {
JButton bottone,bottone2;
JTextField dir;
public azioneRadioBottoneSi(JButton b,JButton b2,JTextField txt) {
bottone=b;
bottone2=b2;
dir = txt;
}
/**
* Invoked when an action occurs.
*
* @param e ActionEvent
* @todo Implement this java.awt.event.ActionListener method
*/
public void actionPerformed(ActionEvent e) {
bottone.setEnabled(true);
bottone2.setEnabled(true);
dir.setText("Seleziona il file contenete la lettera
Culturali");
dir.setEditable(true);
}
}
package sirena.utility;
d'approvazione
da
parte
import java.util.*;
public class ComparatoreAlfabetico implements Comparator {
public ComparatoreAlfabetico() {
}
public int
String
String
return
}
compare(Object o1, Object o2) {
s1 = (String) o1;
s2 = (String) o2;
s1.toLowerCase().compareTo(s2.toLowerCase());
}
package sirena.utility;
import java.awt.event.*;
import javax.swing.JTextField;
public class EseguiFile implements ActionListener {
JTextField dir;
public EseguiFile(JTextField txt) {
dir=txt;
}
/**
* Invoked when an action occurs.
*
* @param e ActionEvent
* @todo Implement this java.awt.event.ActionListener method
*/
public void actionPerformed(ActionEvent e) {
try{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("rundll32 SHELL32.DLL,ShellExec_RunDLL " + dir.getText());
}catch (Exception ex){System.out.println("Eccezione");}
}
}
package sirena.utility;
import javax.swing.table.DefaultTableModel;
public class ModelloTabella extends DefaultTableModel {
public ModelloTabella() {
addColumn("Num. Protocollo Servizio - Anno");
155
dei
Benni
Appendice
Codice Java
}
public boolean isCellEditable(int row, int col){
return false;
}
}
package sirena.utility;
import javax.swing.table.*;
public class ModelloTabellaBassiEsistenti extends DefaultTableModel {
public ModelloTabellaBassiEsistenti() {
addColumn("ID");
addColumn("Via");
addColumn("Civico");
}
public boolean isCellEditable(int row, int col){
return false;
}
}
package sirena.utility;
import javax.swing.table.DefaultTableModel;
public class ModelloTabellaLavori extends DefaultTableModel {
public ModelloTabellaLavori() {
this.setRowCount(4);
this.setColumnCount(3);
}
public String getColumnName(int col) {
if (col == 0)
return "ID";
else
if (col == 1)
return "Num. Ord. TARIFFE";
else
return "DESIGNAZIONE LAVORI";
}
public boolean isCellEditable(int row, int col){
return false;
}
}
package sirena.utility;
import javax.swing.table.DefaultTableModel;
public class ModelloTabellaProspetti extends DefaultTableModel {
public ModelloTabellaProspetti() {
addColumn("ID");
addColumn("PROSPETTO");
addColumn("par.ug");
addColumn("lung.");
addColumn("larg");
addColumn("H/peso");
addColumn("Quantità");
this.setRowCount(4);
}
public boolean isCellEditable(int row, int col){
return false;
}
}
package sirena.utility;
156
Appendice
Codice Java
import javax.swing.table.*;
public class ModelloTabellaResidenti extends DefaultTableModel {
public ModelloTabellaResidenti() {
addColumn("ID Componente");
addColumn("Sesso");
addColumn("Età");
addColumn("Relazione di parentela");
addColumn("Attività");
}
public boolean isCellEditable(int row, int col){
return false;
}
}
package sirena.utility;
public class OperazioniStringhe {
public String[] separaCivico (String str){
int max = str.length();
char c;
String abita[] = new String[2];
String indirizzo;
String civico;
for(int i=0;i<max;i++){
c = str.charAt(i);
if(numero(c)) {
civico = estraiCivico(str,i);
indirizzo = estraiIndirizzo(str,i);
abita[0] = indirizzo;
abita[1] = civico;
break;
}
}
return abita;
}
private boolean numero(char c) {
char s[] ={'1','2','3','4','5','6','7','8','9','0'} ;
int max = s.length;
for(int i=0;i<max;i++){
if(s[i] == c)
return true;
}
return false;
}
private String estraiCivico(String s, int pos){
char str[] = s.toCharArray();
char temp[] = new char[(str.length - pos)];
System.arraycopy(str,pos,temp,0,(str.length - pos));
return new String(temp);
}
private String estraiIndirizzo(String s, int pos){
char str[] = s.toCharArray();
if(str[pos-1] == ' '){
pos--;
}
char temp[] = new char[pos];
System.arraycopy(str,0,temp,0,pos);
return new String(temp);
}
}
157
Appendice
Codice Java
package sirena.utility;
import
import
import
import
java.awt.event.*;
javax.swing.JTable;
javax.swing.JTextField;
db.IterazioneDb;
public class TabellaBassiMouseListener extends MouseAdapter {
JTable tabBassi;
JTextField txtBassi[];
public TabellaBassiMouseListener(JTable tab, JTextField txt[]) {
tabBassi = tab;
txtBassi = txt;
}
public void mouseClicked(MouseEvent e) {
int id=-1;
String idString = tabBassi.getValueAt(tabBassi.getSelectedRow(),0).toString();
id = Integer.parseInt(idString);
IterazioneDb.caricaBassiInfo(id,txtBassi);
}
}
package sirena.utility;
import
import
import
import
import
import
javax.swing.*;
javax.swing.table.JTableHeader;
java.awt.Point;
java.awt.event.MouseAdapter;
java.awt.event.MouseEvent;
java.util.Arrays;
public class TabellaCondomini extends JTable {
private ModelloTabella modelloTab;
public TabellaCondomini(ModelloTabella mod) {
super(mod);
modelloTab = mod;
final JTableHeader tableHeader = getTableHeader();
tableHeader.addMouseListener( new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
int columnIndex = tableHeader.columnAtPoint( new Point(x,y) );
sort( columnIndex );
}
} );
}
public void sort(int coloum){
int n = modelloTab.getRowCount();
String elem[] = new String[n];
for(int i=0;i<n;i++){
elem[i] = modelloTab.getValueAt(i,0).toString();
}
Arrays.sort(elem,new ComparatoreAlfabetico());
ModelloTabella newModel = new ModelloTabella();
for(int j=n-1;j>=0;j--){
String tmp[] = new String[1];
tmp[0] = elem[j];
newModel.insertRow(0,tmp);
}
this.setModel(newModel);
}
}
package sirena.utility;
import
import
import
import
import
javax.swing.table.*;
java.awt.Color;
java.awt.Component;
javax.swing.JTable;
javax.swing.JLabel;
158
Appendice
Codice Java
import com.ontotext.flora2.XSBFlora;
public class TableRenderCondomini extends DefaultTableCellRenderer {
private static final Color SELECTED_COLOR = new Color(61,128,223);
private static final Color ALTERNATE_COLOR = new Color(232,242,254);
private XSBFlora flora;
public TableRenderCondomini(XSBFlora fl){
flora = fl;
}
public Component getTableCellRendererComponent(JTable
boolean hasFocus, int row, int col) {
JLabel testLabel;
testLabel = new JLabel( value.toString() );
testLabel.setOpaque(true);
table,
Object
value,
boolean
isSelected,
if (isSelected) {
Object[] bindings2 = flora.FLogicCommand("''"+ value.toString() + "'':edifici_dati_generali.");
if (bindings2.length > 0) {
testLabel.setBackground(Color.BLACK);
testLabel.setForeground(Color.YELLOW);
}else{
testLabel.setForeground(Color.WHITE);
testLabel.setBackground(SELECTED_COLOR);
}
} else {
Object[]
bindings2
=
flora.FLogicCommand("''"+
value.toString()
+
"'':edifici_dati_generali.");
if (bindings2.length > 0) {
testLabel.setBackground(Color.YELLOW);
testLabel.setForeground(Color.BLACK);
}else {
testLabel.setBackground(table.getBackground());
testLabel.setForeground(table.getForeground());
}
}
return testLabel;
}
}
159