From ac7d798332f3abae656bf6a28594e9bcfc072bc9 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Thu, 28 Jan 2010 17:49:58 +0100 Subject: [PATCH] ItEr45S15CUExportarTraballoRealizadaPorSubcontrataItEr44S21: Added buttons to generate XMLs from subcontracted tasks list and report advances list. NOTE: You should enable popups for navalplanner in your browser. --- .../ganttz/servlets/CallbackServlet.java | 13 ++++-- .../web/subcontract/IReportAdvancesModel.java | 2 + .../subcontract/ISubcontractedTasksModel.java | 2 + .../subcontract/ReportAdvancesController.java | 46 ++++++++++++++++++- .../web/subcontract/ReportAdvancesModel.java | 21 +++++++++ .../SubcontractedTasksController.java | 46 ++++++++++++++++++- .../subcontract/SubcontractedTasksModel.java | 21 +++++++++ 7 files changed, 146 insertions(+), 5 deletions(-) diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/servlets/CallbackServlet.java b/ganttzk/src/main/java/org/zkoss/ganttz/servlets/CallbackServlet.java index 9e47c7d73..87a6746af 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/servlets/CallbackServlet.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/servlets/CallbackServlet.java @@ -81,6 +81,11 @@ public class CallbackServlet extends HttpServlet { public static String registerAndCreateURLFor(HttpServletRequest request, IServletRequestHandler handler) { + return registerAndCreateURLFor(request, handler, true); + } + + public static String registerAndCreateURLFor(HttpServletRequest request, + IServletRequestHandler handler, boolean withContextPath) { // theorically could be an infinite loop, must be improved. Gods of // computer science forgive me String generatedKey = ""; @@ -89,12 +94,14 @@ public class CallbackServlet extends HttpServlet { do { generatedKey = generateKey(); } while (handlersCallbacks.putIfAbsent(generatedKey, toBeRegistered) != null); - return buildURLFromKey(request, generatedKey); + return buildURLFromKey(request, generatedKey, withContextPath); } private static synchronized String buildURLFromKey( - HttpServletRequest request, String generatedKey) { - return request.getContextPath() + MAPPING + generatedKey; + HttpServletRequest request, String generatedKey, + boolean withContextPath) { + String contextPath = withContextPath ? request.getContextPath() : ""; + return contextPath + MAPPING + generatedKey; } private static String generateKey() { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/IReportAdvancesModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/IReportAdvancesModel.java index f4d6a99a5..e912f5179 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/IReportAdvancesModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/IReportAdvancesModel.java @@ -51,4 +51,6 @@ public interface IReportAdvancesModel { throws UnrecoverableErrorServiceException, ConnectionProblemsException; + String exportXML(Order order); + } \ No newline at end of file diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/ISubcontractedTasksModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/ISubcontractedTasksModel.java index bef178d70..ef24c6f6d 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/ISubcontractedTasksModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/ISubcontractedTasksModel.java @@ -41,4 +41,6 @@ public interface ISubcontractedTasksModel { throws ValidationException, ConnectionProblemsException, UnrecoverableErrorServiceException; + String exportXML(SubcontractedTaskData subcontractedTaskData); + } \ No newline at end of file diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/ReportAdvancesController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/ReportAdvancesController.java index 3db428b1c..1ad3cb92a 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/ReportAdvancesController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/ReportAdvancesController.java @@ -21,9 +21,14 @@ package org.navalplanner.web.subcontract; import static org.navalplanner.web.I18nHelper._; +import java.io.IOException; import java.util.List; import java.util.Set; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + import org.navalplanner.business.advance.bootstrap.PredefinedAdvancedTypes; import org.navalplanner.business.advance.entities.AdvanceMeasurement; import org.navalplanner.business.advance.entities.DirectAdvanceAssignment; @@ -38,12 +43,16 @@ import org.navalplanner.web.subcontract.exceptions.UnrecoverableErrorServiceExce import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; +import org.zkoss.ganttz.servlets.CallbackServlet; +import org.zkoss.ganttz.servlets.CallbackServlet.IServletRequestHandler; import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Button; +import org.zkoss.zul.Hbox; import org.zkoss.zul.Label; import org.zkoss.zul.Row; import org.zkoss.zul.RowRenderer; @@ -144,7 +153,42 @@ public class ReportAdvancesController extends GenericForwardComposer { private void appendOperations(Row row, Order order, boolean sendButtonDisabled) { - row.appendChild(getSendButton(order, sendButtonDisabled)); + Hbox hbox = new Hbox(); + hbox.appendChild(getExportButton(order)); + hbox.appendChild(getSendButton(order, sendButtonDisabled)); + row.appendChild(hbox); + } + + private Button getExportButton( + final Order order) { + Button exportButton = new Button(_("XML")); + exportButton.addEventListener(Events.ON_CLICK, new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + String uri = CallbackServlet.registerAndCreateURLFor( + (HttpServletRequest) Executions.getCurrent() + .getNativeRequest(), + new IServletRequestHandler() { + + @Override + public void handle(HttpServletRequest request, + HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("text/xml"); + String xml = reportAdvancesModel + .exportXML(order); + response.getWriter().write(xml); + } + + }, false); + + Executions.getCurrent().sendRedirect(uri, "_blank"); + } + + }); + + return exportButton; } private Button getSendButton(final Order order, diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/ReportAdvancesModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/ReportAdvancesModel.java index f3b156bd2..56ea6ae33 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/ReportAdvancesModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/ReportAdvancesModel.java @@ -21,6 +21,7 @@ package org.navalplanner.web.subcontract; import static org.navalplanner.web.I18nHelper._; +import java.io.StringWriter; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -31,6 +32,8 @@ import java.util.Map; import java.util.Set; import javax.ws.rs.WebApplicationException; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Marshaller; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -275,4 +278,22 @@ public class ReportAdvancesModel implements IReportAdvancesModel { return configurationDAO.getConfiguration().getCompanyCode(); } + @Override + @Transactional(readOnly = true) + public String exportXML(Order order) { + OrderElementWithAdvanceMeasurementsListDTO orderElementWithAdvanceMeasurementsListDTO = getOrderElementWithAdvanceMeasurementsListDTO(order); + + StringWriter xml = new StringWriter(); + try { + JAXBContext jaxbContext = JAXBContext + .newInstance(OrderElementWithAdvanceMeasurementsListDTO.class); + Marshaller marshaller = jaxbContext.createMarshaller(); + marshaller.marshal(orderElementWithAdvanceMeasurementsListDTO, xml); + } catch (Exception e) { + throw new RuntimeException(e); + } + + return xml.toString(); + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/SubcontractedTasksController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/SubcontractedTasksController.java index 7ddf692a7..ff0840e56 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/SubcontractedTasksController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/SubcontractedTasksController.java @@ -21,10 +21,15 @@ package org.navalplanner.web.subcontract; import static org.navalplanner.web.I18nHelper._; +import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.planner.entities.SubcontractedTaskData; import org.navalplanner.web.common.IMessagesForUser; @@ -36,12 +41,16 @@ import org.navalplanner.web.subcontract.exceptions.UnrecoverableErrorServiceExce import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; +import org.zkoss.ganttz.servlets.CallbackServlet; +import org.zkoss.ganttz.servlets.CallbackServlet.IServletRequestHandler; import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Button; +import org.zkoss.zul.Hbox; import org.zkoss.zul.Label; import org.zkoss.zul.Row; import org.zkoss.zul.RowRenderer; @@ -139,7 +148,42 @@ public class SubcontractedTasksController extends GenericForwardComposer { private void appendOperations(Row row, SubcontractedTaskData subcontractedTaskData) { - row.appendChild(getSendButton(subcontractedTaskData)); + Hbox hbox = new Hbox(); + hbox.appendChild(getExportButton(subcontractedTaskData)); + hbox.appendChild(getSendButton(subcontractedTaskData)); + row.appendChild(hbox); + } + + private Button getExportButton( + final SubcontractedTaskData subcontractedTaskData) { + Button exportButton = new Button(_("XML")); + exportButton.addEventListener(Events.ON_CLICK, new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + String uri = CallbackServlet.registerAndCreateURLFor( + (HttpServletRequest) Executions.getCurrent() + .getNativeRequest(), + new IServletRequestHandler() { + + @Override + public void handle(HttpServletRequest request, + HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("text/xml"); + String xml = subcontractedTasksModel + .exportXML(subcontractedTaskData); + response.getWriter().write(xml); + } + + }, false); + + Executions.getCurrent().sendRedirect(uri, "_blank"); + } + + }); + + return exportButton; } private Button getSendButton( diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/SubcontractedTasksModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/SubcontractedTasksModel.java index ac7a24000..215d19d8a 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/SubcontractedTasksModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/subcontract/SubcontractedTasksModel.java @@ -21,10 +21,13 @@ package org.navalplanner.web.subcontract; import static org.navalplanner.web.I18nHelper._; +import java.io.StringWriter; import java.util.Date; import java.util.List; import javax.ws.rs.WebApplicationException; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Marshaller; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -224,4 +227,22 @@ public class SubcontractedTasksModel implements ISubcontractedTasksModel { isCriterionsExported); } + @Override + @Transactional(readOnly = true) + public String exportXML(SubcontractedTaskData subcontractedTaskData) { + SubcontractedTaskDataDTO subcontractedTaskDataDTO = getSubcontractedTaskData(subcontractedTaskData); + + StringWriter xml = new StringWriter(); + try { + JAXBContext jaxbContext = JAXBContext + .newInstance(SubcontractedTaskDataDTO.class); + Marshaller marshaller = jaxbContext.createMarshaller(); + marshaller.marshal(subcontractedTaskDataDTO, xml); + } catch (Exception e) { + throw new RuntimeException(e); + } + + return xml.toString(); + } + } \ No newline at end of file