The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# $Id$
#
# >>Title::     Use Case Module
#
# >>Copyright::
# Copyright (c) 1992-1997, Ian Clatworthy (ianc@mincom.com).
# You may distribute under the terms specified in the LICENSE file.
#
# >>History::
# -----------------------------------------------------------------------
# Date      Who     Change
# 17-Dec-97 ianc    SDF 2.000
# -----------------------------------------------------------------------
#
# >>Purpose::
# {{MOD:usecases}} is an [[SDF]] module for
# managing Use Cases.
#
# >>Description::
# You can customise this module's behavior
# by defining the following variables before using this module:
#
# * {{UC_ATTRIBUTES}} - the comma-separated list of attributes
#   at the top of each details file
# * {{UC_SUBSECTIONS}} - the comma-separated list of subsections
#   at the top of each details file.
#
# >>Limitations::
#

!default UC_ATTRIBUTES    'Version,Status'
!default UC_SUBSECTIONS   'Purpose,Actors,Scenario,Special Requirements,Related Use Cases'

# Define the classes
!class usecases 'UC,UCTITLE'; 'Code,Title'; "Jump,$var{'UC_ATTRIBUTES'}"
!class actors   'ACT';        'Name,Description'

# Define the hypertext generation rules
!on phrase 'UC';; $attr{'jump'}="$text.html"
!on phrase 'UCTITLE';; $attr{'jump'}=$obj_long{'usecases',$text,'Code'} . ".html"

!block script

sub usecases_Jump_Value {
    local($name) = @_;
#   local($result);

    return "$name.html";
}

sub usecases_Value {
    local($attr, $name) = @_;
#   local($result);

    return AttrToFile($attr, $name, 'usecases');
}

# Macro to construct the title for a details file.
# If a title is supplied, a warning is output if it does not
# match the title in the database.
@_uc_title_MacroArgs = (
    'Name       Type        Default     Rule',
    'title      string      _NULL_',
);
sub uc_title_Macro {
    local(%arg) = @_;
    local(@text);
    local($title, $db_title);
    local($code);

    # Check the title matches the database
    $title = $arg{'title'};
    $code = $var{'FILE_BASE'};
    $db_title = &Value('usecases', $code, 'Title');
    if ($title eq '') {
        $title = $db_title;
    }
    elsif ($title ne $db_title) {
        &'AppMsg("warning", "usecase title does not match database value");
    }

    # Build result
    @text = (
        "!define DOC_NAME '$code. $title'",
        "!define DOC_TOC 0",
        "!build_title",
        "!if UC_SUBSECTIONS",
        "!subsections UC_SUBSECTIONS; 'noprefix'",
        "!endif",
        "!if UC_ATTRIBUTES",
        "!namevalues 'usecases'; '$code'; UC_ATTRIBUTES",
        "!endif");

    # Return result
    return @text;
}
!endblock