4 (defvar dpservice-dbspec-url "http://dpservice.traveltainment.int/dbspec")
5 (defvar dpservice-dbspec)
7 (defun dpservice-dbspec-loaded ()
8 (let ((json-array-type 'list)
10 (message "Parsing ...")
12 (setq dpservice-dbspec (json-read))
14 (kill-buffer (current-buffer))))
16 (defun dpservice-load-dbspec ()
18 (let ((url-http-version "1.0")) ; no chunked response
19 (url-http (url-generic-parse-url dpservice-dbspec-url) 'dpservice-dbspec-loaded '())))
21 (defun dpservice-maybe-load-dbspec ()
22 (if (not dpservice-dbspec)
24 (dpservice-load-dbspec)
25 (while (not dpservice-dbspec)
28 (defun dpservice-make-csv-header (type table separator)
29 (loop for lastn = 1 then n
30 for (n . name) in (sort (loop for spalte in (cdr (assq 'spalten
32 (cdr (assq type dpservice-dbspec))))))
33 for n = (cdr (assq 'csvWert spalte))
35 collect (cons n (cdr (assq 'name spalte))))
36 '(lambda (a b) (< (car a) (car b))))
37 concat (make-string (- n lastn) separator)
40 (defun dpservice-types ()
41 (mapcar 'car dpservice-dbspec))
43 (defun dpservice-tables (type)
44 (mapcar 'car (cdr (assq type dpservice-dbspec))))
46 (defun dpservice-csv-insert-header (type table &optional separator)
49 (dpservice-maybe-load-dbspec)
50 (let* ((type (intern (completing-read "Type: " (mapcar 'symbol-name (dpservice-types)))))
51 (table (intern (completing-read "Table: " (mapcar 'symbol-name (dpservice-tables type))))))
53 (goto-char (point-min))
54 (insert (dpservice-make-csv-header type table (or separator (car csv-separator-chars))) "\n")
55 (csv-align-fields nil (point-min) (point-max)))