def exportArchitecture(outFile,session_id = None): b = Borg() rmArchitecture = b.get_dbproxy(session_id).redmineArchitecture() buf = '' noAPs = 0 for aName,aType,sTxt in rmArchitecture: buf += sTxt + '\n' noAPs += 1 if (aType == 'component'): caName = aName.replace(' ','_') + 'AssetModel.jpg' cgName = aName.replace(' ','_') + 'GoalModel.jpg' buildComponentAssetModel(b.get_dbproxy(session_id),aName,caName) buildComponentGoalModel(b.get_dbproxy(session_id),aName,cgName) elif (aType == 'architectural_pattern'): graphName = aName.replace(' ','_') + 'ComponentModel.jpg' buildComponentModel(b.get_dbproxy(session_id),aName,graphName) aFile = open(outFile,'w') aFile.write(buf) aFile.close() outFilePrefix,outFilePostfix = outFile.split('.') summaryFile = outFilePrefix + '-summary.' + outFilePostfix archSumm = b.get_dbproxy(session_id).redmineArchitectureSummary('Complete') buf = '' for aName,sTxt in archSumm: buf += sTxt + '\n' aFile = open(summaryFile,'w') aFile.write(buf) aFile.close() return 'Exported ' + str(noAPs) + ' architectural patterns.'
def exportAttackPatterns(outFile,session_id = None): b = Borg() rmAttackPatterns = b.get_dbproxy(session_id).redmineAttackPatterns() buf = 'h1. Contextualised Attack Patterns\n\nThis section was automatically generated based on the contents of the webinos WP 2 git repository at http://dev.webinos.org/git/wp2.git.\n\nh2. Obstacle probability: colour codes\n\n!{width:200px}ObsColour.jpg!\n\n' apdxBuf = '' noAPs = 0 for apName,envName,cType,apTxt in rmAttackPatterns: if (cType == 'body'): buf += apTxt + '\n' gmName = apName.replace(' ','_') + 'ObstacleModel.jpg' buildRiskObstacleModel(b.get_dbproxy(session_id),apName,envName,gmName) else: apdxBuf += apTxt + '\n' noAPs += 1 aFile = open(outFile,'w') aFile.write(buf) aFile.close() fileName,filePostfix = outFile.split('.') summaryFile = fileName + '-summary.txt' buf = b.get_dbproxy(session_id).redmineAttackPatternsSummary('Complete') aFile = open(summaryFile,'w') aFile.write(buf) aFile.close() return 'Exported ' + str(noAPs) + ' attack patterns.'
def exportRedmineUseCases(outFile, session_id=None): b = Borg() rmUseCases = b.get_dbproxy(session_id).redmineUseCases() buf = '' noUseCases = 0 ucDict = {} envs = b.get_dbproxy(session_id).getEnvironments() for envName in envs: envShortCode = envs[envName].shortCode() ucDict[envShortCode] = [] for ucName, ucShortCode, ucAuthor, ucTxt in rmUseCases: ucCat = re.sub('[0-9]', '', ucShortCode) ucDict[ucCat].append((ucName, ucShortCode, ucAuthor, ucTxt)) fnlCats = list(ucDict.keys()) fnlCats.sort() for fnlCat in fnlCats: for ucName, ucShortCode, ucAuthor, ucTxt in ucDict[fnlCat]: buf += ucTxt + '\n' noUseCases += 1 ucFile = open(outFile, 'w') ucFile.write(buf) ucFile.close() return 'Exported ' + str(noUseCases) + ' use cases.'
def importMisusability(crParameterSet, tcParameterSet, session_id): b = Borg() db_proxy = b.get_dbproxy(session_id) crCount = 0 for crParameters in crParameterSet: objtId = db_proxy.existingObject(crParameters.name(), 'concept_reference') if objtId == -1: db_proxy.addConceptReference(crParameters) else: crParameters.setId(objtId) db_proxy.updateConceptReference(crParameters) crCount += 1 tcCount = 0 for tcParameters in tcParameterSet: objtId = db_proxy.existingObject(tcParameters.task(), 'task_characteristic') if objtId == -1: db_proxy.addTaskCharacteristic(tcParameters) else: tcParameters.setId(objtId) db_proxy.updateTaskCharacterisric(tcParameters) tcCount += 1 msgStr = 'Imported ' + str(crCount) + ' concept references, and ' + str( tcCount) + ' task characteristics.' return msgStr
def get_dbproxy(self, session_id): """ Searches the MySQLDatabaseProxy instance associated with the session ID. :param session_id: The session ID :type session_id: str :rtype MySQLDatabaseProxy :return The MySQLDatabaseProxy instance associated with the session ID :raise CairisHTTPError """ if session_id: b = Borg() try: db_proxy = b.get_dbproxy(session_id) except SessionNotFound as ex: raise NoSessionError(ex) if isinstance(db_proxy, MySQLDatabaseProxy): if db_proxy.conn is None: db_proxy.reconnect(session_id=session_id) return db_proxy else: raise CairisHTTPError( status_code=CONFLICT, message='The database connection was not properly set up. Please try to reset the connection.' ) else: raise MissingParameterHTTPError( param_names=['session_id'] )
def get_dbproxy(self, session_id): """ Searches the MySQLDatabaseProxy instance associated with the session ID. :param session_id: The session ID :type session_id: str :rtype MySQLDatabaseProxy :return The MySQLDatabaseProxy instance associated with the session ID :raise CairisHTTPError """ if session_id: b = Borg() db_proxy = b.get_dbproxy(session_id) if db_proxy is None: raise CairisHTTPError( status_code=httplib.CONFLICT, message='The database connection could not be created.') elif isinstance(db_proxy, MySQLDatabaseProxy): db_proxy.reconnect(session_id=session_id) return db_proxy else: raise CairisHTTPError( status_code=httplib.CONFLICT, message= 'The database connection was not properly set up. Please try to reset the connection.' ) else: raise MissingParameterHTTPError(param_names=['session_id'])
def get_dbproxy(self, session_id): """ Searches the MySQLDatabaseProxy instance associated with the session ID. :param session_id: The session ID :type session_id: str :rtype MySQLDatabaseProxy :return The MySQLDatabaseProxy instance associated with the session ID :raise CairisHTTPError """ if session_id: b = Borg() try: db_proxy = b.get_dbproxy(session_id) except SessionNotFound as ex: raise NoSessionError(ex) if isinstance(db_proxy, MySQLDatabaseProxy): if db_proxy.conn is None: db_proxy.reconnect(session_id=session_id) return db_proxy else: raise CairisHTTPError( status_code=CONFLICT, message= 'The database connection was not properly set up. Please try to reset the connection.' ) else: raise MissingParameterHTTPError(param_names=['session_id'])
def get_dbproxy(self, session_id): """ Searches the MySQLDatabaseProxy instance associated with the session ID. :param session_id: The session ID :type session_id: str :rtype MySQLDatabaseProxy :return The MySQLDatabaseProxy instance associated with the session ID :raise CairisHTTPError """ if session_id: b = Borg() db_proxy = b.get_dbproxy(session_id) if db_proxy is None: raise CairisHTTPError( status_code=httplib.CONFLICT, message='The database connection could not be created.' ) elif isinstance(db_proxy, MySQLDatabaseProxy): db_proxy.reconnect(session_id=session_id) return db_proxy else: raise CairisHTTPError( status_code=httplib.CONFLICT, message='The database connection was not properly set up. Please try to reset the connection.' ) else: raise MissingParameterHTTPError( param_names=['session_id'] )
def exportSecurityPatterns(outFileName, session_id=None): b = Borg() buf = b.get_dbproxy(session_id).securityPatternsToXml() rFile = open(outFileName, 'w') rFile.write(buf) rFile.close() return 'Exported security patterns'
def exportRedmineUseCases(outFile, session_id=None): b = Borg() rmUseCases = b.get_dbproxy(session_id).redmineUseCases() buf = '' noUseCases = 0 ucDict = { 'ID': [], 'DA': [], 'NM': [], 'PS': [], 'NC': [], 'LC': [], 'CAP': [], 'TMS': [] } for ucName, ucShortCode, ucAuthor, ucTxt in rmUseCases: ucCat = re.sub('[0-9]', '', ucShortCode) ucDict[ucCat].append((ucName, ucShortCode, ucAuthor, ucTxt)) fnlCats = ucDict.keys() fnlCats.sort() for fnlCat in fnlCats: for ucName, ucShortCode, ucAuthor, ucTxt in ucDict[fnlCat]: buf += ucTxt + '\n' noUseCases += 1 ucFile = open(outFile, 'w') ucFile.write(buf) ucFile.close() return 'Exported ' + str(noUseCases) + ' use cases.'
def importModelFile(importFile, isOverwrite=1, session_id=None): try: b = Borg() db_proxy = b.dbProxy if (session_id != None): db_proxy = b.get_dbproxy(session_id) modelTxt = '' if isOverwrite == 1: db_proxy.clearDatabase(session_id) modelTxt += importTVTypeFile( importFile, isOverwrite, session_id=session_id) + ' ' modelTxt += importDomainValuesFile(importFile, session_id) + ' ' modelTxt += importProjectFile(importFile, session_id) + ' ' modelTxt += importRiskAnalysisFile(importFile, session_id) + ' ' modelTxt += importUsabilityFile(importFile, session_id) + ' ' modelTxt += importRequirementsFile(importFile, session_id) + ' ' modelTxt += importAssociationsFile(importFile, session_id) + ' ' modelTxt += importSynopsesFile(importFile, session_id) + ' ' modelTxt += importMisusabilityFile(importFile, session_id) + ' ' modelTxt += importDataflowsFile(importFile, session_id) + ' ' modelTxt += importLocationsFile(importFile, session_id) return modelTxt except xml.sax.SAXException as e: raise ARMException("Error parsing" + importFile + ": " + e.getMessage())
def importRequirements(dpParameterSet, goalParameterSet, obsParameterSet, reqParameterSet, cmParameterSet, session_id): b = Borg() db_proxy = b.get_dbproxy(session_id) dpCount = 0 for dpParameters in dpParameterSet: objtId = db_proxy.existingObject(dpParameters.name(), 'domainproperty') if objtId == -1: db_proxy.addDomainProperty(dpParameters) else: dpParameters.setId(objtId) db_proxy.updateDomainProperty(dpParameters) dpCount += 1 goalCount = 0 for goalParameters in goalParameterSet: objtId = db_proxy.existingObject(goalParameters.name(), 'goal') if objtId == -1: db_proxy.addGoal(goalParameters) else: goalParameters.setId(objtId) db_proxy.updateGoal(goalParameters) goalCount += 1 obsCount = 0 for obsParameters in obsParameterSet: objtId = db_proxy.existingObject(obsParameters.name(), 'obstacle') if objtId == -1: db_proxy.addObstacle(obsParameters) else: obsParameters.setId(objtId) db_proxy.updateObstacle(obsParameters) obsCount += 1 reqCount = 0 for req, refName, refType in reqParameterSet: objtId = db_proxy.existingObject(req.name(), 'requirement') if objtId == -1: isAsset = True if (refType == 'environment'): isAsset = False db_proxy.addRequirement(req, refName, isAsset) else: db_proxy.updateRequirement(req) reqCount += 1 cmCount = 0 for cmParameters in cmParameterSet: objtId = db_proxy.existingObject(cmParameters.name(), 'countermeasure') if objtId == -1: db_proxy.addCountermeasure(cmParameters) else: cmParameters.setId(objtId) db_proxy.updateCountermeasure(cmParameters) cmCount += 1 msgStr = 'Imported ' + str(dpCount) + ' domain properties, ' + str( goalCount) + ' goals, ' + str(obsCount) + ' obstacles, ' + str( reqCount) + ' requirements, and ' + str( cmCount) + ' countermeasures.' return msgStr
def importDiagramsNetAssetModel(importFile,envName,session_id): objts, assocs = importDiagramsNetFile(importFile,'asset') b = Borg() db_proxy = b.get_dbproxy(session_id) newAssetCount = 0 for asset in objts: assetName = asset['name'] assetType = asset['type'].capitalize() if (db_proxy.existingObject(assetName,'asset') == -1): db_proxy.addAsset(AssetParameters(assetName,asset['short_code'],asset['description'],asset['significance'],assetType,0,'',[],[],[AssetEnvironmentProperties(envName,asset['properties'],asset['rationale'])])) newAssetCount += 1 newAssocCount = 0 for assoc in assocs: headAsset = assoc['head'] tailAsset = assoc['tail'] try: db_proxy.checkAssetAssociation(envName,headAsset,tailAsset) db_proxy.addClassAssociation(ClassAssociationParameters(envName,headAsset,'asset',assoc['headNav'],assoc['headType'],'*','','','*',assoc['tailType'],assoc['tailNav'],'asset',tailAsset,'To be defined')) newAssocCount += 1 except DatabaseProxyException as ex: if str(ex.value).find('already exists') == -1: raise ARMException(str(ex.value)) msgStr = 'Imported ' + str(newAssetCount) + ' asset' if (newAssetCount != 1): msgStr += 's' msgStr += ', and ' + str(newAssocCount) + ' asset association' if (newAssocCount != 1): msgStr += 's' msgStr += '.' return msgStr
def importSecurityPatterns(taps, spps, vts, session_id=None): noOfTaps = len(taps) noOfSpps = len(spps) b = Borg() db_proxy = b.get_dbproxy(session_id) msgStr = 'No patterns imported' if (noOfTaps > 0): tapId = 0 db_proxy.deleteSecurityPattern(-1) db_proxy.deleteTemplateAsset(-1) for vt in vts: db_proxy.addValueType(vt) for tap in taps: tap.setId(tapId) db_proxy.addTemplateAsset(tap) tapId += 1 if (noOfSpps > 0): spId = 0 db_proxy.deleteSecurityPattern(-1) for sp in spps: sp.setId(spId) db_proxy.addSecurityPattern(sp) spId += 1 msgStr = 'Imported ' + str( noOfTaps) + ' template assets and ' + str( noOfSpps) + ' security patterns' return msgStr
def importLocations(locations, session_id): b = Borg() db_proxy = b.get_dbproxy(session_id) msgStr = '' for locs in locations: db_proxy.addLocations(locs) msgStr = 'Imported ' + locs.name() + '. ' return msgStr
def importProcesses(docs, codes, memos, quotations, codeNetworks, processes, ics, intentions, contributions, session_id): noOfDocs = len(docs) noOfCodes = len(codes) noOfMemos = len(memos) noOfQuotations = len(quotations) noOfCNs = len(codeNetworks) noOfProcs = len(processes) noOfICs = len(ics) noOfIntentions = len(intentions) noOfContributions = len(contributions) b = Borg() db_proxy = b.get_dbproxy(session_id) for dp in docs: db_proxy.addInternalDocument(dp) for cp in codes: db_proxy.addCode(cp) for mp in memos: db_proxy.addMemo(mp) for q in quotations: db_proxy.addQuotation(q) # Necessary because adding document memos currently overwrites the existing memo text for mp in memos: db_proxy.updateMemo(mp) for cn in codeNetworks: personaName = cn[0] rtName = cn[1] fromCode = cn[2] toCode = cn[3] db_proxy.addCodeRelationship(personaName, fromCode, toCode, rtName) for p in processes: db_proxy.addImpliedProcess(p) for ic in ics: db_proxy.addImpliedCharacteristic(ic) for intention in intentions: db_proxy.addIntention(intention) for contribution in contributions: db_proxy.addContribution(contribution) msgStr = 'Imported ' + str(noOfDocs) + ' internal documents, ' + str( noOfCodes) + ' codes, ' + str(noOfMemos) + ' memos, ' + str( noOfQuotations) + ' quotations, ' + str( noOfCNs) + ' code relationships, ' + str( noOfProcs) + ' implied processes, ' + str( noOfIntentions) + ' intentions, and ' + str( noOfContributions) + ' contributions.' return msgStr
def exportGRL(outFileName,personaNames,taskNames,envName,session_id = None): b = Borg() pStr = personaNames tStr = taskNames buf = b.get_dbproxy(session_id).pcToGrl(pStr,tStr,envName) rFile = open(outFileName,'w') rFile.write(buf) rFile.close() return 'Exported GRL for ' + pStr + ' in tasks ' + tStr + ' situated in environment ' + envName
def __init__(self, session_id=None): b = Borg() self.dbProxy = b.get_dbproxy(session_id) self.configDir = b.configDir self.theCharacteristicSynopses = [] self.theReferenceSynopses = [] self.theStepSynopses = [] self.theReferenceContributions = [] self.theUseCaseContributions = []
def importUsability(personaParameterSet, edParameterSet, drParameterSet, pcParameterSet, taskParameterSet, session_id): b = Borg() db_proxy = b.get_dbproxy(session_id) personaCount = 0 for personaParameters in personaParameterSet: objtId = db_proxy.existingObject(personaParameters.name(), 'persona') if objtId == -1: db_proxy.addPersona(personaParameters) else: personaParameters.setId(objtId) db_proxy.updatePersona(personaParameters) personaCount += 1 edCount = 0 for edParameters in edParameterSet: objtId = db_proxy.existingObject(edParameters.name(), 'external_document') if objtId == -1: db_proxy.addExternalDocument(edParameters) else: edParameters.setId(objtId) db_proxy.updateExternalDocument(edParameters) edCount += 1 drCount = 0 for drParameters in drParameterSet: objtId = db_proxy.existingObject(drParameters.name(), 'document_reference') if objtId == -1: db_proxy.addDocumentReference(drParameters) else: drParameters.setId(objtId) db_proxy.updateDocumentReference(drParameters) drCount += 1 taskCount = 0 for taskParameters in taskParameterSet: objtId = db_proxy.existingObject(taskParameters.name(), 'task') if objtId == -1: db_proxy.addTask(taskParameters) else: taskParameters.setId(objtId) db_proxy.updateTask(taskParameters) taskCount += 1 pcCount = 0 for pcParameters in pcParameterSet: db_proxy.addPersonaCharacteristic(pcParameters) pcCount += 1 msgStr = 'Imported ' + str(personaCount) + ' personas, ' + str( edCount) + ' external documents, ' + str( drCount) + ' document references, ' + str( pcCount) + ' persona characteristics, ' + str( taskCount) + ' tasks.' return msgStr
def addDefaultAsset(objtName,envName,session_id,assetType= 'Information'): assetDesc = 'To be defined' shortCode = 'TBD' significanceText = 'To be defined' b = Borg() dbProxy = b.get_dbproxy(session_id) envProps = [AssetEnvironmentProperties(envName,[0,0,1,0,0,0,0,0],['None','None','To be defined','None','None','None','None','None'])] p = AssetParameters(objtName,shortCode,assetDesc,significanceText,assetType,False,'',[],[],envProps) return dbProxy.addAsset(p)
def exportGRL(outFileName,personaNames,taskNames,envName,session_id = None): b = Borg() pStr = ', '.join(personaNames) tStr = ', '.join(taskNames) buf = b.get_dbproxy(session_id).pcToGrl(pStr,tStr,envName) rFile = open(outFileName,'w') rFile.write(buf) rFile.close() return 'Exported GRL for ' + pStr + ' in tasks ' + tStr + ' situated in environment ' + envName
def importRequirements(dpParameterSet,goalParameterSet,obsParameterSet,reqParameterSet,cmParameterSet,session_id): b = Borg() db_proxy = b.get_dbproxy(session_id) dpCount = 0 for dpParameters in dpParameterSet: objtId = db_proxy.existingObject(dpParameters.name(),'domainproperty') if objtId == -1: db_proxy.addDomainProperty(dpParameters) else: dpParameters.setId(objtId) db_proxy.updateDomainProperty(dpParameters) dpCount += 1 goalCount = 0 for goalParameters in goalParameterSet: objtId = db_proxy.existingObject(goalParameters.name(),'goal') if objtId == -1: db_proxy.addGoal(goalParameters) else: goalParameters.setId(objtId) db_proxy.updateGoal(goalParameters) goalCount += 1 obsCount = 0 for obsParameters in obsParameterSet: objtId = db_proxy.existingObject(obsParameters.name(),'obstacle') if objtId == -1: db_proxy.addObstacle(obsParameters) else: obsParameters.setId(objtId) db_proxy.updateObstacle(obsParameters) obsCount += 1 reqCount = 0 for req,refName,refType in reqParameterSet: objtId = db_proxy.existingObject(req.name(),'requirement') if objtId == -1: isAsset = True if (refType == 'environment'): isAsset = False db_proxy.addRequirement(req,refName,isAsset) else: db_proxy.updateRequirement(req) reqCount += 1 cmCount = 0 for cmParameters in cmParameterSet: objtId = db_proxy.existingObject(cmParameters.name(),'countermeasure') if objtId == -1: db_proxy.addCountermeasure(cmParameters) else: cmParameters.setId(objtId) db_proxy.updateCountermeasure(cmParameters) cmCount += 1 msgStr = 'Imported ' + str(dpCount) + ' domain properties, ' + str(goalCount) + ' goals, ' + str(obsCount) + ' obstacles, ' + str(reqCount) + ' requirements, and ' + str(cmCount) + ' countermeasures.' return msgStr
def validate_proxy(session, id, request=None, conf=None): """ Validates that the DB proxy object is properly set up :param session: The session object of the request :param id: The session ID provided by the user :param conf: A dictionary containing configuration settings for direct authenrication :return: The MySQLDatabaseProxy object associated to the session :rtype : MySQLDatabaseProxy :raise CairisHTTPError: Raises a CairisHTTPError when the database could not be properly set up """ if session is not None: session_id = session.get('session_id', -1) else: session_id = None if conf is not None: if isinstance(conf, dict): try: db_proxy = MySQLDatabaseProxy(host=conf['dbhost'], port=conf['dbport'], user=conf['dbuser'], passwd=conf['dbpasswd'], db=conf['dbname']) if db_proxy is not None: return db_proxy else: raise CairisHTTPError( status_code=httplib.CONFLICT, message='The database connection could not be created.' ) except DatabaseProxyException: raise CairisHTTPError( status_code=httplib.BAD_REQUEST, message='The provided settings are invalid and cannot be used to create a database connection' ) if not (session_id is None and id is None): if id is None: id = session_id b = Borg() db_proxy = b.get_dbproxy(id) if db_proxy is None: raise CairisHTTPError( status_code=httplib.CONFLICT, message='The database connection could not be created.' ) elif isinstance(db_proxy, MySQLDatabaseProxy): return db_proxy else: raise CairisHTTPError( status_code=httplib.CONFLICT, message='The database connection was not properly set up. Please try to reset the connection.' ) else: raise CairisHTTPError( status_code=httplib.BAD_REQUEST, message='The session is neither started or no session ID is provided with the request.' )
def importAttackTreeString(buf,session_id = None): try: b = Borg() db_proxy = b.get_dbproxy(session_id) modelTxt = '' modelTxt += importRequirementsString(buf,session_id) + ' ' modelTxt += importAssociationsString(buf,session_id) + ' ' return modelTxt except xml.sax.SAXException as e: raise ARMException("Error parsing" + importFile + ": " + e.getMessage())
def exportRedmineRequirements(outFileName, session_id=None): b = Borg() reqs = b.get_dbproxy(session_id).getRedmineRequirements() envNames = list(reqs.keys()) envNames.sort() outputDir = os.environ['OUTPUT_DIR'] outputBuf = '' for envName in envNames: envReqs = reqs[envName] envCode = envReqs[0][5] buf = 'h1. ' + envName + ' requirements\n\n' cmFile = envCode + '_conceptMap' buildConceptMap(b.get_dbproxy(session_id), envName, cmFile) buf += '!' + cmFile + '!\n\n' buf += '|*Short Name*|*Comments*|*Scenarios*|*Use Cases*|*Backlog*|\n' for envReq in envReqs: reqName = envReq[0] reqOrig = envReq[1] reqPri = envReq[2] reqComments = envReq[3] reqDesc = envReq[4] reqScs = envReq[6] reqUcs = envReq[7] reqBis = envReq[8] buf += '|/2.*' + reqName + '*\n' + reqPri + ', ' + reqOrig + '|\\4.' + reqDesc + '|\n|' + reqComments + '|' + listToString( reqScs) + '|' + listToString(reqUcs) + '|' + listToString( reqBis) + '|\n' envFile = open(outputDir + '/' + envCode + '-requirements.txt', 'w,') envFile.write(buf) envFile.close() outputBuf += buf + '\n' outputFile = open(outFileName, 'w') outputFile.write(outputBuf) outputFile.close() return 'Exported requirements'
def __init__(self, session_id=None): b = Borg() self.dbProxy = b.get_dbproxy(session_id) self.configDir = b.configDir self.theManualAssociations = set([]) self.theGoalAssociations = [] self.theDependencyAssociations = [] self.resetManualAssociationAttributes() self.resetGoalAssociationAttributes() self.resetDependencyAssociationAttributes()
def importSecurityPatterns(taps, spps, vts, session_id=None): noOfTaps = len(taps) noOfSpps = len(spps) b = Borg() db_proxy = b.get_dbproxy(session_id) db_proxy.addSecurityPatterns(vts, taps, spps) msgStr = 'Imported ' + str(noOfTaps) + ' template assets and ' + str( noOfSpps) + ' security patterns' return msgStr
def extractPackage(session_id = None, ignoreValidityCheck = 0): buf = io.BytesIO() zf = zipfile.ZipFile(buf,'w',zipfile.ZIP_DEFLATED) zf.writestr('model.xml',extractModel(session_id,ignoreValidityCheck)) b = Borg() apNames = b.get_dbproxy(session_id).getDimensionNames('component_view','') for apName in apNames: apBuf = b.get_dbproxy(session_id).architecturalPatternToXml(apName) zf.writestr(apName + '.xml',apBuf) spNames = b.get_dbproxy(session_id).getDimensionNames('securitypattern','') if (len(spNames) > 0): spBuf = b.get_dbproxy(session_id).securityPatternsToXml() zf.writestr('security_patterns.xml',spBuf) for imgName,imgContent in b.get_dbproxy(session_id).getImages(): zf.writestr(imgName,b64decode(imgContent)) zf.close() return buf.getvalue()
def importDataflows(dataflows, session_id): b = Borg() db_proxy = b.get_dbproxy(session_id) for df in dataflows: db_proxy.addDataFlow(df) noOfDataflows = len(dataflows) msgStr = 'Imported ' + str(noOfDataflows) + ' dataflow' if (noOfDataflows != 1): msgStr += 's' msgStr += '. ' return msgStr
def addDefaultUseCase(objtName,envName,session_id): b = Borg() dbProxy = b.get_dbproxy(session_id) roleId = dbProxy.existingObject('Unknown','role') if (roleId == -1): roleId = dbProxy.addRole(RoleParameters('Unknown','Stakeholder','UNKNOWN','Unknown role',None)) s = Steps() s.append(Step('Undefined')) envProps = [UseCaseEnvironmentProperties(envName,'To be defined',s,'To be defined')] p = UseCaseParameters(objtName,'Unknown','TBC',['Unknown'],'To be defined',[],envProps) return dbProxy.addUseCase(p)
def exportRedmineRequirements(outFileName,session_id = None): b = Borg() reqs = b.get_dbproxy(session_id).getRedmineRequirements() envNames = reqs.keys() envNames.sort() outputDir = os.environ['OUTPUT_DIR'] outputBuf = '' for envName in envNames: envReqs = reqs[envName] envCode = envReqs[0][5] buf = 'h1. ' + envName + ' requirements\n\n' cmFile = envCode + '_conceptMap' buildConceptMap(b.get_dbproxy(session_id),envName,cmFile) buf +='!' + cmFile + '!\n\n' buf += '|*Short Name*|*Comments*|*Scenarios*|*Use Cases*|*Backlog*|\n' for envReq in envReqs: reqName = envReq[0] reqOrig = envReq[1] reqPri = envReq[2] reqComments = envReq[3] reqDesc = envReq[4] reqScs = envReq[6] reqUcs = envReq[7] reqBis = envReq[8] buf += '|/2.*' + reqName + '*\n' + reqPri + ', ' + reqOrig + '|\\4.' + reqDesc + '|\n|' + reqComments + '|' + listToString(reqScs) + '|' + listToString(reqUcs) + '|' + listToString(reqBis) + '|\n' envFile = open(outputDir + '/' + envCode + '-requirements.txt','w,') envFile.write(buf) envFile.close() outputBuf += buf + '\n' outputFile = open(outFileName,'w') outputFile.write(outputBuf) outputFile.close() return 'Exported requirements'
def importDomainValues(tvValues, rvValues, cvValues, svValues, lvValues, capValues, motValues, session_id): noOfTvs = len(tvValues) noOfRvs = len(rvValues) noOfCvs = len(cvValues) noOfSvs = len(svValues) noOfLvs = len(lvValues) noOfCapVs = len(capValues) noOfMotVs = len(motValues) b = Borg() db_proxy = b.get_dbproxy(session_id) tId = 0 if (noOfTvs > 0): for tvp in tvValues: tvp.setId(tId) db_proxy.updateValueType(tvp) tId += 1 tId = 1 if (noOfRvs > 0): for rvp in rvValues: rvp.setId(tId) db_proxy.updateValueType(rvp) tId += 1 tId = 0 if (noOfCvs > 0): for cvp in cvValues: cvp.setId(tId) db_proxy.updateValueType(cvp) tId += 1 tId = 0 if (noOfSvs > 0): for svp in svValues: svp.setId(tId) db_proxy.updateValueType(svp) tId += 1 tId = 0 if (noOfLvs > 0): for lvp in lvValues: lvp.setId(tId) db_proxy.updateValueType(lvp) tId += 1 if (noOfCapVs > 0): for capvp in capValues: db_proxy.addValueType(capvp) if (noOfMotVs > 0): for motvp in motValues: db_proxy.addValueType(motvp) msgStr = 'Imported domain values' return msgStr
def exportRedmineScenarios(outFile,session_id = None): b = Borg() rmScenarios = b.get_dbproxy(session_id).redmineScenarios() buf = '' noScenarios = 0 for sName,sEnv,sTxt in rmScenarios: buf += sTxt + '\n' noScenarios += 1 sFile = open(outFile,'w') sFile.write(buf) sFile.close() return 'Exported ' + str(noScenarios) + ' scenarios.'
def importSecurityPatterns(taps,spps,vts,session_id=None): noOfTaps = len(taps) noOfSpps = len(spps) b = Borg() db_proxy = b.get_dbproxy(session_id) for tap in taps: if (db_proxy.nameExists(tap.name(),'asset')): raise ARMException("Cannot import template asset with name " + tap.name() + " as asset with same name already exists.") db_proxy.addSecurityPatterns(vts,taps,spps) msgStr = 'Imported ' + str(noOfTaps) + ' template assets and ' + str(noOfSpps) + ' security patterns' return msgStr
def importTrustBoundaries(tbs, session_id): b = Borg() db_proxy = b.get_dbproxy(session_id) for tb in tbs: db_proxy.addTrustBoundary(tb) noOfTrustBoundaries = len(tbs) msgStr = 'Imported ' + str(noOfTrustBoundaries) + ' trust boundar' if (noOfTrustBoundaries != 1): msgStr += 'ies' else: msgStr += 'y' msgStr += '.' return msgStr
def importDomainValues(tvValues,rvValues,cvValues,svValues,lvValues,capValues,motValues,session_id): noOfTvs = len(tvValues) noOfRvs = len(rvValues) noOfCvs = len(cvValues) noOfSvs = len(svValues) noOfLvs = len(lvValues) noOfCapVs = len(capValues) noOfMotVs = len(motValues) b = Borg() db_proxy = b.get_dbproxy(session_id) tId = 0 if (noOfTvs > 0): for tvp in tvValues: tvp.setId(tId) db_proxy.updateValueType(tvp) tId += 1 tId =1 if (noOfRvs > 0): for rvp in rvValues: rvp.setId(tId) db_proxy.updateValueType(rvp) tId += 1 tId = 0 if (noOfCvs > 0): for cvp in cvValues: cvp.setId(tId) db_proxy.updateValueType(cvp) tId += 1 tId = 0 if (noOfSvs > 0): for svp in svValues: svp.setId(tId) db_proxy.updateValueType(svp) tId += 1 tId = 0 if (noOfLvs > 0): for lvp in lvValues: lvp.setId(tId) db_proxy.updateValueType(lvp) tId += 1 if (noOfCapVs > 0): for capvp in capValues: db_proxy.addValueType(capvp) if (noOfMotVs > 0): for motvp in motValues: db_proxy.addValueType(motvp) msgStr = 'Imported domain values' return msgStr
def importProcesses(docs,codes,memos,quotations,codeNetworks,processes,ics,intentions,contributions,session_id): noOfDocs = len(docs) noOfCodes = len(codes) noOfMemos = len(memos) noOfQuotations = len(quotations) noOfCNs = len(codeNetworks) noOfProcs = len(processes) noOfICs = len(ics) noOfIntentions = len(intentions) noOfContributions = len(contributions) b = Borg() db_proxy = b.get_dbproxy(session_id) for dp in docs: db_proxy.addInternalDocument(dp) for cp in codes: db_proxy.addCode(cp) for mp in memos: db_proxy.addMemo(mp) for q in quotations: db_proxy.addQuotation(q) # Necessary because adding document memos currently overwrites the existing memo text for mp in memos: db_proxy.updateMemo(mp) for cn in codeNetworks: personaName = cn[0] rtName = cn[1] fromCode = cn[2] toCode = cn[3] db_proxy.addCodeRelationship(personaName,fromCode,toCode,rtName) for p in processes: db_proxy.addImpliedProcess(p) for ic in ics: db_proxy.addImpliedCharacteristic(ic) for intention in intentions: db_proxy.addIntention(intention) for contribution in contributions: db_proxy.addContribution(contribution) msgStr = 'Imported ' + str(noOfDocs) + ' internal documents, ' + str(noOfCodes) + ' codes, ' + str(noOfMemos) + ' memos, ' + str(noOfQuotations) + ' quotations, ' + str(noOfCNs) + ' code relationships, ' + str(noOfProcs) + ' implied processes, ' + str(noOfIntentions) + ' intentions, and ' + str(noOfContributions) + ' contributions.' return msgStr
def exportModel(outFile=None, session_id=None): b = Borg() xmlBuf = '<?xml version="1.0"?>\n<!DOCTYPE cairis_model PUBLIC "-//CAIRIS//DTD MODEL 1.0//EN" "http://cairis.org/dtd/cairis_model.dtd">\n<cairis_model>\n\n\n' xmlBuf += b.get_dbproxy(session_id).tvTypesToXml(0)[0] + '\n\n' xmlBuf += b.get_dbproxy(session_id).domainValuesToXml(0)[0] + '\n\n' xmlBuf += b.get_dbproxy(session_id).projectToXml(0) + '\n\n' xmlBuf += b.get_dbproxy(session_id).riskAnalysisToXml(0)[0] + '\n\n' xmlBuf += b.get_dbproxy(session_id).usabilityToXml(0)[0] + '\n\n' xmlBuf += b.get_dbproxy(session_id).goalsToXml(0)[0] + '\n\n' xmlBuf += b.get_dbproxy(session_id).associationsToXml(0)[0] + '\n\n' xmlBuf += b.get_dbproxy(session_id).misusabilityToXml(0)[0] + '\n\n' xmlBuf += b.get_dbproxy(session_id).dataflowsToXml(0)[0] + '\n\n' xmlBuf += b.get_dbproxy( session_id).locationsToXml()[0] + '\n\n</cairis_model>' if outFile == None: return xmlBuf else: f = codecs.open(outFile, 'w', 'utf-8') f.write(xmlBuf) f.close() return 'Exported model'
def __init__(self,session_id = None): b = Borg() self.dbProxy = b.get_dbproxy(session_id) self.configDir = b.configDir self.theDomainProperties = [] self.theGoals = [] self.theObstacles = [] self.theRequirements = [] self.theCountermeasures = [] self.resetDomainPropertyAttributes() self.resetGoalAttributes() self.resetObstacleAttributes() self.resetRequirementAttributes() self.resetGoalAttributes() self.resetCountermeasureAttributes()
def importAssets(valueTypes,assets,session_id): b = Borg() db_proxy = b.get_dbproxy(session_id) vtCount = 0 taCount = 0 for vtParameters in valueTypes: vtId = db_proxy.existingObject(vtParameters.name(),vtParameters.type()) if vtId == -1: db_proxy.addValueType(vtParameters) vtCount += 1 for taParameters in assets: taId = db_proxy.existingObject(taParameters.name(),'template_asset') if taId == -1: db_proxy.addTemplateAsset(taParameters) taCount += 1 return 'Imported ' + str(vtCount) + ' value types, and ' + str(taCount) + ' template assets.'
def importSynopses(charSyns,refSyns,stepSyns,refConts,ucConts,session_id): b = Borg() db_proxy = b.get_dbproxy(session_id) for cs in charSyns: db_proxy.addCharacteristicSynopsis(cs) for rs in refSyns: db_proxy.addReferenceSynopsis(rs) for ucName,envName,stepNo,synName,aType,aName in stepSyns: db_proxy.addStepSynopsis(ucName,envName,stepNo,synName,aType,aName) db_proxy.conn.commit() for rc in refConts: db_proxy.addReferenceContribution(rc) for uc in ucConts: db_proxy.addUseCaseContribution(uc) msgStr = 'Imported ' + str(len(charSyns)) + ' characteristic synopses, ' + str(len(refSyns)) + ' reference synopses, ' + str(len(stepSyns)) + ' step synopses, ' + str(len(refConts)) + ' reference contributions, and ' + str(len(ucConts)) + ' use case contributions.' return msgStr
def importAssociations(maParameterSet,gaParameterSet,depParameterSet,session_id): b = Borg() db_proxy = b.get_dbproxy(session_id) maCount = 0 for tTable,fromId,toId,refType in maParameterSet: db_proxy.addTrace(tTable,fromId,toId,refType) maCount += 1 gaCount = 0 for gaParameters in gaParameterSet: db_proxy.addGoalAssociation(gaParameters) gaCount += 1 depCount = 0 for depParameters in depParameterSet: db_proxy.addDependency(depParameters) depCount += 1 msgStr = 'Imported ' + str(maCount) + ' manual associations, ' + str(gaCount) + ' goal associations, and ' + str(depCount) + ' dependency associations.' return msgStr
def importTVTypes(vulTypes,threatTypes,isOverwrite,session_id): b = Borg() db_proxy = b.get_dbproxy(session_id) noOfVts = len(vulTypes) noOfTts = len(threatTypes) if (noOfVts > 0): if (isOverwrite): db_proxy.deleteVulnerabilityType(-1) for vt in vulTypes: db_proxy.addValueType(vt) if (noOfTts > 0): if (isOverwrite): db_proxy.deleteThreatType(-1) for tt in threatTypes: db_proxy.addValueType(tt) msgStr = 'Imported ' + str(noOfVts) + ' vulnerability types and ' + str(noOfTts) + ' threat types.' return msgStr
def importModelFile(importFile,isOverwrite = 1,session_id = None): try: b = Borg() db_proxy = b.get_dbproxy(session_id) modelTxt = '' if isOverwrite == 1: db_proxy.clearDatabase(session_id) modelTxt += importTVTypeFile(importFile,isOverwrite,session_id = session_id) + ' ' modelTxt += importDomainValuesFile(importFile,session_id) + ' ' modelTxt += importProjectFile(importFile,session_id) + ' ' modelTxt += importRiskAnalysisFile(importFile,session_id) + ' ' modelTxt += importUsabilityFile(importFile,session_id) + ' ' modelTxt += importRequirementsFile(importFile,session_id) + ' ' modelTxt += importAssociationsFile(importFile,session_id) + ' ' modelTxt += importSynopsesFile(importFile,session_id) return modelTxt except xml.sax.SAXException, e: raise ARMException("Error parsing" + importFile + ": " + e.getMessage())
def exportModel(outFile = None,session_id = None): b = Borg() xmlBuf = '<?xml version="1.0"?>\n<!DOCTYPE cairis_model PUBLIC "-//CAIRIS//DTD MODEL 1.0//EN" "http://cairis.org/dtd/cairis_model.dtd">\n<cairis_model>\n\n\n' xmlBuf+= b.get_dbproxy(session_id).tvTypesToXml(0)[0] + '\n\n' xmlBuf+= b.get_dbproxy(session_id).domainValuesToXml(0)[0] + '\n\n' xmlBuf+= b.get_dbproxy(session_id).projectToXml(0) + '\n\n' xmlBuf+= b.get_dbproxy(session_id).riskAnalysisToXml(0)[0] + '\n\n' xmlBuf+= b.get_dbproxy(session_id).usabilityToXml(0)[0] + '\n\n' xmlBuf+= b.get_dbproxy(session_id).goalsToXml(0)[0] + '\n\n' xmlBuf+= b.get_dbproxy(session_id).associationsToXml(0)[0] + '\n\n</cairis_model>' if outFile == None: return xmlBuf else: f = open(outFile,'w') f.write(xmlBuf) f.close() return 'Exported model'
def importProjectData(pSettings,envParameterSet,session_id): b = Borg() db_proxy = b.get_dbproxy(session_id) if (pSettings != None): db_proxy.updateSettings(pSettings[0],pSettings[1],pSettings[2],pSettings[3],pSettings[4],pSettings[5],pSettings[6],pSettings[7]) envCount = 0 for envParameters in envParameterSet: objtId = db_proxy.existingObject(envParameters.name(),'environment') if objtId == -1: db_proxy.addEnvironment(envParameters) else: envParameters.setId(objtId) db_proxy.updateEnvironment(envParameters) envCount += 1 msgText = 'Imported ' + str(envCount) + ' environments' if (pSettings != None): msgText += ', and project settings' msgText += '.' return msgText
def importDirectoryFile(importFile,isOverwrite=1,session_id = None): try: parser = xml.sax.make_parser() handler = DirectoryContentHandler() parser.setContentHandler(handler) parser.setEntityResolver(handler) parser.parse(importFile) vulDir,threatDir = handler.directories() vdSize = len(vulDir) tdSize = len(threatDir) b = Borg() db_proxy = b.get_dbproxy(session_id) if (vdSize > 0): db_proxy.addVulnerabilityDirectory(vulDir,isOverwrite) if (tdSize > 0): db_proxy.addThreatDirectory(threatDir,isOverwrite) msgStr = 'Imported ' + str(vdSize) + ' template vulnerabilities and ' + str(tdSize) + ' template threats.' return msgStr except xml.sax.SAXException, e: raise ARMException("Error parsing" + importFile + ": " + e.getMessage())
def __init__(self,session_id = None): self.thePatternName = '' self.theLikelihood = '' self.theSeverity = '' self.theObstacles = [] self.theObstacleAssociations = [] self.inIntent = 0 self.theIntent = '' self.theMotivations = [] self.theEnvironment = '' self.theAttack = '' self.theExploit = '' self.theAttackObstacle = '' self.theExploitObstacle = '' self.theParticipants = [] self.theTargets = [] self.theExploits = [] self.inConsequences = 0 self.theConsequences = '' self.inImplementation = 0 self.theImplementation = '' self.inKnownUses = 0 self.theKnownUses = '' self.inRelatedPatterns = 0 self.theRelatedPatterns = '' b = Borg() self.configDir = b.configDir self.dbProxy = b.get_dbproxy(session_id) self.theObstacleParameters = [] self.theObstacleAssociationParameters = [] self.theAssetParameters = [] self.theAttackerParameters = [] self.theVulnerabilityParameters = None self.theThreatParameters = None self.theRiskParameters = None self.resetObstacleElements() self.resetObstacleAssociationElements() self.resetMotivationElements() self.resetParticipantElements()
def importSecurityPatterns(importFile,session_id=None): try: parser = xml.sax.make_parser() handler = SecurityPatternContentHandler() parser.setContentHandler(handler) parser.setEntityResolver(handler) parser.parse(importFile) taps = handler.assets() spps = handler.patterns() vts = handler.metricTypes() noOfTaps = len(taps) noOfSpps = len(spps) b = Borg() db_proxy = b.get_dbproxy(session_id) msgStr = 'No patterns imported' if (noOfTaps > 0): tapId = 0; db_proxy.deleteSecurityPattern(-1) db_proxy.deleteTemplateAsset(-1) for vt in vts: db_proxy.addValueType(vt) for tap in taps: tap.setId(tapId) db_proxy.addTemplateAsset(tap) tapId += 1 if (noOfSpps > 0): spId = 0; db_proxy.deleteSecurityPattern(-1) for sp in spps: sp.setId(spId) db_proxy.addSecurityPattern(sp) spId += 1 msgStr = 'Imported ' + str(noOfTaps) + ' template assets and ' + str(noOfSpps) + ' security patterns' return msgStr except xml.sax.SAXException, e: raise ARMException("Error parsing" + importFile + ": " + e.getMessage())
def exportRedmineUseCases(outFile): b = Borg() rmUseCases = b.get_dbproxy(session_id).redmineUseCases() buf = '' noUseCases = 0 ucDict = {'ID':[],'DA':[],'NM':[],'PS':[],'NC':[],'LC':[],'CAP':[],'TMS':[]} for ucName,ucShortCode,ucAuthor,ucTxt in rmUseCases: ucCat = re.sub('[0-9]','',ucShortCode) ucDict[ucCat].append( (ucName,ucShortCode,ucAuthor,ucTxt)) fnlCats = ucDict.keys() fnlCats.sort() for fnlCat in fnlCats: for ucName,ucShortCode,ucAuthor,ucTxt in ucDict[fnlCat]: buf += ucTxt + '\n' noUseCases += 1 ucFile = open(outFile,'w') ucFile.write(buf) ucFile.close() return 'Exported ' + str(noUseCases) + ' use cases.'
def testModelCreation(self): b = Borg() b.get_dbproxy().classModel('Psychosis') b.get_dbproxy().classModel('Psychosis','',True) b.get_dbproxy().goalModel('Psychosis') b.get_dbproxy().responsibilityModel('Psychosis') b.get_dbproxy().obstacleModel('Psychosis') b.get_dbproxy().taskModel('Psychosis') b.get_dbproxy().riskAnalysisModel('Psychosis') b.get_dbproxy().assumptionPersonaModel('Claire')
def importComponentViewData(view,session_id = None): b = Borg() db_proxy = b.get_dbproxy(session_id) db_proxy.addComponentView(view) msgStr = 'Imported architectural pattern' return msgStr
def importLocations(locations,session_id): b = Borg() db_proxy = b.get_dbproxy(session_id) db_proxy.addLocations(locations) msgStr = 'Imported ' + locations.name() return msgStr
def testModelCreation(self): b = Borg() b.get_dbproxy().classModel('Psychosis') b.get_dbproxy().classModel('Psychosis','',True) b.get_dbproxy().classModel('Psychosis','Clinical data',True) b.get_dbproxy().goalModel('Psychosis') b.get_dbproxy().goalModel('Psychosis','Process clinical data on NeuroGrid') b.get_dbproxy().responsibilityModel('Psychosis') b.get_dbproxy().responsibilityModel('Psychosis','Data Consumer') b.get_dbproxy().obstacleModel('Psychosis') b.get_dbproxy().obstacleModel('Psychosis','Unauthorised portal access') b.get_dbproxy().taskModel('Psychosis') b.get_dbproxy().taskModel('Psychosis','Upload data') b.get_dbproxy().riskAnalysisModel('Psychosis') b.get_dbproxy().riskAnalysisModel('Psychosis','risk','Unauthorised Certificate Access') b.get_dbproxy().riskObstacleModel('Unauthorised Certificate Access','Psychosis') b.get_dbproxy().assumptionPersonaModel('Claire') b.get_dbproxy().textualArgumentationModel('Claire','Activities') importModelFile(os.environ['CAIRIS_SRC'] + '/../examples/exemplars/ACME_Water/ACME_Water.xml',1,'test') importLocationsFile(os.environ['CAIRIS_SRC'] + '/../examples/exemplars/ACME_Water/PooleWWTW.xml','test') b.get_dbproxy().locationsRiskModel('PooleWWTW','Day')
def importUsability(personaParameterSet,edParameterSet,drParameterSet,crParameterSet,pcParameterSet,tcParameterSet,taskParameterSet,ucParameterSet,session_id): b = Borg() db_proxy = b.get_dbproxy(session_id) personaCount = 0 for personaParameters in personaParameterSet: objtId = db_proxy.existingObject(personaParameters.name(),'persona') if objtId == -1: db_proxy.addPersona(personaParameters) else: personaParameters.setId(objtId) db_proxy.updatePersona(personaParameters) personaCount += 1 edCount = 0 for edParameters in edParameterSet: objtId = db_proxy.existingObject(edParameters.name(),'external_document') if objtId == -1: db_proxy.addExternalDocument(edParameters) else: edParameters.setId(objtId) db_proxy.updateExternalDocument(edParameters) edCount += 1 drCount = 0 for drParameters in drParameterSet: objtId = db_proxy.existingObject(drParameters.name(),'document_reference') if objtId == -1: db_proxy.addDocumentReference(drParameters) else: drParameters.setId(objtId) db_proxy.updateDocumentReference(drParameters) drCount += 1 taskCount = 0 for taskParameters in taskParameterSet: objtId = db_proxy.existingObject(taskParameters.name(),'task') if objtId == -1: db_proxy.addTask(taskParameters) else: taskParameters.setId(objtId) db_proxy.updateTask(taskParameters) taskCount += 1 ucCount = 0 for ucParameters in ucParameterSet: objtId = db_proxy.existingObject(ucParameters.name(),'usecase') if objtId == -1: db_proxy.addUseCase(ucParameters) else: ucParameters.setId(objtId) db_proxy.updateUseCase(ucParameters) ucCount += 1 crCount = 0 for crParameters in crParameterSet: objtId = db_proxy.existingObject(crParameters.name(),'concept_reference') if objtId == -1: db_proxy.addConceptReference(crParameters) else: crParameters.setId(objtId) db_proxy.updateConceptReference(crParameters) crCount += 1 pcCount = 0 for pcParameters in pcParameterSet: db_proxy.addPersonaCharacteristic(pcParameters) pcCount += 1 tcCount = 0 for tcParameters in tcParameterSet: objtId = db_proxy.existingObject(tcParameters.task(),'task_characteristic') if objtId == -1: db_proxy.addTaskCharacteristic(tcParameters) else: tcParameters.setId(objtId) db_proxy.updateTaskCharacterisric(tcParameters) tcCount += 1 msgStr = 'Imported ' + str(personaCount) + ' personas, ' + str(edCount) + ' external documents, ' + str(drCount) + ' document references, ' + str(crCount) + ' concept references, ' + str(pcCount) + ' persona characteristics, ' + str(tcCount) + ' task characteristics, ' + str(taskCount) + ' tasks, and ' + str(ucCount) + ' use cases.' return msgStr