SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Downloaden Sie, um offline zu lesen
UNIVERSITÀ DEGLI STUDI DI TRIESTE
                 FACOLTÀ DI INGEGNERIA
      DIPARTIMENTO DI INGEGNERIA ED ARCHITETTURA


                      Tesi di laurea in

                     BASI DI DATI



PROGETTAZIONE ED IMPLEMENTAZIONE DI UNA
BASE DI DATI PER LA GESTIONE DI EMISSIONI

   INQUINANTI ALIMENTATA DA FILE XML




       Relatore: Chiar.mo prof. Maurizio Fermeglia
            Laureando: Francesco Occhioni




            Anno accademico: 2011-2012
A Tina e Angelo




              I
Indice
1.Introduzione ............................................................................................................. 1
2.Presentazione delle Richieste ..................................................................................... 2
3.Analisi delle richieste ................................................................................................. 2
4.Strumenti necessari allo sviluppo del Progetto ............................................................. 3
   4.1 Hardware ............................................................................................................ 3
      4.1.1. PC NOTEBOOK SONY VAIO VPCEB1S1E ......................................................... 3
   4.2 Software ............................................................................................................. 3
      4.2.1 SQL Server 2008 ........................................................................................... 3
      4.2.2 Microsoft Access 2010 ................................................................................... 4
      4.2.3 Eclipse.......................................................................................................... 4
      4.2.4 Software Java ............................................................................................... 4
5. Prima di Cominciare .................................................................................................. 5
   5.1 Attivazione Protocollo TCP/IP SQL Server 2008...................................................... 5
   5.2 Librerie Eclipse .................................................................................................... 7
      5.2.1 Driver JDBC .................................................................................................. 7
      5.2.2 XMLBeans..................................................................................................... 7
      5.2.3 MyBatis ........................................................................................................ 7
      5.2.4 Installazione Librerie ..................................................................................... 8
6. Studio del file XSD .................................................................................................... 9
   6.1 Analisi Entità ..................................................................................................... 10
   6.2 Analisi Relazioni ................................................................................................ 10
      6.2.1 Presenza Country-CompetentAuthorityParty .................................................. 10
      6.2.2 Presenza Country-Facility ............................................................................. 10
      6.2.3 Rilevazioni Facility-Report ............................................................................ 10
      6.2.4 Dettaglio Report-Chemical ........................................................................... 10
      6.2.5 Associato A Report-Periodo .......................................................................... 11
   6.3 Traduzione verso il modello Relazionale .............................................................. 11
      6.3.1 PollutantReleaseAndTransferReport .............................................................. 11
      6.3.2 CompetentAuthorityParty ............................................................................. 12
      6.3.3 NationalID .................................................................................................. 12
      6.3.4 PreviousNationalID ...................................................................................... 13
      6.3.5 FacilityReport .............................................................................................. 13
      6.3.6 Activity ....................................................................................................... 16
      6.3.7 PollutantRelease.......................................................................................... 17

                                                                                                                            II
6.3.8 PollutantTransfer ......................................................................................... 18
     6.3.9 WasteTransfer ............................................................................................. 19
     6.3.10 MethodUsed.............................................................................................. 20
     6.3.11 WasteHandlerParty .................................................................................... 20
     6.3.12 Address .................................................................................................... 21
     6.3.13 CompetentAuthorityAddress ....................................................................... 21
     6.3.14 FacilityAddress .......................................................................................... 22
     6.3.15 TelecommunicationCommunication ............................................................. 22
     6.3.16 EmailCommunication ................................................................................. 22
     6.3.17 WebsiteCommunication ............................................................................. 23
     6.3.18 GeographicalCoordinate ............................................................................. 23
     6.3.19 ProductionVolume ..................................................................................... 23
     6.3.20 ProductionVolumeQuantity ......................................................................... 23
     6.3.21 PollutantMassQuantity ............................................................................... 24
     6.3.22 WasteMassQuantity ................................................................................... 24
     6.3.23 Quantity ................................................................................................... 24
  6.4 Considerazioni ................................................................................................... 25
     6.4.1 Valori Null ................................................................................................... 25
     6.4.2 Tipi di Dato ................................................................................................. 25
  6.5 Accorpamento Tabelle – Denormalizzazione ........................................................ 26
  6.6 Scelta delle chiavi primarie................................................................................. 26
  6.7 Schema Finale................................................................................................... 27
7. Creazione Applicativo per Caricare File XML .............................................................. 28
  7.1 XmlBeans .......................................................................................................... 28
  7.2 Creazione Oggetti-Tabelle Java ........................................................................... 28
     7.2.1 PollutantReleaseAndTransferReport .............................................................. 29
     7.2.2 Activity ....................................................................................................... 29
     7.2.3 CompetentAuthorityParty ............................................................................. 29
     7.2.4 PollutantRelease .......................................................................................... 29
     7.2.5 PollutantReleaseMethodUsed........................................................................ 30
     7.2.6 PollutantTransfer ......................................................................................... 30
     7.2.7 PollutantTransferMethodUsed ....................................................................... 30
     7.2.8 TblWasteTransfer ......................................................................................... 30
     7.2.9 TblWasteTransfer ......................................................................................... 30
     7.2.10 WasteHandlerParty .................................................................................... 31
     7.2.11 WasteHandlerParty .................................................................................... 31

                                                                                                                          III
7.2.12 ProductionVolume...................................................................................... 31
   7.3 Validazione File Xml ........................................................................................... 32
   7.4 Mybatis ............................................................................................................. 33
      7.4.1 Connessione al Server SQL........................................................................... 33
      7.4.2 Mapping del DB ........................................................................................... 34
   7.5 Interfaccia Grafica ............................................................................................. 35
      7.5.1 Descrizione ................................................................................................. 35
      7.5.2 Codice ........................................................................................................ 36
8.Conclusioni ............................................................................................................. 39
Bibliografia................................................................................................................. 40
Indice delle figure ...................................................................................................... 40




                                                                                                                            IV
1.Introduzione
La tesi proposta all’interno di questo documento andrà a trattare e sviluppare l’analisi e la
gestione di un sistema informativo, nella fattispecie di un database volto a raccogliere dati
storici riguardanti dati di inquinamento all’interno dell’unione europea e forniti da altri
sistemi informativi.
Tale sistema verrà sviluppato in ambiente proprietario SQL SERVER 2008 in modo da
mantenere la stessa struttura e logistica del complesso sistema informativo preesistente su
cui basarsi.
L’obbiettivo è quello di analizzare la struttura dei sistemi database preesistenti, nonché
studiare il modo in cui i database trasmettono le informazioni e le inviano al database da
creare. Il passo successivo consiste nel progettare il nuovo sistema secondo le leggi date
dalla normativa UE e le specifiche date dall’analisi precedentemente effettuata.
Lo sviluppo verrà realizzato interamente in locale per poi eventualmente porsi l’obbiettivo
di portare il sistema su macchina remota.
I capitoli della tesi sono così distribuiti:
   •   2) e 3) presentano le specifiche richieste dal committente e la relativa analisi del
       progetto;
   •   4) descrive le strumentazioni hardware e software necessarie;
   •   5) propone un setup per poter procedere nel progetto;
   •   6) analizza e progetta la base di dati su cui operare;
   •   7) crea l’applicativo per alimentare la base di dati con file XML;
   •   8) propone migliorie e spunti futuri del lavoro creato.




                                                                                           1
2.Presentazione delle Richieste
Il commissionario del progetto non ha presentato particolari richieste se non quelle di un
sistema informativo funzionante e dalla struttura similare ai server forniti nei vari stati
d’Europa.
Il responsabile del progetto ha fornito le seguenti richieste:
   •   Distinguere all’interno del sistema quelle che sono le Nazioni di riferimento
   •   Avere una lista separata del gruppo di autorità competente
   •   Considerare diversi periodi di analisi dei dati
   •   Salvare all’interno di una datatable quelli che sono gli output forniti dai server
   •   Avere una versione in inglese del sistema
   •   Essere ad alto indice di usabilità


Oltretutto è già stata fornita una linea guida sulla struttura da seguire per la creazione del
sistema informativo.




3.Analisi delle richieste
Il progetto, per la sua realizzazione, richiede uno studio approfondito di strutture dati
utilizzabili principalmente su motore SQL Server o Access.
Non meno importante sarà lo studio approfondito della struttura del server in quanto un
errata progettazione potrebbe portare a problemi di incompatibilità non verificabile
immediatamente nella fase di test del sistema.
Ancor più interessante sarà riempire il database opportunamente progettato con una
struttura dati fornita da altri database esterni.




                                                                                            2
4.Strumenti necessari allo sviluppo del Progetto
Il progetto necessita dell’utilizzo del seguente elenco di hardware e software.
Di seguito ne descriveremo le caratteristiche.



4.1 Hardware

4.1.1. PC Notebook SONY VAIO VPCEB1S1E

È il portatile a disposizione del laureando, montante un processore INTEL CORE I5
DUALCORE e scheda grafica ATI MOBILITY RADEON HD 5650 con 1 GB di memoria
grafica dedicata, HARD DISK da 500 GB e 4 GB di RAM DDR III.




                                 Figura 1: Sony Vaio VPCEB1S1E




4.2 Software

4.2.1 SQL Server 2008

È il DBMS che verrà utilizzato per l’intero sviluppo del progetto.




                                                                                  3
4.2.2 Microsoft Access 2010

Software appartenente alla suite MICROSOFT OFFICE 2010, sarà utile per la gestione dei
dati contenuti nel database a disposizione per l’end-user.



4.2.3 Eclipse

Eclipse è un ambiente di sviluppo integrato multi-linguaggio e multipiattaforma. Nello
specifico verrà utilizzato per la produzione di software applicativo in linguaggio Java. La
versione utilizzata è la Juno (4.2), rilasciata il 27 giugno 2012.



4.2.4 Software Java

Java è un linguaggio di programmazione e una piattaforma di elaborazione sviluppati da
Sun Microsystems nel 1995. Dal download del software Java si ottiene Java Runtime
Environment (JRE). JRE è composto dalla Macchina virtuale Java (JVM), dalle classi core
della piattaforma Java e dalle librerie Java di supporto.




                                                                                         4
5. Prima di Cominciare

5.1 Attivazione Protocollo TCP/IP SQL Server 2008
Attivando questo protocollo si ottiene il supporto al DB per le connessioni remote, la cui
procedura è descritta qui sotto (valida anche per SQL Server 2005):

   1. Accedere al server a livello dati sul quale è definita l'istanza del database.
   2. Fare clic sul pulsante Start, scegliere Tutti i programmi, Microsoft SQL Server
      2005 o Microsoft SQL Server 2008, Strumenti di configurazione, quindi fare clic su
      Gestione configurazione SQL Server.
   3. Nel riquadro della struttura ad albero fare clic su Servizi di SQL Server
      2005 o Servizi di SQL Server 2008.
   4. Nel riquadro dei risultati verificare che, nella colonna Stato, appaia In
      esecuzione accanto al nome di ogni servizio.
      Se è presente Arrestato, fare clic con il pulsante destro del mouse sul nome del
      servizio, quindi scegliere Avvia.




                    Figura 2: Attivazione Protocollo TCP/IP SQL Server 2008/1




   5. Nel riquadro della struttura ad albero fare clic su Configurazione di rete SQL Server
      2005 o Configurazione di rete SQL Server 2008 per espanderlo, quindi
      scegliere Protocolli per MSSQLServer/NomeIstanza.
      Se durante l'installazione è stata specificata l'istanza predefinita, il nome dell'istanza
      sarà MSSQLSERVER.
   6. Nel riquadro dei risultati verificare che, nella colonna Stato, appaia Attivato accanto
      al nome del protocollo TCP/IP.

                                                                                              5
Se appare Disattivato, fare clic con il pulsante destro del mouse su TCP/IP, quindi
   scegliere Attiva.




                 Figura 3: Attivazione Protocollo TCP/IP SQL Server 2008/2




7. Nel riquadro della struttura ad albero fare clic su Configurazione SQL Native
   Client per espanderlo, quindi fare clic su Protocolli client.
8. Nel riquadro dei risultati verificare che, nella colonna Stato, appaia Attivato accanto
   al nome del protocollo TCP/IP.
   Se appare Disattivato, fare clic con il pulsante destro del mouse su TCP/IP, quindi
   scegliere Attiva.




                 Figura 4: Attivazione Protocollo TCP/IP SQL Server 2008/3



                                                                                        6
5.2 Librerie Eclipse

5.2.1 Driver JDBC

JDBC è un'interfaccia di programmazione che lavora da tramite tra codice Java e database.
Più in particolare, JDBC racchiude una serie di classi che permettono l'accesso ad una base
di dati mediante metodi e schemi di funzionamento che sono intuitivi e perfettamente in
linea con lo stile di programmazione tipico del linguaggio di Sun. In sostanza, quindi, è
possibile connettersi ad un particolare database sfruttando un apposito driver JDBC,
costituito da una classe Java. Tutti i principali DBMS dispongono oramai di un driver JDBC
appositamente studiato. Esiste poi un particolare driver, chiamato ponte JDBC-ODBC, che
permette l'utilizzo di qualsiasi fonte di dati per la quale è disponibile un driver ODBC. Ogni
DBMS dotato di un'interfaccia ODBC, ad esempio Microsoft Access, può così essere
immediatamente sfruttato da Java e JSP, senza la necessità di un driver appositamente
studiato per la connettività da applicazioni Java. Tra JDBC ed il ponte ODBC, quindi, Java è
virtualmente dotato della possibilità di interagire con tutti i DBMS in circolazione.

5.2.2 XMLBeans

XMLBeans è una libreria scritta dalla Apache che permette di manipolare il contenuto di un
file XML fornendo una visione a oggetti dei dati e implementando tutte le funzionalità
necessarie allo sviluppatore per gestire in modo automatico le operazioni di lettura,
scrittura e validazione di un file XML. Mediante XMLBeans è possibile generare delle classi
java che permettono di leggere, scrivere o validare un file xml.

5.2.3 MyBatis

MyBatis è un framework per la persistenza che offre supporto per scrivere delle query,
delle stored procedures o mapping avanzati attraverso l’uso di SQL e semplici regole di
XML o attraverso l’uso delle Annotations. La principale caratteristica è che grazie a MyBatis
viene eliminata la necessità di scrivere codice JDBC, di settare manualmente i parametri di
connessione al DB e inoltre anche il retrieve dei risultati risulta essere automatico.




                                                                                            7
5.2.4 Installazione Librerie

Per installare il queste librerie all’interno del progetto java si è seguito il seguente
procedimento:


   1. Eseguito il download delle librerie.
   2. Nella cartella “lib” del progetto Java presente in Eclipse sono stati inseriti i file con
      estensione .jar relativi.
   3. In Eclipse click col tasto destro del mouse sul progetto java, poi “BuildPath” ->
      “Configure BuildPath” e nella scheda “Libraries” click su “Add JARs…” e selezionato i
      file .jar precedentemente inseriti.




                     Figura 5: Installazione Driver JDBC – XMLBeans - MyBatis




                                                                                             8
6. Studio del file XSD
Una "XML Schema Definition" (XSD) è un esempio (instance) di schema XML scritto in
linguaggio XML Schema. Una XSD definisce il tipo di un documento XML in termini di
vincoli: quali elementi ed attributi possono apparire, in quale relazione reciproca, quale
tipo di dati può contenere, ed altro. Può essere usata anche con un programma di
validazione, al fine di accertare a quale tipo appartiene un determinato documento XML.

La differenza principale fra XSD ed altri linguaggi di descrizione del contenuto XML sta nel
fatto che XSD è stato sviluppato con l'intento che la determinazione della validità di un
documento possa produrre una collezione di informazioni aderenti a specifici tipi di dati.

In questo caso particolare il file XSD è fornito direttamente dalla UE al seguente indirizzo:
http://www.eionet.europa.eu/schemas/eprtr/PollutantReleaseAndTransferReport_2p0.xsd.
Si è proceduto quindi allo studio dello schema XML per poter ottenere uno schema Entity-
Relationship sul quale creare il database.
Lo schema che si ottiene è il seguente:




                              Figura 6: Schema Entity-Relationship



                                                                                                9
6.1 Analisi Entità
Si passa a questo punto ad analizzare in maniera esplicita e descrittiva le singole entità:
          •   Country: descrive lo stato membro di provenienza del report.
          •   CompetentAuthorityParty: descrive uno o più gruppi di autorità competenti
              incaricate di rispondere alle richieste del pubblico.
          •   Facility: descrive nel dettaglio le imprese che riportano i dati inquinanti.
          •   Report: descrive nel dettaglio i dati inquinanti.
          •   Chemical: descrive il tipo di inquinamento (aria/terra/acqua) e il metodo
              usato per la rilevazione dei dati.
          • Period: descrive il periodo di rilevazione del dato (tipicamente annuale).



6.2 Analisi Relazioni
Analogamente a quanto fatto con le entità, si analizzano ora le relazioni:

6.2.1 Presenza Country-CompetentAuthorityParty

La relazione descrive la presenza di una o più autorità di competenza nello stato di
riferimento. A uno stato vengono associate più autorità le quali possono essere associate
ad uno ed un solo stato.

6.2.2 Presenza Country-Facility

La relazione descrive la presenza di una o più Imprese all’interno dello stato di riferimento.
Come è logico pensare, per ogni stato sono presenti più Imprese, le quali vengono
associate ad uno ed un solo stato.

6.2.3 Rilevazioni Facility-Report

Descrive le rilevazioni dei report d’inquinamento fatta da un’unica impresa. Per ogni
impresa possono essere associati più report.

6.2.4 Dettaglio Report-Chemical

La relazione serve a descrivere più in dettaglio quelli che sono i report dell’azienda.


                                                                                              10
6.2.5 Associato A Report-Periodo

Descrive la relazione che intercorre tra un report e il suo periodo di rilevazione. Relazione
banale ma da tenere particolarmente d’occhio in quanto il database da creare necessita di
una classificazione storica dei dati.



6.3 Traduzione verso il modello Relazionale
Il passo successivo consiste nell' analizzare singolarmente il file XSD fornito dall’Unione
Europea per progettare in dettaglio le tabelle che costituiranno il sistema informativo
cercando di far riferimento, per quanto possibile, allo schema Entity-Relationship creato.

6.3.1 PollutantReleaseAndTransferReport

Reporting of the E-PRTR data


Attributo                 Descrizione                           Tipo di Dato                  Null

ReportingYear             The calendar year for which           ReportingYearType
                          data on releases of pollutants
                          and off-site transfers is
                          gathered.
CountryID                 The Member State reporting.           TextType

CoordinateSystemID        The coordinate system used in         TextType
                          reporting of coordinates of the
                          facilities.
RemarkText                Textual remark from MS. Will          LongTextType                  SI
                          not be published on the web-
                          site.
CompetentAuthorityParty   One or more competent                 CompetentAuthorityPartyType
                          authorities in charge to respond
                          to requests from the public.
FacilityReport            A facility report for each facility   FacilityReportType
                          reporting E-PRTR data.




                                                                                                     11
6.3.2 CompetentAuthorityParty

Describes details about the competent authority in charge to respond to requests from the
public.


Attributo                Descrizione               Tipo di Dato                         Null

Name                     The name of the           TextType
                         competent authority.
Address                  The address of the        CompetentAuthorityAddressType
                         competent authority.
TelephoneCommunication   The phone number          TelecommunicationCommunicationType

FaxCommunication         The fax number.           TelecommunicationCommunicationType

EmailCommunication       The e-mail address        EmailCommunicationType

ContactPersonName        Name of contact           TextType                             SI
                         person. If reported,
                         data will be published.




6.3.3 NationalID

The national identification of a facility.


Attributo                Descrizione               Tipo di Dato                         Null

NationalID               The national              TextType
                         Identification of a
                         facility.




                                                                                               12
6.3.4 PreviousNationalID

The previously reported national identification of a facility.


Attributo               Descrizione                                      Tipo di Dato        Null

NationalID              The previously reported national                 NationalIDType
                        identification. If the national identification
                        has not changed or the facility has not
                        previously been reported, this must
                        correspond to the current national
                        identification.
ReportingYear           The reporting year of which the previous         ReportingYearType
                        national identification was reported. If the
                        facility has not previously been reported,
                        this must correspond to the current
                        reporting year.




6.3.5 FacilityReport

Holds the reporting for a given facility


Attributo                      Descrizione                         Tipo di Dato               Null

NationalID                     The national Identification of      NationalIDType
                               the facility.
PreviousNationalID             The previously reported             PreviousNationalIDType
                               national identification of the
                               facility
ParentCompanyName              Name of the parent company,         TextType                   SI
                               i.e. the company that owns or
                               controls the company
                               operating the facility.
                               Required unless
                               confidentiality is claimed.
FacilityName                   Name of the facility (operator      TextType                   SI
                               or owner). Required unless
                               confidentiality is claimed.


                                                                                                    13
Attributo                       Descrizione                       Tipo di Dato                 Null

Address                         The address of the facility.      FacilityAddressType          SI
                                Required unless
                                confidentiality is claimed.
GeographicalCoordinate          The coordinates of the            GeographicalCoordinateType
                                location of the facility should
                                be expressed in longitude and
                                latitude coordinates giving a
                                precision of the order of at
                                least +/- 500 meters and
                                referring to the geographical
                                centre of the site of the
                                facility.
RiverBasinDistrictID            Identifies the river basin        TextType
                                district according to according
                                to Article 3(1) of Directive
                                2000/60/EC (“Water
                                Framework Directive”).
NACEMainEconomicActivityCode    Identifies the NACE code          TextType
                                according to the NACE 2
                                revision and thereby the main
                                economic activity.
MainEconomicActivityName        The main economic activity        TextType                     SI
                                corresponding to the NACE
                                code in plain text.

CompetentAuthorityPartyName     identifies the competent          TextType
                                authority in MS for public
                                requests. Must correspond to
                                the name of one of the
                                CompetentAuthorityParty
                                elements.
ProductionVolume                The total production volume       ProductionVolumeType         SI
                                related to the main activity of
                                the facility.
TotalIPPCInstallationQuantity   The total number of IPPC          nonNegativeInteger           SI
                                installations covered by the
                                facility.


                                                                                                    14
Attributo               Descrizione                        Tipo di Dato               Null

OperationHours          The number of operating            nonNegativeInteger         SI
                        hours in reporting year.
TotalEmployeeQuantity   The number of employees.           nonNegativeInteger         SI

NutsRegionID            Identifies the region that the     TextType                   SI
                        facility belongs to as defined
                        by NUTS.
WebsiteCommunication    The website address of the         WebsiteCommunicationType   SI
                        facility. Will be published
                        even if protection of voluntary
                        data is claimed.
PublicInformation       Additional information to be       LongTextType               SI
                        published on web site as-is
                        (e.g. e-mail, contact person
                        etc.). Will be published even
                        if protection of voluntary data
                        is claimed.
ConfidentialIndicator   Indicates if confidentiality for   Boolean
                        mandatory data is claimed or
                        not. True marks
                        confidentiality, false marks no
                        confidentiality.
ConfidentialCode        Identifies the reason for          TextType                   SI
                        confidentiality according to
                        Directive 2003/4/EC, Article
                        4(2). Required if
                        confidentiality is claimed for
                        mandatory data.

ProtectVoluntaryData    Indicates if voluntary data        Boolean
                        should be protected or not. In
                        this case all voluntary data of
                        the facility is considered
                        protected with a few
                        exceptions at stated in the
                        descriptions of the individual
                        elements.



                                                                                           15
Attributo                     Descrizione                        Tipo di Dato             Null

RemarkText                    Textual remark, e.g.               LongTextType             SI
                              information in changes of the
                              history of the facility,
                              elaboration on the reason for
                              confidentiality etc. Will not be
                              published even if protection
                              of voluntary data is not
                              claimed.
Activity                      The reported Annex I               ActivityType
                              activities of the facility.
PollutantRelease              The reported releases of           PollutantReleaseType     SI
                              pollutants to air/water/land
                              reported for the facility.
PollutantTransfer             The reported off-site transfer     PollutantTransferType    SI
                              of pollutants in waste-water
                              for the facility.
WasteTransfer                 The reported off-site transfer     WasteTransferType        SI
                              of pollutants in waste-water
                              for the facility.




6.3.6 Activity

A reported E-PRTR Annex I Activity for a facility.


Attributo               Descrizione                                  Tipo di Dato        Null

RankingNumeric          Consecutive ranking of the activities        positiveInteger
                        starting with 1. The activity with ranking
                        = 1 shall be the main PRTR activity.
AnnexIActivityCode      Identifies the Annex I activity according    TextType
                        to Regulation 166/2006 Annex I.




                                                                                                16
6.3.7 PollutantRelease

Describes releases of pollutant to air/water/land


Attributo               Descrizione                                          Tipo di Dato                Null

MediumCode              Identifies the environmental medium (air,            TextType
                        water, land).
PollutantCode           The address of the competent authority.              TextType

MethodBasisCode         Identifies the basis of the main method used         TextType
                        (M/C/E).
MethodUsed              Identifies the calculation and measurement           MethodUsedType              SI
                        method(s) used for determination of the total
                        quantity. Required if method basis is M or C
                        and confidentiality is not claimed.
TotalQuantity           Total quantity including accidental quantity         PollutantMassQuantityType
                        [kg/year]. Values below threshold are
                        considered voluntary and will not be published.
AccidentalQuantity      Accidental quantity [kg/year].                       PollutantMassQuantityType   SI

ConfidentialIndicator   Indicates if confidentiality is claimed or not.      Boolean
                        True marks confidentiality, false marks no
                        confidentiality.
ConfidentialCode        Identifies the reason for confidentiality            TextType                    SI
                        according to Directive 2003/4/EC, Article 4(2).
                        For releases of pollutants the legal reasons for
                        confidentiality are restricted to Article 4(2)(b),
                        (c) and transferred. Required if confidentiality
                        is claimed.
RemarkText              Textual remark, e.g. elaboration on the reason       LongTextType                SI
                        for confidentiality. Will not be published.




                                                                                                              17
6.3.8 PollutantTransfer

Describes off-site transfer of pollutant in waste-waster


Attributo               Descrizione                                    Tipo di Dato                Null

PollutantCode           Identifies the pollutant. If confidentiality   TextType
                        is claimed the pollutant group must be
                        reported instead of the individual
                        pollutant.
MethodBasisCode         Identifies the basis of the main method        TextType
                        used (M/C/E).
MethodUsed              Identifies the calculation and                 MethodUsedType              SI
                        measurement method(s) used for
                        determination of the quantity. Required
                        if method basis is M or C and
                        confidentiality is not claimed.
Quantity                Total quantity [kg/year]. Values below         PollutantMassQuantityType
                        threshold are considered voluntary and
                        will not be published.
ConfidentialIndicator   Indicates if confidentiality is claimed or     Boolean
                        not. True marks confidentiality, false
                        marks no confidentiality.
ConfidentialCode        Identifies the reason for confidentiality      TextType                    SI
                        according to Directive 2003/4/EC, Article
                        4(2). Required if confidentiality is
                        claimed.
RemarkText              Textual remark, e.g. elaboration on the        LongTextType                SI
                        reason for confidentiality. Will not be
                        published.




                                                                                                          18
6.3.9 WasteTransfer

Describes off-site transfer of waste (except in waste-waster)


Attributo               Descrizione                                  Tipo di Dato            Null

WasteTypeCode           Identifies the type of waste (non-           TextType
                        hazardous, hazardous within country
                        and hazardous outside country).
WasteTreatmentCode      Identifies the waste treatment operation     TextType                SI
                        (recovery or disposal). Required unless
                        confidentiality is claimed.
MethodBasisCode         Identifies the basis of the main method      TextType                SI
                        used (M/C/E).
Quantity                Quantity [t/year]. Required unless           WasteMassQuantityType   SI
                        confidentiality is claimed.
MethodUsed              Identifies the calculation and               MethodUsedType          SI
                        measurement method(s) used for
                        determination of the quantity. Required
                        if method basis is M or C and
                        confidentiality is not claimed.
ConfidentialIndicator   Indicates if confidentiality is claimed or   Boolean
                        not. True marks confidentiality, false
                        marks no confidentiality.
ConfidentialCode        Identifies the reason for confidentiality    TextType                SI
                        according to Directive 2003/4/EC, Article
                        4(2). Required if confidentiality is
                        claimed.
RemarkText              Textual remark, e.g. elaboration on the      LongTextType            SI
                        reason for confidentiality. Will not be
                        published.
WasteHandlerParty       Identifies the recoverer/disposer of the     WasteHandlerPartyType   SI
                        waste. Required for transfer of
                        hazardous waste outside the country
                        unless confidentiality is claimed.




                                                                                                    19
6.3.10 MethodUsed

Describes a measurement/calculation method used for determination of quantities of
pollutants and waste.


Attributo               Descrizione                                  Tipo di Dato   Null

MethodTypeCode          Identifies the type of method used           TextType
                        (CEN/ISO, ETS, etc.). Notice that the
                        method type “WEIGH” (i.e. weighing)
                        only is allowed for waste transfer.
Designation             A short designation or description of the    TextType       SI
                        method used. Required for some
                        method types as indicated in the list of
                        legal method type codes.




6.3.11 WasteHandlerParty

Recoverer/Disposer of hazardous waste transferred outside the country


Attributo               Descrizione                                  Tipo di Dato   Null

Name                    Name of recoverer/disposer. Required         TextType       SI
                        unless confidentiality is claimed for the
                        WasteTransfer element.
Address                 The address of the recoverer/disposer.       AddressType    SI
                        Required unless confidentiality is claimed
                        for the WasteTransfer
SiteAddress             The address of the actual                    AddressType    SI
                        recoverer/disposer site. Required unless
                        confidentiality is claimed for the
                        WasteTransfer element.




                                                                                           20
6.3.12 Address

The base format for addresses in PRTR.


Attributo             Descrizione                                             Tipo di Dato    Null

StreetName            The name, expressed as text, of a street in the         TextType        SI
                      address.
BuildingNumber        The building number, expressed as text, in the          TextType        SI
                      address.
CityName              The name, expressed as text, of the city, town or       TextType        SI
                      village in the address.
Attributo             Descrizione                                             Tipo di Dato    Null

PostcodeCode          The postcode, expressed as text, if the address.        ShortTextType   SI

CountryID             The unique identifier of a country in the structured    TextType        SI
                      address (Reference ISO 3166 and UN/ECE Rec 3).




6.3.13 CompetentAuthorityAddress

The address for a competent authority. The country is assumed to correspond to the
country reporting.


Attributo             Descrizione                                             Tipo di Dato    Null

StreetName            The street name.                                        TextType

BuildingNumber        The building number. If reported, data will be          TextType        SI
                      published..
CityName              The Town/village.                                       TextType

PostcodeCode          The postal code. If reported, data will be published.   ShortTextType   SI




                                                                                                     21
6.3.14 FacilityAddress

The format for addresses for facilities. The country is assumed to correspond to the
country reporting


Attributo               Descrizione                                            Tipo di Dato    Null

StreetName              The street name of the facility. Required unless       TextType        SI
                        confidentiality is claimed.
BuildingNumber          The building number of the facility                    TextType        SI

CityName                 The Town/village of the facility. Required unless     TextType        SI
                        confidentiality is claimed.
PostcodeCode            The Postal code of the facility. Required unless       ShortTextType   SI
                        confidentiality is claimed.




6.3.15 TelecommunicationCommunication

Information necessary to establish an electronic telecommunication connection for the
purpose of a telephone or facsimile exchange (Fax or Telephone).


Attributo               Descrizione                                            Tipo di Dato    Null

CompleteNumberText      The text string of characters that make up the         ShortTextType
                        complete number for this telecommunication.




6.3.16 EmailCommunication

An address for the delivery of electronic mail.


Attributo               Descrizione                                            Tipo di Dato    Null

EmailURIID              The Uniform Resource Identifier (URI) for this email   TextType
                        communication. Must contain an @




                                                                                                      22
6.3.17 WebsiteCommunication

An address for the exchange of information from and to a website over the Internet.


Attributo               Descrizione                                             Tipo di Dato    Null

WebsiteURIID            The Uniform Resource Identifier (URI) of this website   TextType
                        communication. Must start with “http://”.




6.3.18 GeographicalCoordinate

The latitude and longitude of a place, by which its relative situation on the globe is known.


Attributo               Descrizione                                             Tipo di Dato    Null

LongitudeMeasure        minInclusive value=”-180”                               float
                        maxInclusive value=”180”
LatitudeMeasure         minInclusive value=”-90”                                float
                        maxInclusive value=”90”




6.3.19 ProductionVolume
Attributo               Descrizione                            Tipo di Dato                     Null

ProductName             The product/product group              TextType

Quantity                The total volume. The unit must be     ProductionVolumeQuantityType
                        given in attribute unitCode




6.3.20 ProductionVolumeQuantity

Production volume quantity. Units must be given in unitCode attribute.


Attributo               Descrizione                                             Tipo di Dato    Null

QuantityType            The UN/ECE Recommendation 20 code identifying the       ShortTextType
                        unit for this quantity, such as “KGM” for kilograms.”



                                                                                                       23
6.3.21 PollutantMassQuantity

Pollutant mass quantity. Must be reported in kilograms with three significant digits.


Attributo               Descrizione                                             Tipo di Dato    Null

QuantityType            The UN/ECE Recommendation 20 code identifying the       ShortTextType
                        unit for this quantity, such as “KGM” for kilograms.”




6.3.22 WasteMassQuantity

A data type for quantities.


Attributo               Descrizione                                             Tipo di Dato    Null

QuantityType            The quantity of waste must be reported in tonnes        ShortTextType




6.3.23 Quantity

A data type for quantities.


Attributo               Descrizione                                             Tipo di Dato    Null

QuantityType            The UN/ECE Recommendation 20 code identifying the       ShortTextType
                        unit for this quantity, such as “KGM” for kilograms.”




                                                                                                       24
6.4 Considerazioni
A questo punto dell’analisi è necessario inserire alcune considerazioni fatte prima di
passare alla creazione effettiva delle tabelle e delle relazioni che intercorrono tra di esse.



6.4.1 Valori Null

L’introduzione dei valori Null è stata fatta per ogni attributo ogniqualvolta che, nello
schema XML, è stata incontrata la dicitura: “minOccurs=”0””. Tale dicitura indica infatti
che l’elemento di riferimento può occorrere un numero pari a zero volte.



6.4.2 Tipi di Dato

Durante l’analisi sono stati riscontrati dei tipi di dato a cui daremo un corrispettivo
significato per la creazione in SQl Server:
   • ShortTextType: oggetto di tipo stringa con lunghezza variabile da 1 a 50
   • TextType: oggetto di tipo stringa con lunghezza variabile da 1 a 255
   • LongTextType: oggetto di tipo stringa con lunghezza variabile da 1 a 100000
   • Float: numero in virgola mobile
   • Boolean: valore Vero o Falso
   • positiveInteger: valore intero maggiore di zero
   • nonNegativeInteger: valore intero maggiore o uguale a zero

Gli altri tipi di dato rilevati non sono altro che “ponti di collegamento” con le altre tabelle,
andando a formare così delle relazioni considerando rispettivamente chiave primarie e
chiavi esterne.




                                                                                                 25
6.5 Accorpamento Tabelle – Denormalizzazione
A questo punto si decide di accorpare alcune tabelle all’interno di tabelle più grandi
rinunciando così alla seconda forma normale per la quale si dovrebbero spezzare tabelle
che descrivono entità separate. Nello specifico verranno considerati i seguenti
accorpamenti:
   •   PollutantReleaseAndTransferReport
   •   CompetentAuthorityParty (Address, TelephoneCommunication, FaxCommunication,
       EmailCommunication)
   •   FacilityReport      (NationalID,    PreviousNationalID,     GeographicalCoordinate,
       WebsiteCommunication)
   •   ProductionVolume (NationalID)
   •   Activity (NationalID)
   •   PollutantRelease
   •   PollutantTransfer
   •   WasteTransfer
   •   WasteHandlerParty
   •   PollutantRelaseMethodUsed
   •   PollutantTransferMethodUsed
   •   WasteTransferMethodUsed

Si riduce così il numero di tabelle da realizzare da 23 a 12.



6.6 Scelta delle chiavi primarie
All’interno di ogni tabella vengono inserite come chiavi primarie degli ID che
rappresentano univocamente gli elementi della tabella e che serviranno a stabilire relazioni
con chiavi esterne appartenenti ad altre tabelle.
Per convenzione gli ID di ogni tabella prenderanno il nome ID[NomeTabella]. Le chiavi
esterne associate invece prenderanno il nome [NomeTabella]ID. Le chiavi primarie di ogni
tabella verranno generate automaticamente dal DBMS in modo tale che siano tutte
distinte. La generazione automatica degli ID viene imposto nelle proprietà del tipo di dato
settando: Identity = Yes, IdentityIncrement = 1, Identity Seed = 1.

                                                                                         26
6.7 Schema Finale




                    Figura 7: Schema Finale Database




                                                       27
7. Creazione Applicativo per Caricare File XML
Il Linguaggio scelto per creare l’applicativo che leggerà il file XML e che andrà a popolare il
database SQLServer precedentemente progettato è il linguaggio Java. Più nello specifico
verranno utilizzati come strumenti di supporto XmlBeans, una libreria scritta dalla Apache
che permette di manipolare il contenuto di un file XML, e MyBatis, un framework per la
persistenza che offre supporto per scrivere delle query, delle stored procedures o mapping
avanzati attraverso l’uso di SQL e semplici regole di XML.



7.1 XmlBeans
XMLBeans è una libreria scritta dalla Apache che permette di manipolare il contenuto di un
file XML fornendo una visione a oggetti dei dati e implementando tutte le funzionalità
necessarie allo sviluppatore per gestire in modo automatico le operazioni di lettura,
scrittura e validazione di un file XML. Mediante XMLBeans è possibile generare delle classi
java che permettono di leggere, scrivere o validare un file xml. Per generare le classi
occorre preparare un file xsd (in questo caso già fornito dalla UE) nel quale sono definite
tutte le regole a cui i file XML devono essere conformi.
Per generare le classi java che permettono di gestire i file XML conformi alla seguente
struttura si apre il prompt dei comandi, ci si porta nella directory nella quale è contenuto il
file xsd da leggere e viene lanciato il seguente comando:
               D:>scomp -out pratr2p0.jar PollutantReleaseAndTransferReport_2p0.xsd
Con questo comando viene creata la libreria (pratr2p0.jar) che contiene le classi java che
permettono di scrivere e leggere i file XML compatibili con l’xsd.



7.2 Creazione Oggetti-Tabelle Java
Per poter popolare il database progettato si è rivelato necessario creare per ogni tabella il
relativo oggetto Java di riferimento (il cui nome corrisponde al nome della tabella) al cui
interno sono presenti le variabili rappresentanti gli attributi di ogni singola tabella.
Infine, per ogni variabile descrivente l’attributo, sono stati associati i metodi “get” e “set”.
(Note: I metodi get e set sono stati rimossi per rendere più leggibile il documento )


                                                                                               28
7.2.1 PollutantReleaseAndTransferReport
public class TblPollutantReleaseAndTransferReport {
       private Integer iDPollutantReleaseAndTransferReport;
       private Integer reportingYear;
       private String countryID;
       private String coordinateSystemId;
       private String remarkText;
}



7.2.2 Activity
public class TblActivity {
       private Integer iDActivity;
       private String nationalID;
       private BigInteger rankingNumeric;
       private String innexActivityCode;
       private Integer facilityReportID;
}



7.2.3 CompetentAuthorityParty
public class TblCompetentAuthorityParty {
       private Integer iDCompetentAuthorityParty;
       private String name;
       private String contactPersonName;
       private String cityName;
       private String streetName;
       private String buildingNumber;
       private String postcodeCode;
       private String telephoneCommunication;
       private String faxCommunication;
       private String emailCommunication;
       private Integer pollutantReleaseAndTransferReport;
}



7.2.4 PollutantRelease
public class TblPollutantRelease {
       private Integer iDPollutantRelease;
       private String mediumCode;
       private String pollutantCode;
       private String methodBasisCode;
       private String totalQuantity;
       private String accidentalQuantity;
       private Boolean confidentialIndicator;
       private String confidentialCode;
       private String remarkText;
       private Integer facilityReportID;
}




                                                              29
7.2.5 PollutantReleaseMethodUsed
public class TblPollutantReleaseMethodUsed {
       private Integer pollutantReleaseID;
       private String methodTypeCode;
       private String designation;
}



7.2.6 PollutantTransfer
public class TblPollutantTransfer {
       private Integer iDPollutantTransfer;
       private String pollutantCode;
       private String methodBasisCode;
       private String quantity;
       private Boolean confidentialIndicator;
       private String confidentialCode;
       private String remarkText;
       private Integer facilityReportID;
}



7.2.7 PollutantTransferMethodUsed
public class TblPollutantTransferMethodUsed {
       private Integer pollutantTransferID;
       private String methodTypeCode;
       private String designation;
}



7.2.8 TblWasteTransfer
public class TblWasteTransfer {
       private Integer iDWasteTransfer;
       private String wasteTypeCode;
       private String wasteTreatmentCode;
       private String methodBasisCode;
       private String quantity;
       private Boolean confidentialIndicator;
       private String confidentialCode;
       private String remarkText;
       private Integer facilityReportID;
}



7.2.9 TblWasteTransfer
public class TblWasteTransferMethodUsed {
       private Integer wasteTransferID;
       private String methodTypeCode;
       private String designation;
}




                                                30
7.2.10 WasteHandlerParty
public class TblWasteHandlerParty {
       private Integer iDWasteHandlerParty;
       private String name;
       private String cityName;
       private String streetName;
       private String buildingNumber;
       private String postcodeCode;
       private String countryID;
       private String siteCityName;
       private String siteStreetName;
       private String siteBuildingNumber;
       private String sitePostcodeCode;
       private String siteCountryID;
       private Integer wasteTransferID;
}



7.2.11 WasteHandlerParty
public class TblFacilityReport {
       private Integer iDFacilityReport;
       private String nationalId;
       private String previousNationalId;
       private Integer previousNationalIdReportingYear;
       private String parentCompanyName;
       private String facilityName;
       private String cityName;
       private String streetName;
       private String buildingNumber;
       private String postcodeCode;
       private Float longitudeMeasure;
       private Float latitudeMeasure;
       private String riverBasinDistrictID;
       private String nACEMainEconomicActivityCode;
       private String mainEconomicActivityName;
       private String competentAuthorityPartyName;
       private BigInteger totalPPCInstallationQuantity;
       private BigInteger operationHours;
       private BigInteger totalEmployeeQuantity;
       private String nutsRegionID;
       private String websiteCommunication;
       private String publicInformation;
       private Boolean confidentialIndicator;
       private String confidentialCode;
       private Boolean protectVoluntaryData;
       private String remarkText;
       private String pollutantReleaseAndTransferReportID;
}



7.2.12 ProductionVolume
public class TblProductionVolume {
       private Integer iDProductionVolume;
       private String nationalID;
       private String productName;
       private String quantity;
       private String UnitCode;
}




                                                             31
7.3 Validazione File Xml
Per verificare se la struttura e i dati del documento xml sono coerenti con quanto
specificato nello schema di definizione, l'interfaccia creata contenente i metodi per
accedere alla lettura del file XML, PollutantReleaseAndTransferReportDocument, mette a
disposizione il metodo validate.
public void validateXML(PollutantReleaseAndTransferReportDocument pratrd)
              throws XmlException {
                     boolean isValid;
                     Collection errors = new ArrayList();
                     XmlOptions options = new XmlOptions();
                     xo.setErrorListener(errors);
                     isValid = pratrd.validate(options);
                     if (!isValid) {
                        XmlException e = new XmlException("Validation errors", null, errors);
                        throw e;
                     }
}

Per tenere traccia degli eventuali errori riscontrati in fase di validazione, si può attivare
l'opzione setErrorListener, la quale si occupa di aggiungere ad una collezione di errori un
oggetto di tipo XmlError per ogni mancata conformità del file xml rispetto a quanto
definito nello schema. All'interno dell'oggetto di tipo XmlError si può risalire facilmente ad
informazioni importanti per identificare l'errore quali:
      •    la linea del file in cui è presente l'errore
      •    il messaggio di errore
      •    l'elemento o l'attributo alla base dell'errore

Nel seguente metodo si può vedere come stampare informazioni relative agli errori nel
momento in cui si riceve un'eccezione di tipo XmlException durante la validazione.
public static void printErrors(XmlException e){
       Iterator errorsIterator = e.getErrors().iterator();
       while(errorsIterator.hasNext()){
              XmlError error = (XmlError) errorsIterator.next();
              System.err.println("Line "+ error.getLine()+": "+error.getMessage());
       }
}



Da notare che il numero di linea in cui si è verificato l'errore è disponibile solo nel caso in
cui       in   fase   di   lettura   del   file   contenente   l'errore   è   stata   attivata   l'opzione
setLoadLineNumbers.




                                                                                                       32
7.4 Mybatis

7.4.1 Connessione al Server SQL

MyBatis è un framework per la persistenza che offre supporto per scrivere delle query,
delle stored procedures o mapping avanzati attraverso l’uso di SQL e semplici regole di
XML o attraverso l’uso delle Annotations. La principale caratteristica è che grazie a MyBatis
viene eliminata la necessità di scrivere codice JDBC, di settare manualmente i parametri di
connessione al DB e inoltre anche il retrieve dei risultati risulta essere automatico. Ogni
applicazione di MyBatis gira intorno all’istanza di SqlSessionFactory. Un’istanza di questo
oggetto può essere ottenuta grazie alla classe SqlSessionFactoryBuilder, che prende in
pasto un file XML (o un’istanza della classe Configuration).
Il codice per ottenere un SqlSessionFactory attraverso un file XML è molto semplice: basta
infatti definire la risorsa che contiene il path del file, come una stringa. Opzionalmente è
possibile specificare l’environment che vorremmo che sia utilizzato.
Nel caso specifico abbiamo:


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-
config.dtd">
<configuration>
  <typeAliases>
    <package name="com.sefiant.units.projectx.bean"/>
  </typeAliases>
  <environments default="sviluppo">
    <environment id="sviluppo">
       <transactionManager type="JDBC"/>
          <dataSource type="POOLED">
             <property value="com.microsoft.sqlserver.jdbc.SQLServerDriver"name="driver"/>
             <property value="jdbc:sqlserver://localhost:1433;integratedSecurity=true;databaseName=E-PRTR;"/>
          </dataSource>
    </environment>
  </environments>
<mappers>
        <mapper resource="com/sefiant/units/projectx/prs/dao/Activity.xml" />
        <mapper resource="com/sefiant/units/projectx/prs/dao/CompetentAuthorityParty.xml" />
        <mapper resource="com/sefiant/units/projectx/prs/dao/FacilityReport.xml" />
        <mapper resource="com/sefiant/units/projectx/prs/dao/PollutantRelease.xml" />
        <mapper resource="com/sefiant/units/projectx/prs/dao/PollutantReleaseMethodUsed.xml" />
        <mapper resource="com/sefiant/units/projectx/prs/dao/PollutantTransfer.xml" />
        <mapper resource="com/sefiant/units/projectx/prs/dao/PollutantTransferMethodUsed.xml" />
        <mapper resource="com/sefiant/units/projectx/prs/dao/WasteTransfer.xml" />
        <mapper resource="com/sefiant/units/projectx/prs/dao/WasteTransferMethodUsed.xml" />
        <mapper resource="com/sefiant/units/projectx/prs/dao/WasteHandlerParty.xml" />
        <mapper resource="com/sefiant/units/projectx/prs/dao/ProductionVolume.xml" />
        <mapper resource="com/sefiant/units/projectx/prs/dao/PollutantReleaseAndTransferReport.xml" />
        </mappers>
</configuration>




                                                                                                          33
Una volta ottenuta la SqlSessionFactory, per ottenere una SqlSession basta invocare il
metodo openSession().


      SqlSession session = SqlSessionFactory.openSession(); //Per Aprire La Sessione
      session.commit(); //Per Effettuare un Commit
      session.close(); //Per Chiudere la Sessione



Una volta ottenuta la SqlSession e finita la fase di setup e sarà possibile utilizzare MyBatis
per interrogare e/o modificare il DB.



7.4.2 Mapping del DB

Vengono realizzati i mapper che ci permetteranno di inserire le informazioni nelle tabelle
del DB. Per prima cosa realizziamo i file [NomeTabella]DAO.java per ogni tabella i quali
rappresentano le interfacce contenenti i metodi che andremo a invocare. In seguito sono
stati creati i relativi file XML [NomeTabella].xml i quali contengono le query che verranno
eseguite sul database. Le query utilizzate per questo progetto sono essenzialmente due:


   1. Una INSERT che preleva i dati dagli oggetti java (riempiti tramite lettura del file
       XML) e li inserisce all’interno delle tabelle del DB.
   2. Una SELECT che salva la chiave primaria subito dopo il comando INSERT e la
       inserisce nel relativo oggetto java. Questa operazione è necessaria quando il
       contenuto della chiave primaria appena inserita viene usato per essere
       successivamente inserito come chiave esterna in un'altra tabella.




                                                                                           34
7.5 Interfaccia Grafica

7.5.1 Descrizione

Finita la progettazione riguardante la connessione al server, la lettura del file XML e
l’inserimento dei dati nel DB, ci si è occupati di creare un interfaccia grafica per
l’applicativo. L’obbiettivo dell’interfaccia grafica è principalmente quello di aumentare
l’usabilità del sistema e di creare un interfaccia User-Friendly che permetta la selezione del
file XML da inserire posto all’interno del file system.




                                   Figura 8: GUI XML Importer




L’interfaccia prevede, oltre a quelli classici windows, due bottoni: il primo apre la
visualizzazione del file system per permettere all’utente di cercare il file XML da inserire, il
secondo avvia l’import dei dati all’interno del database. Fin quando non è stato selezionato
un file Xml ovviamente non è possibile cliccare il bottone “Import”. Una volta cliccato
“Select xml..” si ottiene la seguente interfaccia per la selezione del file all’interno del file
system.




                               Figura 9: Interfaccia di selezione file
                                                                                             35
Selezionato il file il programma conferma a console il nome del file selezionato e il bottone
“Import” diventa cliccabile.




                               Figura 10: Interfaccia Precaricamento file




Cliccando su “Import” si avvia la procedura di caricamento dei dati presenti nell’XML e il
programma informa l’utente dell’avvenuto caricamento o del fallimento (in caso di errori di
forma nel file XML) della procedura.




                           Figura 11: Interfaccia Completamento Operazione




7.5.2 Codice
package com.sefiant.units.projectx.swing;

import   java.awt.BorderLayout;
import   java.awt.Cursor;
import   java.awt.Dimension;
import   java.awt.Insets;
import   java.awt.Toolkit;
import   java.awt.event.ActionEvent;
import   java.awt.event.ActionListener;
import   java.io.File;

import javax.swing.*;

import com.sefiant.units.projectx.XmlEngine;

public class XmlImporterSwing extends JPanel {
       private static final long serialVersionUID = 4026831139065829791L;
       private static final String newline = "n";
    private JButton openButton, saveButton;
    private JTextArea log;
    private JFileChooser fc;
    private File fileXml;
                                                                                             36
public XmlImporterSwing() {
       super(new BorderLayout());

        //Create the log first, because the action listeners
        //need to refer to it.
        log = new JTextArea(5,20);
        log.setMargin(new Insets(5,5,5,5));
        log.setEditable(false);
        JScrollPane logScrollPane = new JScrollPane(log);

        //Create a file chooser
        fc = new JFileChooser();

        //Add a custom file filter and disable the default
           //(Accept All) file filter.
        fc.addChoosableFileFilter(new XmlFilter());
        fc.setAcceptAllFileFilterUsed(false);

        //Create the open button. We use the image from the JLF
        //Graphics Repository (but we extracted it from the jar).
        openButton = new JButton("Select xml...", createImageIcon("images/Open16.gif"));
        openButton.addActionListener(new ActionListener() {
                      public void actionPerformed(ActionEvent e) {
                              //Handle open button action.
                    int returnVal = fc.showOpenDialog(XmlImporterSwing.this);
                    if (returnVal == JFileChooser.APPROVE_OPTION) {
                      fileXml = fc.getSelectedFile();
                         //This is where a real application would open the file.
                         log.append("File selezionato: " + fileXml.getName() + "." + newline);
                         saveButton.setEnabled(true);
                    } else {
                      log.append("Comando cancellato dall'utente." + newline);
                    }
                    log.setCaretPosition(log.getDocument().getLength());
              }
            });

        //Create the save button. We use the image from the JLF
        //Graphics Repository (but we extracted it from the jar).
        saveButton = new JButton("Import", createImageIcon("images/Save16.gif"));
        saveButton.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                //Handle save button action.
                      Thread worker = new Thread() {
                    public void run() {
                      openButton.setEnabled(false);
                      saveButton.setEnabled(false);
                      log.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
                      log.append("Importazione file in corso..." + newline);
                      try {
                             //Do the XML import
                             XmlEngine xe = new XmlEngine();
                             xe.processaFile(fileXml.getAbsolutePath());
                             log.append("File " + fileXml.getName() + " importato." + newline);
                      } catch (Exception e){
                             e.printStackTrace();
                             log.append("Errore durante l'importazione del file " +
fileXml.getName() + ": " + e.getMessage() + newline);
                      }
                      log.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                      openButton.setEnabled(true);
                      saveButton.setEnabled(true);
                    }
                };
                worker.start();
                log.setCaretPosition(log.getDocument().getLength());
                                                                                                  37
}
        }
        saveButton.setEnabled(false);

        //For layout purposes, put the buttons in a separate panel
        JPanel buttonPanel = new JPanel(); //use FlowLayout
        buttonPanel.add(openButton);
        buttonPanel.add(saveButton);

        //Add the buttons and the log to this panel.
        add(buttonPanel, BorderLayout.PAGE_START);
        add(logScrollPane, BorderLayout.CENTER);
    }

    /** Returns an ImageIcon, or null if the path was invalid. */
    protected static ImageIcon createImageIcon(String path) {
        java.net.URL imgURL = XmlImporterSwing.class.getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("Couldn't find file: " + path);
            return null;
        }
    }

    /**
     * Create the GUI and show it
     */
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("Xml importer");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Add content to the window.
        frame.add(new XmlImporterSwing());

        frame.setResizable(false);
        Toolkit tk = Toolkit.getDefaultToolkit();
        Dimension screenSize = tk.getScreenSize();
        int screenHeight = screenSize.height;
        int screenWidth = screenSize.width;
        frame.setLocation(screenWidth / 3, screenHeight / 3);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event dispatch thread:
        //creating and showing this application's GUI.
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                //Turn off metal's use of bold fonts
                UIManager.put("swing.boldMetal", Boolean.FALSE);
                createAndShowGUI();
            }
        }
    }
}




                                                                          38
8.Conclusioni
Lo sviluppo del sistema informativo commissionato è risultato di grosso interesse anche a
livello formativo. L’utilizzo di un software proprietario come SQL Server mi ha dato la
possibilità di studiare e analizzare oltre che un nuovo tool, un nuovo linguaggio di
interrogazione di database collegato con l’universalità del linguaggio XML.
L’apprendimento è stato lento inizialmente, ma i problemi richiesti sono stati affrontati e
risolti senza troppe difficoltà.
L’impiego ha occupato una trentina di ore per l’apprendimento di caratteristiche avanzate,
mentre circa 200 ore sono state dedicate all’analisi dello schema XML e della relativa
scrittura del codice Java.
Mi ritengo piuttosto soddisfatto della possibilità fornitami, poiché l’apprendimento di un
tool a me sconosciuto all’inizio del progetto, e la possibilità di apprendere quali siano i
sistemi di gestione di unità inquinanti all’interno dell’Unione Europea, mi hanno permesso
di migliorare le mie conoscenze ed arricchire il mio curriculum.
Possibili sviluppi futuri sono:
   •   Presentazione dell’applicativo al committente (il progetto realizzato è infatti al
       momento da considerarsi un prototipo).
   •   Fase di Test.
   •   Creazione di query e viste per migliorare l’usabilità del database.
   •   Creazione di una funzione che controlli il caricamento di un file XML già
       precedentemente caricato.
   •   Creazione di una funzione che verifichi l’inserimento di un file XML già
       precedentemente caricato e ne rilevi eventuali modifiche e/o errori.
   •   Trovare una procedura che modifichi il caricamento del file ad ogni aggiornamento
       dello schema XML fornito dall’Unione Europea.
   •   Creazione di documentazione necessaria relativa al database.




                                                                                        39
Bibliografia
Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone – Basi di dati - Modelli e
linguaggi di interrogazione

Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone – Basi di dati -
Architetture e linee di evoluzione

Cay Horstmann – Concetti di informatica e fondamenti di Java

Documentazione JAVA
   • http://docs.oracle.com/javase/6/docs/api/

mybatis:
  • https://code.google.com/p/mybatis/

Xmlbeans:
  • http://xmlbeans.apache.org/

Risorse online per gli sviluppatori di SQL Server:
   • http://msdn.microsoft.com/it-it/sqlserver/aa336270.aspx




Indice delle figure
Figura   1: Sony Vaio VPCEB1S1E ...................................................................................................... 3
Figura   2: Attivazione Protocollo TCP/IP SQL Server 2008/1 ....................................................... 5
Figura   3: Attivazione Protocollo TCP/IP SQL Server 2008/2 ....................................................... 6
Figura   4: Attivazione Protocollo TCP/IP SQL Server 2008/3 ....................................................... 6
Figura   5: Installazione Driver JDBC – XMLBeans - MyBatis ........................................................ 8
Figura   6: Schema Entity-Relationship ............................................................................................. 9
Figura   7: Schema Finale Database ............................................................................................... 27
Figura   8: GUI XML Importer .......................................................................................................... 35
Figura   9: Interfaccia di selezione file ............................................................................................ 35
Figura   10: Interfaccia Precaricamento file ................................................................................... 36
Figura   11: Interfaccia Completamento Operazione .................................................................... 36




                                                                                                                                      40

Weitere ähnliche Inhalte

Was ist angesagt?

Progettazione e sviluppo di un'applicazione web basata su tecnologia Share Po...
Progettazione e sviluppo di un'applicazione web basata su tecnologia Share Po...Progettazione e sviluppo di un'applicazione web basata su tecnologia Share Po...
Progettazione e sviluppo di un'applicazione web basata su tecnologia Share Po...
Alex Ronci
 
Valutazione di descrittori per il rilevamento automatico di nuclei cellulari ...
Valutazione di descrittori per il rilevamento automatico di nuclei cellulari ...Valutazione di descrittori per il rilevamento automatico di nuclei cellulari ...
Valutazione di descrittori per il rilevamento automatico di nuclei cellulari ...
paoloUser
 
Validation and analysis of mobility models
Validation and analysis of mobility modelsValidation and analysis of mobility models
Validation and analysis of mobility models
Umberto Griffo
 
Handbook Master in Finanza Avanzata 2011 2012
Handbook Master in Finanza Avanzata 2011 2012Handbook Master in Finanza Avanzata 2011 2012
Handbook Master in Finanza Avanzata 2011 2012
IPE Business School
 
Joseki : un server per interrogare risorse RDF attraverso un interfaccia Web
Joseki : un server per interrogare risorse RDF attraverso un interfaccia WebJoseki : un server per interrogare risorse RDF attraverso un interfaccia Web
Joseki : un server per interrogare risorse RDF attraverso un interfaccia Web
Cyclope86
 
Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...
Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...
Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...
maik_o
 

Was ist angesagt? (20)

Analisi Usabilità 3d Mansion
Analisi Usabilità 3d MansionAnalisi Usabilità 3d Mansion
Analisi Usabilità 3d Mansion
 
Tesi Triennale - X509 e PGP
Tesi Triennale - X509 e PGPTesi Triennale - X509 e PGP
Tesi Triennale - X509 e PGP
 
Risorse infrastrutturali area vasta di Torremaggiore
Risorse infrastrutturali area vasta di TorremaggioreRisorse infrastrutturali area vasta di Torremaggiore
Risorse infrastrutturali area vasta di Torremaggiore
 
Progettazione e sviluppo di un'applicazione web basata su tecnologia Share Po...
Progettazione e sviluppo di un'applicazione web basata su tecnologia Share Po...Progettazione e sviluppo di un'applicazione web basata su tecnologia Share Po...
Progettazione e sviluppo di un'applicazione web basata su tecnologia Share Po...
 
Rapporto cantieri IMAT
Rapporto cantieri IMATRapporto cantieri IMAT
Rapporto cantieri IMAT
 
Tesi Zorzin
Tesi ZorzinTesi Zorzin
Tesi Zorzin
 
Valutazione di descrittori per il rilevamento automatico di nuclei cellulari ...
Valutazione di descrittori per il rilevamento automatico di nuclei cellulari ...Valutazione di descrittori per il rilevamento automatico di nuclei cellulari ...
Valutazione di descrittori per il rilevamento automatico di nuclei cellulari ...
 
Piano Nazionale Scuola Digitale (risorse integrative)
Piano Nazionale Scuola Digitale (risorse integrative)Piano Nazionale Scuola Digitale (risorse integrative)
Piano Nazionale Scuola Digitale (risorse integrative)
 
Progetto per lo sviluppo di un sistema di gestione della conoscenza per il pr...
Progetto per lo sviluppo di un sistema di gestione della conoscenza per il pr...Progetto per lo sviluppo di un sistema di gestione della conoscenza per il pr...
Progetto per lo sviluppo di un sistema di gestione della conoscenza per il pr...
 
Validation and analysis of mobility models
Validation and analysis of mobility modelsValidation and analysis of mobility models
Validation and analysis of mobility models
 
Tesi peiretti
Tesi peirettiTesi peiretti
Tesi peiretti
 
Cloud Computing: Una Soluzione "Private" Basata Su Software IBM (Tesi di laur...
Cloud Computing: Una Soluzione "Private" Basata Su Software IBM (Tesi di laur...Cloud Computing: Una Soluzione "Private" Basata Su Software IBM (Tesi di laur...
Cloud Computing: Una Soluzione "Private" Basata Su Software IBM (Tesi di laur...
 
Handbook Master in Finanza Avanzata 2011 2012
Handbook Master in Finanza Avanzata 2011 2012Handbook Master in Finanza Avanzata 2011 2012
Handbook Master in Finanza Avanzata 2011 2012
 
Argo CMS - Manuale di utilizzo del software
Argo CMS - Manuale di utilizzo del softwareArgo CMS - Manuale di utilizzo del software
Argo CMS - Manuale di utilizzo del software
 
Resport linee guida ita 20 gennaio 2020
Resport linee guida ita 20 gennaio 2020Resport linee guida ita 20 gennaio 2020
Resport linee guida ita 20 gennaio 2020
 
Joseki : un server per interrogare risorse RDF attraverso un interfaccia Web
Joseki : un server per interrogare risorse RDF attraverso un interfaccia WebJoseki : un server per interrogare risorse RDF attraverso un interfaccia Web
Joseki : un server per interrogare risorse RDF attraverso un interfaccia Web
 
Borsari 2 emme abbigliamento da lavoro
Borsari 2 emme abbigliamento da lavoroBorsari 2 emme abbigliamento da lavoro
Borsari 2 emme abbigliamento da lavoro
 
Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...
Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...
Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...
 
Manuale posa cortexa
Manuale posa cortexaManuale posa cortexa
Manuale posa cortexa
 
Rapporto e gov italia 19dic2010
Rapporto e gov italia 19dic2010Rapporto e gov italia 19dic2010
Rapporto e gov italia 19dic2010
 

Andere mochten auch

Progettazione e realizzazione di una applicazione web per la gestione della p...
Progettazione e realizzazione di una applicazione web per la gestione della p...Progettazione e realizzazione di una applicazione web per la gestione della p...
Progettazione e realizzazione di una applicazione web per la gestione della p...
Erni Durdevic
 
Implementazione in Java di plugin Maven per algoritmi di addestramento per re...
Implementazione in Java di plugin Maven per algoritmi di addestramento per re...Implementazione in Java di plugin Maven per algoritmi di addestramento per re...
Implementazione in Java di plugin Maven per algoritmi di addestramento per re...
Francesco Komauli
 
Realizzazione di un' interfaccia web per la gestione dei file di log generati...
Realizzazione di un' interfaccia web per la gestione dei file di log generati...Realizzazione di un' interfaccia web per la gestione dei file di log generati...
Realizzazione di un' interfaccia web per la gestione dei file di log generati...
Marco Furlanetto
 
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
Grogdunn
 
Sviluppo di un'applicazione windows phone 7.5 per la visualizzazione di dati ...
Sviluppo di un'applicazione windows phone 7.5 per la visualizzazione di dati ...Sviluppo di un'applicazione windows phone 7.5 per la visualizzazione di dati ...
Sviluppo di un'applicazione windows phone 7.5 per la visualizzazione di dati ...
Marco Virgo
 
Progetto e sviluppo di una applicazione per la gestione di modulistica inform...
Progetto e sviluppo di una applicazione per la gestione di modulistica inform...Progetto e sviluppo di una applicazione per la gestione di modulistica inform...
Progetto e sviluppo di una applicazione per la gestione di modulistica inform...
debspo
 

Andere mochten auch (9)

Progettazione e realizzazione di una applicazione web per la gestione della p...
Progettazione e realizzazione di una applicazione web per la gestione della p...Progettazione e realizzazione di una applicazione web per la gestione della p...
Progettazione e realizzazione di una applicazione web per la gestione della p...
 
Implementazione in Java di plugin Maven per algoritmi di addestramento per re...
Implementazione in Java di plugin Maven per algoritmi di addestramento per re...Implementazione in Java di plugin Maven per algoritmi di addestramento per re...
Implementazione in Java di plugin Maven per algoritmi di addestramento per re...
 
Realizzazione di un' interfaccia web per la gestione dei file di log generati...
Realizzazione di un' interfaccia web per la gestione dei file di log generati...Realizzazione di un' interfaccia web per la gestione dei file di log generati...
Realizzazione di un' interfaccia web per la gestione dei file di log generati...
 
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
 
PROGETTAZIONE E SVILUPPO DI UN FRAMEWORK DI SUPPORTO IN AMBIENTE AZIENDALE SU...
PROGETTAZIONE E SVILUPPO DI UN FRAMEWORK DI SUPPORTO IN AMBIENTE AZIENDALE SU...PROGETTAZIONE E SVILUPPO DI UN FRAMEWORK DI SUPPORTO IN AMBIENTE AZIENDALE SU...
PROGETTAZIONE E SVILUPPO DI UN FRAMEWORK DI SUPPORTO IN AMBIENTE AZIENDALE SU...
 
Sviluppo di un'applicazione windows phone 7.5 per la visualizzazione di dati ...
Sviluppo di un'applicazione windows phone 7.5 per la visualizzazione di dati ...Sviluppo di un'applicazione windows phone 7.5 per la visualizzazione di dati ...
Sviluppo di un'applicazione windows phone 7.5 per la visualizzazione di dati ...
 
Studio e realizzazione di un sistema web per il monitoraggio delle previsioni...
Studio e realizzazione di un sistema web per il monitoraggio delle previsioni...Studio e realizzazione di un sistema web per il monitoraggio delle previsioni...
Studio e realizzazione di un sistema web per il monitoraggio delle previsioni...
 
Progetto e sviluppo di una applicazione per la gestione di modulistica inform...
Progetto e sviluppo di una applicazione per la gestione di modulistica inform...Progetto e sviluppo di una applicazione per la gestione di modulistica inform...
Progetto e sviluppo di una applicazione per la gestione di modulistica inform...
 
Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per...
Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per...Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per...
Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per...
 

Ähnlich wie Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

Il Modello Pragmatico Elementare per lo sviluppo di Sistemi Adattivi - Tesi
Il Modello Pragmatico Elementare per lo sviluppo di Sistemi Adattivi - TesiIl Modello Pragmatico Elementare per lo sviluppo di Sistemi Adattivi - Tesi
Il Modello Pragmatico Elementare per lo sviluppo di Sistemi Adattivi - Tesi
Francesco Magagnino
 
Tesi di laurea Mariela Nasi
Tesi di laurea Mariela NasiTesi di laurea Mariela Nasi
Tesi di laurea Mariela Nasi
Mariela Nasi
 
[MWT] Il web e la Pubblica Amministrazione
[MWT] Il web e la Pubblica Amministrazione[MWT] Il web e la Pubblica Amministrazione
[MWT] Il web e la Pubblica Amministrazione
Silvio D'Orazio
 
Master plan le città del golfo e le isole pontine
Master plan le città del golfo e le isole pontineMaster plan le città del golfo e le isole pontine
Master plan le città del golfo e le isole pontine
Luigi Tecno
 
Tecnologie per la traccibilità
Tecnologie per la traccibilitàTecnologie per la traccibilità
Tecnologie per la traccibilità
Lie Chen
 
Manuale rwx62
Manuale rwx62Manuale rwx62
Manuale rwx62
Rui Silva
 
La Reingegnerizzazione dei processi nel settore logistico: Un caso di studio
La Reingegnerizzazione dei processi nel settore logistico: Un caso di studioLa Reingegnerizzazione dei processi nel settore logistico: Un caso di studio
La Reingegnerizzazione dei processi nel settore logistico: Un caso di studio
Nicola Cerami
 
Sintesi non tecnica sia
Sintesi non tecnica   siaSintesi non tecnica   sia
Sintesi non tecnica sia
ridivita
 

Ähnlich wie Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml (20)

Comunicazioni Obbligatori 2010
Comunicazioni Obbligatori 2010Comunicazioni Obbligatori 2010
Comunicazioni Obbligatori 2010
 
Il Modello Pragmatico Elementare per lo sviluppo di Sistemi Adattivi - Tesi
Il Modello Pragmatico Elementare per lo sviluppo di Sistemi Adattivi - TesiIl Modello Pragmatico Elementare per lo sviluppo di Sistemi Adattivi - Tesi
Il Modello Pragmatico Elementare per lo sviluppo di Sistemi Adattivi - Tesi
 
Tesi di laurea Mariela Nasi
Tesi di laurea Mariela NasiTesi di laurea Mariela Nasi
Tesi di laurea Mariela Nasi
 
[MWT] Il web e la Pubblica Amministrazione
[MWT] Il web e la Pubblica Amministrazione[MWT] Il web e la Pubblica Amministrazione
[MWT] Il web e la Pubblica Amministrazione
 
Progetto Tecnologia Meccanica II
Progetto Tecnologia Meccanica IIProgetto Tecnologia Meccanica II
Progetto Tecnologia Meccanica II
 
Master plan le città del golfo e le isole pontine
Master plan le città del golfo e le isole pontineMaster plan le città del golfo e le isole pontine
Master plan le città del golfo e le isole pontine
 
Monitoraggio di rete con nagios
Monitoraggio di rete con nagiosMonitoraggio di rete con nagios
Monitoraggio di rete con nagios
 
Comunicazione in un progetto di educativa di strada con strumenti Web 2.0
Comunicazione in un progetto di educativa di strada con strumenti Web 2.0Comunicazione in un progetto di educativa di strada con strumenti Web 2.0
Comunicazione in un progetto di educativa di strada con strumenti Web 2.0
 
Abstract Domenico Brigante
Abstract   Domenico BriganteAbstract   Domenico Brigante
Abstract Domenico Brigante
 
Tecnologie per la traccibilità
Tecnologie per la traccibilitàTecnologie per la traccibilità
Tecnologie per la traccibilità
 
Manuale rwx62
Manuale rwx62Manuale rwx62
Manuale rwx62
 
La Reingegnerizzazione dei processi nel settore logistico: Un caso di studio
La Reingegnerizzazione dei processi nel settore logistico: Un caso di studioLa Reingegnerizzazione dei processi nel settore logistico: Un caso di studio
La Reingegnerizzazione dei processi nel settore logistico: Un caso di studio
 
Metodi e obiettivi per un uso efficace dei fondi comunitari 2014-20
Metodi e obiettivi per un uso efficace dei fondi comunitari 2014-20Metodi e obiettivi per un uso efficace dei fondi comunitari 2014-20
Metodi e obiettivi per un uso efficace dei fondi comunitari 2014-20
 
Metodi e-obiettivi-per-un-uso-efficace-dei-fondi-comunitari-2014-20
Metodi e-obiettivi-per-un-uso-efficace-dei-fondi-comunitari-2014-20Metodi e-obiettivi-per-un-uso-efficace-dei-fondi-comunitari-2014-20
Metodi e-obiettivi-per-un-uso-efficace-dei-fondi-comunitari-2014-20
 
Piano d'azione italiano per l'efficienza energetica 2014 - Approvato il 17 Lu...
Piano d'azione italiano per l'efficienza energetica 2014 - Approvato il 17 Lu...Piano d'azione italiano per l'efficienza energetica 2014 - Approvato il 17 Lu...
Piano d'azione italiano per l'efficienza energetica 2014 - Approvato il 17 Lu...
 
Sintesi non tecnica sia
Sintesi non tecnica   siaSintesi non tecnica   sia
Sintesi non tecnica sia
 
Project planning and implementation according ECSS ST-M-10
Project planning and implementation according ECSS ST-M-10 Project planning and implementation according ECSS ST-M-10
Project planning and implementation according ECSS ST-M-10
 
Sviluppo Di Portali Tramite La Tecnologia Sharepoint
Sviluppo Di Portali Tramite La Tecnologia SharepointSviluppo Di Portali Tramite La Tecnologia Sharepoint
Sviluppo Di Portali Tramite La Tecnologia Sharepoint
 
Editoria di Print On Demand: studio di usabilità dell'interfaccia del sito we...
Editoria di Print On Demand: studio di usabilità dell'interfaccia del sito we...Editoria di Print On Demand: studio di usabilità dell'interfaccia del sito we...
Editoria di Print On Demand: studio di usabilità dell'interfaccia del sito we...
 
Compas Project
Compas ProjectCompas Project
Compas Project
 

Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

  • 1. UNIVERSITÀ DEGLI STUDI DI TRIESTE FACOLTÀ DI INGEGNERIA DIPARTIMENTO DI INGEGNERIA ED ARCHITETTURA Tesi di laurea in BASI DI DATI PROGETTAZIONE ED IMPLEMENTAZIONE DI UNA BASE DI DATI PER LA GESTIONE DI EMISSIONI INQUINANTI ALIMENTATA DA FILE XML Relatore: Chiar.mo prof. Maurizio Fermeglia Laureando: Francesco Occhioni Anno accademico: 2011-2012
  • 2. A Tina e Angelo I
  • 3. Indice 1.Introduzione ............................................................................................................. 1 2.Presentazione delle Richieste ..................................................................................... 2 3.Analisi delle richieste ................................................................................................. 2 4.Strumenti necessari allo sviluppo del Progetto ............................................................. 3 4.1 Hardware ............................................................................................................ 3 4.1.1. PC NOTEBOOK SONY VAIO VPCEB1S1E ......................................................... 3 4.2 Software ............................................................................................................. 3 4.2.1 SQL Server 2008 ........................................................................................... 3 4.2.2 Microsoft Access 2010 ................................................................................... 4 4.2.3 Eclipse.......................................................................................................... 4 4.2.4 Software Java ............................................................................................... 4 5. Prima di Cominciare .................................................................................................. 5 5.1 Attivazione Protocollo TCP/IP SQL Server 2008...................................................... 5 5.2 Librerie Eclipse .................................................................................................... 7 5.2.1 Driver JDBC .................................................................................................. 7 5.2.2 XMLBeans..................................................................................................... 7 5.2.3 MyBatis ........................................................................................................ 7 5.2.4 Installazione Librerie ..................................................................................... 8 6. Studio del file XSD .................................................................................................... 9 6.1 Analisi Entità ..................................................................................................... 10 6.2 Analisi Relazioni ................................................................................................ 10 6.2.1 Presenza Country-CompetentAuthorityParty .................................................. 10 6.2.2 Presenza Country-Facility ............................................................................. 10 6.2.3 Rilevazioni Facility-Report ............................................................................ 10 6.2.4 Dettaglio Report-Chemical ........................................................................... 10 6.2.5 Associato A Report-Periodo .......................................................................... 11 6.3 Traduzione verso il modello Relazionale .............................................................. 11 6.3.1 PollutantReleaseAndTransferReport .............................................................. 11 6.3.2 CompetentAuthorityParty ............................................................................. 12 6.3.3 NationalID .................................................................................................. 12 6.3.4 PreviousNationalID ...................................................................................... 13 6.3.5 FacilityReport .............................................................................................. 13 6.3.6 Activity ....................................................................................................... 16 6.3.7 PollutantRelease.......................................................................................... 17 II
  • 4. 6.3.8 PollutantTransfer ......................................................................................... 18 6.3.9 WasteTransfer ............................................................................................. 19 6.3.10 MethodUsed.............................................................................................. 20 6.3.11 WasteHandlerParty .................................................................................... 20 6.3.12 Address .................................................................................................... 21 6.3.13 CompetentAuthorityAddress ....................................................................... 21 6.3.14 FacilityAddress .......................................................................................... 22 6.3.15 TelecommunicationCommunication ............................................................. 22 6.3.16 EmailCommunication ................................................................................. 22 6.3.17 WebsiteCommunication ............................................................................. 23 6.3.18 GeographicalCoordinate ............................................................................. 23 6.3.19 ProductionVolume ..................................................................................... 23 6.3.20 ProductionVolumeQuantity ......................................................................... 23 6.3.21 PollutantMassQuantity ............................................................................... 24 6.3.22 WasteMassQuantity ................................................................................... 24 6.3.23 Quantity ................................................................................................... 24 6.4 Considerazioni ................................................................................................... 25 6.4.1 Valori Null ................................................................................................... 25 6.4.2 Tipi di Dato ................................................................................................. 25 6.5 Accorpamento Tabelle – Denormalizzazione ........................................................ 26 6.6 Scelta delle chiavi primarie................................................................................. 26 6.7 Schema Finale................................................................................................... 27 7. Creazione Applicativo per Caricare File XML .............................................................. 28 7.1 XmlBeans .......................................................................................................... 28 7.2 Creazione Oggetti-Tabelle Java ........................................................................... 28 7.2.1 PollutantReleaseAndTransferReport .............................................................. 29 7.2.2 Activity ....................................................................................................... 29 7.2.3 CompetentAuthorityParty ............................................................................. 29 7.2.4 PollutantRelease .......................................................................................... 29 7.2.5 PollutantReleaseMethodUsed........................................................................ 30 7.2.6 PollutantTransfer ......................................................................................... 30 7.2.7 PollutantTransferMethodUsed ....................................................................... 30 7.2.8 TblWasteTransfer ......................................................................................... 30 7.2.9 TblWasteTransfer ......................................................................................... 30 7.2.10 WasteHandlerParty .................................................................................... 31 7.2.11 WasteHandlerParty .................................................................................... 31 III
  • 5. 7.2.12 ProductionVolume...................................................................................... 31 7.3 Validazione File Xml ........................................................................................... 32 7.4 Mybatis ............................................................................................................. 33 7.4.1 Connessione al Server SQL........................................................................... 33 7.4.2 Mapping del DB ........................................................................................... 34 7.5 Interfaccia Grafica ............................................................................................. 35 7.5.1 Descrizione ................................................................................................. 35 7.5.2 Codice ........................................................................................................ 36 8.Conclusioni ............................................................................................................. 39 Bibliografia................................................................................................................. 40 Indice delle figure ...................................................................................................... 40 IV
  • 6. 1.Introduzione La tesi proposta all’interno di questo documento andrà a trattare e sviluppare l’analisi e la gestione di un sistema informativo, nella fattispecie di un database volto a raccogliere dati storici riguardanti dati di inquinamento all’interno dell’unione europea e forniti da altri sistemi informativi. Tale sistema verrà sviluppato in ambiente proprietario SQL SERVER 2008 in modo da mantenere la stessa struttura e logistica del complesso sistema informativo preesistente su cui basarsi. L’obbiettivo è quello di analizzare la struttura dei sistemi database preesistenti, nonché studiare il modo in cui i database trasmettono le informazioni e le inviano al database da creare. Il passo successivo consiste nel progettare il nuovo sistema secondo le leggi date dalla normativa UE e le specifiche date dall’analisi precedentemente effettuata. Lo sviluppo verrà realizzato interamente in locale per poi eventualmente porsi l’obbiettivo di portare il sistema su macchina remota. I capitoli della tesi sono così distribuiti: • 2) e 3) presentano le specifiche richieste dal committente e la relativa analisi del progetto; • 4) descrive le strumentazioni hardware e software necessarie; • 5) propone un setup per poter procedere nel progetto; • 6) analizza e progetta la base di dati su cui operare; • 7) crea l’applicativo per alimentare la base di dati con file XML; • 8) propone migliorie e spunti futuri del lavoro creato. 1
  • 7. 2.Presentazione delle Richieste Il commissionario del progetto non ha presentato particolari richieste se non quelle di un sistema informativo funzionante e dalla struttura similare ai server forniti nei vari stati d’Europa. Il responsabile del progetto ha fornito le seguenti richieste: • Distinguere all’interno del sistema quelle che sono le Nazioni di riferimento • Avere una lista separata del gruppo di autorità competente • Considerare diversi periodi di analisi dei dati • Salvare all’interno di una datatable quelli che sono gli output forniti dai server • Avere una versione in inglese del sistema • Essere ad alto indice di usabilità Oltretutto è già stata fornita una linea guida sulla struttura da seguire per la creazione del sistema informativo. 3.Analisi delle richieste Il progetto, per la sua realizzazione, richiede uno studio approfondito di strutture dati utilizzabili principalmente su motore SQL Server o Access. Non meno importante sarà lo studio approfondito della struttura del server in quanto un errata progettazione potrebbe portare a problemi di incompatibilità non verificabile immediatamente nella fase di test del sistema. Ancor più interessante sarà riempire il database opportunamente progettato con una struttura dati fornita da altri database esterni. 2
  • 8. 4.Strumenti necessari allo sviluppo del Progetto Il progetto necessita dell’utilizzo del seguente elenco di hardware e software. Di seguito ne descriveremo le caratteristiche. 4.1 Hardware 4.1.1. PC Notebook SONY VAIO VPCEB1S1E È il portatile a disposizione del laureando, montante un processore INTEL CORE I5 DUALCORE e scheda grafica ATI MOBILITY RADEON HD 5650 con 1 GB di memoria grafica dedicata, HARD DISK da 500 GB e 4 GB di RAM DDR III. Figura 1: Sony Vaio VPCEB1S1E 4.2 Software 4.2.1 SQL Server 2008 È il DBMS che verrà utilizzato per l’intero sviluppo del progetto. 3
  • 9. 4.2.2 Microsoft Access 2010 Software appartenente alla suite MICROSOFT OFFICE 2010, sarà utile per la gestione dei dati contenuti nel database a disposizione per l’end-user. 4.2.3 Eclipse Eclipse è un ambiente di sviluppo integrato multi-linguaggio e multipiattaforma. Nello specifico verrà utilizzato per la produzione di software applicativo in linguaggio Java. La versione utilizzata è la Juno (4.2), rilasciata il 27 giugno 2012. 4.2.4 Software Java Java è un linguaggio di programmazione e una piattaforma di elaborazione sviluppati da Sun Microsystems nel 1995. Dal download del software Java si ottiene Java Runtime Environment (JRE). JRE è composto dalla Macchina virtuale Java (JVM), dalle classi core della piattaforma Java e dalle librerie Java di supporto. 4
  • 10. 5. Prima di Cominciare 5.1 Attivazione Protocollo TCP/IP SQL Server 2008 Attivando questo protocollo si ottiene il supporto al DB per le connessioni remote, la cui procedura è descritta qui sotto (valida anche per SQL Server 2005): 1. Accedere al server a livello dati sul quale è definita l'istanza del database. 2. Fare clic sul pulsante Start, scegliere Tutti i programmi, Microsoft SQL Server 2005 o Microsoft SQL Server 2008, Strumenti di configurazione, quindi fare clic su Gestione configurazione SQL Server. 3. Nel riquadro della struttura ad albero fare clic su Servizi di SQL Server 2005 o Servizi di SQL Server 2008. 4. Nel riquadro dei risultati verificare che, nella colonna Stato, appaia In esecuzione accanto al nome di ogni servizio. Se è presente Arrestato, fare clic con il pulsante destro del mouse sul nome del servizio, quindi scegliere Avvia. Figura 2: Attivazione Protocollo TCP/IP SQL Server 2008/1 5. Nel riquadro della struttura ad albero fare clic su Configurazione di rete SQL Server 2005 o Configurazione di rete SQL Server 2008 per espanderlo, quindi scegliere Protocolli per MSSQLServer/NomeIstanza. Se durante l'installazione è stata specificata l'istanza predefinita, il nome dell'istanza sarà MSSQLSERVER. 6. Nel riquadro dei risultati verificare che, nella colonna Stato, appaia Attivato accanto al nome del protocollo TCP/IP. 5
  • 11. Se appare Disattivato, fare clic con il pulsante destro del mouse su TCP/IP, quindi scegliere Attiva. Figura 3: Attivazione Protocollo TCP/IP SQL Server 2008/2 7. Nel riquadro della struttura ad albero fare clic su Configurazione SQL Native Client per espanderlo, quindi fare clic su Protocolli client. 8. Nel riquadro dei risultati verificare che, nella colonna Stato, appaia Attivato accanto al nome del protocollo TCP/IP. Se appare Disattivato, fare clic con il pulsante destro del mouse su TCP/IP, quindi scegliere Attiva. Figura 4: Attivazione Protocollo TCP/IP SQL Server 2008/3 6
  • 12. 5.2 Librerie Eclipse 5.2.1 Driver JDBC JDBC è un'interfaccia di programmazione che lavora da tramite tra codice Java e database. Più in particolare, JDBC racchiude una serie di classi che permettono l'accesso ad una base di dati mediante metodi e schemi di funzionamento che sono intuitivi e perfettamente in linea con lo stile di programmazione tipico del linguaggio di Sun. In sostanza, quindi, è possibile connettersi ad un particolare database sfruttando un apposito driver JDBC, costituito da una classe Java. Tutti i principali DBMS dispongono oramai di un driver JDBC appositamente studiato. Esiste poi un particolare driver, chiamato ponte JDBC-ODBC, che permette l'utilizzo di qualsiasi fonte di dati per la quale è disponibile un driver ODBC. Ogni DBMS dotato di un'interfaccia ODBC, ad esempio Microsoft Access, può così essere immediatamente sfruttato da Java e JSP, senza la necessità di un driver appositamente studiato per la connettività da applicazioni Java. Tra JDBC ed il ponte ODBC, quindi, Java è virtualmente dotato della possibilità di interagire con tutti i DBMS in circolazione. 5.2.2 XMLBeans XMLBeans è una libreria scritta dalla Apache che permette di manipolare il contenuto di un file XML fornendo una visione a oggetti dei dati e implementando tutte le funzionalità necessarie allo sviluppatore per gestire in modo automatico le operazioni di lettura, scrittura e validazione di un file XML. Mediante XMLBeans è possibile generare delle classi java che permettono di leggere, scrivere o validare un file xml. 5.2.3 MyBatis MyBatis è un framework per la persistenza che offre supporto per scrivere delle query, delle stored procedures o mapping avanzati attraverso l’uso di SQL e semplici regole di XML o attraverso l’uso delle Annotations. La principale caratteristica è che grazie a MyBatis viene eliminata la necessità di scrivere codice JDBC, di settare manualmente i parametri di connessione al DB e inoltre anche il retrieve dei risultati risulta essere automatico. 7
  • 13. 5.2.4 Installazione Librerie Per installare il queste librerie all’interno del progetto java si è seguito il seguente procedimento: 1. Eseguito il download delle librerie. 2. Nella cartella “lib” del progetto Java presente in Eclipse sono stati inseriti i file con estensione .jar relativi. 3. In Eclipse click col tasto destro del mouse sul progetto java, poi “BuildPath” -> “Configure BuildPath” e nella scheda “Libraries” click su “Add JARs…” e selezionato i file .jar precedentemente inseriti. Figura 5: Installazione Driver JDBC – XMLBeans - MyBatis 8
  • 14. 6. Studio del file XSD Una "XML Schema Definition" (XSD) è un esempio (instance) di schema XML scritto in linguaggio XML Schema. Una XSD definisce il tipo di un documento XML in termini di vincoli: quali elementi ed attributi possono apparire, in quale relazione reciproca, quale tipo di dati può contenere, ed altro. Può essere usata anche con un programma di validazione, al fine di accertare a quale tipo appartiene un determinato documento XML. La differenza principale fra XSD ed altri linguaggi di descrizione del contenuto XML sta nel fatto che XSD è stato sviluppato con l'intento che la determinazione della validità di un documento possa produrre una collezione di informazioni aderenti a specifici tipi di dati. In questo caso particolare il file XSD è fornito direttamente dalla UE al seguente indirizzo: http://www.eionet.europa.eu/schemas/eprtr/PollutantReleaseAndTransferReport_2p0.xsd. Si è proceduto quindi allo studio dello schema XML per poter ottenere uno schema Entity- Relationship sul quale creare il database. Lo schema che si ottiene è il seguente: Figura 6: Schema Entity-Relationship 9
  • 15. 6.1 Analisi Entità Si passa a questo punto ad analizzare in maniera esplicita e descrittiva le singole entità: • Country: descrive lo stato membro di provenienza del report. • CompetentAuthorityParty: descrive uno o più gruppi di autorità competenti incaricate di rispondere alle richieste del pubblico. • Facility: descrive nel dettaglio le imprese che riportano i dati inquinanti. • Report: descrive nel dettaglio i dati inquinanti. • Chemical: descrive il tipo di inquinamento (aria/terra/acqua) e il metodo usato per la rilevazione dei dati. • Period: descrive il periodo di rilevazione del dato (tipicamente annuale). 6.2 Analisi Relazioni Analogamente a quanto fatto con le entità, si analizzano ora le relazioni: 6.2.1 Presenza Country-CompetentAuthorityParty La relazione descrive la presenza di una o più autorità di competenza nello stato di riferimento. A uno stato vengono associate più autorità le quali possono essere associate ad uno ed un solo stato. 6.2.2 Presenza Country-Facility La relazione descrive la presenza di una o più Imprese all’interno dello stato di riferimento. Come è logico pensare, per ogni stato sono presenti più Imprese, le quali vengono associate ad uno ed un solo stato. 6.2.3 Rilevazioni Facility-Report Descrive le rilevazioni dei report d’inquinamento fatta da un’unica impresa. Per ogni impresa possono essere associati più report. 6.2.4 Dettaglio Report-Chemical La relazione serve a descrivere più in dettaglio quelli che sono i report dell’azienda. 10
  • 16. 6.2.5 Associato A Report-Periodo Descrive la relazione che intercorre tra un report e il suo periodo di rilevazione. Relazione banale ma da tenere particolarmente d’occhio in quanto il database da creare necessita di una classificazione storica dei dati. 6.3 Traduzione verso il modello Relazionale Il passo successivo consiste nell' analizzare singolarmente il file XSD fornito dall’Unione Europea per progettare in dettaglio le tabelle che costituiranno il sistema informativo cercando di far riferimento, per quanto possibile, allo schema Entity-Relationship creato. 6.3.1 PollutantReleaseAndTransferReport Reporting of the E-PRTR data Attributo Descrizione Tipo di Dato Null ReportingYear The calendar year for which ReportingYearType data on releases of pollutants and off-site transfers is gathered. CountryID The Member State reporting. TextType CoordinateSystemID The coordinate system used in TextType reporting of coordinates of the facilities. RemarkText Textual remark from MS. Will LongTextType SI not be published on the web- site. CompetentAuthorityParty One or more competent CompetentAuthorityPartyType authorities in charge to respond to requests from the public. FacilityReport A facility report for each facility FacilityReportType reporting E-PRTR data. 11
  • 17. 6.3.2 CompetentAuthorityParty Describes details about the competent authority in charge to respond to requests from the public. Attributo Descrizione Tipo di Dato Null Name The name of the TextType competent authority. Address The address of the CompetentAuthorityAddressType competent authority. TelephoneCommunication The phone number TelecommunicationCommunicationType FaxCommunication The fax number. TelecommunicationCommunicationType EmailCommunication The e-mail address EmailCommunicationType ContactPersonName Name of contact TextType SI person. If reported, data will be published. 6.3.3 NationalID The national identification of a facility. Attributo Descrizione Tipo di Dato Null NationalID The national TextType Identification of a facility. 12
  • 18. 6.3.4 PreviousNationalID The previously reported national identification of a facility. Attributo Descrizione Tipo di Dato Null NationalID The previously reported national NationalIDType identification. If the national identification has not changed or the facility has not previously been reported, this must correspond to the current national identification. ReportingYear The reporting year of which the previous ReportingYearType national identification was reported. If the facility has not previously been reported, this must correspond to the current reporting year. 6.3.5 FacilityReport Holds the reporting for a given facility Attributo Descrizione Tipo di Dato Null NationalID The national Identification of NationalIDType the facility. PreviousNationalID The previously reported PreviousNationalIDType national identification of the facility ParentCompanyName Name of the parent company, TextType SI i.e. the company that owns or controls the company operating the facility. Required unless confidentiality is claimed. FacilityName Name of the facility (operator TextType SI or owner). Required unless confidentiality is claimed. 13
  • 19. Attributo Descrizione Tipo di Dato Null Address The address of the facility. FacilityAddressType SI Required unless confidentiality is claimed. GeographicalCoordinate The coordinates of the GeographicalCoordinateType location of the facility should be expressed in longitude and latitude coordinates giving a precision of the order of at least +/- 500 meters and referring to the geographical centre of the site of the facility. RiverBasinDistrictID Identifies the river basin TextType district according to according to Article 3(1) of Directive 2000/60/EC (“Water Framework Directive”). NACEMainEconomicActivityCode Identifies the NACE code TextType according to the NACE 2 revision and thereby the main economic activity. MainEconomicActivityName The main economic activity TextType SI corresponding to the NACE code in plain text. CompetentAuthorityPartyName identifies the competent TextType authority in MS for public requests. Must correspond to the name of one of the CompetentAuthorityParty elements. ProductionVolume The total production volume ProductionVolumeType SI related to the main activity of the facility. TotalIPPCInstallationQuantity The total number of IPPC nonNegativeInteger SI installations covered by the facility. 14
  • 20. Attributo Descrizione Tipo di Dato Null OperationHours The number of operating nonNegativeInteger SI hours in reporting year. TotalEmployeeQuantity The number of employees. nonNegativeInteger SI NutsRegionID Identifies the region that the TextType SI facility belongs to as defined by NUTS. WebsiteCommunication The website address of the WebsiteCommunicationType SI facility. Will be published even if protection of voluntary data is claimed. PublicInformation Additional information to be LongTextType SI published on web site as-is (e.g. e-mail, contact person etc.). Will be published even if protection of voluntary data is claimed. ConfidentialIndicator Indicates if confidentiality for Boolean mandatory data is claimed or not. True marks confidentiality, false marks no confidentiality. ConfidentialCode Identifies the reason for TextType SI confidentiality according to Directive 2003/4/EC, Article 4(2). Required if confidentiality is claimed for mandatory data. ProtectVoluntaryData Indicates if voluntary data Boolean should be protected or not. In this case all voluntary data of the facility is considered protected with a few exceptions at stated in the descriptions of the individual elements. 15
  • 21. Attributo Descrizione Tipo di Dato Null RemarkText Textual remark, e.g. LongTextType SI information in changes of the history of the facility, elaboration on the reason for confidentiality etc. Will not be published even if protection of voluntary data is not claimed. Activity The reported Annex I ActivityType activities of the facility. PollutantRelease The reported releases of PollutantReleaseType SI pollutants to air/water/land reported for the facility. PollutantTransfer The reported off-site transfer PollutantTransferType SI of pollutants in waste-water for the facility. WasteTransfer The reported off-site transfer WasteTransferType SI of pollutants in waste-water for the facility. 6.3.6 Activity A reported E-PRTR Annex I Activity for a facility. Attributo Descrizione Tipo di Dato Null RankingNumeric Consecutive ranking of the activities positiveInteger starting with 1. The activity with ranking = 1 shall be the main PRTR activity. AnnexIActivityCode Identifies the Annex I activity according TextType to Regulation 166/2006 Annex I. 16
  • 22. 6.3.7 PollutantRelease Describes releases of pollutant to air/water/land Attributo Descrizione Tipo di Dato Null MediumCode Identifies the environmental medium (air, TextType water, land). PollutantCode The address of the competent authority. TextType MethodBasisCode Identifies the basis of the main method used TextType (M/C/E). MethodUsed Identifies the calculation and measurement MethodUsedType SI method(s) used for determination of the total quantity. Required if method basis is M or C and confidentiality is not claimed. TotalQuantity Total quantity including accidental quantity PollutantMassQuantityType [kg/year]. Values below threshold are considered voluntary and will not be published. AccidentalQuantity Accidental quantity [kg/year]. PollutantMassQuantityType SI ConfidentialIndicator Indicates if confidentiality is claimed or not. Boolean True marks confidentiality, false marks no confidentiality. ConfidentialCode Identifies the reason for confidentiality TextType SI according to Directive 2003/4/EC, Article 4(2). For releases of pollutants the legal reasons for confidentiality are restricted to Article 4(2)(b), (c) and transferred. Required if confidentiality is claimed. RemarkText Textual remark, e.g. elaboration on the reason LongTextType SI for confidentiality. Will not be published. 17
  • 23. 6.3.8 PollutantTransfer Describes off-site transfer of pollutant in waste-waster Attributo Descrizione Tipo di Dato Null PollutantCode Identifies the pollutant. If confidentiality TextType is claimed the pollutant group must be reported instead of the individual pollutant. MethodBasisCode Identifies the basis of the main method TextType used (M/C/E). MethodUsed Identifies the calculation and MethodUsedType SI measurement method(s) used for determination of the quantity. Required if method basis is M or C and confidentiality is not claimed. Quantity Total quantity [kg/year]. Values below PollutantMassQuantityType threshold are considered voluntary and will not be published. ConfidentialIndicator Indicates if confidentiality is claimed or Boolean not. True marks confidentiality, false marks no confidentiality. ConfidentialCode Identifies the reason for confidentiality TextType SI according to Directive 2003/4/EC, Article 4(2). Required if confidentiality is claimed. RemarkText Textual remark, e.g. elaboration on the LongTextType SI reason for confidentiality. Will not be published. 18
  • 24. 6.3.9 WasteTransfer Describes off-site transfer of waste (except in waste-waster) Attributo Descrizione Tipo di Dato Null WasteTypeCode Identifies the type of waste (non- TextType hazardous, hazardous within country and hazardous outside country). WasteTreatmentCode Identifies the waste treatment operation TextType SI (recovery or disposal). Required unless confidentiality is claimed. MethodBasisCode Identifies the basis of the main method TextType SI used (M/C/E). Quantity Quantity [t/year]. Required unless WasteMassQuantityType SI confidentiality is claimed. MethodUsed Identifies the calculation and MethodUsedType SI measurement method(s) used for determination of the quantity. Required if method basis is M or C and confidentiality is not claimed. ConfidentialIndicator Indicates if confidentiality is claimed or Boolean not. True marks confidentiality, false marks no confidentiality. ConfidentialCode Identifies the reason for confidentiality TextType SI according to Directive 2003/4/EC, Article 4(2). Required if confidentiality is claimed. RemarkText Textual remark, e.g. elaboration on the LongTextType SI reason for confidentiality. Will not be published. WasteHandlerParty Identifies the recoverer/disposer of the WasteHandlerPartyType SI waste. Required for transfer of hazardous waste outside the country unless confidentiality is claimed. 19
  • 25. 6.3.10 MethodUsed Describes a measurement/calculation method used for determination of quantities of pollutants and waste. Attributo Descrizione Tipo di Dato Null MethodTypeCode Identifies the type of method used TextType (CEN/ISO, ETS, etc.). Notice that the method type “WEIGH” (i.e. weighing) only is allowed for waste transfer. Designation A short designation or description of the TextType SI method used. Required for some method types as indicated in the list of legal method type codes. 6.3.11 WasteHandlerParty Recoverer/Disposer of hazardous waste transferred outside the country Attributo Descrizione Tipo di Dato Null Name Name of recoverer/disposer. Required TextType SI unless confidentiality is claimed for the WasteTransfer element. Address The address of the recoverer/disposer. AddressType SI Required unless confidentiality is claimed for the WasteTransfer SiteAddress The address of the actual AddressType SI recoverer/disposer site. Required unless confidentiality is claimed for the WasteTransfer element. 20
  • 26. 6.3.12 Address The base format for addresses in PRTR. Attributo Descrizione Tipo di Dato Null StreetName The name, expressed as text, of a street in the TextType SI address. BuildingNumber The building number, expressed as text, in the TextType SI address. CityName The name, expressed as text, of the city, town or TextType SI village in the address. Attributo Descrizione Tipo di Dato Null PostcodeCode The postcode, expressed as text, if the address. ShortTextType SI CountryID The unique identifier of a country in the structured TextType SI address (Reference ISO 3166 and UN/ECE Rec 3). 6.3.13 CompetentAuthorityAddress The address for a competent authority. The country is assumed to correspond to the country reporting. Attributo Descrizione Tipo di Dato Null StreetName The street name. TextType BuildingNumber The building number. If reported, data will be TextType SI published.. CityName The Town/village. TextType PostcodeCode The postal code. If reported, data will be published. ShortTextType SI 21
  • 27. 6.3.14 FacilityAddress The format for addresses for facilities. The country is assumed to correspond to the country reporting Attributo Descrizione Tipo di Dato Null StreetName The street name of the facility. Required unless TextType SI confidentiality is claimed. BuildingNumber The building number of the facility TextType SI CityName The Town/village of the facility. Required unless TextType SI confidentiality is claimed. PostcodeCode The Postal code of the facility. Required unless ShortTextType SI confidentiality is claimed. 6.3.15 TelecommunicationCommunication Information necessary to establish an electronic telecommunication connection for the purpose of a telephone or facsimile exchange (Fax or Telephone). Attributo Descrizione Tipo di Dato Null CompleteNumberText The text string of characters that make up the ShortTextType complete number for this telecommunication. 6.3.16 EmailCommunication An address for the delivery of electronic mail. Attributo Descrizione Tipo di Dato Null EmailURIID The Uniform Resource Identifier (URI) for this email TextType communication. Must contain an @ 22
  • 28. 6.3.17 WebsiteCommunication An address for the exchange of information from and to a website over the Internet. Attributo Descrizione Tipo di Dato Null WebsiteURIID The Uniform Resource Identifier (URI) of this website TextType communication. Must start with “http://”. 6.3.18 GeographicalCoordinate The latitude and longitude of a place, by which its relative situation on the globe is known. Attributo Descrizione Tipo di Dato Null LongitudeMeasure minInclusive value=”-180” float maxInclusive value=”180” LatitudeMeasure minInclusive value=”-90” float maxInclusive value=”90” 6.3.19 ProductionVolume Attributo Descrizione Tipo di Dato Null ProductName The product/product group TextType Quantity The total volume. The unit must be ProductionVolumeQuantityType given in attribute unitCode 6.3.20 ProductionVolumeQuantity Production volume quantity. Units must be given in unitCode attribute. Attributo Descrizione Tipo di Dato Null QuantityType The UN/ECE Recommendation 20 code identifying the ShortTextType unit for this quantity, such as “KGM” for kilograms.” 23
  • 29. 6.3.21 PollutantMassQuantity Pollutant mass quantity. Must be reported in kilograms with three significant digits. Attributo Descrizione Tipo di Dato Null QuantityType The UN/ECE Recommendation 20 code identifying the ShortTextType unit for this quantity, such as “KGM” for kilograms.” 6.3.22 WasteMassQuantity A data type for quantities. Attributo Descrizione Tipo di Dato Null QuantityType The quantity of waste must be reported in tonnes ShortTextType 6.3.23 Quantity A data type for quantities. Attributo Descrizione Tipo di Dato Null QuantityType The UN/ECE Recommendation 20 code identifying the ShortTextType unit for this quantity, such as “KGM” for kilograms.” 24
  • 30. 6.4 Considerazioni A questo punto dell’analisi è necessario inserire alcune considerazioni fatte prima di passare alla creazione effettiva delle tabelle e delle relazioni che intercorrono tra di esse. 6.4.1 Valori Null L’introduzione dei valori Null è stata fatta per ogni attributo ogniqualvolta che, nello schema XML, è stata incontrata la dicitura: “minOccurs=”0””. Tale dicitura indica infatti che l’elemento di riferimento può occorrere un numero pari a zero volte. 6.4.2 Tipi di Dato Durante l’analisi sono stati riscontrati dei tipi di dato a cui daremo un corrispettivo significato per la creazione in SQl Server: • ShortTextType: oggetto di tipo stringa con lunghezza variabile da 1 a 50 • TextType: oggetto di tipo stringa con lunghezza variabile da 1 a 255 • LongTextType: oggetto di tipo stringa con lunghezza variabile da 1 a 100000 • Float: numero in virgola mobile • Boolean: valore Vero o Falso • positiveInteger: valore intero maggiore di zero • nonNegativeInteger: valore intero maggiore o uguale a zero Gli altri tipi di dato rilevati non sono altro che “ponti di collegamento” con le altre tabelle, andando a formare così delle relazioni considerando rispettivamente chiave primarie e chiavi esterne. 25
  • 31. 6.5 Accorpamento Tabelle – Denormalizzazione A questo punto si decide di accorpare alcune tabelle all’interno di tabelle più grandi rinunciando così alla seconda forma normale per la quale si dovrebbero spezzare tabelle che descrivono entità separate. Nello specifico verranno considerati i seguenti accorpamenti: • PollutantReleaseAndTransferReport • CompetentAuthorityParty (Address, TelephoneCommunication, FaxCommunication, EmailCommunication) • FacilityReport (NationalID, PreviousNationalID, GeographicalCoordinate, WebsiteCommunication) • ProductionVolume (NationalID) • Activity (NationalID) • PollutantRelease • PollutantTransfer • WasteTransfer • WasteHandlerParty • PollutantRelaseMethodUsed • PollutantTransferMethodUsed • WasteTransferMethodUsed Si riduce così il numero di tabelle da realizzare da 23 a 12. 6.6 Scelta delle chiavi primarie All’interno di ogni tabella vengono inserite come chiavi primarie degli ID che rappresentano univocamente gli elementi della tabella e che serviranno a stabilire relazioni con chiavi esterne appartenenti ad altre tabelle. Per convenzione gli ID di ogni tabella prenderanno il nome ID[NomeTabella]. Le chiavi esterne associate invece prenderanno il nome [NomeTabella]ID. Le chiavi primarie di ogni tabella verranno generate automaticamente dal DBMS in modo tale che siano tutte distinte. La generazione automatica degli ID viene imposto nelle proprietà del tipo di dato settando: Identity = Yes, IdentityIncrement = 1, Identity Seed = 1. 26
  • 32. 6.7 Schema Finale Figura 7: Schema Finale Database 27
  • 33. 7. Creazione Applicativo per Caricare File XML Il Linguaggio scelto per creare l’applicativo che leggerà il file XML e che andrà a popolare il database SQLServer precedentemente progettato è il linguaggio Java. Più nello specifico verranno utilizzati come strumenti di supporto XmlBeans, una libreria scritta dalla Apache che permette di manipolare il contenuto di un file XML, e MyBatis, un framework per la persistenza che offre supporto per scrivere delle query, delle stored procedures o mapping avanzati attraverso l’uso di SQL e semplici regole di XML. 7.1 XmlBeans XMLBeans è una libreria scritta dalla Apache che permette di manipolare il contenuto di un file XML fornendo una visione a oggetti dei dati e implementando tutte le funzionalità necessarie allo sviluppatore per gestire in modo automatico le operazioni di lettura, scrittura e validazione di un file XML. Mediante XMLBeans è possibile generare delle classi java che permettono di leggere, scrivere o validare un file xml. Per generare le classi occorre preparare un file xsd (in questo caso già fornito dalla UE) nel quale sono definite tutte le regole a cui i file XML devono essere conformi. Per generare le classi java che permettono di gestire i file XML conformi alla seguente struttura si apre il prompt dei comandi, ci si porta nella directory nella quale è contenuto il file xsd da leggere e viene lanciato il seguente comando: D:>scomp -out pratr2p0.jar PollutantReleaseAndTransferReport_2p0.xsd Con questo comando viene creata la libreria (pratr2p0.jar) che contiene le classi java che permettono di scrivere e leggere i file XML compatibili con l’xsd. 7.2 Creazione Oggetti-Tabelle Java Per poter popolare il database progettato si è rivelato necessario creare per ogni tabella il relativo oggetto Java di riferimento (il cui nome corrisponde al nome della tabella) al cui interno sono presenti le variabili rappresentanti gli attributi di ogni singola tabella. Infine, per ogni variabile descrivente l’attributo, sono stati associati i metodi “get” e “set”. (Note: I metodi get e set sono stati rimossi per rendere più leggibile il documento ) 28
  • 34. 7.2.1 PollutantReleaseAndTransferReport public class TblPollutantReleaseAndTransferReport { private Integer iDPollutantReleaseAndTransferReport; private Integer reportingYear; private String countryID; private String coordinateSystemId; private String remarkText; } 7.2.2 Activity public class TblActivity { private Integer iDActivity; private String nationalID; private BigInteger rankingNumeric; private String innexActivityCode; private Integer facilityReportID; } 7.2.3 CompetentAuthorityParty public class TblCompetentAuthorityParty { private Integer iDCompetentAuthorityParty; private String name; private String contactPersonName; private String cityName; private String streetName; private String buildingNumber; private String postcodeCode; private String telephoneCommunication; private String faxCommunication; private String emailCommunication; private Integer pollutantReleaseAndTransferReport; } 7.2.4 PollutantRelease public class TblPollutantRelease { private Integer iDPollutantRelease; private String mediumCode; private String pollutantCode; private String methodBasisCode; private String totalQuantity; private String accidentalQuantity; private Boolean confidentialIndicator; private String confidentialCode; private String remarkText; private Integer facilityReportID; } 29
  • 35. 7.2.5 PollutantReleaseMethodUsed public class TblPollutantReleaseMethodUsed { private Integer pollutantReleaseID; private String methodTypeCode; private String designation; } 7.2.6 PollutantTransfer public class TblPollutantTransfer { private Integer iDPollutantTransfer; private String pollutantCode; private String methodBasisCode; private String quantity; private Boolean confidentialIndicator; private String confidentialCode; private String remarkText; private Integer facilityReportID; } 7.2.7 PollutantTransferMethodUsed public class TblPollutantTransferMethodUsed { private Integer pollutantTransferID; private String methodTypeCode; private String designation; } 7.2.8 TblWasteTransfer public class TblWasteTransfer { private Integer iDWasteTransfer; private String wasteTypeCode; private String wasteTreatmentCode; private String methodBasisCode; private String quantity; private Boolean confidentialIndicator; private String confidentialCode; private String remarkText; private Integer facilityReportID; } 7.2.9 TblWasteTransfer public class TblWasteTransferMethodUsed { private Integer wasteTransferID; private String methodTypeCode; private String designation; } 30
  • 36. 7.2.10 WasteHandlerParty public class TblWasteHandlerParty { private Integer iDWasteHandlerParty; private String name; private String cityName; private String streetName; private String buildingNumber; private String postcodeCode; private String countryID; private String siteCityName; private String siteStreetName; private String siteBuildingNumber; private String sitePostcodeCode; private String siteCountryID; private Integer wasteTransferID; } 7.2.11 WasteHandlerParty public class TblFacilityReport { private Integer iDFacilityReport; private String nationalId; private String previousNationalId; private Integer previousNationalIdReportingYear; private String parentCompanyName; private String facilityName; private String cityName; private String streetName; private String buildingNumber; private String postcodeCode; private Float longitudeMeasure; private Float latitudeMeasure; private String riverBasinDistrictID; private String nACEMainEconomicActivityCode; private String mainEconomicActivityName; private String competentAuthorityPartyName; private BigInteger totalPPCInstallationQuantity; private BigInteger operationHours; private BigInteger totalEmployeeQuantity; private String nutsRegionID; private String websiteCommunication; private String publicInformation; private Boolean confidentialIndicator; private String confidentialCode; private Boolean protectVoluntaryData; private String remarkText; private String pollutantReleaseAndTransferReportID; } 7.2.12 ProductionVolume public class TblProductionVolume { private Integer iDProductionVolume; private String nationalID; private String productName; private String quantity; private String UnitCode; } 31
  • 37. 7.3 Validazione File Xml Per verificare se la struttura e i dati del documento xml sono coerenti con quanto specificato nello schema di definizione, l'interfaccia creata contenente i metodi per accedere alla lettura del file XML, PollutantReleaseAndTransferReportDocument, mette a disposizione il metodo validate. public void validateXML(PollutantReleaseAndTransferReportDocument pratrd) throws XmlException { boolean isValid; Collection errors = new ArrayList(); XmlOptions options = new XmlOptions(); xo.setErrorListener(errors); isValid = pratrd.validate(options); if (!isValid) { XmlException e = new XmlException("Validation errors", null, errors); throw e; } } Per tenere traccia degli eventuali errori riscontrati in fase di validazione, si può attivare l'opzione setErrorListener, la quale si occupa di aggiungere ad una collezione di errori un oggetto di tipo XmlError per ogni mancata conformità del file xml rispetto a quanto definito nello schema. All'interno dell'oggetto di tipo XmlError si può risalire facilmente ad informazioni importanti per identificare l'errore quali: • la linea del file in cui è presente l'errore • il messaggio di errore • l'elemento o l'attributo alla base dell'errore Nel seguente metodo si può vedere come stampare informazioni relative agli errori nel momento in cui si riceve un'eccezione di tipo XmlException durante la validazione. public static void printErrors(XmlException e){ Iterator errorsIterator = e.getErrors().iterator(); while(errorsIterator.hasNext()){ XmlError error = (XmlError) errorsIterator.next(); System.err.println("Line "+ error.getLine()+": "+error.getMessage()); } } Da notare che il numero di linea in cui si è verificato l'errore è disponibile solo nel caso in cui in fase di lettura del file contenente l'errore è stata attivata l'opzione setLoadLineNumbers. 32
  • 38. 7.4 Mybatis 7.4.1 Connessione al Server SQL MyBatis è un framework per la persistenza che offre supporto per scrivere delle query, delle stored procedures o mapping avanzati attraverso l’uso di SQL e semplici regole di XML o attraverso l’uso delle Annotations. La principale caratteristica è che grazie a MyBatis viene eliminata la necessità di scrivere codice JDBC, di settare manualmente i parametri di connessione al DB e inoltre anche il retrieve dei risultati risulta essere automatico. Ogni applicazione di MyBatis gira intorno all’istanza di SqlSessionFactory. Un’istanza di questo oggetto può essere ottenuta grazie alla classe SqlSessionFactoryBuilder, che prende in pasto un file XML (o un’istanza della classe Configuration). Il codice per ottenere un SqlSessionFactory attraverso un file XML è molto semplice: basta infatti definire la risorsa che contiene il path del file, come una stringa. Opzionalmente è possibile specificare l’environment che vorremmo che sia utilizzato. Nel caso specifico abbiamo: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3- config.dtd"> <configuration> <typeAliases> <package name="com.sefiant.units.projectx.bean"/> </typeAliases> <environments default="sviluppo"> <environment id="sviluppo"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property value="com.microsoft.sqlserver.jdbc.SQLServerDriver"name="driver"/> <property value="jdbc:sqlserver://localhost:1433;integratedSecurity=true;databaseName=E-PRTR;"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/sefiant/units/projectx/prs/dao/Activity.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/CompetentAuthorityParty.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/FacilityReport.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/PollutantRelease.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/PollutantReleaseMethodUsed.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/PollutantTransfer.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/PollutantTransferMethodUsed.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/WasteTransfer.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/WasteTransferMethodUsed.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/WasteHandlerParty.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/ProductionVolume.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/PollutantReleaseAndTransferReport.xml" /> </mappers> </configuration> 33
  • 39. Una volta ottenuta la SqlSessionFactory, per ottenere una SqlSession basta invocare il metodo openSession(). SqlSession session = SqlSessionFactory.openSession(); //Per Aprire La Sessione session.commit(); //Per Effettuare un Commit session.close(); //Per Chiudere la Sessione Una volta ottenuta la SqlSession e finita la fase di setup e sarà possibile utilizzare MyBatis per interrogare e/o modificare il DB. 7.4.2 Mapping del DB Vengono realizzati i mapper che ci permetteranno di inserire le informazioni nelle tabelle del DB. Per prima cosa realizziamo i file [NomeTabella]DAO.java per ogni tabella i quali rappresentano le interfacce contenenti i metodi che andremo a invocare. In seguito sono stati creati i relativi file XML [NomeTabella].xml i quali contengono le query che verranno eseguite sul database. Le query utilizzate per questo progetto sono essenzialmente due: 1. Una INSERT che preleva i dati dagli oggetti java (riempiti tramite lettura del file XML) e li inserisce all’interno delle tabelle del DB. 2. Una SELECT che salva la chiave primaria subito dopo il comando INSERT e la inserisce nel relativo oggetto java. Questa operazione è necessaria quando il contenuto della chiave primaria appena inserita viene usato per essere successivamente inserito come chiave esterna in un'altra tabella. 34
  • 40. 7.5 Interfaccia Grafica 7.5.1 Descrizione Finita la progettazione riguardante la connessione al server, la lettura del file XML e l’inserimento dei dati nel DB, ci si è occupati di creare un interfaccia grafica per l’applicativo. L’obbiettivo dell’interfaccia grafica è principalmente quello di aumentare l’usabilità del sistema e di creare un interfaccia User-Friendly che permetta la selezione del file XML da inserire posto all’interno del file system. Figura 8: GUI XML Importer L’interfaccia prevede, oltre a quelli classici windows, due bottoni: il primo apre la visualizzazione del file system per permettere all’utente di cercare il file XML da inserire, il secondo avvia l’import dei dati all’interno del database. Fin quando non è stato selezionato un file Xml ovviamente non è possibile cliccare il bottone “Import”. Una volta cliccato “Select xml..” si ottiene la seguente interfaccia per la selezione del file all’interno del file system. Figura 9: Interfaccia di selezione file 35
  • 41. Selezionato il file il programma conferma a console il nome del file selezionato e il bottone “Import” diventa cliccabile. Figura 10: Interfaccia Precaricamento file Cliccando su “Import” si avvia la procedura di caricamento dei dati presenti nell’XML e il programma informa l’utente dell’avvenuto caricamento o del fallimento (in caso di errori di forma nel file XML) della procedura. Figura 11: Interfaccia Completamento Operazione 7.5.2 Codice package com.sefiant.units.projectx.swing; import java.awt.BorderLayout; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Insets; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import javax.swing.*; import com.sefiant.units.projectx.XmlEngine; public class XmlImporterSwing extends JPanel { private static final long serialVersionUID = 4026831139065829791L; private static final String newline = "n"; private JButton openButton, saveButton; private JTextArea log; private JFileChooser fc; private File fileXml; 36
  • 42. public XmlImporterSwing() { super(new BorderLayout()); //Create the log first, because the action listeners //need to refer to it. log = new JTextArea(5,20); log.setMargin(new Insets(5,5,5,5)); log.setEditable(false); JScrollPane logScrollPane = new JScrollPane(log); //Create a file chooser fc = new JFileChooser(); //Add a custom file filter and disable the default //(Accept All) file filter. fc.addChoosableFileFilter(new XmlFilter()); fc.setAcceptAllFileFilterUsed(false); //Create the open button. We use the image from the JLF //Graphics Repository (but we extracted it from the jar). openButton = new JButton("Select xml...", createImageIcon("images/Open16.gif")); openButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //Handle open button action. int returnVal = fc.showOpenDialog(XmlImporterSwing.this); if (returnVal == JFileChooser.APPROVE_OPTION) { fileXml = fc.getSelectedFile(); //This is where a real application would open the file. log.append("File selezionato: " + fileXml.getName() + "." + newline); saveButton.setEnabled(true); } else { log.append("Comando cancellato dall'utente." + newline); } log.setCaretPosition(log.getDocument().getLength()); } }); //Create the save button. We use the image from the JLF //Graphics Repository (but we extracted it from the jar). saveButton = new JButton("Import", createImageIcon("images/Save16.gif")); saveButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //Handle save button action. Thread worker = new Thread() { public void run() { openButton.setEnabled(false); saveButton.setEnabled(false); log.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); log.append("Importazione file in corso..." + newline); try { //Do the XML import XmlEngine xe = new XmlEngine(); xe.processaFile(fileXml.getAbsolutePath()); log.append("File " + fileXml.getName() + " importato." + newline); } catch (Exception e){ e.printStackTrace(); log.append("Errore durante l'importazione del file " + fileXml.getName() + ": " + e.getMessage() + newline); } log.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); openButton.setEnabled(true); saveButton.setEnabled(true); } }; worker.start(); log.setCaretPosition(log.getDocument().getLength()); 37
  • 43. } } saveButton.setEnabled(false); //For layout purposes, put the buttons in a separate panel JPanel buttonPanel = new JPanel(); //use FlowLayout buttonPanel.add(openButton); buttonPanel.add(saveButton); //Add the buttons and the log to this panel. add(buttonPanel, BorderLayout.PAGE_START); add(logScrollPane, BorderLayout.CENTER); } /** Returns an ImageIcon, or null if the path was invalid. */ protected static ImageIcon createImageIcon(String path) { java.net.URL imgURL = XmlImporterSwing.class.getResource(path); if (imgURL != null) { return new ImageIcon(imgURL); } else { System.err.println("Couldn't find file: " + path); return null; } } /** * Create the GUI and show it */ private static void createAndShowGUI() { //Create and set up the window. JFrame frame = new JFrame("Xml importer"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Add content to the window. frame.add(new XmlImporterSwing()); frame.setResizable(false); Toolkit tk = Toolkit.getDefaultToolkit(); Dimension screenSize = tk.getScreenSize(); int screenHeight = screenSize.height; int screenWidth = screenSize.width; frame.setLocation(screenWidth / 3, screenHeight / 3); //Display the window. frame.pack(); frame.setVisible(true); } public static void main(String[] args) { //Schedule a job for the event dispatch thread: //creating and showing this application's GUI. SwingUtilities.invokeLater(new Runnable() { public void run() { //Turn off metal's use of bold fonts UIManager.put("swing.boldMetal", Boolean.FALSE); createAndShowGUI(); } } } } 38
  • 44. 8.Conclusioni Lo sviluppo del sistema informativo commissionato è risultato di grosso interesse anche a livello formativo. L’utilizzo di un software proprietario come SQL Server mi ha dato la possibilità di studiare e analizzare oltre che un nuovo tool, un nuovo linguaggio di interrogazione di database collegato con l’universalità del linguaggio XML. L’apprendimento è stato lento inizialmente, ma i problemi richiesti sono stati affrontati e risolti senza troppe difficoltà. L’impiego ha occupato una trentina di ore per l’apprendimento di caratteristiche avanzate, mentre circa 200 ore sono state dedicate all’analisi dello schema XML e della relativa scrittura del codice Java. Mi ritengo piuttosto soddisfatto della possibilità fornitami, poiché l’apprendimento di un tool a me sconosciuto all’inizio del progetto, e la possibilità di apprendere quali siano i sistemi di gestione di unità inquinanti all’interno dell’Unione Europea, mi hanno permesso di migliorare le mie conoscenze ed arricchire il mio curriculum. Possibili sviluppi futuri sono: • Presentazione dell’applicativo al committente (il progetto realizzato è infatti al momento da considerarsi un prototipo). • Fase di Test. • Creazione di query e viste per migliorare l’usabilità del database. • Creazione di una funzione che controlli il caricamento di un file XML già precedentemente caricato. • Creazione di una funzione che verifichi l’inserimento di un file XML già precedentemente caricato e ne rilevi eventuali modifiche e/o errori. • Trovare una procedura che modifichi il caricamento del file ad ogni aggiornamento dello schema XML fornito dall’Unione Europea. • Creazione di documentazione necessaria relativa al database. 39
  • 45. Bibliografia Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone – Basi di dati - Modelli e linguaggi di interrogazione Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone – Basi di dati - Architetture e linee di evoluzione Cay Horstmann – Concetti di informatica e fondamenti di Java Documentazione JAVA • http://docs.oracle.com/javase/6/docs/api/ mybatis: • https://code.google.com/p/mybatis/ Xmlbeans: • http://xmlbeans.apache.org/ Risorse online per gli sviluppatori di SQL Server: • http://msdn.microsoft.com/it-it/sqlserver/aa336270.aspx Indice delle figure Figura 1: Sony Vaio VPCEB1S1E ...................................................................................................... 3 Figura 2: Attivazione Protocollo TCP/IP SQL Server 2008/1 ....................................................... 5 Figura 3: Attivazione Protocollo TCP/IP SQL Server 2008/2 ....................................................... 6 Figura 4: Attivazione Protocollo TCP/IP SQL Server 2008/3 ....................................................... 6 Figura 5: Installazione Driver JDBC – XMLBeans - MyBatis ........................................................ 8 Figura 6: Schema Entity-Relationship ............................................................................................. 9 Figura 7: Schema Finale Database ............................................................................................... 27 Figura 8: GUI XML Importer .......................................................................................................... 35 Figura 9: Interfaccia di selezione file ............................................................................................ 35 Figura 10: Interfaccia Precaricamento file ................................................................................... 36 Figura 11: Interfaccia Completamento Operazione .................................................................... 36 40