def buildNode(self,dimName,objtName): objtUrl = dimName + '#' + objtName if (dimName == 'goal'): self.theGraph.add_node(pydot.Node(objtName,shape='parallelogram',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) # soft-goal attributes self.theGraph.add_node(pydot.Node(objtName,shape='polygon',style='rounded',sides='6',distortion='-0.537997',orientation='52',skew='-0.960726',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'obstacle'): self.theGraph.add_node(pydot.Node(objtName,shape='polygon',skew='-1',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'domainproperty'): self.theGraph.add_node(pydot.Node(objtName,shape='house',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'requirement'): self.theGraph.add_node(pydot.Node(objtName,shape='parallelogram',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'countermeasure'): self.theGraph.add_node(pydot.Node(objtName,shape='hexagon',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif ((dimName == 'role') and (self.theKaosModel != 'task')): self.theGraph.add_node(pydot.Node(objtName,shape='hexagon',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif ((dimName == 'role') and (self.theKaosModel == 'task')): self.theGraph.add_node(pydot.Node(objtName,shape='ellipse',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'usecase'): self.theGraph.add_node(pydot.Node(objtName,shape='ellipse',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'task'): objt = self.dbProxy.dimensionObject(objtName,'task') if (objt.assumption() == True): objtLabel = "<<Assumption>>" + objtName else: objtLabel = objtName taskScore = self.dbProxy.taskUsabilityScore(objtName,self.theEnvironmentName) self.theGraph.add_node(pydot.Node(objtName,label=objtLabel,shape='ellipse',style='filled',color=usabilityColourCode(taskScore),fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'misusecase'): ellipseColour = 'black' if (self.theKaosModel == 'task'): riskName = objtName[8:] riskObjt = self.dbProxy.dimensionObject(riskName,'risk') riskScores = self.dbProxy.riskScore(riskObjt.threat(),riskObjt.vulnerability(),self.theEnvironmentName,riskName) highestScore = 0 for riskScore in riskScores: currentScore = riskScore[2] if (currentScore > highestScore): highestScore = currentScore ellipseColour = threatColourCode(highestScore) self.theGraph.add_node(pydot.Node(objtName,shape='ellipse',style='filled',color=ellipseColour,fontcolor='white',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'persona'): objt = self.dbProxy.dimensionObject(objtName,'persona') if (objt.assumption() == True): objtLabel = "<<Assumption>>" + objtName self.theGraph.add_node(pydot.Node(objtName,label=objtLabel,shape='circle',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) else: self.theGraph.add_node(pydot.Node(objtName,shape='circle',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'attacker'): self.theGraph.add_node(pydot.Node(objtName,shape='circle',style='filled',color='black',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'response'): self.theGraph.add_node(pydot.Node(objtName,shape='note',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'asset'): fontColour = 'black' nodeColour = 'black' if (self.theKaosModel == 'task'): fontColour = 'blue' nodeColour = 'blue' self.theGraph.add_node(pydot.Node(objtName,shape='record',fontname=self.fontName,fontsize=self.fontSize,fontcolor=fontColour,color=nodeColour,URL=objtUrl)) else: raise ARM.UnknownNodeType(dimName)
def buildNode(self,dimName,objtName): objtUrl = dimName + '#' + str(objtName) if (dimName == 'persona'): self.theGraph.add_node(pydot.Node(objtName,shape='circle',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'tag'): self.theGraph.add_node(pydot.Node(objtName,shape='note',style='filled',pencolor='black',color='yellow',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'attacker'): self.theGraph.add_node(pydot.Node(objtName,shape='circle',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'asset'): assetObjt = self.dbProxy.dimensionObject(objtName,'asset') borderColour = 'black' if (assetObjt.critical()): borderColour = 'red' self.theGraph.add_node(pydot.Node(objtName,shape='record',color=borderColour,fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'threat'): self.theGraph.add_node(pydot.Node(objtName,shape='record',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'vulnerability'): self.theGraph.add_node(pydot.Node(objtName,shape='record',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'risk'): riskObjt = self.dbProxy.dimensionObject(objtName,'risk') riskScores = self.dbProxy.riskScore(riskObjt.threat(),riskObjt.vulnerability(),self.theEnvironmentName,objtName) highestScore = 0 for riskScore in riskScores: currentScore = riskScore[2] if (currentScore > highestScore): highestScore = currentScore self.theGraph.add_node(pydot.Node(objtName,shape='diamond',style='filled',color=threatColourCode(highestScore),fontcolor=riskTextColourCode(highestScore),fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'response'): self.theGraph.add_node(pydot.Node(objtName,shape='note',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'countermeasure'): self.theGraph.add_node(pydot.Node(objtName,shape='component',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'component'): self.theGraph.add_node(pydot.Node(objtName,shape='component',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'requirement'): self.theGraph.add_node(pydot.Node(objtName,shape='circle',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'goal'): self.theGraph.add_node(pydot.Node(objtName,shape='parallelogram',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'obstacle'): self.theGraph.add_node(pydot.Node(objtName,shape='polygon',skew='-1',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'role'): self.theGraph.add_node(pydot.Node(objtName,shape='circle',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'responsibility'): self.theGraph.add_node(pydot.Node(objtName,shape='doubleoctagon',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'environment'): self.theGraph.add_node(pydot.Node(objtName,shape='doublecircle',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'domainproperty'): self.theGraph.add_node(pydot.Node(objtName,shape='house',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'inconsistency'): self.theGraph.add_node(pydot.Node(objtName,shape='polygon',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'task'): taskScore = self.dbProxy.taskUsabilityScore(objtName,self.theEnvironmentName) self.theGraph.add_node(pydot.Node(objtName,shape='ellipse',style='filled',color=usabilityColourCode(taskScore),fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'misusecase'): self.theGraph.add_node(pydot.Node(objtName,shape='ellipse',fontname=self.fontName,fontsize=self.fontSize,style='filled',color='black',fontcolor='white',URL=objtUrl)) else: raise ARM.UnknownNodeType(dimName)
def buildNode(self, dimName, objtName): objtUrl = dimName + '#' + str(objtName) if (dimName == 'persona'): self.theGraph.add_node( pydot.Node(objtName, shape='circle', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'tag'): self.theGraph.add_node( pydot.Node(objtName, shape='note', style='filled', pencolor='black', color='yellow', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'attacker'): self.theGraph.add_node( pydot.Node(objtName, shape='circle', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'asset'): assetObjt = self.dbProxy.dimensionObject(objtName, 'asset') borderColour = 'black' if (assetObjt.critical()): borderColour = 'red' self.theGraph.add_node( pydot.Node(objtName, shape='record', color=borderColour, fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'threat'): self.theGraph.add_node( pydot.Node(objtName, shape='record', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'vulnerability'): self.theGraph.add_node( pydot.Node(objtName, shape='record', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'risk'): riskObjt = self.dbProxy.dimensionObject(objtName, 'risk') riskScores = self.dbProxy.riskScore(riskObjt.threat(), riskObjt.vulnerability(), self.theEnvironmentName, objtName) highestScore = 0 for riskScore in riskScores: currentScore = riskScore[2] if (currentScore > highestScore): highestScore = currentScore self.theGraph.add_node( pydot.Node(objtName, shape='diamond', style='filled', color=threatColourCode(highestScore), fontcolor=riskTextColourCode(highestScore), fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'response'): self.theGraph.add_node( pydot.Node(objtName, shape='note', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'countermeasure'): self.theGraph.add_node( pydot.Node(objtName, shape='component', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'component'): self.theGraph.add_node( pydot.Node(objtName, shape='component', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'requirement'): self.theGraph.add_node( pydot.Node(objtName, shape='circle', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'goal'): self.theGraph.add_node( pydot.Node(objtName, shape='parallelogram', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'obstacle'): self.theGraph.add_node( pydot.Node(objtName, shape='polygon', skew='-1', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'role'): self.theGraph.add_node( pydot.Node(objtName, shape='circle', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'responsibility'): self.theGraph.add_node( pydot.Node(objtName, shape='doubleoctagon', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'environment'): self.theGraph.add_node( pydot.Node(objtName, shape='doublecircle', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'domainproperty'): self.theGraph.add_node( pydot.Node(objtName, shape='house', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'inconsistency'): self.theGraph.add_node( pydot.Node(objtName, shape='polygon', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'task'): taskScore = self.dbProxy.taskUsabilityScore( objtName, self.theEnvironmentName) self.theGraph.add_node( pydot.Node(objtName, shape='ellipse', style='filled', color=usabilityColourCode(taskScore), fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'misusecase'): self.theGraph.add_node( pydot.Node(objtName, shape='ellipse', fontname=self.fontName, fontsize=self.fontSize, style='filled', color='black', fontcolor='white', URL=objtUrl)) else: raise ARM.UnknownNodeType(dimName)
def buildNode(self, dimName, objtName): objtUrl = dimName + '#' + objtName if (dimName == 'goal'): self.theGraph.add_node( pydot.Node(objtName, shape='parallelogram', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) # soft-goal attributes self.theGraph.add_node(pydot.Node(objtName,shape='polygon',style='rounded',sides='6',distortion='-0.537997',orientation='52',skew='-0.960726',fontname=self.fontName,fontsize=self.fontSize,URL=objtUrl)) elif (dimName == 'obstacle'): obsId = self.dbProxy.getDimensionId(objtName, 'obstacle') envId = self.dbProxy.getDimensionId(self.theEnvironmentName, 'environment') self.theGraph.add_node( pydot.Node(objtName, shape='polygon', skew='-0.4', style='filled', pencolor='black', colorscheme='ylorrd9', fillcolor=obstacleColourCode( self.dbProxy.obstacleProbability(obsId, envId)), fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'domainproperty'): self.theGraph.add_node( pydot.Node(objtName, shape='house', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'requirement'): self.theGraph.add_node( pydot.Node(objtName, shape='parallelogram', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'countermeasure'): self.theGraph.add_node( pydot.Node(objtName, shape='hexagon', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif ((dimName == 'role') and (self.theKaosModel != 'task')): self.theGraph.add_node( pydot.Node(objtName, shape='hexagon', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif ((dimName == 'role') and (self.theKaosModel == 'task')): self.theGraph.add_node( pydot.Node(objtName, shape='ellipse', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'usecase'): self.theGraph.add_node( pydot.Node(objtName, shape='ellipse', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'task'): objt = self.dbProxy.dimensionObject(objtName, 'task') if (objt.assumption() == True): objtLabel = "<<Assumption>>" + objtName else: objtLabel = objtName taskScore = self.dbProxy.taskUsabilityScore( objtName, self.theEnvironmentName) self.theGraph.add_node( pydot.Node(objtName, label=objtLabel, shape='ellipse', style='filled', color=usabilityColourCode(taskScore), fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'misusecase'): ellipseColour = 'black' if (self.theKaosModel == 'task'): riskName = objtName[8:] riskObjt = self.dbProxy.dimensionObject(riskName, 'risk') riskScores = self.dbProxy.riskScore(riskObjt.threat(), riskObjt.vulnerability(), self.theEnvironmentName, riskName) highestScore = 0 for riskScore in riskScores: currentScore = riskScore[2] if (currentScore > highestScore): highestScore = currentScore ellipseColour = threatColourCode(highestScore) self.theGraph.add_node( pydot.Node(objtName, shape='ellipse', style='filled', color=ellipseColour, fontcolor='white', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'persona'): objt = self.dbProxy.dimensionObject(objtName, 'persona') if (objt.assumption() == True): objtLabel = "<<Assumption>>" + objtName self.theGraph.add_node( pydot.Node(objtName, label=objtLabel, shape='circle', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) else: self.theGraph.add_node( pydot.Node(objtName, shape='circle', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'attacker'): self.theGraph.add_node( pydot.Node(objtName, shape='circle', style='filled', color='black', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'response'): self.theGraph.add_node( pydot.Node(objtName, shape='note', fontname=self.fontName, fontsize=self.fontSize, URL=objtUrl)) elif (dimName == 'asset'): fontColour = 'black' nodeColour = 'black' if (self.theKaosModel == 'task'): fontColour = 'blue' nodeColour = 'blue' self.theGraph.add_node( pydot.Node(objtName, shape='record', fontname=self.fontName, fontsize=self.fontSize, fontcolor=fontColour, color=nodeColour, URL=objtUrl)) else: raise ARM.UnknownNodeType(dimName)