Return-Path: Delivered-To: apmail-jakarta-avalon-cvs-archive@apache.org Received: (qmail 8875 invoked from network); 17 Jul 2002 13:48:47 -0000 Received: from unknown (HELO nagoya.betaversion.org) (192.18.49.131) by daedalus.apache.org with SMTP; 17 Jul 2002 13:48:47 -0000 Received: (qmail 29178 invoked by uid 97); 17 Jul 2002 13:48:59 -0000 Delivered-To: qmlist-jakarta-archive-avalon-cvs@jakarta.apache.org Received: (qmail 29129 invoked by uid 97); 17 Jul 2002 13:48:58 -0000 Mailing-List: contact avalon-cvs-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Avalon CVS List" Reply-To: "Avalon Developers List" Delivered-To: mailing list avalon-cvs@jakarta.apache.org Received: (qmail 29116 invoked by uid 97); 17 Jul 2002 13:48:58 -0000 X-Antivirus: nagoya (v4198 created Apr 24 2002) Date: 17 Jul 2002 13:48:38 -0000 Message-ID: <20020717134838.40861.qmail@icarus.apache.org> From: mcconnell@apache.org To: jakarta-avalon-excalibur-cvs@apache.org Subject: cvs commit: jakarta-avalon-excalibur/assembly/src/xdocs/stylesheets changes.vsl docs.vsl project.xml templates.vm velocity.properties X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N mcconnell 2002/07/17 06:48:38 Modified: assembly .cvsignore build.xml default.properties assembly/src .cvsignore assembly/src/etc merlin.html project.mf assembly/src/java/org/apache/excalibur/merlin/model KernelDescriptor.java assembly/src/java/org/apache/excalibur/merlin/model/builder XMLKernelCreator.java Added: assembly/src/xdocs container.xml containers.xml deployment.xml index.xml kernel.xml assembly/src/xdocs/css ns4_only.css print.css site.css tigris.css assembly/src/xdocs/images build.gif code.gif design.gif merlin_logo.gif meta.gif overview.gif update.gif assembly/src/xdocs/stylesheets changes.vsl docs.vsl project.xml templates.vm velocity.properties Log: Addition of site documentation. Revision Changes Path 1.7 +2 -0 jakarta-avalon-excalibur/assembly/.cvsignore Index: .cvsignore =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/.cvsignore,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- .cvsignore 12 Jul 2002 15:16:37 -0000 1.6 +++ .cvsignore 17 Jul 2002 13:48:37 -0000 1.7 @@ -1,6 +1,8 @@ local.properties build dist +tools checkstyle.cache kernel.log extensions +velocity.log 1.24 +109 -49 jakarta-avalon-excalibur/assembly/build.xml Index: build.xml =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/build.xml,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- build.xml 16 Jul 2002 10:58:20 -0000 1.23 +++ build.xml 17 Jul 2002 13:48:37 -0000 1.24 @@ -16,16 +16,17 @@ ----------- ${project.title} - + General Targets: ---------------- all - clean, build and dist - build - invokes the general build target + build - compilation and jar creation + deploy - places internal and external jars into an extensions directory javadoc - javadoc API generation - dist - executes build, javadoc and support file creation - clean - destroy the build directory - test - run the component + clean - destroy the build, dist and extensions directory + docs - generates the project documentation + help - this message @@ -33,43 +34,53 @@ + - - + + + - + + + - + - - + + - + + + + + + + - + - + @@ -78,7 +89,7 @@ - + @@ -87,8 +98,8 @@ - - + + @@ -103,26 +114,26 @@ - - + + - + - + - - - + + @@ -134,26 +145,26 @@ - + - + - + - - + @@ -168,7 +179,7 @@ - + @@ -180,13 +191,13 @@ - + - + @@ -209,18 +220,18 @@ packagenames="org.apache.excalibur.merlin.*" overview="${merlin.page}" > - + - - - + + + - + @@ -239,15 +250,15 @@ packagenames="org.apache.excalibur.meta.*" overview="${meta.page}" > - + - - + + - + @@ -258,7 +269,7 @@ - + @@ -275,27 +286,76 @@ - + - - + + + + + + + + + AnakiaTask is not present! Please check to make sure that + the velocity jar and dependent resources are in your classpath. + + + + + + + + + + + + + + + + + + + + + + + + + + +

Kernel Model

-Merlin seperates the notion of a kernel from a container. A kernal manages resources (Objects) whereas a container manages services (Objects that serve as service providers and consumers). The Merlin implementation provides a default kernal that manages a container hierachy. The kernel provides the framework for overall management including startup, shutting down, extensions management, and other system wide facilities. The Melin implementation provides a utility class {@link org.apache.excalibur.merlin.Main} that handles establish of a kernel based on a single command line argument.

+

Merlin seperates the notion of a kernel from a container. A kernal manages resources (Objects) whereas a container manages services (Objects that serve as service providers and consumers). The Merlin implementation provides a default kernal that manages a container hierachy. The kernel provides the framework for overall management including startup, shutting down, extensions management, and other system wide facilities. The Melin implementation provides a utility class {@link org.apache.excalibur.merlin.Main} that handles establish of a kernel based on a single command line argument.

A merlin kernel is created using a kernel model ({@link org.apache.excalibur.merlin.model.KernelDescriptor}). The model may be defined programatically or through an XML file. A kernel XML file contains the defintion of kernal execution parameters and a root container.

Minimilist kernel defintion.

1.10 +1 -1 jakarta-avalon-excalibur/assembly/src/etc/project.mf Index: project.mf =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/etc/project.mf,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- project.mf 12 Jul 2002 15:11:57 -0000 1.9 +++ project.mf 17 Jul 2002 13:48:37 -0000 1.10 @@ -7,7 +7,7 @@ Implementation-Version: 0.1 Class-Path: avalon-framework.jar logkit.jar excalibur-logger-1.0.jar excalibur-i18n-1.0.jar excalibur-configuration-1.0.jar excalibur-extension-1.0a.jar - avalon-meta.jar + avalon-meta.jar xerces-2.0.1.jar xml-apis.jar xalan-2.3.1.jar Main-Class: org.apache.excalibur.merlin.Main Name: org/apache/excalibur/merlin/container/DefaultContainer.class 1.4 +12 -1 jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/model/KernelDescriptor.java Index: KernelDescriptor.java =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/model/KernelDescriptor.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- KernelDescriptor.java 14 Jul 2002 00:55:12 -0000 1.3 +++ KernelDescriptor.java 17 Jul 2002 13:48:37 -0000 1.4 @@ -173,4 +173,15 @@ return m_classpath; } + /** + * Return the root container. + * + * @return the root {@link ContainerDescriptor}. + */ + public ContainerDescriptor getContainer() + { + return m_container; + } + + } 1.5 +3 -1 jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/model/builder/XMLKernelCreator.java Index: XMLKernelCreator.java =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/model/builder/XMLKernelCreator.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- XMLKernelCreator.java 14 Jul 2002 12:11:20 -0000 1.4 +++ XMLKernelCreator.java 17 Jul 2002 13:48:37 -0000 1.5 @@ -60,6 +60,8 @@ LoggingDescriptor logging = createLoggingDescriptor( config.getChild("logging"), name ); ExtensionsDescriptor extensions = createExtensionsDescriptor( config.getChild("extensions") ); ClasspathDescriptor classpath = createClasspathDescriptor( config.getChild("classpath") ); + + manager.addClasspath( classpath ); ContainerDescriptor container = createContainerDescriptor( config.getChild("container"), manager ); return new KernelDescriptor( name, logging, extensions, container ); } 1.1 jakarta-avalon-excalibur/assembly/src/xdocs/container.xml Index: container.xml =================================================================== Container Stephen McConnell

The Merlin system provides support for a cascading containers. This model enables component assemblers to associate jar files under a protected container scope where each container is associated with its own classloader.

Merlin will handle resolution of service dependencies for components contained in containers by looking for explicitly declared components commencing within the local container, and working progressively up the container hierachy. If no explict solutions are resolved, Merlin will attempt to build an implicit solution based on components declared in the respective container classpath declarations.

A new container is created using a container model. The model is the defintion of the container, its classpath, and the profiles of the components it is resposible for managing. Container models are declared programatically or via an XML description.

Minimilist container defintion.

      <container name="root">
        <classpath>
          <fileset dir="dist">
            <include name="demo.jar"/>
          </fileset>
        </classpath>
        <component name="test" class="org.apache.excalibur.playground.BasicComponent"/>
      </container>
  
Copyright (c) @year@ The Jakarta Apache Project All rights reserved. $Revision: 1.1 $ $Date: 2002/07/17 13:48:37 $
1.1 jakarta-avalon-excalibur/assembly/src/xdocs/containers.xml Index: containers.xml =================================================================== Containers Stephen McConnell

The Merlin system provides support for a cascading containers. This model enables component assemblers to associate jar files under a protected container scope where each container is associated with its own classloader.

Merlin will handle resolution of service dependencies for components contained in containers by looking for explicitly declared components commencing within the local container, and working progressively up the container hierachy. If no explict solutions are resolved, Merlin will attempt to build an implicit solution based on components declared in the respective container classpath declarations.

A new container is created using a container model. The model is the defintion of the container, its classpath, and the profiles of the components it is resposible for managing. Container models are declared programatically or via an XML description.

Minimilist container defintion.

      <container name="root">
        <classpath>
          <fileset dir="dist">
            <include name="demo.jar"/>
          </fileset>
        </classpath>
        <component name="test" class="org.apache.excalibur.playground.BasicComponent"/>
      </container>
  
Copyright (c) @year@ The Jakarta Apache Project All rights reserved. $Revision: 1.1 $ $Date: 2002/07/17 13:48:37 $
1.1 jakarta-avalon-excalibur/assembly/src/xdocs/deployment.xml Index: deployment.xml =================================================================== Deployment Stephen McConnell

Components types deployed under this framework must be declared as formal component types using a <classname>.xinfo descriptor as defined by the Avalon Meta Model,. Components types may also deployed with default profile criteria and configuration information.

  • <classname>.xinfo
    • General component type information.
    • Context constraints.
    • Dependecies.
    • Service declarations.
  • <classname>.xprofile
    • Packaged profile containing type instantiation criteria.
  • <classname>.xconfig
    • Default configuration/parameter.
    • Default context directives.

Components assembly rerquires the declaration of at least one component with the kernal configuration profile. The profile enables the declaration of a hierachy of containers and component profiles within containers. The containers within a hierachy collaborate to resolve service dependecies for the components they respectively manage.

Example components and a kernel.xml profile are included in the distribution.

Copyright (c) @year@ The Jakarta Apache Project All rights reserved. $Revision: 1.1 $ $Date: 2002/07/17 13:48:37 $
1.1 jakarta-avalon-excalibur/assembly/src/xdocs/index.xml Index: index.xml =================================================================== Overview Stephen McConnell

Merlin 2 is a container including a set of services dealing with the definition of a system kernel, container hierarchies, component assembly, component deployment, and decommissioning.

Main components of the framework include:

  • Application Kernel.
  • Heirachical container model.
  • Automated assembly system.
  • Component defaults management.
  • Candidate resolution.

The function of the kernel is to provide a set of bootstap services and context entries to the container it is managing, and subsequently publish establish entries and services (derived from container deployment) towards kernel clients.

The Merlin project includes a number of demonstration components. One of these components declares several dependencies, which in turn refer to other components with dependencies. A sample kernel.xml file included in this distribution references this component as a target. Merlin handles the resolution of all dependecies, activation ordering, and the lifecycle processing automatically.

To build and execute the demo, invoke the following commands:

        $ ant
        $ kernel 
        

For a description of the demo see the javadoc document for the Main class.

Merlin 2.0 is under active ALPHA development. APIs are subject to change. Merlin 2.0 is operational and usable for a broad spectrum of components. However, work relating to configuration management, context management and service manager management.

Copyright (c) @year@ The Jakarta Apache Project All rights reserved. $Revision: 1.1 $ $Date: 2002/07/17 13:48:37 $
1.1 jakarta-avalon-excalibur/assembly/src/xdocs/kernel.xml Index: kernel.xml =================================================================== Kernel Stephen McConnell

Merlin seperates the notion of a kernel from a container. A kernel manages resources (Objects) whereas a container manages services. The Merlin implementation provides a default kernel that manages a container hierachy. The DefaultKernel implementation provides the framework for overall management including startup, shutting down, extensions management, and other system wide facilities. The Melin implementation provides a utility class (Main) that handles establish of a kernel based on a single command line argument.

The function of the kernel is to provide a set of bootstap services and context entries to the container it is managing, and subsequently publish establish entries and services (derived from container deployment) towards kernel clients.

Kernel to Container conceptual relationship.

A merlin kernel is created using a kernel model (KernelDescriptor). The model may be defined programatically or through an XML file. A kernel XML file contains the defintion of kernel execution parameters and a root container.

Minimilist kernel defintion.

    <kernel>
      <classpath>
        <fileset dir="dist">
          <include name="demo.jar"/>
        </fileset>
      </classpath>
      <container name="root">
        <component name="test" class="org.apache.excalibur.playground.BasicComponent"/>
      </container>
    </kernel>
  
Copyright (c) @year@ The Jakarta Apache Project All rights reserved. $Revision: 1.1 $ $Date: 2002/07/17 13:48:37 $
1.1 jakarta-avalon-excalibur/assembly/src/xdocs/css/ns4_only.css Index: ns4_only.css =================================================================== /* simple rules suitable for Netscape 4.x only; richer rules are in tigris.css. see */ /* colors, backgrounds, borders, link indication */ body { background: #fff; color: #000; } #leftcol a:link, #leftcol a:visited { color: blue; } a:active, a:hover, #leftcol a:active, #leftcol a:hover { color: #f30; } #login a:link, #login a:visited { color: white; text-decoration: underline; } #banner a:active, #banner a:hover { color: #f90; } #leftcol a, #breadcrumbs a { text-decoration: none; } h2 .lastchild { color: #777 } .a td { background: #ddd; } .b td { background: #efefef; } .tabs td, .tabs th { background-color: #ddd; } body .app th { background-color: #bbb; } body .tabs th { background-color: #888; color: #fff; } body .app .axial th { background-color: #ddd; color: black } .tabs td { background-color: #ddd; } .alert { color: #c00; } .confirm { color: green; } .info { color: blue; } .selection { background: #ffc; } #login { color: #fff; } #helptext th { background: #cc9; } #helptext td { background: #ffc; } .tabs a { text-decoration: none; } #navcolumn div strong { color: #555; } #banner, #banner td { background: #036; color: #fff; } body #banner #login a { color: white; } /* font and text properties, exclusive of link indication, alignment, text-indent */ body, div, p, th, td, li, dl, dd { font-family: Lucida, Arial, Helvetica, sans-serif; } code, pre { font-family: 'Andale Mono', Courier, monospace; } h2, h3, h4 { font-family: Tahoma, Verdana, Helvetica, Arial, sans-serif; } .selection { font-weight: bold } #login .username { font-weight: bold; } /* box properties (exclusive of borders), positioning, alignments, list types, text-indent */ th, td { text-align: left; vertical-align: top } .right { text-align: right; } .center { text-align: center; } body .app .axial th { text-align: right; } .app .axial td th { text-align: left; } body td .stb { margin-top: 1em; text-indent: 0; } body td .mtb { margin-top: 2em; text-indent: 0; } dd { margin-bottom: .67em; } #footer { margin: 4px } #helptext { margin-top: 1em } #helptext td div { margin: .5em } .courtesylinks { margin-top: 1em; padding-top: 1em } #navcolumn div { margin-bottom: .5em; } #navcolumn div div { margin-top: .3em } #navcolumn div div { padding-left: 1em; } #banner, #banner td { vertical-align: middle; } body.docs, body.nonav { margin: 1em } 1.1 jakarta-avalon-excalibur/assembly/src/xdocs/css/print.css Index: print.css =================================================================== #banner, #footer, #leftcol, #breadcrumbs, .docs #toc, .docs .courtesylinks { display: none; } body.docs div.docs { margin: 0 !important; border: none !important } 1.1 jakarta-avalon-excalibur/assembly/src/xdocs/css/site.css Index: site.css =================================================================== div#banner { border-top: 1px solid #fff; border-bottom: 1px solid #aaa; } #banner, #banner td { background: #fff; color: #036; } #source { background-color: #fff; color: #000; border-right: 1px solid #888; border-left: 1px solid #888; border-top: 1px solid #888; border-bottom: 1px solid #888; margin-right: 7px; margin-left: 7px; margin-top: 1em; } #source pre { margin-right: 7px; margin-left: 7px; } 1.1 jakarta-avalon-excalibur/assembly/src/xdocs/css/tigris.css Index: tigris.css =================================================================== /* contains rules unsuitable for Netscape 4.x; simpler rules are in ns4_only.css. see */ /* colors, backgrounds, borders, link indication */ body { background: #fff; color: #000; } .app h3, .app h4, .tabs td, .tabs th, .functnbar { background-image: url(../images/nw_min.gif); background-repeat: no-repeat; } #navcolumn div div, body.docs #toc li li { background-image: url(../images/strich.gif); background-repeat: no-repeat; background-position: .5em .5em; } #navcolumn div div.heading { background-image: none; } .app h3, .app h4 { color: #fff; } .app h3 { background-color: #036; } .app h4 { background-color: #888; } .a td { background: #ddd; } .b td { background: #efefef; } table, th, td { border: none } .mtb { border-top: solid 1px #ddd; } div.colbar { background: #bbb; } #banner { border-top: 1px solid #369; border-bottom: 1px solid #003; } div#helptext th { border-bottom: 1px solid #996; border-right: 1px solid #996; } div#helptext td { border-bottom: 1px solid #cc9; border-right: 1px solid #cc9; } .tabs th { border-right: 1px solid #333; background-color: #ddd; color: #fff; } .tabs td { background-color: #999; border-bottom: 1px solid #fff; border-right: 1px solid #fff; } .tabs { border-bottom: 6px #ddd solid; } .tabs th, .tabs th a:link, .tabs th a:visited { color: #555; } .tabs td, .tabs td a:link, .tabs td a:visited { color: #fff; } .tabs a { text-decoration: none; } #navcolumn { background: #eee; border-right: 1px solid #aaa; border-bottom: 1px solid #aaa; } #breadcrumbs { border-bottom: 1px solid #aaa; background-color: #ddd } #navcolumn, #breadcrumbs { border-top: 1px solid #fff; } #rightcol div.www, #rightcol div.help { border: 1px solid #ddd; } div#navcolumn div.focus { border-top: 1px solid #aaa; border-left: 1px solid #aaa; background-color: #fff; } body.docs div.docs { background: #fff; border-left: 1px solid #ddd; border-top: 1px solid #ddd; } body.docs { background: #eee url(../images/help_logo.gif) top right no-repeat !important; } .docs h3, .docs h4 { border-top: solid 1px #000; } #alerterrormessage { background: url(../images/icon_alert.gif) top left no-repeat !important; } .functnbar { background-color: #aaa; } .functnbar2, .functnbar3 { background: #aaa url(../images/sw_min.gif) no-repeat bottom left; } .functnbar3 { background-color: #ddd; } .functnbar, .functnbar2, .functnbar3 { color: #000; } .functnbar a, .functnbar2 a, .functnbar3 a { color: #000; text-decoration: underline; } #topmodule { background: #ddd; border-top: 1px solid #fff; border-bottom: 1px solid #aaa; border-right: 1px solid #aaa; } #topmodule #issueid { border-right: 1px solid #aaa; } a:link, #navcolumn a:visited, .app a:visited, .tasknav a:visited { color: blue; } a:link.selfref, a:visited.selfref { color: #555 !important; text-decoration: none; } a:active, a:hover, #leftcol a:active, #leftcol a:hover { color: #f30 !important; } #login a:link, #login a:visited { color: white; text-decoration: underline; } #banner a:active, #banner a:hover { color: #f90 !important; } #leftcol a, #breadcrumbs a { text-decoration: none; } #apphead h2 em { color: #777; } a:link.selfref, a:visited.selfref { color: #555 !important; text-decoration: none; } .app th { background-color: #bbb; } .axial th { background-color: #ddd; color: black } .alert { color: #c00; } .confirm { color: green; } .info { color: blue; } .selection { background: #ffc; } #login { color: #fff; } #helptext th { background: #cc9; } #helptext td { background: #ffc; } #navcolumn div strong { color: #000; } #banner, #banner td { background: #036; color: #fff; } body #banner #login a { color: #fff; } h4 a:link, h4 a:visited { text-decoration: underline; color: #fff; } /* font and text properties, exclusive of link indication, alignment, text-indent */ body, th, td, input, select, textarea, h2 small { font-family: Verdana, Helvetica, Arial, sans-serif; } code, pre { font-family: 'Andale Mono', Courier, monospace; } html body, body th, body td, textarea, h2 small, .app h3, .app h4, #rightcol h3, #bodycol pre, #bodycol code { font-size: x-small; voice-family: "\"}\""; voice-family: inherit; font-size: small } html>body, html>body th, html>body td, html>body input, html>body select, html>body textarea, html>body h2 small, html>body .app h3, html>body .app h4, html>body #rightcol h3, html>body #bodycol pre, html>body #bodycol code { font-size: small } small, div#footer td, div#login, div.tabs th, div.tabs td, input, select, .paginate, .functnbar, .functnbar2, .functnbar3, #breadcrumbs td, .courtesylinks, #rightcol div.help, .colbar, .tasknav, body.docs div#toc, #leftcol { font-size: x-small; voice-family: "\"}\""; voice-family: inherit; font-size: x-small } html>body small, html>body div#footer td, html>body div#login, html>body div.tabs th, html>body div.tabs td, html>body input, html>body select, html>body .paginate, html>body .functnbar, html>body .functnbar2, html>body .functnbar3, html>body #breadcrumbs td, html>body .courtesylinks, html>body #rightcol div.help, html>body .colbar, html>body .tasknav, html>body.docs #toc, html>body #leftcol { font-size: x-small } #bodycol h2 { font-family: Tahoma, Verdana, Helvetica, Arial, sans-serif; font-size: 1.5em; font-weight: normal; } .tabs td, .tabs th, dt, .tasknav .selfref, #login .username, .selection { font-weight: bold } h4 { font-size: 1em; } #apphead h2 em { font-style: normal; } /* box properties (exclusive of borders), positioning, alignments, list types, text-indent */ #bodycol h2 { margin-top: .3em; margin-bottom: .5em; } p, ul, ol, dl { margin-top: .67em; margin-bottom: .67em; } h3, h4 { margin-bottom: 0; } form { margin-top: 0; margin-bottom: 0; } #bodycol { padding-left: 12px; padding-right: 12px; width: 100%; voice-family: "\"}\""; voice-family: inherit; width: auto; } html>body #bodycol { width: auto; } .docs { line-height: 1.4; } .app h3, .app h4 { padding: 5px; margin-right: 2px; margin-left: 2px; } .h3 p, .h4 p, .h3 dt, .h4 dt { margin-right: 7px; margin-left: 7px; } .tasknav { margin-bottom: 1.33em } div.colbar { padding: 3px; margin: 2px 2px 0; } .tabs { margin-top: .67em; margin-right: 2px; margin-left: 2px; } #leftcol { padding-bottom: .5em; } #breadcrumbs td { vertical-align: middle; padding: 2px 8px; } .tabs td, .tabs th { padding: 3px 9px; } #rightcol div.www, #rightcol div.help { padding: 0 .5em } #navcolumn { margin: -8px -8px 0 -8px; padding: 4px; } #navcolumn div { padding-left: 5px } div#navcolumn div div { margin-top: .3em; margin-bottom: .3em; } div#navcolumn div.focus { margin-top: -.1em; padding: .2em 4px; } body.docs #toc { position: absolute; top: 15px; left: 0px; width: 120px; padding: 0 20px 0 0 } body.docs #toc ul, #toc ol { margin-left: 0; padding-left: 0; } body.docs #toc li { margin-top: 7px; padding-left: 10px; list-style-type: none; } body.docs div.docs { margin: 61px 0 0 150px; padding: 1em 2em 1em 1em !important; } .docs p+p { text-indent: 5%; margin-top: -.67em } .docs h3, .docs h4 { margin-bottom: .1em; padding-top: .3em; } #alerterrormessage { padding-left: 100px; } .functnbar, .functnbar2, .functnbar3 { padding: 5px; margin: .67em 2px; } #topmodule td { vertical-align: middle; padding: 2px 8px } body { padding: 1em; } body.composite, body.docs { margin: 0; padding: 0; } th, td { text-align: left; vertical-align: top } .right { text-align: right !important; } .center { text-align: center !important; } .axial th { text-align: right; } .app .axial td th { text-align: left; } body td .stb { margin-top: 1em; text-indent: 0; } body td .mtb { margin-top: 2em; text-indent: 0; } dd { margin-bottom: .67em; } #footer { margin: 4px } #helptext { margin-top: 1em } #helptext td div { margin: .5em } .courtesylinks { margin-top: 1em; padding-top: 1em } #navcolumn div { margin-bottom: .5em; } #navcolumn div div { margin-top: .3em } #navcolumn div div { padding-left: 1em; } #banner, #banner td { vertical-align: middle; } 1.1 jakarta-avalon-excalibur/assembly/src/xdocs/images/build.gif <> 1.1 jakarta-avalon-excalibur/assembly/src/xdocs/images/code.gif <> 1.1 jakarta-avalon-excalibur/assembly/src/xdocs/images/design.gif <> 1.1 jakarta-avalon-excalibur/assembly/src/xdocs/images/merlin_logo.gif <> 1.1 jakarta-avalon-excalibur/assembly/src/xdocs/images/meta.gif <> 1.1 jakarta-avalon-excalibur/assembly/src/xdocs/images/overview.gif <> 1.1 jakarta-avalon-excalibur/assembly/src/xdocs/images/update.gif <> 1.1 jakarta-avalon-excalibur/assembly/src/xdocs/stylesheets/changes.vsl Index: changes.vsl =================================================================== #parse( "templates.vm" ) ## Defined variables #set ($bodybg = "#ffffff") #set ($bodyfg = "#000000") #set ($bodylink = "#525D76") #set ($bannerbg = "#525D76") #set ($bannerfg = "#ffffff") #set ($subbannerbg = "#828DA6") #set ($subbannerfg = "#ffffff") #set ($tablethbg = "#039acc") #set ($tabletdbg = "#a0ddf0") #set ($pound = "#" ) #changes() #macro (change $action)

$action.getText() ($action.getAttributeValue("dev"))

#end #macro (changeset $release)
Revision $release.getAttributeValue("version") ($release.getAttributeValue("date"))
    #foreach ($action in $release.getChildren("action"))
  • #change ($action)
  • #end
#end #macro (changes) #header
ChangeLog
#set ($releases = $root.getChildren("release")) #foreach ( $release in $releases ) #changeset ($release) #end
#footer #end 1.1 jakarta-avalon-excalibur/assembly/src/xdocs/stylesheets/docs.vsl Index: docs.vsl =================================================================== #parse ( "templates.vm" ) #macro(document) #header() #set($allSections = $root.getChild("body").getChildren("section")) #foreach( $section in $allSections ) #section ($section) #end #footer() #end #macro ( subsection $subsection)
#if ( $subsection.getAttributeValue("anchor") ) #set ($anchor = $subsection.getAttributeValue("anchor")) #else #set ($anchor = $subsection.getAttributeValue("name")) #end

$subsection.getAttributeValue("name")

#foreach ( $items in $subsection.getChildren() ) #copy($items) #end
#end #macro (section $section)
#if ( $section.getAttributeValue("anchor") ) #set ($anchor = $section.getAttributeValue("anchor")) #else #set ($anchor = $section.getAttributeValue("name")) #end

$section.getAttributeValue("name")

#foreach ( $items in $section.getChildren() ) #if ($items.getName().equals("subsection")) #subsection ($items) #else #copy($items) #end #end
#end #parse ( "templates.vm" ) #document() 1.1 jakarta-avalon-excalibur/assembly/src/xdocs/stylesheets/project.xml Index: project.xml =================================================================== Merlin Service Management Merlin 1.1 jakarta-avalon-excalibur/assembly/src/xdocs/stylesheets/templates.vm Index: templates.vm =================================================================== #macro (header) #set ($authors = $root.getChild("properties").getChildren("author")) #foreach ( $au in $authors ) #metaauthor ( $au.getText() $au.getAttributeValue("email") ) #end $project.getChild("title").getText() - $root.getChild("properties").getChild("title").getText()
#end #macro (footer)
#getAuthorList()
#end #macro ( subsection $subsection)
#if ( $subsection.getAttributeValue("anchor") ) #set ($anchor = $subsection.getAttributeValue("anchor")) #else #set ($anchor = $subsection.getAttributeValue("name")) #end

$subsection.getAttributeValue("name")

#foreach ( $items in $subsection.getChildren() ) #copy($items) #end
#end #macro (section $section)
#if ( $section.getAttributeValue("anchor") ) #set ($anchor = $section.getAttributeValue("anchor")) #else #set ($anchor = $section.getAttributeValue("name")) #end

$section.getAttributeValue("name")

#foreach ( $items in $section.getChildren() ) #if ($items.getName().equals("subsection")) #subsection ($items) #else #copy($items) #end #end
#end #macro ( table $table) #set ($rowcount = 1) #foreach ( $items in $table.getChildren() ) #if ($items.getName().equals("tr")) #tr ($items) #end #end
#end #macro ( tr $tr) #printRow ($rowcount) #set ($rowcount = $rowcount + 1) #foreach ( $items in $tr.getChildren() ) #if ($items.getName().equals("td")) #td ($items) #elseif ($items.getName().equals("th")) #th ($items) #end #end #end #macro (printRow $count) #if ($count % 2 > 0) #else #end #end #macro ( td $value) #if ($value.getText().length() != 0 || $value.hasChildren()) #copycontent($value) #else   #end #end #macro ( th $value) #if ($value.getText().length() != 0 || $value.hasChildren()) #copycontent($value) #else   #end #end #macro ( anchor $name $value ) #if ($value.startsWith("http://")) $name #elseif ($value.startsWith("/site")) $name #elseif ( $value.startsWith("/") ) $name #else $name #end #end #macro ( metaauthor $author $email ) #end #macro ( image $value ) #if ($value.getAttributeValue("width")) #set ($width=$value.getAttributeValue("width")) #end #if ($value.getAttributeValue("height")) #set ($height=$value.getAttributeValue("height")) #end #if ($value.getAttributeValue("align")) #set ($align=$value.getAttributeValue("align")) #end #end #macro ( source $value)
$escape.getText( $value.text.trim() )
#end #macro ( makeProject ) #set ($menus = $project.getChild("body").getChildren("menu")) #foreach ( $menu in $menus )
$menu.getAttributeValue("name") #foreach ( $item in $menu.getChildren() ) #set ($name = $item.getAttributeValue("name"))
#anchor($name $item.getAttributeValue("href"))
#end
#end #end #macro (getProjectImage) #if ($project.getChild("logo")) #set ( $logoString = $project.getChild("logo").getAttributeValue("href") ) #if ( $logoString.startsWith("/") ) $project.getChild( #else $project.getChild( #end #else #end #end #macro (copy $element) #if ( $element.name == "a" ) #anchor ( $element.content $element.getAttributeValue( "href" ) ) #elseif ( $element.name == "img" ) #image ($element) #elseif ( $element.name == "source" ) #source ($element) #elseif ( $element.name == "table" ) #table ($element) #elseif ( $element.name == "pre" )
$element.content
#elseif ( $element.name == "escaped" ) $element.text #else <$element.name #foreach ( $attr in $element.attributes ) $attr.name="$attr.value" #end >#copycontent($element) #end #end #macro (getAuthorList)
#set ($authors = $root.getChild("properties").getChildren("author")) #foreach ( $au in $authors ) #if( $velocityCount == 1 )by #end #if( $velocityCount != 1 ),#end $au.getText() #end
#end #macro (copycontent $element) #if ( $element.children.size() > 0 ) #foreach ( $child in $element.content ) #if ( $child.class.name.endsWith( "Element" ) ) #copy( $child ) #else $escape.getText( $child.getText() ) #end #end #else $element.content #end #end 1.1 jakarta-avalon-excalibur/assembly/src/xdocs/stylesheets/velocity.properties Index: velocity.properties =================================================================== file.resource.loader.path=src/xdocs/stylesheets # disable this for now velocimacro.library=templates.vm -- To unsubscribe, e-mail: For additional commands, e-mail: