maven-central.el
author Oleksandr Gavenko <gavenkoa@gmail.com>
Wed, 11 Oct 2017 00:28:06 +0300
changeset 1541 dca10cecc9e2
parent 1535 15388800a8e2
child 1551 e03dcbea6a1f
permissions -rw-r--r--
Set font size depending on DPI.

;;; 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.-]+\\):?[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))
    ))

;; (maven-central/last-version "junit" "junit")

(provide 'maven-central)

;;; maven-central.el ends here