Beispiel #1
0
    def actionPerformed(self, event):
        command = event.getActionCommand()
        if self.itemType == "dialog":

            #False positives dialog
            if command == self.strings.getString("False_positives..."):
                self.app.falsePositiveDlg.show()

            #Preferences dialog
            elif command == self.strings.getString("Preferences..."):
                self.app.open_preferences("from menu")

            #About dialog
            elif command == self.strings.getString("About..."):
                try:
                    self.app.aboutDlg
                except AttributeError:
                    #build about dialog
                    self.app.aboutDlg = AboutDialog(
                        Main.parent,
                        self.strings.getString("about_title"),
                        True,
                        self.app)
                self.app.aboutDlg.show()

        #Web link of the tool
        elif self.itemType == "link":
            OpenBrowser.displayUrl(self.tool.uri)

        elif self.itemType in ("check", "local file"):
            #Open local GPX file with errors
            if self.itemType == "local file":
                fileNameExtensionFilter = FileNameExtensionFilter("files GPX (*.gpx)",
                                                                  ["gpx"])
                chooser = DiskAccessAction.createAndOpenFileChooser(True,
                    False,
                    self.strings.getString("Open_a_GPX_file"),
                    fileNameExtensionFilter,
                    JFileChooser.FILES_ONLY,
                    None)
                if chooser is None:
                    return
                filePath = chooser.getSelectedFile()

                #remove former loaded local file
                for i, tool in enumerate(self.app.tools):
                    if filePath.getName() == tool.name:
                        self.app.dlg.toolsCombo.removeItemAt(i)
                        del self.app.tools[i]
                #create a new local file tool
                self.tool = LocalFileTool(self.app, filePath)
                self.view = self.tool.views[0]
                self.check = self.view.checks[0]
                self.app.tools.append(self.tool)
                #add tool to toggle dialog
                self.app.dlg.add_data_to_models(self.tool)

            selection = (self.tool, self.view, self.check)
            self.app.on_selection_changed("menu", selection)
Beispiel #2
0
    def actionPerformed(self, event):
        command = event.getActionCommand()
        if self.itemType == "dialog":

            #False positives dialog
            if command == self.strings.getString("False_positives..."):
                self.app.falsePositiveDlg.show()

            #Preferences dialog
            elif command == self.strings.getString("Preferences..."):
                self.app.open_preferences("from menu")

            #About dialog
            elif command == self.strings.getString("About..."):
                try:
                    self.app.aboutDlg
                except AttributeError:
                    #build about dialog
                    self.app.aboutDlg = AboutDialog(
                        Main.parent, self.strings.getString("about_title"),
                        True, self.app)
                self.app.aboutDlg.show()

        #Web link of the tool
        elif self.itemType == "link":
            OpenBrowser.displayUrl(self.tool.uri)

        elif self.itemType in ("check", "local file"):
            #Open local GPX file with errors
            if self.itemType == "local file":
                fileNameExtensionFilter = FileNameExtensionFilter(
                    "files GPX (*.gpx)", ["gpx"])
                chooser = DiskAccessAction.createAndOpenFileChooser(
                    True, False, self.strings.getString("Open_a_GPX_file"),
                    fileNameExtensionFilter, JFileChooser.FILES_ONLY, None)
                if chooser is None:
                    return
                filePath = chooser.getSelectedFile()

                #remove former loaded local file
                for i, tool in enumerate(self.app.tools):
                    if filePath.getName() == tool.name:
                        self.app.dlg.toolsCombo.removeItemAt(i)
                        del self.app.tools[i]
                #create a new local file tool
                self.tool = LocalFileTool(self.app, filePath)
                self.view = self.tool.views[0]
                self.check = self.view.checks[0]
                self.app.tools.append(self.tool)
                #add tool to toggle dialog
                self.app.dlg.add_data_to_models(self.tool)

            selection = (self.tool, self.view, self.check)
            self.app.on_selection_changed("menu", selection)
Beispiel #3
0
 def actionPerformed(self, event):
     """Click on the checksTable popup
     """
     check = self.app.selectedChecks[0]
     source = event.getSource()
     if source in (self.app.dlg.menuItemAdd,
                   self.app.dlg.menuItemRemove):
         tool = self.app.favouritesTool
         view = tool.views[0]
         if source == self.app.dlg.menuItemAdd:
             #Add a check to Favourites tool
             if check not in tool.views[0].checks:
                 view.checks.append(check)
                 #add to checks table
                 if check.errors is not None:
                     errorsNumber = len(check.errors)
                 else:
                     errorsNumber = ""
                 view.tableModel.addRow([check.icon,
                                         check.title,
                                         errorsNumber])
                 #add to menu
                 self.app.menu.add_check_item(tool,
                                              view,
                                              check,
                                              self.app.favouritesMenu)
                 if self.app.selectedTool != tool:
                     selection = (tool, view, check)
                     self.app.on_selection_changed("add favourite", selection)
         elif source == self.app.dlg.menuItemRemove:
             #Remove a check from Favourites tool
             if check in view.checks:
                 checkIndex = view.checks.index(check)
                 #remove from checks table
                 view.tableModel.removeRow(checkIndex)
                 #remove from menu
                 self.app.favouritesMenu.remove(checkIndex)
                 view.checks.remove(check)
         #Save favourites checks to preferences
         prop = "tool.%s.checks" % tool.name
         favChecks = ""
         for i, check in enumerate(view.checks):
             if i != 0:
                 favChecks += "|"
             favChecks += "%s.%s.%s" % (check.tool.name, check.view.name, check.name)
         self.app.properties.setProperty(prop, favChecks)
         self.app.save_config()
     elif source == self.app.dlg.menuItemHelp:
         OpenBrowser.displayUrl(check.helpUrl)
Beispiel #4
0
 def actionPerformed(self, event):
     """Click on the checksTable popup
     """
     check = self.app.selectedChecks[0]
     source = event.getSource()
     if source in (self.app.dlg.menuItemAdd, self.app.dlg.menuItemRemove):
         tool = self.app.favouritesTool
         view = tool.views[0]
         if source == self.app.dlg.menuItemAdd:
             #Add a check to Favourites tool
             if check not in tool.views[0].checks:
                 view.checks.append(check)
                 #add to checks table
                 if check.errors is not None:
                     errorsNumber = len(check.errors)
                 else:
                     errorsNumber = ""
                 view.tableModel.addRow(
                     [check.icon, check.title, errorsNumber])
                 #add to menu
                 self.app.menu.add_check_item(tool, view, check,
                                              self.app.favouritesMenu)
                 if self.app.selectedTool != tool:
                     selection = (tool, view, check)
                     self.app.on_selection_changed("add favourite",
                                                   selection)
         elif source == self.app.dlg.menuItemRemove:
             #Remove a check from Favourites tool
             if check in view.checks:
                 checkIndex = view.checks.index(check)
                 #remove from checks table
                 view.tableModel.removeRow(checkIndex)
                 #remove from menu
                 self.app.favouritesMenu.remove(checkIndex)
                 view.checks.remove(check)
         #Save favourites checks to preferences
         prop = "tool.%s.checks" % tool.name
         favChecks = ""
         for i, check in enumerate(view.checks):
             if i != 0:
                 favChecks += "|"
             favChecks += "%s.%s.%s" % (check.tool.name, check.view.name,
                                        check.name)
         self.app.properties.setProperty(prop, favChecks)
         self.app.save_config()
     elif source == self.app.dlg.menuItemHelp:
         OpenBrowser.displayUrl(check.helpUrl)
Beispiel #5
0
    def on_previewBtn_clicked(self, e):
        """Show the favourite area on a map
        """
        mode = self.on_zone_edited()
        if not self.create_new_zone(mode):
            return
        zone = self.app.newZone

        if zone.zType == "rectangle":
            wktString = zone.bbox_to_wkt_string()
        else:
            wktString = zone.wktGeom
        script = '/*http://stackoverflow.com/questions/11954401/wkt-and-openlayers*/'
        script += '\nfunction init() {'
        script += '\n    var map = new OpenLayers.Map({'
        script += '\n        div: "map",'
        script += '\n        projection: new OpenLayers.Projection("EPSG:900913"),'
        script += '\n        displayProjection: new OpenLayers.Projection("EPSG:4326"),'
        script += '\n        layers: ['
        script += '\n            new OpenLayers.Layer.OSM()'
        script += '\n            ]'
        script += '\n    });'
        script += '\n    var wkt = new OpenLayers.Format.WKT();'
        script += '\n    var polygonFeature = wkt.read("%s");' % wktString
        script += '\n    var vectors = new OpenLayers.Layer.Vector("Favourite area");'
        script += '\n    map.addLayer(vectors);'
        script += '\n    polygonFeature.geometry.transform(map.displayProjection, map.getProjectionObject());'
        script += '\n    vectors.addFeatures([polygonFeature]);'
        script += '\n    map.zoomToExtent(vectors.getDataExtent());'
        script += '\n};'
        scriptFile = open(File.separator.join([self.app.SCRIPTDIR,
                                              "html",
                                              "script.js"]), "w")
        scriptFile.write(script)
        scriptFile.close()
        OpenBrowser.displayUrl(File.separator.join([self.app.SCRIPTDIR,
                                                   "html",
                                                   "favourite_area.html"]))
Beispiel #6
0
    def on_previewBtn_clicked(self, e):
        """Show the favourite area on a map
        """
        mode = self.on_zone_edited()
        if not self.create_new_zone(mode):
            return
        zone = self.app.newZone

        if zone.zType == "rectangle":
            wktString = zone.bbox_to_wkt_string()
        else:
            wktString = zone.wktGeom
        script = '/*http://stackoverflow.com/questions/11954401/wkt-and-openlayers*/'
        script += '\nfunction init() {'
        script += '\n    var map = new OpenLayers.Map({'
        script += '\n        div: "map",'
        script += '\n        projection: new OpenLayers.Projection("EPSG:900913"),'
        script += '\n        displayProjection: new OpenLayers.Projection("EPSG:4326"),'
        script += '\n        layers: ['
        script += '\n            new OpenLayers.Layer.OSM()'
        script += '\n            ]'
        script += '\n    });'
        script += '\n    var wkt = new OpenLayers.Format.WKT();'
        script += '\n    var polygonFeature = wkt.read("%s");' % wktString
        script += '\n    var vectors = new OpenLayers.Layer.Vector("Favourite area");'
        script += '\n    map.addLayer(vectors);'
        script += '\n    polygonFeature.geometry.transform(map.displayProjection, map.getProjectionObject());'
        script += '\n    vectors.addFeatures([polygonFeature]);'
        script += '\n    map.zoomToExtent(vectors.getDataExtent());'
        script += '\n};'
        scriptFile = open(File.separator.join([self.app.SCRIPTDIR,
                                              "html",
                                              "script.js"]), "w")
        scriptFile.write(script)
        scriptFile.close()
        OpenBrowser.displayUrl(File.separator.join([self.app.SCRIPTDIR,
                                                   "html",
                                                   "favourite_area.html"]))
Beispiel #7
0
    def doInBackground(self):
        #print "\n- Checking for the latest version..."
        try:
            url = URL(self.app.scriptVersionUrl)
            uc = url.openConnection()
            ins = uc.getInputStream()
            p = Properties()
            p.load(ins)
            latestScriptVersion = p.getProperty("script")
            self.app.latestToolsVersion = p.getProperty("tools")
        except (UnknownHostException, SocketException):
            print "I can't connect to:\n%s" % url
            ins.close()
            return

        if latestScriptVersion == self.app.SCRIPTVERSION:
            #using latest script
            print "  already using the latest script version:", self.app.SCRIPTVERSION
            if self.app.latestToolsVersion == self.app.TOOLSVERSION:
                #using latest tools
                print "  already using the latest tools version:", self.app.TOOLSVERSION
                if self.mode != "auto":
                    JOptionPane.showMessageDialog(
                        self.app.preferencesFrame,
                        self.app.strings.getString("using_latest"))
                    return
            else:
                #not using latest tools
                print "  tools can be updated: %s -> %s" % (
                    self.app.TOOLSVERSION, self.app.latestToolsVersion)
                if self.app.mode == "stable":
                    infoString = self.app.strings.getString(
                        "update_tools_question")
                else:
                    infoString = self.app.strings.getString(
                        "dev_update_tools_question")
                answer = JOptionPane.showConfirmDialog(
                    Main.parent, infoString,
                    self.app.strings.getString("updates_available"),
                    JOptionPane.YES_NO_OPTION)
                if answer == 0:
                    #Download the updated tools data
                    print "\n- Update tools data"
                    try:
                        self.app.toolsProgressDialog
                    except AttributeError:
                        from java.awt import Dialog
                        self.app.toolsProgressDialog = ToolsProgressDialog(
                            Main.parent,
                            self.app.strings.getString(
                                "download_tools_updates"),
                            Dialog.ModalityType.APPLICATION_MODAL, self.app)
                    self.app.toolsProgressDialog.show()
        else:
            #not using latest script
            print "a new script version is available:\n%s -> %s" % (
                self.app.SCRIPTVERSION, latestScriptVersion)
            messageArguments = array(
                [self.app.SCRIPTVERSION, latestScriptVersion], String)
            formatter = MessageFormat("")
            if self.app.mode == "stable":
                formatter.applyPattern(
                    self.app.strings.getString("updates_warning"))
                infoBtnString = self.app.strings.getString("Visit_Wiki")
            else:
                formatter.applyPattern(
                    self.app.strings.getString("dev_updates_warning"))
                infoBtnString = self.app.strings.getString("Visit_git")
            msg = formatter.format(messageArguments)
            options = [
                self.app.strings.getString("Do_not_check_for_updates"),
                infoBtnString,
                self.app.strings.getString("cancel")
            ]
            answer = JOptionPane.showOptionDialog(
                Main.parent, msg,
                self.app.strings.getString("updates_available"),
                JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE,
                None, options, options[1])
            if answer == 0:
                self.app.properties.setProperty("check_for_update", "off")
                self.app.save_config(self)
            elif answer == 1:
                if self.app.mode == "stable":
                    url = self.app.SCRIPTWEBSITE
                else:
                    url = self.app.GITWEBSITE
                OpenBrowser.displayUrl(url)
Beispiel #8
0
    def doInBackground(self):
        #print "\n- Checking for the latest version..."
        try:
            url = URL(self.app.scriptVersionUrl)
            uc = url.openConnection()
            ins = uc.getInputStream()
            p = Properties()
            p.load(ins)
            latestScriptVersion = p.getProperty("script")
            self.app.latestToolsVersion = p.getProperty("tools")
        except (UnknownHostException, SocketException):
            print "I can't connect to:\n%s" % url
            ins.close()
            return

        if latestScriptVersion == self.app.SCRIPTVERSION:
            #using latest script
            print "  already using the latest script version:", self.app.SCRIPTVERSION
            if self.app.latestToolsVersion == self.app.TOOLSVERSION:
                #using latest tools
                print "  already using the latest tools version:", self.app.TOOLSVERSION
                if self.mode != "auto":
                    JOptionPane.showMessageDialog(self.app.preferencesFrame,
                                                  self.app.strings.getString("using_latest"))
                    return
            else:
                #not using latest tools
                print "  tools can be updated: %s -> %s" % (self.app.TOOLSVERSION,
                                                           self.app.latestToolsVersion)
                answer = JOptionPane.showConfirmDialog(Main.parent,
                    self.app.strings.getString("update_tools_question"),
                    self.app.strings.getString("updates_available"),
                    JOptionPane.YES_NO_OPTION)
                if answer == 0:
                    #Download the updated tools data
                    print "\n- Update tools data"
                    try:
                        self.app.toolsProgressDialog
                    except AttributeError:
                        from java.awt import Dialog
                        self.app.toolsProgressDialog = ToolsProgressDialog(Main.parent,
                                                           self.app.strings.getString("download_tools_updates"),
                                                           Dialog.ModalityType.APPLICATION_MODAL,
                                                           self.app)
                    self.app.toolsProgressDialog.show()
        else:
            #not using latest script
            print "a new script version is available:\n%s -> %s" % (self.app.SCRIPTVERSION,
                                                                    latestScriptVersion)
            messageArguments = array([self.app.SCRIPTVERSION, latestScriptVersion], String)
            formatter = MessageFormat("")
            formatter.applyPattern(self.app.strings.getString("updates_warning"))
            msg = formatter.format(messageArguments)
            options = [
                self.app.strings.getString("Do_not_check_for_updates"),
                self.app.strings.getString("Visit_Wiki"),
                self.app.strings.getString("cancel")]
            answer = JOptionPane.showOptionDialog(Main.parent,
                msg,
                self.app.strings.getString("updates_available"),
                JOptionPane.YES_NO_CANCEL_OPTION,
                JOptionPane.QUESTION_MESSAGE,
                None,
                options,
                options[1])
            if answer == 0:
                self.app.properties.setProperty("check_for_update", "off")
                self.app.save_config(self)
            elif answer == 1:
                OpenBrowser.displayUrl(self.app.SCRIPTWEBSITE)
                    #print 'match: ', m, 'new: ', element.isNew()
                    if not(element.isNew()) and lon and lat:# and m:
                        print 'Coordinates not yet present in Wikidata, building up coordStatements'
                        coordStatement = Q_school + '\tP625\t@' + lat[:7] + '/' + lon[:7] + '\tS854\t"https://www.openstreetmap.org/' + type + '/' + str(element.getId()) + '"\n'
                        coordStatements[Q_school] = coordStatement
                    # pprint.pprint(coordStatements)
                else:
                    print 'Coordinates already present in Wikidata'

        if coordStatements:
            number = 0; qs_url=''; doit = '&doit'
            for coordStatement in coordStatements:
                print coordStatements[coordStatement]
                qs_url += URLEncoder.encode(coordStatements[coordStatement], "UTF-8")
                if number > 8:
                    OpenBrowser.displayUrl('http://tools.wmflabs.org/wikidata-todo/quick_statements.php?list=' + qs_url + doit)
                    number = 0; qs_url=''
                else:
                    number+=1
            if qs_url:
                OpenBrowser.displayUrl('http://tools.wmflabs.org/wikidata-todo/quick_statements.php?list=' + qs_url + doit)
        if noNewSchools:
            print 'switching to regular account'
            if not(Main.pref.get("osm-server.username") == osm_account):
                Main.pref.put("osm-server.username", osm_account)
                JOptionPane.showMessageDialog(Main.parent, "Switched back to regular OSM account, please upload the usual way")
        else:
            print 'switching to import account and selecting all new schools'
            Main.pref.put("osm-server.username", osm_import_account)
            SearchAction.search('amenity new (school | kindergarten | university | college)',SearchAction.SearchMode.fromCode('R'))
            Utils.copyToClipboard('''import=yes
                # params  = '?action=login&lgname=%s&lgpassword=%s&format=json'% (user,passw)
                # url = baseurl +'api.php'+params
                # Login request
                # r1 = HttpClient.create(URL(url), "POST")
                # print r1
                # r2 = r1.connect().getContent()
                # print r2
                #token = r1.json()['login']['token']
                #params2 = params+'&lgtoken=%s'% token

                # Confirm token; should give "Success"
                #r2 = requests.post(baseurl+'api.php'+params2,auth=(authu,authp),cookies=r1.cookies)

                qs_url = 'http://tools.wmflabs.org/wikidata-todo/quick_statements.php?list=' + URLEncoder.encode(
                    result, "UTF-8") + '&doit'
                OpenBrowser.displayUrl(qs_url)

                found = False
                for i in range(19, 0, -1):
                    time.sleep(i / 3)
                    params = '?action=wbsearchentities&search=' + URLEncoder.encode(
                        name, "UTF-8") + '&language=en&format=json'
                    url = baseurl + 'api.php' + params
                    r1 = HttpClient.create(URL(url), "GET")
                    r2 = r1.setHeader("Content-Type",
                                      "application/x-www-form-urlencoded"
                                      ).connect().fetchContent()
                    #print dir(r2)
                    print i, r2
                    Q_school = QinJSONRE.search(r2)
                    if Q_school:
                # baseurl = 'https://www.wikidata.org/w/'
                # params  = '?action=login&lgname=%s&lgpassword=%s&format=json'% (user,passw)
                # url = baseurl +'api.php'+params
                # Login request
                # r1 = HttpClient.create(URL(url), "POST")
                # print r1
                # r2 = r1.connect().getContent()
                # print r2
                #token = r1.json()['login']['token']
                #params2 = params+'&lgtoken=%s'% token

                # Confirm token; should give "Success"
                #r2 = requests.post(baseurl+'api.php'+params2,auth=(authu,authp),cookies=r1.cookies)

                qs_url = 'http://tools.wmflabs.org/wikidata-todo/quick_statements.php?list=' + URLEncoder.encode(result, "UTF-8") + '&doit'
                OpenBrowser.displayUrl(qs_url)
                
                found = False
                for i in range(19, 0, -1):
                    time.sleep(i/3)
                    params  = '?action=wbsearchentities&search=' + URLEncoder.encode(name, "UTF-8") + '&language=en&format=json'
                    url = baseurl + 'api.php' + params
                    r1 = HttpClient.create(URL(url), "GET")
                    r2 = r1.setHeader("Content-Type", "application/x-www-form-urlencoded").connect().fetchContent()
                    #print dir(r2)
                    print i, r2
                    Q_school = QinJSONRE.search(r2)
                    if Q_school:
                        print Q_school.group('qid')
                        break
                    else:
Beispiel #12
0
 def hyperlinkUpdate(self, e):
     if e.getEventType() == HyperlinkEvent.EventType.ACTIVATED:
         OpenBrowser.displayUrl(e.getURL().toString())
Beispiel #13
0
 def hyperlinkUpdate(self, e):
     if e.getEventType() == HyperlinkEvent.EventType.ACTIVATED:
         OpenBrowser.displayUrl(e.getURL().toString())