<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd">
<document> 
  <header> 
    <title>Welcome to the org.apache.forrest.plugin.input.projectInfo Plugin</title> 
  </header> 
  <body> 
    <section>
      <title>Apache Forrest - org.apache.forrest.plugin.input.projectInfo Plugin</title>
      <p>This plugin generates project info from various configuration files.</p>
    </section>
    
    <section>
      <title>Changes</title>
      <p>By maintaining a file called <code>status.xml</code> you can manage a list
      changes to your code base. This list can then be generated as a changes 
      page and/or an RSS feed of those changes. For example, here are the 
      <a href="changes.html">changes</a> for this plugin, here is the same
      list of changes as an <a href="changes.rss">RSS feed</a>.</p>
      
      <p>It's possible to limit the displayed changes to a particular version
      number as well. For example, here are the changes for 
      <a href="changes_0.1.html">version 0.1</a> of this plugin (and
      as an <a href="changes_0.1.rss">RSS feed</a>).</p>
      
      <p>If you want to only retrieve the changes for the most recent version
      of the project then you can do that too. Here are the changes in the 
      <a href="changes_current.html">current development version</a> of this 
      plugin (and once more as an <a href="changes_current.rss">RSS feed</a>).</p>
      
    </section>
    
    <section>
      <title>SVN Changes</title>
      <p>You can generate as well the changes with svn. For this you need to 
        point forrest to the directory where the svn logs are. The defaut is 
        set to <code>{properties:content}svn-log/</code> and you can change it by 
        setting <code>projectInfo.svn.log.dir</code> in your project 
        locationmap.</p>
      <p>We created a log file for demonstration with the following command:</p>
      <source>
cd forrest/trunk/plugins/org.apache.forrest.plugin.input.projectInfo
svn log --xml -v . > src/documentation/content/svn-log/log.svn.xml</source>
      <p>This file reflect all changes that have been done to this plugin. You 
        can see the result <a href="log.svn.html">log.svn.html</a>.</p>
      <p>You see the only context we have definied is "code". This is 
        controlled by a mapper file. The defaut is set to 
        <code>{properties:content}path-to-context.xml</code> and you can change it 
        by setting <code>projectInfo.svn.mapper</code> in your project 
        locationmap.</p>
      <source><![CDATA[<paths>
  <path context="Code">/forrest</path>
</paths>]]></source>
      <p>If the log file is growing, one is looking into splitting the file. 
        You can find out the revision number of the first and last commit of a 
        month within the log by requesting <a 
        href="log.svn-revision.xml">log.svn-revision.xml</a>.</p>
      <p>We implemented as well a small svn cli output to generate log files 
        per month <a href="log.svn-sh.xml">log.svn-sh.xml</a>. The defaut url is set to 
        <code>http://svn.myHost.org/repos</code> and you can change it 
        by setting <code>project.svn.url</code> in your project 
        locationmap.</p>
    </section>
    
    <section>
      <title>To Do List</title>
      <p>The status.xml file can also be used to manage a list of todo items for
      the community. For example, here is a 
      <a href="todo.html">psuedo todo list</a> for this plugin (our real todo list
      is managed in an Issue Tracker, one day we hope to add support for that
      here too).</p>
    </section>
    
    <section>
      <title>Release Notes</title>
      <p>To produce release notes you must maintain a <code>status.xml</code> file
      for your project and request a page with an URL such as 
      <code>http://domain.com/releaseNotes_0.7-dev.html</code>, this will be produce
      the release notes for 0.7-dev.</p>
      
      <p>If the version number ends with <code>-dev</code> a warning will be included 
      in the generated page, informing the reader that it is a development version and
      therefore the list of changes is incomplete.</p>

      <p>For a <code>status.xml</code> <code>action</code> toi be included in the 
      release notes it must have an attribute <code>importance="high"</code>. When
      writing actions in <code>status.xml</code> you should write them with the
      following two questions in mind:</p>

      <ul>
        <li>should it be importance="high"?</li>
        <li>will the action read correctly in the release notes?</li>
      </ul>
      
      <p>The introductory text in the release notes comes from the (optional) 
      element <code>notes</code> (a child of the <code>release</code> element).</p>
      
      <note>The same options with respect to retrieveing specific versions of the
      release notes are available as with the changes feature (discuseed above).</note>
    </section>
    
    <section>
      <title>Developers List</title>
      <p>The status.xml file can also contain a list of committers and 
      contributors which can, optionally, be displayed as part of the changes file.</p>
      
      <p>At the time of writing this functionality is quite minimal, being just
      a list of authors at the end of the changes document. However, in future 
      releases it is intended that a more configurable output will be 
      available.</p>
      
      <section>
        <title>Contributor List</title>
        <p>It may be that some items have been contributed by authors other
        than those listed in the developer list. These are accredited in a
        <code>due-to</code> attribute of the <code>action</code> element in
        status.xml. A list of this contributors is made available at the
        end of the release notes for each version.</p>
      </section>
    </section>
    
    
    <section>
      <title>Use Cases</title>
      <p>Projects can manage a document describing various use cases for the
      application. These use cases can then be used to generate useful developer
      and user documentation, as well as helping to track the implementation
      status of features.</p>
      
      <p>Some of the uses of this feature are:</p>

      <ul>
        <li>during design - what needs to be done</li>
        <li>during development - what needs to be done/has been done</li>
        <li>during use - user documentation of common activities</li>
        <li>during maintenance - how something was implemented</li>
      </ul>
      
      <p>To see some examples take a look at:</p>
      
      <ul>
        <li><a href="docs/user/useCases/all.html">User Docs</a> for the Use Case features of this plugin</li>
        <li><a href="docs/developer/useCases/all.html">Developer Docs</a> for the Use Case features of this plugin</li>
      </ul>
    </section>
    
    <section>
      <title>Project Details</title>
      <p>Project details are generated from a project descriptor file.
      This file can be in any of the followin formats:</p>
      
      <ul>
        <li>DOAP</li>
        <li>DOAP over ATOM</li>
      </ul>
      
      <note>We need your help in adding more formats.</note>
      
      <p>The location of this descriptor file is specified in the locationmap
      with the hint <code>pproject.descriptor</code>. This defaults to
      the root of your projects content directory. To place your descriptor 
      in a different location simply add
      a matcher like that shown below in your <code>projectInfo.locationmap-projects</code>
      file. This file is, by default, in the root of the webapp directory.</p>
      
      <source><![CDATA[
    <match pattern="project.descriptor">
      <location src="[path/to/descriptor/file]" />
    </match>    
      ]]></source>
            
      <p>To retrieve the project details page request the file
      <code>/projectDetails.html</code>.</p>
      
      <section>
        <title>Multiple Projects</title>
        <p>You can use the projectInfo plugin to pull together project 
        information for multiple projects. For example, take a look at
        the project details for 
        <a href="projectDetails/projectDetails.forrest.html">Apache Forrest</a>.</p>
        
        <p>Using the locatoinmap you can retrieve this content from 
        anywhere you want, for example, the DOAP file for the Forrest 
        project comes from directly from SVN, thus we are always 
        assured of it being up to date.</p>
        
        <p>To retrieve the project details of another project make a request
        for <code>projectDetails/projectDetails.[PROJECT_NAME].html</code>. For this to work 
        your project locationmap muest have an entry like this:</p>
        
        <source><![CDATA[    
    <match pattern="project.descriptor.forrest">
      <location src="http://svn.apache.org/repos/asf/forrest/trunk/site-author/content/doap.xml"/>
    </match>    
        ]]></source>

<warning>
FOR-910 "project DOAP file retrieved numerous times during docs generation"
so use a local copy instead.
</warning>
        
        <p>Of course, if you have a central location for all your project descriptor
        files you could use a match like this:</p>
        
        <source><![CDATA[    
    <match pattern="project.descriptor.*">
      <location src="path_to_descriptors/{1}.xml"/>
    </match>    
        ]]></source>
        
        <warning>The indexing of projects (described below) does not currently work with
        wildcard matchers in the locationmap.</warning>
        
      </section>
      
      <section>
        <title>Project Indexes</title>
        <p>The system will automatically create an index of projects from your 
        projects locationmap file. For example, the "Projects" section of the 
        navigation on the left is automatically generated.</p>
        
        <note>There is considerable repetition in the indexes in this demo. The 
        intention is to show the range of indexes that can be created. You should 
        select the most suitable for your individual project.</note>
        
        <warning>The indexes to be included in your site navigation only work
        correctly when generating a static site. You should only use page based
        indexes for dynamic sites.</warning>
      </section>
      
    </section>
    
    <section>
      <title>Experimental Features</title>
      <p>These features are operational, however, they are not fully developed and
      may change considerably before they become part of the official feature set.
      You can use them, but be prepared for changes, possibly without warning. If you
      do use these features we recomend that you join the developers mailing list.</p>
      
      <section>
        <title>Configuration</title>
        <p>This plugin uses an experimental properties system that allows plugins
        to expose configuration information to the project. It is likely that at
        least some of these configuration options will eventually move into Dispatcher
        based contracts. In the meantime, you can use this config system to control
        some aspects of the display information. See the 
        <code>forrest.properties.xml</code> file for a description of the config
        options available. To alter the configuration simply override these
        properties in your projects <code>forrest.properties.xml</code> file.</p>
        
      </section>
    </section>
  </body>
</document>
