import java import javax.swing import com from java.util import Random class resiliencetool(com.hp.hpl.guess.ui.DockableAdapter): testSlider = JSlider() label = JLabel("Percentage of nodes to remove (5) ") label2 = JLabel("largest connected component size = ?") testButton = javax.swing.JButton("remove") testCheckBox = javax.swing.JCheckBox("intentional attack"); iteration = 0 tele = 0.05 intentional =0 sum = 0 tovisit = [] clusts = [] ordered = [] def degree_compare(self,x,y): return (y.indegree - x.indegree) def __init__(self): setSynchronous(true) try: g.nodes.visited = false except (Error),e: addNodeField("visited",Types.DOUBLE,20.0) # set up the slider limits self.testSlider.setMinimum(0) self.testSlider.setMaximum(100) # set up the slider visual properties self.testSlider.setMajorTickSpacing(50) self.testSlider.setMinorTickSpacing(10) self.testSlider.setPaintTicks(true) self.testSlider.setPaintLabels(true) self.testSlider.setValue(5) # default value self.testCheckBox.mouseReleased = self.sc self.add(self.testCheckBox) # every time the mouse is released call the "sc" event self.testSlider.mouseReleased = self.sc self.testButton.actionPerformed = self.buttonPressed g.nodes.indegree self.ordered = g.nodes self.ordered.sort(self.degree_compare) # add the label and slider to the UI self.add(self.label) self.add(self.label2) self.add(self.testSlider) self.add(self.testButton) # dock the new panel into the UI ui.dock(self) # call the event function once so that the # display matches the slider value self.sc(None) def buttonPressed(self,event): # check if user wants the whole graph clustered, or to find the community around a node self.findcomponents() def getTitle(self): return("resiliencetool") def sc(self,evt): # get the value self.pr = self.testSlider.getValue()/100.0 # hide nodes not connected to visible edges # self.calcPageRank() # set the label text self.label.setText("% nodes to remove ("+str(self.pr*100)+")") if (self.testCheckBox.isSelected() == true): self.intentional = 1 else: self.intentional = 0 self.findcomponents(); def findcomponents(self): rng = Random() for nod in g.nodes: nod.visited = 0 if (self.intentional == false): for nod in g.nodes: if (rng.nextDouble() < self.pr): nod.visible=false else: nod.visible=true else: _i = 0 _toremove = self.pr*self.ordered.__len__() for nod in self.ordered: _i = _i+1 if (_i < _toremove): nod.visible=false else: nod.visible=true self.clusts = [] for nod in g.nodes: if ((nod.visited == 0)&(nod.visible==true)): self.tovisit.append(nod) self.visit() _maxlen = 0 for _c in self.clusts: _c.color=randomColor() if (_c.__len__() > _maxlen): _maxlen = _c.__len__() self.label2.setText("size of largest component = "+str(_maxlen)) def visit(self): _clust = [] while (self.tovisit.__len__() > 0): current = self.tovisit.pop() if (current.visited == 0): current.visited = 1 _clust.append(current) for _n in current.getNeighbors(): if ((_n.visited == 0)&(_n.visible==true)): self.tovisit.append(_n); self.clusts.append(_clust) resiliencetool()