1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
# Copyright (C) 2003-2007 Tresys Technology, LLC
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
## This module is not a real analysis, but an example that serves as a
## guide to what one must do when creating a module via embedded
## comments. This file also serves as a template for when new
## analysis modules are created. To include this module in apol, add
## the file name to apol_SOURCES variable in Makefile.am.
##
## All this module does is display an entry box and echo the contents
## of that box.
## The name space should following the convention of Apol_Analysis_XXX, where
## XXX is a 3-4 letter name for the analysis.
namespace eval Apol_Analysis_foo {
variable vals
variable widgets
## Within the namespace command for the module, you must call
## Apol_Analysis::registerAnalysis. The first argument is the
## namespace name of the module, second is the descriptive display name
## you want to be displayed in the GUI selection box.
Apol_Analysis::registerAnalysis "Apol_Analysis_foo" "Analysis Template Example"
}
# Called when the tool first starts up. It is given a blank frame to
# which create its search widgets.
proc Apol_Analysis_foo::create {options_frame} {
variable vals
set vals(entry_string) {}
set l [label $options_frame.l -text "Enter Text:"]
set e [entry $options_frame.e -textvariable Apol_Analysis_foo::vals(entry_string) -width 25 -background white]
pack $l $e -side left -anchor w
}
# Called when a policy is opened.
proc Apol_Analysis_foo::open {} {
}
# Called when a policy is closed. Typically you should reset any
# context or option variables you have.
proc Apol_Analysis_foo::close {} {
variable vals
set vals(entry_string) {}
}
# Return a string that describes what the module does. Do not forget
# that during compilation, blank lines are stripped; thus \n may be
# needed within the text.
proc Apol_Analysis_foo::getInfo {} {
return "This is an analysis template dialog that simply displays the content
of the entry box. The purpose of this analysis is to provide a
template for new analyses."
}
# Perform a new analysis. This function is responsible for obtaining
# a new results tab if the analysis succeeds. If the analysis was
# successful then return an empty string; otherwise return a string
# describing the error, removing its tab if it had made one.
proc Apol_Analysis_foo::newAnalysis {} {
variable vals
if {$vals(entry_string) == "" } {
return "You must enter text in the entry box."
}
set f [Apol_Analysis::createResultTab "Foo" [array get vals]]
set results_box [text $f.results -bg white]
pack $results_box -expand yes -fill both
$results_box insert 0.0 "new analysis: $vals(entry_string)"
return
}
# Update an existing analysis. The passed in frame will contain the
# existing results; it is this function's responsibility to clear away
# old data and to store the current search criteria onto the tab. If
# the analysis was successful then return an empty string; otherwise
# return a string describing the error. On error Apol_Analysis will
# remove its tab.
proc Apol_Analysis_foo::updateAnalysis {f} {
variable vals
if {$vals(entry_string) == "" } {
return "You must enter text in the entry box."
}
Apol_Analysis::setResultTabCriteria [array get vals]
$f.results delete 0.0 end
$f.results insert 0.0 "updated analysis: $vals(entry_string)"
return
}
# Called whenever the user hits the reset criteria button.
proc Apol_Analysis_foo::reset {} {
variable vals
set vals(entry_string) {}
}
# Called when the user switches to this tab. The module should
# restore its search criteria to the values that were stored within
# the tab.
proc Apol_Analysis_foo::switchTab {query_options} {
variable vals
array set vals $query_options
}
# Called to save the current criteria to a file channel.
proc Apol_Analysis_foo::saveQuery {channel} {
variable vals
foreach {key value} [array get vals] {
puts $channel "$key $value"
}
}
# Called to load a query from a file channel. The module then updates
# its display to match the criteria.
proc Apol_Analysis_foo::loadQuery {channel} {
variable vals
while {[gets $channel line] >= 0} {
set line [string trim $line]
# Skip empty lines and comments
if {$line == {} || [string index $line 0] == "#"} {
continue
}
regexp -line -- {^(\S+)( (.+))?} $line -> key --> value
set vals($key) $value
}
}
# Get a text widget that contains this analysis's results. This is
# then passed to the find dialog, goto line dialog, and so forth.
proc Apol_Analysis_foo::getTextWidget {tab} {
return $tab.results
}
|