|
1 | 1 | (ns export-server.web-handlers
|
2 | 2 | (:require [cheshire.core :refer :all]
|
3 | 3 | [compojure.core :refer :all]
|
| 4 | + [dk.ative.docjure.spreadsheet :as spreadheet] |
| 5 | + [clojure.data.csv :as csv-parser] |
4 | 6 | [export-server.utils.responce :refer :all]
|
5 | 7 | [export-server.utils.rasterizator :as rastr]
|
6 | 8 | [export-server.utils.params-validator :as params-validator]
|
7 | 9 | [export-server.utils.config :as config]
|
8 |
| - [export-server.utils.rasterizator :as rast])) |
| 10 | + [export-server.utils.rasterizator :as rast]) |
| 11 | + (:import (org.apache.commons.io.output ByteArrayOutputStream))) |
9 | 12 |
|
10 | 13 |
|
11 | 14 | ;=======================================================================================================================
|
12 | 15 | ; Params to png/jpg/pdf
|
13 | 16 | ;=======================================================================================================================
|
14 |
| -(defn get-number-unit [map key] (Integer/parseInt (first(re-find #"([-+]?[0-9]+)" (map key))))) |
| 17 | +(defn get-number-unit [map key] (Integer/parseInt (first (re-find #"([-+]?[0-9]+)" (map key))))) |
15 | 18 |
|
16 | 19 | (def allow-script-executing (atom true))
|
17 | 20 |
|
|
21 | 24 |
|
22 | 25 | (defn get-pdf-size [params]
|
23 | 26 | (cond
|
| 27 | + (and (contains? params "pdf-width") (contains? params "pdf-height")) [(get-number-unit params "pdf-width") (get-number-unit params "pdf-height")] |
24 | 28 | (contains? params "pdf-size") (params "pdf-size")
|
25 | 29 | (contains? params "pdfSize") (params "pdfSize")
|
26 | 30 | :else (:pdf-size config/defaults)))
|
|
123 | 127 | :else {:ok false :result "Unknown data type"})))
|
124 | 128 |
|
125 | 129 |
|
| 130 | +(defn- get-file-name [params] (if (and (contains? params "file-name") (string? (params "file-name"))) (params "file-name") "anychart")) |
| 131 | + |
| 132 | + |
126 | 133 | ;=======================================================================================================================
|
127 | 134 | ; Handlers
|
128 | 135 | ;=======================================================================================================================
|
|
135 | 142 | (if (to-png-result :ok)
|
136 | 143 | (if (= response-type "base64")
|
137 | 144 | (json-success (rast/to-base64 (to-png-result :result)))
|
138 |
| - (file-success (to-png-result :result) "anychart" ".png")) |
| 145 | + (file-success (to-png-result :result) (get-file-name params) ".png")) |
139 | 146 | (json-error (to-png-result :result))))
|
140 |
| - (json-error (params-validator/get-error-message validation-result))) |
141 |
| - ) |
142 |
| - ) |
| 147 | + (json-error (params-validator/get-error-message validation-result))))) |
| 148 | + |
143 | 149 |
|
144 | 150 | (defn jpg [request]
|
145 | 151 | (let [params (request :form-params)
|
|
150 | 156 | (if (to-jpg-result :ok)
|
151 | 157 | (if (= response-type "base64")
|
152 | 158 | (json-success (rast/to-base64 (to-jpg-result :result)))
|
153 |
| - (file-success (to-jpg-result :result) "anychart" ".jpg")) |
| 159 | + (file-success (to-jpg-result :result) (get-file-name params) ".jpg")) |
154 | 160 | (json-error (to-jpg-result :result))))
|
155 | 161 | (json-error (params-validator/get-error-message validation-result)))))
|
156 | 162 |
|
| 163 | + |
157 | 164 | (defn pdf [request]
|
158 | 165 | (let [params (request :form-params)
|
159 | 166 | validation-result (params-validator/validate-pdf-params params)]
|
|
163 | 170 | (if (to-pdf-result :ok)
|
164 | 171 | (if (= response-type "base64")
|
165 | 172 | (json-success {:result (rast/to-base64 (to-pdf-result :result))})
|
166 |
| - (file-success (to-pdf-result :result) "anychart" ".pdf")) |
| 173 | + (file-success (to-pdf-result :result) (get-file-name params) ".pdf")) |
167 | 174 | (json-error (to-pdf-result :result)))
|
168 | 175 | )
|
169 | 176 | (json-error (params-validator/get-error-message validation-result)))))
|
170 | 177 |
|
| 178 | + |
171 | 179 | (defn svg [request]
|
172 | 180 | (let [params (request :form-params)
|
173 | 181 | validation-result (params-validator/validate-image-params params)]
|
|
177 | 185 | (if (to-svg-result :ok)
|
178 | 186 | (if (= response-type "base64")
|
179 | 187 | (json-success (rast/to-base64 (.getBytes (to-svg-result :result))))
|
180 |
| - (file-success (.getBytes (to-svg-result :result)) "anychart" ".svg")) |
| 188 | + (file-success (.getBytes (to-svg-result :result)) (get-file-name params) ".svg")) |
181 | 189 | (json-error (to-svg-result :result)))
|
182 | 190 | )
|
183 | 191 | (json-error (params-validator/get-error-message validation-result)))))
|
184 | 192 |
|
| 193 | + |
| 194 | +(defn xml [request] |
| 195 | + (let [params (request :form-params) |
| 196 | + validation-result (params-validator/validate-save-data-params params)] |
| 197 | + (if (params-validator/valid-result? validation-result) |
| 198 | + (file-success (.getBytes (params "data")) (get-file-name params) ".xml") |
| 199 | + (json-error (params-validator/get-error-message validation-result))))) |
| 200 | + |
| 201 | + |
| 202 | +(defn json [request] |
| 203 | + (let [params (request :form-params) |
| 204 | + validation-result (params-validator/validate-save-data-params params)] |
| 205 | + (if (params-validator/valid-result? validation-result) |
| 206 | + (file-success (.getBytes (params "data")) (get-file-name params) ".json") |
| 207 | + (json-error (params-validator/get-error-message validation-result))))) |
| 208 | + |
| 209 | + |
| 210 | +(defn csv [request] |
| 211 | + (let [params (request :form-params) |
| 212 | + validation-result (params-validator/validate-save-data-params params)] |
| 213 | + (if (params-validator/valid-result? validation-result) |
| 214 | + (file-success (.getBytes (params "data")) (get-file-name params) ".csv") |
| 215 | + (json-error (params-validator/get-error-message validation-result))))) |
| 216 | + |
| 217 | + |
| 218 | +(defn xlsx [request] |
| 219 | + (let [params (request :form-params) |
| 220 | + file-name (get-file-name params) |
| 221 | + validation-result (params-validator/validate-save-data-params params)] |
| 222 | + (if (params-validator/valid-result? validation-result) |
| 223 | + (let [csv (csv-parser/read-csv (params "data")) |
| 224 | + wb (spreadheet/create-workbook file-name csv) |
| 225 | + output (new ByteArrayOutputStream)] |
| 226 | + (spreadheet/save-workbook! output wb) |
| 227 | + (file-success (.toByteArray output) file-name ".xlsx")) |
| 228 | + (json-error (params-validator/get-error-message validation-result))))) |
| 229 | + |
0 commit comments