Source: widgets/SpwMapPrinter.js

Retour à la documentation
/**
 * @class spw.widgets.SpwMapPrinter
 */
define(["dojo/_base/declare", "spw/api/SpwBaseWidget", "spw/api/MessageManager", "dojo/_base/json",
        "dojo/_base/array", "dojo/dom-geometry", "esri/request", "esri/urlUtils", "dojo/_base/lang", "dojo/i18n!./nls/SpwMapPrinter"], 
		function(declare, SpwBaseWidget, MessageManager, jsonUtils, array, 
				domGeom, esriRequest, urlUtils, lang, labels){

	return declare("spw.widgets.SpwMapPrinter", [SpwBaseWidget], /** @lends spw.widgets.SpwMapPrinter.prototype */{
		
		labels: labels,
		/**
		 * Url vers laquelle doivent être envoyées les requêtes d'impression
	     * @private
	     * @type String
	     */
		_printerUrl: null,
		_templatePage: null,
		generating: false,
		
		_label: null,
		_iconClass: null,
		
		/** 
	     * @constructs 
	     */ 
		constructor: function(config) {
	    	this._printerUrl = "PrintMapServlet?method=preparePreview&printParameters=";
	    	this._templatePage = "/exportMapPrint.jsp";
	    	this._label = config.widgetTitle ? config.widgetTitle : this.labels.printLabel;
	    	this._iconClass = config.iconClass ? config.iconClass : "spwMapPrinterIcon";
	    	if(config != null){
	    		if(config.printerUrl != null){
	    			this._printerUrl = config.printerUrl;
	    		}
	    		if(config.templatePage != null){
	    			this._templatePage = config.templatePage;
	    		}
	    	}
	    },
	    
	    _buildPrintParameters: function(){
	    	var extent = this.spwViewer.get('spwMap').getCurrentExtent();
	    	var screenExt = domGeom.position(this.spwViewer.mainCenter.domNode);
	    	
	    	var deltaY = (extent.ymax-extent.ymin)/screenExt.h;
	    	var extYByPixel = 750 * deltaY;
	    	
	    	var deltaX = (extent.xmax-extent.xmin)/screenExt.w;
	    	var extXByPixel = 625 * deltaX;
	    	
	    	var center = this.spwViewer.get('spwMap').getCurrentExtent().getCenter();
	    	var nYMax = center.y + extYByPixel/2;
	    	var nYMin = center.y - extYByPixel/2;
	    	var nXMax = center.x + extXByPixel/2;
	    	var nXMin = center.x - extXByPixel/2;
	    	
	    	
	    	var json = {
			    "services": [],
			    "width": 625,
			    "height": 750,
			    "xmin": nXMin,
			    "xmax": nXMax,
			    "ymin": nYMin,
			    "ymax": nYMax,
			    "scale": this.spwViewer.get('spwMap').getCurrentScale()
			};
	
			var hasWMS = false;
	    	var servicesTab = this.spwViewer.get('spwMap').getMapServices({visible: true});
	    	for (var i=0; i<servicesTab.length; i++){
	    		var service = servicesTab[i].get('layer');
	    		if(service.declaredClass == "spw.api.SpwDynamicWMSMapLayer"){
	    			hasWMS = true;
	    		} else {
	            	json.services.push({
	    	            "url": service.url,
	    	            "layerIds": service.visibleLayers,
	    	            "opacity": service.opacity
	    	        });
	    		}
	    	}
	
	    	var hasGraphics = false;
	    	var graphicDrawLayer = this._getFeatureLayers();
	    	if(graphicDrawLayer != null) {
	        	if(graphicDrawLayer.graphics.length > 0){
	        		var mapGraphics = graphicDrawLayer.graphics;
	        		for (var i = 0; i < mapGraphics.length; i++){
	        			if(mapGraphics[i].visible){
	        				hasGraphics = true;
	        			}
	        		}
	        	}
	    	}
	
	    	if(hasWMS){
	    		MessageManager.getInstance().notifyInfo(this.labels["mapHasWMSWarning"], null, -1);
	    	}
	    	
	    	if(hasGraphics){
	    		MessageManager.getInstance().notifyInfo(this.labels["mapHasGraphicsWarning"], null, -1);
	    	}
	    	
	     	return jsonUtils.toJson(json);
	    },
		
		_getFeatureLayers: function(){
			var map = this.spwViewer.get('spwMap').get('esriMap');
			var layer = null;
			array.forEach(map.graphicsLayerIds, function(layerId){
				if("SpwDrawingWidgetLayer" == layerId) {
					layer = map.getLayer(layerId);
				}
			});
			return layer;
		},
	    
		onActivate: function(){
			this.inherited(arguments);

			if(this.generating){
				MessageManager.getInstance().notifyInfo(this.labels["alreadyPrinting"]);
			} else {
		    	this.generating = true;
		    	
				var query = urlUtils.urlToObject(this._buildPrintParameters());

				esriRequest({
					url: urlUtils.urlToObject(this._printerUrl).path,
					content: {
						"method":"preparePreview",
					    "printParameters": query.path
					},
					load: lang.hitch(this, this.requestSucceeded),
					error: lang.hitch(this, this.requestFailed)
				}, { useProxy: true });	
				this.set('widgetTitle', this.labels.generating);
		    	this.set('iconClass', "generatingIcon");
			}
		},
		
		requestSucceeded: function(response, io){
			if(response.success){
				window.open(this._templatePage + "?exportMapImagePath=" + response.exportMapImagePath);
			} else {
				MessageManager.getInstance().notifyError(this.labels["printError"]+" : " + response.errorMessage);
			}
			this.requestComplete();
		},
		
		requestFailed: function(error, io) {
			console.log("Failed: ", error);
			MessageManager.getInstance().notifyError(this.labels["printError"]);
			this.requestComplete();
		},
		
		requestComplete: function(){
			this.set('widgetTitle', this._label);
	    	this.set('iconClass', this._iconClass);
	    	this.generating = false;
		}
	});
});