Sviluppare su OpenOffice.org con Java

30
Sviluppare su OpenOffice.org con Java Marcello Teodori [email protected] Java User Group Milano

description

OpenOffice.org non è solo la principale suite di applicazioni per l'ufficio completamente libera e basata su open standard (OpenDocument è standard ISO), ma può trasformarsi in una potente piattaforma per applicazioni document-based programmabile via Java. In questa presentazione esploreremo le potenzialità del connubio fra OpenOffice.org e Java tramite alcuni esempi applicativi. In particolare vedremo la possibilità di eseguire script nei linguaggi basati su JVM come BeanShell e Jython, l'esecuzione remota da applicazioni Java esterne di funzioni di OpenOffice.org lanciato in modalità server, e i diversi punti di aggancio per estendere le funzionalità della suite dall'interno tramite componenti Java custom. Vedremo infine la nuova applicazione Base presente in OpenOffice.org 2.0 per l'accesso a sorgenti dati JDBC.

Transcript of Sviluppare su OpenOffice.org con Java

Page 1: Sviluppare su OpenOffice.org con Java

Sviluppare su OpenOffice.org con Java

Marcello [email protected]

Java User Group Milano

Page 2: Sviluppare su OpenOffice.org con Java

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

Page 3: Sviluppare su OpenOffice.org con Java

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...

Page 4: Sviluppare su OpenOffice.org con Java

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!

Page 5: Sviluppare su OpenOffice.org con Java

Sveglia!

Torino 7 LuglioCagliari 16 SettembreMilano 28 SettembrePisa 14 OttobreNovara 18 NovembrePalermo 24 NovembreRoma 2 Dicembre

http://www.javaday.it

Page 6: Sviluppare su OpenOffice.org con Java

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

Page 7: Sviluppare su OpenOffice.org con Java

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)...

Page 8: Sviluppare su OpenOffice.org con Java

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...

Page 9: Sviluppare su OpenOffice.org con Java

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.

Page 10: Sviluppare su OpenOffice.org con Java

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

Page 11: Sviluppare su OpenOffice.org con Java

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

Page 12: Sviluppare su OpenOffice.org con Java

Quali component UNO posso sviluppare?

componenti custom, dei quali definisco l'interfaccia come interface e service

implementazioni custom di service già definitiEsempio: 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

Page 13: Sviluppare su OpenOffice.org con Java

Quali strumenti? OpenOffice.org 2.0.2 oppure URE standalone

http://download.openoffice.org/2.0.2/index.html

OpenOffice.org 2.0.2 SDKhttp://download.openoffice.org/2.0.2/sdk.htmcontiene 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 NetBeanshttp://www.openoffice.org/editorial/ffairmicheal.htmlUn 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 EclipseSempre 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.

Page 14: Sviluppare su OpenOffice.org con Java

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

Page 15: Sviluppare su OpenOffice.org con Java

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

Page 16: Sviluppare su OpenOffice.org con Java

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

Page 17: Sviluppare su OpenOffice.org con Java

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

Page 18: Sviluppare su OpenOffice.org con Java

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

Page 19: Sviluppare su OpenOffice.org con Java

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

Page 20: Sviluppare su OpenOffice.org con 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

Page 21: Sviluppare su OpenOffice.org con 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

Page 22: Sviluppare su OpenOffice.org con Java

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

Page 23: Sviluppare su OpenOffice.org con Java

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.

.idl

.urd types.rdb

.class

idlc regmerge

javamaker

.java

Java tools .jar

Implementation

Specification

Library

Page 24: Sviluppare su OpenOffice.org con Java

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

Page 25: Sviluppare su OpenOffice.org con Java

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

Page 26: Sviluppare su OpenOffice.org con Java

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

Page 27: Sviluppare su OpenOffice.org con Java

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.

Page 28: Sviluppare su OpenOffice.org con Java

Anatomia di un documento OpenDocument Base

Nel caso contenga un database HSQLDB...

file.odb|-- database| |-- backup| |-- database| |-- log| |-- properties| -- script|-- META-INF| -- manifest.xml|-- mimetype...

#HSQL database#Sun Jun 25 15:31:51 CEST 2006hsqldb.script_format=0runtime.gc_interval=0sql.enforce_strict_size=truehsqldb.cache_size_scale=8readonly=falsehsqldb.nio_data_file=falsehsqldb.cache_scale=13version=1.8.0hsqldb.default_table_type=cachedhsqldb.cache_file_scale=1hsqldb.log_size=10modified=yeshsqldb.cache_version=1.7.0hsqldb.original_version=1.8.0hsqldb.compatible_version=1.8.0

posso estrarre i file nella directory database, rinominarli aggiungendocome prefisso “<nome_database>.” ed ho un normale database HSQLDB!

Page 29: Sviluppare su OpenOffice.org con Java

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

Page 30: Sviluppare su OpenOffice.org con Java

Riferimenti Area Developer di OpenOffice.org

http://developer.openoffice.org

Documentazione UNO Development Kithttp://udk.openoffice.org

OpenOffice.org development wikihttp://wiki.services.openoffice.org/wiki/Main_Page

Tutorial sullo sviluppo di un component di OpenOffice.org in Java su Eclipsehttp://wiki.services.openoffice.org/wiki/JavaEclipseTuto

SVGImportFilter, con utility per sviluppare Java component sfruttando Java 5http://www.ipd.uni-karlsruhe.de/~hauma/svg-import/

Domande e (possibilmente) Risposte

Grazie per l'attenzione!