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

