// Create links from the current module to a selected module
/*
Automatically creates links to a selected target module.
Links are created in the DOORS Links module.
Tony Goodman.
*/
//Additional DB
DB addDB = null
DBE srcFld = null
DBE trgFld = null
DBE trgBtn = null
DBE linkChoice = null
DBE lnkBtn = null
Folder currFolder = null
Module currModule = null
/******************************************************************************
doBrowseTarget
******************************************************************************/
void doBrowseTarget(DBE dbe)
{
string szModuleName = fnMiniExplorer(addDB, currFolder, MINI_EXP_FORMAL_MODS, "Select Target Module", "Select Target Module")
// ensure that mini explorer has returned a valid module name
if (szModuleName != "" && module(szModuleName))
{
set(trgFld, szModuleName )
}
}
/******************************************************************************
doClose
******************************************************************************/
void doClose(DB db)
{
release(addDB)
}
/******************************************************************************
doCreateLinks
******************************************************************************/
void doCreateLinks(DB addDB)
{
string lm = ""
string res = ""
Object src = null
Object tgt = null
Object rato = null
Module tgtMod = null
int numSrc = 0
int numTgt = 0
int numLinks = 0
int s = 0
int t = 0
int i = 0
Skip srcObjs = create
Skip tgtObjs = create
string trg = get trgFld
tgtMod = read(trg, true)
// count source objects and add to skip list
for src in currModule do
{
if (src."Object Text" "" != "")
{
for (i = 0; i < level(src); i++)
{
numSrc++
put(srcObjs, numSrc, src)
}
}
}
numLinks = numSrc
for tgt in tgtMod do
{
if (tgt."Object Text" "" != "")
{
for (i = 0; i < level(src); i++)
{
numTgt++
put(tgtObjs, numTgt, tgt)
}
}
}
if (numTgt < (numSrc / 10))
{
if (!confirm("The target module contains " numTgt " objects only.\nAre you sure you want to continue?"))
{
return
}
}
// create the links
for (i = 0; i < numLinks; i++)
{
s = random(numSrc) + 1
t = random(numTgt) + 1
if (find(srcObjs, s, src) && find(tgtObjs, t, tgt))
{
src->"DOORS Links"->tgt
}
}
doClose(addDB)
}
/******************************************************************************
createSomeLinks
CALLBACK for addButton
******************************************************************************/
void createSomeLinks()
{
if (!isEdit(currModule))
{
infoBox("The module must be open for exclusive edit to run this.")
return
}
addDB = create(currModule, "Create some links")
srcFld = field(addDB, "Source Module ", name(currModule), 30, true)
trgFld = field(addDB, "Target Module ", "", 30, true)
beside addDB
trgBtn = button(addDB, "Browse ...", doBrowseTarget, styleStandardSize)
left addDB
apply(addDB, "Create", doCreateLinks)
close(addDB, true, doClose)
realize addDB
block(addDB)
destroy(addDB)
addDB = null
refresh(currModule)
}
/******************************************************************************
MAIN
******************************************************************************/
currFolder = current Folder
currModule = current Module
if (null currModule)
{
infoBox("This can only be run from a formal module")
halt
}
createSomeLinks()
sitemap