On Sun, Jan 10, 2010 at 05:57, Arun Reddy <[email protected]> wrote:
> Hi,
>
> On Sun, Jan 10, 2010 at 4:04 AM, Thomas Mortagne
> <[email protected]>wrote:
>
>> On Sat, Jan 9, 2010 at 06:11, Arun Reddy <[email protected]> wrote:
>> > Hi,
>> >
>> > On Fri, Jan 8, 2010 at 4:58 PM, Thomas Mortagne
>> > <[email protected]>wrote:
>> >
>> >> On Wed, Jan 6, 2010 at 20:22, Arun Reddy <[email protected]>
>> wrote:
>> >> > Hi Devs,
>> >> >
>> >> > I have implemented an API for Wiki Importer.
>> >> >
>> >> > The main component is org.xwiki.wikiimporter.WikiImporter
>> >> > **WikiImporterDescriptor getDescriptor()
>> >> > **void importWiki(Object object, WikiImporterListener listener)
>> >> > **WikiImporterType getType()
>> >> >
>> >> > Wiki Call back event listener:
>> >> org.xwiki.wikiimporter.WikiImporterListener
>> >> > **void beginWikiPage(String pageName, Map<String, String> params)
>> >>
>> >> How Map<String, String> params is used ? If it's supposed to receive
>> >> document informations like author, date, etc... i think it's should be
>> >> well defined and typed parameters in a WikiPageParameters (otherwise
>> >> there would be too much parameters in the method and it would not be
>> >> easy to extends) instead of Map<String, String> params for example.
>> >> Otherwise i don't see how you can use them if each importer can send
>> >> any kind of document metadata. You can keep Map<String, String> params
>> >> as custom parameters but we need at least a bunch of known page
>> >> metadatas in a WikiPageParameters.
>> >>
>> >> No, not for author or date etc.. Some wiki specific metadata related to
>> > page and other elements, like Id, ClassName. ( in short element
>> attributes
>> > ). As org.xwiki.rendering.Listener follows Map<String,String> parameters.
>> I
>> > have followed the same.
>> >
>> > In almost all the cases, the metadata ( author,date, comments,
>> labels/tags
>> > etc.. )  is handled with onProperty() event.
>> >
>> > But its a good idea to use WikiPageParameters. I shall implement it.
>> >
>> >
>> >>  > **void beginWikiPageRevision(String pageName, int revision,
>> Map<String,
>> >> > String> params)
>> >> > **void beginObject(String objectType, Map<String, String> params)
>> >> > **void onProperty(String property, Map<String, String> params, String
>> >> value)
>> >> > **void endObject(String objectType, Map<String, String> params)
>> >> > **void endWikiPageRevision(String pageName, int revision, Map<String,
>> >> > String> params)
>> >> > **void endWikiPage(String pageName, Map<String, String> params)
>> >> > **void beginAttachment(String attachmentName, Map<String, String>
>> param)
>> >> > **void onAttachmentRevision(String attachmentName, Map<String, String>
>> >> > params, InputSource input)
>> >> > **void endAttachment(String attachmentName, Map<String, String>
>> params)
>> >>
>> >> Something is not explicit in your mail: WikiImporterListener extends
>> >> org.xwiki.rendering.listener.Listener to send page content events
>> >> right ?
>> >>
>> >>
>> > The WikiImporterListener doesn't extend
>> > org.xwiki.rendering.listener.Listener , because i never felt the need for
>> > all those methods.  I have come up with a custom listener in the lines of
>> > org.xwiki.rendering.listener.Listener
>>
>> The point of extending Listener is to handle document content. For
>> example a client would receive something like:
>>
>> beginWikiPage
>>  beginWikiPageRevision
>>    beginDocument
>>      beginParagraph
>>        onWord
>>        onSpace
>>        onWord
>>      endParagraph
>>    endDocument
>>  endWikiPageRevision
>> endPage
>>
>>
>> beginDocument -> endDocument are document content events in a generic
>> format (the event version of XDOM). That way the client receive
>> everything he needs to reconstruct the whole wiki in a purely generic
>> form (no specific syntax), it's WikiImporter responsibility to do all
>> the needed parsing and conversion to send the proper events to send
>> valid events representing a complete wiki in WikiImporterListener.
>>
>> Said another way: Listener describe a document content and
>> WikiImporterListener extends it to describe the whole wiki.
>>
>> It's not clear in your proposal how you where planning to send the
>> document content. Is it one of the onProperty ?
>>
>
>  Yes, all the document content is handled using onProperty Tag.
>  But extending Listener and implementing XDOM events makes it more complete
> ( Its missing in the proposed API ) :)
>
>
>> >
>> >>
>> >> >
>> >> > WikiImporter parser for parsing documents (eg: XML ) :
>> >> > org.xwiki.wikiimporter.WikiImporterParser
>> >> > **void parse(InputSource source, WikiImporterListener listener) throws
>> >> > WikiImporterParseException
>> >>
>> >> This sound like an implementation details. From public API user POV
>> >> WikiImporter#importWiki(Parameters Class Object, WikiImporterListener
>> >> ) is enough no need to go deeper, the importer then parse documents
>> >> internally the way it wants to. Another reason is that "InputSource
>> >> source" would be way too limited: for example I'm thinking of
>> >> importers getting resources from another wiki directly online (XMLRPC,
>> >> REST, etc...), it could also be a folder containing several files for
>> >> each document (like content in a txt and objects in xml files), etc.
>> >>
>> >> Ok, Yes InputSource can't handle all the cases.
>> > Can i use a custom WikiImporterInputSource extending InputSource class.?
>>
>> No, what i mean is that WikiImporterParser#parse is useless in the
>> API. The user of the wiki importer should only call
>> WikiImporter#importWiki(Parameters Class Object, WikiImporterListener)
>> and receive all needed events for the whole wiki. I don't see the
>> point of having this WikiImporterParser#parse method at all.
>>
>> Said that its useless to have WikiImporterParser#parse method.
> It shouldnt be exposed to WikiImporter User in API
>  (or)
> not to have it internally, i mean
> WikiImporter#importWiki(Parameters Class Object, WikiImporterListener)
> makes call to WikiImporterParser#parse internally inside its implementation.

A wiki importer implementation is doing anything it wants internally,
my point is that it should not be part of the public API.

> ?
>
> I have the second one in my mind.
>
>>  >
>> >  >
>> >> > WikiImporter velocity bridge :
>> >> > org.xwiki.wikiimporter.WikiImporterVelocityBridge
>> >> > **public WikiImporterTypeFactory getWikiImporterTypeFactory()
>> >> > **public WikiImporter getWikiImporter(String wikiImporterType) throws
>> >> > WikiImporterException
>> >> >
>> >> > WikiImporter type factory has methods to handle the supported other
>> wiki
>> >> > formats/types. : org.xwiki.wikiimporter.WikiImporterTypeFactory
>> >> > **WikiImporterType createTypeFromIdString(String wikiImporterType)
>> throws
>> >> > WikiImporterException
>> >> > **List<WikiImporterType> getAvailableTypes() throws
>> WikiImporterException
>> >> >
>> >> > This is a typical use case in my mind.
>> >> >
>> >> >   1. Get WikiImporterFactory instance with
>> >> >   WikiImporterVelocityBridge#getWikiImporterFactory
>> >> >   2. Call the WikiImporterTypeFactory#getAvailableTypes() --> can be
>> used
>> >> >   at UI level to show the supported types  ( MediaWiki  XML, XMLRPC
>> etc
>> >> .. )
>> >> >   3. Select the format type and call
>> >> >   WikiImporterVelocityBridge#getWikiImporter(String wikiImporterType)
>> to
>> >> get
>> >> >   selected WikiImporter instance.
>> >> >   4. Use the WikiImporterDescriptor to generate the UI. ( Similiar to
>> >> >   MacroDescriptor)
>> >> >   5. User enters all the parameters ( UI )
>> >> >   6. Call WikiImporter#importWiki(Parameters Class Object,
>> >> >   WikiImporterListener ) to start the import process. Parameters Class
>> >> has all
>> >> >   the required parameters for WikiImporter
>> >> >   7. Parser parses and WikiImporterListener events are fired.
>> >> >
>> >> >
>> >> > The next step would be to create xwiki pages on the fly(  one at a
>> time -
>> >> at
>> >> > every WikiImporterListener#endWikiPage() event. )
>> >> >
>> >> > Remaining : API to import the generated WikiPages into XWiki
>> >> >
>> >> > Is it good idea to use a component which makes use of document bridge
>> to
>> >> > import the Wiki Pages, Attachments etc.. into XWiki. If not, what will
>> be
>> >> > the best way to do it?
>> >>
>> >> Yes you should have a component for that but implemented in a separate
>> >> module that depends on xwiki-core because the bridge is too limited
>> >> for that so and it will be a pain. We can later refactor the
>> >> implementation to use the new model and it's ready.
>> >>
>> >>
>> >>
>> >> >
>> >> > --
>> >> > Arun Reddy
>> >> > _______________________________________________
>> >> > devs mailing list
>> >> > [email protected]
>> >> > http://lists.xwiki.org/mailman/listinfo/devs
>> >> >
>> >>
>> >>
>> >>
>> >> --
>> >> Thomas Mortagne
>> >> _______________________________________________
>> >> devs mailing list
>> >> [email protected]
>> >> http://lists.xwiki.org/mailman/listinfo/devs
>> >>
>> >
>> >
>> >
>> > --
>> > Arun Reddy
>> > _______________________________________________
>> > devs mailing list
>> > [email protected]
>> > http://lists.xwiki.org/mailman/listinfo/devs
>> >
>>
>>
>>
>> --
>> Thomas Mortagne
>> _______________________________________________
>> devs mailing list
>> [email protected]
>> http://lists.xwiki.org/mailman/listinfo/devs
>>
>
>
>
> --
> Arun Reddy
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs
>



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

Reply via email to