Class DefaultSiteTool

java.lang.Object
org.codehaus.plexus.logging.AbstractLogEnabled
org.apache.maven.doxia.tools.DefaultSiteTool
All Implemented Interfaces:
SiteTool, org.codehaus.plexus.logging.LogEnabled

@Component(role=SiteTool.class) public class DefaultSiteTool extends org.codehaus.plexus.logging.AbstractLogEnabled implements SiteTool
Default implementation of the site tool.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private org.apache.maven.artifact.factory.ArtifactFactory
    The component used for creating artifact instances.
    private org.apache.maven.artifact.resolver.ArtifactResolver
    The component that is used to resolve additional artifacts required.
    The component for assembling inheritance.
    protected org.codehaus.plexus.i18n.I18N
    Internationalization.
    protected org.apache.maven.project.MavenProjectBuilder
    Project builder (deprecated in Maven 3: should use ProjectBuilder, which will avoid issues like DOXIASITETOOLS-166)

    Fields inherited from interface org.apache.maven.doxia.tools.SiteTool

    DEFAULT_LOCALE, ROLE
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    private void
    appendMenuItem(org.apache.maven.project.MavenProject project, Menu menu, String name, String href, String defaultHref)
     
    private static String
    buildRelativePath(String toPath, String fromPath, char separatorChar)
     
    private void
    checkNotNull(String name, Object value)
     
    private Locale
    codeToLocale(String localeCode)
    Converts a locale code like "en", "en_US" or "en_US_win" to a java.util.Locale object.
    private MenuItem
    createCategoryMenu(String name, String href, List<org.apache.maven.reporting.MavenReport> categoryReports, Locale locale)
     
    private String
     
    private Map.Entry<DecorationModel,org.apache.maven.project.MavenProject>
    getDecorationModel(int depth, File siteDirectory, Locale locale, org.apache.maven.project.MavenProject project, List<org.apache.maven.project.MavenProject> reactorProjects, org.apache.maven.artifact.repository.ArtifactRepository localRepository, List<org.apache.maven.artifact.repository.ArtifactRepository> repositories)
     
    getDecorationModel(File siteDirectory, Locale locale, org.apache.maven.project.MavenProject project, List<org.apache.maven.project.MavenProject> reactorProjects, org.apache.maven.artifact.repository.ArtifactRepository localRepository, List<org.apache.maven.artifact.repository.ArtifactRepository> repositories)
    Get a decoration model for a project.
    org.apache.maven.artifact.Artifact
    getDefaultSkinArtifact(org.apache.maven.artifact.repository.ArtifactRepository localRepository, List<org.apache.maven.artifact.repository.ArtifactRepository> remoteArtifactRepositories)
    Get the default skin artifact for a project from one of the repositories.
    private static String
    getDistMgmntSiteUrl(org.apache.maven.model.DistributionManagement distMgmnt)
     
    private static String
    getDistMgmntSiteUrl(org.apache.maven.project.MavenProject project)
    Return distributionManagement.site.url if defined, null otherwise.
    getInterpolatedSiteDescriptorContent(Map<String,String> props, org.apache.maven.project.MavenProject aProject, String siteDescriptorContent)
    Interpolating several expressions in the site descriptor content.
    private String
    getInterpolatedSiteDescriptorContent(org.apache.maven.project.MavenProject aProject, String siteDescriptorContent, boolean isEarly)
     
    private static String
     
    private static org.apache.maven.project.MavenProject
    getModuleFromReactor(org.apache.maven.project.MavenProject project, List<org.apache.maven.project.MavenProject> reactorProjects, String module)
     
    protected static String
     
    org.apache.maven.project.MavenProject
    getParentProject(org.apache.maven.project.MavenProject aProject, List<org.apache.maven.project.MavenProject> reactorProjects, org.apache.maven.artifact.repository.ArtifactRepository localRepository)
    Returns the parent POM with interpolated URLs.
    private static String
    getRelativeFilePath(String oldPath, String newPath)
     
    Deprecated.
    getSiteDescriptor(File siteDirectory, Locale locale)
    Get a site descriptor from the project's site directory.
    (package private) File
    getSiteDescriptorFromRepository(org.apache.maven.project.MavenProject project, org.apache.maven.artifact.repository.ArtifactRepository localRepository, List<org.apache.maven.artifact.repository.ArtifactRepository> repositories, Locale locale)
    Get a site descriptor from one of the repositories.
    Extracts from a comma-separated list the locales that are available in site-tool resource bundle.
    org.apache.maven.artifact.Artifact
    getSkinArtifactFromRepository(org.apache.maven.artifact.repository.ArtifactRepository localRepository, List<org.apache.maven.artifact.repository.ArtifactRepository> remoteArtifactRepositories, DecorationModel decoration)
    Get a skin artifact from one of the repositories.
    private static boolean
    isEmptyList(List<?> list)
    Convenience method.
    private static boolean
    Check the current Maven version to see if it's Maven 3.0 or newer.
    private void
    populateModulesMenu(DecorationModel decorationModel, Locale locale, org.apache.maven.project.MavenProject project, List<org.apache.maven.project.MavenProject> reactorProjects, org.apache.maven.artifact.repository.ArtifactRepository localRepository, boolean keepInheritedRefs)
    Populate the pre-defined modules menu of the decoration model, if used through <menu ref="modules"/>.
    private void
    populateParentMenu(DecorationModel decorationModel, Locale locale, org.apache.maven.project.MavenProject project, org.apache.maven.project.MavenProject parentProject, boolean keepInheritedRefs)
    Populate the pre-defined parent menu of the decoration model, if used through <menu ref="parent"/>.
    void
    populateReportsMenu(DecorationModel decorationModel, Locale locale, Map<String,List<org.apache.maven.reporting.MavenReport>> categories)
    Populate the pre-defined reports menu of the decoration model, if used through <menu ref="reports"/>.
    readDecorationModel(String siteDescriptorContent)
     
    private String
    readSiteDescriptor(Reader reader, String projectId)
    Read site descriptor content from Reader, adding support for deprecated ${reports}, ${parentProject} and ${modules} tags.
    private File
    resolveSiteDescriptor(org.apache.maven.project.MavenProject project, org.apache.maven.artifact.repository.ArtifactRepository localRepository, List<org.apache.maven.artifact.repository.ArtifactRepository> repositories, Locale locale)
     
    private static String
     

    Methods inherited from class org.codehaus.plexus.logging.AbstractLogEnabled

    enableLogging, getLogger, setupLogger, setupLogger, setupLogger

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • artifactResolver

      @Requirement private org.apache.maven.artifact.resolver.ArtifactResolver artifactResolver
      The component that is used to resolve additional artifacts required.
    • artifactFactory

      @Requirement private org.apache.maven.artifact.factory.ArtifactFactory artifactFactory
      The component used for creating artifact instances.
    • i18n

      @Requirement protected org.codehaus.plexus.i18n.I18N i18n
      Internationalization.
    • assembler

      @Requirement protected DecorationModelInheritanceAssembler assembler
      The component for assembling inheritance.
    • mavenProjectBuilder

      @Requirement protected org.apache.maven.project.MavenProjectBuilder mavenProjectBuilder
      Project builder (deprecated in Maven 3: should use ProjectBuilder, which will avoid issues like DOXIASITETOOLS-166)
  • Constructor Details

    • DefaultSiteTool

      public DefaultSiteTool()
  • Method Details

    • getSkinArtifactFromRepository

      public org.apache.maven.artifact.Artifact getSkinArtifactFromRepository(org.apache.maven.artifact.repository.ArtifactRepository localRepository, List<org.apache.maven.artifact.repository.ArtifactRepository> remoteArtifactRepositories, DecorationModel decoration) throws SiteToolException
      Description copied from interface: SiteTool
      Get a skin artifact from one of the repositories.
      Specified by:
      getSkinArtifactFromRepository in interface SiteTool
      Parameters:
      localRepository - the Maven local repository, not null.
      remoteArtifactRepositories - the Maven remote repositories, not null.
      decoration - the Doxia site descriptor model, not null.
      Returns:
      the Skin artifact defined in a DecorationModel from a given project and a local repository
      Throws:
      SiteToolException - if any
    • getDefaultSkinArtifact

      public org.apache.maven.artifact.Artifact getDefaultSkinArtifact(org.apache.maven.artifact.repository.ArtifactRepository localRepository, List<org.apache.maven.artifact.repository.ArtifactRepository> remoteArtifactRepositories) throws SiteToolException
      Description copied from interface: SiteTool
      Get the default skin artifact for a project from one of the repositories.
      Specified by:
      getDefaultSkinArtifact in interface SiteTool
      Parameters:
      localRepository - the Maven local repository, not null.
      remoteArtifactRepositories - the Maven remote repositories, not null.
      Returns:
      the default Skin artifact from a given project and a local repository
      Throws:
      SiteToolException - if any
      See Also:
    • getRelativePath

      @Deprecated public String getRelativePath(String to, String from)
      Deprecated.
      This method is not implemented according to the URI specification and has many weird corner cases where it doesn't do the right thing. Please consider using a better implemented method from a different library such as org.apache.http.client.utils.URIUtils#resolve.
      Specified by:
      getRelativePath in interface SiteTool
      Parameters:
      to - the to url of file as string
      from - the from url of file as string
      Returns:
      a relative path from from to to.
    • getRelativeFilePath

      private static String getRelativeFilePath(String oldPath, String newPath)
    • getSiteDescriptor

      public File getSiteDescriptor(File siteDirectory, Locale locale)
      Get a site descriptor from the project's site directory.
      Specified by:
      getSiteDescriptor in interface SiteTool
      Parameters:
      siteDirectory - the site directory, not null
      locale - the locale wanted for the site descriptor. If not null, searching for site_localeLanguage.xml, otherwise searching for site.xml.
      Returns:
      the site descriptor file
    • getSiteDescriptorFromRepository

      File getSiteDescriptorFromRepository(org.apache.maven.project.MavenProject project, org.apache.maven.artifact.repository.ArtifactRepository localRepository, List<org.apache.maven.artifact.repository.ArtifactRepository> repositories, Locale locale) throws SiteToolException
      Get a site descriptor from one of the repositories.
      Parameters:
      project - the Maven project, not null.
      localRepository - the Maven local repository, not null.
      repositories - the Maven remote repositories, not null.
      locale - the locale wanted for the site descriptor. If not null, searching for site_localeLanguage.xml, otherwise searching for site.xml.
      Returns:
      the site descriptor into the local repository after download of it from repositories or null if not found in repositories.
      Throws:
      SiteToolException - if any
    • readSiteDescriptor

      private String readSiteDescriptor(Reader reader, String projectId) throws IOException
      Read site descriptor content from Reader, adding support for deprecated ${reports}, ${parentProject} and ${modules} tags.
      Parameters:
      reader -
      Returns:
      the input content interpolated with deprecated tags
      Throws:
      IOException
    • getDecorationModel

      public DecorationModel getDecorationModel(File siteDirectory, Locale locale, org.apache.maven.project.MavenProject project, List<org.apache.maven.project.MavenProject> reactorProjects, org.apache.maven.artifact.repository.ArtifactRepository localRepository, List<org.apache.maven.artifact.repository.ArtifactRepository> repositories) throws SiteToolException
      Get a decoration model for a project.
      Specified by:
      getDecorationModel in interface SiteTool
      Parameters:
      siteDirectory - the site directory, may be null if project from repository
      locale - the locale used for the i18n in DecorationModel. If null, using the default locale in the jvm.
      project - the Maven project, not null.
      reactorProjects - the Maven reactor projects, not null.
      localRepository - the Maven local repository, not null.
      repositories - the Maven remote repositories, not null.
      Returns:
      the DecorationModel object corresponding to the site.xml file with some interpolations.
      Throws:
      SiteToolException - if any
    • getInterpolatedSiteDescriptorContent

      public String getInterpolatedSiteDescriptorContent(Map<String,String> props, org.apache.maven.project.MavenProject aProject, String siteDescriptorContent) throws SiteToolException
      Interpolating several expressions in the site descriptor content. Actually, the expressions can be in the project, the environment variables and the specific properties like encoding.

      For instance:

      ${project.name}
      The value from the POM of:

      <project>
        <name>myProjectName</name>
      </project>

      ${my.value}
      The value from the POM of:

      <properties>
        <my.value>hello</my.value>
      </properties>

      ${JAVA_HOME}
      The value of JAVA_HOME in the environment variables
      Specified by:
      getInterpolatedSiteDescriptorContent in interface SiteTool
      Parameters:
      props - a map used for interpolation, not null.
      aProject - a Maven project, not null.
      siteDescriptorContent - the site descriptor file, not null.
      Returns:
      the interpolated site descriptor content.
      Throws:
      SiteToolException - if errors happened during the interpolation.
    • getInterpolatedSiteDescriptorContent

      private String getInterpolatedSiteDescriptorContent(org.apache.maven.project.MavenProject aProject, String siteDescriptorContent, boolean isEarly) throws SiteToolException
      Throws:
      SiteToolException
    • getParentProject

      public org.apache.maven.project.MavenProject getParentProject(org.apache.maven.project.MavenProject aProject, List<org.apache.maven.project.MavenProject> reactorProjects, org.apache.maven.artifact.repository.ArtifactRepository localRepository)
      Returns the parent POM with interpolated URLs. If called from Maven 3, just returns project.getParent(), which is already interpolated. But when called from Maven 2, attempts to source this value from the reactorProjects parameters if available (reactor env model attributes are interpolated), or if the reactor is unavailable (-N) resorts to the project.getParent().getUrl() value which will NOT have been interpolated.
      Specified by:
      getParentProject in interface SiteTool
      Parameters:
      aProject - a Maven project, not null.
      reactorProjects - the Maven reactor projects, not null.
      localRepository - the Maven local repository, not null.
      Returns:
      the parent project with interpolated URLs.
    • populateParentMenu

      private void populateParentMenu(DecorationModel decorationModel, Locale locale, org.apache.maven.project.MavenProject project, org.apache.maven.project.MavenProject parentProject, boolean keepInheritedRefs)
      Populate the pre-defined parent menu of the decoration model, if used through <menu ref="parent"/>.
      Parameters:
      decorationModel - the Doxia Sitetools DecorationModel, not null.
      locale - the locale used for the i18n in DecorationModel. If null, using the default locale in the jvm.
      project - a Maven project, not null.
      parentProject - a Maven parent project, not null.
      keepInheritedRefs - used for inherited references.
    • populateModulesMenu

      private void populateModulesMenu(DecorationModel decorationModel, Locale locale, org.apache.maven.project.MavenProject project, List<org.apache.maven.project.MavenProject> reactorProjects, org.apache.maven.artifact.repository.ArtifactRepository localRepository, boolean keepInheritedRefs) throws SiteToolException, IOException
      Populate the pre-defined modules menu of the decoration model, if used through <menu ref="modules"/>.
      Parameters:
      decorationModel - the Doxia Sitetools DecorationModel, not null.
      locale - the locale used for the i18n in DecorationModel. If null, using the default locale in the jvm.
      project - a Maven project, not null.
      reactorProjects - the Maven reactor projects, not null.
      localRepository - the Maven local repository, not null.
      keepInheritedRefs - used for inherited references.
      Throws:
      SiteToolException - if any
      IOException
    • getModuleFromReactor

      private static org.apache.maven.project.MavenProject getModuleFromReactor(org.apache.maven.project.MavenProject project, List<org.apache.maven.project.MavenProject> reactorProjects, String module) throws IOException
      Throws:
      IOException
    • populateReportsMenu

      public void populateReportsMenu(DecorationModel decorationModel, Locale locale, Map<String,List<org.apache.maven.reporting.MavenReport>> categories)
      Populate the pre-defined reports menu of the decoration model, if used through <menu ref="reports"/>. Notice this menu reference is translated into 2 separate menus: "Project Information" and "Project Reports".
      Specified by:
      populateReportsMenu in interface SiteTool
      Parameters:
      decorationModel - the Doxia Sitetools DecorationModel, not null.
      locale - the locale used for the i18n in DecorationModel. If null, using the default locale in the jvm.
      categories - reports per category to put in "Reports" or "Information" menus, not null.
      See Also:
      • MavenReport.CATEGORY_PROJECT_INFORMATION
      • MavenReport.CATEGORY_PROJECT_REPORTS
    • getSiteLocales

      public List<Locale> getSiteLocales(String locales)
      Extracts from a comma-separated list the locales that are available in site-tool resource bundle. Notice that default value will be changed to the default locale of the JVM.
      Specified by:
      getSiteLocales in interface SiteTool
      Parameters:
      locales - A comma separated list of locales
      Returns:
      a list of Locale, which at least contains the Maven default locale which is english
    • codeToLocale

      private Locale codeToLocale(String localeCode)
      Converts a locale code like "en", "en_US" or "en_US_win" to a java.util.Locale object.

      If localeCode = default, return the current value of the default locale for this instance of the Java Virtual Machine.

      Parameters:
      localeCode - the locale code string.
      Returns:
      a java.util.Locale object instanced or null if errors occurred
      See Also:
    • getNormalizedPath

      protected static String getNormalizedPath(String path)
      Parameters:
      path - could be null.
      Returns:
      the path normalized, i.e. by eliminating "/../" and "/./" in the path.
      See Also:
      • FilenameUtils.normalize(String)
    • resolveSiteDescriptor

      private File resolveSiteDescriptor(org.apache.maven.project.MavenProject project, org.apache.maven.artifact.repository.ArtifactRepository localRepository, List<org.apache.maven.artifact.repository.ArtifactRepository> repositories, Locale locale) throws IOException, org.apache.maven.artifact.resolver.ArtifactResolutionException, org.apache.maven.artifact.resolver.ArtifactNotFoundException
      Parameters:
      project - not null
      localRepository - not null
      repositories - not null
      locale - not null
      Returns:
      the resolved site descriptor
      Throws:
      IOException - if any
      org.apache.maven.artifact.resolver.ArtifactResolutionException - if any
      org.apache.maven.artifact.resolver.ArtifactNotFoundException - if any
    • getDecorationModel

      private Map.Entry<DecorationModel,org.apache.maven.project.MavenProject> getDecorationModel(int depth, File siteDirectory, Locale locale, org.apache.maven.project.MavenProject project, List<org.apache.maven.project.MavenProject> reactorProjects, org.apache.maven.artifact.repository.ArtifactRepository localRepository, List<org.apache.maven.artifact.repository.ArtifactRepository> repositories) throws SiteToolException
      Parameters:
      depth - depth of project
      siteDirectory - , can be null if project.basedir is null, ie POM from repository
      locale - not null
      project - not null
      reactorProjects - not null
      localRepository - not null
      repositories - not null
      origProps - not null
      Returns:
      the decoration model depending the locale and the parent project
      Throws:
      SiteToolException - if any
    • readDecorationModel

      private DecorationModel readDecorationModel(String siteDescriptorContent) throws SiteToolException
      Parameters:
      siteDescriptorContent - not null
      Returns:
      the decoration model object
      Throws:
      SiteToolException - if any
    • decorationModelToString

      private String decorationModelToString(DecorationModel decoration) throws SiteToolException
      Throws:
      SiteToolException
    • buildRelativePath

      private static String buildRelativePath(String toPath, String fromPath, char separatorChar)
    • appendMenuItem

      private void appendMenuItem(org.apache.maven.project.MavenProject project, Menu menu, String name, String href, String defaultHref)
      Parameters:
      project - not null
      menu - not null
      name - not null
      href - could be null
      defaultHref - not null
    • createCategoryMenu

      private MenuItem createCategoryMenu(String name, String href, List<org.apache.maven.reporting.MavenReport> categoryReports, Locale locale)
      Parameters:
      name - not null
      href - not null
      categoryReports - not null
      locale - not null
      Returns:
      the menu item object
    • isEmptyList

      private static boolean isEmptyList(List<?> list)
      Convenience method.
      Parameters:
      list - could be null
      Returns:
      true if the list is null or empty
    • getDistMgmntSiteUrl

      private static String getDistMgmntSiteUrl(org.apache.maven.project.MavenProject project)
      Return distributionManagement.site.url if defined, null otherwise.
      Parameters:
      project - not null
      Returns:
      could be null
    • getDistMgmntSiteUrl

      private static String getDistMgmntSiteUrl(org.apache.maven.model.DistributionManagement distMgmnt)
    • urlEncode

      private static String urlEncode(String url)
    • checkNotNull

      private void checkNotNull(String name, Object value)
    • isMaven3OrMore

      private static boolean isMaven3OrMore()
      Check the current Maven version to see if it's Maven 3.0 or newer.
    • getMavenVersion

      private static String getMavenVersion()