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;
}
});
});