Hi, I had some time in the train yesterday so I thought about what a new Importer architecture would look like. First the reason for changing the current one (which is located in the Package plugin): * "bad" design (everything is mixed up in one big class, not modular) and too complex to maintain * cannot import HTML, plain text, etc * cannot convert from one wiki syntax to another Proposal ======= * A Importer interface to represent the different importers o import(Converter converter, DocumentImportFactory factory) o setFilter(ImportFilter filter) : to decide what document to import * A Converter interface to convert original content before it's imported into a page o OutputStream convert(InputStream originalContent) * A DocumentImportFactory interface for delegating how pages are created. This is important as there are different strategies for finding out the following data from the original content: o Language o Target Space o Target Page name o Objects to attach o Attachments o Versions o Author o API: + XWikiDocument createDocument(String originalFileName, InputStream contentAfterConversion) + setMode(REPLACE || APPEND): whether to create a new version or replace any existing doc Examples of implementations: * For Importer: FileImporter, DirectoryImporter, ZIPImporter, ZipURLImporter, JARImporter * For Converter: PlainTextConverter, HTMLConverter, TWikiConverter, ConfluenceConverter, XWikiXMLConverter (for converting documents in XWiki XML format) * For DocumentImportFactory: XARDocumentImportFactory, ExpandedXARDocumentImportFactory, DefaultDocumentImportFactory (uses the file name as page name and parent directory as space, etc) Examples of using it ================ * A XAR file o new ZipImporter(new File(".../.xar"), new XWikiXMLConverter(), new XARDocumentImportFactory(new File(".../.xar"))) * A single HTML file o new FileImporter(new File(".../.html"), new HTMLConverter (), new DefaultDocumentImporterFactory()) * A zip file containing TWiki pages o new ZipImporter(new File(".../.zip"), new TWikiConverter (), new DefaultDocumentImporterFactory()) * An expanded directory of HTML files o new DirectoryImporter(new File(".../somedir"), new HTMLConverter(), new DefaultDocumentImporterFactory()) I've put all this on http://www.xwiki.org/xwiki/bin/view/Idea/ NewImporterArchitecture but I think it's better to discuss it here as email is better for discussions... Note: I'm not planning to implement this yet as our first priority is still the 1.0 release but once it's released, I'm volunteering for implementing it, using a component strategy (cf new V2 architecture). WDYT? Thanks -Vincent