|
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