Add some standard places to PATH if they are not set by login script.
Rearrange the order of paths so system's are first, user's are last.
For Cygwin this helps with Cygwin's paths to be situated before
"C:/Windows" (Emacs is not started from a login shell on Windows!).
;;; maven-central.el --- Maven central auxility
;;; Commentary:
;;
(require 'json)
(require 'url-handlers)
(require 'maven)
;;; Code:
(defvar maven-central/buffer-name "*Maven Central*")
(defconst maven-central/search-url "http://search.maven.org/solrsearch/select?wt=json&rows=20")
(defun maven-central/versions-url (groupId artifactId)
(concat maven-central/search-url "&core=gav&q=g:" (url-hexify-string groupId) (url-hexify-string " AND ") "a:" (url-hexify-string artifactId)))
;; (maven-central/versions-url "junit" "junit")
(defun maven-central/versions-callback (status)
(let ( (buffer (current-buffer)) json )
(with-temp-buffer
(url-insert buffer)
(goto-char (point-min))
(setq json (json-read))
;; (switch-to-buffer maven-central/buffer-name)
;; (pp json)
(message "Available versions: %s" (mapconcat (lambda (json) (cdr (assq 'v json))) (cdr (assq 'docs (cdr (assoc 'response json)))) ", "))
)))
(defun maven-central/versions (groupId artifactId)
"Retrieve available versions."
(url-retrieve (maven-central/versions-url groupId artifactId) #'maven-central/versions-callback))
(defun maven-central/last-version-url (groupId artifactId)
(concat maven-central/search-url "&q=g:" (url-hexify-string groupId) (url-hexify-string " AND ") "a:" (url-hexify-string artifactId)))
;; (maven-central/versions-url "junit" "junit")
(defun maven-central/last-version-callback (status)
(let ( (buffer (current-buffer)) json )
(with-temp-buffer
(url-insert buffer)
(goto-char (point-min))
(setq json (json-read))
;; (switch-to-buffer maven-central/buffer-name)
;; (pp json)
(message "Latest version: %s" (cdr (assq 'latestVersion (elt (cdr (assq 'docs (cdr (assoc 'response json)))) 0))))
)))
(defun maven-central/last-version (groupId artifactId)
"Retrieve last package version."
(url-retrieve (maven-central/last-version-url groupId artifactId) #'maven-central/last-version-callback))
;;;###autoload
(defun maven-central-last-version-from-pom ()
(interactive)
(let (dependency groupId artifactId)
(setq dependency (maven/parse-pom-dependency))
(setq groupId (elt dependency 0))
(setq artifactId (elt dependency 1))
(when (and groupId artifactId)
(maven-central/last-version groupId artifactId))
))
;;;###autoload
(defun maven-central-versions-from-pom ()
(interactive)
(let (dependency groupId artifactId)
(setq dependency (maven/parse-pom-dependency))
(setq groupId (elt dependency 0))
(setq artifactId (elt dependency 1))
(when (and groupId artifactId)
(maven-central/versions groupId artifactId))
))
(defun ivy/parse-dependency ()
(let ( end groupId artifactId )
(save-excursion
(if (looking-at "[^>]*<dependency ")
(progn (search-forward "<") (backward-char))
(search-backward "<dependency " nil t))
(when (re-search-forward "<dependency [^/]*/>")
(setq end (point))
(search-backward "<")
(save-restriction
(narrow-to-region (point) end)
(goto-char (point-min))
(when (re-search-forward "\\s-org\\s-*=\\s-*['\"]\\([^'\"]+\\)['\"]" nil t)
(setq groupId (match-string 1)))
(goto-char (point-min))
(when (re-search-forward "\\s-name\\s-*=\\s-*['\"]\\([^'\"]+\\)['\"]" nil t)
(setq artifactId (match-string 1)))
)))
(list groupId artifactId)))
;;;###autoload
(defun maven-central-last-version-from-ivy ()
(interactive)
(let (dependency groupId artifactId)
(setq dependency (ivy/parse-dependency))
(setq groupId (elt dependency 0))
(setq artifactId (elt dependency 1))
(when (and groupId artifactId)
(maven-central/last-version groupId artifactId))
))
;;;###autoload
(defun maven-central-versions-from-ivy ()
(interactive)
(let (dependency groupId artifactId)
(setq dependency (ivy/parse-dependency))
(setq groupId (elt dependency 0))
(setq artifactId (elt dependency 1))
(when (and groupId artifactId)
(maven-central/versions groupId artifactId))
))
(defun maven-central/parse-gradle-dependency ()
(let ( groupId artifactId )
(save-excursion
(goto-char (line-beginning-position))
(when (re-search-forward "\\([\"']\\)\\([a-zA-Z0-9.-]+\\):\\([a-zA-Z0-9.-]+\\):?[^\"']*\\1" (line-end-position) t)
(setq groupId (match-string 2))
(setq artifactId (match-string 3))
(list groupId artifactId)))))
;;;###autoload
(defun maven-central-last-version-from-gradle ()
(interactive)
(let (dependency groupId artifactId)
(setq dependency (maven-central/parse-gradle-dependency))
(setq groupId (elt dependency 0))
(setq artifactId (elt dependency 1))
(when (and groupId artifactId)
(maven-central/last-version groupId artifactId))
))
;;;###autoload
(defun maven-central-versions-from-gradle ()
(interactive)
(let (dependency groupId artifactId)
(setq dependency (maven-central/parse-gradle-dependency))
(setq groupId (elt dependency 0))
(setq artifactId (elt dependency 1))
(when (and groupId artifactId)
(maven-central/versions groupId artifactId))
))
(defun maven-central/open (groupId artifactId)
"Open in Maven Central WEB page info for package."
(browse-url (format "https://mvnrepository.com/artifact/%s/%s" groupId artifactId)))
;;;###autoload
(defun maven-central-open-from-gradle ()
(interactive)
(let (dependency groupId artifactId)
(setq dependency (maven-central/parse-gradle-dependency))
(setq groupId (elt dependency 0))
(setq artifactId (elt dependency 1))
(when (and groupId artifactId)
(maven-central/open groupId artifactId))
))
;; (maven-central/last-version "junit" "junit")
(provide 'maven-central)
;;; maven-central.el ends here