summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--project2/Doxyfile329
-rw-r--r--project2/console/consoleAppEngine.cpp1
-rw-r--r--project2/curlHelper.h1
-rw-r--r--project2/dataSource.h3
-rw-r--r--project2/docs/docbook.xml294
-rw-r--r--project2/fileRows.cpp1
-rw-r--r--project2/fileRows.h1
-rw-r--r--project2/fsRows.cpp1
-rw-r--r--project2/fsRows.h1
-rw-r--r--project2/iHaveParameters.h4
-rw-r--r--project2/if.cpp8
-rw-r--r--project2/if.h12
-rw-r--r--project2/iterate.h1
-rw-r--r--project2/loggers.h5
-rw-r--r--project2/noOutputExecute.h4
-rw-r--r--project2/paramChecker.h3
-rw-r--r--project2/procRows.cpp1
-rw-r--r--project2/procRows.h1
-rw-r--r--project2/rawView.h1
-rw-r--r--project2/rdbmsDataSource.cpp2
-rw-r--r--project2/rdbmsDataSource.h1
-rw-r--r--project2/regexCheck.cpp1
-rw-r--r--project2/regexCheck.h1
-rw-r--r--project2/rowProcessor.cpp1
-rw-r--r--project2/rowProcessor.h3
-rw-r--r--project2/rowSet.h3
-rw-r--r--project2/rowView.h1
-rw-r--r--project2/sendmailTask.h1
-rw-r--r--project2/session.h1
-rw-r--r--project2/sessionClearTask.h3
-rw-r--r--project2/sessionSetTask.h3
-rw-r--r--project2/sessionXml.cpp1
-rw-r--r--project2/sourceObject.h1
-rw-r--r--project2/sqlCheck.cpp1
-rw-r--r--project2/sqlCheck.h3
-rw-r--r--project2/sqlMergeTask.cpp3
-rw-r--r--project2/sqlMergeTask.h1
-rw-r--r--project2/sqlRows.cpp1
-rw-r--r--project2/sqlRows.h1
-rw-r--r--project2/sqlTask.h3
-rw-r--r--project2/streamRows.cpp1
-rw-r--r--project2/streamRows.h1
-rw-r--r--project2/task.h1
-rw-r--r--project2/urlRows.cpp1
-rw-r--r--project2/urlRows.h1
-rw-r--r--project2/variables.cpp8
-rw-r--r--project2/variables.h3
-rw-r--r--project2/view.h1
-rw-r--r--project2/xmlObjectLoader.h2
-rw-r--r--project2/xmlRows.cpp1
-rw-r--r--project2/xmlRows.h1
-rw-r--r--project2/xslRows.cpp1
-rw-r--r--project2/xslRows.h1
53 files changed, 596 insertions, 135 deletions
diff --git a/project2/Doxyfile b/project2/Doxyfile
index a7a2386..8c2cb5f 100644
--- a/project2/Doxyfile
+++ b/project2/Doxyfile
@@ -1,4 +1,4 @@
-# Doxyfile 1.6.3
+# Doxyfile 1.7.3
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project
@@ -31,7 +31,20 @@ PROJECT_NAME = Project2
# This could be handy for archiving the generated documentation or
# if some version control system is used.
-PROJECT_NUMBER = v0.2
+PROJECT_NUMBER = v0.4
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is
+# included in the documentation. The maximum height of the logo should not
+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO =
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.
@@ -47,7 +60,7 @@ OUTPUT_DIRECTORY = docs
# source files, where putting all generated files in the same directory would
# otherwise cause performance problems for the file system.
-CREATE_SUBDIRS = YES
+CREATE_SUBDIRS = NO
# The OUTPUT_LANGUAGE tag is used to specify the language in which all
# documentation generated by doxygen is written. Doxygen will use this
@@ -57,7 +70,7 @@ CREATE_SUBDIRS = YES
# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
-# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
OUTPUT_LANGUAGE = English
@@ -136,7 +149,7 @@ STRIP_FROM_PATH =
STRIP_FROM_INC_PATH =
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful is your file systems
+# (but less readable) file names. This can be useful if your file system
# doesn't support long names like on DOS, Mac, or CD-ROM.
SHORT_NAMES = NO
@@ -196,7 +209,7 @@ ALIASES =
# For instance, some of the names that are used will be different. The list
# of all members will be omitted, etc.
-OPTIMIZE_OUTPUT_FOR_C = YES
+OPTIMIZE_OUTPUT_FOR_C = NO
# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
# sources only. Doxygen will then generate output that is more tailored for
@@ -217,15 +230,15 @@ OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
-# Doxygen selects the parser to use depending on the extension of the files it parses.
-# With this tag you can assign which parser to use for a given extension.
-# Doxygen has a built-in mapping, but you can override or extend it using this tag.
-# The format is ext=language, where ext is a file extension, and language is one of
-# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,
-# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat
-# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),
-# use: inc=Fortran f=C. Note that for custom extensions you also need to set
-# FILE_PATTERNS otherwise the files are not read by doxygen.
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given extension.
+# Doxygen has a built-in mapping, but you can override or extend it using this
+# tag. The format is ext=language, where ext is a file extension, and language
+# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,
+# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make
+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
+# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions
+# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
EXTENSION_MAPPING =
@@ -233,7 +246,7 @@ EXTENSION_MAPPING =
# to include (a tag file for) the STL sources as input, then you should
# set this tag to YES in order to let doxygen match functions declarations and
# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
-# func(std::string) {}). This also make the inheritance and collaboration
+# func(std::string) {}). This also makes the inheritance and collaboration
# diagrams that involve STL classes more complete and accurate.
BUILTIN_STL_SUPPORT = YES
@@ -251,7 +264,7 @@ SIP_SUPPORT = NO
# For Microsoft's IDL there are propget and propput attributes to indicate getter
# and setter methods for a property. Setting this option to YES (the default)
-# will make doxygen to replace the get and set methods by a property in the
+# will make doxygen replace the get and set methods by a property in the
# documentation. This will only work if the methods are indeed getting or
# setting a simple type. If this is not the case, or you want to show the
# methods anyway, you should set this option to NO.
@@ -281,7 +294,7 @@ SUBGROUPING = YES
# be useful for C code in case the coding convention dictates that all compound
# types are typedef'ed and only the typedef is referenced, never the tag name.
-TYPEDEF_HIDES_STRUCT = Yes
+TYPEDEF_HIDES_STRUCT = YES
# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
# determine which symbols to keep in memory and which to flush to disk.
@@ -289,10 +302,10 @@ TYPEDEF_HIDES_STRUCT = Yes
# For small to medium size projects (<1000 input files) the default value is
# probably good enough. For larger projects a too small cache size can cause
# doxygen to be busy swapping symbols to and from disk most of the time
-# causing a significant performance penality.
+# causing a significant performance penalty.
# If the system has enough physical memory increasing the cache will improve the
# performance by keeping more symbols in memory. Note that the value works on
-# a logarithmic scale so increasing the size by one will rougly double the
+# a logarithmic scale so increasing the size by one will roughly double the
# memory usage. The cache size is given by this formula:
# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
# corresponding to a cache size of 2^16 = 65536 symbols
@@ -308,7 +321,7 @@ SYMBOL_CACHE_SIZE = 0
# Private class members and static file members will be hidden unless
# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-EXTRACT_ALL = YES
+EXTRACT_ALL = NO
# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
# will be included in the documentation.
@@ -337,7 +350,7 @@ EXTRACT_LOCAL_METHODS = NO
# extracted and appear in the documentation as a namespace called
# 'anonymous_namespace{file}', where file will be replaced with the base
# name of the file that contains the anonymous namespace. By default
-# anonymous namespace are hidden.
+# anonymous namespaces are hidden.
EXTRACT_ANON_NSPACES = NO
@@ -347,14 +360,14 @@ EXTRACT_ANON_NSPACES = NO
# various overviews, but no documentation section is generated.
# This option has no effect if EXTRACT_ALL is enabled.
-HIDE_UNDOC_MEMBERS = NO
+HIDE_UNDOC_MEMBERS = YES
# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy.
# If set to NO (the default) these classes will be included in the various
# overviews. This option has no effect if EXTRACT_ALL is enabled.
-HIDE_UNDOC_CLASSES = NO
+HIDE_UNDOC_CLASSES = YES
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
# friend (class|struct|union) declarations.
@@ -383,7 +396,7 @@ INTERNAL_DOCS = NO
# in case and if your file system supports case sensitive file names. Windows
# and Mac users are advised to set this option to NO.
-CASE_SENSE_NAMES = NO
+CASE_SENSE_NAMES = YES
# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
# will show members with their full class and namespace scopes in the
@@ -395,7 +408,7 @@ HIDE_SCOPE_NAMES = NO
# will put a list of the files that are included by a file in the documentation
# of that file.
-SHOW_INCLUDE_FILES = YES
+SHOW_INCLUDE_FILES = NO
# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
# will list include files with double quotes in the documentation
@@ -422,12 +435,12 @@ SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = NO
-# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
-# will sort the (brief and detailed) documentation of class members so that
-# constructors and destructors are listed first. If set to NO (the default)
-# the constructors will appear in the respective orders defined by
-# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
-# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
SORT_MEMBERS_CTORS_1ST = NO
@@ -448,6 +461,15 @@ SORT_GROUP_NAMES = NO
SORT_BY_SCOPE_NAME = NO
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+# do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even
+# if there is only one candidate or it is obvious which candidate to choose
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING = NO
+
# The GENERATE_TODOLIST tag can be used to enable (YES) or
# disable (NO) the todo list. This list is created by putting \todo
# commands in the documentation.
@@ -478,10 +500,10 @@ GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consists of for it to appear in
+# the initial value of a variable or macro consists of for it to appear in
# the documentation. If the initializer consists of more lines than specified
# here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and defines in the
+# The appearance of the initializer of individual variables and macros in the
# documentation can be controlled using \showinitializer or \hideinitializer
# command in the documentation regardless of this setting.
@@ -491,7 +513,7 @@ MAX_INITIALIZER_LINES = 30
# at the bottom of the documentation of classes and structs. If set to YES the
# list will mention the files that were used to generate the documentation.
-SHOW_USED_FILES = YES
+SHOW_USED_FILES = NO
# If the sources in your project are distributed over multiple directories
# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
@@ -503,7 +525,7 @@ SHOW_DIRECTORIES = NO
# This will remove the Files entry from the Quick Index and from the
# Folder Tree View (if specified). The default is YES.
-SHOW_FILES = YES
+SHOW_FILES = NO
# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
# Namespaces page. This will remove the Namespaces entry from the Quick Index
@@ -521,12 +543,12 @@ SHOW_NAMESPACES = YES
FILE_VERSION_FILTER =
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by
-# doxygen. The layout file controls the global structure of the generated output files
-# in an output format independent way. The create the layout file that represents
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name
-# of the layout file.
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. The create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
LAYOUT_FILE =
@@ -537,7 +559,7 @@ LAYOUT_FILE =
# The QUIET tag can be used to turn on/off the messages that are generated
# by doxygen. Possible values are YES and NO. If left blank NO is used.
-QUIET = NO
+QUIET = YES
# The WARNINGS tag can be used to turn on/off the warning messages that are
# generated by doxygen. Possible values are YES and NO. If left blank
@@ -549,7 +571,7 @@ WARNINGS = YES
# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
# automatically be disabled.
-WARN_IF_UNDOCUMENTED = YES
+WARN_IF_UNDOCUMENTED = NO
# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
# potential errors in the documentation, such as not documenting some
@@ -558,7 +580,7 @@ WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
-# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for
# functions that are documented, but have no documentation for their parameters
# or return value. If set to NO (the default) doxygen will only warn about
# wrong or incomplete parameter documentation, but not about the absence of
@@ -590,7 +612,10 @@ WARN_LOGFILE =
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
-INPUT = .
+INPUT = . \
+ ../libdbpp \
+ ../libpqpp \
+ ../libodbcpp
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
@@ -604,10 +629,12 @@ INPUT_ENCODING = UTF-8
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
# and *.h) to filter out the source-files in the directories. If left
# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
-FILE_PATTERNS = *.cpp *.h
+FILE_PATTERNS = *.cpp \
+ *.h
# The RECURSIVE tag can be used to turn specify whether or not subdirectories
# should be searched for input files as well. Possible values are YES and NO.
@@ -622,7 +649,7 @@ RECURSIVE = YES
EXCLUDE =
# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
-# directories that are symbolic links (a Unix filesystem feature) are excluded
+# directories that are symbolic links (a Unix file system feature) are excluded
# from the input.
EXCLUDE_SYMLINKS = NO
@@ -633,7 +660,8 @@ EXCLUDE_SYMLINKS = NO
# against the file with absolute path, so to exclude all test directories
# for example use the pattern */test/*
-EXCLUDE_PATTERNS =
+EXCLUDE_PATTERNS = */bin \
+ */.svn
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
@@ -683,8 +711,8 @@ INPUT_FILTER =
# basis. Doxygen will compare the file name with each pattern and apply the
# filter if there is a match. The filters are a list of the form:
# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
-# is applied to all files.
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
FILTER_PATTERNS =
@@ -694,6 +722,14 @@ FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
@@ -747,7 +783,7 @@ USE_HTAGS = NO
# will generate a verbatim copy of the header file for each class for
# which an include is specified. Set to NO to disable this.
-VERBATIM_HEADERS = YES
+VERBATIM_HEADERS = NO
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
@@ -814,6 +850,31 @@ HTML_FOOTER =
HTML_STYLESHEET =
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the stylesheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA = 80
+
# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
# page will contain the date and time when the page was generated. Setting
# this to NO can help when comparing the output of multiple runs.
@@ -842,7 +903,8 @@ HTML_DYNAMIC_SECTIONS = NO
# directory and running "make install" will install the docset in
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
# it at startup.
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
GENERATE_DOCSET = NO
@@ -860,6 +922,16 @@ DOCSET_FEEDNAME = "Doxygen generated docs"
DOCSET_BUNDLE_ID = org.doxygen.Project
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME = Publisher
+
# If the GENERATE_HTMLHELP tag is set to YES, additional index files
# will be generated that can be used as input for tools like the
# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
@@ -904,10 +976,10 @@ BINARY_TOC = NO
TOC_EXPAND = NO
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER
-# are set, an additional index file will be generated that can be used as input for
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated
-# HTML documentation.
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
GENERATE_QHP = NO
@@ -929,20 +1001,24 @@ QHP_NAMESPACE = org.doxygen.Project
QHP_VIRTUAL_FOLDER = doc
-# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add.
-# For more information please see
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
# http://doc.trolltech.com/qthelpproject.html#custom-filters
QHP_CUST_FILTER_NAME =
-# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see
-# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
QHP_CUST_FILTER_ATTRS =
-# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
# filter section matches.
-# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
QHP_SECT_FILTER_ATTRS =
@@ -954,12 +1030,12 @@ QHP_SECT_FILTER_ATTRS =
QHG_LOCATION =
# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
-# will be generated, which together with the HTML files, form an Eclipse help
+# will be generated, which together with the HTML files, form an Eclipse help
# plugin. To install this plugin and make it available under the help contents
# menu in Eclipse, the contents of the directory containing the HTML and XML
# files needs to be copied into the plugins directory of eclipse. The name of
# the directory within the plugins directory should be the same as
-# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
# the help appears.
GENERATE_ECLIPSEHELP = NO
@@ -976,8 +1052,10 @@ ECLIPSE_DOC_ID = org.doxygen.Project
DISABLE_INDEX = NO
-# This tag can be used to set the number of enum values (range [1..20])
-# that doxygen will group on one line in the generated HTML documentation.
+# This tag can be used to set the number of enum values (range [0,1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+# Note that a value of 0 will completely suppress the enum values from
+# appearing in the overview section.
ENUM_VALUES_PER_LINE = 4
@@ -1002,6 +1080,11 @@ USE_INLINE_TREES = NO
TREEVIEW_WIDTH = 250
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW = NO
+
# Use this tag to change the font size of Latex formulas included
# as images in the HTML documentation. The default is 10. Note that
# when you change the font size after a successful doxygen run you need
@@ -1010,22 +1093,50 @@ TREEVIEW_WIDTH = 250
FORMULA_FONTSIZE = 10
-# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
+# (see http://www.mathjax.org) which uses client side Javascript for the
+# rendering instead of using prerendered bitmaps. Use this if you do not
+# have LaTeX installed or if you want to formulas look prettier in the HTML
+# output. When enabled you also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX = NO
+
+# When MathJax is enabled you need to specify the location relative to the
+# HTML output directory using the MATHJAX_RELPATH option. The destination
+# directory should contain the MathJax.js script. For instance, if the mathjax
+# directory is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the
+# mathjax.org site, so you can quickly see the result without installing
+# MathJax, but it is strongly recommended to install a local copy of MathJax
+# before deployment.
+
+MATHJAX_RELPATH = http://www.mathjax.org/mathjax
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
# for the HTML output. The underlying search engine uses javascript
-# and DHTML and should work on any modern browser. Note that when using
-# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
# (GENERATE_DOCSET) there is already a search function so this one should
# typically be disabled. For large projects the javascript based search engine
# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
SEARCHENGINE = NO
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a PHP enabled web server instead of at the web client
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
# using Javascript. Doxygen will generate the search PHP script and index
-# file to put on the web server. The advantage of the server
-# based approach is that it scales better to large projects and allows
-# full text search. The disadvances is that it is more difficult to setup
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvantages are that it is more difficult to setup
# and does not have live searching capabilities.
SERVER_BASED_SEARCH = NO
@@ -1066,7 +1177,7 @@ MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
# The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, a4wide, letter, legal and
+# by the printer. Possible values are: a4, letter, legal and
# executive. If left blank a4wide will be used.
PAPER_TYPE = a4wide
@@ -1109,9 +1220,9 @@ LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
-# If LATEX_SOURCE_CODE is set to YES then doxygen will include
-# source code with syntax highlighting in the LaTeX output.
-# Note that which sources are shown also depends on other settings
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
# such as SOURCE_BROWSER.
LATEX_SOURCE_CODE = NO
@@ -1320,15 +1431,15 @@ PREDEFINED =
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
# this tag can be used to specify a list of macro names that should be expanded.
# The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition.
+# Use the PREDEFINED tag if you want to use a different macro definition that
+# overrules the definition found in the source code.
EXPAND_AS_DEFINED =
# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all function-like macros that are alone
-# on a line, have an all uppercase name, and do not end with a semicolon. Such
-# function macros are typically used for boiler-plate code, and will confuse
-# the parser if not removed.
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
SKIP_FUNCTION_MACROS = YES
@@ -1382,9 +1493,8 @@ PERL_PATH = /usr/bin/perl
# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
# or super classes. Setting the tag to NO turns the diagrams off. Note that
-# this option is superseded by the HAVE_DOT option below. This is only a
-# fallback. It is recommended to install and use dot, since it yields more
-# powerful graphs.
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
CLASS_DIAGRAMS = NO
@@ -1401,7 +1511,7 @@ MSCGEN_PATH =
# inheritance and usage relations if the target is undocumented
# or is not a class.
-HIDE_UNDOC_RELATIONS = YES
+HIDE_UNDOC_RELATIONS = NO
# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
# available from the path. This tool is part of Graphviz, a graph visualization
@@ -1410,11 +1520,18 @@ HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
-# By default doxygen will write a font called FreeSans.ttf to the output
-# directory and reference it in all dot files that doxygen generates. This
-# font does not include all possible unicode characters however, so when you need
-# these (or just want a differently looking font) you can specify the font name
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font,
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS = 0
+
+# By default doxygen will write a font called Helvetica to the output
+# directory and reference it in all dot files that doxygen generates.
+# When you want a differently looking font you can specify the font name
+# using DOT_FONTNAME. You need to make sure dot is able to find the font,
# which can be done by putting it in a standard location or by setting the
# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
# containing the font.
@@ -1445,7 +1562,7 @@ CLASS_GRAPH = YES
# indirect implementation dependencies (inheritance, containment, and
# class references variables) of the class with other documented classes.
-COLLABORATION_GRAPH = YES
+COLLABORATION_GRAPH = NO
# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
# will generate a graph for groups, showing the direct groups dependencies
@@ -1461,21 +1578,21 @@ UML_LOOK = NO
# If set to YES, the inheritance and collaboration graphs will show the
# relations between templates and their instances.
-TEMPLATE_RELATIONS = NO
+TEMPLATE_RELATIONS = YES
# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
# tags are set to YES then doxygen will generate a graph for each documented
# file showing the direct and indirect include dependencies of the file with
# other documented files.
-INCLUDE_GRAPH = YES
+INCLUDE_GRAPH = NO
# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
# documented header file showing the documented files that directly or
# indirectly include this file.
-INCLUDED_BY_GRAPH = YES
+INCLUDED_BY_GRAPH = NO
# If the CALL_GRAPH and HAVE_DOT options are set to YES then
# doxygen will generate a call dependency graph for every global function
@@ -1494,7 +1611,7 @@ CALL_GRAPH = NO
CALLER_GRAPH = NO
# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will graphical hierarchy of all classes instead of a textual one.
+# will generate a graphical hierarchy of all classes instead of a textual one.
GRAPHICAL_HIERARCHY = YES
@@ -1506,7 +1623,7 @@ GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are png, jpg, or gif
+# generated by dot. Possible values are png, svg, gif or svg.
# If left blank png will be used.
DOT_IMAGE_FORMAT = png
@@ -1522,6 +1639,12 @@ DOT_PATH =
DOTFILE_DIRS =
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the
+# \mscfile command).
+
+MSCFILE_DIRS =
+
# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
# nodes that will be shown in the graph. If the number of nodes in a graph
# becomes larger than this value, doxygen will truncate the graph, which is
@@ -1548,14 +1671,14 @@ MAX_DOT_GRAPH_DEPTH = 0
# enabling this option may lead to badly anti-aliased labels on the edges of
# a graph (i.e. they become hard to read).
-DOT_TRANSPARENT = NO
+DOT_TRANSPARENT = YES
# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
# files in one run (i.e. multiple -o and -T options on the command line). This
# makes dot run faster, but since only newer versions of dot (>1.8.10)
# support this, this feature is disabled by default.
-DOT_MULTI_TARGETS = NO
+DOT_MULTI_TARGETS = YES
# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
# generate a legend page explaining the meaning of the various boxes and
diff --git a/project2/console/consoleAppEngine.cpp b/project2/console/consoleAppEngine.cpp
index eed37fd..d5e2bf6 100644
--- a/project2/console/consoleAppEngine.cpp
+++ b/project2/console/consoleAppEngine.cpp
@@ -7,6 +7,7 @@
SimpleMessageException(UnknownPlatformAlias);
+/// Session implementation that stores its contents locally in memory, it has no long term persistence
class ConsoleSession : public Session {
public:
ConsoleSession() : expiry(0)
diff --git a/project2/curlHelper.h b/project2/curlHelper.h
index af26a50..afebcdc 100644
--- a/project2/curlHelper.h
+++ b/project2/curlHelper.h
@@ -5,6 +5,7 @@
#include "variables.h"
#include "../libmisc/curlsup.h"
+/// Project2 helper component to provide common access to remote resources via libcurl
class CurlHelper {
public:
CurlHelper(const xmlpp::Element * p);
diff --git a/project2/dataSource.h b/project2/dataSource.h
index 81a59ad..d8a5a9a 100644
--- a/project2/dataSource.h
+++ b/project2/dataSource.h
@@ -7,7 +7,8 @@
class DataSource;
typedef boost::intrusive_ptr<DataSource> DataSourcePtr;
-class DataSource : public virtual SourceObject {
+/// Base class for data sources providing transaction support
+class DataSource : public SourceObject {
public:
DataSource(const xmlpp::Element * p);
virtual ~DataSource();
diff --git a/project2/docs/docbook.xml b/project2/docs/docbook.xml
new file mode 100644
index 0000000..e8b7028
--- /dev/null
+++ b/project2/docs/docbook.xml
@@ -0,0 +1,294 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<book>
+ <bookinfo>
+ <title>Project2 - Platform Guide</title>
+ <author>
+ <firstname>Dan</firstname>
+ <surname>Goodliffe</surname>
+ <affiliation>
+ <address>
+ <email>dan@randomdan.homeip.net</email>
+ </address>
+ </affiliation>
+ <personblurb>foo</personblurb>
+ </author>
+ <copyright>
+ <year>2011</year>
+ <holder role="mailto:dan@randomdan.homeip.net">Dan Goodliffe</holder>
+ </copyright>
+ <abstract>
+ <para>The complete guide to everything Project2</para>
+ </abstract>
+ </bookinfo>
+ <info>
+ <productname>Project2</productname>
+ </info>
+ <chapter>
+ <title>Introduction</title>
+ </chapter>
+ <chapter>
+ <title>Requirements</title>
+ </chapter>
+ <chapter>
+ <title>Compilation</title>
+ </chapter>
+ <chapter>
+ <title>Installation</title>
+ </chapter>
+ <chapter>
+ <title>Deployment</title>
+ </chapter>
+ <chapter>
+ <title>Runtime configuration</title>
+ <refentry id="p2config">
+ <refmeta>
+ <refentrytitle>p2config</refentrytitle>
+ <manvolnum>5</manvolnum>
+ </refmeta>
+ <refnamediv>
+ <refname>p2config</refname>
+ <refname>.p2config</refname>
+ <refpurpose>Configure runtime behaviour of Project2 application engines.</refpurpose>
+ </refnamediv>
+ <variablelist>
+ <varlistentry>
+ <term><envar>sysloglevel=<replaceable>&lt;-1...7&gt;</replaceable></envar></term>
+ <listitem>
+ <para>The level of logging written via <citerefentry><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><envar>consoleloglevel=<replaceable>&lt;-1...7&gt;</replaceable></envar></term>
+ <listitem>
+ <para>The level of logging written to <literal>stderr</literal>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><envar>dumpdatadoc=<replaceable>/path/to/file.xml</replaceable></envar></term>
+ <listitem>
+ <para>Write a copy of the data document produced by <application>p2cgi</application> before sending it to the web server.</para>
+ <tip>This option is available only when compiled with debugging support.</tip>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>errorcontenttype</term>
+ <listitem>
+ <para>The HTTP <literal>Content-Type</literal> header producted by <application>p2cgi</application> for an unhandled error document.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>errortransformstyle</term>
+ <listitem>
+ <para>The <literal>href</literal> of the <literal>xml-stylesheet</literal> <application>p2cgi</application> will write into the processing instruction for an unhandled error document.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refentry>
+ <section>
+ <title>Platform</title>
+ </section>
+ </chapter>
+ <chapter>
+ <title>Execution stages</title>
+ <section>
+ <title>Check</title>
+ </section>
+ <section>
+ <title>Request</title>
+ </section>
+ <section>
+ <title>Present</title>
+ </section>
+ </chapter>
+ <chapter>
+ <title>Engines</title>
+ <refentry>
+ <refmeta>
+ <refentrytitle>p2console</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </refmeta>
+ <refnamediv>
+ <refname>p2console</refname>
+ <refpurpose>Run one or more Project2 script from the console.</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>p2console</command>
+ <arg choice="req" rep="repeat"><replaceable>file</replaceable></arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+ </refentry>
+ <refentry>
+ <refmeta>
+ <refentrytitle>p2cgi</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </refmeta>
+ <refnamediv>
+ <refname>p2cgi</refname>
+ <refpurpose>Generate webpages and/or run Project2 scripts from a CGI capable web server.</refpurpose>
+ </refnamediv>
+ </refentry>
+ <refentry>
+ <refmeta>
+ <refentrytitle>p2fcgi</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </refmeta>
+ <refnamediv>
+ <refname>p2fcgi</refname>
+ <refpurpose><application>FastCGI</application> implementation of <application>p2cgi</application>.</refpurpose>
+ </refnamediv>
+ <para>For all intents and purposes, <application>p2fcgi</application> is a drop in replacement for <application>p2cgi</application> and should be used whenever possible. See your web server configuration documentation for details on running fast CGI applications.</para>
+ <para>Unless otherwise specified, <literal>p2cgi</literal> refers to both <application>p2cgi</application> and/or <application>p2fcgi</application>.</para>
+ <para><application>p2fcgi</application> has numerous significant benefits over <application>p2cgi</application>. Most notably a near zero startup time, presistent connections to RDBMS datasources and high performance in memory caching of row sets.</para>
+ </refentry>
+ </chapter>
+ <chapter>
+ <title>Components</title>
+ <section>
+ <title>Common</title>
+ <refentry>
+ <refmeta>
+ <refentrytitle>project2:iterate</refentrytitle>
+ <manvolnum>7</manvolnum>
+ </refmeta>
+ <refnamediv>
+ <refname>project2:iterate</refname>
+ <refpurpose>Execute tasks for every record in a row source.</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>project2:iterate</command>
+ <arg choice="req">name=&quot;<replaceable>iteration name</replaceable>&quot;</arg>
+ <arg choice="req">source=&quot;<replaceable>row source</replaceable>&quot;</arg>
+ <arg choice="opt">filter=&quot;<replaceable>row source filter name</replaceable>&quot;</arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+ </refentry>
+ <refentry>
+ <refmeta>
+ <refentrytitle>project2:view</refentrytitle>
+ <manvolnum>7</manvolnum>
+ </refmeta>
+ <refnamediv>
+ <refname>project2:view</refname>
+ <refpurpose>Present data from a row source.</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>project2:view</command>
+ <arg choice="req">name=&quot;<replaceable>view name</replaceable>&quot;</arg>
+ <arg choice="req">source=&quot;<replaceable>row source</replaceable>&quot;</arg>
+ <arg choice="req">rootname=&quot;<replaceable>root xml node name</replaceable>&quot;</arg>
+ <arg choice="req">recordname=&quot;<replaceable>record xml node name</replaceable>&quot;</arg>
+ <arg choice="opt">filter=&quot;<replaceable>row source filter name</replaceable>&quot;</arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+ </refentry>
+ <refentry>
+ <refmeta>
+ <refentrytitle>project2:if</refentrytitle>
+ <manvolnum>7</manvolnum>
+ </refmeta>
+ <refnamediv>
+ <refname>project2:if</refname>
+ <refpurpose>Conditionally execute and/or present data.</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>project2:if</command>
+ <arg choice="req">name=&quot;<replaceable>if name</replaceable>&quot;</arg>
+ <arg choice="req">mode=&quot;<replaceable>and | or</replaceable>&quot;</arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+ </refentry>
+ </section>
+ <section>
+ <title>Data Sources</title>
+ <section>
+ <title>rdbmsdatasource</title>
+ <section>
+ <title>Connectors</title>
+ <section>
+ <title>ODBC</title>
+ </section>
+ <section>
+ <title>PostgreSQL</title>
+ </section>
+ </section>
+ </section>
+ </section>
+ <section>
+ <title>Row sources</title>
+ <section>
+ <title>xslrows</title>
+ </section>
+ <section>
+ <title>xmlrows</title>
+ </section>
+ <section>
+ <title>sqlrows</title>
+ </section>
+ <section>
+ <title>filerows</title>
+ </section>
+ <section>
+ <title>fsrows</title>
+ </section>
+ <section>
+ <title>urlrows</title>
+ </section>
+ <section>
+ <title>procrows</title>
+ </section>
+ </section>
+ <section>
+ <title>Tasks</title>
+ <section>
+ <title>sessionset</title>
+ </section>
+ <section>
+ <title>sessionclear</title>
+ </section>
+ <section>
+ <title>sqlmergetask</title>
+ </section>
+ <section>
+ <title>sqltask</title>
+ </section>
+ <section>
+ <title>sendmail</title>
+ </section>
+ </section>
+ <section>
+ <title>Variables</title>
+ <section>
+ <title>literal</title>
+ </section>
+ <section>
+ <title>config</title>
+ </section>
+ <section>
+ <title>parent</title>
+ </section>
+ <section>
+ <title>uri</title>
+ </section>
+ <section>
+ <title>param</title>
+ </section>
+ <section>
+ <title>session</title>
+ </section>
+ </section>
+ <section>
+ <title>Checks</title>
+ <section>
+ <title>regexcheck</title>
+ </section>
+ <section>
+ <title>sqlcheck</title>
+ </section>
+ </section>
+ </chapter>
+</book>
diff --git a/project2/fileRows.cpp b/project2/fileRows.cpp
index 487c2ef..58dde13 100644
--- a/project2/fileRows.cpp
+++ b/project2/fileRows.cpp
@@ -8,7 +8,6 @@
DECLARE_LOADER("filerows", FileRows);
FileRows::FileRows(const xmlpp::Element * p) :
- SourceObject(p),
StreamRows(p),
path(p, "path")
{
diff --git a/project2/fileRows.h b/project2/fileRows.h
index 0fcc394..a4cc863 100644
--- a/project2/fileRows.h
+++ b/project2/fileRows.h
@@ -6,6 +6,7 @@
class CommonObjects;
+/// Project2 component to create a row set from the contents of a file on the local filesystem
class FileRows : public StreamRows {
public:
FileRows(const xmlpp::Element * p);
diff --git a/project2/fsRows.cpp b/project2/fsRows.cpp
index 327d9f4..3cfbf8c 100644
--- a/project2/fsRows.cpp
+++ b/project2/fsRows.cpp
@@ -116,7 +116,6 @@ class FsRowSpecMaxDepth : public FsRows::SpecBase {
};
FsRows::FsRows(const xmlpp::Element * p) :
- SourceObject(p),
RowSet(p)
{
}
diff --git a/project2/fsRows.h b/project2/fsRows.h
index a93619f..9e59647 100644
--- a/project2/fsRows.h
+++ b/project2/fsRows.h
@@ -10,6 +10,7 @@
class CommonObjects;
+/// Project2 component to create a row set based on files and directories on the local filesystem
class FsRows : public RowSet {
public:
class SpecBase : public virtual IntrusivePtrBase {
diff --git a/project2/iHaveParameters.h b/project2/iHaveParameters.h
index 9d5f46f..0f8d154 100644
--- a/project2/iHaveParameters.h
+++ b/project2/iHaveParameters.h
@@ -5,9 +5,9 @@
#include <boost/intrusive_ptr.hpp>
#include "variables.h"
#include "intrusivePtrBase.h"
-#include "sourceObject.h"
-class IHaveParameters : public virtual IntrusivePtrBase {
+/// Mix-in base class to store parameters for component execution
+class IHaveParameters {
public:
class Parameter : public virtual IntrusivePtrBase {
public:
diff --git a/project2/if.cpp b/project2/if.cpp
index a69fd8d..b1b98a6 100644
--- a/project2/if.cpp
+++ b/project2/if.cpp
@@ -39,11 +39,15 @@ IfSet::passes() const
If::If(const xmlpp::Element * e) :
SourceObject(e),
- Iterate(e),
- RowView(e),
+ NoOutputExecute(e),
+ View(e),
IfSet(e),
localErrorHandling(e->get_attribute_value("errorHandling") == "local")
{
+ LoaderBase loader("http://project2.randomdan.homeip.net", true);
+ loader.supportedStorers.insert(Storer::into(&subNOEs));
+ loader.supportedStorers.insert(Storer::into(&subViews));
+ loader.collectAll(e, true, IgnoreUnsupported);
}
void
diff --git a/project2/if.h b/project2/if.h
index 68f6595..0a262c2 100644
--- a/project2/if.h
+++ b/project2/if.h
@@ -1,8 +1,8 @@
#ifndef IF_H
#define IF_H
-#include "iterate.h"
-#include "rowView.h"
+#include "noOutputExecute.h"
+#include "view.h"
#include "paramChecker.h"
class IfSet : public virtual IntrusivePtrBase {
@@ -18,7 +18,8 @@ class IfSet : public virtual IntrusivePtrBase {
ParamCheckers checks;
};
-class If : public Iterate, public RowView, public IfSet {
+/// Project2 component to conditionally execute its children
+class If : public NoOutputExecute, public View, public IfSet {
public:
If(const xmlpp::Element *);
@@ -29,6 +30,11 @@ class If : public Iterate, public RowView, public IfSet {
const bool localErrorHandling;
private:
+ typedef Storage<View>::Objects SubViews;
+ SubViews subViews;
+ typedef Storage<NoOutputExecute>::Objects SubNOEs;
+ SubNOEs subNOEs;
+
const std::string & getName() const;
};
diff --git a/project2/iterate.h b/project2/iterate.h
index d5ca824..54ddabf 100644
--- a/project2/iterate.h
+++ b/project2/iterate.h
@@ -9,6 +9,7 @@
class Iterate;
typedef boost::intrusive_ptr<Iterate> IteratePtr;
+/// Project2 component to iterate over a row set, executing its children for each record
class Iterate : public NoOutputExecute, public RowProcessor {
public:
Iterate(const xmlpp::Element * p);
diff --git a/project2/loggers.h b/project2/loggers.h
index 7be5280..69b352c 100644
--- a/project2/loggers.h
+++ b/project2/loggers.h
@@ -3,6 +3,7 @@
#include "logger.h"
+/// Base class for classes providing a logging facility
class LogDriverBase : public virtual IntrusivePtrBase {
public:
LogDriverBase(int level);
@@ -12,6 +13,7 @@ class LogDriverBase : public virtual IntrusivePtrBase {
const int level;
};
+/// Base class for loggers that write to some sort of file handle
class FileBasedLogDriver : public LogDriverBase {
public:
FileBasedLogDriver(FILE *, int level, bool timestamp);
@@ -30,6 +32,7 @@ class FileBasedLogDriver : public LogDriverBase {
mutable char tmbuf[30];
};
+/// Logger that writes to the console
class ConsoleLogDriver : public FileBasedLogDriver {
public:
ConsoleLogDriver(FILE *, int level, bool timestamp);
@@ -37,12 +40,14 @@ class ConsoleLogDriver : public FileBasedLogDriver {
};
+/// Logger that writes to a file
class FileLogDriver : public FileBasedLogDriver {
public:
FileLogDriver(const char * path, int level);
~FileLogDriver();
};
+/// Logger that writes to syslog
class SyslogLogDriver : public LogDriverBase {
public:
SyslogLogDriver(const char * ident, int level, int option = 0, int facility = LOG_USER);
diff --git a/project2/noOutputExecute.h b/project2/noOutputExecute.h
index f47c118..0e84fd1 100644
--- a/project2/noOutputExecute.h
+++ b/project2/noOutputExecute.h
@@ -3,12 +3,10 @@
#include "sourceObject.h"
-class ApplicationEngine;
-class PerRowValues;
-
class NoOutputExecute;
typedef boost::intrusive_ptr<NoOutputExecute> NoOutputExecutePtr;
+/// Base class for Project2 compoments that perform actions, but product no output
class NoOutputExecute : public virtual SourceObject {
public:
NoOutputExecute(const xmlpp::Element * p);
diff --git a/project2/paramChecker.h b/project2/paramChecker.h
index 219396c..465b8e9 100644
--- a/project2/paramChecker.h
+++ b/project2/paramChecker.h
@@ -8,7 +8,8 @@ class ApplicationEngine;
class ParamChecker;
typedef boost::intrusive_ptr<ParamChecker> ParamCheckerPtr;
-class ParamChecker : public virtual SourceObject {
+/// Base class for Project2 compoments that perform tests/checks
+class ParamChecker : public SourceObject {
public:
ParamChecker(const xmlpp::Element * p);
virtual ~ParamChecker();
diff --git a/project2/procRows.cpp b/project2/procRows.cpp
index 54b6d99..f1d00e0 100644
--- a/project2/procRows.cpp
+++ b/project2/procRows.cpp
@@ -8,7 +8,6 @@ SimpleMessageException(SubProcessFailedToStart);
SimpleNumericException(SubProcessFailed);
ProcRows::ProcRows(const xmlpp::Element * p) :
- SourceObject(p),
FileRows(p)
{
}
diff --git a/project2/procRows.h b/project2/procRows.h
index c35a2c1..63dbb8e 100644
--- a/project2/procRows.h
+++ b/project2/procRows.h
@@ -3,6 +3,7 @@
#include "fileRows.h"
+/// Project2 component to create a row set from the output of a locally executed program
class ProcRows : public FileRows {
public:
ProcRows(const xmlpp::Element * p);
diff --git a/project2/rawView.h b/project2/rawView.h
index 5ccd02c..b192c89 100644
--- a/project2/rawView.h
+++ b/project2/rawView.h
@@ -6,6 +6,7 @@
#include <map>
#include "view.h"
+/// Project2 component to create output based on its own XML tree node
class RawView : public View {
public:
RawView(const xmlpp::Element * p);
diff --git a/project2/rdbmsDataSource.cpp b/project2/rdbmsDataSource.cpp
index e843d8c..1b0ab3c 100644
--- a/project2/rdbmsDataSource.cpp
+++ b/project2/rdbmsDataSource.cpp
@@ -19,6 +19,7 @@ static const int ODBC_TYPEID = 2;
SimpleMessageException(UnknownConnectionProvider);
+/// Specialized ElementLoader for instances of RdbmsDataSource; handles persistent DB connections
class RdbmsDataSourceLoader : public ElementLoaderImpl<RdbmsDataSource> {
public:
void onIdle()
@@ -50,7 +51,6 @@ RdbmsDataSource::FailedHosts RdbmsDataSource::failedhosts;
RdbmsDataSource::DSNSet RdbmsDataSource::changedDSNs;
RdbmsDataSource::RdbmsDataSource(const xmlpp::Element * p) :
- SourceObject(p),
DataSource(p),
masterDsn(dynamic_cast<const xmlpp::Element *>(p->find("masterdsn").front())),
preferLocal(p->get_attribute_value("preferlocal") != "false")
diff --git a/project2/rdbmsDataSource.h b/project2/rdbmsDataSource.h
index 4026f48..857173b 100644
--- a/project2/rdbmsDataSource.h
+++ b/project2/rdbmsDataSource.h
@@ -9,6 +9,7 @@
#include "../libdbpp/connection.h"
#include "../libdbpp/error.h"
+/// Project2 component to provide access to transactional RDBMS data sources
class RdbmsDataSource : public DataSource {
public:
class RdbmsConnection {
diff --git a/project2/regexCheck.cpp b/project2/regexCheck.cpp
index 5588673..b8504c8 100644
--- a/project2/regexCheck.cpp
+++ b/project2/regexCheck.cpp
@@ -6,7 +6,6 @@
DECLARE_LOADER("regexcheck", RegexCheck);
RegexCheck::RegexCheck(const xmlpp::Element * p) :
- SourceObject(p),
ParamChecker(p),
applyTo(p, "apply-to"),
regex(p, "regex")
diff --git a/project2/regexCheck.h b/project2/regexCheck.h
index 41bb2c8..602f822 100644
--- a/project2/regexCheck.h
+++ b/project2/regexCheck.h
@@ -4,6 +4,7 @@
#include "paramChecker.h"
#include "variables.h"
+/// Project2 component to test the value of a variable against a regular expression
class RegexCheck : public ParamChecker {
public:
RegexCheck(const xmlpp::Element * p);
diff --git a/project2/rowProcessor.cpp b/project2/rowProcessor.cpp
index fbb470a..caff826 100644
--- a/project2/rowProcessor.cpp
+++ b/project2/rowProcessor.cpp
@@ -4,7 +4,6 @@
#include <boost/foreach.hpp>
RowProcessor::RowProcessor(const xmlpp::Element * p) :
- SourceObject(p),
IHaveParameters(p),
recordSource(p->get_attribute_value("source")),
filter(p->get_attribute_value("filter"))
diff --git a/project2/rowProcessor.h b/project2/rowProcessor.h
index e4377bd..0f421f9 100644
--- a/project2/rowProcessor.h
+++ b/project2/rowProcessor.h
@@ -6,7 +6,8 @@
#include "iHaveParameters.h"
#include "rowSet.h"
-class RowProcessor : public IHaveParameters, public virtual SourceObject {
+/// Base class for Project2 components that work with row sets
+class RowProcessor : public IHaveParameters {
public:
RowProcessor(const xmlpp::Element *);
virtual void rowReady() const = 0;
diff --git a/project2/rowSet.h b/project2/rowSet.h
index d2e4b1f..52edd76 100644
--- a/project2/rowSet.h
+++ b/project2/rowSet.h
@@ -14,7 +14,8 @@ class VariableType;
typedef boost::intrusive_ptr<RowSet> RowSetPtr;
typedef boost::intrusive_ptr<const RowSet> ConstRowSetPtr;
-class RowSet : public virtual SourceObject {
+/// Base class for Project2 components that provide a row set representation of data
+class RowSet : public SourceObject {
public:
typedef boost::function0<VariableType> RowAttribute;
SimpleNumericException(ParentOutOfRange);
diff --git a/project2/rowView.h b/project2/rowView.h
index a866558..7cc6fe1 100644
--- a/project2/rowView.h
+++ b/project2/rowView.h
@@ -6,6 +6,7 @@
#include "rowProcessor.h"
#include "view.h"
+/// Project2 component to create output based on a records in a row set
class RowView : public View, public RowProcessor {
public:
RowView(const xmlpp::Element *);
diff --git a/project2/sendmailTask.h b/project2/sendmailTask.h
index 1f7f193..2f3e088 100644
--- a/project2/sendmailTask.h
+++ b/project2/sendmailTask.h
@@ -7,6 +7,7 @@
#include "task.h"
#include "variables.h"
+/// Project2 component to send an email
class SendMailTask : public Task {
public:
class MailPart : public IntrusivePtrBase {
diff --git a/project2/session.h b/project2/session.h
index 2227b5b..7b66db9 100644
--- a/project2/session.h
+++ b/project2/session.h
@@ -8,6 +8,7 @@
#include "variables.h"
#include "exceptions.h"
+/// Base class for classes implementing session variable storage
class Session : public virtual IntrusivePtrBase {
public:
SimpleMessageException(VariableNotFound);
diff --git a/project2/sessionClearTask.h b/project2/sessionClearTask.h
index 9b93ed5..8241f8a 100644
--- a/project2/sessionClearTask.h
+++ b/project2/sessionClearTask.h
@@ -10,7 +10,8 @@
class CommonObjects;
-class SessionClearTask : public virtual Task {
+/// Project2 component to remove a variable from the session
+class SessionClearTask : public Task {
public:
SessionClearTask(const xmlpp::Element * p);
virtual ~SessionClearTask();
diff --git a/project2/sessionSetTask.h b/project2/sessionSetTask.h
index 5cf139e..f439768 100644
--- a/project2/sessionSetTask.h
+++ b/project2/sessionSetTask.h
@@ -11,7 +11,8 @@
class CommonObjects;
-class SessionSetTask : public virtual Task {
+/// Project2 component to add/update a variable in the session
+class SessionSetTask : public Task {
public:
SessionSetTask(const xmlpp::Element * p);
virtual ~SessionSetTask();
diff --git a/project2/sessionXml.cpp b/project2/sessionXml.cpp
index 41a2f1e..03b48bc 100644
--- a/project2/sessionXml.cpp
+++ b/project2/sessionXml.cpp
@@ -8,6 +8,7 @@
#include <boost/foreach.hpp>
#include <boost/lexical_cast.hpp>
+/// Session implementation that stores its contents in an XML file on the local filesystem
class SessionXml : public Session {
public:
SessionXml(UUID & sid);
diff --git a/project2/sourceObject.h b/project2/sourceObject.h
index fe6b4cc..3ebae2c 100644
--- a/project2/sourceObject.h
+++ b/project2/sourceObject.h
@@ -8,6 +8,7 @@
class CommonObjects;
class SourceObject;
typedef boost::intrusive_ptr<SourceObject> SourceObjectPtr;
+/// Base class for all Project2 components that can be placed in a Project2 script
class SourceObject : public virtual IntrusivePtrBase {
public:
SourceObject(const xmlpp::Element * p);
diff --git a/project2/sqlCheck.cpp b/project2/sqlCheck.cpp
index f7c4c8c..c36c229 100644
--- a/project2/sqlCheck.cpp
+++ b/project2/sqlCheck.cpp
@@ -14,7 +14,6 @@ DECLARE_LOADER("sqlcheck", SqlCheck);
class CantCompareNulls : public std::exception { };
SqlCheck::SqlCheck(const xmlpp::Element * p) :
- SourceObject(p),
IHaveParameters(p),
ParamChecker(p),
dataSource(p, "datasource"),
diff --git a/project2/sqlCheck.h b/project2/sqlCheck.h
index 8557dce..1f2937f 100644
--- a/project2/sqlCheck.h
+++ b/project2/sqlCheck.h
@@ -6,7 +6,8 @@
namespace DB { class SelectCommand; }
-class SqlCheck : public IHaveParameters, public ParamChecker {
+/// Project2 component to check the value of a variable against an RDBMS data source
+class SqlCheck : IHaveParameters, public ParamChecker {
public:
SqlCheck(const xmlpp::Element * p);
virtual ~SqlCheck();
diff --git a/project2/sqlMergeTask.cpp b/project2/sqlMergeTask.cpp
index a2dfe72..0160a7f 100644
--- a/project2/sqlMergeTask.cpp
+++ b/project2/sqlMergeTask.cpp
@@ -16,7 +16,8 @@ static void attach(IteratePtr i, ModifyCommand * insert);
class SqlMergeInsert;
typedef boost::intrusive_ptr<SqlMergeInsert> SqlMergeInsertPtr;
-class SqlMergeInsert : public IHaveParameters, public Task {
+/// Project2 component insert custom constructed records during an SQL Merge task
+class SqlMergeInsert : IHaveParameters, public Task {
public:
SqlMergeInsert(const xmlpp::Element * p) :
SourceObject(p),
diff --git a/project2/sqlMergeTask.h b/project2/sqlMergeTask.h
index fc33bc5..795e94f 100644
--- a/project2/sqlMergeTask.h
+++ b/project2/sqlMergeTask.h
@@ -14,6 +14,7 @@
#include <map>
#include <list>
+/// Project2 component merge arbitrary data into an RDBMS table
class SqlMergeTask : public Task {
public:
typedef std::string Table;
diff --git a/project2/sqlRows.cpp b/project2/sqlRows.cpp
index 14bdd41..920b5a6 100644
--- a/project2/sqlRows.cpp
+++ b/project2/sqlRows.cpp
@@ -16,7 +16,6 @@
DECLARE_LOADER("sqlrows", SqlRows);
SqlRows::SqlRows(const xmlpp::Element * p) :
- SourceObject(p),
RowSet(p),
dataSource(p, "datasource"),
sqlCommand(dynamic_cast<xmlpp::Element *>(p->get_children("sql").front())),
diff --git a/project2/sqlRows.h b/project2/sqlRows.h
index 099a56b..901023b 100644
--- a/project2/sqlRows.h
+++ b/project2/sqlRows.h
@@ -10,6 +10,7 @@
class RdbmsDataSource;
+/// Project2 component to create a row set based on an SQL SELECT statement issued against an RDBMS data source
class SqlRows : public RowSet {
public:
SqlRows(const xmlpp::Element * p);
diff --git a/project2/sqlTask.h b/project2/sqlTask.h
index 4805307..d8f9fe1 100644
--- a/project2/sqlTask.h
+++ b/project2/sqlTask.h
@@ -9,7 +9,8 @@
namespace DB { class ModifyCommand; }
-class SqlTask : public Task, public IHaveParameters {
+/// Project2 component to execute a modifying SQL statement against an RDBMS data source
+class SqlTask : public Task, IHaveParameters {
public:
SqlTask(const xmlpp::Element * p);
virtual ~SqlTask();
diff --git a/project2/streamRows.cpp b/project2/streamRows.cpp
index 47832ac..62d0d0f 100644
--- a/project2/streamRows.cpp
+++ b/project2/streamRows.cpp
@@ -4,7 +4,6 @@
#include <libxml++/nodes/textnode.h>
StreamRows::StreamRows(const xmlpp::Element * p) :
- SourceObject(p),
RowSet(p),
fieldSep(p->get_attribute_value("fieldSep")[0]),
quoteChar(p->get_attribute_value("quoteChar")[0]),
diff --git a/project2/streamRows.h b/project2/streamRows.h
index 6187f12..449a44b 100644
--- a/project2/streamRows.h
+++ b/project2/streamRows.h
@@ -7,6 +7,7 @@
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/ordered_index.hpp>
+/// Base class for Project2 components that create a row set based on the contents of a byte stream
class StreamRows : public RowSet {
public:
StreamRows(const xmlpp::Element * p);
diff --git a/project2/task.h b/project2/task.h
index f9fd1ff..57697e2 100644
--- a/project2/task.h
+++ b/project2/task.h
@@ -5,6 +5,7 @@
#include "sourceObject.h"
#include "noOutputExecute.h"
+/// Base class for Project2 components that perform some specific task
class Task : public NoOutputExecute {
public:
Task(const xmlpp::Element * p);
diff --git a/project2/urlRows.cpp b/project2/urlRows.cpp
index d4910bb..5669925 100644
--- a/project2/urlRows.cpp
+++ b/project2/urlRows.cpp
@@ -9,7 +9,6 @@
DECLARE_LOADER("urlrows", UrlRows);
UrlRows::UrlRows(const xmlpp::Element * p) :
- SourceObject(p),
StreamRows(p),
CurlHelper(p),
convertRequired(encoding != "utf-8")
diff --git a/project2/urlRows.h b/project2/urlRows.h
index d2bf038..ca1894d 100644
--- a/project2/urlRows.h
+++ b/project2/urlRows.h
@@ -8,6 +8,7 @@
#include "streamRows.h"
#include "curlHelper.h"
+/// Project2 component to create a row set from the contents of a file accessible via libcurl
class UrlRows : public StreamRows, CurlHelper {
public:
UrlRows(const xmlpp::Element * p);
diff --git a/project2/variables.cpp b/project2/variables.cpp
index 2e08b1b..2b2872d 100644
--- a/project2/variables.cpp
+++ b/project2/variables.cpp
@@ -117,6 +117,7 @@ VariableType::operator=(const VariableType & vt)
_VT::operator=(*((const _VT *)&vt));
}
+/// Variable implementation whose value is a literal value of some known type
class VariableLiteral : public VariableImpl {
public:
VariableLiteral(const Glib::ustring & src, const VT_typeID format = DefaultType) :
@@ -129,6 +130,7 @@ class VariableLiteral : public VariableImpl {
VariableType val;
};
+/// Base class for variables whose content is dynamic
class VariableImplDyn : public VariableImpl {
public:
VariableImplDyn(const xmlpp::Element * e) :
@@ -151,6 +153,7 @@ class VariableImplDyn : public VariableImpl {
boost::optional<Variable> defaultValue;
};
+/// Variable implementation to access session contents
class VariableSession : public VariableImplDyn {
public:
VariableSession(const xmlpp::Element * e) :
@@ -175,6 +178,7 @@ class VariableSession : public VariableImplDyn {
const Glib::ustring name;
};
+/// Variable implementation to access call parameters
class VariableParam : public VariableImplDyn {
public:
VariableParam(const xmlpp::Element * e) :
@@ -202,6 +206,7 @@ class VariableParam : public VariableImplDyn {
const Glib::ustring name;
};
+/// Variable implementation to access URI path fragments
class VariableUri : public VariableImplDyn {
public:
VariableUri(const xmlpp::Element * e) :
@@ -233,6 +238,7 @@ static void assignHelper(VariableType & dest, const VariableType & src) {
dest = src;
}
+/// Variable implementation to access fields in row sets
class VariableParent : public VariableImplDyn, public RowUser {
public:
VariableParent(const xmlpp::Element * e, const RowUser * d) :
@@ -321,6 +327,7 @@ class VariableParent : public VariableImplDyn, public RowUser {
mutable boost::function2<void, VariableType &, ConstRowSetPtr> getValue;
};
+/// Variable implementation which has some fixed value
class VariableFixed : public VariableImpl {
public:
VariableFixed(VariableType v) :
@@ -335,6 +342,7 @@ class VariableFixed : public VariableImpl {
VariableType var;
};
+/// Variable implementation to access platform configuration values
class VariableConfig : public VariableImplDyn {
public:
VariableConfig(const xmlpp::Element * e) :
diff --git a/project2/variables.h b/project2/variables.h
index 7dcccc2..863355c 100644
--- a/project2/variables.h
+++ b/project2/variables.h
@@ -59,7 +59,8 @@ class VariableType : public _VT {
mutable Freer freer;
};
-class VariableImpl : public virtual IntrusivePtrBase {
+/// Base class for Project2 variable accessors
+class VariableImpl : public IntrusivePtrBase {
public:
virtual const VariableType & value() const = 0;
diff --git a/project2/view.h b/project2/view.h
index a6ae565..80d7b30 100644
--- a/project2/view.h
+++ b/project2/view.h
@@ -6,6 +6,7 @@
class Presenter;
+/// Base class for Project2 components that output data
class View : public virtual SourceObject {
public:
View(const xmlpp::Element *);
diff --git a/project2/xmlObjectLoader.h b/project2/xmlObjectLoader.h
index 9fba5bd..40e6d5d 100644
--- a/project2/xmlObjectLoader.h
+++ b/project2/xmlObjectLoader.h
@@ -53,6 +53,7 @@ class LoaderBase {
static void init_loader_##T() __attribute__ ((constructor(201))); \
static void init_loader_##T() { LoaderBase::newLoader(N, new ElementLoaderImpl<T>()); }
+/// Helper for loading and maintaining Project2 script components
class ElementLoader {
public:
virtual SourceObjectPtr go(const xmlpp::Element * xml) const = 0;
@@ -61,6 +62,7 @@ class ElementLoader {
virtual void onPeriodic(); // When the app engine feels like it
};
+/// Helper for loading and maintaining Project2 script components (typed implementation)
template <class X>
class ElementLoaderImpl : public ElementLoader {
public:
diff --git a/project2/xmlRows.cpp b/project2/xmlRows.cpp
index 6cf7da0..bd958a5 100644
--- a/project2/xmlRows.cpp
+++ b/project2/xmlRows.cpp
@@ -14,7 +14,6 @@
DECLARE_LOADER("xmlrows", XmlRows);
XmlRows::XmlRows(const xmlpp::Element * p) :
- SourceObject(p),
RowSet(p),
recordRoot(p->get_attribute_value("recordroot")),
recordTrigger(p->get_attribute_value("recordtrigger")),
diff --git a/project2/xmlRows.h b/project2/xmlRows.h
index df74710..efbaf5e 100644
--- a/project2/xmlRows.h
+++ b/project2/xmlRows.h
@@ -6,6 +6,7 @@
#include <map>
#include "rowSet.h"
+/// Project2 component to create a row set based on the contents of an XML file
class XmlRows : public RowSet {
public:
typedef std::map<Glib::ustring, Glib::ustring> Values;
diff --git a/project2/xslRows.cpp b/project2/xslRows.cpp
index e00d8b7..9793119 100644
--- a/project2/xslRows.cpp
+++ b/project2/xslRows.cpp
@@ -18,7 +18,6 @@ SimpleMessageException(XpathInitError);
SimpleMessageException(XpathEvalError);
XslRows::XslRows(const xmlpp::Element * p) :
- SourceObject(p),
RowSet(p),
CurlHelper(p),
html(p->get_attribute_value("html") == "true"),
diff --git a/project2/xslRows.h b/project2/xslRows.h
index 27cb1b5..7aeb4e4 100644
--- a/project2/xslRows.h
+++ b/project2/xslRows.h
@@ -9,6 +9,7 @@
#include "variables.h"
#include "curlHelper.h"
+/// Project2 component to create a row set based on the contents of an XML resource and specific XPaths with its hierarchy
class XslRows : public RowSet, CurlHelper {
public:
XslRows(const xmlpp::Element * p);