ajack 2004/02/15 09:32:06
Modified: python/gump engine.py
python/gump/model workspace.py rawmodel.py server.py
loader.py
template/forrest/src/documentation/content/xdocs site.xml
python/gump/document resolver.py text.py forrest.py
python/gump/output nag.py
python .cvsignore
src/documentation skinconf.xml
Added: python/gump/model tracker.py
Log:
Tinkering with tracker metadata (e.g. JIRA)
Revision Changes Path
1.58 +31 -18 jakarta-gump/python/gump/engine.py
Index: engine.py
===================================================================
RCS file: /home/cvs/jakarta-gump/python/gump/engine.py,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -r1.57 -r1.58
--- engine.py 13 Feb 2004 22:13:55 -0000 1.57
+++ engine.py 15 Feb 2004 17:32:05 -0000 1.58
@@ -521,37 +521,37 @@
log.debug(' ------ Performing post-Build Actions (check jars) for : '+
project.getName())
if project.okToPerformWork():
- if project.hasOutputs():
+ if project.hasOutputs():
+ outputs = []
+
#
- # Ensure the output were all generated correctly.
+ # Ensure the jar output were all generated correctly.
#
outputsOk=1
for jar in project.getJars():
jarPath=os.path.abspath(jar.getPath())
+ # Add to list of outputs, in case we
+ # fail to find, and need to go list
+ # directoiries
+ outputs.append(jarPath)
if not os.path.exists(jarPath):
project.changeState(STATE_FAILED,REASON_MISSING_OUTPUTS)
outputsOk=0
project.addError("Missing Output: " + str(jarPath))
+
if outputsOk:
- # Publish them all (if distributable)
- # :TODO: check for distributable...
- for jar in project.getJars():
- jarPath=os.path.abspath(jar.getPath())
- # Copy to repository
- try:
- repository.publish( project.getModule().getName(),
jarPath )
- except Exception, details:
- message='Failed to publish [' + jarPath + '] to
repository : ' + str(details)
- project.addError(message)
- log.error(message)
-
# If we have a <license name='...
if project.hasLicense():
licensePath=os.path.abspath( \
os.path.join(
project.getModule().getSourceDirectory(), \
project.getLicense() ) )
-
+
+ # Add to list of outputs, in case we
+ # fail to find, and need to go list
+ # directoiries
+ outputs.append(licensePath)
+
if not os.path.exists(licensePath):
project.changeState(STATE_FAILED,REASON_MISSING_OUTPUTS)
outputsOk=0
@@ -566,6 +566,20 @@
else:
project.addWarning('No license on project with outputs.')
+ if outputsOk:
+ # Publish them all (if distributable)
+ # :TODO: check for distributable...
+ for jar in project.getJars():
+ # :TODO: Relative to module source?
+ jarPath=os.path.abspath(jar.getPath())
+ # Copy to repository
+ try:
+ repository.publish( project.getModule().getName(),
jarPath )
+ except Exception, details:
+ message='Failed to publish [' + jarPath + '] to
repository : ' + str(details)
+ project.addError(message)
+ log.error(message)
+
project.changeState(STATE_SUCCESS)
# For 'fun' list repository
@@ -580,9 +594,8 @@
dirs=[]
dircnt=0
listed=0
- for jar in project.getJars():
- jarPath=os.path.abspath(jar.getPath())
- dir=os.path.dirname(jarPath)
+ for output in outputs:
+ dir=os.path.dirname(output)
if not dir in dirs:
dircnt += 1
if os.path.exists(dir):
1.28 +42 -5 jakarta-gump/python/gump/model/workspace.py
Index: workspace.py
===================================================================
RCS file: /home/cvs/jakarta-gump/python/gump/model/workspace.py,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- workspace.py 12 Feb 2004 13:48:20 -0000 1.27
+++ workspace.py 15 Feb 2004 17:32:05 -0000 1.28
@@ -72,6 +72,7 @@
from gump.model.state import *
from gump.model.repository import Repository
from gump.model.server import Server
+from gump.model.tracker import Tracker
from gump.model.module import Module, createUnnamedModule
from gump.model.project import Project, ProjectSummary
from gump.model.profile import Profile
@@ -107,6 +108,7 @@
self.projects={}
self.profiles={}
self.servers={}
+ self.trackers={}
#
PropertyContainer.importProperties(self,self.xml)
@@ -168,6 +170,21 @@
return self.sortedServers
+ # Tracker Interface
+
+ def hasTracker(self,rname):
+ return self.trackers.has_key(rname)
+
+ def getTracker(self,rname):
+ return self.trackers[rname]
+
+ def getTrackers(self):
+ return self.trackers.values()
+
+ def getSortedTrackers(self):
+ return self.sortedTrackers
+
+
# Profile Interface
def hasProfile(self,mname):
@@ -214,7 +231,7 @@
def complete(self, xmlprofiles, xmlrepositories, \
xmlmodules, xmlprojects, \
- xmlservers):
+ xmlservers, xmltrackers):
if self.isComplete(): return
#
@@ -322,6 +339,19 @@
self.servers[serverName] = server
#
+ # Import all trackers
+ #
+ for xmltracker in xmltrackers.values():
+ tracker=Tracker(xmltracker,self)
+ trackerName=tracker.getName()
+ if trackerName in self.trackers:
+ # Duplicate, uh oh...
+ self.addError("Duplicate tracker name [" + trackerName + "]")
+ else:
+ tracker.complete(self)
+ self.trackers[trackerName] = tracker
+
+ #
# Import all modules
#
for xmlmodule in xmlmodules.values():
@@ -361,6 +391,12 @@
for server in self.getServers():
server.check(self)
+ #
+ # Check trackers.
+ #
+ for tracker in self.getTrackers():
+ tracker.check(self)
+
# Complete the projects
haveUnnamedModule=0
for project in self.getProjects():
@@ -393,7 +429,8 @@
self.sortedProjects=createOrderedList(self.getProjects())
self.sortedRepositories=createOrderedList(self.getRepositories())
self.sortedProfiles=createOrderedList(self.getProfiles())
- self.sortedServer=createOrderedList(self.getServers())
+ self.sortedServers=createOrderedList(self.getServers())
+ self.sortedTrackers=createOrderedList(self.getTrackers())
# Copy over any XML errors/warnings
transferAnnotations(self.xml, self)
1.14 +14 -3 jakarta-gump/python/gump/model/rawmodel.py
Index: rawmodel.py
===================================================================
RCS file: /home/cvs/jakarta-gump/python/gump/model/rawmodel.py,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- rawmodel.py 10 Feb 2004 00:43:19 -0000 1.13
+++ rawmodel.py 15 Feb 2004 17:32:05 -0000 1.14
@@ -117,6 +117,7 @@
self.module=Multiple(XMLModule)
self.repository=Multiple(XMLRepository)
self.server=Multiple(XMLServer)
+ self.tracker=Multiple(XMLTracker)
self.profile=Multiple(XMLProfile)
self.version=Single(GumpXMLModelObject)
@@ -129,6 +130,7 @@
self.module=Multiple(XMLModule)
self.repository=Multiple(XMLRepository)
self.server=Multiple(XMLServer)
+ self.tracker=Multiple(XMLTracker)
# represents a <module/> element
class XMLModule(Named):
@@ -145,6 +147,15 @@
# represents a <server/> element
class XMLServer(Named):
+ list={}
+ def init(self):
+ self.attribution=Single(GumpXMLModelObject)
+ self.title=Single(GumpXMLModelObject)
+ self.url=Single(GumpXMLModelObject)
+ self.site=Single(GumpXMLModelObject)
+
+# represents a <tracker/> element
+class XMLTracker(Named):
list={}
def init(self):
self.attribution=Single(GumpXMLModelObject)
1.9 +1 -1 jakarta-gump/python/gump/model/server.py
Index: server.py
===================================================================
RCS file: /home/cvs/jakarta-gump/python/gump/model/server.py,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- server.py 10 Feb 2004 21:02:40 -0000 1.8
+++ server.py 15 Feb 2004 17:32:05 -0000 1.9
@@ -70,7 +70,7 @@
from gump.utils import getIndent
-class Server(NamedModelObject, Statable):
+class Server(NamedModelObject):
"""A named server"""
def __init__(self,xml,workspace):
NamedModelObject.__init__(self,xml.getName(),xml,workspace)
1.6 +8 -5 jakarta-gump/python/gump/model/loader.py
Index: loader.py
===================================================================
RCS file: /home/cvs/jakarta-gump/python/gump/model/loader.py,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- loader.py 1 Feb 2004 18:44:44 -0000 1.5
+++ loader.py 15 Feb 2004 17:32:05 -0000 1.6
@@ -65,7 +65,8 @@
from gump import log
from gump.model.rawmodel import XMLWorkspace,XMLProfile, \
- XMLModule,XMLProject,XMLRepository, XMLServer
+ XMLModule, XMLProject, XMLRepository, \
+ XMLServer, XMLTracker
from gump.model.workspace import Workspace
from gump.model.module import Module
from gump.utils.xmlutils import SAXDispatcher
@@ -96,6 +97,7 @@
XMLModule.map={}
XMLProject.map={}
XMLServer.map={}
+ XMLTracker.map={}
log.debug("Launch SAX Dispatcher onto : " + file);
@@ -118,7 +120,7 @@
#
workspace.complete(XMLProfile.map,XMLRepository.map, \
XMLModule.map,XMLProject.map, \
- XMLServer.map)
+ XMLServer.map, XMLTracker.map)
#
# Clear out the maps [so don't continue to use them]
@@ -127,6 +129,7 @@
XMLProject.map={}
XMLProfile.map={}
XMLRepository.map={}
+ XMLTracker.map={}
XMLServer.map={}
return workspace
1.1 jakarta-gump/python/gump/model/tracker.py
Index: tracker.py
===================================================================
#!/usr/bin/env python
# $Header: /home/cvs/jakarta-gump/python/gump/model/repository.py,v 1.8 2004/01/20
21:55:23 ajack Exp $
# $Revision: 1.8 $
# $Date: 2004/01/20 21:55:23 $
#
# ====================================================================
#
# The Apache Software License, Version 1.1
#
# Copyright (c) 2003 The Apache Software Foundation. All rights
# reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# 3. The end-user documentation included with the redistribution, if
# any, must include the following acknowlegement:
# "This product includes software developed by the
# Apache Software Foundation (http://www.apache.org/)."
# Alternately, this acknowlegement may appear in the software itself,
# if and wherever such third-party acknowlegements normally appear.
#
# 4. The names "The Jakarta Project", "Alexandria", and "Apache Software
# Foundation" must not be used to endorse or promote products derived
# from this software without prior written permission. For written
# permission, please contact [EMAIL PROTECTED]
#
# 5. Products derived from this software may not be called "Apache"
# nor may "Apache" appear in their names without prior written
# permission of the Apache Group.
#
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
# ====================================================================
#
# This software consists of voluntary contributions made by many
# individuals on behalf of the Apache Software Foundation. For more
# information on the Apache Software Foundation, please see
# <http://www.apache.org/>.
"""
This module contains information on
"""
from gump.model.state import *
from gump.model.stats import *
from gump.model.object import NamedModelObject
from gump.utils import getIndent
class Tracker(NamedModelObject):
"""A named Tracker"""
def __init__(self,xml,workspace):
NamedModelObject.__init__(self,xml.getName(),xml,workspace)
self.resolver=None
def complete(self,workspace):
pass
def check(self,workspace):
pass
def hasType(self):
return hasattr(self.xml,'type') and self.xml.type
def getType(self):
return str(self.xml.type)
def hasSite(self):
return hasattr(self.xml,'site') and self.xml.site
def getSite(self):
return str(self.xml.site)
def hasUrl(self):
return hasattr(self.xml,'url') and self.xml.url
def getUrl(self):
return str(self.xml.url)
def hasTitle(self):
return hasattr(self.xml,'title') and self.xml.title
def getTitle(self):
return str(self.xml.title)
def hasResolver(self):
if self.resolver: return 1
return 0
def getResolver(self):
return self.resolver
def dump(self, indent=0, output=sys.stdout):
output.write(getIndent(indent)+'Tracker : ' + self.name + '\n')
NamedModelObject.dump(self,indent+1,output)
1.19 +2 -1
jakarta-gump/template/forrest/src/documentation/content/xdocs/site.xml
Index: site.xml
===================================================================
RCS file:
/home/cvs/jakarta-gump/template/forrest/src/documentation/content/xdocs/site.xml,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- site.xml 1 Feb 2004 19:03:58 -0000 1.18
+++ site.xml 15 Feb 2004 17:32:05 -0000 1.19
@@ -24,9 +24,10 @@
</work>
<work label="Misc" tab="home">
+ <index label="Packages" href="packages.html"/>
<index label="Servers" href="servers.html"/>
<index label="Repositories" href="repositories.html"/>
- <index label="Packages" href="packages.html"/>
+ <index label="Trackers" href="trackers.html"/>
<index label="XML" href="workspace.html"/>
</work>
1.13 +8 -3 jakarta-gump/python/gump/document/resolver.py
Index: resolver.py
===================================================================
RCS file: /home/cvs/jakarta-gump/python/gump/document/resolver.py,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- resolver.py 1 Feb 2004 18:44:44 -0000 1.12
+++ resolver.py 15 Feb 2004 17:32:05 -0000 1.13
@@ -78,6 +78,7 @@
from gump.output.xref import XRefGuru
from gump.model.repository import Repository
from gump.model.server import Server
+from gump.model.tracker import Tracker
from gump.model.workspace import Workspace
from gump.model.module import Module
from gump.model.project import Project
@@ -144,6 +145,8 @@
path=Path(['gump_repo'])
elif isinstance(object, Server):
path=Path(['gump_srv'])
+ elif isinstance(object, Tracker):
+ path=Path(['gump_track'])
elif isinstance(object, StatisticsGuru):
path=Path(['gump_stats'])
elif isinstance(object, XRefGuru):
@@ -236,6 +239,7 @@
document="index"+extn
elif isinstance(object, Project) \
or isinstance(object, Server) \
+ or isinstance(object, Tracker) \
or isinstance(object, Repository) \
or isinstance(object, WorkItem):
document=gumpSafeName(object.getName()) + extn
@@ -253,6 +257,7 @@
if isinstance(object, Workspace) or \
isinstance(object, Server) or \
+ isinstance(object, Tracker) or \
isinstance(object, Repository) or \
isinstance(object, StatisticsGuru) or \
isinstance(object, XRefGuru) or \
1.8 +5 -4 jakarta-gump/python/gump/document/text.py
Index: text.py
===================================================================
RCS file: /home/cvs/jakarta-gump/python/gump/document/text.py,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- text.py 5 Feb 2004 14:50:07 -0000 1.7
+++ text.py 15 Feb 2004 17:32:05 -0000 1.8
@@ -101,7 +101,8 @@
sortedModuleList=createOrderedList(gumpSet.getModules())
sortedProjectList=createOrderedList(gumpSet.getSequence())
sortedRepositoryList=createOrderedList(gumpSet.getRepositories())
- sortedServerList=createOrderedList(workspace.getServers())
+ sortedServerList=createOrderedList(workspace.getServers())
+ sortedTrackerList=createOrderedList(workspace.getTrackers())
output.write(indent + "Workspace State : " +
workspace.getStateDescription() + "\n")
output.write(indent + "Workspace Secs : " + str(workspace.getElapsedSecs())
+ "\n")
1.74 +87 -5 jakarta-gump/python/gump/document/forrest.py
Index: forrest.py
===================================================================
RCS file: /home/cvs/jakarta-gump/python/gump/document/forrest.py,v
retrieving revision 1.73
retrieving revision 1.74
diff -u -r1.73 -r1.74
--- forrest.py 12 Feb 2004 00:24:16 -0000 1.73
+++ forrest.py 15 Feb 2004 17:32:05 -0000 1.74
@@ -239,7 +239,8 @@
sortedModuleList=createOrderedList(gumpSet.getModules())
sortedProjectList=createOrderedList(gumpSet.getSequence())
sortedRepositoryList=createOrderedList(gumpSet.getRepositories())
- sortedServerList=createOrderedList(workspace.getServers())
+ sortedServerList=createOrderedList(workspace.getServers())
+ sortedTrackerList=createOrderedList(workspace.getTrackers())
#
# ----------------------------------------------------------------------
@@ -402,6 +403,31 @@
#
# ----------------------------------------------------------------------
#
+ # Trackers.xml
+ #
+ document=XDocDocument( 'All Trackers', \
+ self.resolver.getFile(workspace,'trackers'))
+
+ trackersSection=document.createSection('All Trackers')
+ trackersTable=trackersSection.createTable(['Name'])
+
+ scount=0
+ for tracker in sortedTrackerList:
+
+ scount+=1
+
+ trackerRow=trackersTable.createRow()
+ trackerRow.createComment(tracker.getName())
+
+ self.insertLink( tracker, workspace, trackerRow.createData())
+
+ if not scount: trackersTable.createLine('None')
+
+ document.serialize()
+
+ #
+ # ----------------------------------------------------------------------
+ #
# buildLog.xml -- Projects in build order
#
document=XDocDocument('Project Build Log', \
@@ -673,12 +699,18 @@
self.documentRepository(repo,workspace,gumpSet)
#
- # Document repositories
+ # Document servers
#
for server in workspace.getServers():
self.documentServer(server,workspace,gumpSet)
#
+ # Document trackers
+ #
+ for tracker in workspace.getTrackers():
+ self.documentTracker(tracker,workspace,gumpSet)
+
+ #
# Document modules
#
for module in workspace.getModules():
@@ -813,6 +845,56 @@
self.documentXML(document,server)
self.documentWorkList(document,server,'Server-level Work')
+
+ document.serialize()
+
+
+ def documentTracker(self,tracker,workspace,gumpSet):
+
+ document=XDocDocument( 'Tracker : ' + tracker.getName(), \
+ self.resolver.getFile(tracker))
+
+ # Provide a description/link back to the tracker site.
+# descriptionSection=document.createSection('Description')
+# description=''
+# if tracker.hasDescription():
+# description=escape(tracker.getDescription())
+# if not description.strip().endswith('.'):
+# description+='. '
+# if not description:
+# description='No description provided.'
+# if tracker.hasURL():
+# description+=' For more information, see: ' +
self.getFork(tracker.getURL())
+# else:
+# description+=' (No tracker URL provided).'
+#
+# descriptionSection.createParagraph().createRaw(description)
+
+ self.documentAnnotations(document,tracker)
+
+ detailSection=document.createSection('Tracker Details')
+ detailList=detailSection.createList()
+
+ detailList.createEntry('Name: ', tracker.getName())
+
+ if tracker.hasType():
+ detailList.createEntry('Type: ', tracker.getType())
+
+ if tracker.hasTitle():
+ detailList.createEntry('Title: ', tracker.getTitle())
+
+ if tracker.hasUrl():
+ detailList.createEntry('URL: ').createFork( \
+ tracker.getUrl(),tracker.getUrl())
+
+ # Parent 'site' (owner reference)
+ if tracker.hasSite() and not tracker.getSite() == tracker.getUrl():
+ detailList.createEntry('Site: ').createFork( \
+ tracker.getSite(), tracker.getSite())
+
+ self.documentXML(document,tracker)
+
+ self.documentWorkList(document,tracker,'Tracker-level Work')
document.serialize()
1.12 +6 -7 jakarta-gump/python/gump/output/nag.py
Index: nag.py
===================================================================
RCS file: /home/cvs/jakarta-gump/python/gump/output/nag.py,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- nag.py 13 Feb 2004 22:12:37 -0000 1.11
+++ nag.py 15 Feb 2004 17:32:05 -0000 1.12
@@ -301,8 +301,7 @@
def getNamedTypedContent(self,object,feedPrefix=None,message=None):
content="""To whom it may engage...
-This is an automated request, but not an unsolicited one. For help understanding
the request please visit http://jakarta.apache.org/gump/nagged.html
-and/or contact [EMAIL PROTECTED]
+This is an automated request, but not an unsolicited one. For help understanding
the request please visit http://jakarta.apache.org/gump/nagged.html, and/or contact
[EMAIL PROTECTED]
"""
@@ -324,7 +323,7 @@
if duration and duration > 1:
content += ', and has been outstanding for ' + `duration` + ' runs'
- content += '.\n'
+ content += '. '
content += self.getGenericContent(object,feedPrefix)
@@ -343,7 +342,7 @@
content += 'The current state is \'' + object.getStateDescription() + '\''
if object.hasReason():
- content += ', for reason ' + object.getReasonDescription() + '\''
+ content += ', for reason \'' + object.getReasonDescription() + '\''
content += '\n'
1.6 +3 -1 jakarta-gump/python/.cvsignore
Index: .cvsignore
===================================================================
RCS file: /home/cvs/jakarta-gump/python/.cvsignore,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- .cvsignore 8 Dec 2003 16:34:14 -0000 1.5
+++ .cvsignore 15 Feb 2004 17:32:05 -0000 1.6
@@ -7,4 +7,6 @@
test
tmp
x.txt
-build
\ No newline at end of file
+build
+*.log
+bogus
\ No newline at end of file
1.7 +12 -6 jakarta-gump/src/documentation/skinconf.xml
Index: skinconf.xml
===================================================================
RCS file: /home/cvs/jakarta-gump/src/documentation/skinconf.xml,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- skinconf.xml 5 Feb 2004 06:51:18 -0000 1.6
+++ skinconf.xml 15 Feb 2004 17:32:06 -0000 1.7
@@ -4,35 +4,39 @@
Skin configuration file. This file contains details of your project, which will
be used to configure the chosen Forrest skin.
-->
-
<!DOCTYPE skinconfig [
<!ENTITY % links.att 'name CDATA #REQUIRED'>
<!ENTITY % link.att 'name CDATA #REQUIRED href CDATA #REQUIRED'>
- <!ELEMENT skinconfig (disable-search?, disable-print-link?, disable-pdf-link?,
- disable-xml-link?, disable-compliance-links?, searchsite-domain?,
searchsite-name?,
- project-name, project-url, project-logo, group-name?, group-url?, group-logo?,
- host-url?, host-logo?, year?, vendor?, trail?, credits?)*>
+ <!ELEMENT skinconfig (disable-lucene?, disable-search?, disable-print-link?,
disable-pdf-link?,
+ disable-xml-link?, disable-compliance-links?, obfuscate-mail-links?,
searchsite-domain?, searchsite-name?,
+ project-name, project-description?, project-url, project-logo, group-name?,
group-description?, group-url?, group-logo?,
+ host-url?, host-logo?, favicon-url?, year?, vendor?, trail?, toc?, credits?)*>
<!ELEMENT credits (credit*)>
<!ELEMENT credit (name, url, image?, width?, height?)>
<!-- id uniquely identifies the tool, and role indicates its function -->
<!ATTLIST credit id CDATA #IMPLIED
role CDATA #IMPLIED>
+ <!ELEMENT disable-lucene (#PCDATA)>
<!ELEMENT disable-search (#PCDATA)>
<!ELEMENT disable-print-link (#PCDATA)>
<!ELEMENT disable-pdf-link (#PCDATA)>
<!ELEMENT disable-xml-link (#PCDATA)>
<!ELEMENT disable-compliance-links (#PCDATA)>
+ <!ELEMENT obfuscate-mail-links (#PCDATA)>
<!ELEMENT searchsite-domain (#PCDATA)>
<!ELEMENT searchsite-name (#PCDATA)>
<!ELEMENT project-name (#PCDATA)>
+ <!ELEMENT project-description (#PCDATA)>
<!ELEMENT project-url (#PCDATA)>
<!ELEMENT project-logo (#PCDATA)>
<!ELEMENT group-name (#PCDATA)>
+ <!ELEMENT group-description (#PCDATA)>
<!ELEMENT group-url (#PCDATA)>
<!ELEMENT group-logo (#PCDATA)>
<!ELEMENT host-url (#PCDATA)>
<!ELEMENT host-logo (#PCDATA)>
+ <!ELEMENT favicon-url (#PCDATA)>
<!ELEMENT year (#PCDATA)>
<!ELEMENT vendor (#PCDATA)>
<!ELEMENT trail (link1, link2, link3)>
@@ -48,6 +52,8 @@
<!ELEMENT image (#PCDATA)>
<!ELEMENT width (#PCDATA)>
<!ELEMENT height (#PCDATA)>
+ <!ELEMENT toc EMPTY>
+ <!ATTLIST toc level CDATA #IMPLIED>
]>
<skinconfig>
@@ -91,8 +97,8 @@
-->
<trail>
<link1 name="Jakarta" href="http://jakarta.apache.org/"/>
- <link2 name="" href=""/>
<!-- link2 name="Jakarta Gump" href="http://jakarta.apache.org/gump/"/ -->
+ <link2 name="" href=""/>
<link3 name="" href=""/>
</trail>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]