If you want to reuse Wikistream/Filter then starting from an existing
XML does not make much sense. Indenting an XML is a pretty standard
thing using only XML APIs. You can look at what the XAR plugin is
doing at 
https://github.com/xwiki/xwiki-commons/blob/master/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/main/java/org/xwiki/tool/xar/FormatMojo.java#L78.
I would not recommend using WikiStream/Filter for an extension anyway
unless you want your extension to work only starting with 6.2 or
trigger a lot of dependencies before 6.2 (all the API moved from
"wikistream" to "filter/filterstream" naming in 6.2 and also moved to
xwiki-commons).

Anyway for the record here is a solution with Filter in 6.2: from
Filter point of view it would be better to directly serialize the
document to XAR XML format. There is no real public API that takes
directly a XWikiDocument in input yet (not that it's really hard to
do, just did not had the use case yet) but there is one that gets a
document reference and then you can give a Writer for example to the
XAR module to get your XML:

In Java that would be something like:

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

@Inject
@Named(FilterStreamType.XWIKI_INSTANCE)
InputFilterStreamFactory inputFilterStreamFactory;

@Inject
@Named(FilterStreamType.XWIKI_XAR_11)
OutputFilterStreamFactory xarFilterStreamFactory;

[...]

/////////////
// Instance

DocumentInstanceInputProperties inputProperties = new
DocumentInstanceInputProperties();

// I gess you don't want any history
inputProperties.setWithJRCSRevisions(false);
inputProperties.setWithRevisions(false);

// Indicate which document you want in input
EntityReferenceSet entities = new EntityReferenceSet();
entities.includes(myDocumentReference);
inputProperties.setEntities(entities);

InputFilterStream inputFilterStream =
inputFilterStreamFactory.createInputFilterStream(inputProperties);

/////////////
// XAR

// It format by default but it's possible to disable it with setEncoding(false)
XAROutputProperties xarProperties = new XAROutputProperties();

// Set a writer as output
StringWriterOutputTarget target = new StringWriterOutputTarget();
xarProperties.setTarget(target);

OutputFilterStream outputFilterStream =
xarFilterStreamFactory.createOutputFilterStream(xarProperties);

/////////////
// Serialization

// Do the actual serialization
inputFilterStream.read(outputFilterStream.getFilter());

inputFilterStream.close();
outputFilterStream.close();

// You can use StringWriterOutputTarget#getBuffer() to access the written String
System.out.println(target.getBuffer())

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Note that it's not very hard to do all that in Velocity using the
"filter" script service (see
https://github.com/xwiki/xwiki-platform/blob/master/xwiki-platform-core/xwiki-platform-filter/xwiki-platform-filter-script/src/main/java/org/xwiki/filter/script/FilterScriptService.java).

On Sat, Sep 6, 2014 at 5:17 PM, Ludovic Dubost <[email protected]> wrote:
> Hi,
>
> I'd like to improve the GitHub app to perform the equivalent of mvn
> xar:format, and I'm looking for the easiest way to do this using groovy in
> an XWiki instance.
>
> I've seen that the wikistream module is also indenting XML I think using
> this code:
>
> https://github.com/xwiki/xwiki-commons/blob/master/xwiki-commons-core/xwiki-commons-filter/xwiki-commons-filter-xml/src/main/java/org/xwiki/filter/xml/internal/output/FilterStreamXMLStreamWriter.java
>
> However I did not really understand how to use it. What I have initially is
> the result of
>
> doc.toXML()
>
> What's the best way to do this ? Knowing that I will want to fallback to no
> indenting on older XWiki versions.
>
> Ludovic
>
> -- <http://www.xwiki.com/>*Ludovic Dubost*
> *Founder and CEO*
> [email protected]
> skype: ldubost
> Blog: http://blog.ludovic.orgXWiki SAS organise un petit déjeuner
> <http://www.xwiki.com/lang/fr/BlogFr/PetitDejeunerXWikiOctobre2014> "retour
> d'expérience client" le mardi 7 octobre 2014. Inscription gratuite
> <http://info.xwiki.com/petit-dejeuner-XWiki-octobre-2014.html>.
> _______________________________________________
> 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