/*
* This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
*
* Copyright 2008-2015 Geosparc nv, http://www.geosparc.com/, Belgium.
*
* The program is available in open source according to the GNU Affero
* General Public License. All contributions in this program are covered
* by the Geomajas Contributors License Agreement. For full licensing
* details, see LICENSE.txt in the project root.
*/
package org.geomajas.plugin.reporting.gwt.example.client;
import com.smartgwt.client.widgets.menu.events.ClickHandler;
import com.smartgwt.client.widgets.menu.events.MenuItemClickEvent;
import org.geomajas.configuration.client.ClientMapInfo;
import org.geomajas.gwt.client.Geomajas;
import org.geomajas.gwt.client.command.AbstractCommandCallback;
import org.geomajas.gwt.client.command.GwtCommand;
import org.geomajas.gwt.client.command.GwtCommandDispatcher;
import org.geomajas.gwt.client.map.layer.VectorLayer;
import org.geomajas.gwt.client.util.Log;
import org.geomajas.gwt.client.widget.MapWidget;
import org.geomajas.plugin.rasterizing.client.image.ImageUrlService;
import org.geomajas.plugin.rasterizing.client.image.ImageUrlServiceImpl;
import org.geomajas.plugin.reporting.command.dto.PrepareReportingRequest;
import org.geomajas.plugin.reporting.command.dto.PrepareReportingResponse;
/**
* Opens a report in the specified format on a single feature.
*
* @author Jan De Moerloose
* @author Joachim Van der Auwera
*/
public class ReportingClickHandler implements ClickHandler {
private final String reportName;
private final String clientLayerId;
private String serverLayerId;
private final String format;
private final MapWidget mapWidget;
private final ImageUrlService imageUrlService = new ImageUrlServiceImpl();
/**
* Creates a handler for the specified map and format.
*
* @param mapWidget the map widget
* @param reportName report name
* @param layerId (client) layer id
* @param format the report format
*/
public ReportingClickHandler(MapWidget mapWidget, String reportName, String layerId, String format) {
this.mapWidget = mapWidget;
this.reportName = reportName;
this.clientLayerId = layerId;
this.format = format;
}
public void onClick(MenuItemClickEvent event) {
VectorLayer layer = mapWidget.getMapModel().getVectorLayer(clientLayerId);
if (null == layer) {
Log.logError("ReportingClickHandler only be on the client id for a vector layer, so not " + clientLayerId);
return;
}
serverLayerId = layer.getServerLayerId();
PrepareReportingRequest request = new PrepareReportingRequest();
request.setImageWidth(500);
request.setImageHeight(500);
request.setLegendWidth(200);
request.setLegendHeight(602);
request.setMargin(200);
request.setDpi(300);
imageUrlService.makeRasterizable(mapWidget);
ClientMapInfo mapInfo = mapWidget.getMapModel().getMapInfo();
/*
for (ClientLayerInfo layerInfo : mapInfo.getLayers()) {
if (layerId.equals(layerInfo.getServerLayerId())) {
VectorLayerRasterizingInfo v = (VectorLayerRasterizingInfo) layerInfo.getWidgetInfo().get(
VectorLayerRasterizingInfo.WIDGET_KEY);
v.getSelectionRule().setName(mapWidget.getMapModel().getSelectedFeature());
}
}
*/
request.setClientMapInfo(mapInfo);
request.setLayerId(serverLayerId);
request.setFilter(layer.getFilter());
GwtCommand command = new GwtCommand(PrepareReportingRequest.COMMAND);
command.setCommandRequest(request);
GwtCommandDispatcher.getInstance().execute(command, new ReportCallback());
}
/**
* Callback to open report.
*
* @author Jan De Moerloose
*/
public class ReportCallback extends AbstractCommandCallback<PrepareReportingResponse> {
public void execute(PrepareReportingResponse response) {
String url = Geomajas.getDispatcherUrl();
url += "reporting/c/" + serverLayerId + "/" + reportName + "." + format + "?key=" + response.getKey();
com.google.gwt.user.client.Window.open(url, "_blank", null);
}
}
}