ItEr45S15CUExportarTraballoRealizadaPorSubcontrataItEr44S21: Added buttons to generate XMLs from subcontracted tasks list and report advances list.

NOTE: You should enable popups for navalplanner in your browser.
This commit is contained in:
Manuel Rego Casasnovas 2010-01-28 17:49:58 +01:00 committed by Javier Moran Rua
parent 99f14c1335
commit ac7d798332
7 changed files with 146 additions and 5 deletions

View file

@ -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() {

View file

@ -51,4 +51,6 @@ public interface IReportAdvancesModel {
throws UnrecoverableErrorServiceException,
ConnectionProblemsException;
String exportXML(Order order);
}

View file

@ -41,4 +41,6 @@ public interface ISubcontractedTasksModel {
throws ValidationException, ConnectionProblemsException,
UnrecoverableErrorServiceException;
String exportXML(SubcontractedTaskData subcontractedTaskData);
}

View file

@ -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,

View file

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

View file

@ -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(

View file

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