class SCL_Long_TuneUp_BPM_Offsets_Controller:
	def __init__(self,scl_long_tuneup_controller):
		#--- scl_long_tuneup_controller the parent document for all SCL tune up controllers
		self.scl_long_tuneup_controller = 	scl_long_tuneup_controller	
		self.main_panel = JPanel(BorderLayout())
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()			
		#------top panels = offsets analysis ----------------------------
		top_panel = JPanel(BorderLayout())
		self.bpms_offsets_from_ccl4_panel = BPMs_Offsets_from_CCL4_Panel(self.scl_long_tuneup_controller)
		self.bpms_offsets_from_hebt1_panel = BPMs_Offsets_from_HEBT1_Panel(self.scl_long_tuneup_controller)
		self.bpms_offsets_from_ext_file_panel = BPMs_Offsets_from_ExtFile_Panel(self.scl_long_tuneup_controller)
		top_panel0 = JPanel(BorderLayout())
		top_panel0.add(self.bpms_offsets_from_ccl4_panel,BorderLayout.NORTH)
		top_panel0.add(self.bpms_offsets_from_hebt1_panel,BorderLayout.SOUTH)
		top_panel1 = JPanel(BorderLayout())
		top_panel1.add(top_panel0,BorderLayout.NORTH)
		top_panel1.add(self.bpms_offsets_from_ext_file_panel,BorderLayout.SOUTH)
		top_panel.add(top_panel1,BorderLayout.NORTH)
		#--------center panel = table------------
		center_panel = JPanel(BorderLayout())		
		self.bpm_offsets_table_model = PhaseOffsets_BPMs_Table_Model(self.scl_long_tuneup_controller)
		self.bpm_offsets_table = JTable(self.bpm_offsets_table_model)
		self.bpm_offsets_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION)
		self.bpm_offsets_table.setFillsViewportHeight(true)	
		scrl_panel = JScrollPane(self.bpm_offsets_table)
		scrl_panel.setBorder(etched_border)
		center_panel.add(scrl_panel,BorderLayout.CENTER)
		#-------- bottom panel = post analysis ---------------
		bottom_panel = JPanel(BorderLayout())
		self.set_bpms_as_bad_panel = Set_BPMs_as_Bad_Panel(self.scl_long_tuneup_controller)
		bottom_panel.add(self.set_bpms_as_bad_panel,BorderLayout.SOUTH)
		#--------------------------------------------------
		self.main_panel.add(top_panel,BorderLayout.NORTH)
		self.main_panel.add(center_panel,BorderLayout.CENTER)
		self.main_panel.add(bottom_panel,BorderLayout.SOUTH)		
		
	def getMainPanel(self):
		return self.main_panel
		
	def setFinalOffsets(self):
		ccl4_button = self.set_bpms_as_bad_panel.ccl4_button
		ccl4_final = ccl4_button.isSelected()
		bpm_wrappers = self.scl_long_tuneup_controller.bpm_wrappers
		for bpm_wrapper in bpm_wrappers:
			if(bpm_wrapper.isGood):
				if(ccl4_final):
					bpm_wrapper.final_phase_offset.phaseOffset_avg = bpm_wrapper.left_phase_offset.phaseOffset_avg
					bpm_wrapper.final_phase_offset.phaseOffset_err = bpm_wrapper.left_phase_offset.phaseOffset_err
					bpm_wrapper.final_phase_offset.isReady = bpm_wrapper.left_phase_offset.isReady 
				else:
					bpm_wrapper.final_phase_offset.phaseOffset_avg = bpm_wrapper.right_phase_offset.phaseOffset_avg
					bpm_wrapper.final_phase_offset.phaseOffset_err = bpm_wrapper.right_phase_offset.phaseOffset_err		
					bpm_wrapper.final_phase_offset.isReady = bpm_wrapper.right_phase_offset.isReady 
		self.bpm_offsets_table.getModel().fireTableDataChanged()
class SCL_Long_TuneUp_BPM_Offsets_Controller:
	def __init__(self,scl_long_tuneup_controller):
		#--- scl_long_tuneup_controller the parent document for all SCL tune up controllers
		self.scl_long_tuneup_controller = 	scl_long_tuneup_controller	
		self.main_panel = JPanel(BorderLayout())
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()			
		#------top panels = offsets analysis ----------------------------
		top_panel = JPanel(BorderLayout())
		self.bpms_offsets_from_ccl4_panel = BPMs_Offsets_from_CCL4_Panel(self.scl_long_tuneup_controller)
		self.bpms_offsets_from_hebt1_panel = BPMs_Offsets_from_HEBT1_Panel(self.scl_long_tuneup_controller)
		self.bpms_offsets_from_ext_file_panel = BPMs_Offsets_from_ExtFile_Panel(self.scl_long_tuneup_controller)
		top_panel0 = JPanel(BorderLayout())
		top_panel0.add(self.bpms_offsets_from_ccl4_panel,BorderLayout.NORTH)
		top_panel0.add(self.bpms_offsets_from_hebt1_panel,BorderLayout.SOUTH)
		top_panel1 = JPanel(BorderLayout())
		top_panel1.add(top_panel0,BorderLayout.NORTH)
		top_panel1.add(self.bpms_offsets_from_ext_file_panel,BorderLayout.SOUTH)
		top_panel.add(top_panel1,BorderLayout.NORTH)
		#--------center panel = table------------
		center_panel = JPanel(BorderLayout())		
		self.bpm_offsets_table_model = PhaseOffsets_BPMs_Table_Model(self.scl_long_tuneup_controller)
		self.bpm_offsets_table = JTable(self.bpm_offsets_table_model)
		self.bpm_offsets_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION)
		self.bpm_offsets_table.setFillsViewportHeight(true)	
		scrl_panel = JScrollPane(self.bpm_offsets_table)
		scrl_panel.setBorder(etched_border)
		center_panel.add(scrl_panel,BorderLayout.CENTER)
		#-------- bottom panel = post analysis ---------------
		bottom_panel = JPanel(BorderLayout())
		self.set_bpms_as_bad_panel = Set_BPMs_as_Bad_Panel(self.scl_long_tuneup_controller)
		bottom_panel.add(self.set_bpms_as_bad_panel,BorderLayout.SOUTH)
		#--------------------------------------------------
		self.main_panel.add(top_panel,BorderLayout.NORTH)
		self.main_panel.add(center_panel,BorderLayout.CENTER)
		self.main_panel.add(bottom_panel,BorderLayout.SOUTH)		
		
	def getMainPanel(self):
		return self.main_panel
		
	def setFinalOffsets(self):
		ccl4_button = self.set_bpms_as_bad_panel.ccl4_button
		ccl4_final = ccl4_button.isSelected()
		bpm_wrappers = self.scl_long_tuneup_controller.bpm_wrappers
		for bpm_wrapper in bpm_wrappers:
			if(bpm_wrapper.isGood):
				if(ccl4_final):
					bpm_wrapper.final_phase_offset.phaseOffset_avg = bpm_wrapper.left_phase_offset.phaseOffset_avg
					bpm_wrapper.final_phase_offset.phaseOffset_err = bpm_wrapper.left_phase_offset.phaseOffset_err
					bpm_wrapper.final_phase_offset.isReady = bpm_wrapper.left_phase_offset.isReady 
				else:
					bpm_wrapper.final_phase_offset.phaseOffset_avg = bpm_wrapper.right_phase_offset.phaseOffset_avg
					bpm_wrapper.final_phase_offset.phaseOffset_err = bpm_wrapper.right_phase_offset.phaseOffset_err		
					bpm_wrapper.final_phase_offset.isReady = bpm_wrapper.right_phase_offset.isReady 
		self.bpm_offsets_table.getModel().fireTableDataChanged()
class SCL_Long_TuneUp_Rescale_Controller:
	def __init__(self,scl_long_tuneup_controller):
		#--- scl_long_tuneup_controller the parent document for all SCL tune up controllers
		self.scl_long_tuneup_controller = 	scl_long_tuneup_controller
		self.main_panel = JTabbedPane()
		self.scl_long_tuneup_operations_rescale_controller = SCL_Long_TuneUp_Operations_Rescale_Controller(scl_long_tuneup_controller)
		self.operations_panel = self.scl_long_tuneup_operations_rescale_controller.getMainPanel()
		self.expert_panel = JPanel(BorderLayout())
		self.main_panel.add("Operations Re-scale Panel",self.operations_panel)
		self.main_panel.add("Expert Re-scale Panel",self.expert_panel)
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()			
		#------top params panel-----------------------
		top_panel = JPanel(BorderLayout())
		self.bpms_phase_shift_panel = BPMs_Phase_Shift_Panel(self.scl_long_tuneup_controller)
		self.init_amp_phases_panel = Init_New_Amps_Phases_Panel(self.scl_long_tuneup_controller)
		self.new_amp_phases_to_epics_panel = NEW_Amp_and_Phases_to_EPICS_Panel(self.scl_long_tuneup_controller)
		top_panel.add(self.bpms_phase_shift_panel,BorderLayout.NORTH)
		top_panel.add(self.init_amp_phases_panel,BorderLayout.CENTER)
		top_panel.add(self.new_amp_phases_to_epics_panel,BorderLayout.SOUTH)
		#------cavities table panel --------
		cavs_rescale_panel = JPanel(BorderLayout())
		txt = "Cavities' Prameters. New Amp and Avg. Gap Phases can be changed manually."
		rescale_table_border = BorderFactory.createTitledBorder(etched_border,txt)
		cavs_rescale_panel.setBorder(rescale_table_border)		
		self.cavs_rescale_table = JTable(Cavs_Rescale_Table_Model(self.scl_long_tuneup_controller))
		self.cavs_rescale_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION)
		self.cavs_rescale_table.setFillsViewportHeight(true)
		self.cavs_rescale_table.getSelectionModel().addListSelectionListener(Cavs_Table_Selection_Listener(self.scl_long_tuneup_controller))		
		scrl_panel0 = JScrollPane(self.cavs_rescale_table)			
		cavs_rescale_panel.add(scrl_panel0,BorderLayout.CENTER)
		center_panel = JPanel(BorderLayout())
		center_panel.add(cavs_rescale_panel,BorderLayout.CENTER)
		#-------- post-rescale actions panel
		bottom_panel = JPanel(BorderLayout())
		#bottom_panel.add(self.post_rescale_panel,BorderLayout.WEST)
		#--------------------------------------------------
		self.expert_panel.add(top_panel,BorderLayout.NORTH)
		self.expert_panel.add(center_panel,BorderLayout.CENTER)
		self.expert_panel.add(bottom_panel,BorderLayout.SOUTH)
		#----- model for tracking 	
		self.scl_tracker_model = SCL_RfGaps_Fitter_Tracker_Model(self.scl_long_tuneup_controller)
		
	def getMainPanel(self):
		return self.main_panel
		
	def updateTables(self):
		self.cavs_rescale_table.getModel().fireTableDataChanged()
class SCL_Long_TuneUp_Rescale_Controller:
	def __init__(self,scl_long_tuneup_controller):
		#--- scl_long_tuneup_controller the parent document for all SCL tune up controllers
		self.scl_long_tuneup_controller = 	scl_long_tuneup_controller	
		self.main_panel = JPanel(BorderLayout())
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()			
		#------top params panel-----------------------
		top_panel = JPanel(BorderLayout())
		self.bpms_phase_shift_panel = BPMs_Phase_Shift_Panel(self.scl_long_tuneup_controller)
		self.init_amp_phases_panel = Init_New_Amps_Phases_Panel(self.scl_long_tuneup_controller)
		self.new_amp_phases_to_epics_panel = NEW_Amp_and_Phases_to_EPICS_Panel(self.scl_long_tuneup_controller)
		top_panel.add(self.bpms_phase_shift_panel,BorderLayout.NORTH)
		top_panel.add(self.init_amp_phases_panel,BorderLayout.CENTER)
		top_panel.add(self.new_amp_phases_to_epics_panel,BorderLayout.SOUTH)
		#------cavities table panel --------
		cavs_rescale_panel = JPanel(BorderLayout())
		txt = "Cavities' Prameters. New Amp and Avg. Gap Phases can be changed manually."
		rescale_table_border = BorderFactory.createTitledBorder(etched_border,txt)
		cavs_rescale_panel.setBorder(rescale_table_border)		
		self.cavs_rescale_table = JTable(Cavs_Rescale_Table_Model(self.scl_long_tuneup_controller))
		self.cavs_rescale_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION)
		self.cavs_rescale_table.setFillsViewportHeight(true)
		self.cavs_rescale_table.getSelectionModel().addListSelectionListener(Cavs_Table_Selection_Listener(self.scl_long_tuneup_controller))		
		scrl_panel0 = JScrollPane(self.cavs_rescale_table)			
		cavs_rescale_panel.add(scrl_panel0,BorderLayout.CENTER)
		center_panel = JPanel(BorderLayout())
		center_panel.add(cavs_rescale_panel,BorderLayout.CENTER)
		#-------- post-rescale actions panel
		bottom_panel = JPanel(BorderLayout())
		#bottom_panel.add(self.post_rescale_panel,BorderLayout.WEST)
		#--------------------------------------------------
		self.main_panel.add(top_panel,BorderLayout.NORTH)
		self.main_panel.add(center_panel,BorderLayout.CENTER)
		self.main_panel.add(bottom_panel,BorderLayout.SOUTH)
		#----- model for tracking 	
		self.scl_tracker_model = SCL_RfGaps_Fitter_Tracker_Model(self.scl_long_tuneup_controller)
		
	def getMainPanel(self):
		return self.main_panel
		
	def updateTables(self):
		self.cavs_rescale_table.getModel().fireTableDataChanged()
Пример #5
0
class CTSearchTab(ITab):
    # constructor:
    def __init__(self, callbacks):
        self.callbacks = callbacks
        self._stdout = PrintWriter(callbacks.getStdout(), True)

    # Implement ITab:
    def saveResults(self, e):
        self._stdout.println("Saving results")
        fileChooser = JFileChooser()
        fileChooser.setDialogTitle("Specify the file name")
        userSelection = fileChooser.showSaveDialog(self.getUiComponent())
        if userSelection == JFileChooser.APPROVE_OPTION:
            f = fileChooser.getSelectedFile()
            fileout = open(f, 'w')
            for domain in self.domain_list:
                self._stdout.println("writing ")
                fileout.write("I AM FILE")
            fileout.close()

    def addToScope(self, whatever):
        self._stdout.println("add to scope called")
        rowCount = self.domainTable.getRowCount()
        for row in range(0, rowCount):
            if self.domainTable.getValueAt(row, CHECK_COLUMN) == True:
                domain = self.domainTable.getValueAt(row, DOMAIN_COLUMN)
                domain = domain.replace("*.", "")
                url1 = URL("https://{}/".format(domain))
                if not self.callbacks.isInScope(url1):
                    self.callbacks.includeInScoe(url1)

    def check_address(self, addrblobs):
        for addrblob in addrblobs:
            addr_arr = addrblob.split("|")
            rrow = int(addr_arr[0])
            addr = addr_arr[1]
            try:
                result = InetAddress.getByName(addr)
                yield [rrow, "Success", result]
            except UnknownHostException:
                yield [rrow, "Fail", None]

    def resolveDns(self, event):
        rowCount = self.domainTable.getRowCount()
        dns_check_list = []
        for row in range(0, rowCount):
            if self.domainTable.getValueAt(row, CHECK_COLUMN) == True:
                domain = self.domainTable.getValueAt(row, DOMAIN_COLUMN)
                domain = domain.replace("*.", "")
                domain_string = str(row) + "|" + domain
                dns_check_list.append(domain_string)

        dns_results = self.check_address(dns_check_list)
        for dns_result in dns_results:
            saved_row = dns_result[0]
            if dns_result[1] == "Success":
                self.domainTable.setValueAt("Resolved", saved_row, DNS_COLUMN)
            else:
                self.domainTable.setValueAt("No DNS Record", saved_row,
                                            DNS_COLUMN)

    def getTabCaption(self):
        return "CT Search "

    def getUiComponent(self):
        self.domainTable = JTable(ResourceTableModel())
        self.domainTable.setRowHeight(30)
        #Delete:
        #jcolumnModel = self.domainTable.getColumnModel()

        splitpane = JSplitPane(JSplitPane.VERTICAL_SPLIT)
        topPane = JPanel()
        image_label = HelpLabel(self.callbacks)
        image_label.setHelpIcon("nothing")
        image_label.addMouseListener(ScreenMouseListener(self.callbacks))
        scope_button = JButton("Add Selected Domains To Scope",
                               actionPerformed=self.addToScope)
        dns_button = JButton("Resolve DNS", actionPerformed=self.resolveDns)
        #        search_text = JTextField("")
        saveButton = JButton("Save results", actionPerformed=self.saveResults)
        topPane.add(image_label)
        topPane.add(scope_button)
        topPane.add(dns_button)
        topPane.add(saveButton)
        scrollpane = JScrollPane(self.domainTable)
        splitpane.setTopComponent(topPane)
        splitpane.setBottomComponent(scrollpane)
        return splitpane

    def setDomainList(self, domain_list):
        self.domain_list = domain_list
        tableModel = self.domainTable.getModel()
        n = 0
        dns_ans = "Not Checked"
        for d in domain_list:
            row = [str(n), d, dns_ans, True]
            tableModel.addRow(row)
            n = n + 1
Пример #6
0
class BurpExtender(IBurpExtender,ITab,IHttpListener):
    def registerExtenderCallbacks(self,callbacks):
        self.callbacks = callbacks
        self.helpers = callbacks.getHelpers()
        self.callbacks.setExtensionName("KkMultiProxy")
        self.PROXY_LIST = []

        self.jPanel = JPanel()
        boxVertical = Box.createVerticalBox()
        boxHorizontal = Box.createHorizontalBox()

        boxHorizontal.add(JButton("File",actionPerformed=self.getFile))
        self.FileText = JTextField("")
        boxHorizontal.add(self.FileText)
        boxVertical.add(boxHorizontal)

        TableHeader = ('IP','PORT')
        TableModel = DefaultTableModel(self.PROXY_LIST,TableHeader)
        self.Table = JTable(TableModel)
        boxVertical.add(self.Table)

        boxHorizontal = Box.createHorizontalBox()
        boxHorizontal.add(JButton("Add",actionPerformed=self.addIP))
        boxHorizontal.add(JButton("Delete",actionPerformed=self.deleteIP))
        boxHorizontal.add(JButton("Save",actionPerformed=self.saveIP))
        boxVertical.add(boxHorizontal)

        self.jPanel.add(boxVertical)

        self.callbacks.addSuiteTab(self)
        self.callbacks.registerHttpListener(self)
        return

    def getFile(self,button):
        dlg = JFileChooser()
        result = dlg.showOpenDialog(None)
        if result == JFileChooser.APPROVE_OPTION:
            f = dlg.getSelectedFile()
            path = f.getPath()
            self.FileText.setText(path)
            try:
                self.getIPList(path)
            except:
                exit(0)

    def addIP(self,button):
        #chooser = JFileChooser()
        #chooser.showOpenDialog(None)
        demo = DialogDemo(self.Table)

    def deleteIP(self,button):
        selectRows = len(self.Table.getSelectedRows()) 
        TableModel = self.Table.getModel()
        if selectRows:
            selectedRowIndex = self.Table.getSelectedRow()
            TableModel.removeRow(selectedRowIndex)

    def saveIP(self,button):
        TableModel = self.Table.getModel()
        rowCount = TableModel.getRowCount()
        result_str = ""
        for i in range(rowCount):
            if i == 0:
                result_str+=TableModel.getValueAt(i,0)+':'+TableModel.getValueAt(i,1)
            else:
                result_str+='|'+TableModel.getValueAt(i,0)+':'+TableModel.getValueAt(i,1)
        print result_str
        f = open(self.FileText.getText(),'w+')
        f.write(result_str)
        f.close()
    def getTabCaption(self):
        return "MultiProxy"

    def getUiComponent(self):
        return self.jPanel

    def processHttpMessage(self,toolFlag,messageIsRequest,messageInfo):
        if messageIsRequest:
            httpService = messageInfo.getHttpService()
            print httpService.getHost()

            # if the host is HOST_FROM, change it to HOST_TO
            i = randint(0,len(self.TableDatas)-1)
            messageInfo.setHttpService(self.helpers.buildHttpService(self.PROXY_LIST[i]['ip'], self.PROXY_LIST[i]['port'], httpService.getProtocol()))
            print messageInfo.getHttpService().getHost()

    def getIPList(self,path):
        f = open(path,'r+')
        content = f.read()
        f.close()
        if content:
            ip_array = content.split('|')
            for _ip in ip_array:
                ip = _ip.split(':')[0]
                port = _ip.split(':')[1]
                self.PROXY_LIST.append([ip,port])
        print self.PROXY_LIST
Пример #7
0
class BurpExtender(IBurpExtender, ITab, IHttpListener,
                   IMessageEditorController, AbstractTableModel,
                   IContextMenuInvocation):
    name = "Blind XSS_"
    _jTabbedPane = JTabbedPane()
    _jPanel = JPanel()
    _jAboutPanel = JPanel()
    _jPanelConstraints = GridBagConstraints()
    _jLabelParameters = None
    _jTextFieldParameters = None
    _jLabelTechniques = None
    _jTextFieldURL = None
    _jLabelFuzzFactor = None
    _jTextFieldFuzzFactor = None
    _jLabelAdditionalCmdLine = None
    _jTextFieldAdditionalCmdLine = None
    _jButtonSetCommandLine = None
    _jLabelAbout = None

    #
    # implement IBurpExtender
    #
    def registerExtenderCallbacks(self, callbacks):
        # keep a reference to our callbacks object
        self._callbacks = callbacks
        # obtain an extension helpers object
        self._helpers = callbacks.getHelpers()
        # set our extension name
        self._callbacks.setExtensionName(self.name)
        # lists of hosts with querys

        self._dictPayloads = {}
        self._dictPayloads_headers = {}
        self._dictPayloads_params = {}
        self._dictHeaders = {}
        self._dictParams = {}

        self.status_flag = False
        self.table_flag = 0
        self.start_button_text = 'Run proxy'
        self._layout = GridBagLayout()
        self._jPanel.setLayout(self._layout)

        self._jPanel.setBounds(0, 0, 1000, 1000)
        self._jLabelTechniques = JLabel("Your URL (my.burpcollaborator.net):")
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.gridx = 0
        self._jPanelConstraints.gridy = 1
        self._jPanelConstraints.gridwidth = 2
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(0, 0, 10, 0)
        self._jPanel.add(self._jLabelTechniques, self._jPanelConstraints)

        self._jTextFieldURL = JTextField("", 30)
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.gridx = 2
        self._jPanelConstraints.gridy = 1
        self._jPanelConstraints.gridwidth = 4
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(0, 0, 10, 0)
        self._jPanel.add(self._jTextFieldURL, self._jPanelConstraints)

        self._jLabelTechniques = JLabel("Press to start:")
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.anchor = GridBagConstraints.WEST
        self._jPanelConstraints.gridx = 0
        self._jPanelConstraints.gridy = 0
        self._jPanelConstraints.gridwidth = 2
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(0, 0, 10, 0)
        self._jPanel.add(self._jLabelTechniques, self._jPanelConstraints)

        self.submitSearchButton = swing.JButton(
            self.start_button_text, actionPerformed=self.active_flag)
        self.submitSearchButton.setBackground(Color.WHITE)
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.gridx = 2
        self._jPanelConstraints.gridy = 0
        self._jPanelConstraints.gridwidth = 4
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(0, 0, 10, 0)
        self._jPanel.add(self.submitSearchButton, self._jPanelConstraints)

        self._tableModelPayloads = DefaultTableModel()
        self._tableModelPayloads.addColumn("Payload")
        self._tableModelPayloads.addColumn("Using")

        self._tableModelHeaders = DefaultTableModel()
        self._tableModelHeaders.addColumn("Header")
        self._tableModelHeaders.addColumn("Using")

        self._tableModelParams = DefaultTableModel()
        self._tableModelParams.addColumn("Parameter")
        self._tableModelParams.addColumn("Using")

        self._table = JTable(self._tableModelPayloads)
        self._table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS)
        self._table.getModel().addTableModelListener(
            MyTableModelListener(self._table, self, 1))
        self._scrolltable = JScrollPane(self._table)
        self._scrolltable.setMinimumSize(Dimension(300, 200))
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.gridx = 0
        self._jPanelConstraints.gridy = 2
        self._jPanelConstraints.gridwidth = 2
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(0, 0, 0, 10)
        self._jPanel.add(self._scrolltable, self._jPanelConstraints)

        self._table = JTable(self._tableModelHeaders)
        self._table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS)
        self._table.getModel().addTableModelListener(
            MyTableModelListener(self._table, self, 2))
        self._scrolltable = JScrollPane(self._table)
        self._scrolltable.setMinimumSize(Dimension(300, 200))
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.gridx = 2
        self._jPanelConstraints.gridy = 2
        self._jPanelConstraints.gridwidth = 2
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(0, 0, 0, 10)
        self._jPanel.add(self._scrolltable, self._jPanelConstraints)

        self._table = JTable(self._tableModelParams)
        self._table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS)
        self._table.getModel().addTableModelListener(
            MyTableModelListener(self._table, self, 3))
        self._scrolltable = JScrollPane(self._table)
        self._scrolltable.setMinimumSize(Dimension(300, 200))
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.gridx = 4
        self._jPanelConstraints.gridy = 2
        self._jPanelConstraints.gridwidth = 2
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(0, 0, 0, 0)
        self._jPanel.add(self._scrolltable, self._jPanelConstraints)

        addPayloadButton = swing.JButton('Add',
                                         actionPerformed=self.addToPayload)
        addPayloadButton.setBackground(Color.WHITE)
        addPayloadButton.setPreferredSize(Dimension(150, 40))
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        # self._jPanelConstraints.anchor = GridBagConstraints.CENTER
        self._jPanelConstraints.gridx = 1
        self._jPanelConstraints.gridy = 3
        self._jPanelConstraints.gridwidth = 1
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(3, 0, 0, 10)
        self._jPanel.add(addPayloadButton, self._jPanelConstraints)

        deletePayloadButton = swing.JButton(
            'Delete', actionPerformed=self.deleteToPayload)
        deletePayloadButton.setBackground(Color.WHITE)
        deletePayloadButton.setPreferredSize(Dimension(150, 40))
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.gridx = 0
        self._jPanelConstraints.gridy = 3
        self._jPanelConstraints.gridwidth = 1
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(3, 0, 0, 0)
        self._jPanel.add(deletePayloadButton, self._jPanelConstraints)

        addHeaderButton = swing.JButton('Add',
                                        actionPerformed=self.addToHeader)
        addHeaderButton.setBackground(Color.WHITE)
        addHeaderButton.setPreferredSize(Dimension(150, 40))
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        # self._jPanelConstraints.anchor = GridBagConstraints.CENTER
        self._jPanelConstraints.gridx = 3
        self._jPanelConstraints.gridy = 3
        self._jPanelConstraints.gridwidth = 1
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(3, 0, 0, 10)
        self._jPanel.add(addHeaderButton, self._jPanelConstraints)

        deleteHeaderButton = swing.JButton('Delete',
                                           actionPerformed=self.deleteToHeader)
        deleteHeaderButton.setBackground(Color.WHITE)
        deleteHeaderButton.setPreferredSize(Dimension(150, 40))
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.gridx = 2
        self._jPanelConstraints.gridy = 3
        self._jPanelConstraints.gridwidth = 1
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(3, 0, 0, 0)
        self._jPanel.add(deleteHeaderButton, self._jPanelConstraints)

        addParamsButton = swing.JButton('Add',
                                        actionPerformed=self.addToParams)
        addParamsButton.setBackground(Color.WHITE)
        addParamsButton.setPreferredSize(Dimension(150, 40))
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        # self._jPanelConstraints.anchor = GridBagConstraints.CENTER
        self._jPanelConstraints.gridx = 5
        self._jPanelConstraints.gridy = 3
        self._jPanelConstraints.gridwidth = 1
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(3, 0, 0, 0)
        self._jPanel.add(addParamsButton, self._jPanelConstraints)

        deleteParamsButton = swing.JButton('Delete',
                                           actionPerformed=self.deleteToParams)
        deleteParamsButton.setBackground(Color.WHITE)
        deleteParamsButton.setPreferredSize(Dimension(150, 40))
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.gridx = 4
        self._jPanelConstraints.gridy = 3
        self._jPanelConstraints.gridwidth = 1
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(3, 0, 0, 0)
        self._jPanel.add(deleteParamsButton, self._jPanelConstraints)

        self._resultsTextArea = swing.JTextArea()
        resultsOutput = swing.JScrollPane(self._resultsTextArea)
        resultsOutput.setMinimumSize(Dimension(800, 200))
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.gridx = 0
        self._jPanelConstraints.gridy = 4
        self._jPanelConstraints.gridwidth = 6
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(10, 0, 0, 0)
        self._jPanel.add(resultsOutput, self._jPanelConstraints)

        self.clearSearchButton = swing.JButton(
            'Clear Search Output', actionPerformed=self.clearOutput)
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        # self._jPanelConstraints.anchor = GridBagConstraints.CENTER
        self._jPanelConstraints.gridx = 2
        self._jPanelConstraints.gridy = 5
        self._jPanelConstraints.gridwidth = 2
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(3, 0, 0, 0)
        self._jPanel.add(self.clearSearchButton, self._jPanelConstraints)

        self._callbacks.customizeUiComponent(self._jPanel)

        self._callbacks.addSuiteTab(self)
        # register ourselves as an HTTP listener
        self._callbacks.registerHttpListener(self)

        return

    # def onCheck(self, event):
    #     if self._checkBoxPayload.isSelected() and self.table_flag != 0:
    #         self.table_flag = 0
    #         self._checkBoxHeader.setSelected(False)
    #         self._checkBoxParam.setSelected(False)

    #     if self._checkBoxHeader.isSelected() and self.table_flag != 1:
    #         self.table_flag = 1
    #         self._checkBoxParam.setSelected(False)
    #         self._checkBoxPayload.setSelected(False)

    #     if self._checkBoxParam.isSelected() and self.table_flag != 2:
    #         self.table_flag = 2
    #         self._checkBoxHeader.setSelected(False)
    #         self._checkBoxPayload.setSelected(False)

    # run Query for Add to Queue Button
    def addToPayload(self, button):
        self._tableModelPayloads.insertRow(
            self._tableModelPayloads.getRowCount(), ['', ''])
        # self.appendToResults(str(self._tableModelPayloads.getDataVector()))

    def addToHeader(self, button):
        self._tableModelHeaders.insertRow(
            self._tableModelHeaders.getRowCount(), ['', ''])

    def addToParams(self, button):
        self._tableModelParams.insertRow(self._tableModelParams.getRowCount(),
                                         ['', ''])

    def deleteToPayload(self, button):
        self._tableModelPayloads.removeRow(
            self._tableModelPayloads.getRowCount() - 1)
        # self.appendToResults(str(self._tableModelPayloads.getDataVector()))

    def deleteToHeader(self, button):
        self._tableModelHeaders.removeRow(
            self._tableModelHeaders.getRowCount() - 1)
        # self.appendToResults(str(self._tableModelHeaders.getDataVector()))

    def deleteToParams(self, button):
        self._tableModelParams.removeRow(self._tableModelParams.getRowCount() -
                                         1)
        # self.appendToResults(str(self._tableModelParams.getDataVector()))

    # Clear Queue Function
    def clearQueue(self, button):
        table_number = self.table_flag

        if table_number == 0:
            data = self._tableModelPayloads.getDataVector()
            try:
                self._dictPayloads.pop(data[-1][0])
            except Exception:
                pass
            self._tableModelPayloads.removeRow(
                self._tableModelPayloads.getRowCount() - 1)
        elif table_number == 1:
            data = self._tableModelHeaders.getDataVector()
            try:
                self._dictHeaders.pop(data[-1][0])
            except Exception:
                pass
            self._tableModelHeaders.removeRow(
                self._tableModelHeaders.getRowCount() - 1)
        elif table_number == 2:
            data = self._tableModelParams.getDataVector()
            try:
                self._dictParams.pop(data[-1][0])
            except Exception:
                pass
            self._tableModelParams.removeRow(
                self._tableModelParams.getRowCount() - 1)

    def updateTables(self, button):
        self._dictPayloads = {
            x[0]: x[1]
            for x in self._tableModelPayloads.getDataVector()
        }
        self._dictHeaders = {
            x[0]: x[1]
            for x in self._tableModelHeaders.getDataVector()
        }
        self._dictParams = {
            x[0]: x[1]
            for x in self._tableModelParams.getDataVector()
        }

    # Clear GUI Output Function
    def clearOutput(self, button):
        self._resultsTextArea.setText("")

    def active_flag(self, button):
        if not self.status_flag:
            for idx, key in enumerate(self._dictHeaders):
                if self._dictHeaders[key] == '1':
                    self._dictPayloads_headers[key] = self._dictHeaders[key]

            for idx, key in enumerate(self._dictParams):
                if self._dictParams[key] == '1':
                    self._dictPayloads_params[key] = self._dictParams[key]

            self.status_flag = True
            self.submitSearchButton.setBackground(Color.GRAY)
            self.appendToResults("Proxy start...")

        elif self.status_flag:
            self.status_flag = False
            self.submitSearchButton.setBackground(Color.WHITE)
            self.appendToResults("Proxy stop...")

    def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo):
        try:
            if not self.status_flag:
                return
            # only process requests
            if not messageIsRequest:
                return

            requestString = messageInfo.getRequest().tostring()

            listHeader = re.findall('([\w-]+):\s?(.*)', requestString)
            dictRealHeaders = {x[0].lower(): x[1] for x in listHeader}
            # self.appendToResults(str(self._dictHeaders))

            for index, key in enumerate(self._dictPayloads_headers):
                if key.lower() in dictRealHeaders.keys():
                    if len(self._dictPayloads.keys()) == 0:
                        pass
                    else:
                        payload = random.choice(self._dictPayloads.keys())
                        # payload = payload.replace("$HEADER$", self._jTextFieldURL.text, 1)
                        payload = payload.replace("$URL$",
                                                  self._jTextFieldURL.text, 1)
                        requestString = requestString.replace(
                            dictRealHeaders.get(key.lower()), payload, 1)
                else:
                    pass

            listParam = re.findall('[\?|\&]([^=]+)\=([^& ])+', requestString)
            dictRealParams = {x[0].lower(): x[1] for x in listParam}
            url = requestString.split(" HTTP/1.")
            for index, key in enumerate(self._dictPayloads_params):
                if key.lower() in dictRealParams.keys():
                    if len(self._dictPayloads.keys()) == 0:
                        pass
                    else:
                        payload = random.choice(self._dictPayloads.keys())
                        # payload = payload.replace("$PARAM$", self._jTextFieldURL.text, 1)
                        payload = payload.replace("$URL$",
                                                  self._jTextFieldURL.text, 1)
                        url[0] = url[0].replace(
                            dictRealParams.get(key.lower()), payload, 1)
                else:
                    pass
            requestString = "{} HTTP/1.{}".format(url[0], url[1])

            self.appendToResults(requestString.encode())
            messageInfo.setRequest(requestString.encode())
        except Exception as msg:
            self.appendToResults(msg)

    # Fnction to provide output to GUI
    def appendToResults(self, s):
        """Appends results to the resultsTextArea in a thread safe mannor. Results will be
           appended in the order that this function is called.
        """
        def appendToResults_run(s):
            self._resultsTextArea.append(s)
            self._resultsTextArea.append('\n')

        swing.SwingUtilities.invokeLater(PyRunnable(appendToResults_run, s))

    def getTabCaption(self):
        return self.name

    def getUiComponent(self):
        return self._jPanel
Пример #8
0
class BurpExtender(IBurpExtender, ITab):

    #
    # implement IBurpExtender
    #

    def registerExtenderCallbacks(self, callbacks):

        # set our extension name
        callbacks.setExtensionName("War Story")

        # obtain our output stream
        self._stdout = PrintWriter(callbacks.getStdout(), True)

        # write a message to our output stream
        self._stdout.println("Loading WarStory")

        # write a message to the Burp alerts tab
        callbacks.issueAlert("Hello alerts")
        label = JLabel("INFO PANEL")
        self.infoPanel = JPanel()
        footerPanel = JPanel()
        footerPanel.add(JLabel("by Tim mcgyver5 McGuire"))
        self._chooseFileButton = JButton("OPEN WAR FILE",
                                         actionPerformed=self.fileButtonClick)
        self.infoPanel.add(JLabel("THIS IS INFORMATION PANE"))
        self.infoPanel.add(self._chooseFileButton)
        # iaap.war|web.xml|axServlet|/skuppy/axservlet.do|
        self._chooseFileButton.setEnabled(True)
        initial_row = ['a', 'bb', 'ccc', 'ddd', 'eeee']
        self.fileTable = JTable(ResourceTableModel(initial_row))
        scrollpane = JScrollPane(self.fileTable)

        ## this is a split inside the top component
        topPane = JSplitPane(JSplitPane.VERTICAL_SPLIT)

        topPane.setTopComponent(self.infoPanel)
        topPane.setBottomComponent(scrollpane)

        # split the top panel into a Panel and a JScrollPane

        self._splitpane = JSplitPane(JSplitPane.VERTICAL_SPLIT)
        self._splitpane.setTopComponent(topPane)
        self._splitpane.setBottomComponent(footerPanel)

        callbacks.addSuiteTab(self)

    def populateJTable(self, f):
        filename = f.getPath()
        tableModel = self.fileTable.getModel()
        test_row = ["a", "b", "doo", "dah", "dob"]
        re = Resource("Servlet", "bingServlet", "bingservlet.do", [], [],
                      "GET")
        self._stdout.println("populatin table model")
        tableModel.addRow(test_row)

    def fileButtonClick(self, e):

        fileTypeList = ["war", "ear", "zip"]
        warFilter = FileNameExtensionFilter("war", fileTypeList)
        fileChooser = JFileChooser()
        fileChooser.addChoosableFileFilter(warFilter)
        result = fileChooser.showOpenDialog(self._splitpane)

        if result == JFileChooser.APPROVE_OPTION:
            f = fileChooser.getSelectedFile()
            fileName = f.getPath()
            self.populateJTable(f)

    # Implement ITab
    def getTabCaption(self):
        return "War Story"

    def getUiComponent(self):
        return self._splitpane
Пример #9
0
class BurpExtender(IBurpExtender, ITab, IHttpListener):
    def registerExtenderCallbacks(self, callbacks):
        self.callbacks = callbacks
        self.helpers = callbacks.getHelpers()
        self.callbacks.setExtensionName("KkMultiProxy")
        self.PROXY_LIST = []

        self.jPanel = JPanel()
        boxVertical = Box.createVerticalBox()
        boxHorizontal = Box.createHorizontalBox()

        boxHorizontal.add(JButton("File", actionPerformed=self.getFile))
        self.FileText = JTextField("")
        boxHorizontal.add(self.FileText)
        boxVertical.add(boxHorizontal)

        TableHeader = ('IP', 'PORT')
        TableModel = DefaultTableModel(self.PROXY_LIST, TableHeader)
        self.Table = JTable(TableModel)
        boxVertical.add(self.Table)

        boxHorizontal = Box.createHorizontalBox()
        boxHorizontal.add(JButton("Add", actionPerformed=self.addIP))
        boxHorizontal.add(JButton("Delete", actionPerformed=self.deleteIP))
        boxHorizontal.add(JButton("Save", actionPerformed=self.saveIP))
        boxVertical.add(boxHorizontal)

        self.jPanel.add(boxVertical)

        self.callbacks.addSuiteTab(self)
        self.callbacks.registerHttpListener(self)
        return

    def getFile(self, button):
        dlg = JFileChooser()
        result = dlg.showOpenDialog(None)
        if result == JFileChooser.APPROVE_OPTION:
            f = dlg.getSelectedFile()
            path = f.getPath()
            self.FileText.setText(path)
            try:
                self.getIPList(path)
            except:
                exit(0)

    def addIP(self, button):
        #chooser = JFileChooser()
        #chooser.showOpenDialog(None)
        demo = DialogDemo(self.Table)

    def deleteIP(self, button):
        selectRows = len(self.Table.getSelectedRows())
        TableModel = self.Table.getModel()
        if selectRows:
            selectedRowIndex = self.Table.getSelectedRow()
            TableModel.removeRow(selectedRowIndex)

    def saveIP(self, button):
        TableModel = self.Table.getModel()
        rowCount = TableModel.getRowCount()
        result_str = ""
        for i in range(rowCount):
            if i == 0:
                result_str += TableModel.getValueAt(
                    i, 0) + ':' + TableModel.getValueAt(i, 1)
            else:
                result_str += '|' + TableModel.getValueAt(
                    i, 0) + ':' + TableModel.getValueAt(i, 1)
        print result_str
        f = open(self.FileText.getText(), 'w+')
        f.write(result_str)
        f.close()

    def getTabCaption(self):
        return "MultiProxy"

    def getUiComponent(self):
        return self.jPanel

    def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo):
        if messageIsRequest:
            httpService = messageInfo.getHttpService()
            print httpService.getHost()

            # if the host is HOST_FROM, change it to HOST_TO
            i = randint(0, len(self.TableDatas) - 1)
            messageInfo.setHttpService(
                self.helpers.buildHttpService(self.PROXY_LIST[i]['ip'],
                                              self.PROXY_LIST[i]['port'],
                                              httpService.getProtocol()))
            print messageInfo.getHttpService().getHost()

    def getIPList(self, path):
        f = open(path, 'r+')
        content = f.read()
        f.close()
        if content:
            ip_array = content.split('|')
            for _ip in ip_array:
                ip = _ip.split(':')[0]
                port = _ip.split(':')[1]
                self.PROXY_LIST.append([ip, port])
        print self.PROXY_LIST
Пример #10
0
class LINAC_SetUp_Controller:
	def __init__(self,linac_wizard_document):
		#--- linac_wizard_document the parent document for all controllers
		self.linac_wizard_document = linac_wizard_document		
		self.main_panel = JPanel(BorderLayout())
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()		
		#------tables with Seq. names and button
		tables_panel = JPanel(BorderLayout())
		tables_panel.setBorder(etched_border)
		self.first_table = JTable(WS_Records_Table_Model("First "))
		self.last_table = JTable(WS_Records_Table_Model("Last "))
		self.first_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
		self.last_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
		self.first_table.setFillsViewportHeight(true)
		self.last_table.setFillsViewportHeight(true)
		tables01_panel = JPanel(BorderLayout())
		scrl_panel0 = JScrollPane(self.first_table)
		scrl_panel1 = JScrollPane(self.last_table)
		#tables01_panel.add(JScrollPane(self.first_table),BorderLayout.WEST)
		#tables01_panel.add(JScrollPane(self.last_table),BorderLayout.EAST)
		self.first_table.getCellRenderer(0,0).setHorizontalAlignment(JLabel.CENTER)
		self.last_table.getCellRenderer(0,0).setHorizontalAlignment(JLabel.CENTER)
		self.first_table.setPreferredScrollableViewportSize(Dimension(120,300))
		self.last_table.setPreferredScrollableViewportSize(Dimension(120,300))
		tables01_panel.add(scrl_panel0,BorderLayout.WEST)
		tables01_panel.add(scrl_panel1,BorderLayout.EAST)	
		tables_button_panel = JPanel(BorderLayout())
		tables_button_panel.add(tables01_panel,BorderLayout.WEST)
		seq_button_panel = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		seq_set_button = JButton(" Set ComboSequence ")	
		seq_button_panel.add(seq_set_button)
		tables_button_panel.add(seq_button_panel,BorderLayout.SOUTH)
		tables_panel.add(tables_button_panel,BorderLayout.NORTH)
		self.main_panel.add(tables_panel,BorderLayout.WEST)
		#--------central panel-------
		cav_amp_phase_button = JButton(" Read Cavities Amp.&Phases from Ext. File ")	
		cav_info_from_scl_tuneup_button = JButton("Get SCL Cav. Amp.&Phases from SCL Long. TuneUp")	
		new_accelerator_button = JButton(" Setup a New Accelerator File ")
		center_buttons_panel0 = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		center_buttons_panel0.add(cav_amp_phase_button)
		center_buttons_panel1 = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		center_buttons_panel1.add(cav_info_from_scl_tuneup_button)			
		center_buttons_panel2 = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		center_buttons_panel2.add(new_accelerator_button)	
		center_buttons_panel = JPanel(GridLayout(3,1))
		center_buttons_panel.add(center_buttons_panel0)
		center_buttons_panel.add(center_buttons_panel1)
		center_buttons_panel.add(center_buttons_panel2)
		center_panel = JPanel(BorderLayout())		
		center_panel.add(center_buttons_panel,BorderLayout.NORTH)
		self.main_panel.add(center_panel,BorderLayout.CENTER)
		#---------add actions listeners
		seq_set_button.addActionListener(Make_Sequence_Listener(self))
		cav_amp_phase_button.addActionListener(Read_Cav_Amp_Phase_Dict_Listener(self))
		cav_info_from_scl_tuneup_button.addActionListener(Get_SCL_Cav_Amp_Phase_Listener(self))
		new_accelerator_button.addActionListener(SetUp_New_Accelerator_Listener(self))	
		
	def getMainPanel(self):
		return self.main_panel
		
	def setSelectedSequences(self,first_seq_name,last_seq_name):
		index0 = self.first_table.getModel().accSeqName_arr.index(first_seq_name)
		index1 = self.last_table.getModel().accSeqName_arr.index(last_seq_name)
		self.first_table.setRowSelectionInterval(index0,index0)
		self.last_table.setRowSelectionInterval(index1,index1)
		
	def getSelectedSequencesNames(self):
		first_table = self.first_table
		index0 = first_table.getSelectedRow()
		last_table = self.last_table
		index1 = last_table.getSelectedRow()
		if(index0 < 0 or index1 < 0): return []
		seq_names = []
		if(index0 == index1):
			seq_names.append(first_table.getModel().accSeqName_arr[index0])
		else:
			if(index1 < index0):
				(index0,index1) = (index1,index0)
			for i in range(index0,index1+1):
				seq_names.append(first_table.getModel().accSeqName_arr[i])
		return seq_names
		
	def setAccSeqNames(self,seq_names):
		accl = self.linac_wizard_document.getAccl()
		if(len(seq_names) == 0): 
			accSeq = null
			self.linac_wizard_document.setAccSeq(accSeq)
			return
		lst = ArrayList()
		for seqName in seq_names:
			lst.add(accl.getSequence(seqName))
		accSeq = AcceleratorSeqCombo("SEQUENCE", lst)	
		self.linac_wizard_document.setAccSeq(accSeq)
		
	def getCavNameNodeDict(self,accl):
		rf_gaps = accl.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(RfGap.s_strType)))	
		cavs = []
		for rf_gap in rf_gaps:
			cav = rf_gap.getParent()
			if(cav not in cavs):
				cavs.append(cav)
		cav_name_node_dict = {}
		cav_names = []
		for cav in cavs:
			cav_names.append(cav.getId())
			cav_name_node_dict[cav.getId()] = cav		
		return cav_name_node_dict
class Plugin(IHttpListener):

    MUTATE_ID_COLUMN_INDEX = 4
    ORIG_ID_COLUMN_INDEX = 5

    def __init__(self, callbacks):
        self.callbacks = callbacks
        self.helpers = self.callbacks.getHelpers()

        self.origMessageEditorController = MessageEditorController()
        self.mutatedMessageEditorController = MessageEditorController()

        self.origSearchString = replacements.origSearchString
        self.replacements = replacements.replacements

        self.requestResponseCache = {}

    def start(self):

        self.frame = JDialog()
        #self.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
        self.frame.setLocation(0, 1500)
        self.frame.setSize(1000, 200)

        self.tableDataModel = DefaultTableModel([], [
            "URL", "Code", "Content-Length", "Location", "Mutated Id",
            "Orig Id"
        ])
        self.jtable = JTable(self.tableDataModel)

        scrollPane = JScrollPane(self.jtable)
        self.jtable.setFillsViewportHeight(True)

        messageEditorOrig = self.callbacks.createMessageEditor(None, False)
        messageEditorModified = self.callbacks.createMessageEditor(
            None, False)
        self.editorSplitPane = JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
                                          messageEditorOrig.getComponent(),
                                          messageEditorModified.getComponent())
        self.editorSplitPane.setResizeWeight(0.5)

        splitPane = JSplitPane(JSplitPane.VERTICAL_SPLIT, scrollPane,
                               self.editorSplitPane)
        splitPane.setResizeWeight(0.5)

        class TableSelector(ListSelectionListener):
            def __init__(self, plugin):
                self.plugin = plugin

            def valueChanged(self, event):
                if not event.getValueIsAdjusting():
                    selectedRowIndex = self.plugin.jtable.getSelectedRows()[0]

                    self.plugin._rowSelected(selectedRowIndex)

        self.jtable.getSelectionModel().addListSelectionListener(
            TableSelector(self))

        self.frame.add(splitPane)
        self.frame.setVisible(True)

        self.callbacks.registerHttpListener(self)
        self.callbacks.setExtensionName("Custom Plugin")
        return

    def stop(self):

        print("Closing!")
        self.callbacks.removeHttpListener(self)
        self.frame.dispose()
        self.jrame = None
        return

    def _rowSelected(self, index):

        #self.splitPane.setLeftComponent(
        #self.callbacks.createMessageEditor(
        origId = self.tableDataModel.getValueAt(
            index, self.ORIG_ID_COLUMN_INDEX).encode('ascii', 'ignore')
        mutateId = self.tableDataModel.getValueAt(
            index, self.MUTATE_ID_COLUMN_INDEX).encode('ascii', 'ignore')

        self.origMessageEditorController.setRequestResponse(
            self.requestResponseCache[origId])
        messageEditorOrig = self.callbacks.createMessageEditor(
            self.origMessageEditorController, False)
        messageEditorOrig.setMessage(
            self.requestResponseCache[origId].getResponse(), False)
        self.editorSplitPane.setLeftComponent(messageEditorOrig.getComponent())

        self.mutatedMessageEditorController.setRequestResponse(
            self.requestResponseCache[mutateId])
        messageEditorMutated = self.callbacks.createMessageEditor(
            self.mutatedMessageEditorController, False)
        messageEditorMutated.setMessage(
            self.requestResponseCache[mutateId].getResponse(), False)
        self.editorSplitPane.setRightComponent(
            messageEditorMutated.getComponent())

        print(mutateId)
        print("Row selected")
        print(str(index))

    def _buildResponseHeadersDictionary(self, headers):
        """Creates key/value lookup from list of headers.
           Header names are converted to lowercase.
           If header is returned multiple time, last header has precedence."""
        d = {}

        #Skip first "header", it's the response code line.
        for i in range(1, len(headers)):

            (name, value) = headers[i].split(":", 1)
            d[name.lower()] = value

        return d

    def _getDictValueOrEmptyStr(self, d, key):
        if key in d:
            return d[key]
        else:
            return ""

    def handleReceivedResponseForModifiedRequest(self, requestResponse):

        #Get original HTTP Request
        requestData = StringUtil.fromBytes(requestResponse.getRequest())
        requestId = re.search(b"^X-REQUEST-ID: ([^\r]*)",
                              requestData,
                              flags=re.MULTILINE).group(1).encode('ascii')
        origRequestId = re.search(b"^X-REQUEST-ORIG-ID: ([^\r]*)",
                                  requestData,
                                  flags=re.MULTILINE).group(1).encode('ascii')

        print("Keys")
        print(requestId)
        print(origRequestId)
        print(self.requestResponseCache.keys())

        self.requestResponseCache[requestId] = requestResponse

        origRequestResponse = self.requestResponseCache[origRequestId]

        analyzedOrigResponse = self.helpers.analyzeResponse(
            origRequestResponse.getResponse())
        analayzeMutatedResponse = self.helpers.analyzeResponse(
            requestResponse.getResponse())

        origResponseHeaders = self._buildResponseHeadersDictionary(
            analyzedOrigResponse.getHeaders())
        mutatedResponseHeaders = self._buildResponseHeadersDictionary(
            analayzeMutatedResponse.getHeaders())

        mutatedRequestInfo = self.helpers.analyzeRequest(
            requestResponse.getHttpService(), requestResponse.getRequest())

        model = self.jtable.getModel()
        model.addRow([
            str(mutatedRequestInfo.getUrl()),
            str(analayzeMutatedResponse.getStatusCode()),
            self._getDictValueOrEmptyStr(mutatedResponseHeaders,
                                         "content-length"),
            self._getDictValueOrEmptyStr(mutatedResponseHeaders, "location"),
            requestId, origRequestId
        ])

        print("Modified Request Found: %s %s" % (requestId, origRequestId))

        #Get original request and response object from lookup
        #Get request from lookup

    def processHttpMessage(self, toolFlag, messageIsRequest, requestResponse):
        if not messageIsRequest:
            requestData = StringUtil.fromBytes(requestResponse.getRequest())

            #We generated the request, process it
            if requestData.find(b"X-REQUEST-ID") != -1:

                self.handleReceivedResponseForModifiedRequest(requestResponse)

            #Response received for non-mutated request.
            #Mutate request and send it.
            else:

                origRequestResponseUUID = str(uuid.uuid4())
                reload(replacements)

                print("Looking for replacements")
                for replacement in self.replacements:
                    newRequestData = re.sub(self.origSearchString, replacement,
                                            requestData)

                    #If no replacemnets made, don't send any requests
                    if newRequestData != requestData:
                        newRequestUUID = str(uuid.uuid4())
                        newRequestData = re.sub(
                            b"Host",
                            b"X-REQUEST-ID: " + newRequestUUID + "\r\nHost",
                            requestData)
                        newRequestData = re.sub(
                            b"Host", b"X-REQUEST-ORIG-ID: " +
                            origRequestResponseUUID + "\r\nHost",
                            newRequestData)

                        print("Sending Mutated Request")
                        print(newRequestData)

                        self.requestResponseCache[
                            origRequestResponseUUID] = requestResponse
                        httpService = requestResponse.getHttpService()
                        self.callbacks.makeHttpRequest(httpService,
                                                       newRequestData)

            print("Got here")
Пример #12
0
class BurpExtender(IBurpExtender, ITab):

    #
    # implement IBurpExtender
    #
    def hello(self):
        return "hello"

    def process_file(self, file):
        freshrows = []
        # return list of list of file parts
        for url in file:
            result = urlparse(url)
            scheme = result[0]
            domain = result[0]
            path = result[0]
            params = ''
            query = ''
            fragment = ''
            next = [scheme, domain, path, params, query, fragment]
            freshrows.append(next)
        return freshrows

    def registerExtenderCallbacks(self, callbacks):

        # set our extension name
        callbacks.setExtensionName("Hello world extension")

        # obtain our output and error streams
        stdout = PrintWriter(callbacks.getStdout(), True)
        stderr = PrintWriter(callbacks.getStderr(), True)

        # write a message to our output stream
        stdout.println("Hello output")

        # write a message to our error stream
        stderr.println("Hello errors")

        # write a message to the Burp alerts tab
        callbacks.issueAlert("Hello alerts")

        #create and populate a jtable:
        initial_row = [
            'http', 'www.meetup.com',
            'PyMNtos-Twin-Cities-Python-User-Group/events/267977020/', '', '',
            ''
        ]
        self.fileTable = JTable(ResourceTableModel(initial_row))
        # set up the Tab:

        self.infoPanel = JPanel()
        footerPanel = JPanel()

        footerPanel.add(JLabel("by mcgyver5 "))
        self._chooseFileButton = JButton("OPEN Local FILE",
                                         actionPerformed=self.fileButtonClick)
        self.infoPanel.add(JLabel("INFORMATION PANE"))

        self.infoPanel.add(self._chooseFileButton)
        scrollpane = JScrollPane(self.fileTable)
        ## this is a split inside the top component
        topPane = JSplitPane(JSplitPane.VERTICAL_SPLIT)
        topPane.setTopComponent(self.infoPanel)
        topPane.setBottomComponent(scrollpane)
        self._chooseFileButton.setEnabled(True)
        self._splitpane = JSplitPane(JSplitPane.VERTICAL_SPLIT)
        self._splitpane.setTopComponent(topPane)
        self._splitpane.setBottomComponent(footerPanel)
        callbacks.addSuiteTab(self)

    def populateTableModel(self, results):
        tableModel = self.fileTable.getModel()
        for row in results:
            tableModel.addRow(row)

    def fileButtonClick(self, callbacks):
        fileTypeList = ["csv", "txt", "json"]
        txtFilter = FileNameExtensionFilter("txt", fileTypeList)
        fileChooser = JFileChooser()
        fileChooser.addChoosableFileFilter(txtFilter)
        result = fileChooser.showOpenDialog(self._splitpane)

        if result == JFileChooser.APPROVE_OPTION:
            f = fileChooser.getSelectedFile()
            fileName = f.getPath()
            self.populateTableModel(f)

    ## Implement ITab:
    def getTabCaption(self):
        return "Import URLs"

    def getUiComponent(self):
        return self._splitpane
Пример #13
0
class PreferencesFrame(JFrame, ActionListener, WindowListener, ItemListener,
                       HyperlinkListener):
    """Dialog with preferences
    """
    def __init__(self, parent, title, app):
        from javax.swing import JCheckBox, JRadioButton, ButtonGroup
        self.app = app
        border = BorderFactory.createEmptyBorder(5, 7, 5, 7)
        self.getContentPane().setBorder(border)
        self.getContentPane().setLayout(BorderLayout(0, 5))
        self.tabbedPane = JTabbedPane()

        #1 Tab: general
        panel1 = JPanel()
        panel1.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7))
        panel1.setLayout(BoxLayout(panel1, BoxLayout.PAGE_AXIS))

        #Checkbutton to enable/disable update check when script starts
        self.updateCBtn = JCheckBox(self.app.strings.getString("updateCBtn"))
        self.updateCBtn.setToolTipText(
            self.app.strings.getString("updateCBtn_tooltip"))

        #Download tools
        downloadBtn = JButton(self.app.strings.getString("updatesBtn"),
                              ImageProvider.get("dialogs", "refresh"),
                              actionPerformed=self.on_downloadBtn_clicked)
        downloadBtn.setToolTipText(
            self.app.strings.getString("updatesBtn_tooltip"))

        #Checkbuttons for enabling/disabling tools
        toolsPanel = JPanel(BorderLayout(0, 5))
        title = self.app.strings.getString("enable_disable_tools")
        toolsPanel.setBorder(BorderFactory.createTitledBorder(title))
        infoLbl = JLabel(self.app.strings.getString("JOSM_restart_warning"))
        infoLbl.setFont(infoLbl.getFont().deriveFont(Font.ITALIC))
        toolsPanel.add(infoLbl, BorderLayout.PAGE_START)

        toolsStatusPane = JPanel(GridLayout(len(self.app.realTools), 0))
        self.toolsCBtns = []
        for tool in self.app.realTools:
            toolCBtn = JCheckBox()
            toolCBtn.addItemListener(self)
            toolLbl = JLabel(tool.title, tool.bigIcon, JLabel.LEFT)
            self.toolsCBtns.append(toolCBtn)

            toolPane = JPanel()
            toolPane.setLayout(BoxLayout(toolPane, BoxLayout.X_AXIS))
            toolPane.add(toolCBtn)
            toolPane.add(toolLbl)
            toolsStatusPane.add(toolPane)
        toolsPanel.add(toolsStatusPane, BorderLayout.CENTER)

        #Radiobuttons for enabling/disabling layers when a new one
        #is added
        layersPanel = JPanel(GridLayout(0, 1))
        title = self.app.strings.getString("errors_layers_manager")
        layersPanel.setBorder(BorderFactory.createTitledBorder(title))
        errorLayersLbl = JLabel(
            self.app.strings.getString("errors_layers_info"))
        errorLayersLbl.setFont(errorLayersLbl.getFont().deriveFont(
            Font.ITALIC))
        layersPanel.add(errorLayersLbl)
        self.layersRBtns = {}
        group = ButtonGroup()
        for mode in self.app.layersModes:
            layerRBtn = JRadioButton(self.app.strings.getString("%s" % mode))
            group.add(layerRBtn)
            layersPanel.add(layerRBtn)
            self.layersRBtns[mode] = layerRBtn

        #Max number of errors text field
        self.maxErrorsNumberTextField = JTextField()
        self.maxErrorsNumberTextField.setToolTipText(
            self.app.strings.getString("maxErrorsNumberTextField_tooltip"))
        self.maxErrorsNumberTFieldDefaultBorder = self.maxErrorsNumberTextField.getBorder(
        )
        self.maxErrorsNumberTextField.getDocument().addDocumentListener(
            ErrNumTextListener(self))

        #layout
        self.updateCBtn.setAlignmentX(Component.LEFT_ALIGNMENT)
        panel1.add(self.updateCBtn)
        panel1.add(Box.createRigidArea(Dimension(0, 15)))
        downloadBtn.setAlignmentX(Component.LEFT_ALIGNMENT)
        panel1.add(downloadBtn)
        panel1.add(Box.createRigidArea(Dimension(0, 15)))
        toolsPanel.setAlignmentX(Component.LEFT_ALIGNMENT)
        panel1.add(toolsPanel)
        panel1.add(Box.createRigidArea(Dimension(0, 15)))
        layersPanel.setAlignmentX(Component.LEFT_ALIGNMENT)
        panel1.add(layersPanel)
        panel1.add(Box.createRigidArea(Dimension(0, 15)))
        maxErrP = JPanel(BorderLayout(5, 0))
        maxErrP.add(JLabel(self.app.strings.getString("max_errors_number")),
                    BorderLayout.LINE_START)
        maxErrP.add(self.maxErrorsNumberTextField, BorderLayout.CENTER)
        p = JPanel(BorderLayout())
        p.add(maxErrP, BorderLayout.PAGE_START)
        p.setAlignmentX(Component.LEFT_ALIGNMENT)
        panel1.add(p)

        self.tabbedPane.addTab(self.app.strings.getString("tab_1_title"), None,
                               panel1, None)

        #2 Tab: favourite zones
        panel2 = JPanel(BorderLayout(5, 15))
        panel2.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7))

        #status
        topPanel = JPanel()
        topPanel.setLayout(BoxLayout(topPanel, BoxLayout.Y_AXIS))
        infoPanel = HtmlPanel(self.app.strings.getString("fav_zones_info"))
        infoPanel.getEditorPane().addHyperlinkListener(self)
        infoPanel.setAlignmentX(Component.LEFT_ALIGNMENT)
        self.favZoneStatusCBtn = JCheckBox(
            self.app.strings.getString("activate_fav_area"),
            actionListener=self)
        self.favZoneStatusCBtn.setToolTipText(
            self.app.strings.getString("activate_fav_area_tooltip"))
        self.favZoneStatusCBtn.setAlignmentX(Component.LEFT_ALIGNMENT)
        topPanel.add(infoPanel)
        topPanel.add(Box.createRigidArea(Dimension(0, 10)))
        topPanel.add(self.favZoneStatusCBtn)
        #table
        self.zonesTable = JTable()
        tableSelectionModel = self.zonesTable.getSelectionModel()
        tableSelectionModel.addListSelectionListener(ZonesTableListener(self))
        columns = [
            "",
            self.app.strings.getString("Type"),
            self.app.strings.getString("Name")
        ]
        tableModel = ZonesTableModel([], columns)
        self.zonesTable.setModel(tableModel)
        self.scrollPane = JScrollPane(self.zonesTable)
        #map
        self.zonesMap = JMapViewer()
        self.zonesMap.setZoomContolsVisible(False)
        self.zonesMap.setMinimumSize(Dimension(100, 200))

        #buttons
        self.removeBtn = JButton(self.app.strings.getString("Remove"),
                                 ImageProvider.get("dialogs", "delete"),
                                 actionPerformed=self.on_removeBtn_clicked)
        self.removeBtn.setToolTipText(
            self.app.strings.getString("remove_tooltip"))
        newBtn = JButton(self.app.strings.getString("New"),
                         ImageProvider.get("dialogs", "add"),
                         actionPerformed=self.on_newBtn_clicked)
        newBtn.setToolTipText(self.app.strings.getString("new_tooltip"))

        #layout
        panel2.add(topPanel, BorderLayout.PAGE_START)
        panel2.add(self.scrollPane, BorderLayout.LINE_START)
        panel2.add(self.zonesMap, BorderLayout.CENTER)
        self.buttonsPanel = JPanel()
        self.buttonsPanel.add(self.removeBtn)
        self.buttonsPanel.add(newBtn)
        panel2.add(self.buttonsPanel, BorderLayout.PAGE_END)

        self.tabbedPane.addTab(self.app.strings.getString("tab_2_title"), None,
                               panel2, None)

        #3 Tab Tools options
        panel3 = JPanel()
        panel3.setLayout(BoxLayout(panel3, BoxLayout.Y_AXIS))
        panel3.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7))
        for tool in self.app.realTools:
            if hasattr(tool, 'prefs'):
                p = JPanel(FlowLayout(FlowLayout.LEFT))
                p.setBorder(BorderFactory.createTitledBorder(tool.title))
                p.add(tool.prefsGui)
                panel3.add(p)

        self.tabbedPane.addTab(self.app.strings.getString("tab_3_title"), None,
                               panel3, None)

        self.add(self.tabbedPane, BorderLayout.CENTER)

        exitPanel = JPanel()
        saveBtn = JButton(self.app.strings.getString("OK"),
                          ImageProvider.get("ok"),
                          actionPerformed=self.on_saveBtn_clicked)
        cancelBtn = JButton(self.app.strings.getString("cancel"),
                            ImageProvider.get("cancel"),
                            actionPerformed=self.on_cancelBtn_clicked)
        saveBtn.setToolTipText(self.app.strings.getString("save_preferences"))
        saveBtn.setAlignmentX(0.5)
        exitPanel.add(saveBtn)
        exitPanel.add(cancelBtn)
        self.add(exitPanel, BorderLayout.PAGE_END)

        self.addWindowListener(self)
        self.pack()

    def windowClosing(self, windowEvent):
        self.on_cancelBtn_clicked()

    def hyperlinkUpdate(self, e):
        if e.getEventType() == HyperlinkEvent.EventType.ACTIVATED:
            OpenBrowser.displayUrl(e.getURL().toString())

    def itemStateChanged(self, e):
        """A ttol has been activated/deactivated.
           Check if at least one tool is on.
        """
        if all(not button.isSelected() for button in self.toolsCBtns):
            JOptionPane.showMessageDialog(
                Main.parent,
                self.app.strings.getString("tools_disabled_warning"),
                self.app.strings.getString("tools_disabled_warning_title"),
                JOptionPane.WARNING_MESSAGE)
            source = e.getItemSelectable()
            source.setSelected(True)

    def actionPerformed(self, e=None):
        """Enable/disable favourite zones panel
        """
        for container in (self.scrollPane, self.buttonsPanel):
            self.enableComponents(container,
                                  self.favZoneStatusCBtn.isSelected())
        if self.favZoneStatusCBtn.isSelected():
            self.check_removeBtn_status()

    def enableComponents(self, container, enable):
        components = container.getComponents()
        for component in components:
            component.setEnabled(enable)
            if isinstance(component, Container):
                self.enableComponents(component, enable)

    def on_downloadBtn_clicked(self, e):
        update_checker.Updater(self.app, "manual")

    def clean_map(self):
        """Remove all rectangles and polygons from the map
        """
        self.zonesMap.removeAllMapRectangles()
        self.zonesMap.removeAllMapPolygons()

    def update_gui_from_preferences(self):
        """Update gui status of preferences frame from config file
        """
        #print "\n- updating Preferences gui"
        onOff = {"on": True, "off": False}
        #1 Tab
        #check for update
        self.updateCBtn.setSelected(onOff[self.app.checkUpdate])

        #tools status, enabled or not
        for toolIndex, tool in enumerate(self.app.realTools):
            if "tool.%s" % tool.name in self.app.properties.keys():
                configstatus = self.app.properties.getProperty("tool.%s" %
                                                               tool.name)
            else:
                configstatus = "on"  # new tool
            self.toolsCBtns[toolIndex].setSelected(onOff[configstatus])

        #layers preferences
        for mode, button in self.layersRBtns.iteritems():
            button.setSelected(mode == self.app.layersMode)

        #max errors number
        self.maxErrorsNumberTextField.setText(str(self.app.maxErrorsNumber))

        #stats panel
        self.app.dlg.update_favourite_zone_indicator()

        #2 Tab
        #favourite area
        self.update_favourite_area_gui_from_preferences()
        self.app.dlg.update_statsPanel_status()

        #3 Tab
        #tools preferences
        for tool in self.app.allTools:
            if hasattr(tool, 'prefs') and tool.prefsGui is not None:
                tool.prefsGui.update_gui(tool.prefs)

    def update_favourite_area_gui_from_preferences(self):
        #status
        self.favZoneStatusCBtn.setSelected(self.app.favouriteZoneStatus)
        #table
        #store zones to a temporary list, used to store changes
        #and save them when preferences dialog is closed
        self.app.tempZones = list(self.app.zones)
        self.zonesTable.getModel().setNumRows(0)
        for zone in self.app.tempZones:
            self.zonesTable.getModel().addRow(
                [zone.country, zone.icon, zone.name])
        if self.app.favZone is not None:
            selectedRow = self.app.tempZones.index(self.app.favZone)
            self.zonesTable.setRowSelectionInterval(selectedRow, selectedRow)
        self.zonesTable.getColumnModel().getColumn(0).setMaxWidth(30)
        self.zonesTable.getColumnModel().getColumn(1).setMaxWidth(50)
        #enable or disable favourite zone buttons
        self.actionPerformed()

### fav area editing buttons ###########################################

    def on_removeBtn_clicked(self, e):
        rowsNum = self.zonesTable.getSelectedRows()
        rowsNum.reverse()
        for rowNum in rowsNum:
            del self.app.tempZones[rowNum]
            self.zonesTable.getModel().removeRow(rowNum)
        if len(self.app.tempZones) != 0:
            if rowNum == 0:
                self.zonesTable.setRowSelectionInterval(0, 0)
            else:
                self.zonesTable.setRowSelectionInterval(rowNum - 1, rowNum - 1)
        self.check_removeBtn_status()

    def check_removeBtn_status(self):
        if self.app.tempZones != [] and len(
                self.zonesTable.getSelectedRows()) != 0:
            self.removeBtn.setEnabled(True)
        else:
            self.removeBtn.setEnabled(False)
            self.clean_map()

    def on_newBtn_clicked(self, e):
        try:
            self.newZoneDialog
        except AttributeError:
            self.newZoneDialog = NewZoneDialog(self.app)
        bbox = self.app.get_frame_bounds()
        self.app.newZone = Zone(self.app,
                                self.app.strings.getString("New_zone"),
                                "rectangle",
                                ",".join(["%0.4f" % x for x in bbox]), "")
        self.newZoneDialog.update_gui_from_preferences()
        self.newZoneDialog.show()

### Exit from preferences ##############################################

    def on_cancelBtn_clicked(self, event=None):
        if hasattr(self, "newZoneDialog") and self.newZoneDialog.isVisible():
            self.newZoneDialog.close_dialog()
        self.dispose()

    def on_saveBtn_clicked(self, event):
        """Read preferences from gui and save them to config.properties
           file
        """
        #print "\n- saving preferences to config file"
        onOff = {True: "on", False: "off"}

        #1 Tab
        #check for update
        self.app.properties.setProperty("check_for_update",
                                        onOff[self.updateCBtn.isSelected()])
        #tools status
        for toolIndex, tool in enumerate(self.app.realTools):
            prop = "tool.%s" % tool.name
            toolCBtn = self.toolsCBtns[toolIndex]
            self.app.properties.setProperty(prop, onOff[toolCBtn.isSelected()])

        #layers preferences
        for mode, button in self.layersRBtns.iteritems():
            if button.isSelected():
                self.app.properties.setProperty("layers_mode", mode)
                break

        #max errors number
        try:
            num = Integer.parseInt(self.maxErrorsNumberTextField.getText())
        except NumberFormatException:
            num = ""
        self.app.properties.setProperty("max_errors_number", str(num))

        #2 Tab
        #Favourite zones
        changes = {
            "new": [z for z in self.app.tempZones if not z in self.app.zones],
            "deleted":
            [z for z in self.app.zones if not z in self.app.tempZones]
        }
        #delete files of removed favourite zones
        for zone in changes["deleted"]:
            f = File(
                File.separator.join([
                    self.app.SCRIPTDIR, "configuration", "favourite_zones",
                    "%s.txt" % zone.name
                ]))
            f.delete()
        #create files for new favourite zones
        for zone in changes["new"]:
            print "\nsave new zone", zone.name
            fileName = File.separator.join([
                self.app.SCRIPTDIR, "configuration", "favourite_zones",
                "%s.txt" % zone.name
            ])
            f = open(fileName, "w")
            zoneData = zone.geomString
            if zone.country != "":
                zoneData += "|" + zone.country
            f.write(zoneData.encode("utf-8"))
            f.close()

        self.app.zones = self.app.tempZones
        if len(self.app.zones) == 0:
            self.app.favZone = None
            self.app.properties.setProperty("favourite_area.name", "")
            self.favZoneStatusCBtn.setSelected(False)
        else:
            if len(self.zonesTable.getSelectedRows()) == 0:
                self.app.favZone = self.app.zones[0]
            else:
                self.app.favZone = self.app.zones[
                    self.zonesTable.getSelectedRows()[0]]
            self.app.properties.setProperty("favourite_area.name",
                                            self.app.favZone.name)
        favZoneStatus = self.favZoneStatusCBtn.isSelected()
        self.app.properties.setProperty("favourite_area.status",
                                        onOff[favZoneStatus])
        self.app.favouriteZoneStatus = favZoneStatus

        #stats panel
        self.app.dlg.update_favourite_zone_indicator()
        self.app.dlg.update_statsPanel_status()

        #3 Tab
        #tools preferences
        for tool in self.app.allTools:
            if hasattr(tool, 'prefs') and tool.prefsGui is not None:
                for pref, value in tool.prefsGui.read_gui().iteritems():
                    prefKey = "tool.%s.%s" % (tool.name, pref)
                    self.app.properties.setProperty(prefKey, value)

        self.app.save_config()
        self.dispose()
Пример #14
0
class PreferencesFrame(JFrame, ActionListener, WindowListener, ItemListener, HyperlinkListener):
    """Dialog with preferences
    """
    def __init__(self, parent, title, app):
        from javax.swing import JCheckBox, JRadioButton, ButtonGroup
        self.app = app
        border = BorderFactory.createEmptyBorder(5, 7, 5, 7)
        self.getContentPane().setBorder(border)
        self.getContentPane().setLayout(BorderLayout(0, 5))
        self.tabbedPane = JTabbedPane()

        #1 Tab: general
        panel1 = JPanel()
        panel1.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7))
        panel1.setLayout(BoxLayout(panel1, BoxLayout.PAGE_AXIS))

        #Checkbutton to enable/disable update check when script starts
        self.updateCBtn = JCheckBox(self.app.strings.getString("updateCBtn"))
        self.updateCBtn.setToolTipText(self.app.strings.getString("updateCBtn_tooltip"))

        #Download tools
        downloadBtn = JButton(self.app.strings.getString("updatesBtn"),
                              ImageProvider.get("dialogs", "refresh"),
                              actionPerformed=self.on_downloadBtn_clicked)
        downloadBtn.setToolTipText(self.app.strings.getString("updatesBtn_tooltip"))

        #Checkbuttons for enabling/disabling tools
        toolsPanel = JPanel(BorderLayout(0, 5))
        title = self.app.strings.getString("enable_disable_tools")
        toolsPanel.setBorder(BorderFactory.createTitledBorder(title))
        infoLbl = JLabel(self.app.strings.getString("JOSM_restart_warning"))
        infoLbl.setFont(infoLbl.getFont().deriveFont(Font.ITALIC))
        toolsPanel.add(infoLbl, BorderLayout.PAGE_START)

        toolsStatusPane = JPanel(GridLayout(len(self.app.realTools), 0))
        self.toolsCBtns = []
        for tool in self.app.realTools:
            toolCBtn = JCheckBox()
            toolCBtn.addItemListener(self)
            toolLbl = JLabel(tool.title, tool.bigIcon, JLabel.LEFT)
            self.toolsCBtns.append(toolCBtn)

            toolPane = JPanel()
            toolPane.setLayout(BoxLayout(toolPane, BoxLayout.X_AXIS))
            toolPane.add(toolCBtn)
            toolPane.add(toolLbl)
            toolsStatusPane.add(toolPane)
        toolsPanel.add(toolsStatusPane, BorderLayout.CENTER)

        #Radiobuttons for enabling/disabling layers when a new one
        #is added
        layersPanel = JPanel(GridLayout(0, 1))
        title = self.app.strings.getString("errors_layers_manager")
        layersPanel.setBorder(BorderFactory.createTitledBorder(title))
        errorLayersLbl = JLabel(self.app.strings.getString("errors_layers_info"))
        errorLayersLbl.setFont(errorLayersLbl.getFont().deriveFont(Font.ITALIC))
        layersPanel.add(errorLayersLbl)
        self.layersRBtns = {}
        group = ButtonGroup()
        for mode in self.app.layersModes:
            layerRBtn = JRadioButton(self.app.strings.getString("%s" % mode))
            group.add(layerRBtn)
            layersPanel.add(layerRBtn)
            self.layersRBtns[mode] = layerRBtn

        #Max number of errors text field
        self.maxErrorsNumberTextField = JTextField()
        self.maxErrorsNumberTextField.setToolTipText(self.app.strings.getString("maxErrorsNumberTextField_tooltip"))
        self.maxErrorsNumberTFieldDefaultBorder = self.maxErrorsNumberTextField.getBorder()
        self.maxErrorsNumberTextField.getDocument().addDocumentListener(ErrNumTextListener(self))

        #layout
        self.updateCBtn.setAlignmentX(Component.LEFT_ALIGNMENT)
        panel1.add(self.updateCBtn)
        panel1.add(Box.createRigidArea(Dimension(0, 15)))
        downloadBtn.setAlignmentX(Component.LEFT_ALIGNMENT)
        panel1.add(downloadBtn)
        panel1.add(Box.createRigidArea(Dimension(0, 15)))
        toolsPanel.setAlignmentX(Component.LEFT_ALIGNMENT)
        panel1.add(toolsPanel)
        panel1.add(Box.createRigidArea(Dimension(0, 15)))
        layersPanel.setAlignmentX(Component.LEFT_ALIGNMENT)
        panel1.add(layersPanel)
        panel1.add(Box.createRigidArea(Dimension(0, 15)))
        maxErrP = JPanel(BorderLayout(5, 0))
        maxErrP.add(JLabel(self.app.strings.getString("max_errors_number")), BorderLayout.LINE_START)
        maxErrP.add(self.maxErrorsNumberTextField, BorderLayout.CENTER)
        p = JPanel(BorderLayout())
        p.add(maxErrP, BorderLayout.PAGE_START)
        p.setAlignmentX(Component.LEFT_ALIGNMENT)
        panel1.add(p)

        self.tabbedPane.addTab(self.app.strings.getString("tab_1_title"),
                          None,
                          panel1,
                          None)

        #2 Tab: favourite zones
        panel2 = JPanel(BorderLayout(5, 15))
        panel2.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7))

        #status
        topPanel = JPanel()
        topPanel.setLayout(BoxLayout(topPanel, BoxLayout.Y_AXIS))
        infoPanel = HtmlPanel(self.app.strings.getString("fav_zones_info"))
        infoPanel.getEditorPane().addHyperlinkListener(self)
        infoPanel.setAlignmentX(Component.LEFT_ALIGNMENT)
        self.favZoneStatusCBtn = JCheckBox(self.app.strings.getString("activate_fav_area"),
                                           actionListener=self)
        self.favZoneStatusCBtn.setToolTipText(self.app.strings.getString("activate_fav_area_tooltip"))
        self.favZoneStatusCBtn.setAlignmentX(Component.LEFT_ALIGNMENT)
        topPanel.add(infoPanel)
        topPanel.add(Box.createRigidArea(Dimension(0, 10)))
        topPanel.add(self.favZoneStatusCBtn)
        #table
        self.zonesTable = JTable()
        tableSelectionModel = self.zonesTable.getSelectionModel()
        tableSelectionModel.addListSelectionListener(ZonesTableListener(self))
        columns = ["",
                   self.app.strings.getString("Type"),
                   self.app.strings.getString("Name")]
        tableModel = ZonesTableModel([], columns)
        self.zonesTable.setModel(tableModel)
        self.scrollPane = JScrollPane(self.zonesTable)
        #map
        self.zonesMap = JMapViewer()
        self.zonesMap.setZoomContolsVisible(False)
        self.zonesMap.setMinimumSize(Dimension(100, 200))

        #buttons
        self.removeBtn = JButton(self.app.strings.getString("Remove"),
                            ImageProvider.get("dialogs", "delete"),
                            actionPerformed=self.on_removeBtn_clicked)
        self.removeBtn.setToolTipText(self.app.strings.getString("remove_tooltip"))
        newBtn = JButton(self.app.strings.getString("New"),
                         ImageProvider.get("dialogs", "add"),
                         actionPerformed=self.on_newBtn_clicked)
        newBtn.setToolTipText(self.app.strings.getString("new_tooltip"))

        #layout
        panel2.add(topPanel, BorderLayout.PAGE_START)
        panel2.add(self.scrollPane, BorderLayout.LINE_START)
        panel2.add(self.zonesMap, BorderLayout.CENTER)
        self.buttonsPanel = JPanel()
        self.buttonsPanel.add(self.removeBtn)
        self.buttonsPanel.add(newBtn)
        panel2.add(self.buttonsPanel, BorderLayout.PAGE_END)

        self.tabbedPane.addTab(self.app.strings.getString("tab_2_title"),
                          None,
                          panel2,
                          None)

        #3 Tab Tools options
        panel3 = JPanel()
        panel3.setLayout(BoxLayout(panel3, BoxLayout.Y_AXIS))
        panel3.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7))
        for tool in self.app.realTools:
            if hasattr(tool, 'prefs'):
                p = JPanel(FlowLayout(FlowLayout.LEFT))
                p.setBorder(BorderFactory.createTitledBorder(tool.title))
                p.add(tool.prefsGui)
                panel3.add(p)

        self.tabbedPane.addTab(self.app.strings.getString("tab_3_title"),
                          None,
                          panel3,
                          None)

        self.add(self.tabbedPane, BorderLayout.CENTER)

        exitPanel = JPanel()
        saveBtn = JButton(self.app.strings.getString("OK"),
                          ImageProvider.get("ok"),
                          actionPerformed=self.on_saveBtn_clicked)
        cancelBtn = JButton(self.app.strings.getString("cancel"),
                            ImageProvider.get("cancel"),
                            actionPerformed=self.on_cancelBtn_clicked)
        saveBtn.setToolTipText(self.app.strings.getString("save_preferences"))
        saveBtn.setAlignmentX(0.5)
        exitPanel.add(saveBtn)
        exitPanel.add(cancelBtn)
        self.add(exitPanel, BorderLayout.PAGE_END)

        self.addWindowListener(self)
        self.pack()

    def windowClosing(self, windowEvent):
        self.on_cancelBtn_clicked()

    def hyperlinkUpdate(self, e):
        if e.getEventType() == HyperlinkEvent.EventType.ACTIVATED:
            OpenBrowser.displayUrl(e.getURL().toString())

    def itemStateChanged(self, e):
        """A ttol has been activated/deactivated.
           Check if at least one tool is on.
        """
        if all(not button.isSelected() for button in self.toolsCBtns):
            JOptionPane.showMessageDialog(
                Main.parent,
                self.app.strings.getString("tools_disabled_warning"),
                self.app.strings.getString("tools_disabled_warning_title"),
                JOptionPane.WARNING_MESSAGE)
            source = e.getItemSelectable()
            source.setSelected(True)

    def actionPerformed(self, e=None):
        """Enable/disable favourite zones panel
        """
        for container in (self.scrollPane, self.buttonsPanel):
            self.enableComponents(container, self.favZoneStatusCBtn.isSelected())
        if self.favZoneStatusCBtn.isSelected():
            self.check_removeBtn_status()

    def enableComponents(self, container, enable):
        components = container.getComponents()
        for component in components:
            component.setEnabled(enable)
            if isinstance(component, Container):
                self.enableComponents(component, enable)

    def on_downloadBtn_clicked(self, e):
        update_checker.Updater(self.app, "manual")

    def clean_map(self):
        """Remove all rectangles and polygons from the map
        """
        self.zonesMap.removeAllMapRectangles()
        self.zonesMap.removeAllMapPolygons()

    def update_gui_from_preferences(self):
        """Update gui status of preferences frame from config file
        """
        #print "\n- updating Preferences gui"
        onOff = {"on": True, "off": False}
        #1 Tab
        #check for update
        self.updateCBtn.setSelected(onOff[self.app.checkUpdate])

        #tools status, enabled or not
        for toolIndex, tool in enumerate(self.app.realTools):
            if "tool.%s" % tool.name in self.app.properties.keys():
                configstatus = self.app.properties.getProperty("tool.%s" % tool.name)
            else:
                configstatus = "on"     # new tool
            self.toolsCBtns[toolIndex].setSelected(onOff[configstatus])

        #layers preferences
        for mode, button in self.layersRBtns.iteritems():
            button.setSelected(mode == self.app.layersMode)

        #max errors number
        self.maxErrorsNumberTextField.setText(str(self.app.maxErrorsNumber))

        #stats panel
        self.app.dlg.update_favourite_zone_indicator()

        #2 Tab
        #favourite area
        self.update_favourite_area_gui_from_preferences()
        self.app.dlg.update_statsPanel_status()

        #3 Tab
        #tools preferences
        for tool in self.app.allTools:
            if hasattr(tool, 'prefs') and tool.prefsGui is not None:
                tool.prefsGui.update_gui(tool.prefs)

    def update_favourite_area_gui_from_preferences(self):
        #status
        self.favZoneStatusCBtn.setSelected(self.app.favouriteZoneStatus)
        #table
        #store zones to a temporary list, used to store changes
        #and save them when preferences dialog is closed
        self.app.tempZones = list(self.app.zones)
        self.zonesTable.getModel().setNumRows(0)
        for zone in self.app.tempZones:
            self.zonesTable.getModel().addRow([zone.country,
                                               zone.icon,
                                               zone.name])
        if self.app.favZone is not None:
            selectedRow = self.app.tempZones.index(self.app.favZone)
            self.zonesTable.setRowSelectionInterval(selectedRow, selectedRow)
        self.zonesTable.getColumnModel().getColumn(0).setMaxWidth(30)
        self.zonesTable.getColumnModel().getColumn(1).setMaxWidth(50)
        #enable or disable favourite zone buttons
        self.actionPerformed()

### fav area editing buttons ###########################################
    def on_removeBtn_clicked(self, e):
        rowsNum = self.zonesTable.getSelectedRows()
        rowsNum.reverse()
        for rowNum in rowsNum:
            del self.app.tempZones[rowNum]
            self.zonesTable.getModel().removeRow(rowNum)
        if len(self.app.tempZones) != 0:
            if rowNum == 0:
                self.zonesTable.setRowSelectionInterval(0, 0)
            else:
                self.zonesTable.setRowSelectionInterval(rowNum - 1, rowNum - 1)
        self.check_removeBtn_status()

    def check_removeBtn_status(self):
        if self.app.tempZones != [] and len(self.zonesTable.getSelectedRows()) != 0:
            self.removeBtn.setEnabled(True)
        else:
            self.removeBtn.setEnabled(False)
            self.clean_map()

    def on_newBtn_clicked(self, e):
        try:
            self.newZoneDialog
        except AttributeError:
            self.newZoneDialog = NewZoneDialog(self.app)
        bbox = self.app.get_frame_bounds()
        self.app.newZone = Zone(self.app,
                                self.app.strings.getString("New_zone"),
                                "rectangle",
                                ",".join(["%0.4f" % x for x in bbox]),
                                "")
        self.newZoneDialog.update_gui_from_preferences()
        self.newZoneDialog.show()

### Exit from preferences ##############################################
    def on_cancelBtn_clicked(self, event=None):
        if hasattr(self, "newZoneDialog") and self.newZoneDialog.isVisible():
            self.newZoneDialog.close_dialog()
        self.dispose()

    def on_saveBtn_clicked(self, event):
        """Read preferences from gui and save them to config.properties
           file
        """
        #print "\n- saving preferences to config file"
        onOff = {True: "on", False: "off"}

        #1 Tab
        #check for update
        self.app.properties.setProperty("check_for_update",
                                        onOff[self.updateCBtn.isSelected()])
        #tools status
        for toolIndex, tool in enumerate(self.app.realTools):
            prop = "tool.%s" % tool.name
            toolCBtn = self.toolsCBtns[toolIndex]
            self.app.properties.setProperty(prop,
                                            onOff[toolCBtn.isSelected()])

        #layers preferences
        for mode, button in self.layersRBtns.iteritems():
            if button.isSelected():
                self.app.properties.setProperty("layers_mode", mode)
                break

        #max errors number
        try:
            num = Integer.parseInt(self.maxErrorsNumberTextField.getText())
        except NumberFormatException:
            num = ""
        self.app.properties.setProperty("max_errors_number", str(num))

        #2 Tab
        #Favourite zones
        changes = {"new": [z for z in self.app.tempZones if not z in self.app.zones],
                   "deleted": [z for z in self.app.zones if not z in self.app.tempZones]}
        #delete files of removed favourite zones
        for zone in changes["deleted"]:
            f = File(File.separator.join([self.app.SCRIPTDIR,
                                          "configuration",
                                          "favourite_zones",
                                          "%s.txt" % zone.name]))
            f.delete()
        #create files for new favourite zones
        for zone in changes["new"]:
            print "\nsave new zone", zone.name
            fileName = File.separator.join([self.app.SCRIPTDIR,
                                            "configuration",
                                            "favourite_zones",
                                            "%s.txt" % zone.name])
            f = open(fileName, "w")
            zoneData = zone.geomString
            if zone.country != "":
                zoneData += "|" + zone.country
            f.write(zoneData.encode("utf-8"))
            f.close()

        self.app.zones = self.app.tempZones
        if len(self.app.zones) == 0:
            self.app.favZone = None
            self.app.properties.setProperty("favourite_area.name",
                                            "")
            self.favZoneStatusCBtn.setSelected(False)
        else:
            if len(self.zonesTable.getSelectedRows()) == 0:
                self.app.favZone = self.app.zones[0]
            else:
                self.app.favZone = self.app.zones[self.zonesTable.getSelectedRows()[0]]
            self.app.properties.setProperty("favourite_area.name",
                                            self.app.favZone.name)
        favZoneStatus = self.favZoneStatusCBtn.isSelected()
        self.app.properties.setProperty("favourite_area.status", onOff[favZoneStatus])
        self.app.favouriteZoneStatus = favZoneStatus

        #stats panel
        self.app.dlg.update_favourite_zone_indicator()
        self.app.dlg.update_statsPanel_status()

        #3 Tab
        #tools preferences
        for tool in self.app.allTools:
            if hasattr(tool, 'prefs') and tool.prefsGui is not None:
                for pref, value in tool.prefsGui.read_gui().iteritems():
                    prefKey = "tool.%s.%s" % (tool.name, pref)
                    self.app.properties.setProperty(prefKey, value)

        self.app.save_config()
        self.dispose()
Пример #15
0
class SCL_Scan_Data_CleanUp_Controller:
    def __init__(self, scl_long_tuneup_controller):
        #--- scl_long_tuneup_controller the parent document for all SCL tune up controllers
        self.scl_long_tuneup_controller = scl_long_tuneup_controller
        #----etched border
        etched_border = BorderFactory.createEtchedBorder()
        #----main panel
        self.main_panel = JPanel(BorderLayout())
        #------top params panel-----------------------
        right_info_panel = JPanel(BorderLayout())
        right_top_control_panel = JPanel(FlowLayout(FlowLayout.LEFT, 1, 1))
        analysis_button = JButton("Find BAD Points")
        analysis_button.addActionListener(Analyze_Data_Button_Listener(self))
        right_top_control_panel.add(analysis_button)
        #------ maximal bpm phase error after the scan
        max_phase_err_lbl = JLabel("Max BPM Phase Err = ", JLabel.RIGHT)
        self.max_phase_err_text = DoubleInputTextField(10.0,
                                                       DecimalFormat("##.#"),
                                                       5)
        right_top_control_panel.add(max_phase_err_lbl)
        right_top_control_panel.add(self.max_phase_err_text)
        #-----------------------------------------------
        right_bottom_control_panel = JPanel(BorderLayout())
        right_bottom_control_panel0 = JPanel(BorderLayout())
        right_bottom_control_panel1 = JPanel(FlowLayout(FlowLayout.LEFT, 1, 1))
        right_bottom_control_panel.add(right_bottom_control_panel0,
                                       BorderLayout.NORTH)
        right_bottom_control_panel.add(right_bottom_control_panel1,
                                       BorderLayout.SOUTH)
        statistics_of_errors_lbl = JLabel("Statistics:", JLabel.RIGHT)
        self.statistics_of_errors_txt = JTextField()
        right_bottom_control_panel0.add(statistics_of_errors_lbl,
                                        BorderLayout.WEST)
        right_bottom_control_panel0.add(self.statistics_of_errors_txt,
                                        BorderLayout.CENTER)
        remove_worst_points_button = JButton("Remove Worst Points")
        remove_worst_points_button.addActionListener(
            CleanUp_Worst_Phase_Points_Data_Button_Listener(self))
        remove_all_bad_bpms_button = JButton("Remove All Bad BPMs")
        remove_all_bad_bpms_button.addActionListener(
            CleanUp_All_Bad_BPMs_Button_Listener(self))
        right_bottom_control_panel1.add(remove_worst_points_button)
        right_bottom_control_panel1.add(remove_all_bad_bpms_button)
        #-----------------------------------------------
        right_tables_panel = JPanel(GridLayout(1, 3))
        right_info_panel.add(right_top_control_panel, BorderLayout.NORTH)
        right_info_panel.add(right_tables_panel, BorderLayout.CENTER)
        right_info_panel.add(right_bottom_control_panel, BorderLayout.SOUTH)
        self.main_panel.add(right_info_panel, BorderLayout.EAST)
        #------cavities scan table panel --------
        self.bad_bpms_amp_phase_graphs_panel = Bad_BPMs_Amp_Phase_Graphs_Panel(
            self)
        self.main_panel.add(self.bad_bpms_amp_phase_graphs_panel,
                            BorderLayout.CENTER)
        #------ let's make tables for a list of cavities, bpms, and bad points indexes
        self.cavs_with_bad_data_table_model = Cavs_with_Bad_PhaseScan_Table_Model(
            self)
        self.cavs_table = JTable(self.cavs_with_bad_data_table_model)
        self.cavs_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
        self.cavs_table.setFillsViewportHeight(true)
        self.cavs_table.setPreferredScrollableViewportSize(Dimension(180, 300))
        self.cavs_table.getSelectionModel().addListSelectionListener(
            Cavs_Table_Selection_Listener(self))
        self.bpms_table_model = Bad_PhaseScan_BPMs_Table_Model(self)
        self.bpms_table = JTable(self.bpms_table_model)
        self.bpms_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
        self.bpms_table.setFillsViewportHeight(true)
        self.bpms_table.getSelectionModel().addListSelectionListener(
            BPMs_Table_Selection_Listener(self))
        self.bpms_table.setPreferredScrollableViewportSize(Dimension(180, 300))
        self.points_table_model = Bad_Points_Table_Model(self)
        self.points_table = JTable(self.points_table_model)
        self.points_table.setFillsViewportHeight(true)
        self.points_table.setPreferredScrollableViewportSize(
            Dimension(180, 300))
        #----- set scroll panes
        scrl_panel0 = JScrollPane(self.cavs_table)
        scrl_panel1 = JScrollPane(self.bpms_table)
        scrl_panel2 = JScrollPane(self.points_table)
        scrl_panel0.setBorder(
            BorderFactory.createTitledBorder(etched_border, "Cavs"))
        scrl_panel1.setBorder(
            BorderFactory.createTitledBorder(etched_border, "BPMs"))
        scrl_panel2.setBorder(
            BorderFactory.createTitledBorder(etched_border, "Bad Points"))
        right_tables_panel.setBorder(etched_border)
        right_tables_panel.add(scrl_panel0)
        right_tables_panel.add(scrl_panel1)
        right_tables_panel.add(scrl_panel2)
        #----- dictionary with the bad data self.cavs_to_bpm_dict[cav_wrapper] = [bpm_wrappers,bpms_to_points_dict]
        self.cavs_to_bpm_dict = {}
        #----- arrays with bad data for the tables
        self.cavs_with_bad_data_arr = []
        self.bpms_arr = []
        self.points_arr = []

    def cleanUp_All_Bad_BPMs_Method(self):
        scl_long_tuneup_controller = self.scl_long_tuneup_controller
        cav_wrappers = scl_long_tuneup_controller.cav_wrappers[1:]
        #----- dictionary with the bad data
        cavs_to_bpm_dict = self.cavs_to_bpm_dict
        #----- let's go through all cavities to find the bad bpms
        for cav_wrapper in cav_wrappers:
            if (cav_wrapper.isGood and cav_wrapper.isMeasured):
                if (cavs_to_bpm_dict.has_key(cav_wrapper)):
                    [bpm_wrappers,
                     bpms_to_points_dict] = cavs_to_bpm_dict[cav_wrapper]
                    for bpm_wrapper_bad in bpm_wrappers:
                        for bpm_ind in range(len(cav_wrapper.bpm_wrappers)):
                            bpm_wrapper = cav_wrapper.bpm_wrappers[bpm_ind]
                            if (bpm_wrapper_bad == bpm_wrapper):
                                cav_wrapper.bpm_wrappers_useInAmpBPMs[
                                    bpm_ind] = false
                                cav_wrapper.bpm_wrappers_useInPhaseAnalysis[
                                    bpm_ind] = false

    def cleanUp_Worst_Phase_Points_Data_Method(self):
        scl_long_tuneup_controller = self.scl_long_tuneup_controller
        cav_wrappers = scl_long_tuneup_controller.cav_wrappers[1:]
        #----- dictionary with the bad data
        cavs_to_bpm_dict = self.cavs_to_bpm_dict
        #----- let's go through all cavities to find the worst phase scan points
        #----- worst points means maximal number of bad bpms with it
        n_total_removed_points = 0
        for cav_wrapper in cav_wrappers:
            if (cav_wrapper.isGood and cav_wrapper.isMeasured):
                if (cavs_to_bpm_dict.has_key(cav_wrapper)):
                    [bpm_wrappers,
                     bpms_to_points_dict] = cavs_to_bpm_dict[cav_wrapper]
                    #----- numb_of_points_dict[point_scan_ind] = [bpm1,...]
                    numb_of_points_dict = {}
                    for bpm_wrapper in bpm_wrappers:
                        bad_points_arr = bpms_to_points_dict[bpm_wrapper]
                        for [ind, x, y] in bad_points_arr:
                            if (numb_of_points_dict.has_key(ind)):
                                numb_of_points_dict[ind].append(bpm_wrapper)
                            else:
                                numb_of_points_dict[ind] = [
                                    bpm_wrapper,
                                ]
                    max_bpms_ind = -1
                    max_numb_of_bpms = 0
                    for ind in numb_of_points_dict.keys():
                        n_bpms = len(numb_of_points_dict[ind])
                        if (n_bpms > max_numb_of_bpms):
                            max_bpms_ind = ind
                    if (max_bpms_ind >= 0):
                        #---- the phase scan data with this index should be removed
                        n_bpms = len(numb_of_points_dict[max_bpms_ind])
                        if (n_bpms > 1):
                            n_total_removed_points += n_bpms
                            gd = cav_wrapper.phaseDiffPlot
                            gd.removePoint(max_bpms_ind)
                            for bpm_wrapper in cav_wrapper.bpm_wrappers:
                                (graphDataAmp, graphDataPhase
                                 ) = cav_wrapper.getAmpPhaseGraphs(bpm_wrapper)
                                if (graphDataAmp != null):
                                    graphDataAmp.removePoint(max_bpms_ind)
                                if (graphDataPhase != null):
                                    graphDataPhase.removePoint(max_bpms_ind)
                            #print "debug cav=",cav_wrapper.alias," n bpms=",n_bpms
        #print "debug 	n_total_removed_points=",n_total_removed_points

    def analyze_Data_Method(self):
        scl_long_tuneup_controller = self.scl_long_tuneup_controller
        max_phase_diff0 = self.max_phase_err_text.getValue()
        cav_wrappers = scl_long_tuneup_controller.cav_wrappers[1:]
        #----- dictionary with the bad data
        self.cavs_to_bpm_dict = {}
        cavs_to_bpm_dict = self.cavs_to_bpm_dict
        #----- arrays with bad data for the tables
        self.cavs_with_bad_data_arr = []
        self.bpms_arr = []
        self.points_arr = []
        #---- data analysis for bad points
        total_nPoints = 0
        for cav_wrapper in cav_wrappers:
            if (cav_wrapper.isGood and cav_wrapper.isMeasured):
                bpm_wrapper0 = cav_wrapper.bpm_wrapper0
                bpm_wrapper1 = cav_wrapper.bpm_wrapper1
                pos0 = bpm_wrapper0.pos
                pos1 = bpm_wrapper1.pos
                phaseDiffPlot = cav_wrapper.phaseDiffPlot
                (graphDataAmp0, graphDataPhase0
                 ) = cav_wrapper.bpm_amp_phase_dict[bpm_wrapper0]
                if (phaseDiffPlot.getNumbOfPoints() == 0): continue
                for bpm_wrapper_ind in range(len(cav_wrapper.bpm_wrappers)):
                    bpm_wrapper = cav_wrapper.bpm_wrappers[bpm_wrapper_ind]
                    pos = bpm_wrapper.pos
                    if (pos < pos0): continue
                    pos_coeff = (pos - pos0) / (pos1 - pos0)
                    max_phase_diff = max_phase_diff0
                    if (pos_coeff >= 1.0):
                        max_phase_diff = pos_coeff * max_phase_diff0
                    if (cav_wrapper.
                            bpm_wrappers_useInPhaseAnalysis[bpm_wrapper_ind]):
                        (graphDataAmp, graphDataPhase
                         ) = cav_wrapper.bpm_amp_phase_dict[bpm_wrapper]
                        nPoints = phaseDiffPlot.getNumbOfPoints()
                        bpm_phase_delta = graphDataPhase.getY(
                            nPoints - 1) - graphDataPhase0.getY(
                                nPoints - 1
                            ) - pos_coeff * phaseDiffPlot.getY(nPoints - 1)
                        bad_points_arr = []
                        for ind in range(phaseDiffPlot.getNumbOfPoints()):
                            total_nPoints += 1
                            y = graphDataPhase.getY(
                                ind) - graphDataPhase0.getY(
                                    ind) - pos_coeff * phaseDiffPlot.getY(
                                        ind) - bpm_phase_delta
                            y = makePhaseNear(y, 0.)
                            if (abs(y) > max_phase_diff):
                                bad_points_arr.append(
                                    [ind, graphDataPhase.getX(ind), y])
                        if (len(bad_points_arr) > 0):
                            if (not cavs_to_bpm_dict.has_key(cav_wrapper)):
                                cavs_to_bpm_dict[cav_wrapper] = [[], {}]
                            [bpm_wrappers, bpms_to_points_dict
                             ] = cavs_to_bpm_dict[cav_wrapper]
                            bpm_wrappers.append(bpm_wrapper)
                            bpms_to_points_dict[bpm_wrapper] = bad_points_arr
        for cav_wrapper in cav_wrappers:
            if (cavs_to_bpm_dict.has_key(cav_wrapper)):
                self.cavs_with_bad_data_arr.append(cav_wrapper)
        #--------------------------------------------------------------------
        nCavs = 0
        nBPMs = 0
        nPoints = 0
        for cav_wrapper in self.cavs_with_bad_data_arr:
            [bpm_wrappers, bpms_to_points_dict] = cavs_to_bpm_dict[cav_wrapper]
            nCavs += 1
            nBPMs += len(bpm_wrappers)
            for bpm_wrapper in bpm_wrappers:
                points_arr = bpms_to_points_dict[bpm_wrapper]
                nPoints += len(points_arr)
        st = "N Bad:  Cavs= " + str(nCavs) + "  BPMs= " + str(
            nBPMs) + "  Phase Points=" + str(nPoints) + "/" + str(
                total_nPoints)
        self.statistics_of_errors_txt.setText(st)
        self.cavs_table.getModel().fireTableDataChanged()
        self.bpms_table.getModel().fireTableDataChanged()
        self.points_table.getModel().fireTableDataChanged()
        nCavs = len(self.cavs_with_bad_data_arr)
Пример #16
0
class BurpExtender(IBurpExtender, IContextMenuFactory, ITab, ComponentListener,
                   ActionListener, MouseAdapter):
    # contains the messages to show in the messages table
    _table_data = []

    # contains the messages to translate
    _messages = []

    # used to keep track when to refresh the table
    _reload_table = False

    _sql_file = None

    def registerExtenderCallbacks(self, callbacks):

        self._panel = JPanel()
        self._panel.setLayout(BorderLayout())
        #self._panel.setSize(400,400)

        # sourrounding try\except because Burp is not giving enough info
        try:

            # creating all the UI elements
            # create the split pane
            self._split_pane_horizontal = JSplitPane(
                JSplitPane.HORIZONTAL_SPLIT)
            self._split_panel_vertical = JSplitPane(JSplitPane.VERTICAL_SPLIT)

            # create panels
            self._panel_top = JPanel()
            self._panel_top.setLayout(BorderLayout())
            self._panel_bottom = JPanel()
            self._panel_bottom.setLayout(BorderLayout())
            self._panel_right = JPanel()
            self._panel_right.setLayout(BorderLayout())
            self._panel_request = JPanel()
            self._panel_request.setLayout(BorderLayout())
            self._panel_response = JPanel()
            self._panel_response.setLayout(BorderLayout())

            # create the tabbed pane used to show request\response
            self._tabbed_pane = JTabbedPane(JTabbedPane.TOP)

            # create the tabbed pane used to show aslan++\concretization file
            self._tabbed_pane_editor = JTabbedPane(JTabbedPane.TOP)

            # create the bottom command for selecting the SQL file and
            # generating the model
            self._button_generate = JButton(
                'Generate!', actionPerformed=self._generate_model)
            self._button_save = JButton('Save',
                                        actionPerformed=self._save_model)
            self._button_select_sql = JButton(
                'Select SQL', actionPerformed=self._select_sql_file)
            self._text_field_sql_file = JTextField(20)

            self._panel_bottom_commands = JPanel()
            layout = GroupLayout(self._panel_bottom_commands)
            layout.setAutoCreateGaps(True)
            layout.setAutoCreateContainerGaps(True)
            seq_layout = layout.createSequentialGroup()
            seq_layout.addComponent(self._text_field_sql_file)
            seq_layout.addComponent(self._button_select_sql)
            seq_layout.addComponent(self._button_generate)
            seq_layout.addComponent(self._button_save)
            layout.setHorizontalGroup(seq_layout)

            # create the message editors that will be used to show request and response
            self._message_editor_request = callbacks.createMessageEditor(
                None, True)
            self._message_editor_response = callbacks.createMessageEditor(
                None, True)

            # create the table that will be used to show the messages selected for
            # the translation

            self._columns_names = ('Host', 'Method', 'URL')
            dataModel = NonEditableModel(self._table_data, self._columns_names)
            self._table = JTable(dataModel)
            self._scrollPane = JScrollPane()
            self._scrollPane.getViewport().setView((self._table))

            popmenu = JPopupMenu()
            delete_item = JMenuItem("Delete")
            delete_item.addActionListener(self)
            popmenu.add(delete_item)
            self._table.setComponentPopupMenu(popmenu)
            self._table.addMouseListener(self)

            # add all the elements
            self._panel_request.add(
                self._message_editor_request.getComponent())
            self._panel_response.add(
                self._message_editor_response.getComponent())

            self._tabbed_pane.addTab("Request", self._panel_request)
            self._tabbed_pane.addTab("Response", self._panel_response)

            self._panel_top.add(self._scrollPane, BorderLayout.CENTER)

            self._panel_bottom.add(self._tabbed_pane, BorderLayout.CENTER)
            scroll = JScrollPane(self._panel_bottom)

            self._panel_right.add(self._tabbed_pane_editor,
                                  BorderLayout.CENTER)
            self._panel_right.add(self._panel_bottom_commands,
                                  BorderLayout.PAGE_END)

            self._split_panel_vertical.setTopComponent(self._panel_top)
            self._split_panel_vertical.setBottomComponent(scroll)
            self._split_pane_horizontal.setLeftComponent(
                self._split_panel_vertical)
            self._split_pane_horizontal.setRightComponent(self._panel_right)

            self._panel.addComponentListener(self)
            self._panel.add(self._split_pane_horizontal)

            self._callbacks = callbacks
            callbacks.setExtensionName("WAFEx")
            callbacks.addSuiteTab(self)
            callbacks.registerContextMenuFactory(self)
        except Exception as e:
            exc_type, exc_obj, exc_tb = sys.exc_info()
            fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
            print(exc_type, fname, exc_tb.tb_lineno)

    def getTabCaption(self):
        return "WAFEx"

    def getUiComponent(self):
        try:
            Platform.runLater(EditorTabUI(self))
            return self._panel
        except Exception as e:
            exc_type, exc_obj, exc_tb = sys.exc_info()
            fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
            print(exc_type, fname, exc_tb.tb_lineno)

    def componentShown(self, e):
        self._split_pane_horizontal.setDividerLocation(0.25)
        # populate the table with the selected requests\response
        try:
            if self._reload_table:
                print("reload")
                self._table_data = [
                ]  # empty _table_data (not too cool but quick)
                for c in self._messages:
                    msg = c[0]
                    http_request = converter._byte_array_to_string(
                        msg.getRequest())
                    request_parser = HttpParser()
                    request_parser.execute(http_request, len(http_request))

                    host = msg.getHttpService().getHost()
                    page = request_parser.get_url()
                    method = request_parser.get_method()

                    tmp = [host, method, page]
                    self._table_data += [tmp]
                self._table.getModel().setDataVector(self._table_data,
                                                     self._columns_names)
                self._reload_table = False
        except Exception as e:
            print(e)

    def componentHidden(self, e):
        return

    def componentMoved(self, e):
        return

    def componentResized(self, e):
        self._split_pane_horizontal.setDividerLocation(0.25)

    def createMenuItems(self, invocation):
        ret = []
        try:
            if (invocation.getInvocationContext() ==
                    invocation.CONTEXT_TARGET_SITE_MAP_TABLE):
                menu = JMenuItem("Send to WAFEx")
                messages = invocation.getSelectedMessages()

                def listener(e):
                    """ Generates a new WAFEx model. """
                    #self._generateWAFExModel(messages)
                    self._addToGeneration(messages)

                menu.addActionListener(listener)
                ret.append(menu)
        except Exception as e:
            print(e)
        return ret

    def mouseClicked(self, e):
        """ Positions the Aslan++ editor to the selected request position. """
        try:
            index = self._table.getSelectedRow()
            c = self._messages[index]
            print(len(c))
            message = c[0]
            tag = c[1]
            self._message_editor_request.setMessage(message.getRequest(), True)
            self._message_editor_response.setMessage(message.getResponse(),
                                                     False)
            if tag != None:
                document = self._jfxp_aslanpp._editor.getText()
                start, end = self._search_tag_position(tag, document)
                self._jfxp_aslanpp._editor.moveTo(start)
                self._jfxp_aslanpp._editor.selectRange(start, end)
                self._jfxp_aslanpp._editor.requestFollowCaret()
                self._jfxp_aslanpp._editor.requestFocus()
        except Exception as e:
            print(e)

    def actionPerformed(self, e):
        """ Performs the delete action. """
        try:
            index = self._table.getSelectedRow()
            del self._table_data[index]
            del self._messages[index]
            self._table.getModel().setDataVector(self._table_data,
                                                 self._columns_names)
        except Exception as e:
            print(e)

    def _search_tag_position(self, tag, text):
        """ Searches for a particular tag in a given text and return its position. """
        pattern = self._search_pattern.format(tag)
        for m in re.finditer(pattern, text):
            return m.start(), m.end()

    def _save_model(self, e):
        """ Saves the current Aslan++ model and concretization file. """
        try:
            chooseFile = JFileChooser()
            filter_ = FileNameExtensionFilter("txt files", ["txt"])
            chooseFile.addChoosableFileFilter(filter_)

            ret = chooseFile.showDialog(self._panel, "Choose file")

            if ret == JFileChooser.APPROVE_OPTION:
                self._model_name = chooseFile.getSelectedFile().getPath()
                with open("{}.aslan++".format(self._model_name), "w") as f:
                    skeleton = self._jfxp_aslanpp._editor.getText()
                    skeleton = skeleton.replace("@filename",
                                                basename(self._model_name))
                    f.write(skeleton)
                print("model created")

                with open("{}.txt".format(self._model_name), "w") as f:
                    f.write(self._jfxp_concretization._editor.getText())

        except Exception as e:
            print(e)

    def _select_sql_file(self, e):
        """ Shows a JFileChooser dialog to select the SQL file to use for creating
        the model. """
        try:
            chooseFile = JFileChooser()
            filter_ = FileNameExtensionFilter("txt files", ["txt"])
            chooseFile.addChoosableFileFilter(filter_)

            ret = chooseFile.showDialog(self._panel, "Choose file")

            if ret == JFileChooser.APPROVE_OPTION:
                self._sql_file = chooseFile.getSelectedFile().getPath()
            else:
                self._sql_file = None
            self._text_field_sql_file.setText("" + self._sql_file)
        except Exception as e:
            print(e)

    def _addToGeneration(self, messages):
        for msg in messages:
            self._messages += [[msg, None]]
        self._reload_table = True

    def _generate_model(self, e):
        if len(self._messages) <= 0:
            frame = JFrame("Error")
            JOptionPane.showMessageDialog(frame, "No messages!", "Error",
                                          JOptionPane.ERROR_MESSAGE)
            return
        if self._sql_file == None:
            frame = JFrame("Error")
            replay = JOptionPane.showConfirmDialog(
                frame, "No SQL file selected!\nDo you want to continue?",
                "Info", JOptionPane.YES_NO_OPTION)
            if replay == JOptionPane.NO_OPTION:
                return

        # create a new AslanppModel
        model = AslanppModel()
        # save _sql_file
        model._sql_file = self._sql_file

        for c in self._messages:
            # from byte to char Request and Response
            # for some reason b can be a negative value causing a crash
            # so I put a check to ensure b is in the right range
            msg = c[0]
            if msg.getRequest() == None or msg.getResponse() == None:
                # do not convert empty messages
                continue
            http_request = "".join(
                chr(b) for b in msg.getRequest() if b >= 0 and b <= 256)
            http_response = "".join(
                chr(b) for b in msg.getResponse() if b >= 0 and b <= 256)
            protocol = msg.getHttpService().getProtocol()
            # save the tag number generate by _parseHttpRequestResponse in the _messages array
            c[1] = converter._parseHttpRequestResponse(model, http_request,
                                                       http_response, protocol)

        # generate the ASLan++ code
        self._model, self._concrete = converter._generateWAFExModel(model)
        Platform.runLater(
            UpdateEditor(self._jfxp_aslanpp._editor,
                         self._jfxp_concretization._editor, self._model,
                         self._concrete))
Пример #17
0
class LINAC_SetUp_Controller:
	def __init__(self,linac_wizard_document):
		#--- linac_wizard_document the parent document for all controllers
		self.linac_wizard_document = linac_wizard_document		
		self.main_panel = JPanel(BorderLayout())
		#----etched border
		etched_border = BorderFactory.createEtchedBorder()		
		#------tables with Seq. names and button
		tables_panel = JPanel(BorderLayout())
		tables_panel.setBorder(etched_border)
		self.first_table = JTable(WS_Records_Table_Model("First "))
		self.last_table = JTable(WS_Records_Table_Model("Last "))
		self.first_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
		self.last_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
		self.first_table.setFillsViewportHeight(true)
		self.last_table.setFillsViewportHeight(true)
		tables01_panel = JPanel(BorderLayout())
		scrl_panel0 = JScrollPane(self.first_table)
		scrl_panel1 = JScrollPane(self.last_table)
		#tables01_panel.add(JScrollPane(self.first_table),BorderLayout.WEST)
		#tables01_panel.add(JScrollPane(self.last_table),BorderLayout.EAST)
		self.first_table.getCellRenderer(0,0).setHorizontalAlignment(JLabel.CENTER)
		self.last_table.getCellRenderer(0,0).setHorizontalAlignment(JLabel.CENTER)
		self.first_table.setPreferredScrollableViewportSize(Dimension(120,300))
		self.last_table.setPreferredScrollableViewportSize(Dimension(120,300))
		tables01_panel.add(scrl_panel0,BorderLayout.WEST)
		tables01_panel.add(scrl_panel1,BorderLayout.EAST)	
		tables_button_panel = JPanel(BorderLayout())
		tables_button_panel.add(tables01_panel,BorderLayout.WEST)
		seq_button_panel = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		seq_set_button = JButton(" Set ComboSequence ")	
		seq_button_panel.add(seq_set_button)
		tables_button_panel.add(seq_button_panel,BorderLayout.SOUTH)
		tables_panel.add(tables_button_panel,BorderLayout.NORTH)
		self.main_panel.add(tables_panel,BorderLayout.WEST)
		#--------central panel-------
		cav_amp_phase_button = JButton(" Read Cavities Amp.&Phases from Ext. File ")	
		cav_info_from_scl_tuneup_button = JButton("Get SCL Cav. Amp.&Phases from SCL Long. TuneUp")	
		new_accelerator_button = JButton(" Setup a New Accelerator File ")
		center_buttons_panel0 = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		center_buttons_panel0.add(cav_amp_phase_button)
		center_buttons_panel1 = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		center_buttons_panel1.add(cav_info_from_scl_tuneup_button)			
		center_buttons_panel2 = JPanel(FlowLayout(FlowLayout.CENTER,5,5))
		center_buttons_panel2.add(new_accelerator_button)	
		center_buttons_panel = JPanel(GridLayout(3,1))
		center_buttons_panel.add(center_buttons_panel0)
		center_buttons_panel.add(center_buttons_panel1)
		center_buttons_panel.add(center_buttons_panel2)
		center_panel = JPanel(BorderLayout())		
		center_panel.add(center_buttons_panel,BorderLayout.NORTH)
		self.main_panel.add(center_panel,BorderLayout.CENTER)
		#---------add actions listeners
		seq_set_button.addActionListener(Make_Sequence_Listener(self))
		cav_amp_phase_button.addActionListener(Read_Cav_Amp_Phase_Dict_Listener(self))
		cav_info_from_scl_tuneup_button.addActionListener(Get_SCL_Cav_Amp_Phase_Listener(self))
		new_accelerator_button.addActionListener(SetUp_New_Accelerator_Listener(self))	
		
	def getMainPanel(self):
		return self.main_panel
		
	def setSelectedSequences(self,first_seq_name,last_seq_name):
		index0 = self.first_table.getModel().accSeqName_arr.index(first_seq_name)
		index1 = self.last_table.getModel().accSeqName_arr.index(last_seq_name)
		self.first_table.setRowSelectionInterval(index0,index0)
		self.last_table.setRowSelectionInterval(index1,index1)
		
	def getSelectedSequencesNames(self):
		first_table = self.first_table
		index0 = first_table.getSelectedRow()
		last_table = self.last_table
		index1 = last_table.getSelectedRow()
		if(index0 < 0 or index1 < 0): return []
		seq_names = []
		if(index0 == index1):
			seq_names.append(first_table.getModel().accSeqName_arr[index0])
		else:
			if(index1 < index0):
				(index0,index1) = (index1,index0)
			for i in range(index0,index1+1):
				seq_names.append(first_table.getModel().accSeqName_arr[i])
		return seq_names
		
	def setAccSeqNames(self,seq_names):
		accl = self.linac_wizard_document.getAccl()
		if(len(seq_names) == 0): 
			accSeq = null
			self.linac_wizard_document.setAccSeq(accSeq)
			return
		lst = ArrayList()
		for seqName in seq_names:
			lst.add(accl.getSequence(seqName))
		accSeq = AcceleratorSeqCombo("SEQUENCE", lst)	
		self.linac_wizard_document.setAccSeq(accSeq)
		
	def getCavNameNodeDict(self,accl):
		rf_gaps = accl.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(RfGap.s_strType)))	
		cavs = []
		for rf_gap in rf_gaps:
			cav = rf_gap.getParent()
			if(cav not in cavs):
				cavs.append(cav)
		cav_name_node_dict = {}
		cav_names = []
		for cav in cavs:
			cav_names.append(cav.getId())
			cav_name_node_dict[cav.getId()] = cav		
		return cav_name_node_dict