[ https://issues.apache.org/jira/browse/DOXIA-614?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sylwester Lachiewicz closed DOXIA-614. -------------------------------------- Resolution: Fixed > Support obtaining the source reference in a Doxia Parser > -------------------------------------------------------- > > Key: DOXIA-614 > URL: https://issues.apache.org/jira/browse/DOXIA-614 > Project: Maven Doxia > Issue Type: Improvement > Components: Core, Modules, Site Renderer (moved to DOXIASITETOOLS) > Affects Versions: 1.9.1 > Reporter: Abel Salgado Romero > Priority: Major > Fix For: 1.10 > > > Currently, the 'org.apache.maven.doxia.parser.Parser' interface provides 2 > methods that parsers can implement, one with and the other without the source > reference. However, in reality the one with the reference added in DOXIA-224 > is never invoked, thus making it unusable from maven-site-plugin. > Methods are: > * void parse( Reader source, Sink sink ) > * void parse( Reader source, Sink sink, String reference ) > > 1. Base implementation 'org.apache.maven.doxia.parser.AbstractParser' > ('doxia-core') of the reference method calls the other, removing the > reference if it is provided. > {code:java} > public void parse( Reader source, Sink sink, String reference ) > throws ParseException > { > parse( source, sink ); > }{code} > 2. In 'org.apache.maven.doxia.DefaultDoxia#parse' ('doxia-core') the parser > method 'parser (reader, sink)' is called at the end, which means > 'parser(reader, sink, reference)' is never used. > > {code:java} > public void parse( Reader source, String parserId, Sink sink ) > throws ParserNotFoundException, ParseException > { > Parser parser = parserManager.getParser( parserId ); > parser.enableLogging( new PlexusLoggerWrapper( getLogger() ) ); > parser.parse( source, sink ); > } > {code} > > 3. 'org.apache.maven.doxia.Doxia#parse(Reader source, String parserId, Sink > sink )' and it's implementation 'DefaultDoxia' ('doxia-core') does not > receive the source reference, so it cannot pass it in any way. > > For these 3 reasons, > 'org.apache.maven.doxia.siterenderer.DefaultSiteRenderer#renderDocument' > ('doxia-sitetools') who has the source reference is not able to pass it to > the above components. > To sum up, the chaing of calls is: DefaultSiteRenderer -> Doxia/DefaultDoxia > -> Parser implementation (e.g. AbstractParser) > > After discussion with [~hboutemy] the proposal is to fix it in several steps > to avoid using SNAPSHOTS and ensure no breaking points: > # Change doxia-core components to support new method with "reference", still > having both methods. This means, changing AbstractParser and it's > implementations to recieve the "reference". This does not break anything > since no one is using this param now. > # Change doxia-sitetools's 'DefaultSiteRenderer' component to pass the > reference to Doxia/DefautDoxia DOXIASITETOOLS-225. > # Release new doxia-sitetools version. > # Once released, modifty doxia-core components to pass the reference and > remove the (Reader, Sink) method completely. Also, in advance that Parsers > may need more information about the source, instead of passing "String > reference", we will pass a new class "SourceMetadata" that encapsulates the > "String reference. That way we can add more information in the future if > needed. > > -- This message was sent by Atlassian Jira (v8.3.4#803005)