r719 - in trunk: . doxia-module-jrst doxia-module-jrst/src/main/java/org/nuiton/jrst doxia-module-jrst/src/main/resources doxia-module-jrst/src/main/resources/META-INF doxia-module-jrst/src/main/resources/META-INF/plexus jrst-doc
Author: jpages Date: 2012-06-14 11:27:46 +0200 (Thu, 14 Jun 2012) New Revision: 719 Url: http://nuiton.org/repositories/revision/jrst/719 Log: Ajout du JrstSiteRenderer afin de g?\195?\169n?\195?\169rer la documentation en pdf Added: trunk/doxia-module-jrst/src/main/java/org/nuiton/jrst/JrstSiteRenderer.java trunk/doxia-module-jrst/src/main/java/org/nuiton/jrst/ReflectUtil.java trunk/doxia-module-jrst/src/main/resources/META-INF/ trunk/doxia-module-jrst/src/main/resources/META-INF/plexus/ trunk/doxia-module-jrst/src/main/resources/META-INF/plexus/components.xml Modified: trunk/doxia-module-jrst/pom.xml trunk/jrst-doc/pom.xml trunk/pom.xml Modified: trunk/doxia-module-jrst/pom.xml =================================================================== --- trunk/doxia-module-jrst/pom.xml 2012-06-14 07:34:12 UTC (rev 718) +++ trunk/doxia-module-jrst/pom.xml 2012-06-14 09:27:46 UTC (rev 719) @@ -79,6 +79,16 @@ </dependency> <dependency> + <groupId>org.apache.maven.doxia</groupId> + <artifactId>doxia-site-renderer</artifactId> + </dependency> + + <dependency> + <groupId>org.apache.maven.shared</groupId> + <artifactId>maven-doxia-tools</artifactId> + </dependency> + + <dependency> <groupId>jaxen</groupId> <artifactId>jaxen</artifactId> <scope>runtime</scope> Added: trunk/doxia-module-jrst/src/main/java/org/nuiton/jrst/JrstSiteRenderer.java =================================================================== --- trunk/doxia-module-jrst/src/main/java/org/nuiton/jrst/JrstSiteRenderer.java (rev 0) +++ trunk/doxia-module-jrst/src/main/java/org/nuiton/jrst/JrstSiteRenderer.java 2012-06-14 09:27:46 UTC (rev 719) @@ -0,0 +1,214 @@ +package org.nuiton.jrst; + +import org.apache.commons.lang3.StringUtils; +import org.apache.maven.doxia.siterenderer.DefaultSiteRenderer; +import org.apache.maven.doxia.siterenderer.DocumentRenderer; +import org.apache.maven.doxia.siterenderer.RendererException; +import org.apache.maven.doxia.siterenderer.SiteRenderingContext; +import org.apache.maven.doxia.siterenderer.sink.SiteRendererSink; +import org.apache.maven.doxia.tools.SiteTool; +import org.apache.maven.project.MavenProject; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.context.Context; + +import java.io.File; +import java.io.IOException; +import java.io.Writer; +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +/** + * Override of the DefaultSiteRenderer to add pdf generation of the site. + * + * @author jpages <j.pages@codelutin.com> + * @version $Id: JrstSiteRenderer.java 663 2012-03-22 09:14:39Z tchemit $ + * @plexus.component role-hint="default" role="org.apache.maven.doxia.siterenderer.Renderer" + * @since 1.0 + */ +public class JrstSiteRenderer extends DefaultSiteRenderer { + + /** + * SiteTool. + * + * @component + */ + protected SiteTool siteTool; + + // this method is the private one from super class + protected Method createContextMethod; + + // this method is the private one from super class + protected Method writeTemplateMethod; + + private String siteSourcesType; + + private List<Locale> locales; + + private Locale locale; + + private MavenProject mavenProject; + + private String scmwebeditorPrefixURL; + + private String siteXmlScmwebeditorURL; + + private boolean scmwebeditorEnabled; + + private boolean piwikEnabled; + + private String piwikSiteId; + + protected Method getWriteTemplateMethod() { + if (writeTemplateMethod == null) { + writeTemplateMethod = ReflectUtil.getMethod( + getClass().getSuperclass(), + "writeTemplate", + new Class<?>[]{ + Writer.class, + Context.class, + SiteRenderingContext.class + }); + } + getLogger(); + return writeTemplateMethod; + } + + protected Method getCreateContextMethod() { + if (createContextMethod == null) { + createContextMethod = ReflectUtil.getMethod( + getClass().getSuperclass(), + "createContext", + new Class<?>[]{ + SiteRendererSink.class, + SiteRenderingContext.class} + ); + } + return createContextMethod; + } + + public void render(Collection<DocumentRenderer> documents, + SiteRenderingContext siteRenderingContext, + File outputDirectory) + throws RendererException, IOException { + + // prepare all common values for a given module + + locale = siteRenderingContext.getLocale(); + + Map<String, ?> templateProperties = siteRenderingContext.getTemplateProperties(); + + scmwebeditorEnabled = getBooleanProperty( + (String) templateProperties.get("scmwebeditorEnabled")); + + mavenProject = (MavenProject) templateProperties.get("project"); + + piwikEnabled = getBooleanProperty( + (String) mavenProject.getProperties().get("piwikEnabled")); + + if (scmwebeditorEnabled) { + + // get locales (defined in pom) + String localesAsStr = (String) templateProperties.get("locales"); + + // get locales as a list + List<Locale> locales = siteTool.getAvailableLocales(localesAsStr); + + this.locales = locales; + + siteSourcesType = (String) + mavenProject.getProperties().get("siteSourcesType"); + + String scm = mavenProject.getScm().getDeveloperConnection(); + String scmURL = scm.substring(8); + + String scmwebeditorUrl = (String) mavenProject.getProperties().get("scmwebeditorUrl"); + scmwebeditorPrefixURL = scmwebeditorUrl + "?address=" + scmURL + '/'; + + getLogger().info("SCMWebeditor prefix url = " + scmwebeditorPrefixURL); + + //FIXME tchemit 2011-08-19 must test if file exists (if first locale) to respect maven + // default loayout src/site/site.xml + String editFile = "src/site/site_" + locale + ".xml"; + siteXmlScmwebeditorURL = scmwebeditorPrefixURL + editFile; + + getLogger().debug("[" + editFile + "] scmwebeditor url = " + siteXmlScmwebeditorURL); + } + + if (piwikEnabled) { + + String piwikId = (String) mavenProject.getProperties().get("piwikId"); + if (StringUtils.isEmpty(piwikId)) { + + // try to use piwikId from platform + String platform = (String) mavenProject.getProperties().get("platform"); + + if ("nuiton.org".equals(platform)) { + piwikSiteId = "2"; + } else if ("chorem.org".equals(platform)) { + piwikSiteId = "3"; + } else if ("forge.codelutin.com".equals(platform)) { + piwikSiteId = "4"; + } else { + getLogger().warn( + "No piwik id known for this platform " + + platform + + ", please fill yourself a piwikId in your pom"); + + // disable piwik + piwikEnabled = false; + } + } else { + + // use given id + piwikSiteId = piwikId; + } + } + if (piwikEnabled) { + getLogger().info("piwik is enabled, will use piwikiId : " + + piwikSiteId); + } + super.render(documents, siteRenderingContext, outputDirectory); + } + + @Override + public void generateDocument(Writer writer, + SiteRendererSink sink, + SiteRenderingContext siteRenderingContext) + throws RendererException { + + if (getLogger().isDebugEnabled()) { + getLogger().debug("Will generate document " + + sink.getRenderingContext().getOutputName()); + } + Context context = createContext(sink, siteRenderingContext); + + writeTemplate(writer, context, siteRenderingContext); + } + + protected Context createContext(SiteRendererSink sink, + SiteRenderingContext siteRenderingContext) { + Method m = getCreateContextMethod(); + VelocityContext context = + ReflectUtil.invokeMethod(m, this, sink, siteRenderingContext); + + return context; + } + + protected void writeTemplate(Writer writer, + Context context, + SiteRenderingContext siteContext) + throws RendererException { + + Method m = getWriteTemplateMethod(); + ReflectUtil.invokeMethod(m, this, writer, context, siteContext); + } + + protected boolean getBooleanProperty(String value) { + boolean result = StringUtils.isNotEmpty(value) && !"false".equals(value); + return result; + } + +} \ No newline at end of file Added: trunk/doxia-module-jrst/src/main/java/org/nuiton/jrst/ReflectUtil.java =================================================================== --- trunk/doxia-module-jrst/src/main/java/org/nuiton/jrst/ReflectUtil.java (rev 0) +++ trunk/doxia-module-jrst/src/main/java/org/nuiton/jrst/ReflectUtil.java 2012-06-14 09:27:46 UTC (rev 719) @@ -0,0 +1,58 @@ +/* + * #%L + * Maven Nuiton Skin + * + * $Id: ReflectUtil.java 641 2011-08-19 15:04:21Z tchemit $ + * $HeadURL: http://svn.nuiton.org/svn/maven-nuiton-skin/trunk/src/main/java/org/nuiton/m... $ + * %% + * Copyright (C) 2006 - 2011 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ +package org.nuiton.jrst; + +import java.lang.reflect.Method; + +/** + * Some usefull methods to obtains none accessible fields and method from + * some classes. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.0.6 + */ +public class ReflectUtil { + + public static Method getMethod(Class<?> klass, String methodName, Class<?>[] paramTypes) { + try { + Method declaredMethod = klass.getDeclaredMethod(methodName, paramTypes); + declaredMethod.setAccessible(true); + return declaredMethod; + } catch (Exception e) { + throw new IllegalStateException("Could not get method [" + methodName + "] from parent class :(... ", e); + } + + } + + public static <O> O invokeMethod(Method m, Object o, Object... params) { + try { + O result = (O) m.invoke(o, params); + return result; + } catch (Exception e) { + throw new IllegalStateException("Could not invoke method [" + m.getName() + "] from parent class :(... ", e); + } + + } +} Added: trunk/doxia-module-jrst/src/main/resources/META-INF/plexus/components.xml =================================================================== --- trunk/doxia-module-jrst/src/main/resources/META-INF/plexus/components.xml (rev 0) +++ trunk/doxia-module-jrst/src/main/resources/META-INF/plexus/components.xml 2012-06-14 09:27:46 UTC (rev 719) @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + Maven Nuiton Skin + + $Id: components.xml 641 2011-08-19 15:04:21Z tchemit $ + $HeadURL: http://svn.nuiton.org/svn/maven-nuiton-skin/trunk/src/main/resources/META-IN... $ + %% + Copyright (C) 2006 - 2011 CodeLutin + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Lesser Public License for more details. + + You should have received a copy of the GNU General Lesser Public + License along with this program. If not, see + <http://www.gnu.org/licenses/lgpl-3.0.html>. + #L% + --> + +<component-set> + <components> + <component> + <role>org.apache.maven.doxia.siterenderer.Renderer</role> + <role-hint>default</role-hint> + <implementation>org.nuiton.jrst.JrstSiteRenderer</implementation> + <requirements> + <requirement> + <role>org.apache.maven.doxia.tools.SiteTool</role> + <field-name>siteTool</field-name> + <role-hint>default</role-hint> + </requirement> + <requirement> + <role>org.codehaus.plexus.velocity.VelocityComponent</role> + <field-name>velocity</field-name> + <role-hint>doxia-default</role-hint> + </requirement> + <requirement> + <role>org.apache.maven.doxia.module.site.manager.SiteModuleManager</role> + <field-name>siteModuleManager</field-name> + </requirement> + <requirement> + <role>org.apache.maven.doxia.Doxia</role> + <field-name>doxia</field-name> + </requirement> + <requirement> + <role>org.codehaus.plexus.i18n.I18N</role> + <field-name>i18n</field-name> + </requirement> + </requirements> + </component> + </components> +</component-set> Modified: trunk/jrst-doc/pom.xml =================================================================== --- trunk/jrst-doc/pom.xml 2012-06-14 07:34:12 UTC (rev 718) +++ trunk/jrst-doc/pom.xml 2012-06-14 09:27:46 UTC (rev 719) @@ -41,6 +41,13 @@ <groupId>org.nuiton.jrst</groupId> <artifactId>jrst-doc</artifactId> + <dependencies> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>doxia-module-jrst</artifactId> + <version>${project.version}</version> + </dependency> + </dependencies> <!-- ************************************************************* --> <!-- *** Project Information ************************************* --> <!-- ************************************************************* --> Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2012-06-14 07:34:12 UTC (rev 718) +++ trunk/pom.xml 2012-06-14 09:27:46 UTC (rev 719) @@ -262,6 +262,18 @@ </dependency> <dependency> + <groupId>org.apache.maven.doxia</groupId> + <artifactId>doxia-site-renderer</artifactId> + <version>${doxiaSitetoolsVersion}</version> + </dependency> + + <dependency> + <groupId>org.apache.maven.shared</groupId> + <artifactId>maven-doxia-tools</artifactId> + <version>1.4</version> + </dependency> + + <dependency> <groupId>org.python</groupId> <artifactId>jython-standalone</artifactId> <version>2.5.2</version> @@ -379,6 +391,7 @@ <siteSourcesType>apt</siteSourcesType> <doxiaVersion>1.3</doxiaVersion> + <doxiaSitetoolsVersion>1.2</doxiaSitetoolsVersion> <nuitonUtilsVersion>2.4.8</nuitonUtilsVersion> <nuitonI18nVersion>2.4.1</nuitonI18nVersion> <xalanVersion>2.7.1</xalanVersion>
participants (1)
-
jpages@users.nuiton.org