You are on page 1of 7

package com.worldsoft.wega.

services;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import javax.xml.bind.JAXB;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;

import org.springframework.stereotype.Service;
import org.w3c.dom.Document;

import com.worldsoft.wega.domain.juniper.www.webservice._2007.HotelBooking;
import com.worldsoft.wega.domain.juniper.www.webservice._2007.HotelBookingResponse;
import com.worldsoft.wega.dto.BookRequest;
import com.worldsoft.wega.dto.BookedRoom;
import com.worldsoft.wega.dto.BookingResultModel;
import com.worldsoft.wega.dto.PersonModel;

@Service
public class HotelBookingService {

public BookingResultModel hotelbooking(BookRequest bookRequest) {

HotelBookingResponse res = new HotelBookingResponse();


HotelBooking model = new HotelBooking(bookRequest);
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmm");
File folderRq = new File(System.getProperty("user.dir") + File.separator +
"HotelRQ");
if (!folderRq.exists()) {
folderRq.mkdir();
}

File request = new File(System.getProperty("user.dir") + File.separator +


"HotelRQ" + File.separator
+bookRequest.getGds().getIdEntite()
+"-"+bookRequest.getGds().getIdTiers()+"-JP-"+ format.format(new Date()) + "-
booking" + ".xml");

File folderRs = new File(System.getProperty("user.dir") + File.separator +


"HotelRS");
if (!folderRs.exists()) {
folderRs.mkdir();
}
File response = new File(System.getProperty("user.dir") + File.separator
+ "HotelRS" + File.separator
+bookRequest.getGds().getIdEntite()
+"-"+bookRequest.getGds().getIdTiers()+"-JP-"+ format.format(new Date()) + "-
bookingRS" + ".xml");

try {

MessageFactory messageFactory = MessageFactory.newInstance();


SOAPMessage soapMessage = messageFactory.createMessage();
Document document =
DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();

Marshaller marshaller =
JAXBContext.newInstance(model.getClass()).createMarshaller();
marshaller.marshal(model, document);

soapMessage.getSOAPBody().addDocument(document);

SOAPPart sp = soapMessage.getSOAPPart();
SOAPEnvelope envelope = sp.getEnvelope();
SOAPHeader header= soapMessage.getSOAPHeader();
SOAPBody body = envelope.getBody();

envelope.removeNamespaceDeclaration("SOAP-ENV");

envelope.addNamespaceDeclaration("soapenv","http://schemas.xmlsoap.org/soap/
envelope/" );
header.detachNode();

envelope.setPrefix("soapenv");
body.setPrefix("soapenv");

TransformerFactory transformerFactory =
TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
Source sourceContent = soapMessage.getSOAPPart().getContent();
StreamResult requette = new StreamResult(request);
transformer.transform(sourceContent, requette);

java.io.StringWriter sw = new java.io.StringWriter();


StreamResult result = new StreamResult(sw);
transformer.transform(sourceContent, result);
String xmlString = sw.toString();
JAXB.marshal(model, sw);

URL url = new


URL(bookRequest.getGds().getUrl()+"/booktransactions.asmx");

HttpURLConnection httpsURLConnection = (HttpURLConnection)


url.openConnection();
httpsURLConnection.setDoInput(true);
httpsURLConnection.setDoOutput(true);
httpsURLConnection.setRequestProperty("Content-Type","text/xml");

httpsURLConnection.setRequestProperty("SOAPAction","http://www.juniper.es/
webservice/2007/HotelBooking");
httpsURLConnection.setRequestMethod("POST");
httpsURLConnection.setRequestProperty("Accept-Encoding","deflate");

DataOutputStream wr = new
DataOutputStream(httpsURLConnection.getOutputStream());
wr.writeBytes(xmlString);
wr.flush();
wr.close();
BufferedReader in = new BufferedReader(new
InputStreamReader(httpsURLConnection.getInputStream()));
String inputLine;
StringBuffer responce = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
responce.append(inputLine);
}
in.close();

String responceS=responce.toString();

responceS=responceS.replace("<soap:Envelope
xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><soap:Body>", "");
responceS=responceS.replace("</soap:Body></soap:Envelope>","");

httpsURLConnection.disconnect();
BufferedWriter bwr = new BufferedWriter(new FileWriter(response));
bwr.write(responce.toString());
bwr.flush();
bwr.close();
transformer = transformerFactory.newTransformer();
java.io.StringWriter swres = new java.io.StringWriter();
StreamResult result11 = new StreamResult(swres);
transformer.transform(sourceContent, result11);

StringReader reader = new StringReader(responceS);


JAXBContext jaxbContext =
JAXBContext.newInstance(HotelBookingResponse.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

res = (HotelBookingResponse)unmarshaller.unmarshal(reader);
BookingResultModel resultToSend = new BookingResultModel();
if(res.getBookingRS().getErrors() != null) {
resultToSend.setSuccess(false);

resultToSend.setError(res.getBookingRS().getErrors().getError().get(0).getText());
}else {
resultToSend.setSuccess(true);

resultToSend.setVoucherRef(res.getBookingRS().getReservations().getReservation().ge
t(0).getLocator());
resultToSend.setBookingId(res.getBookingRS().getReservations().getReservation().get
(0).getLocator());

resultToSend.setPnrNumber(res.getBookingRS().getReservations().getReservation().get
(0).getLocator());
resultToSend.setCheckIn(bookRequest.getHotel().getCheckIn());
resultToSend.setCheckOut(bookRequest.getHotel().getCheckOut());
resultToSend.setHotelName(bookRequest.getHotel().getName());
resultToSend.setHotelAdress(bookRequest.getHotel().getAdress());
resultToSend.setGds("JP");
switch
(res.getBookingRS().getReservations().getReservation().get(0).getStatus().getValue(
)) {
case "PAG":
resultToSend.setStatus("CNF");
resultToSend.setDt_voucher(new Date().toString());

break;
case "CON":
resultToSend.setStatus("CNF");
resultToSend.setDt_voucher(new Date().toString());
break;

case "PRE":
resultToSend.setStatus("PNDN");
break;

case "PDI":
resultToSend.setStatus("PNDN");
break;

default:
break;
}

ArrayList<BookedRoom> bookedRooms = new ArrayList<>();

BookedRoom firstbookedRoomToAdd = new BookedRoom();

firstbookedRoomToAdd.setRoomType((bookRequest.getHotel().getRooms().get(0).getName(
)));

firstbookedRoomToAdd.setMealType(bookRequest.getHotel().getRooms().get(0).getMeals(
));

firstbookedRoomToAdd.setNbAdult(bookRequest.getHotel().getRooms().get(0).getNbAdult
s());

firstbookedRoomToAdd.setNbChildren(bookRequest.getHotel().getRooms().get(0).getNbCh
ildren());
firstbookedRoomToAdd.setNbInfant(bookRequest.getHotel().getRooms().get(0).getNbInfa
nt());

ArrayList<PersonModel> paxes = new ArrayList<>();

if(bookRequest.getBookingModel().getRooms().get(0).getNbAdult() != 0 ||
bookRequest.getBookingModel().getRooms().get(0).getAdult().size() > 0
|| !
bookRequest.getBookingModel().getRooms().get(0).getAdult().isEmpty()) {
for(int i =
0;i<bookRequest.getBookingModel().getRooms().get(0).getAdult().size();i++) {
PersonModel adult = new
PersonModel(bookRequest.getBookingModel().getRooms().get(0).getAdult().get(i).getCi
vilite(),

bookRequest.getBookingModel().getRooms().get(0).getAdult().get(i).getFirstName(),

bookRequest.getBookingModel().getRooms().get(0).getAdult().get(i).getLastName(),

bookRequest.getBookingModel().getRooms().get(0).getAdult().get(i).getType(),

bookRequest.getBookingModel().getRooms().get(0).getAdult().get(i).getAge());
paxes.add(adult);
}

if(bookRequest.getBookingModel().getRooms().get(0).getNbChildren() != 0 ||
bookRequest.getBookingModel().getRooms().get(0).getChildren().size() > 0
|| !
bookRequest.getBookingModel().getRooms().get(0).getChildren().isEmpty()) {

for(int j =
0;j<bookRequest.getBookingModel().getRooms().get(0).getChildren().size();j++) {
PersonModel children = new
PersonModel(bookRequest.getBookingModel().getRooms().get(0).getChildren().get(j).ge
tCivilite(),

bookRequest.getBookingModel().getRooms().get(0).getChildren().get(j).getFirstName()
,

bookRequest.getBookingModel().getRooms().get(0).getChildren().get(j).getLastName(),

bookRequest.getBookingModel().getRooms().get(0).getChildren().get(j).getType(),

bookRequest.getBookingModel().getRooms().get(0).getChildren().get(j).getAge());
paxes.add(children);
}
}
firstbookedRoomToAdd.setPaxes(paxes);
bookedRooms.add(firstbookedRoomToAdd);
if
(bookRequest.getHotel().getRooms().get(0).getRoomsCombinations()!=null && !
bookRequest.getHotel().getRooms().get(0).getRoomsCombinations().isEmpty()) {
for (int i = 0; i <
bookRequest.getHotel().getRooms().get(0).getRoomsCombinations().size(); i++) {
BookedRoom roomToAdd = new BookedRoom();

roomToAdd.setRoomType((bookRequest.getHotel().getRooms().get(0).getRoomsCombination
s().get(i).getName()));

roomToAdd.setMealType(bookRequest.getHotel().getRooms().get(0).getRoomsCombinations
().get(i).getMeals());

roomToAdd.setNbAdult(bookRequest.getHotel().getRooms().get(0).getRoomsCombinations(
).get(i).getNbAdults());
roomToAdd.setNbChildren(

bookRequest.getHotel().getRooms().get(0).getRoomsCombinations().get(i).getNbChildre
n());

roomToAdd.setNbInfant(bookRequest.getHotel().getRooms().get(0).getRoomsCombinations
().get(i).getNbInfant());
ArrayList<PersonModel> paxesComb = new
ArrayList<>();

if(bookRequest.getBookingModel().getRooms().get(i+1).getNbAdult() != 0 ||
bookRequest.getBookingModel().getRooms().get(i+1).getAdult().size() > 0
|| !
bookRequest.getBookingModel().getRooms().get(i+1).getAdult().isEmpty()) {
for(int j =
0;j<bookRequest.getBookingModel().getRooms().get(i+1).getAdult().size();j++) {
PersonModel adult = new
PersonModel(bookRequest.getBookingModel().getRooms().get(i+1).getAdult().get(j).get
Civilite(),

bookRequest.getBookingModel().getRooms().get(i+1).getAdult().get(j).getFirstName(),

bookRequest.getBookingModel().getRooms().get(i+1).getAdult().get(j).getLastName(),

bookRequest.getBookingModel().getRooms().get(i+1).getAdult().get(j).getType(),

bookRequest.getBookingModel().getRooms().get(i+1).getAdult().get(j).getAge());
paxesComb.add(adult);
}

if(bookRequest.getBookingModel().getRooms().get(i+1).getNbChildren() != 0 ||
bookRequest.getBookingModel().getRooms().get(i+1).getChildren().size() > 0
|| !
bookRequest.getBookingModel().getRooms().get(i+1).getChildren().isEmpty()) {

for(int k =
0;k<bookRequest.getBookingModel().getRooms().get(i+1).getChildren().size();k++) {
PersonModel children = new
PersonModel(bookRequest.getBookingModel().getRooms().get(i+1).getChildren().get(k).
getCivilite(),

bookRequest.getBookingModel().getRooms().get(i+1).getChildren().get(k).getFirstName
(),

bookRequest.getBookingModel().getRooms().get(i+1).getChildren().get(k).getLastName(
),

bookRequest.getBookingModel().getRooms().get(i+1).getChildren().get(k).getType(),

bookRequest.getBookingModel().getRooms().get(i+1).getChildren().get(k).getAge());
paxesComb.add(children);
}
}
roomToAdd.setPaxes(paxesComb);

bookedRooms.add(roomToAdd);
}
resultToSend.setBookedRooms(bookedRooms);
}}
System.out.println("resultToSend==>"+resultToSend.toString());
return resultToSend;

} catch(Exception e) {

e.printStackTrace();
}

return null;
}

You might also like