<?xml version="1.0" encoding="ISO-8859-15"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#"
      xmlns:dc="http://purl.org/dc/elements/1.1/">
  <title mode="escaped" type="text/html">Cedric Bosdonnat</title>
  <tagline>ATOM Feed - Cedric Bosdonnat</tagline>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat" />
  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat</id>
  <generator url="http://cps-project.org" version="3">CPS</generator>
  <modified>2005-10-10 00:36:52</modified>

  <link rel="service.feed"
        href=" http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/atomFeed"
        title="Cedric Bosdonnat" type="application/atom+xml" />
  <link rel="service.post"
        href=" http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/postAtom"
        title="Cedric Bosdonnat" type="application/atom+xml" />
  <link rel="service.categories"
        href=" http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/atomCategories"
        title="Cedric Bosdonnat" type="application/atom+xml" />

  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">OOoCon2006, it's over</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_09_19_ooocon2006-it-s-over" />
  <issued>2006-09-19T07:32:59Z</issued>
  <modified>2006-09-19T07:32:59Z</modified>
  <created>2006-09-19T07:32:58Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
  <summary type="text/html" mode="escaped">Now the OpenOffice.org conferences 2006 are closed and the normal life has taken its old rythm now. This article is only about to thank you all for making this year's conferences a big event, quite like a family one.

Being prepared during several month by many persons on both OpenOffice.org and INSA Lyon side, my first thanks are coming to all those who helped us making it possible: Sophie, ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;p&gt;Now the OpenOffice.org conferences 2006 are closed and the normal life has taken its old rythm now. This article is only about to thank you all for making this year's conferences a big event, quite like a family one.&lt;/p&gt;

&lt;p&gt;Being prepared during several month by many persons on both OpenOffice.org and INSA Lyon side, my first thanks are coming to all those who helped us making it possible: Sophie, Marie-Jo, Jean-François and Charles from OpenOffice.org and Yves Condemine, Patrick Pollet, Cédric Grand, Anne Mouriquand from INSA. I am sure to forget many persons here, but I think that they will recognize themselves.&lt;/p&gt;

&lt;p&gt;To help us keep the conferences in our mind, the &lt;a href="http://ooocon.kiberpipa.org/"&gt;kiberpipa team&lt;/a&gt; who did an extraordinary job, provides us the video archives of the conferences and offers to host your photos of the event.&lt;/p&gt;

&lt;p&gt;Again, thanks to you all.&lt;/p&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_09_19_ooocon2006-it-s-over</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_09_19_ooocon2006-it-s-over/atom?2006_09_19_ooocon2006-it-s-over"
        title="Edit Here - OOoCon2006, it's over" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Uno IDL syntax highlighting in PHP</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_08_20_uno-idl-syntax-highlighting-in-php" />
  <issued>2006-08-20T12:35:19Z</issued>
  <modified>2006-08-20T12:35:19Z</modified>
  <created>2006-08-20T12:33:52Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
  <summary type="text/html" mode="escaped"> Uno IDL is the component specification language of OpenOffice.org. Here is a
  solution to show some highlighted Uno IDL code. It uses GeSHi and you need to add a language
  file describing how to parse and colorize you Uno IDL code. As this language
  file doesn't exist I created one, attached to this article.</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;p&gt; Uno IDL is the component specification language of OpenOffice.org. Here is a
  solution to show some highlighted Uno IDL code. It uses &lt;a
  href="http://qbnz.com/highlighter/"&gt;GeSHi&lt;/a&gt; and you need to add a language
  file describing how to parse and colorize you Uno IDL code. As this language
  file doesn't exist I created one, attached to this article.&lt;/p&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_08_20_uno-idl-syntax-highlighting-in-php</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_08_20_uno-idl-syntax-highlighting-in-php/atom?2006_08_20_uno-idl-syntax-highlighting-in-php"
        title="Edit Here - Uno IDL syntax highlighting in PHP" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">OOEclipseIntegration release 1.0.3.a</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_08_20_ooeclipseintegration-release-1-0-3" />
  <issued>2006-08-19T23:41:21Z</issued>
  <modified>2006-08-19T23:41:21Z</modified>
  <created>2006-08-19T23:39:34Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
  <summary type="text/html" mode="escaped">A new release is available on the usual update site.
  http://cedric.bosdonnat.free.fr/ooeclipseintegration/


  It mainly contains fixes for windows version as some code cleaning. This
  version warns the user that white spaces in the SDK or project paths may
  lead to problems of builds. This problem is due to some bugs of the idlc
  compiler and will be fixed in a future release of the ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;p&gt;A new release is available on the usual update site.&lt;/p&gt;
  &lt;a
  href="http://cedric.bosdonnat.free.fr/ooeclipseintegration/"&gt;http://cedric.bosdonnat.free.fr/ooeclipseintegration/&lt;/a&gt;&lt;br /&gt;


  &lt;p&gt;It mainly contains fixes for windows version as some code cleaning. This
  version warns the user that white spaces in the SDK or project paths may
  lead to problems of builds. This problem is due to some bugs of the idlc
  compiler and will be fixed in a future release of the OpenOffice.org
  SDK.&lt;/p&gt;

  &lt;p&gt;The next release will contain new interesting features like a Java
  skeleton generation, services.rdb or component exports, and may be URE
  application run in eclipse. Thus stay tuned...&lt;br /&gt;
  &lt;/p&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_08_20_ooeclipseintegration-release-1-0-3</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_08_20_ooeclipseintegration-release-1-0-3/atom?2006_08_20_ooeclipseintegration-release-1-0-3"
        title="Edit Here - OOEclipseIntegration release 1.0.3.a" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Creating a new Funambol connector</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_06_28_creating-new-funambol-connector" />
  <issued>2006-06-28T11:19:33Z</issued>
  <modified>2006-06-28T11:19:33Z</modified>
  <created>2006-06-28T09:50:56Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>apogee</dc:subject>
  
  
  <summary type="text/html" mode="escaped">This blog post will be about sharing what I learned around developping
  Funambol Connector. It is not intended to be complete or a replacement of
  any Funambol tutorial. However, I'll try to give some tips here to better
  understand.

  Basic documentation

  First things firsts, before anything else, you should have a serious look
  at the 
  Funambol module development tutorial. ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;p&gt;This blog post will be about sharing what I learned around developping
  Funambol Connector. It is not intended to be complete or a replacement of
  any Funambol tutorial. However, I'll try to give some tips here to better
  understand.&lt;/p&gt;

  &lt;h2&gt;Basic documentation&lt;/h2&gt;

  &lt;p&gt;First things firsts, before anything else, you should have a serious look
  at the &lt;a
  href="http://download.forge.objectweb.org/sync4j/funambol_ds_server_module_development_tutorial.pdf"&gt;
  Funambol module development tutorial&lt;/a&gt;. This will guide you in the
  creation of a dummy connector. However, this paper is not complete enough
  for new developers. Thus I'll try to explain some difficult points here.&lt;/p&gt;

  &lt;p&gt;Take care of which API reference you are reading. The j2se and DS-server
  APIs are different with similar concepts and names...&lt;/p&gt;

  &lt;h2&gt;Understanding modules&lt;/h2&gt;

  &lt;p&gt;First of all, the tutorial is about modules and not connectors... what's
  the difference ? In fact a module is a general additionnal component to
  Funambol which contains one or more connectors.&lt;/p&gt;

  &lt;p&gt;As you might have understood from the tutorial, the module is composed of  several parts:&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;The Java sources of you module, of course.&lt;/li&gt;

   &lt;li&gt;SQL scripts used for installing and uninstalling the module and
   connector in the Funambol DS server.&lt;/li&gt;

   &lt;li&gt;An optional install/install.xml ant script to run at the installation
   time&lt;/li&gt;

   &lt;li&gt;Dependencies libraries.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;There are two things to develop to create a complete connector:&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;The Synchronisation source type class, which will access the data.&lt;/li&gt;

   &lt;li&gt;The configuration panel that will be shown in the Funambol admin tool
   for easy configuration of the new synchronization source type.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;Why are SQL scripts needed and what are they for ? Funambol is connected to a database describing the connectors and their informations. Thus the  informations about your new connector have to be stored in order for it to  be used. These informations include the class name of the source type and the one of the panel. There are three possible SQL scripts:&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;create_schema.sql, to use if the module needs a custom data
   schema
   &lt;/li&gt;

   &lt;li&gt;drop_schema.sql, called when uninstalling the module to remove the
   data
   &lt;/li&gt;

   &lt;li&gt;init_schema.sql, called when installing the module to fill the
   data
   &lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2&gt;SyncSource interface
  &lt;/h2&gt;

  &lt;p&gt;The synchronization source type of your connector has to implement the
  ds-serveur SyncSource interface. These next lines will try to detail what
  the different methods are for.&lt;/p&gt;

  &lt;h3&gt;Synchronization starting and ending&lt;/h3&gt;
&lt;pre&gt;
public void beginSync(SyncContext ctx) throws SyncSourceException;
public void endSync() throws SyncSourceException;
public void commitSync() throws SyncSourceException;
&lt;/pre&gt;

&lt;p&gt; These methods are called to initialize and stop the synchronization. Thes
  can be used, for example, to start and stop a connection to the source. The
  commit method will commit the changes made during the synchronization to the  source.&lt;/p&gt;
   

  &lt;h3&gt;Element getters&lt;/h3&gt;
&lt;pre&gt;
public abstract SyncItemKey[] getAllSyncItemKeys()
    throws SyncSourceException;
&lt;/pre&gt;

  &lt;p&gt;This method will have to return all the items to synchronize in the
  source. This method is used in the synchronization mode. The result is an
  array of all the unique keys describing each element.&lt;/p&gt;
&lt;pre&gt;
public abstract SyncItemKey[] getDeletedSyncItemKeys(Timestamp sinceTs, Timestamp untilTs)
    throws SyncSourceException;
public abstract SyncItemKey[] getNewSyncItemKeys(Timestamp sinceTs, Timestamp untilTs)
    throws SyncSourceException;
public SyncItemKey[] getUpdatedSyncItemKeys(Timestamp since, Timestamp until)
    throws SyncSourceException;
&lt;/pre&gt;

  &lt;p&gt;These three methods will return the deleted, new and updated items
  between the since and until timestamps. These methods are used in the fast
  synchronization mode. The result is an array of all the unique keys
  describing each element.&lt;/p&gt;
&lt;pre&gt;
public abstract SyncItem getSyncItemFromId(SyncItemKey syncItemKey)
    throws SyncSourceException;
&lt;/pre&gt;

  &lt;p&gt;This method returns and item from its key. This is a difference between
  the client and server SyncSource interfaces: from the server side, using
  only keys and getting the item at the very last time helps to avoid big
  memory uses.&lt;/p&gt;

  &lt;h3&gt;Elements setters&lt;/h3&gt;
&lt;pre&gt;
public abstract void removeSyncItem(SyncItemKey syncItemKey, Timestamp time, boolean softDelete)
    throws SyncSourceException;
public abstract SyncItem updateSyncItem(SyncItem syncInstance)
    throws SyncSourceException;
public abstract SyncItem addSyncItem(SyncItem syncInstance)
    throws SyncSourceException;
&lt;/pre&gt;

  &lt;p&gt;These methods will remove, add and update items in the source. The
  returned sync item correspond to the inserted or updated item. The update
  and add methods should solve the conflicts between the items that is already
  present on the server and the one that is about to be added or
  updated.&lt;/p&gt;

  &lt;h3&gt;Extra methods&lt;/h3&gt;
&lt;pre&gt;
public abstract SyncItemKey[] getSyncItemKeysFromTwin(SyncItem syncItem)
    throws SyncSourceException;
&lt;/pre&gt;

  &lt;p&gt;This method returns the twin items keys, i.e. the keys of the items that
  are considered as identical. This notion of identical items is defined in
  this method.&lt;/p&gt;
&lt;pre&gt;
public abstract void setOperationStatus(String operationName, int status, SyncItemKey[] keys);
&lt;/pre&gt;

  &lt;p&gt;This method is called by the DS-server to notify the status of an
  operation. The operation name can be either one of &lt;i&gt;"Add"&lt;/i&gt;,
  &lt;i&gt;"Replace"&lt;/i&gt; or &lt;i&gt;"Delete"&lt;/i&gt;.&lt;/p&gt;

  &lt;h2&gt;Configuration panel implementation&lt;/h2&gt;

  &lt;p&gt;To create a new source configuration panel, you will need to extend the
  &lt;b&gt;SourceManagementPanel&lt;/b&gt; class. The only thing to know here is to set
  the following properties into your synchronization source when clicking on
  the validation button. The validation method should contain the following
  skeleton:&lt;/p&gt;
&lt;pre&gt;
if (getSyncSource() instanceof JCRSyncSource) {
          
        JCRSyncSource source = (JCRSyncSource)getSyncSource();
        source.setSourceURI(uriText.getText().trim());
        source.setName(nameText.getText().trim());
        source.setType(typeText.getText().trim());

        // TODO set your source specific values

        ContentType[] contentTypes = new ContentType[] {
            new ContentType("text/plain", "1.0")  
        };
        source.setInfo(new SyncSourceInfo(contentTypes, 0));
}
&lt;/pre&gt;
  &lt;p&gt;You just have to replace the TODO comment by lines setting the specific
  values to your source. Of course, you need to replace the JCRSyncSource
  class by your SyncSource class.&lt;/p&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_06_28_creating-new-funambol-connector</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_06_28_creating-new-funambol-connector/atom?2006_06_28_creating-new-funambol-connector"
        title="Edit Here - Creating a new Funambol connector" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Apogée synchronization, first howto</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_06_26_apogee-synchronization-first-howto" />
  <issued>2006-06-26T09:49:16Z</issued>
  <modified>2006-06-26T09:49:16Z</modified>
  <created>2006-06-26T09:49:15Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>apogee</dc:subject>
  
  
  <summary type="text/html" mode="escaped">I'm proud to announce you that the Apogée synchronization is now working. It
  integrates the Funambol j2se client API and configures it for you through
  preferences and properties pages. Split into three plugins, the
  synchronization allows you to write your own source connector. For the
  moment, Apogée can now synchronize Jackrabbit local repositories, but this
  can be extended.
  A ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">I'm proud to announce you that the Apogée synchronization is now working. It
  integrates the Funambol j2se client API and configures it for you through
  preferences and properties pages. Split into three plugins, the
  synchronization allows you to write your own source connector. For the
  moment, Apogée can now synchronize Jackrabbit local repositories, but this
  can be extended.&lt;br /&gt;
  A guide to your first synchronization in Apogée is available on the Apogée
  website: &lt;br /&gt;
  &lt;a
  href="http://apogee.nuxeo.org/sections/documentation/jcrsync/synchronization-in/cpsdocument_view"&gt;
  http://apogee.nuxeo.org/sections/documentation/jcrsync/synchronization-in/cpsdocument_view&lt;/a&gt;&lt;br /&gt;

  &lt;br /&gt;
  Of course any comment or contribution is welcomed. You can join the Apogée
  team on its mailing list. For this, just register here: &lt;a
  href="http://lists.nuxeo.com/mailman/listinfo/apogee"&gt;http://lists.nuxeo.com/mailman/listinfo/apogee&lt;/a&gt;&lt;br /&gt;

  &lt;br /&gt;
  Please hold the line for further news...&lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_06_26_apogee-synchronization-first-howto</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_06_26_apogee-synchronization-first-howto/atom?2006_06_26_apogee-synchronization-first-howto"
        title="Edit Here - Apogée synchronization, first howto" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">OOoEclipseIntegration release 1.0.3</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_06_09_oooeclipseintegration-release-1-0-3" />
  <issued>2006-06-26T09:41:57Z</issued>
  <modified>2006-06-26T09:41:57Z</modified>
  <created>2006-06-09T07:27:15Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>eclipse</dc:subject>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
  <summary type="text/html" mode="escaped">I'm glad to announce that 1.0.3 release of the OOoEclipseIntegration
   plugin is out. Here are the changes:
   

  
   Basic URE support

   User documentation

   Developer documentation: Javadoc API completed and &amp;#8220;howto extend&amp;#8221;
   tutorial

   Moving the language specific code into a new plugin

   Ant scripts to automate the update site build

   Internal model ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">I'm glad to announce that 1.0.3 release of the OOoEclipseIntegration&lt;br /&gt;
   plugin is out. Here are the changes:&lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;Basic URE support&lt;/li&gt;

   &lt;li&gt;User documentation&lt;/li&gt;

   &lt;li&gt;Developer documentation: Javadoc API completed and &amp;#8220;howto extend&amp;#8221;
   tutorial&lt;/li&gt;

   &lt;li&gt;Moving the language specific code into a new plugin&lt;/li&gt;

   &lt;li&gt;Ant scripts to automate the update site build&lt;/li&gt;

   &lt;li&gt;Internal model refactoring&lt;/li&gt;

   &lt;li&gt;Fixed some bugs&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;In fact there are many internal changes preparing future extensions of
  the plugin. For the user, the important new thing is the URE support. Now
  you can create a new UNO project using a URE instance, the type browser will
  show you only the URE types and in a future version you will be able to
  create a new URE application and run it.&lt;br /&gt;
  &lt;/p&gt;

  &lt;p&gt;The update site is still the same : &lt;a
  href="http://cedric.bosdonnat.free.fr/ooeclipseintegration"&gt;http://cedric.bosdonnat.free.fr/ooeclipseintegration&lt;/a&gt;&lt;br /&gt;

  &lt;/p&gt;

  &lt;p&gt;Any report is welcomed and stay tuned...&lt;br /&gt;
  &lt;/p&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_06_09_oooeclipseintegration-release-1-0-3</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_06_09_oooeclipseintegration-release-1-0-3/atom?2006_06_09_oooeclipseintegration-release-1-0-3"
        title="Edit Here - OOoEclipseIntegration release 1.0.3" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Building Funambol from CVS</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_05_30_building-funambol-from-cvs" />
  <issued>2006-06-27T08:10:40Z</issued>
  <modified>2006-06-27T08:10:40Z</modified>
  <created>2006-05-30T11:52:50Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
  <summary type="text/html" mode="escaped">As I had some problems to find build howtos to build Funambol last week,
  I gathered the information people gave me on the Sync4J mailing list in to
  an article. Follow these instructions to build the Funambol 3.0 bundle for
  Unix or Linux.

  Gathering the dependencies

  In order to build the Funambol bundle, you will need several other
  softwares or components. There are listed ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;p&gt;As I had some problems to find build howtos to build Funambol last week,
  I gathered the information people gave me on the Sync4J mailing list in to
  an article. Follow these instructions to build the Funambol 3.0 bundle for
  Unix or Linux.&lt;/p&gt;

  &lt;h2&gt;Gathering the dependencies&lt;/h2&gt;

  &lt;p&gt;In order to build the Funambol bundle, you will need several other
  softwares or components. There are listed below with a link to their
  download page and some comments if necessary.&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;&lt;a
   href="http://www.netbeans.info/downloads/download.php?type=5.0"&gt;Netbeans
   platform&lt;/a&gt;: no problem with netbeans, the latest version will do the
   trick&lt;/li&gt;

   &lt;li&gt;&lt;a
   href="https://javacc.dev.java.net/servlets/ProjectDocumentList?folderID=0&amp;amp;expandFolder=0&amp;amp;folderID=0"&gt;
   JavaCC&lt;/a&gt;: I tested using the 3.2 version, but newer version might work
   too&lt;/li&gt;

   &lt;li&gt;&lt;a
   href="http://sourceforge.net/project/showfiles.php?group_id=23316"&gt;HSQLDB&lt;/a&gt;:
   no problem too, the latest version will be good&lt;/li&gt;

   &lt;li&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/download.jsp"&gt;Java J2SE&lt;/a&gt;:
   download both JDK for build and JRE for inclusion in the bundle&lt;/li&gt;

   &lt;li&gt;&lt;a
   href="http://prdownloads.sourceforge.net/junit/junit4.1.zip?download"&gt;JUnit&lt;/a&gt;:
   last version is ok&lt;/li&gt;

   &lt;li&gt;&lt;a href="http://java.sun.com/javaee/downloads/index.jsp"&gt;J2EE&lt;/a&gt;:
   there is a problem in the funambol ant scripts starting from J2EE 1.4, a
   fix is proposed in this tutorial. Using this fix, latest version can be
   used.&lt;/li&gt;

   &lt;li&gt;&lt;a
   href="http://tomcat.apache.org/download-55.cgi#5.0.30-beta"&gt;Tomcat&lt;/a&gt;: for
   inclusion in the bundle. Works fine using 5.0.30, but earlier version might
   work&lt;/li&gt;

   &lt;li&gt;&lt;a href="http://ant.apache.org/bindownload.cgi"&gt;Ant&lt;/a&gt;: the latest
   version works fine&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;Now that you downloaded all the dependencies, you will install them. To
  simplify this tutorial, I assume that everything will happen in the same
  &lt;b&gt;&amp;lt;ROOT_DIR&amp;gt;&lt;/b&gt; directory and that neither Java, ant nor J2EE are
  installed. You may adapt the next steps to your existing installation if you
  want.&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;Extract Netbeans platform in &lt;b&gt;&amp;lt;ROOT_DIR&amp;gt;&lt;/b&gt;&lt;/li&gt;

   &lt;li&gt;Extract JavaCC in &lt;b&gt;&amp;lt;ROOT_DIR&amp;gt;&lt;/b&gt;&lt;/li&gt;

   &lt;li&gt;Extract JUnit in &lt;b&gt;&amp;lt;ROOT_DIR&amp;gt;&lt;/b&gt;&lt;/li&gt;

   &lt;li&gt;Extract Ant in &lt;b&gt;&amp;lt;ROOT_DIR&amp;gt;&lt;/b&gt;&lt;/li&gt;

   &lt;li&gt;Run JDK installation in &lt;b&gt;&amp;lt;ROOT_DIR&amp;gt;&lt;/b&gt; using a command
   like&lt;/li&gt;
  &lt;/ul&gt;
&lt;pre&gt;
sh jre-1_5_0_07-linux-i586.bin
&lt;/pre&gt;

  &lt;ul&gt;
   &lt;li&gt;Run J2EE installation with the following steps and install it in
   &lt;b&gt;&amp;lt;ROOT_DIR&amp;gt;/SUNWappserver&lt;/b&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;pre&gt;
chmod u+x java_ee_sdk-5-linux.bin&lt;br /&gt;
./java_ee_sdk-5-linux.bin
&lt;/pre&gt;

  &lt;p&gt;The other archives should be left as is because they will only be
  included in the Bundle by the Funambol build scripts.&lt;/p&gt;

  &lt;h2&gt;Getting the sources&lt;/h2&gt;

  &lt;p&gt;Now that you have the dependencies, you will have to checkout the latest
  Funambol 3.0 sources from the CVS and configure them to find the
  dependencies.&lt;/p&gt;

  &lt;h3&gt;Checkout the sources from CVS&lt;/h3&gt;

  &lt;p&gt;In order to get the sources, go into the &lt;b&gt;&amp;lt;ROOT_DIR&amp;gt;&lt;/b&gt;
  directory using the cd command and then execute the following commands:&lt;/p&gt;
&lt;pre&gt;
cvs -d:pserver:anonymous@cvs.forge.objectweb.org:/cvsroot/sync4j login&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@cvs.forge.objectweb.org:/cvsroot/sync4j co 3x
&lt;/pre&gt;

  &lt;p&gt;When a password is asked during the login command, simply press
  &lt;i&gt;enter&lt;/i&gt;. Now you should have a new &lt;b&gt;3x&lt;/b&gt; directory in your
  &lt;b&gt;&amp;lt;ROOT_DIR&amp;gt;&lt;/b&gt; containing the Funambol 3.0 sources.&lt;/p&gt;

  &lt;h3&gt;Configure&lt;/h3&gt;

  &lt;p&gt;Now, you will have to change some values in Funambol properties files.
  First of all, edit the &lt;b&gt;&amp;lt;ROOT_DIR&amp;gt;/3x/forge/build.properties&lt;/b&gt;
  file and change the following values:&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;javacc.home=&lt;b&gt;&amp;lt;ROOT_DIR&amp;gt;&lt;/b&gt;/javacc-3.2&lt;/li&gt;

   &lt;li&gt;sunj2eesdk-rootdir=&lt;b&gt;&amp;lt;ROOT_DIR&amp;gt;&lt;/b&gt;/SUNWappserver&lt;/li&gt;

   &lt;li&gt;tomcat.pkg=&lt;b&gt;&amp;lt;ROOT_DIR&amp;gt;&lt;/b&gt;/jakarta-tomcat-5.0.30.zip&lt;/li&gt;

   &lt;li&gt;jre.pkg=&lt;b&gt;&amp;lt;ROOT_DIR&amp;gt;&lt;/b&gt;/jre-1_5_0_07-linux-i586.bin&lt;/li&gt;

   &lt;li&gt;hsqldb.pkg=&lt;b&gt;&amp;lt;ROOT_DIR&amp;gt;&lt;/b&gt;/hsqldb_1_8_0_4.zip&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;As you might have remarked in the preceeding value, I used the latest
  versions of the JRE and HSQLDB. You will have to adapt these values to the
  names of the files you have downloaded. You should also change some other
  values:&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;jre.name=jre1.5.0_07&lt;/li&gt;

   &lt;li&gt;tomcat.name=jakarta-tomcat-5.0.30&lt;/li&gt;

   &lt;li&gt;hsqldb.name=hsqldb&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;To obtain these values, just temporarily extract Tomcat, the JRE and
  HSQLDB the generated directories names will be your values.&lt;/p&gt;

  &lt;p&gt;To complete this configuration, set the following value in
  &lt;b&gt;&amp;lt;ROOT_DIR&amp;gt;/3x/admin-suite/build.properties&lt;/b&gt;:&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;
   nbplatform.default.netbeans.dest.dir=&lt;b&gt;&amp;lt;ROOT_DIR&amp;gt;&lt;/b&gt;/netbeans&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2&gt;Build&lt;/h2&gt;

  &lt;p&gt;Last but not least, you will have to run to scripts to build the Funambol
  3.0 bundle. For this, follow the next steps:&lt;/p&gt;
&lt;pre&gt;
export CLASSPATH=&amp;lt;ROOT_DIR&amp;gt;/junit4.1/junit-4.1.jar&lt;br /&gt;
export PATH=&amp;lt;ROOT_DIR&amp;gt;/apache-ant-1.6.5/bin:&amp;lt;ROOT_DIR&amp;gt;/jdk1.5.0_07/bin:$PATH&lt;br /&gt;
export JAVA_HOME=&amp;lt;ROOT_DIR&amp;gt;/jdk1.5.0_07
&lt;/pre&gt;

  &lt;p&gt;Then go to the &lt;b&gt;&amp;lt;ROOT_DIR&amp;gt;/3x/forge&lt;/b&gt; directory and run the
  following command to build the unix bundle. To get the list of all the
  targets available for the build, simply run ant without any target.&lt;/p&gt;
&lt;pre&gt;
ant forge-bundle-unix
&lt;/pre&gt;

  &lt;p&gt;Now you can get the generated bundle in the
  &lt;b&gt;&amp;lt;ROOT_DIR&amp;gt;/3x/output&lt;/b&gt; directory.&lt;/p&gt;

  &lt;h3&gt;Bug for J2EE 1.4 and 1.5&lt;/h3&gt;

  &lt;p&gt;In these versions of the J2EE, the jar used to build the pimweb module
  (&lt;i&gt;j2ee.jar&lt;/i&gt;) is empty. Its content is now in &lt;i&gt;javaee.jar&lt;/i&gt;. Thus
  you will have to edit the
  &lt;b&gt;&amp;lt;ROOT_DIR&amp;gt;/3x/modules/pimweb/build/build.xml&lt;/b&gt; file and change
  the line&lt;/p&gt;
&lt;pre&gt;
&amp;lt;property name="j2ee.jar" value="${sunj2eesdk-rootdir}/lib/j2ee.jar" /&amp;gt;
&lt;/pre&gt;

  &lt;p&gt;into&lt;/p&gt;
&lt;pre&gt;
&amp;lt;property name="j2ee.jar" value="${sunj2eesdk-rootdir}/lib/javaee.jar" /&amp;gt;
&lt;/pre&gt;

  &lt;p&gt;For a better &lt;a
  href="https://forge.objectweb.org/tracker/index.php?func=detail&amp;amp;aid=305395&amp;amp;group_id=96&amp;amp;atid=100096"&gt;
  issue description&lt;/a&gt; and &lt;a
  href="https://forge.objectweb.org/tracker/index.php?func=detail&amp;amp;aid=305396&amp;amp;group_id=96&amp;amp;atid=300096"&gt;
  patch&lt;/a&gt;, please refer to the sync4j objectweb forge project.&lt;/p&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_05_30_building-funambol-from-cvs</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_05_30_building-funambol-from-cvs/atom?2006_05_30_building-funambol-from-cvs"
        title="Edit Here - Building Funambol from CVS" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Funambol JCR Connector: the first release</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_05_29_funambol-jcr-connector-the-first-release" />
  <issued>2006-06-27T08:11:07Z</issued>
  <modified>2006-06-27T08:11:07Z</modified>
  <created>2006-05-29T16:46:24Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>apogee</dc:subject>
  
  
  <summary type="text/html" mode="escaped">After a long time working on the JCR connector for Funambol, I finally
  created a first release for pioneers. As every very first release there are
  some important limits which are described further in the provided links.

  For downloads and documentation of the JCR connector, you can report to
  the attached links. The final word here is: "stay tuned..."</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;p&gt;After a long time working on the JCR connector for Funambol, I finally
  created a first release for pioneers. As every very first release there are
  some important limits which are described further in the provided links.&lt;/p&gt;

  &lt;p&gt;For downloads and documentation of the JCR connector, you can report to
  the attached links. The final word here is: "stay tuned..."&lt;/p&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_05_29_funambol-jcr-connector-the-first-release</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_05_29_funambol-jcr-connector-the-first-release/atom?2006_05_29_funambol-jcr-connector-the-first-release"
        title="Edit Here - Funambol JCR Connector: the first release" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Funambol JCR connector: a step more</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_05_04_funambol-jcr-connector-step-more" />
  <issued>2006-06-27T08:07:44Z</issued>
  <modified>2006-06-27T08:07:44Z</modified>
  <created>2006-05-04T16:20:55Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>apogee</dc:subject>
  
  
  <summary type="text/html" mode="escaped">I'm happy to anounce that the JCR connector can now return all the items
  or just the added or updated items. Deleted items are more difficult to
  check: thus their support is delayed.

  What the JCR Repository needs
  In order for the synchronization source to work, the JCR Repository will
  have to respect some constraints. They are described here:
   

  
   The repository has to ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;p&gt;I'm happy to anounce that the JCR connector can now return all the items
  or just the added or updated items. Deleted items are more difficult to
  check: thus their support is delayed.&lt;/p&gt;

  &lt;h2&gt;What the JCR Repository needs&lt;/h2&gt;
  In order for the synchronization source to work, the JCR Repository will
  have to respect some constraints. They are described here:&lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;The repository has to define the &lt;b&gt;mix:synchronizable&lt;/b&gt; mixin type.
   This type is used to recognize the synchronizable nodes&lt;/li&gt;
  &lt;/ul&gt;

  &lt;ul&gt;
   &lt;li&gt;A node is a synchronization item if and only if he has the
   mix:synchronizable mixin type&lt;/li&gt;
  &lt;/ul&gt;

  &lt;ul&gt;
   &lt;li&gt;Each synchronizable node must define &lt;b&gt;created&lt;/b&gt; and
   &lt;b&gt;lastModified&lt;/b&gt; properties containing the dates of creation and
   modification.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2&gt;Next steps&lt;/h2&gt;
  As you can imagine, the connector isn't finished yet. Its source still has
  to return the items content and add, update or remove nodes in the JCR
  repository. Thus stay tuned...&lt;br /&gt;
   &lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_05_04_funambol-jcr-connector-step-more</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_05_04_funambol-jcr-connector-step-more/atom?2006_05_04_funambol-jcr-connector-step-more"
        title="Edit Here - Funambol JCR connector: a step more" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">JCR server and Funambol</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_04_24_jcr-server-and-funambol" />
  <issued>2006-06-27T08:11:20Z</issued>
  <modified>2006-06-27T08:11:20Z</modified>
  <created>2006-04-24T20:04:48Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>apogee</dc:subject>
  
  
  <summary type="text/html" mode="escaped">In order to setup a test framework for the Funambol JCR connector, I had
  to setup a JCR repository server. This blog entry, will guide you to set up
  the test tools. To do this you need:

  
   to install and configure a tomcat server (I used the 5.5 version)

   to deploy the provided jackrabbit-server (see link below)

   to setup the jackrabbit-server servlet in order to use RMI ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;p&gt;In order to setup a test framework for the Funambol JCR connector, I had
  to setup a JCR repository server. This blog entry, will guide you to set up
  the test tools. To do this you need:&lt;/p&gt;

  &lt;ol&gt;
   &lt;li&gt;to install and configure a tomcat server (I used the 5.5 version)&lt;/li&gt;

   &lt;li&gt;to deploy the provided jackrabbit-server (see link below)&lt;/li&gt;

   &lt;li&gt;to setup the jackrabbit-server servlet in order to use RMI access&lt;/li&gt;
  &lt;/ol&gt;

  &lt;h1&gt;Installing and configuring Tomcat&lt;/h1&gt;

  &lt;p&gt;As Funambol Data Synchronization server already runs on a Tomcat server,
  you will need to change the new Tomcat listening ports. You can do this by
  editing the conf/server.xml file. To run and stop the server there are
  &lt;i&gt;bin/startup.sh&lt;/i&gt; and &lt;i&gt;bin/shutdown.sh&lt;/i&gt; in tomcat. I will assume
  here that the tomcat server containing the JCR servlet listens HTTP requests
  on 8081 port and the funambol one listens on 8080 port.&lt;br /&gt;
  &lt;/p&gt;

  &lt;p&gt;In order to use the manager in the next section, you will need to add a
  new user with manager role in conf/tomcat-users.xml&lt;/p&gt;
&lt;pre&gt;
 &amp;lt;user username="admin" password="admin" roles="manager"/&amp;gt;&lt;br /&gt;
&lt;/pre&gt;

  &lt;h1&gt;Deploying jackrabbit-server&lt;/h1&gt;

  &lt;p&gt;To easily deploy the jackrabbit server, you just have to download the
  corresponding war file on the jackrabbit download page (see link below).
  Then, open the following URL in your web browser:
  http://localhost:8080/manager/html. There you will need to authenticate
  using the login and password you added to tomcat-users.xml (see the previous
  section).&lt;/p&gt;

  &lt;p&gt;From this page, select the downloaded war file and deploy it: it's done.
  You can use this page to reload the web application after some configuration
  changes.&lt;/p&gt;

  &lt;h1&gt;Setting up jackrabbit-server for RMI&lt;/h1&gt;

  &lt;p&gt;By default, the jackrabbit-server servlet only provide a WebDAV access to
  the repository, but you will be able to configure the RMI support easily by
  changing the WEB-INF/web.xml file to have the following lines:&lt;/p&gt;
&lt;pre&gt;
     &amp;lt;init-param&amp;gt;&lt;br /&gt;
            &amp;lt;param-name&amp;gt;rmi-port&amp;lt;/param-name&amp;gt;&lt;br /&gt;
            &amp;lt;param-value&amp;gt;1099&amp;lt;/param-value&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&lt;br /&gt;
                The RMI port for registering the repository in the RMI Registry.&lt;br /&gt;
                If equals 0, the default port is used.&lt;br /&gt;
            &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/init-param&amp;gt;&lt;br /&gt;
        &amp;lt;init-param&amp;gt;&lt;br /&gt;
            &amp;lt;param-name&amp;gt;rmi-host&amp;lt;/param-name&amp;gt;&lt;br /&gt;
            &amp;lt;param-value&amp;gt;jcrserver&amp;lt;/param-value&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&lt;br /&gt;
                The RMI host for registering the repository in the RMI Registry.&lt;br /&gt;
                If equals "" or missing, the default host is used.&lt;br /&gt;
            &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/init-param&amp;gt;&lt;br /&gt;
        &amp;lt;init-param&amp;gt;&lt;br /&gt;
            &amp;lt;param-name&amp;gt;rmi-uri&amp;lt;/param-name&amp;gt;&lt;br /&gt;
            &amp;lt;param-value&amp;gt;&amp;lt;/param-value&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&lt;br /&gt;
                The RMI uri for registering the repository in the RMI Registry.&lt;br /&gt;
                If missing, the uri is composed using the other rmi parameters&lt;br /&gt;
                and will have the format: //{rmi-host}:{rmi-port}/{repository-name}&lt;br /&gt;
            &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/init-param&amp;gt;
&lt;/pre&gt;

  &lt;p&gt;As you can see it, these values are defining the RMI&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;listening port (default is 1099: you can leave this field empty)&lt;/li&gt;

   &lt;li&gt;listening host: I put &lt;i&gt;jcrserver&lt;/i&gt; because we have 2 tomcat servers
   on localhost: to avoid confusion, this one has to be named differently.
   &lt;b&gt;Note that I don't know if the host name has to match the machine name:
   this has to be tested&lt;/b&gt;&lt;/li&gt;

   &lt;li&gt;url of the repository. If you leave this field blank, default will be
   &lt;i&gt;//jcrserver:1099/jackrabbit.repository&lt;/i&gt; in our case.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;You should uncomment the following lines too and change to the right RMI
  url (see above for the url)&lt;/p&gt;
&lt;pre&gt;
       &amp;lt;!--&lt;br /&gt;
            RMI url, if RMI remoting is needed&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
        &amp;lt;init-param&amp;gt;&lt;br /&gt;
            &amp;lt;param-name&amp;gt;rmi-uri&amp;lt;/param-name&amp;gt;&lt;br /&gt;
            &amp;lt;param-value&amp;gt;//jcrserver:1099/jackrabbit.repository&amp;lt;/param-value&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;The URI for the RMI connection.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/init-param&amp;gt;
&lt;/pre&gt;

  &lt;h1&gt;Testing with Funambol&lt;/h1&gt;

  &lt;p&gt;Before considering to have a working tomcat repository server, please
  check that the server has been launched as root. Otherwise you might
  experience some end of file problems at runtime. To check if the RMI
  registry is correctly launched, execute &lt;i&gt;netstat -l&lt;/i&gt;: you should have
  the following line:&lt;/p&gt;
&lt;pre&gt;
tcp        0      0 jcrserver:rmiregistry      *:*                     LISTEN&lt;br /&gt;
&lt;/pre&gt;

  &lt;p&gt;Then, you will have to download the latest Funambol JCR connector sources
  on Nuxeo SVN (see links below). You will need to build both
  org.nuxeo.sync.jcr and org.nuxeo.sync.jcr.extensions modules and deploy them
  into Funambol (see the projects README files for detailled
  instructions).&lt;/p&gt;

  &lt;p&gt;Then use &lt;i&gt;funamboladmin&lt;/i&gt; program to create a new JCR source
  instance. You will have to set&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;the &lt;b&gt;handler class name&lt;/b&gt; to
   &lt;i&gt;org.nuxeo.sync.jcr.jackrabbit.RmiHandler&lt;/i&gt;&lt;/li&gt;

   &lt;li&gt;the &lt;b&gt;JCR repository source URL&lt;/b&gt; to
   &lt;i&gt;//jcrserver:1099/jackrabbit.repository&lt;/i&gt;&lt;/li&gt;

   &lt;li&gt;the workspace can be left empty to use the default JCR workspace.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;Now you should be able to test this connector using the Funambol
  command-line client. There is nothing to synchronize as the methods aren't
  implemented in the connector yet.&lt;/p&gt;

  &lt;p&gt;Thus stay tuned...&lt;/p&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_04_24_jcr-server-and-funambol</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_04_24_jcr-server-and-funambol/atom?2006_04_24_jcr-server-and-funambol"
        title="Edit Here - JCR server and Funambol" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Creating a simple Funambol connector</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_04_14_creating-simple-funambol-connector" />
  <issued>2006-06-27T08:11:46Z</issued>
  <modified>2006-06-27T08:11:46Z</modified>
  <created>2006-04-14T08:25:38Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>apogee</dc:subject>
  
  
  <summary type="text/html" mode="escaped">This article will be about the problems I encountered as a beginner in
  writing a Funambol connector. It aims at avoiding simple stupind things that
  makes you loosing time. The article will be based on the 3.0 Beta 1 version
  of Funambol: there are some API changes between Beta 1 and Beta 2, so the
  following lines might be wrong for the last version.

  Vocabulary

  
   
    ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;p&gt;This article will be about the problems I encountered as a beginner in
  writing a Funambol connector. It aims at avoiding simple stupind things that
  makes you loosing time. The article will be based on the 3.0 Beta 1 version
  of Funambol: there are some API changes between Beta 1 and Beta 2, so the
  following lines might be wrong for the last version.&lt;/p&gt;

  &lt;h1&gt;Vocabulary&lt;/h1&gt;

  &lt;ul&gt;
   &lt;li&gt;
    &lt;p&gt;&lt;b&gt;Connector:&lt;/b&gt; a set of classes creating a connection between the
    Funambol DS Server and a data source. This data source could be of any
    type: email account, Relational databases,&amp;nbsp; PIM data, JCR and so
    on.&lt;/p&gt;
   &lt;/li&gt;

   &lt;li&gt;
    &lt;p&gt;&lt;b&gt;Module:&lt;/b&gt; a module is a functionnal archive to install on the
    Funambol DS Server. It will contain all the necessary files for the
    contained connector(s) to work. A module can contain several connectors:
    this will be defines in a specific database table.&lt;/p&gt;
   &lt;/li&gt;

   &lt;li&gt;
    &lt;p&gt;&lt;b&gt;Synchronization Source:&lt;/b&gt; a class which provides the data items of
    the external source to the Funambol DS Server.&lt;/p&gt;
   &lt;/li&gt;
  &lt;/ul&gt;

  &lt;h1&gt;The basic example: dummy&lt;/h1&gt;

  &lt;p&gt;First of all, to develop a connector, you will have at least to have a
  serious look at the dummy connector code (see the link for the CVS, tag
  &lt;i&gt;funambol30b1&lt;/i&gt;). You can see there that this connector doesn't do many
  things and contains only 2 classes:&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;the &lt;b&gt;SyncSource&lt;/b&gt; providing the items to Funambol&lt;/li&gt;

   &lt;li&gt;the &lt;b&gt;Admin Panel&lt;/b&gt; to let you create new sources using the
   &lt;i&gt;funamboladmin&lt;/i&gt; program&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;All the classes are packaged in a jar with the name of your connector (in
  my case: jcr-sync-0.0.1). The file to install on the Funambol DS server has
  an s4j extension and contains:&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;the classes jar&lt;/li&gt;

   &lt;li&gt;all the dependencies jars&lt;/li&gt;

   &lt;li&gt;SQL scripts to register the module into the database&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;There are two solutions to implement your own connector afterwards: a
  copy-paste of the dummy connector and using this as a base for your
  connector, or understanding the dummy connector to create your connector. I
  choose the second solution and had to fight with this problem: I got a
  server error when I tried to create a SyncSource using my connector source
  type.&lt;/p&gt;

  &lt;h1&gt;Solving the problem&lt;/h1&gt;

  &lt;p&gt;To solve this problem I had some tools:&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;a network sniffer&lt;/li&gt;

   &lt;li&gt;the funambol server and admin source code&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;First thing I tried was to locate the error: for this you can change the
  server logging preferences to print all the messages. This way you will be
  able to see quite exactly where it fails. However you won't be able to debug
  at this point in the code: then the idea is to sniff the messages between
  the admin program and the serveur. If you are using the bundle as I am, you
  just have to listen on the local interface for TCP messages on 8080
  port.&lt;/p&gt;

  &lt;p&gt;This way I could see one important point:The server was trying to guess
  if there wa already SyncSources with the same URI or name than the one I
  wanted to add. The problem was that these value were not set. Thus here are
  the conclusions:&lt;/p&gt;

  &lt;ol&gt;
   &lt;li&gt;The URI and Name value are mandatory for a SyncSource&lt;/li&gt;

   &lt;li&gt;You have to call the setter for each property before to send the
   ActionEvent to the admin panel: otherwise, the values aren't set in the
   SyncSource and the server will return a NullPointerException&lt;br /&gt;
   &lt;/li&gt;
  &lt;/ol&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_04_14_creating-simple-funambol-connector</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_04_14_creating-simple-funambol-connector/atom?2006_04_14_creating-simple-funambol-connector"
        title="Edit Here - Creating a simple Funambol connector" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Diving into Funambol</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_04_10_diving-into-funambol" />
  <issued>2006-06-27T08:11:53Z</issued>
  <modified>2006-06-27T08:11:53Z</modified>
  <created>2006-04-10T18:13:12Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>apogee</dc:subject>
  
  
  <summary type="text/html" mode="escaped">In order to understand Sync4J (also named Funambol), there are many hooks
  to use. First of all, the funambol data service server developer book to
  understand the architecture. After reading this paper, I needed to
  completely dive into Sync4J code. Hopefully, they provide an email connector
  to have an example.

  From now and in the following Sync4J posts, I'll write some notes ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;p&gt;In order to understand Sync4J (also named Funambol), there are many hooks
  to use. First of all, the funambol data service server developer book to
  understand the architecture. After reading this paper, I needed to
  completely dive into Sync4J code. Hopefully, they provide an email connector
  to have an example.&lt;/p&gt;

  &lt;p&gt;From now and in the following Sync4J posts, I'll write some notes about
  Sync4J development and difficulties I've met.&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;
    &lt;p&gt;First problem was to find how to get the credentials specified in the
    SyncML specs to authenticate on the JCR. Here is an interesting piece of
    code inspired from the email connector source:&lt;/p&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
&lt;pre&gt;
String username = ((Sync4jPrincipal)principal).getUsername();&lt;br /&gt;
String credentials = ((Sync4jPrincipal)principal).getEncodedCredentials();&lt;br /&gt;
String password = Helper.getPassword(username, credentials);&lt;br /&gt;
&lt;/pre&gt;

  &lt;p&gt;The credentials are formatted in the following way:
  &lt;i&gt;"username:password"&lt;/i&gt; and encrypted. To decrypt, there is only to use
  the &lt;i&gt;Base64.decode()&lt;/i&gt; method. The login to the repository will be done
  during the synchronization initialisation (&lt;i&gt;beginSync()&lt;/i&gt;)&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;An other point to think about is to create a testing framework in order
   to test the connection between Sync4J and a JackRabbit implementation of
   JCR.&lt;br /&gt;
   &lt;/li&gt;
  &lt;/ul&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_04_10_diving-into-funambol</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_04_10_diving-into-funambol/atom?2006_04_10_diving-into-funambol"
        title="Edit Here - Diving into Funambol" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Discover SyncML</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_03_31_discover-syncml" />
  <issued>2006-06-27T08:12:04Z</issued>
  <modified>2006-06-27T08:12:04Z</modified>
  <created>2006-03-31T19:27:27Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>apogee</dc:subject>
  
  
  <summary type="text/html" mode="escaped">These days, I'm working on SyncML and Sync4J for Apogee synchronization
  purpose. I discovered some interesting points summed  up  in this
  article.

  What is SyncML ?

  SyncML is the specification of a synchronization protocol. Defined by the
  Open Mobile Alliance, it covers a large group of features. This protocol is
  mostly defined for connecting mobile devices like ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;p&gt;These days, I'm working on SyncML and Sync4J for Apogee synchronization
  purpose. I discovered some interesting points summed&amp;nbsp; up&amp;nbsp; in this
  article.&lt;/p&gt;

  &lt;h1&gt;What is SyncML ?&lt;/h1&gt;

  &lt;p&gt;SyncML is the specification of a synchronization protocol. Defined by the
  Open Mobile Alliance, it covers a large group of features. This protocol is
  mostly defined for connecting mobile devices like handhelds or mobile
  phones: thus it provides a lot of features oriented in this way. SyncML
  features includes:&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;Several modes for synchronization&lt;/li&gt;

   &lt;li&gt;Mobile device configuration and management&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2&gt;What happens during a synchronization ?&lt;/h2&gt;

  &lt;p&gt;Basically, the synchronization is composed of three steps:&lt;/p&gt;

  &lt;ol&gt;
   &lt;li&gt;Exchange of device capabilities and authentication&lt;/li&gt;

   &lt;li&gt;Data exchange (client modifications first)&lt;/li&gt;

   &lt;li&gt;Data ids update&lt;/li&gt;
  &lt;/ol&gt;

  &lt;p&gt;The third step might be strange. In fact SyncML defines two kinds of
  identifiers: the device local ones and the global ones. Then, when a new
  data is added on a client, it gets a local ID that needs to be
  "globalified".&lt;/p&gt;

  &lt;h2&gt;What about authentication ?&lt;br /&gt;
  &lt;/h2&gt;

  &lt;p&gt;SyncML defines a cred tag where to put the user id and password for the
  database. In this way a user can be logged on the database.&lt;/p&gt;

  &lt;p&gt;There is an other mecanism to allow some users to synchronize on some
  devices. This is contained in the SyncML header.&lt;/p&gt;
  In both cases, the password could be in plain text or hashed using
  MD5.&lt;br /&gt;
   

  &lt;h1&gt;What about Sync4J ?&lt;/h1&gt;

  &lt;p&gt;Sync4J is a free implementation of the SyncML standard. Provided by
  funambol it is composed of:&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;a Data Synchronization Server to handle data synchronization&lt;/li&gt;

   &lt;li&gt;a Device Management Server to configure the access and configuration of different
   devices&lt;/li&gt;

   &lt;li&gt;an API for client applications in Java or C++&lt;/li&gt;

   &lt;li&gt;an application for server configuration&lt;/li&gt;

   &lt;li&gt;some database connectors&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;The server is an EJB and the messages are exchanged using HTTP, even if
  SyncML provides infos on other transport protocols. The authentication of
  the devices for synchronization is managed by a couple user/device called
  "Principals".&lt;/p&gt;

  &lt;p&gt;The Sync4J users are contained in a separate database. Even if I still
  didn't found it, it should be possible to replace it by a custom one... I
  hope. I didn't found any example about database authentication in the Sync4J
  demo set, by I imagine that it is implemented because it's defined in the
  specifications.&lt;/p&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_03_31_discover-syncml</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_03_31_discover-syncml/atom?2006_03_31_discover-syncml"
        title="Edit Here - Discover SyncML" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">UNO-IDL types introspection in Java</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_03_11_uno-idl-types-introspection-in-java" />
  <issued>2006-06-27T08:12:15Z</issued>
  <modified>2006-06-27T08:12:15Z</modified>
  <created>2006-03-11T08:04:42Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
  <summary type="text/html" mode="escaped">Since the beginning of the Google Summer of Code 2005 when I started the
  OpenOffice.org Eclipse Integration project, I wanted to provide a code
  completion feature for UNO-IDL. At the beginning I thought at a huge
  mecanism using IDL parsers to fetch the informations. However, I investigate
  a bit more on Juergen and Laurent ideas: using the UNO reflection API to
  introspect any ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;p&gt;Since the beginning of the Google Summer of Code 2005 when I started the
  OpenOffice.org Eclipse Integration project, I wanted to provide a code
  completion feature for UNO-IDL. At the beginning I thought at a huge
  mecanism using IDL parsers to fetch the informations. However, I investigate
  a bit more on Juergen and Laurent ideas: using the UNO reflection API to
  introspect any type.&lt;/p&gt;

  &lt;p&gt;&lt;br /&gt;
   After a small test, I could manage to do it in a small Java application.
  I'll try to explain what I did. All the code provided is in very simple Java
  main and should be launched with a correct ClassPath (the OpenOffice.org
  jars) and LD_LIBRARY_PATH set to your OpenOffice.org program directory. This
  is because OOo Jars use the OOo shared libraries.&lt;/p&gt;

  &lt;p&gt;First thing to do is to bootstrap OpenOffice.org to get a component
  context. There is no mystery in this code: using the Bootstrap class and one
  of its method is the best way to do it.&lt;br /&gt;
  &lt;/p&gt;
&lt;pre&gt;
try {&lt;br /&gt;
            //*****************************************************************************&lt;br /&gt;
            //  1-   Bootstrap of OpenOffice.org&lt;br /&gt;
            //*****************************************************************************&lt;br /&gt;
            String sofficepath = "file:///opt/openoffice.org2.0/program";&lt;br /&gt;
            String unoini = sofficepath + "/unorc";  // To change in uno.ini for Windows&lt;br /&gt;
         &lt;br /&gt;
            Hashtable params = new Hashtable();&lt;br /&gt;
            params.put("SYSBINDIR", sofficepath);&lt;br /&gt;
         &lt;br /&gt;
            XComponentContext xCtx = Bootstrap.defaultBootstrap_InitialComponentContext(&lt;br /&gt;
                    unoini, params);&lt;br /&gt;
            System.out.println("&amp;gt;&amp;gt;&amp;gt; OOo has been bootstrapped");&lt;br /&gt;
&lt;/pre&gt;

  &lt;p&gt;This second part of code loads a types registry external to
  OpenOffice.org. You will have to load some if you want to introspect in
  addons or components types (I mean types which aren't defined in the
  OpenOffice.org API)&lt;br /&gt;
  &lt;/p&gt;
&lt;pre&gt;
            //*****************************************************************************&lt;br /&gt;
            //  2-   Opening a local types regitry&lt;br /&gt;
            //*****************************************************************************&lt;br /&gt;
         &lt;br /&gt;
            String localRegistry = "file:///path/to/your/types.rdb";&lt;br /&gt;
         &lt;br /&gt;
            XMultiComponentFactory xMCF = xCtx.getServiceManager();&lt;br /&gt;
            XSimpleRegistry xReg = (XSimpleRegistry)UnoRuntime.queryInterface(&lt;br /&gt;
                    XSimpleRegistry.class,&lt;br /&gt;
                    xMCF.createInstanceWithContext("com.sun.star.registry.SimpleRegistry",&lt;br /&gt;
                            xCtx));&lt;br /&gt;
         &lt;br /&gt;
            xReg.open(localRegistry, true, false);&lt;br /&gt;
            System.out.println("&amp;gt;&amp;gt;&amp;gt; Local Registry opened");&lt;br /&gt;
&lt;/pre&gt;

  &lt;p&gt;The thirsd part is the interesting one for this blog article. The first
  thing to do before introspecting, is to create a
  com.sun.star.reflection.CoreReflection service. This one will provide two
  simple methods:&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;forName(): gets a type definition from a string representing the type
   name (dot-separated, eg: com.sun.star.uno.XInterface)&lt;/li&gt;

   &lt;li&gt;getType(): gets a type definition from an any UNO object.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;In our case, we imagine that we don't have any running object to
  introspect, but we have just its name (remain that is for code completion
  purpose), thus we will use the forName() method (see point 3.1 in the
  code).&lt;/p&gt;

  &lt;p&gt;When we have the desired XIdlClass, we can do what we like with: asking
  its name, its methods or attributes and so on. To get more help on this
  please report to the &lt;a
  href="http://api.openoffice.org/docs/common/ref/com/sun/star/reflection/XIdlClass.html"&gt;
  com.sun.star.reflection.XIdlClass API&lt;/a&gt;.&lt;br /&gt;
  &lt;/p&gt;
&lt;pre&gt;
            //*****************************************************************************&lt;br /&gt;
            //  3-   Getting the methods of XInterface&lt;br /&gt;
            //*****************************************************************************&lt;br /&gt;
         &lt;br /&gt;
            //**** 3.1 - Creating a CoreReflection service&lt;br /&gt;
            Object oReflection = xCtx.getServiceManager().createInstanceWithContext(&lt;br /&gt;
                    "com.sun.star.reflection.CoreReflection", xCtx);&lt;br /&gt;
            XIdlReflection xReflection = (XIdlReflection)UnoRuntime.queryInterface(&lt;br /&gt;
                    XIdlReflection.class, oReflection);&lt;br /&gt;
        &lt;br /&gt;
            System.out.println("&amp;gt;&amp;gt;&amp;gt; Reflection service fetched");&lt;br /&gt;
        &lt;br /&gt;
            //**** 3.2 - Using XIdlReflexion.forName() like Class.forName() in Java&lt;br /&gt;
            XIdlClass xClazz = xReflection.forName("com.sun.star.uno.XInterface");&lt;br /&gt;
            if (xClazz != null) {&lt;br /&gt;
                System.out.println("&amp;gt;&amp;gt;&amp;gt; IdlClass found: " + xClazz.getName());&lt;br /&gt;
             &lt;br /&gt;
                // Check for it's methods&lt;br /&gt;
                System.out.println("&amp;gt;&amp;gt;&amp;gt; Methods:");&lt;br /&gt;
             &lt;br /&gt;
                //**** 3.3 - A simple use of XIdlClass to list the methods&lt;br /&gt;
                XIdlMethod[] methods = xClazz.getMethods();&lt;br /&gt;
                for (int i=0; i&amp;lt;methods.length; i++) {&lt;br /&gt;
                    System.out.println("   * " + methods[i].getName());&lt;br /&gt;
                }&lt;br /&gt;
             &lt;br /&gt;
            } else {&lt;br /&gt;
                System.out.println("&amp;gt;&amp;gt;&amp;gt; No IdlClass found");&lt;br /&gt;
            }&lt;br /&gt;
&lt;/pre&gt;

  &lt;p&gt;The rest is the normal ending of a try-catch block and is provided only
  for the reader to copy-paste the code.&lt;/p&gt;
&lt;pre&gt;
        } catch (Exception e) {&lt;br /&gt;
            // TODO Auto-generated catch block&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
     &lt;br /&gt;
        System.exit(0);&lt;br /&gt;
&lt;/pre&gt;

  &lt;p&gt;So you can imagine that I will now have a lot of work to integrate this
  in the plugin, but you will have it in an indetermined delay... depending on
  my time.&lt;br /&gt;
  &lt;/p&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_03_11_uno-idl-types-introspection-in-java</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_03_11_uno-idl-types-introspection-in-java/atom?2006_03_11_uno-idl-types-introspection-in-java"
        title="Edit Here - UNO-IDL types introspection in Java" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Patch for OOoBean and the office termination</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_03_04_patch-for-ooobean-and-the-office-termination" />
  <issued>2006-06-27T08:12:21Z</issued>
  <modified>2006-06-27T08:12:21Z</modified>
  <created>2006-03-04T13:09:03Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
  <summary type="text/html" mode="escaped">I experienced some problems properly closing OpenOffice.org from the
  OOoBean. Joachim Lingner told me there was an issue for this. As the
  solution was quite simple to realize and test, I did it.

  I just added a terminateOOo() method that terminate OOo if there is only
  the bean on the desktop and stops the bean connection otherwise. The method
  returns a boolean to indicate whether ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;p&gt;I experienced some problems properly closing OpenOffice.org from the
  OOoBean. Joachim Lingner told me there was an issue for this. As the
  solution was quite simple to realize and test, I did it.&lt;/p&gt;

  &lt;p&gt;I just added a terminateOOo() method that terminate OOo if there is only
  the bean on the desktop and stops the bean connection otherwise. The method
  returns a boolean to indicate whether the office is terminated or not.&lt;/p&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_03_04_patch-for-ooobean-and-the-office-termination</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_03_04_patch-for-ooobean-and-the-office-termination/atom?2006_03_04_patch-for-ooobean-and-the-office-termination"
        title="Edit Here - Patch for OOoBean and the office termination" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">OpenOffice.org Editor in Eclipse: first version</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_03_03_openoffice-org-editor-in-eclipse-first-version" />
  <issued>2006-06-27T08:12:29Z</issued>
  <modified>2006-06-27T08:12:29Z</modified>
  <created>2006-03-03T16:37:59Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>apogee</dc:subject>
  
  
    <dc:subject>eclipse</dc:subject>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
  <summary type="text/html" mode="escaped">Milestone 1 reached

  I just have finished to develop a plugin integrating OpenOffice.org 2.0
  in Eclipse using the office bean. The plugin sources are available on nuxeo
  SVN public repository (see the attached link) and you can already use it.
  This plugin adds an editor for OpenOffice.org Writer, Calc, Impress, and
  Draw files for both 1.1.x and 2.0 versions.

  I could develop ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;h1&gt;Milestone 1 reached&lt;/h1&gt;

  &lt;p&gt;I just have finished to develop a plugin integrating OpenOffice.org 2.0
  in Eclipse using the office bean. The plugin sources are available on nuxeo
  SVN public repository (see the attached link) and you can already use it.
  This plugin adds an editor for OpenOffice.org Writer, Calc, Impress, and
  Draw files for both 1.1.x and 2.0 versions.&lt;/p&gt;

  &lt;p&gt;I could develop this plugin thanks to Haris Peco article, and Bogdan help
  on ClassLoaders. This plugin is delivered with an Ant build.xml file to
  generate an update site for the plugin. Users could be able to install the
  plugin through this simple Eclipse mechanism after having generated the
  update site archive or by using an HTTP update site (still has to be
  created).&lt;/p&gt;

  &lt;p&gt;For other technical informations, you can report to the plugin README or
  my previous articles on ClassLoaders. A small screenshot has been joint for your
  eyes.&lt;br /&gt;
  &lt;/p&gt;

  &lt;h1&gt;What's next ?&lt;/h1&gt;

  &lt;ul&gt;
   &lt;li&gt;Adding extensions for formulas and master documents&lt;/li&gt;

   &lt;li&gt;Adding wizards to easily create new OpenOffice.org files. This will be
   integrated to Apogee.&lt;/li&gt;

   &lt;li&gt;Correct an OpenOffice.org Bean bug: there is no way to terminate
   OpenOffice.org from the bean (issue &lt;a
   href="http://fr.openoffice.org/issues/show_bug.cgi?id=60473"&gt;#60473&lt;/a&gt;)&lt;/li&gt;

   &lt;li&gt;Listen to the document changes to add the '*' in the editor's
   name&lt;br /&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_03_03_openoffice-org-editor-in-eclipse-first-version</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_03_03_openoffice-org-editor-in-eclipse-first-version/atom?2006_03_03_openoffice-org-editor-in-eclipse-first-version"
        title="Edit Here - OpenOffice.org Editor in Eclipse: first version" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Embedding OOo and MSOffice in Eclipse (part 3)</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_02_24_embedding-ooo-and-msoffice-in-eclipse-part-3" />
  <issued>2006-06-27T08:12:37Z</issued>
  <modified>2006-06-27T08:12:37Z</modified>
  <created>2006-02-24T19:08:26Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>apogee</dc:subject>
  
  
    <dc:subject>eclipse</dc:subject>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
  <summary type="text/html" mode="escaped">Remember my problems to integrate OpenOffice.org Bean in an eclipse plugin ?
  I just have found a way to solve them (thanks to Bogdan and Romain Guy). The
  solution is to create a custom ClassLoader. Let us do it together:
   
   

  The ClassLoader
  The ClassLoader is able to create Class objects from their definition
  (.class file). We could create a simple OOoClassLoader from the
 ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">Remember my problems to integrate OpenOffice.org Bean in an eclipse plugin ?
  I just have found a way to solve them (thanks to Bogdan and Romain Guy). The
  solution is to create a custom ClassLoader. Let us do it together:&lt;br /&gt;
   &lt;br /&gt;
   

  &lt;h2&gt;The ClassLoader&lt;/h2&gt;
  The ClassLoader is able to create Class objects from their definition
  (.class file). We could create a simple OOoClassLoader from the
  URLClassLoader:&lt;br /&gt;
   &lt;br /&gt;
&lt;pre&gt;
public class OOoClassLoader extends URLClassLoader {&lt;br /&gt;
    public OOoClassLoader(URL[] urls) {&lt;br /&gt;
        super(urls);&lt;br /&gt;
    }&lt;br /&gt;
    @Override&lt;br /&gt;
    public Class&amp;lt;?&amp;gt; loadClass(String name) throws ClassNotFoundException {&lt;br /&gt;
        Class clazz;&lt;br /&gt;
        try {&lt;br /&gt;
           clazz = findClass(name);&lt;br /&gt;
        } catch (ClassNotFoundException e) {&lt;br /&gt;
           clazz = super.loadClass(name);&lt;br /&gt;
        }&lt;br /&gt;
        return clazz;&lt;br /&gt;
    }&lt;br /&gt;
    @Override&lt;br /&gt;
    protected String findLibrary(String libname) {   &lt;br /&gt;
        String libraryPath = super.findLibrary(libname);   &lt;br /&gt;
        String ooopath = "/opt/openoffice.org2.0/program/";&lt;br /&gt;
        File libraryHandle = new File(ooopath+"/lib"+libname+".so");   &lt;br /&gt;
        if (libraryHandle.exists() &amp;amp;&amp;amp; libraryHandle.canRead()) {&lt;br /&gt;
            libraryPath = libraryHandle.getAbsolutePath();&lt;br /&gt;
        }   &lt;br /&gt;
        return libraryPath;&lt;br /&gt;
    }&lt;br /&gt;
}
&lt;/pre&gt;
  In this ClassLoader, we will override the &lt;b&gt;findLibrary&lt;/b&gt; method to look
  for libraries in the &lt;i&gt;&amp;lt;OOO_HOME&amp;gt;/program&lt;/i&gt; directory before to
  look in the &lt;i&gt;java.library.path&lt;/i&gt;. The &lt;b&gt;loadClass&lt;/b&gt; method is
  overridden to make the ClassLoader look in it's URLs before asking its
  parent ClassLoader. This latter step has to be performed if the class you
  want to find is already defined in your classpath.&lt;br /&gt;
   &lt;br /&gt;
   

  &lt;h2&gt;Using the ClassLoader&lt;/h2&gt;
  Now we have to understand what the JVM do to find a class definition. Let us
  consider the following snippet:&lt;br /&gt;
&lt;pre&gt;
MyClass myClass = new MyClass();&lt;br /&gt;
&lt;/pre&gt;

  &lt;p&gt;The JVM will call a &lt;i&gt;ClassLoader.loadClass("MyClass")&lt;/i&gt; method on a
  particular ClassLoader. The only thing to remember is that the JVM will call
  the ClassLoader that loader the class containing the code. The JVM
  implements a ClassLoader in native code and loads the classes in the
  classpath: this is the &lt;i&gt;AppClassLoader.&lt;/i&gt; The class loader will first
  look if it has already loaded &lt;i&gt;MyClass,&lt;/i&gt; if not it will &lt;b&gt;delegate&lt;/b&gt;
  this task to it's parent class loader and finally will try to find the
  definition and load it and throw a &lt;i&gt;NoClassDefException&lt;/i&gt; if no
  definition can be found.&lt;i&gt;&lt;br /&gt;
  &lt;/i&gt;&lt;/p&gt;

  &lt;p&gt;Thus we will create a facade to perform the actions we want to do on the
  OpenOffice.org API and we will implement this facade in a OOoLoader jar
  which will make all the calls to OpenOffice.org API. The code below, is
  using the &lt;i&gt;OOoClassLoader&lt;/i&gt; this way, let us analyze it:&lt;/p&gt;

  &lt;ol&gt;
   &lt;li&gt;We add the urls to OpenOffice.org Jars we want to use.&lt;/li&gt;

   &lt;li&gt;We add the &lt;i&gt;OOoLoader.jar&lt;/i&gt; file containing the code handling the
   OpenOffice.org API&lt;/li&gt;

   &lt;li&gt;We load the &lt;i&gt;OOoFacade&lt;/i&gt; class defined in the &lt;i&gt;OOoLoader.jar&lt;/i&gt;
   file using our &lt;i&gt;OOoClassLoader&lt;/i&gt;. Note that if the loadClass method
   wasn't overridden, the &lt;i&gt;OOoFacade&lt;/i&gt; could have been already loaded by
   the &lt;i&gt;AppClassLoader&lt;/i&gt; if the &lt;i&gt;.class&lt;/i&gt; file is in the application
   classpath.&lt;br /&gt;
   &lt;/li&gt;

   &lt;li&gt;We call a &lt;i&gt;IOOoFacade&lt;/i&gt; to perform a call to OpenOffice.org API.
   The code of this class will be given some lines below.&lt;br /&gt;
   &lt;/li&gt;
  &lt;/ol&gt;
&lt;pre&gt;
public class Foo {&lt;br /&gt;
    public static void main(String[] args) {      &lt;br /&gt;
        try {&lt;br /&gt;
            URL[] urls = new URL[6];&lt;br /&gt;
            urls[0] = new URL("file:///opt/openoffice.org2.0/program/classes/juh.jar");&lt;br /&gt;
            urls[1] = new URL("file:///opt/openoffice.org2.0/program/classes/jurt.jar");&lt;br /&gt;
            urls[2] = new URL("file:///opt/openoffice.org2.0/program/classes/officebean.jar");&lt;br /&gt;
            urls[3] = new URL("file:///opt/openoffice.org2.0/program/classes/ridl.jar");&lt;br /&gt;
            urls[4] = new URL("file:///opt/openoffice.org2.0/program/classes/unoil.jar");&lt;br /&gt;
            File file = new File("OOoLoader.jar");&lt;br /&gt;
            urls[5] = new URL("file://"+file.getAbsolutePath());&lt;br /&gt;
            OOoClassLoader loader = new OOoClassLoader(urls);&lt;br /&gt;
            System.out.println("&amp;gt;&amp;gt;&amp;gt; new OOoClassLoader created");   &lt;br /&gt;
            IOOoFacade ooofacade = (IOOoFacade)loader.loadClass("OOoFacade").newInstance();  &lt;br /&gt;
            System.out.println("&amp;gt;&amp;gt;&amp;gt; Created Object type: " + ooofacade.getClass().getName());&lt;br /&gt;
            System.out.println("&amp;gt;&amp;gt;&amp;gt; OOoFacade created using the OOoClassLoader");&lt;br /&gt;
            ooofacade.bootstrap();&lt;br /&gt;
            System.out.println("&amp;gt;&amp;gt;&amp;gt; OpenOffice.org has been bootstrapped");&lt;br /&gt;
        } catch (Exception e) {&lt;br /&gt;
            System.err.println("&amp;gt;&amp;gt;&amp;gt; OpenOffice.org hasn't been bootstrapped");&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;/pre&gt;

  &lt;p&gt;Here is the code of the OOoFacade that handle the OpenOffice.org API. The
  bootstrap method just creates a Frame with the OpenOffice.org Bean
  inside.&lt;br /&gt;
  &lt;/p&gt;
&lt;pre&gt;
public class OOoFacade implements IOOoFacade {&lt;br /&gt;
    public OOoFacade (){&lt;br /&gt;
        System.out.println("&amp;gt;&amp;gt;&amp;gt; Created using: " +&lt;br /&gt;
                this.getClass().getClassLoader().getClass().getName());&lt;br /&gt;
    }&lt;br /&gt;
    public void bootstrap() throws Exception { &lt;br /&gt;
        Runtime.getRuntime().exec("/opt/openoffice.org2.0/program/soffice -nologo -nodefault -norestore -accept=pipe,name=chef_Office;urp;StarOffice.NamingService");&lt;br /&gt;
        Frame f = new Frame();&lt;br /&gt;
        final OOoBean b = new OOoBean();&lt;br /&gt;
        f.add(b, BorderLayout.CENTER);&lt;br /&gt;
        f.pack();&lt;br /&gt;
        f.setSize(800,600);&lt;br /&gt;
        f.setVisible(true);&lt;br /&gt;
        b.loadFromURL("private:factory/swriter", null);&lt;br /&gt;
        f.validate();&lt;br /&gt;
        f.addWindowListener(new WindowAdapter(){&lt;br /&gt;
            public void windowClosing(java.awt.event.WindowEvent e) {&lt;br /&gt;
                try {&lt;br /&gt;
                    // terminate the OpenOffice.org instance properly&lt;br /&gt;
                    XDesktop desktop = b.getOOoDesktop();&lt;br /&gt;
                    desktop.terminate();&lt;br /&gt;
                    // Stop the OOo connection between the bean and OOo&lt;br /&gt;
                    b.stopOOoConnection();&lt;br /&gt;
                    System.exit(0);&lt;br /&gt;
                } catch (Exception ex) {&lt;br /&gt;
                    ex.printStackTrace();&lt;br /&gt;
                    System.exit(1);&lt;br /&gt;
                }&lt;br /&gt;
            };&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;/pre&gt;

  &lt;p&gt;Now there is only to put this code and ideas into a well-packaged Eclipse
  plugin.&lt;br /&gt;
  &lt;/p&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_02_24_embedding-ooo-and-msoffice-in-eclipse-part-3</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_02_24_embedding-ooo-and-msoffice-in-eclipse-part-3/atom?2006_02_24_embedding-ooo-and-msoffice-in-eclipse-part-3"
        title="Edit Here - Embedding OOo and MSOffice in Eclipse (part 3)" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">The OpenOffice.org development plugin for Eclipse is still alive</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_02_19_the-openoffice-org-development-plugin-for-eclipse-is-still-alive" />
  <issued>2006-06-27T08:12:46Z</issued>
  <modified>2006-06-27T08:12:46Z</modified>
  <created>2006-02-19T14:50:12Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
  <summary type="text/html" mode="escaped">Version 1.0.2 released

  This new version contains a few changes with the previous one, but will
  be quite important for users. The OpenOffice.org development plugin for
  Eclipse took some lessons from my previous experience of UNO and the
  URE:

  
   
    All the files generated from IDL files are in a build directory
   

   
    The generated UNO-IDL project classpath has ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;h2&gt;Version 1.0.2 released&lt;/h2&gt;

  &lt;p&gt;This new version contains a few changes with the previous one, but will
  be quite important for users. The OpenOffice.org development plugin for
  Eclipse took some lessons from my previous experience of UNO and the
  URE:&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;
    &lt;p&gt;All the files generated from IDL files are in a build directory&lt;/p&gt;
   &lt;/li&gt;

   &lt;li&gt;
    &lt;p&gt;The generated UNO-IDL project classpath has been extended with&lt;/p&gt;
   &lt;/li&gt;

   &lt;li
   style="list-style-type: none; list-style-image: none; list-style-position: outside;"&gt;
    &lt;ul&gt;
     &lt;li&gt;
      &lt;p&gt;JRE libraries (was forgotten)&lt;/p&gt;
     &lt;/li&gt;

     &lt;li&gt;
      &lt;p&gt;build directory with the generated class files&lt;/p&gt;
     &lt;/li&gt;
    &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;The other main changes are concerning the plugin development. The plugin
  online help has now a small structure and the Javadoc API will be integrated
  into this help. Now the documentation have to be written and the Javadoc API
  completed to help new developers.&lt;/p&gt;

  &lt;h2&gt;Creating an Eclipse update site&lt;/h2&gt;

  &lt;p&gt;This new version comes with a new build organization: there is no more
  need for Eclipse feature and site projects to produce an update site. There
  is only to execute the ant build.xml file to generate it. Afterwards, just
  copy the following file and unzip it to get your update site.&lt;br /&gt;
  &lt;/p&gt;
&lt;pre&gt;
bin/ant/ooeclipseintegration_site.zip&lt;br /&gt;
&lt;/pre&gt;

  &lt;p&gt;For example, to create the &lt;i&gt;http://sample.org/ooeclipseintegration&lt;/i&gt;
  update site, we will unzip the file on the server and put an
  '&lt;i&gt;ooeclipseintegration&lt;/i&gt;' alias to the directory where we unzipped the
  file.&lt;/p&gt;

  &lt;p&gt;Before executing the ant script, you have to change some properties to
  make it fit to your platform:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;property name="eclipse.home" value="/path/to/eclipse/directory" /&amp;gt;&lt;br /&gt;
&amp;lt;property name="openoffice.home" value="/path/to/openoffice.org2.0/directory" /&amp;gt;&lt;br /&gt;
&lt;/pre&gt;

  &lt;h2&gt;What could be done...&lt;/h2&gt;

  &lt;p&gt;With this script, it would be great to have a page on the OpenOffice.org
  API project, to explain the different steps to install the plugin an provide
  an update site... This would give more visibility to the project and it
  would be easier for users to remember an url like &lt;u
  style="color: rgb(0, 0, 153);"&gt;&lt;i&gt;http://api.openoffice.org/ooeclipseintegration&lt;/i&gt;&lt;/u&gt;
  instead of searching the web in order to find the plugin.&lt;/p&gt;

  &lt;h2&gt;The next steps&lt;/h2&gt;

  &lt;p&gt;Now, there is still many features to add to this plugin. For example, URE
  support, C++ and python languages supports, some other wizards, integrating
  the skeletonmaker. However the most urgent to do now is to improve the
  plugin to help other people to help developping with me, which means:&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;
    &lt;p&gt;Reviewing all the Javadoc API comments and complete them&lt;/p&gt;
   &lt;/li&gt;

   &lt;li&gt;
    &lt;p&gt;Filling the online help pages that have just been created&lt;/p&gt;
   &lt;/li&gt;

   &lt;li
   style="list-style-type: none; list-style-image: none; list-style-position: outside;"&gt;
    &lt;ul&gt;
     &lt;li&gt;
      &lt;p&gt;a user manual&lt;/p&gt;
     &lt;/li&gt;

     &lt;li&gt;
      &lt;p&gt;reiviewing the cheatsheets and adding other ones&lt;/p&gt;
     &lt;/li&gt;
    &lt;/ul&gt;
   &lt;/li&gt;

   &lt;li&gt;
    &lt;p&gt;Refactoring the UnoIdlProject class to easily add a new language&lt;/p&gt;
   &lt;/li&gt;

   &lt;li
   style="list-style-type: none; list-style-image: none; list-style-position: outside;"&gt;
    &lt;ul&gt;
     &lt;li&gt;
      &lt;p&gt;An extension point&lt;/p&gt;
     &lt;/li&gt;

     &lt;li&gt;
      &lt;p&gt;Fragments for new languages&lt;/p&gt;
     &lt;/li&gt;
    &lt;/ul&gt;
   &lt;/li&gt;

   &lt;li&gt;
    &lt;p&gt;The french translation as an example for other ones&lt;/p&gt;
   &lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;&lt;b&gt;&lt;i&gt;So, don't be too impatient, this will be done in a indetermined
  delay ;)&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
  &lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_02_19_the-openoffice-org-development-plugin-for-eclipse-is-still-alive</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_02_19_the-openoffice-org-development-plugin-for-eclipse-is-still-alive/atom?2006_02_19_the-openoffice-org-development-plugin-for-eclipse-is-still-alive"
        title="Edit Here - The OpenOffice.org development plugin for Eclipse is still alive" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Embedding OOo and MSOffice in Eclipse (part 2)</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_02_17_embedding-ooo-and-msoffice-in-eclipse-part-2" />
  <issued>2006-06-27T08:12:53Z</issued>
  <modified>2006-06-27T08:12:53Z</modified>
  <created>2006-02-17T17:27:32Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>apogee</dc:subject>
  
  
    <dc:subject>eclipse</dc:subject>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
  <summary type="text/html" mode="escaped">Since my last post, I tried to create an Eclipse plugin embedding OOo and
  MS Office. However I had some surprises: a happy and a bad one.

  
   
    The happy surprise: by using Eclipse on a windows machine with MS
    Office, I discovered that Eclipse already has an editor to open OLE
    objects. Implemented in the org.eclipse.ui.win32 fragment, it's not
    directly usable: it ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;p&gt;Since my last post, I tried to create an Eclipse plugin embedding OOo and
  MS Office. However I had some surprises: a happy and a bad one.&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;
    &lt;p&gt;The happy surprise: by using Eclipse on a windows machine with MS
    Office, I discovered that Eclipse already has an editor to open OLE
    objects. Implemented in the org.eclipse.ui.win32 fragment, it's not
    directly usable: it belongs to an Eclipse internal package. The only thing
    it needs is a IEditorInput returning an IFile.&lt;/p&gt;
   &lt;/li&gt;

   &lt;li&gt;&lt;p&gt;The bad surprise: to use OpenOffice.org in a plugin, I need to add some
   OpenOffice.org JARS to the classpath. This is quite tricky to workaround
   and should be solved with a custom ClassLoader. See the attached links for
   some ideas on this topic. I still wonder how Ubion get it work in it's
   plugin...&lt;/p&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_02_17_embedding-ooo-and-msoffice-in-eclipse-part-2</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_02_17_embedding-ooo-and-msoffice-in-eclipse-part-2/atom?2006_02_17_embedding-ooo-and-msoffice-in-eclipse-part-2"
        title="Edit Here - Embedding OOo and MSOffice in Eclipse (part 2)" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Embedding OOo and MSOffice in Eclipse (part 1)</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_02_09_embedding-ooo-and" />
  <issued>2006-06-27T08:13:01Z</issued>
  <modified>2006-06-27T08:13:01Z</modified>
  <created>2006-02-09T17:37:49Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>eclipse</dc:subject>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
  <summary type="text/html" mode="escaped">These days I'm trying to use the OOoBean to use OpenOffice.org in Eclipse
  windows. A link to the ubion ORS plugin is attached to this article. There
  are some problems using this plugin, that is:

  
   it works very well on KDE and Windows, but I can't make it work on Xfce
   windowing system. this seems to be due to some Gtk issues... I have to
   investigate a bit more on this ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;p&gt;These days I'm trying to use the OOoBean to use OpenOffice.org in Eclipse
  windows. A link to the ubion ORS plugin is attached to this article. There
  are some problems using this plugin, that is:&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;it works very well on KDE and Windows, but I can't make it work on Xfce
   windowing system. this seems to be due to some Gtk issues... I have to
   investigate a bit more on this topic.&lt;/li&gt;

   &lt;li&gt;the plugin sources downloadable on the ubion ORS website aren't
   correct: there are still some work to do there&lt;/li&gt;

   &lt;li&gt;the OpenOffice.org bootstrap isn't launched as a background Job: this
   takes a too long time for the user and has to be corrected&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;However the MS Office integration is much easier on Windows thanks to
  Eclipse OLEFrame class allowing programmer to include some OLE objects in
  SWT windows. This works fine, but is only valid for Windows platform.&lt;/p&gt;

  &lt;p&gt;The next problem is how to launch MS Office on MacOS ?&lt;/p&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_02_09_embedding-ooo-and</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_02_09_embedding-ooo-and/atom?2006_02_09_embedding-ooo-and"
        title="Edit Here - Embedding OOo and MSOffice in Eclipse (part 1)" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Handling GStreamer throught UNO</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_01_23_handling-gstreamer" />
  <issued>2006-06-27T08:13:15Z</issued>
  <modified>2006-06-27T08:13:15Z</modified>
  <created>2006-01-23T10:19:05Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
  <summary type="text/html" mode="escaped">Big news, I have a first working version of an UNO component to handle
  GStreamer from UNO code. This will allow using gstreamer features within UNO
  framework such as macro but also Java, c++ or pyUNO programs.
   
   This component has many advantages for OpenOffice.org: it uses a free
  multimedia framework, and provide an API. This API has to be extended and
  doesn't give access to ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">Big news, I have a first working version of an UNO component to handle
  GStreamer from UNO code. This will allow using gstreamer features within UNO
  framework such as macro but also Java, c++ or pyUNO programs.&lt;br /&gt;
   &lt;br /&gt;
   This component has many advantages for OpenOffice.org: it uses a free
  multimedia framework, and provide an API. This API has to be extended and
  doesn't give access to every GStreamer feature.&lt;br /&gt;
   &lt;br /&gt;
   The component is described on my personnal website where you can download
  the OpenOffice.org package to install as well as a sample Basic macro
  playing an Ogg file.&lt;br /&gt;
   &lt;br /&gt;
   &lt;i&gt;Of course this is still under development, and may not work in some
  cases. However, every feedback is welcome.&lt;br /&gt;
  &lt;br /&gt;
  &lt;/i&gt; Many thanks to Laurent Godard who help me to debug and test the
  component&lt;i&gt;&lt;br /&gt;
  &lt;/i&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2006_01_23_handling-gstreamer</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2006_01_23_handling-gstreamer/atom?2006_01_23_handling-gstreamer"
        title="Edit Here - Handling GStreamer throught UNO" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Creating an URE application in C++</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2005_12_07_creating-an-ure" />
  <issued>2006-06-27T08:13:24Z</issued>
  <modified>2006-06-27T08:13:24Z</modified>
  <created>2005-12-07T08:43:35Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
  <summary type="text/html" mode="escaped">I just have finished to write a tutorial on how to create a simple C++
  application based on the URE. This paper is written for URE and UNO
  beginners and might be missing some important informations.
   
   I would really appreciate every return to modify this tutorial and make it
  better: it may be a tool to spread UNO around the world. The tutorial is
  refering to an article I wrote ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">I just have finished to write a tutorial on how to create a simple C++
  application based on the URE. This paper is written for URE and UNO
  beginners and might be missing some important informations.&lt;br /&gt;
   &lt;br /&gt;
   I would really appreciate every return to modify this tutorial and make it
  better: it may be a tool to spread UNO around the world. The tutorial is
  refering to an article I wrote earlier: " &lt;a
  href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2005_10_29_uno-ure-exercise"&gt;
  A UNO/URE exercise&lt;/a&gt;". See the attached link to get the tutorial
  itself.&lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2005_12_07_creating-an-ure</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2005_12_07_creating-an-ure/atom?2005_12_07_creating-an-ure"
        title="Edit Here - Creating an URE application in C++" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">OOEclipse Integration isn't dead</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2005_11_29_ooeclipse-integration" />
  <issued>2006-06-27T08:13:38Z</issued>
  <modified>2006-06-27T08:13:38Z</modified>
  <created>2005-11-29T12:33:17Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>eclipse</dc:subject>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
  <summary type="text/html" mode="escaped">A new version
  
  I have released a new version (1.0.1) of the Eclipse plugin to support
  OpenOffice.org development. Here are the changes from the previous
  release:
   

  
   a new UNO-IDL interface wizard

   the new UNO project wizard was extended with the new service wizard as
   a second page

   definition of default values in the wizards

   build bug fixed (was just a ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;h2&gt;A new version&lt;br /&gt;
  &lt;/h2&gt;
  I have released a new version (1.0.1) of the Eclipse plugin to support
  OpenOffice.org development. Here are the changes from the previous
  release:&lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;a new UNO-IDL interface wizard&lt;/li&gt;

   &lt;li&gt;the new UNO project wizard was extended with the new service wizard as
   a second page&lt;/li&gt;

   &lt;li&gt;definition of default values in the wizards&lt;/li&gt;

   &lt;li&gt;build bug fixed (was just a workspace refreshing problem)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;b&gt;Important:&lt;/b&gt; &lt;i&gt;The plugin doesn't work with the gij and gcj&lt;br /&gt;
  &lt;/i&gt; 

  &lt;h2&gt;Getting the new version&lt;/h2&gt;

  &lt;ul&gt;
   &lt;li&gt;Sources available on the api/ooeclipseintegration CVS&lt;/li&gt;

   &lt;li&gt;Add http://cedric.bosdonnat.free.fr/ooeclipseintegration as an Eclipse
   update site.&lt;br /&gt;
   &lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2&gt;What's next ?&lt;/h2&gt;

  &lt;ul&gt;
   &lt;li&gt;C++ language support: This mainly includes the cppumaker use&lt;/li&gt;

   &lt;li&gt;detection of the Eclipse available plugins to configure the
   wizards/li&amp;gt;&lt;/li&gt;

   &lt;li&gt;complete the code documentation and the user help&lt;/li&gt;

   &lt;li&gt;update of the Cheat Sheets&lt;/li&gt;

   &lt;li&gt;fix some configuration bugs.&lt;/li&gt;
  &lt;/ul&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2005_11_29_ooeclipse-integration</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2005_11_29_ooeclipse-integration/atom?2005_11_29_ooeclipse-integration"
        title="Edit Here - OOEclipse Integration isn't dead" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">MS Office XML format not so clear</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2005_11_08_ms-office-xml-format-no" />
  <issued>2006-06-27T08:13:47Z</issued>
  <modified>2006-06-27T08:13:47Z</modified>
  <created>2005-11-08T07:23:15Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
  <summary type="text/html" mode="escaped">Yesterday, in a meeting at school, I could clearly see what could prevent us
  to consider MS Office XML file as open.

  
   There is a processing directive at the beginning of the Word document
   saying: "it's a word document". This could be interpreted by the XML
   parser to do what it want's wihtout we know it.

   To our surprise, there are some XML namespaces where the URN is
   ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">Yesterday, in a meeting at school, I could clearly see what could prevent us
  to consider MS Office XML file as open.&lt;br /&gt;

  &lt;ul&gt;
   &lt;li&gt;There is a processing directive at the beginning of the Word document
   saying: &lt;i&gt;"it's a word document"&lt;/i&gt;. This could be interpreted by the XML
   parser to do what it want's wihtout we know it.&lt;/li&gt;

   &lt;li&gt;To our surprise, there are some XML namespaces where the URN is
   &lt;i&gt;no&lt;/i&gt;. This means obviously that the format is not fully known by a
   customer.&lt;/li&gt;
  &lt;/ul&gt;
  I have an answer now for people saying me that MS Office XML is open...
  &lt;b&gt;XML doesn't necessary mean open !&lt;/b&gt;&lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2005_11_08_ms-office-xml-format-no</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2005_11_08_ms-office-xml-format-no/atom?2005_11_08_ms-office-xml-format-no"
        title="Edit Here - MS Office XML format not so clear" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">A UNO-URE exercise</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2005_10_29_uno-ure-exercise" />
  <issued>2006-06-27T08:14:11Z</issued>
  <modified>2006-06-27T08:14:11Z</modified>
  <created>2005-10-29T20:32:45Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
  <summary type="text/html" mode="escaped">I just have completed to write and document a small exercise to learn the
  basis for C++ URE based applications. Just get the joint archive and look at
  the README file for the instructions.
   In the archive you will find: the correction, the question and the makefile
  for the build. In a few words, the exercise consists in writing the
  specifications and implementation of an ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">I just have completed to write and document a small exercise to learn the
  basis for C++ URE based applications. Just get the joint archive and look at
  the README file for the instructions.&lt;br /&gt;
   In the archive you will find: the correction, the question and the makefile
  for the build. In a few words, the exercise consists in writing the
  specifications and implementation of an application using a Banker and a
  Customer asking for money. Completing the exercise without looking at the
  answer takes approximatly working 2 or 3 days ;)&lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2005_10_29_uno-ure-exercise</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2005_10_29_uno-ure-exercise/atom?2005_10_29_uno-ure-exercise"
        title="Edit Here - A UNO-URE exercise" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">UNO Component for URE test.</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2005_10_18_uno-component-for-ure" />
  <issued>2006-06-27T08:14:20Z</issued>
  <modified>2006-06-27T08:14:20Z</modified>
  <created>2005-10-18T14:56:15Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
  I have written an example of URE application just saying Hello URE world in
  two languages: C++ and Java.
   To run this example you will need an UNIX environment, that is to say a
  UNIX or an emulation like cygwin. It uses the following tools:
   

  
   GNU Make

   G++ 3.3

   OpenOffice.org 2.0 SDK

   URE installed in /opt/openoffice.org/ure/
  

  Howto run the example ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  I have written an example of URE application just saying Hello URE world in
  two languages: C++ and Java.&lt;br /&gt;
   To run this example you will need an UNIX environment, that is to say a
  UNIX or an emulation like cygwin. It uses the following tools:&lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;GNU Make&lt;/li&gt;

   &lt;li&gt;G++ 3.3&lt;/li&gt;

   &lt;li&gt;OpenOffice.org 2.0 SDK&lt;/li&gt;

   &lt;li&gt;URE installed in /opt/openoffice.org/ure/&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2&gt;Howto run the example ?&lt;/h2&gt;
  You just have to launch &lt;b&gt;make&lt;/b&gt; to build the component. Launch
  &lt;b&gt;unotest&lt;/b&gt; to run the URE starting with the C++ implementation and the
  Java one. To clear the directory, use &lt;b&gt;make purge&lt;/b&gt;.&lt;br /&gt;
   

  &lt;h2&gt;How does it work ?&lt;br /&gt;
  &lt;/h2&gt;
  This example is the one given in &lt;a
  href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2005_10_10_my-first-ure-component"&gt;
  this post of my blog&lt;/a&gt;. It has been completed by a C++ implementation. The
  principle in C++ is the same than in Java: the major problem is the
  compilation chain. You can study it by reading the content of the makefile
  contained in the archive. To understand the makefile syntax, please refer to
  &lt;a
  href="http://theory.uwinnipeg.ca/localfiles/infofiles/make/make_5.html#SEC4"&gt;
  this page&lt;/a&gt;.&lt;br /&gt;
   &lt;br /&gt;
 </content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2005_10_18_uno-component-for-ure</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2005_10_18_uno-component-for-ure/atom?2005_10_18_uno-component-for-ure"
        title="Edit Here - UNO Component for URE test." />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">A very nice summer for OpenOffice.org</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2005_10_10_very-nice-summer-for" />
  <issued>2006-06-27T08:14:29Z</issued>
  <modified>2006-06-27T08:14:29Z</modified>
  <created>2005-10-10T12:23:32Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>eclipse</dc:subject>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
  During my Summer I was selected in the Google Summer of Code to
  produce a Eclipse plugin that will help OpenOffice.org developpers in their
  task. This project is very wide and could be expanded with a lot of new
  features.
   
   The initial goal is to provide a tool for new OOo developpers, with code
  generation, UNOIDL syntax highlighting, OpenOffice.org or URE and SDK
  ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  During my Summer I was selected in the &lt;a
  href="http://code.google.com/summerofcode.html"&gt;Google Summer of Code&lt;/a&gt; to
  produce a Eclipse plugin that will help OpenOffice.org developpers in their
  task. This project is very wide and could be expanded with a lot of new
  features.&lt;br /&gt;
   &lt;br /&gt;
   The initial goal is to provide a tool for new OOo developpers, with code
  generation, UNOIDL syntax highlighting, OpenOffice.org or URE and SDK
  configuration and of course many creation wizards. At this point, there are
  a few basic features added, however there is still many work to do. &lt;br /&gt;
   &lt;br /&gt;
   

  &lt;h2&gt;Where to find it ?&lt;/h2&gt;
  You can find the sources on the &lt;a
  href="http://api.openoffice.org/source/browse/api/ooeclipseintegration/"&gt;OpenOffice.org
  api project CVS, module ooeclipseintegration&lt;/a&gt;. I am trying to build an
  update site on my own website... but it is still under construction. The
  plugin archive can be found in the &lt;b&gt;build&lt;/b&gt; directory. Let me know if
  your feelings about this piece of work, but do never forget that it has to
  be continued.&lt;br /&gt;
   &lt;br /&gt;
 </content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2005_10_10_very-nice-summer-for</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2005_10_10_very-nice-summer-for/atom?2005_10_10_very-nice-summer-for"
        title="Edit Here - A very nice summer for OpenOffice.org" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">My first URE Component in Java</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2005_10_10_my-first-ure-component" />
  <issued>2006-06-27T08:14:37Z</issued>
  <modified>2006-06-27T08:14:37Z</modified>
  <created>2005-10-10T09:34:03Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>cbosdonnat</name>
  </author>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
  How to create a new URE based application ? The documentation is quite
  hard to find, but the main important thing is: create a UNO component
  implementing the com.sun.star.lang.XMain interface. This one will contain a
  method run() I'll explain how to create a "Hello URE World"
  application.

  The project will be organized in the following way:

  
   idl diretory containing ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  &lt;p&gt;How to create a new URE based application ? The documentation is quite
  hard to find, but the main important thing is: create a UNO component
  implementing the com.sun.star.lang.XMain interface. This one will contain a
  method &lt;i&gt;run()&lt;/i&gt; I'll explain how to create a "Hello URE World"
  application.&lt;/p&gt;

  &lt;p&gt;The project will be organized in the following way:&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;&lt;i style="color: rgb(255, 0, 0);"&gt;idl&lt;/i&gt; diretory containing the
   application UNOIDL specifications&lt;/li&gt;

   &lt;li&gt;&lt;i style="color: rgb(255, 0, 0);"&gt;source&lt;/i&gt; directory containing the
   implementation of the UNOIDL types&lt;/li&gt;

   &lt;li&gt;&lt;i style="color: rgb(255, 0, 0);"&gt;program&lt;/i&gt; directory which will
   contain the application registries and libraries&lt;/li&gt;

   &lt;li&gt;&lt;i style="color: rgb(255, 0, 0);"&gt;MANIFEST.MF&lt;/i&gt; file which will
   describe the registration class of the component&lt;/li&gt;

   &lt;li&gt;&lt;i style="color: rgb(255, 0, 0);"&gt;Makefile&lt;/i&gt; file to make the build
   much easier&lt;/li&gt;

   &lt;li&gt;&lt;i&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;unotest&lt;/span&gt;&lt;/i&gt; file to
   launch the newly created application&lt;br /&gt;
   &lt;/li&gt;
  &lt;/ul&gt;

  &lt;h1&gt;UNOIDL file definition&lt;/h1&gt;
  The file &lt;b style="color: rgb(255, 0, 0);"&gt;idl/org/unotest/Main.idl&lt;/b&gt; will
  describe a simple &lt;i&gt;service org.unotest.Main&lt;/i&gt; exporting the XMain
  interface this gives the following code:&lt;br /&gt;
   &lt;br /&gt;
&lt;pre&gt;
   module org { module unotest {
       service Main: com::sun::star::lang::XMain {
         create ();
       }
   }; };
&lt;/pre&gt;
  Note that this service is a new style one: defining constructors and
  exporting a single interface.&lt;br /&gt;
   

  &lt;h1&gt;Java implementation&lt;/h1&gt;

  &lt;p&gt;Now just create a &lt;b
  style="color: rgb(255, 0, 0);"&gt;org.unotest.comp.MyMain&lt;/b&gt; Java class in the
  &lt;b style="color: rgb(255, 0, 0);"&gt;source/org/unotest/comp/MyMain.java&lt;/b&gt;
  file. This class will implement the following three methods:&lt;br /&gt;
  &lt;/p&gt;
&lt;pre&gt;
      public int run (String[] arguments) {
         // Printing Hello URE World ;) and exit
         System.out.println("Hello URE World ;)");
         return 0;
      }
&lt;/pre&gt;

  &lt;p&gt;&amp;nbsp; __getServiceFactory(...) and __writeRegistryServiceInfo(...) are
  used for the component registration. They implementation is fully described
  in the &lt;a
  href="http://api.openoffice.org/docs/DevelopersGuide/Components/Components.htm#1+5+Simple+Component+in+Java"&gt;
  chapters 4.5.3 and 4.5.4 of the OpenOffice.org Developer Guide&lt;/a&gt;&lt;br /&gt;
  &lt;/p&gt;

  &lt;h1&gt;Generation of the component&lt;/h1&gt;
  The component generation works like the OpenOffice.org components
  generation, however there are some tricky things to know:&lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;&lt;b style="color: rgb(255, 0, 0);"&gt;use the URE regmerge and regcomp
   tools&lt;/b&gt;. Otherwise you will get some Loader exceptions when trying to use
   regcomp on your component.&lt;/li&gt;

   &lt;li&gt;do not put your class files directly in your current directory: this is
   a new issue that will be corrected. If you do not respect this advice, the
   regcomp tool will use the class files in your current directory before the
   one in your jar file.&lt;/li&gt;
  &lt;/ul&gt;
  In our unotest case, the build instructions are written in the Makefile. It
  should use the following tools:&lt;br /&gt;
   

  &lt;ol&gt;
   &lt;li&gt;idlc -Ourd -I$(SDK_HOME}/idl idl/org/unotest/Main.idl&lt;/li&gt;

   &lt;li&gt;$(URE_HOME)/bin/regmerge program/types.rdb UCR urd/Main.urd&lt;/li&gt;

   &lt;li&gt;javamaker -Torg.unotest.Main -BUCR program/types.rdb
   -X$(URE_HOME)/share/misc/services.rdb
   -X$(URE_HOME)/share/misc/types.rdb&lt;/li&gt;

   &lt;li&gt;javac -d . -cp $(CLASSPATH) source/org/unotest/comp/MyMain.java&lt;/li&gt;

   &lt;li&gt;jar cfm program/unotest.uno.jar MANIFEST.MF
   org/unotest/compMyMain.class org/unotest/Main.class&lt;/li&gt;

   &lt;li&gt;rm -Rf org&lt;/li&gt;

   &lt;li&gt;$(URE_HOME)/bin/regcomp -register -br $(URE_HOME)/share/misc/types.rdb
   -br $(URE_HOME)/share/misc/services.rdb -r program/services.rdb -c
   file://$(PWD)/program/unotest.uno.jar -classpath $(CLASSPATH)&lt;/li&gt;
  &lt;/ol&gt;
  What will these commands do ?&lt;br /&gt;
   

  &lt;ol&gt;
   &lt;li&gt;Compile your UNOIDL specification to create the urd/Main.urd
   registry&lt;br /&gt;
   &lt;/li&gt;

   &lt;li&gt;Merge the generated urd file in the program/types.rdb registry&lt;/li&gt;

   &lt;li&gt;Create the org/unotest/Main.class file&lt;/li&gt;

   &lt;li&gt;Compile your java implementation of the service&lt;/li&gt;

   &lt;li&gt;Create the jar file of the component&lt;/li&gt;

   &lt;li&gt;Delete the unused class files to avoid problems with regcomp&lt;/li&gt;

   &lt;li&gt;Register the component in the URE&lt;/li&gt;
  &lt;/ol&gt;

  &lt;h1&gt;Launching the application&lt;/h1&gt;
  In the unotest file, you just have to put a call to the uno tool contained
  in the URE:&lt;br /&gt;
&lt;pre&gt;
   $URE_HOME/bin/uno -c org.unotest.comp.MyMain \
                     -l file://`pwd`/program/unotest.uno.jar \
                     -ro program/services.rdb \
                     -ro program/types.rdb \
                     -ro $URE_HOME/share/misc/services.rdb \
                     -ro $URE_HOME/share/misc/types.rdb
&lt;/pre&gt;
  Thus when launching the unotest file, you will launch the URE with you
  org.unotest.comp.MyMain as the main class to load at the beginning. This
  will print you the expected "&lt;i&gt;Hello URE World ;)&lt;/i&gt;"&lt;br /&gt;
   &lt;br /&gt;
   The next step is to do the same with a C++ component... but I'm still
  working on it.&lt;i&gt;&lt;br /&gt;
  &lt;/i&gt;
 </content>

  <id>tag:blogs.nuxeo.com:sections:blogs:cedric_bosdonnat:2005_10_10_my-first-ure-component</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/cedric_bosdonnat/2005_10_10_my-first-ure-component/atom?2005_10_10_my-first-ure-component"
        title="Edit Here - My first URE Component in Java" />
</entry>

  

</feed>
