package it.digione.dg1cloud.controller;
|
|
import java.io.IOException;
|
import java.text.SimpleDateFormat;
|
|
import javax.activation.DataHandler;
|
import javax.mail.internet.MimeMessage;
|
import javax.validation.Valid;
|
import javax.xml.bind.JAXBElement;
|
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.mail.javamail.JavaMailSender;
|
import org.springframework.mail.javamail.MimeMessageHelper;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.validation.BindingResult;
|
import org.springframework.web.bind.annotation.ControllerAdvice;
|
import org.springframework.web.bind.annotation.ModelAttribute;
|
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.servlet.ModelAndView;
|
|
import it.digione.dg1cloud.form.StartURPForm;
|
import it.digione.dg1cloud.ws.client.isd.IsdConfig;
|
import it.digione.dg1cloud.ws.client.isd.IsdProperties;
|
import it.digione.dg1cloud.ws.client.isd.IsdSOAPConnector;
|
import it.isharedoc.schemas.instance.InstanceMessageCreateRequest;
|
import it.isharedoc.schemas.instance.InstanceMessageCreateRequest.Attachments;
|
import it.isharedoc.schemas.instance.InstanceMessageCreateRequest.Attachments.Attachment;
|
import it.isharedoc.schemas.instance.InstanceMessageCreateRequest.Contacts;
|
import it.isharedoc.schemas.instance.InstanceMessageCreateRequest.Contacts.Contact;
|
import it.isharedoc.schemas.instance.InstanceMessageCreateRequest.Variables;
|
import it.isharedoc.schemas.instance.InstanceMessageCreateRequest.Variables.Variable;
|
import it.isharedoc.schemas.instance.InstanceMessageCreateResponse;
|
import it.isharedoc.schemas.instance.ObjectFactory;
|
|
@ControllerAdvice
|
@Controller
|
public class StartURPController {
|
|
private static final Logger logger = LoggerFactory.getLogger(DownloadController.class);
|
|
@Autowired IsdProperties isdProperties;
|
@Autowired IsdConfig isdConfig;
|
@Autowired JavaMailSender javaMailSender;
|
|
@ModelAttribute("startURPForm")
|
public StartURPForm startURPForm() {
|
return new StartURPForm();
|
}
|
|
@RequestMapping("/startURP")
|
public String startURP() {
|
return "startURP";
|
}
|
@PostMapping("/sendStartRequest")
|
public Object sendStartRequest(@ModelAttribute("startURPForm") @Valid StartURPForm form,
|
BindingResult result) {
|
|
ModelAndView modelAndView;
|
if (result.hasErrors()){
|
modelAndView = new ModelAndView("startURP");
|
modelAndView.addObject(result);
|
modelAndView.addObject("startURPForm", form);
|
modelAndView.addObject("message", "Impossibile inviare la richiesta");
|
modelAndView.addObject("alertClass", "alert-danger");
|
return modelAndView;
|
} else {
|
modelAndView = new ModelAndView("startURP");
|
|
InstanceMessageCreateRequest imcr = createInstanceMessageCreateRequest(form);
|
IsdSOAPConnector soapConnector = isdConfig.soapConnector(isdConfig.marshaller(), isdConfig.wsSecurityInterceptor());
|
|
String numeroProtocollo = null;
|
String dataProtocollo = null;
|
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
|
try {
|
InstanceMessageCreateResponse response = soapConnector.callWebService(soapConnector.getDefaultUri(), imcr);
|
numeroProtocollo = response.getIdentifier().getValue();
|
dataProtocollo = sdf.format(response.getIdentifierDate().getValue().toGregorianCalendar().getTime());
|
} catch (Exception e) {
|
logger.error("Errore invocazione servizi URP: " + e.getMessage(), e);
|
modelAndView.addObject(result);
|
modelAndView.addObject("startURPForm", form);
|
modelAndView.addObject("message", "Problemi nell'invio della richiesta: " + e.getMessage());
|
modelAndView.addObject("alertClass", "alert-danger");
|
return modelAndView;
|
}
|
|
try {
|
MimeMessage message = javaMailSender.createMimeMessage();
|
MimeMessageHelper helper;
|
helper = new MimeMessageHelper(message, true);
|
helper.setSubject("Richiesta inviata correttamente al servizio URP");
|
helper.setFrom(isdProperties.getNotificationFrom());
|
helper.setTo(form.getMittente());
|
helper.setText("Richiesta inviata correttamente: " + numeroProtocollo + " del " + dataProtocollo, true);
|
javaMailSender.send(message);
|
|
modelAndView.addObject("message", "Richiesta inviata con successo");
|
modelAndView.addObject("alertClass", "alert-success");
|
} catch (Exception e) {
|
logger.error("Errore invio email", e);
|
modelAndView.addObject("message", "Richiesta inviata con successo, ma non รจ stato possibile inviare la conferma tramite email");
|
modelAndView.addObject("alertClass", "alert-warning");
|
}
|
|
modelAndView.addObject("appIdentifier", numeroProtocollo);
|
modelAndView.addObject("appIdentifierDate", dataProtocollo);
|
return modelAndView;
|
}
|
|
}
|
|
private InstanceMessageCreateRequest createInstanceMessageCreateRequest( StartURPForm startURPForm ) {
|
|
ObjectFactory factory = new ObjectFactory();
|
|
InstanceMessageCreateRequest request = new InstanceMessageCreateRequest();
|
|
request.setPartitionPuid(isdProperties.getUrp().getPuid());
|
request.setMessageBoxCode(isdProperties.getUrp().getMbox());
|
request.setStoryboardCode(isdProperties.getUrp().getStoryboad());
|
|
request.setMetaViewName(factory.createInstanceMessageCreateRequestMetaViewName(isdProperties.getUrp().getMetaviewname()));
|
request.setDirection(isdProperties.getUrp().getDirection());
|
|
Contacts contacts = factory.createInstanceMessageCreateRequestContacts();
|
|
Contact contact = new Contact();
|
contact.setDescription(factory.createInstanceMessageCreateRequestContactsContactDescription(startURPForm.getMittente()));
|
contact.setEmail(factory.createInstanceMessageCreateRequestContactsContactEmail( startURPForm.getMittente()));
|
contact.setType("F");
|
contact.setReferenceType("AB");
|
contact.setSearchType("EXTID");
|
contact.setSearchMode("NOTFOUNDDEF");
|
contact.setSearchValue(startURPForm.getMittente());
|
|
contacts.getContact().add(contact);
|
|
for ( it.digione.dg1cloud.ws.client.isd.IsdProperties.Urp.Contact urpContact : isdProperties.getUrp().getContacts() ) {
|
contact = new Contact();
|
contact.setType(urpContact.getType());
|
contact.setReferenceType(urpContact.getReferenceType());
|
contact.setSearchType("CODE");
|
contact.setSearchValue(urpContact.getCode());
|
contacts.getContact().add(contact);
|
}
|
|
JAXBElement<Contacts> jaxbContacts = factory.createInstanceMessageCreateRequestContacts(contacts);
|
request.setContacts(jaxbContacts);
|
|
JAXBElement<String> jaxbSubject = factory.createInstanceMessageCreateRequestSubject(startURPForm.getOggetto());
|
request.setSubject(jaxbSubject);
|
|
JAXBElement<String> jaxbBody = factory.createInstanceMessageCreateRequestBody(startURPForm.getCorpo());
|
request.setBody(jaxbBody);
|
|
Variable variable = new Variable();
|
variable.setKey("transition");
|
variable.setType("string");
|
variable.setValueString(factory.createInstanceMessageCreateRequestVariablesVariableValueString(isdProperties.getUrp().getTransition()));
|
|
Variables variables = factory.createInstanceMessageCreateRequestVariables();
|
variables.getVariable().add(variable);
|
JAXBElement<Variables> jaxbVariables = factory.createInstanceMessageCreateRequestVariables(variables);
|
|
request.setVariables(jaxbVariables);
|
|
request.setStartWorkflow(factory.createInstanceMessageCreateRequestStartWorkflow(true));
|
|
Attachments attachments = new Attachments();
|
|
Attachment attachment = new Attachment();
|
attachment.setFilename( startURPForm.getAllegato().getOriginalFilename());
|
attachment.setContentType( factory.createInstanceMessageCreateRequestAttachmentsAttachmentContentType( startURPForm.getAllegato().getContentType()));
|
attachment.setFileset("isharedocMailAttach");
|
try {
|
attachment.setData(new DataHandler(startURPForm.getAllegato().getBytes(), startURPForm.getAllegato().getContentType()));
|
} catch (IOException e) {
|
throw new RuntimeException("Errore nella lettura dell'allegato da passare al servizio URP", e);
|
}
|
attachments.getAttachment().add(attachment);
|
|
JAXBElement<Attachments> jaxbAttachments = factory.createInstanceMessageCreateRequestAttachments(attachments);
|
request.setAttachments(jaxbAttachments);
|
|
return request;
|
}
|
}
|