SlideShare a Scribd company logo
1 of 30
Download to read offline
Sviluppare su OpenOffice.org con Java

               Marcello Teodori
         marcello.teodori@jugmilano.it
           Java User Group Milano
AGENDA


 introduzione
 OpenOffice.org, la suite di programmi per l'ufficio libera con supporto al formato
  OpenDocument, standard OASIS ed ora anche ISO
 OpenOffice.org come piattaforma di sviluppo e l'OpenOffice.org SDK
 Le modalità per programmare su OpenOffice.org in Java
 Il nuovo modulo OpenOffice.org Base come frontend JDBC
Informazioni sullo speaker
Ingegnere Informatico, appassionato di Java, open source, metodologie e
programmazione in generale, lavora dal 1997 nello sviluppo software,
principalmente in ambito applicazioni distribuite, web e mobile internet.

Dal 2004 collabora all'organizzazione delle attività del Java User Group Milano.

Partecipa alla community open source principalmente contribuendo con
localizzazioni in italiano di applicazioni esistenti e documentazione.



         Laddove possibile cerca in tutti i modi di utilizzare il suo Mac,
                          tranne oggi ad esempio...
Informazioni sul Java User Group Milano


 nasce il 18 Dicembre 2002 su iniziativa di Filippo Diotalevi
 mailing list su Yahoo! Groups con oltre 200 iscritti
 meeting con cadenza mensile con presentazioni a cura degli iscritti
 eventi speciali
 partecipazione del tutto gratuita e libera
 il nostro sito web: http://www.jugmilano.it/
 facciamo parte della Top 50 dei JUG mondiali
 cerchiamo sempre nuovi collaboratori!
Sveglia!



Torino 7 Luglio
Cagliari   16 Settembre
Milano     28 Settembre
Pisa       14 Ottobre
Novara     18 Novembre
Palermo    24 Novembre
Roma       2 Dicembre


                      http://www.javaday.it
Cos'è OpenOffice.org?
OpenOffice.org nasce sotto il nome di StarOffice come suite commerciale di
applicazioni per l'ufficio a basso costo e multi-platform alternativa a Microsoft
Office, prodotto dalla ditta tedesca StarDivision.

Nel 1999 la ditta e con essa il prodotto vengono acquisiti da Sun, la quale
successivamente “libera” i sorgenti sotto licenza GPL/LGPL nel progetto
OpenOffice.org, pur mantenendo una propria versione commerciale a bassa
costo con il precedente nome StarOffice, supportata direttamente da Sun stessa
e sottoposta ad un ulteriore controllo di qualità interno.

La versione 2.0 (ottobre 2005) vede una revisione totale della suite e
dell'interfaccia utente, ma soprattutto il supporto ai formati OpenDocument,
evoluzione dei precedenti formati utilizzati dalla suite, basati su XML e
compressione ZIP, sottoposti e quindi ratificati come standard documentale
dall'organizzazione OASIS (maggio 2005) e poi come standard ISO (maggio
2006).

Per ulteriori dettagli: http://it.wikipedia.org/wiki/OpenOffice.org
Il formato OpenDocument
 riferimenti allo standard
  http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=office
 anatomia di un documento in formato OpenDocument

      file.od*
      |-- content.xml (contenuto del file)
      |-- meta.xml (metadata, cioè proprietà)
      |-- settings.xml (metadata, cioè proprietà)
      |-- styles.xml (stili del documento)
      |-- META-INF
      |    -- manifest.xml (indice contenuto del file)
      |-- mimetype
      |-- Object N (eventuali oggetti inclusi, replicano la struttura)
      |-- Pictures (directory immagini incluse)
      |-- Thumbnails (directory miniature)
      |-- Scripts (directory macro e form)
      ...
Architettura di OpenOffice.org
Com'è fatto OpenOffice.org? La documentazione ufficiale va subito in dettaglio sui
vari moduli che compongono l'applicazione, ma manca una visione d'insieme.

Questo è uno dei pochi diagrammi disponibili, con riferimento a StarOffice, sono
riconoscibili alcuni moduli e la suddivisione per layer, ma UNO è l'elemento
principale...
Cos'è UNO?
UNO (Universal Network Objects) è il component model di OpenOffice.org, o
meglio di URE (Universal Runtime Environment), la piattaforma su cui eseguono
le applicazioni di OpenOffice.org.
Caratteristiche di un component UNO
Le specifiche di interface e service vengono definite in IDL (Interface Definition
Language), in modo analogo a quanto avviene in CORBA, del quale UNO
condivide la filosofia di fondo, rappresentandone una versione “non distribuita”
(anche se con il listen mode...).
I component possono essere sviluppati:
 in C++, come la maggior parte di OpenOffice.org

 in Java, come parte dell'applicazione Base, gli wizard ed i filtri XML

 in Python

Oltre ai linguaggi su indicati, il runtime UNO rende disponibile l'accesso esterno ai
component via API in:
 OpenOffice.org Basic

 DotNet Framework

 OLE
Come accedo ad un component UNO?
In modo analogo a quanto farei con altri component model, ad es. EJB, CORBA,
COM.

Vediamo i passi in dettaglio:
 Inizializzo un ComponentContext
 Ne prendo il relativo ServiceManager (analogo ad un naming service)
 Chiedo un reference ad un service al ServiceManager associato ad un certo
  nome
 Ottengo un handle all'interface che mi serve, purché implementata dal
  component effettivo, chiedendolo al runtime UNO tramite l'operazione di
  queryInterface (analogo del narrowing)
 Uso - finalmente - il component a partire da questo handle
Quali component UNO posso sviluppare?


 componenti custom, dei quali definisco l'interfaccia come interface e service
 implementazioni custom di service già definiti
  Esempio: la libreria VCL (Visual Component Library) in NeoOffice, un port di
  OpenOffice.org per Mac OS X, è implementata su Java invece di X11 in modo
  da non richiedere l'avvio di un server X11 che su tale Unix è opzionale
 implementazioni aggiuntive di service “enumerabili”
  Esempio: i tipi di documento supportati in lettura e scrittura dalle applicazioni in
  OpenOffice.org corrispondono a livello di UNO ai diversi component disponibili
  che implementino service che includano le interface XImportFilter ed
  XExportFilter
Quali strumenti?
 OpenOffice.org 2.0.2 oppure URE standalone
  http://download.openoffice.org/2.0.2/index.html
 OpenOffice.org 2.0.2 SDK
  http://download.openoffice.org/2.0.2/sdk.htm
  contiene l'ottima Developer's Guide, i cui esempi sono in maggior parte in
  Java, più gli strumenti command-line per interagire con i file IDL (solo
  windows/linux/solaris, ma esistono build non ufficiali per altre piattaforme...)
 IDE plugin per NetBeans
  http://www.openoffice.org/editorial/ffairmicheal.html
  Un progetto della Google Summer Of Code 2005, offre un editor UNOIDL ed
  un nuovo tipo di progetto per component Java, ma è incompleto e non è stato
  più portato avanti.
 IDE plugin per Eclipse
  Sempre dalla SOC 2005, attualmente è la scelta migliore, in quanto è un
  progetto attivo e molto ben documentato, portato avanti da uno sviluppatore di
  una società che sviluppa soluzioni open su OpenOffice.org e ZOPE, Nuxeo.
Modalità per programmare su OpenOffice.org in Java


 Lavorare direttamente sul formato OpenDocument
 Includere OpenOffice.org in una GUI esterna tramite OfficeBean
 Scripting Framework
 Sviluppo di UNO Component in Java
 Connessione remota ad OpenOffice.org in listen mode
Lavorare direttamente sul formato OpenDocument
 il formato OpenDocument è un archivio in formato ZIP
  => utilizzo le API java.util.zip per accedere
 l'alberatura del contenuto permette di identificare facilmente il testo
  contenuto del file, metadata, script, form e risorse utilizzate
 i formati dei file contenuti sono quelli nativi delle risorse oppure XML
 PRO: pure Java, più facilmente “controllabile” in contesti enterprise
 CONTRO: difficoltà a gestire in modo applicativo documenti XML
  complessi o a crearne ex-novo, più adatta per piccole modifiche a file
  esistenti da usare come modello di documento


Esempio: generazione di report tramite sostituzione di placeholder in un
modello, come in eLawOffice http://www.elawoffice.it
Modalità per programmare su OpenOffice.org in Java


 Lavorare direttamente sul formato OpenDocument
 Includere OpenOffice.org in una GUI esterna tramite OfficeBean
 Scripting Framework
 Sviluppo di UNO Component in Java
 Connessione remota ad OpenOffice.org in listen mode
OfficeBean
 implementato in Java AWT e codice nativo via JNI, non disponibile su Mac
 IDE plugin per aprire documenti in NetBeans:
  http://blogs.sun.com/roller/page/chuk?entry=second_try_netbeans_module_for
Modalità per programmare su OpenOffice.org in Java


 Lavorare direttamente sul formato OpenDocument
 Includere OpenOffice.org in una GUI esterna tramite OfficeBean
 Scripting Framework
 Sviluppo di UNO Component in Java
 Connessione remota ad OpenOffice.org in listen mode
Scripting Framework – linguaggi disponibili
Con la versione 2.0 di OpenOffice.org è possibile utilizzare linguaggi alternativi
per le Macro oltre al Basic.

Le Macro vengono gestite dallo ScriptingFramework, che supporta tutti i linguaggi
corrispondenti ad implementazioni dell'interface XscriptProvider. Al momento
quelle disponibili sono:
 JavaScript, sviluppato in Java su Mozilla Rhino
 BeanShell
 Python, sviluppato in C con collegamento al bridge PyUNO
 Java
Scripting Framework – funzionalità macro
Per interagire con il resto del sistema, le Macro hanno accesso tramite un context
apposito, lo XScriptContext, a:
 Desktop, il frame corrispondente ad OpenOffice.org
 Document, il frame che contiene il documento
 ComponentContext, il punto di accesso verso altri UNO component

Ciò corrisponde:
 variabile XSCRIPTCONTEXT in BeanShell, Python e JavaScript
 parametro di tipo XScriptContext per i metodi configurati come macro nel file
  parcel-descriptor.xml in Java
Scripting Framework – modalità di distribuzione


 nella directory $OOO_HOME/share/Scripts/<language_name>
 nella directory $OOO_USER/user/Scripts/<language_name>
 all'interno dell'archivio di un documento OpenDocument:
  <file.ext>/<language_name>
 in un pacchetto uno-package
Modalità per programmare su OpenOffice.org in Java


 Lavorare direttamente sul formato OpenDocument
 Includere OpenOffice.org in una GUI esterna tramite OfficeBean
 Scripting Framework
 Sviluppo di UNO Component in Java
 Connessione remota ad OpenOffice.org in listen mode
Ciclo di sviluppo di UNO Component in Java
Tramite i tool dell'SDK a partire dal file IDL, contenente definizione
di interfacce e service per il mio component, ottengo gli stub java
che posso implementare e impacchettare.

    Specification   .idl      idlc               regmerge

                                         .urd                  types.rdb


                               .class           javamaker



   Implementation     .java

                                        Java tools          .jar   Library
Modalità per programmare su OpenOffice.org in Java


 Lavorare direttamente sul formato OpenDocument
 Includere OpenOffice.org in una GUI esterna tramite OfficeBean
 Scripting Framework
 Sviluppo di UNO Component in Java
 Connessione remota ad OpenOffice.org in listen mode
OpenOffice.org come server
Si può possibile accedere ad UNO component anche da remoto, purché
OpenOffice.org, o meglio il runtime URE sottostante, siano avviati in listen mode.

    Per il client cambia leggermente la procedura per accedere ad un
    component, vediamo i passi:
 creo un LocalComponentContext
 il suo ServiceManager ha un numero limitato di component disponibili, fra
  questi uso UnoResolver sul quale imposto la connection string UNO
 da UnoResolver ottengo un reference al ComponentContext remoto del server
 procedo come se fossi in locale, a meno che non sia interessato allo stato della
  connessione...

Esempi: JOOReports/JOOConverter http://jooreports.sourceforge.net/
libreria Java con webapp per generare report e convertire documenti in PDF
UNO Connection URL
Per il server può essere impostata:
 da command line:
  soffice.[bin|exe] -accept=<uno-connection-url>
 nel file di configurazione:
  $OOO_HOME/share/registry/data/org/openoffice/Setup.xcu




 dove identifico l'URL con lo scheme uno (I), imposto un tipo connessione fra
 socket e pipe, indicando rispettivamente host e port di ascolto o name del pipe
 (II), metto come protocol urp, unico supportato oltre ad iiop attualmente in beta
 (III), infine come ObjectName metto il nome del root object da pubblicare, ad
 esempio StarOffice.ServiceManager
OpenOffice.org Base
Applicazione analoga a Microsoft Access, permette di creare database personali
tramite wizard, di creare form di inserimento dati e di generare report.
Due modalità di funzionamento:
 il database è incluso nel documento e implementato su HSQLDB
 frontend per accedere a database esterni, tramite diverse modalità come
  SDBC, ODBC, adhoc (ad es. per la rubrica indirizzi di Outlook e Thunderbird),
  ma soprattutto JDBC (purché i driver siano disponibili nel classpath del runtime
  Java utilizzato, impostabile anche nelle preferenze di OpenOffice.org)

Contiene un editor visuale di relazioni fra tabelle che lo può rendere uno
strumento di progettazione database adatto a casi non particolarmente complessi.
Anatomia di un documento OpenDocument Base
Nel caso contenga un database HSQLDB...
file.odb                             #HSQL database
|-- database                         #Sun Jun 25 15:31:51 CEST 2006
|   |-- backup                       hsqldb.script_format=0
                                     runtime.gc_interval=0
|   |-- database                     sql.enforce_strict_size=true
|   |-- log                          hsqldb.cache_size_scale=8
|   |-- properties                   readonly=false
|    -- script                       hsqldb.nio_data_file=false
                                     hsqldb.cache_scale=13
|-- META-INF                         version=1.8.0
|    -- manifest.xml                 hsqldb.default_table_type=cached
|-- mimetype                         hsqldb.cache_file_scale=1
                                     hsqldb.log_size=10
...                                  modified=yes
                                     hsqldb.cache_version=1.7.0
                                     hsqldb.original_version=1.8.0
                                     hsqldb.compatible_version=1.8.0
  posso estrarre i file nella directory database, rinominarli aggiungendo
come prefisso “<nome_database>.” ed ho un normale database HSQLDB!
Conclusioni
 Cosa è possibile fare? Spazio all'immaginazione...
 Per elaborazioni su server semplici meglio lavorare direttamente sul formato
  OpenDocument tramite java.util.zip e XML Parser
 Per elaborazioni su server complesse, si utilizza il server mode, con particolare
  attenzione allo stato del server e della connessione
 Per sviluppare applicazioni desktop semplici, aggiungere script ai documenti
 Per sviluppare applicazioni desktop complesse o anche creare un'applicazione
  nuova nella suite o una custom su URE, utilizzare i component
 Il supporto degli IDE deve ancora migliorare e di molto, specie se si vuole stare
  al passo con la concorrenza ;)
 La documentazione è in evoluzione, specie la separazione fra cosa è solo in
  URE e cosa in OpenOffice.org
 Domande e (possibilmente) Risposte
Riferimenti
 Area Developer di OpenOffice.org
  http://developer.openoffice.org
 Documentazione UNO Development Kit
  http://udk.openoffice.org
 OpenOffice.org development wiki
  http://wiki.services.openoffice.org/wiki/Main_Page
 Tutorial sullo sviluppo di un component di OpenOffice.org in Java su Eclipse
  http://wiki.services.openoffice.org/wiki/JavaEclipseTuto
 SVGImportFilter, con utility per sviluppare Java component sfruttando Java 5
  http://www.ipd.uni-karlsruhe.de/~hauma/svg-import/

Domande e (possibilmente) Risposte
Grazie per l'attenzione!

More Related Content

Similar to Sviluppare su OpenOffice.org con Java

Sviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinSviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarin
Fabio Cozzolino
 
Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net
Leonardo Alario
 
Confronto fra web services framework (open source)
Confronto fra web services framework (open source)Confronto fra web services framework (open source)
Confronto fra web services framework (open source)
Alberto Lagna
 

Similar to Sviluppare su OpenOffice.org con Java (20)

Focus Group Open Source 11.02.2011 Andrea Pescetti
Focus Group Open Source 11.02.2011 Andrea PescettiFocus Group Open Source 11.02.2011 Andrea Pescetti
Focus Group Open Source 11.02.2011 Andrea Pescetti
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)
 
Sviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinSviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarin
 
OpenOffice.org - Come rendersi indipendenti da MS Office
OpenOffice.org - Come rendersi indipendenti da MS OfficeOpenOffice.org - Come rendersi indipendenti da MS Office
OpenOffice.org - Come rendersi indipendenti da MS Office
 
Java sul tuo Mac
Java sul tuo MacJava sul tuo Mac
Java sul tuo Mac
 
Framework di supporto allo sviluppo di applicazioni Web
Framework di supporto allo sviluppo di applicazioni WebFramework di supporto allo sviluppo di applicazioni Web
Framework di supporto allo sviluppo di applicazioni Web
 
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un framework
 
EXELEARNING COME EDITOR DI CONTENUTI PER MOODLE
EXELEARNING COME EDITOR DI CONTENUTI PER MOODLEEXELEARNING COME EDITOR DI CONTENUTI PER MOODLE
EXELEARNING COME EDITOR DI CONTENUTI PER MOODLE
 
S354 php-5.x-e-my sql-5.x
S354 php-5.x-e-my sql-5.xS354 php-5.x-e-my sql-5.x
S354 php-5.x-e-my sql-5.x
 
LibreOffice e la sua community italiana LibreItalia
LibreOffice e la sua community italiana LibreItaliaLibreOffice e la sua community italiana LibreItalia
LibreOffice e la sua community italiana LibreItalia
 
Rich Internet Application
Rich Internet ApplicationRich Internet Application
Rich Internet Application
 
Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net
 
Software Libero e LibreOffice
Software Libero e LibreOfficeSoftware Libero e LibreOffice
Software Libero e LibreOffice
 
Confronto fra web services framework (open source)
Confronto fra web services framework (open source)Confronto fra web services framework (open source)
Confronto fra web services framework (open source)
 
Introduzione alla localizzazione visuale con SDL Passolo
Introduzione alla localizzazione visuale con SDL PassoloIntroduzione alla localizzazione visuale con SDL Passolo
Introduzione alla localizzazione visuale con SDL Passolo
 
RIA: Rich Internet Applications. Interfacce utente avanzate per applicazioni ...
RIA: Rich Internet Applications. Interfacce utente avanzate per applicazioni ...RIA: Rich Internet Applications. Interfacce utente avanzate per applicazioni ...
RIA: Rich Internet Applications. Interfacce utente avanzate per applicazioni ...
 
Installazione del cms alfresco
Installazione del cms alfrescoInstallazione del cms alfresco
Installazione del cms alfresco
 
Presentazione della suite da lavoro LibreOffice
Presentazione della suite da lavoro LibreOfficePresentazione della suite da lavoro LibreOffice
Presentazione della suite da lavoro LibreOffice
 
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platformAngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
 
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessi
 

More from Marcello Teodori

More from Marcello Teodori (12)

Anatomy of an APS 2 appication
Anatomy of an APS 2 appicationAnatomy of an APS 2 appication
Anatomy of an APS 2 appication
 
Refactoring to a SPA
Refactoring to a SPARefactoring to a SPA
Refactoring to a SPA
 
JavaScript Power Tools 2015
JavaScript Power Tools 2015JavaScript Power Tools 2015
JavaScript Power Tools 2015
 
Wicket from Designer to Developer
Wicket from Designer to DeveloperWicket from Designer to Developer
Wicket from Designer to Developer
 
Software Factory in a Box
Software Factory in a BoxSoftware Factory in a Box
Software Factory in a Box
 
Groovy & Grails
Groovy & GrailsGroovy & Grails
Groovy & Grails
 
m2eclipse: integrazione maven2 in eclipse IDE
m2eclipse: integrazione maven2 in eclipse IDEm2eclipse: integrazione maven2 in eclipse IDE
m2eclipse: integrazione maven2 in eclipse IDE
 
JBoss Seam, un framework per Java EE 5
JBoss Seam, un framework per Java EE 5JBoss Seam, un framework per Java EE 5
JBoss Seam, un framework per Java EE 5
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa Struts
 
Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con Spring
 
Streaming in Java e Flex con Red5
Streaming in Java e Flex con Red5Streaming in Java e Flex con Red5
Streaming in Java e Flex con Red5
 
Spring e Flex
Spring e FlexSpring e Flex
Spring e Flex
 

Sviluppare su OpenOffice.org con Java

  • 1. Sviluppare su OpenOffice.org con Java Marcello Teodori marcello.teodori@jugmilano.it Java User Group Milano
  • 2. AGENDA  introduzione  OpenOffice.org, la suite di programmi per l'ufficio libera con supporto al formato OpenDocument, standard OASIS ed ora anche ISO  OpenOffice.org come piattaforma di sviluppo e l'OpenOffice.org SDK  Le modalità per programmare su OpenOffice.org in Java  Il nuovo modulo OpenOffice.org Base come frontend JDBC
  • 3. Informazioni sullo speaker Ingegnere Informatico, appassionato di Java, open source, metodologie e programmazione in generale, lavora dal 1997 nello sviluppo software, principalmente in ambito applicazioni distribuite, web e mobile internet. Dal 2004 collabora all'organizzazione delle attività del Java User Group Milano. Partecipa alla community open source principalmente contribuendo con localizzazioni in italiano di applicazioni esistenti e documentazione. Laddove possibile cerca in tutti i modi di utilizzare il suo Mac, tranne oggi ad esempio...
  • 4. Informazioni sul Java User Group Milano  nasce il 18 Dicembre 2002 su iniziativa di Filippo Diotalevi  mailing list su Yahoo! Groups con oltre 200 iscritti  meeting con cadenza mensile con presentazioni a cura degli iscritti  eventi speciali  partecipazione del tutto gratuita e libera  il nostro sito web: http://www.jugmilano.it/  facciamo parte della Top 50 dei JUG mondiali  cerchiamo sempre nuovi collaboratori!
  • 5. Sveglia! Torino 7 Luglio Cagliari 16 Settembre Milano 28 Settembre Pisa 14 Ottobre Novara 18 Novembre Palermo 24 Novembre Roma 2 Dicembre http://www.javaday.it
  • 6. Cos'è OpenOffice.org? OpenOffice.org nasce sotto il nome di StarOffice come suite commerciale di applicazioni per l'ufficio a basso costo e multi-platform alternativa a Microsoft Office, prodotto dalla ditta tedesca StarDivision. Nel 1999 la ditta e con essa il prodotto vengono acquisiti da Sun, la quale successivamente “libera” i sorgenti sotto licenza GPL/LGPL nel progetto OpenOffice.org, pur mantenendo una propria versione commerciale a bassa costo con il precedente nome StarOffice, supportata direttamente da Sun stessa e sottoposta ad un ulteriore controllo di qualità interno. La versione 2.0 (ottobre 2005) vede una revisione totale della suite e dell'interfaccia utente, ma soprattutto il supporto ai formati OpenDocument, evoluzione dei precedenti formati utilizzati dalla suite, basati su XML e compressione ZIP, sottoposti e quindi ratificati come standard documentale dall'organizzazione OASIS (maggio 2005) e poi come standard ISO (maggio 2006). Per ulteriori dettagli: http://it.wikipedia.org/wiki/OpenOffice.org
  • 7. Il formato OpenDocument  riferimenti allo standard http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=office  anatomia di un documento in formato OpenDocument file.od* |-- content.xml (contenuto del file) |-- meta.xml (metadata, cioè proprietà) |-- settings.xml (metadata, cioè proprietà) |-- styles.xml (stili del documento) |-- META-INF | -- manifest.xml (indice contenuto del file) |-- mimetype |-- Object N (eventuali oggetti inclusi, replicano la struttura) |-- Pictures (directory immagini incluse) |-- Thumbnails (directory miniature) |-- Scripts (directory macro e form) ...
  • 8. Architettura di OpenOffice.org Com'è fatto OpenOffice.org? La documentazione ufficiale va subito in dettaglio sui vari moduli che compongono l'applicazione, ma manca una visione d'insieme. Questo è uno dei pochi diagrammi disponibili, con riferimento a StarOffice, sono riconoscibili alcuni moduli e la suddivisione per layer, ma UNO è l'elemento principale...
  • 9. Cos'è UNO? UNO (Universal Network Objects) è il component model di OpenOffice.org, o meglio di URE (Universal Runtime Environment), la piattaforma su cui eseguono le applicazioni di OpenOffice.org.
  • 10. Caratteristiche di un component UNO Le specifiche di interface e service vengono definite in IDL (Interface Definition Language), in modo analogo a quanto avviene in CORBA, del quale UNO condivide la filosofia di fondo, rappresentandone una versione “non distribuita” (anche se con il listen mode...). I component possono essere sviluppati:  in C++, come la maggior parte di OpenOffice.org  in Java, come parte dell'applicazione Base, gli wizard ed i filtri XML  in Python Oltre ai linguaggi su indicati, il runtime UNO rende disponibile l'accesso esterno ai component via API in:  OpenOffice.org Basic  DotNet Framework  OLE
  • 11. Come accedo ad un component UNO? In modo analogo a quanto farei con altri component model, ad es. EJB, CORBA, COM. Vediamo i passi in dettaglio:  Inizializzo un ComponentContext  Ne prendo il relativo ServiceManager (analogo ad un naming service)  Chiedo un reference ad un service al ServiceManager associato ad un certo nome  Ottengo un handle all'interface che mi serve, purché implementata dal component effettivo, chiedendolo al runtime UNO tramite l'operazione di queryInterface (analogo del narrowing)  Uso - finalmente - il component a partire da questo handle
  • 12. Quali component UNO posso sviluppare?  componenti custom, dei quali definisco l'interfaccia come interface e service  implementazioni custom di service già definiti Esempio: la libreria VCL (Visual Component Library) in NeoOffice, un port di OpenOffice.org per Mac OS X, è implementata su Java invece di X11 in modo da non richiedere l'avvio di un server X11 che su tale Unix è opzionale  implementazioni aggiuntive di service “enumerabili” Esempio: i tipi di documento supportati in lettura e scrittura dalle applicazioni in OpenOffice.org corrispondono a livello di UNO ai diversi component disponibili che implementino service che includano le interface XImportFilter ed XExportFilter
  • 13. Quali strumenti?  OpenOffice.org 2.0.2 oppure URE standalone http://download.openoffice.org/2.0.2/index.html  OpenOffice.org 2.0.2 SDK http://download.openoffice.org/2.0.2/sdk.htm contiene l'ottima Developer's Guide, i cui esempi sono in maggior parte in Java, più gli strumenti command-line per interagire con i file IDL (solo windows/linux/solaris, ma esistono build non ufficiali per altre piattaforme...)  IDE plugin per NetBeans http://www.openoffice.org/editorial/ffairmicheal.html Un progetto della Google Summer Of Code 2005, offre un editor UNOIDL ed un nuovo tipo di progetto per component Java, ma è incompleto e non è stato più portato avanti.  IDE plugin per Eclipse Sempre dalla SOC 2005, attualmente è la scelta migliore, in quanto è un progetto attivo e molto ben documentato, portato avanti da uno sviluppatore di una società che sviluppa soluzioni open su OpenOffice.org e ZOPE, Nuxeo.
  • 14. Modalità per programmare su OpenOffice.org in Java  Lavorare direttamente sul formato OpenDocument  Includere OpenOffice.org in una GUI esterna tramite OfficeBean  Scripting Framework  Sviluppo di UNO Component in Java  Connessione remota ad OpenOffice.org in listen mode
  • 15. Lavorare direttamente sul formato OpenDocument  il formato OpenDocument è un archivio in formato ZIP => utilizzo le API java.util.zip per accedere  l'alberatura del contenuto permette di identificare facilmente il testo contenuto del file, metadata, script, form e risorse utilizzate  i formati dei file contenuti sono quelli nativi delle risorse oppure XML  PRO: pure Java, più facilmente “controllabile” in contesti enterprise  CONTRO: difficoltà a gestire in modo applicativo documenti XML complessi o a crearne ex-novo, più adatta per piccole modifiche a file esistenti da usare come modello di documento Esempio: generazione di report tramite sostituzione di placeholder in un modello, come in eLawOffice http://www.elawoffice.it
  • 16. Modalità per programmare su OpenOffice.org in Java  Lavorare direttamente sul formato OpenDocument  Includere OpenOffice.org in una GUI esterna tramite OfficeBean  Scripting Framework  Sviluppo di UNO Component in Java  Connessione remota ad OpenOffice.org in listen mode
  • 17. OfficeBean  implementato in Java AWT e codice nativo via JNI, non disponibile su Mac  IDE plugin per aprire documenti in NetBeans: http://blogs.sun.com/roller/page/chuk?entry=second_try_netbeans_module_for
  • 18. Modalità per programmare su OpenOffice.org in Java  Lavorare direttamente sul formato OpenDocument  Includere OpenOffice.org in una GUI esterna tramite OfficeBean  Scripting Framework  Sviluppo di UNO Component in Java  Connessione remota ad OpenOffice.org in listen mode
  • 19. Scripting Framework – linguaggi disponibili Con la versione 2.0 di OpenOffice.org è possibile utilizzare linguaggi alternativi per le Macro oltre al Basic. Le Macro vengono gestite dallo ScriptingFramework, che supporta tutti i linguaggi corrispondenti ad implementazioni dell'interface XscriptProvider. Al momento quelle disponibili sono:  JavaScript, sviluppato in Java su Mozilla Rhino  BeanShell  Python, sviluppato in C con collegamento al bridge PyUNO  Java
  • 20. Scripting Framework – funzionalità macro Per interagire con il resto del sistema, le Macro hanno accesso tramite un context apposito, lo XScriptContext, a:  Desktop, il frame corrispondente ad OpenOffice.org  Document, il frame che contiene il documento  ComponentContext, il punto di accesso verso altri UNO component Ciò corrisponde:  variabile XSCRIPTCONTEXT in BeanShell, Python e JavaScript  parametro di tipo XScriptContext per i metodi configurati come macro nel file parcel-descriptor.xml in Java
  • 21. Scripting Framework – modalità di distribuzione  nella directory $OOO_HOME/share/Scripts/<language_name>  nella directory $OOO_USER/user/Scripts/<language_name>  all'interno dell'archivio di un documento OpenDocument: <file.ext>/<language_name>  in un pacchetto uno-package
  • 22. Modalità per programmare su OpenOffice.org in Java  Lavorare direttamente sul formato OpenDocument  Includere OpenOffice.org in una GUI esterna tramite OfficeBean  Scripting Framework  Sviluppo di UNO Component in Java  Connessione remota ad OpenOffice.org in listen mode
  • 23. Ciclo di sviluppo di UNO Component in Java Tramite i tool dell'SDK a partire dal file IDL, contenente definizione di interfacce e service per il mio component, ottengo gli stub java che posso implementare e impacchettare. Specification .idl idlc regmerge .urd types.rdb .class javamaker Implementation .java Java tools .jar Library
  • 24. Modalità per programmare su OpenOffice.org in Java  Lavorare direttamente sul formato OpenDocument  Includere OpenOffice.org in una GUI esterna tramite OfficeBean  Scripting Framework  Sviluppo di UNO Component in Java  Connessione remota ad OpenOffice.org in listen mode
  • 25. OpenOffice.org come server Si può possibile accedere ad UNO component anche da remoto, purché OpenOffice.org, o meglio il runtime URE sottostante, siano avviati in listen mode. Per il client cambia leggermente la procedura per accedere ad un component, vediamo i passi:  creo un LocalComponentContext  il suo ServiceManager ha un numero limitato di component disponibili, fra questi uso UnoResolver sul quale imposto la connection string UNO  da UnoResolver ottengo un reference al ComponentContext remoto del server  procedo come se fossi in locale, a meno che non sia interessato allo stato della connessione... Esempi: JOOReports/JOOConverter http://jooreports.sourceforge.net/ libreria Java con webapp per generare report e convertire documenti in PDF
  • 26. UNO Connection URL Per il server può essere impostata:  da command line: soffice.[bin|exe] -accept=<uno-connection-url>  nel file di configurazione: $OOO_HOME/share/registry/data/org/openoffice/Setup.xcu dove identifico l'URL con lo scheme uno (I), imposto un tipo connessione fra socket e pipe, indicando rispettivamente host e port di ascolto o name del pipe (II), metto come protocol urp, unico supportato oltre ad iiop attualmente in beta (III), infine come ObjectName metto il nome del root object da pubblicare, ad esempio StarOffice.ServiceManager
  • 27. OpenOffice.org Base Applicazione analoga a Microsoft Access, permette di creare database personali tramite wizard, di creare form di inserimento dati e di generare report. Due modalità di funzionamento:  il database è incluso nel documento e implementato su HSQLDB  frontend per accedere a database esterni, tramite diverse modalità come SDBC, ODBC, adhoc (ad es. per la rubrica indirizzi di Outlook e Thunderbird), ma soprattutto JDBC (purché i driver siano disponibili nel classpath del runtime Java utilizzato, impostabile anche nelle preferenze di OpenOffice.org) Contiene un editor visuale di relazioni fra tabelle che lo può rendere uno strumento di progettazione database adatto a casi non particolarmente complessi.
  • 28. Anatomia di un documento OpenDocument Base Nel caso contenga un database HSQLDB... file.odb #HSQL database |-- database #Sun Jun 25 15:31:51 CEST 2006 | |-- backup hsqldb.script_format=0 runtime.gc_interval=0 | |-- database sql.enforce_strict_size=true | |-- log hsqldb.cache_size_scale=8 | |-- properties readonly=false | -- script hsqldb.nio_data_file=false hsqldb.cache_scale=13 |-- META-INF version=1.8.0 | -- manifest.xml hsqldb.default_table_type=cached |-- mimetype hsqldb.cache_file_scale=1 hsqldb.log_size=10 ... modified=yes hsqldb.cache_version=1.7.0 hsqldb.original_version=1.8.0 hsqldb.compatible_version=1.8.0 posso estrarre i file nella directory database, rinominarli aggiungendo come prefisso “<nome_database>.” ed ho un normale database HSQLDB!
  • 29. Conclusioni  Cosa è possibile fare? Spazio all'immaginazione...  Per elaborazioni su server semplici meglio lavorare direttamente sul formato OpenDocument tramite java.util.zip e XML Parser  Per elaborazioni su server complesse, si utilizza il server mode, con particolare attenzione allo stato del server e della connessione  Per sviluppare applicazioni desktop semplici, aggiungere script ai documenti  Per sviluppare applicazioni desktop complesse o anche creare un'applicazione nuova nella suite o una custom su URE, utilizzare i component  Il supporto degli IDE deve ancora migliorare e di molto, specie se si vuole stare al passo con la concorrenza ;)  La documentazione è in evoluzione, specie la separazione fra cosa è solo in URE e cosa in OpenOffice.org  Domande e (possibilmente) Risposte
  • 30. Riferimenti  Area Developer di OpenOffice.org http://developer.openoffice.org  Documentazione UNO Development Kit http://udk.openoffice.org  OpenOffice.org development wiki http://wiki.services.openoffice.org/wiki/Main_Page  Tutorial sullo sviluppo di un component di OpenOffice.org in Java su Eclipse http://wiki.services.openoffice.org/wiki/JavaEclipseTuto  SVGImportFilter, con utility per sviluppare Java component sfruttando Java 5 http://www.ipd.uni-karlsruhe.de/~hauma/svg-import/ Domande e (possibilmente) Risposte Grazie per l'attenzione!