On Dec 18, 2009, at 10:14 AM, Vincent Massol wrote:

> Hi Asiri,
>
> On Oct 26, 2009, at 6:28 AM, Asiri Rathnayake wrote:
>
>> Hello Devs,
>>
>> After few discussions I have revised the new officeimporter API to  
>> take into
>> account the use of DocumentName instead of plain strings for  
>> representing
>> document names. I'll repeat the details of the previous proposal  
>> with the
>> new changes applied:
>>
>> Currently we have the following officeimporter API:
>>
>> <code>
>> OfficeImporter::importStream(InputStream is, String documentFormat,  
>> String
>> targetDocumentName, Map params):void
>> OfficeImporter::importAttachment(String documentName, String  
>> attachmentName,
>> Map params):String
>> </code>
>>
>> Problems with this API:
>>
>> * Loosely typed (params, document names)
>>
>> * Both of the above methods perform almost the same task.
>>
>> * Customizing the import process is implemented in a hackish way.  
>> (not
>> visisble on the API)
>>
>>
>> The new API proposed looks like below:
>>
>> <code>
>> OfficeImporter::officeToXHTML(byte[] officeFileData, DocumentName
>> referenceDocument, boolean filterStyles):XHTMLOfficeDocument
>> OfficeImporter::xhtmlToXDOM(XHTMLOfficeDocument
>> xhtmlOfficeDocument):XDOMOfficeDocument
>> OfficeImporter::officeToXDOM(byte[] officeFileData, DocumentName
>> referenceDocument, boolean filterStyles):XDOMOfficeDocument
>> OfficeImporter::buildPresentation(byte[]  
>> officeFileData):XDOMOfficeDocument
>> OfficeImporter::splitImport(XDOMOfficeDocument xdomOfficeDocument,  
>> int[]
>> headingLevelsToSplit, NamingCriterion namingCriterion, DocumentName
>> baseDocumentName):Map<TargetPageDescriptor, XDOMOfficeDocument>
>> </code>
>
> I don't like too much this API because it mixes several things that  
> are different.
>
> All the To methods seem to be of the domain of the conversion to me  
> and are not related to having a connected openoffice server running  
> and not related to having documents. For me they should be in a  
> Converter interface.
> This would allow to use them in various contexts.
>
> So I'd see 2 interfaces at the top level:
> - OfficeConverter: no relation with a running OO server or with the  
> XWiki Model
> - OfficeImporter: connect to the running OO, get the data, use the  
> OfficeConverter to perform conversion, knows about XWiki Model to  
> save the result in Wiki pages.
>
> + the notion of Transformation (or Split)  to split a  
> XDOMOfficeDocument into several.
>
> In OfficeImporter I'd see only 1 method:
> import(Source (whatever object you use to represent the filename to  
> import), Target (whatever object you use to represent the target  
> location))
> And in Target I'd add the possibility to pass a Transformation or  
> maybe simply have a SplittingTarget that extends Target and adds  
> splitting.
>
> WDYT?

Some corrections after discussing with Asiri:
- it seems what Asiri is proposing is a Velocity API, ie for usage of  
the importer from velocity, not from Java
- the To methods do need the OO server running.

Thanks
-Vincent

> Thanks
> -Vincent
>
>> As you can see, these methods are more granular and the  
>> responsibilities are
>> well defined. Customizing the import process can be done from the  
>> client
>> code. For an example:
>>
>> 1. Make the initial import from office to XHTMLOfficeDocument -
>> OfficeImporter::officeToXHTML()
>>
>> 2. Perform customizations on the XHTMLOfficeDocument - w3c DOM
>> manipulations.
>>
>> 3. Import the XHTMLOfficeDocument into XDOMOfficeDocument -
>> OfficeImporter::xhtmlToXDOM()
>>
>> 4. Perform customizations on the XDOMOfficeDocument (XDOM) - XDOM
>> manipulations.
>>
>> 5. Split the XDOMOfficeDocument into multiple XDOMOfficeDocument  
>> instances -
>> OfficeImporter::splitImport()
>>
>> 6. Perform customizations on these child XDOMOfficeDocument  
>> instances - XDOM
>> manipulations.
>>
>> 7. Render the XDOMOfficeDocument instances & save them into wiki  
>> pages -
>> XWiki rendering operations.
>>
>> I think this interface will make it easy to extend & maintain  
>> officeimporter
>> functionality in the future.
>>
>> Along with this, I would also like to refactor the xwiki- 
>> refactoring module
>> a bit to get rid of string based document names from it.
>>
>>
>> This whole refactoring operation would take approximately one day to
>> complete. And since this operation is not adding any new features,  
>> I think
>> it can be committed on both trunk and 2.0 branch.
>>
>> Here's my +1 to all of above.
>>
>> Thanks.
>>
>> - Asiri

_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to