|
|
- /**
- * @license Highcharts JS v2.3.3 (2012-11-02)
- *
- * (c) 20012-2014
- *
- * Author: Gert Vaartjes
- *
- * License: www.highcharts.com/license
- */
- package com.highcharts.export.converter;
-
- import java.io.File;
- import java.io.IOException;
- import java.net.SocketTimeoutException;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.NoSuchElementException;
- import java.util.concurrent.TimeoutException;
-
- import org.apache.commons.io.FileUtils;
- import org.apache.log4j.Logger;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
-
- import com.google.gson.Gson;
- import com.highcharts.export.pool.PoolException;
- import com.highcharts.export.pool.BlockingQueuePool;
- import com.highcharts.export.server.Server;
- import com.highcharts.export.util.MimeType;
-
- @Service("svgConverter")
- public class SVGConverter {
-
- @Autowired
- private BlockingQueuePool serverPool;
- protected static Logger logger = Logger.getLogger("converter");
- private static final String SVG_DOCTYPE = "<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">";
-
- public String convert(String input, MimeType mime,
- String constructor, String callback, String globalOptions, Float width, Float scale, String filename) throws SVGConverterException, PoolException, NoSuchElementException, TimeoutException {
- return this.convert(input, globalOptions, null, null, mime, constructor, callback, width, scale, filename);
- }
-
- public String convert(String input, String globalOptions, String dataOptions, String customCode, MimeType mime,
- String constructor, String callback, Float width, Float scale, String filename) throws SVGConverterException, PoolException, NoSuchElementException, TimeoutException {
-
- Map<String, String> params = new HashMap<String, String>();
- Gson gson = new Gson();
-
- if (filename != null) {
- params.put("outfile", filename);
- } else {
- params.put("type", mime.name().toLowerCase());
- }
-
- params.put("infile", input);
-
- if (constructor != null && !constructor.isEmpty()) {
- params.put("constr", constructor);
- }
-
- if (callback != null && !callback.isEmpty()) {
- params.put("callback", callback);
- }
-
- if (globalOptions != null && !globalOptions.isEmpty()) {
- params.put("globaloptions", globalOptions);
- }
-
- if (dataOptions != null && !dataOptions.isEmpty()) {
- params.put("dataoptions", dataOptions);
- }
-
- if (customCode != null && !customCode.isEmpty()) {
- params.put("customcode", customCode);
- }
-
- if (width != null) {
- params.put("width", String.valueOf(width));
- }
-
- if (scale != null) {
- params.put("scale", String.valueOf(scale));
- }
-
- // parameters to JSON
- String json = gson.toJson(params);
-
- // send to phantomJs
- String output = "";
- output = requestServer(json);
-
- // check first for errors
- if (output.length() > 5 && output.substring(0,5).equalsIgnoreCase("error")) {
- throw new SVGConverterException("recveived error from phantomjs:" + output);
- }
-
- return output;
- }
-
- /*
- * Redirect the SVG string directly
- */
- public String redirectSVG(String svg, String filename) throws SVGConverterException {
- // add XML Doctype for svg
- String output = SVG_DOCTYPE + svg;
-
- if (filename != null) {
- // Create file and return filename instead.
- //String filename = createUniqueFileName(".svg");
- File file = new File(filename);
- try {
- FileUtils.writeStringToFile(file, output);
- } catch (IOException ioex) {
- logger.error(ioex.getMessage());
- throw new SVGConverterException("Error while converting, " + ioex.getMessage());
- }
- return filename;
- }
- return output;
- }
-
- public String requestServer(String params) throws SVGConverterException, TimeoutException, NoSuchElementException, PoolException {
- Server server = null;
-
- try {
- server = (Server) serverPool.borrowObject();
- String response = server.request(params);
-
- return response;
- } catch (SocketTimeoutException ste) {
- logger.error(ste);
- throw new TimeoutException(ste.getMessage());
- } catch (TimeoutException te) {
- logger.error(te);
- throw new TimeoutException(te.getMessage());
- } catch (PoolException nse) {
- logger.error("POOL EXHAUSTED!!");
- throw new PoolException(nse.getMessage());
- } catch (Exception e) {
- logger.error(e);
- throw new SVGConverterException("Error converting SVG: " + e.getMessage());
- } finally {
- try {
- serverPool.returnObject(server, true);
- } catch (Exception e) {
- logger.error("Exception while returning server to pool: " + e.getMessage());
- }
- }
- }
- }
|