/*******************************************************************************
* Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*******************************************************************************/
package org.ebayopensource.turmeric.advertisinguniqueidservicev1.impl;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.xml.ws.AsyncHandler;
import javax.xml.ws.Response;
import org.ebayopensource.turmeric.advertising.v1.services.AckValue;
import org.ebayopensource.turmeric.advertising.v1.services.ChainedTransportHeaders;
import org.ebayopensource.turmeric.advertising.v1.services.ChainedTransportHeadersResponse;
import org.ebayopensource.turmeric.advertising.v1.services.EchoMessageRequest;
import org.ebayopensource.turmeric.advertising.v1.services.EchoMessageResponse;
import org.ebayopensource.turmeric.advertising.v1.services.ErrorMessage;
import org.ebayopensource.turmeric.advertising.v1.services.FileAttachmentType;
import org.ebayopensource.turmeric.advertising.v1.services.GetGenericClientInfoRequest;
import org.ebayopensource.turmeric.advertising.v1.services.GetGenericClientInfoResponse;
import org.ebayopensource.turmeric.advertising.v1.services.GetItemRequest;
import org.ebayopensource.turmeric.advertising.v1.services.GetItemResponse;
import org.ebayopensource.turmeric.advertising.v1.services.GetMessagesForTheDayRequest;
import org.ebayopensource.turmeric.advertising.v1.services.GetMessagesForTheDayResponse;
import org.ebayopensource.turmeric.advertising.v1.services.GetRequestIDResponse;
import org.ebayopensource.turmeric.advertising.v1.services.GetTransportHeaders;
import org.ebayopensource.turmeric.advertising.v1.services.GetTransportHeadersResponse;
import org.ebayopensource.turmeric.advertising.v1.services.GetVersion;
import org.ebayopensource.turmeric.advertising.v1.services.GetVersionResponse;
import org.ebayopensource.turmeric.advertising.v1.services.Messsage;
import org.ebayopensource.turmeric.advertising.v1.services.TestAttachment;
import org.ebayopensource.turmeric.advertising.v1.services.TestAttachmentResponse;
import org.ebayopensource.turmeric.advertising.v1.services.TestEnhancedRest;
import org.ebayopensource.turmeric.advertising.v1.services.TestEnhancedRestResponse;
import org.ebayopensource.turmeric.advertising.v1.services.TestPrimitiveTypesRequest;
import org.ebayopensource.turmeric.advertising.v1.services.TestPrimitiveTypesResponse;
import org.ebayopensource.turmeric.runtime.common.exceptions.ServiceException;
import org.ebayopensource.turmeric.runtime.common.pipeline.Message;
import org.ebayopensource.turmeric.runtime.common.pipeline.MessageContextAccessor;
import org.ebayopensource.turmeric.runtime.tests.AdvertisingUniqueIDServiceV1;
import org.ebayopensource.turmeric.runtime.tests.common.util.QEFileUtils;
import com.ebay.kernel.logger.LogLevel;
import com.ebay.kernel.logger.Logger;
public class AdvertisingUniqueIDServiceV1Impl implements
AdvertisingUniqueIDServiceV1 {
private final Logger logger = Logger
.getInstance(AdvertisingUniqueIDServiceV1Impl.class);
public GetVersionResponse getVersion() {
GetVersionResponse res = new GetVersionResponse();
res.setVersion("1.0.0");
return res;
}
@Override
public GetRequestIDResponse getRequestID() {
GetRequestIDResponse res = new GetRequestIDResponse();
try {
Message request = MessageContextAccessor.getContext()
.getRequestMessage();
Map<String, String> requestHeaders = null;
requestHeaders = request.getTransportHeaders();
String customHeader = requestHeaders.get("CLIENT-FAILOVER");
if (customHeader == null || customHeader.isEmpty()) {
res.setGuid(requestHeaders.get("X-TURMERIC-REQUEST-GUID"));
res.setRequestID(requestHeaders.get("X-TURMERIC-REQUEST-ID"));
// AdvertisingServiceV2NestedClient client = new
// AdvertisingServiceV2NestedClient("UniqueIDServiceV2Client","dev");
// res.setRequestID(client.getNestedServiceRequestID().getNestedSrvcRequestID());
} else {
// AdvertisingServiceV2NestedClient client =
// new
// AdvertisingServiceV2NestedClient("UniqueIDServiceV2Client",
// customHeader);
// res.setRequestID(client.getNestedServiceRequestID().getNestedSrvcRequestID());
}
} catch (ServiceException e) {
}
return res;
}
@Override
public GetItemResponse getItem(GetItemRequest getItemRequest) {
// TODO Auto-generated method stub
return null;
}
@Override
public EchoMessageResponse echoMessage(EchoMessageRequest echoMessageRequest) {
EchoMessageResponse res = new EchoMessageResponse();
res.setOut(" Echo Message = " + echoMessageRequest.getIn());
return res;
}
@Override
public GetGenericClientInfoResponse getGenericClientInfo(
GetGenericClientInfoRequest getGenericClientInfoRequest) {
Message request = MessageContextAccessor.getContext()
.getRequestMessage();
GetGenericClientInfoResponse resp = new GetGenericClientInfoResponse();
if (getGenericClientInfoRequest.getId().equals("1")) {
resp.setId(getGenericClientInfoRequest.getId());
resp.setName("Generic Client2");
resp.setPhonenumber("22222222");
} else if (getGenericClientInfoRequest.getId().equals("2")) {
throw new NullPointerException();
} else if (getGenericClientInfoRequest.getId().equals("3")) {
ErrorMessage em = new ErrorMessage();
// CommonErrorData ed = new Common ErrorData();
// ed.setErrorId(11L);
// ed.setDomain("SOA");
// em.getError().add(ed);
// resp.setErrorMessage(em);
}
if (getGenericClientInfoRequest.getId().equals("4")) {
try {
resp.setName((String) request
.getTransportHeader("X-EBAY-SOA-USECASE-NAME"));
} catch (ServiceException e) {
logger.log(LogLevel.DEBUG, e);
}
}
return resp;
}
// @Override
// public GetUserInfoResponse getUserInfo(GetUserInfo getUserInfo)
// throws UserNotFoundExceptionException0 {
// // TODO Auto-generated method stub
// return null;
// }
@Override
public GetTransportHeadersResponse getTransportHeaders(
GetTransportHeaders getTransportHeaders) {
GetTransportHeadersResponse response = new GetTransportHeadersResponse();
try {
Message request = MessageContextAccessor.getContext()
.getRequestMessage();
Message responseMsg = MessageContextAccessor.getContext()
.getResponseMessage();
List<String> requestHeaders = getTransportHeaders.getIn();
if (requestHeaders == null)
return response;
for (String i : requestHeaders) {
responseMsg.setTransportHeader(i, request.getTransportHeaders()
.get(i));
response.getOut().add(
i + " " + request.getTransportHeaders().get(i));
}
return response;
} catch (ServiceException e) {
logger.log(LogLevel.DEBUG, e);
}
return response;
}
@Override
public ChainedTransportHeadersResponse chainedTransportHeaders(
ChainedTransportHeaders chainedTransportHeaders) {
// try {
// // AdvertisingServiceV2NestedClient client = new
// AdvertisingServiceV2NestedClient("UniqueIDServiceV2Client","ESB1");
// ChainedTransportHeadersResponse response = new
// ChainedTransportHeadersResponse();
// List <String> requestHeaders = chainedTransportHeaders.getIn();
// // GetNestedTransportHeaders param0 = new
// GetNestedTransportHeaders();
// if (requestHeaders == null) return response;
// // for (String i:requestHeaders){
// // param0.getIn().add(i);
// // }
// // client.getServiceInvokerOptions().setTransportName("HTTP11");
// // GetNestedTransportHeadersResponse nestResponse =
// client.getNestedTransportHeaders(param0);
// // Response<GetNestedTransportHeadersResponse> nestResponse =
// client.getNestedTransportHeadersAsync(param0);
// // while (!nestResponse.isDone()) {
// // System.out.println("isDone is true, now process response.");
// // try {
// // System.out.println(nestResponse.get().getOut().get(0));
// // requestHeaders = nestResponse.get().getOut();
// // for (String i:requestHeaders){
// //// responseMsg.setTransportHeader(i,
// responseMsg.getTransportHeaders().get(i));
// // response.getOut().add(i);
// // }
// // return response;
// // } catch (InterruptedException e) {
// // // TODO Auto-generated catch block
// // e.printStackTrace();
// // } catch (ExecutionException e) {
// // // TODO Auto-generated catch block
// // e.printStackTrace();
// // }
// // }
// // Message responseMsg =
// MessageContextAccessor.getContext().getResponseMessage();
// // requestHeaders = nestResponse.getOut();
// for (String i:requestHeaders){
// // responseMsg.setTransportHeader(i,
// responseMsg.getTransportHeaders().get(i));
// response.getOut().add(i);
// }
// return response;
// } catch (ServiceException e) {
// e.printStackTrace();
// }
return null;
}
@Override
public TestAttachmentResponse testAttachment(TestAttachment testAttachment) {
long MAX_SIZE = 15 * 1024 * 1024;
int CHUNK_SIZE = 4096;
long sizeCounter = 0;
BufferedInputStream br = null;
String clientFileName = "TestFileClient";
String serverFileName = "TestFileServer";
String currentDir = System.getProperty("user.dir");
String fileName = testAttachment.getIn().getFileName();
FileOutputStream out = null;
boolean bRet = false;
byte[] dataBuf = new byte[4096];
TestAttachmentResponse response = new TestAttachmentResponse();
FileAttachmentType responseAttachment = new FileAttachmentType();
FileAttachmentType attachment = testAttachment.getIn();
File f1 = null;
try {
if (attachment.getData() == null) {
// download to client
f1 = new File(currentDir + fileName);
if (!f1.exists())
QEFileUtils.createFileForTest(
Integer.valueOf(attachment.getSize().intValue()),
f1);
DataHandler dh = new DataHandler(new FileDataSource(f1));
responseAttachment.setData(dh);
responseAttachment.setFileName(clientFileName);
responseAttachment.setFilePath("");
responseAttachment.setSize(4096L);
response.setOut(responseAttachment);
return response;
} else if (attachment.isType()) {
// Upload to server
System.out.println(currentDir + serverFileName);
DataHandler dataHandler = attachment.getData();
InputStream in = dataHandler.getInputStream();
QEFileUtils.writeData(in, CHUNK_SIZE, attachment.getSize(),
currentDir + serverFileName);
responseAttachment.setFileName(serverFileName);
responseAttachment.setSize(attachment.getSize());
response.setOut(responseAttachment);
} else {
// Both upload and download
DataHandler dataHandler = attachment.getData();
InputStream in = dataHandler.getInputStream();
QEFileUtils.writeData(in, CHUNK_SIZE, attachment.getSize(),
currentDir + serverFileName);
DataHandler dh = new DataHandler(new FileDataSource(new File(
currentDir + serverFileName)));
responseAttachment.setData(dh);
responseAttachment.setFileName(clientFileName);
responseAttachment.setFilePath("");
responseAttachment.setSize(attachment.getSize());
response.setOut(responseAttachment);
return response;
}
/*
* out = new FileOutputStream(new File("C:\\temp\\"+ attachment
* .getFileName())); DataHandler dataHandler = attachment.getData();
* InputStream in = dataHandler.getInputStream(); br = new
* BufferedInputStream(in); while (br.read(dataBuf) != -1) { if
* (sizeCounter < MAX_SIZE) { out.write(dataBuf); sizeCounter +=
* CHUNK_SIZE; // This method writes the data } else { br.close();
* break; } } response.setOut(attachment);
*/
return response;
} catch (FileNotFoundException e) {
logger.log(LogLevel.DEBUG, e);
} catch (IOException e) {
logger.log(LogLevel.DEBUG, e);
} finally {
if (out != null)
try {
out.close();
} catch (IOException e) {
logger.log(LogLevel.DEBUG, e);
} finally {
out = null;
}
}
return response;
}
protected class AttachmentAsyncHandler<T> implements AsyncHandler<T> {
private Response<T> resp;
private boolean isError;
private boolean isDone = false;
public void handleResponse(Response<T> resp) {
this.resp = resp;
String currThreadNm = Thread.currentThread().getName();
logger.debug("AttachmentAsyncHandler:handleResponse:Executing thread "
+ currThreadNm);
try {
logger.debug("AttachmentAsyncHandler:handleResponse: getting response for void operation");
this.resp.get();
} catch (InterruptedException e) {
} catch (ExecutionException e) {
} finally {
isDone = true;
}
}
public Response<T> getReturn() {
return resp;
}
public boolean isDone() {
return isDone;
}
}
@Override
public TestEnhancedRestResponse testEnhancedRest(TestEnhancedRest arg0) {
TestEnhancedRestResponse response = new TestEnhancedRestResponse();
if (!arg0.getIn().isEmpty()) {
if (arg0.getIn().get(0) != null)
response.setOut(arg0.getIn().get(0));
else
response.setOut("Response");
} else
response.setOut("test");
return response;
}
@Override
public GetVersionResponse getVersion(GetVersion getVersion) {
return null;
}
@Override
public TestPrimitiveTypesResponse testPrimitiveTypes(
TestPrimitiveTypesRequest testPrimitiveTypes) {
TestPrimitiveTypesResponse response = new TestPrimitiveTypesResponse();
if (testPrimitiveTypes != null) {
if (testPrimitiveTypes.getTypeByte() != 0) {
response.setOut("From Server "
+ testPrimitiveTypes.getTypeByte());
} else if (testPrimitiveTypes.getTypeShort() != 0) {
response.setOut("From Server "
+ testPrimitiveTypes.getTypeShort());
} else if (testPrimitiveTypes.getTypeInt() != 0) {
response.setOut("From Server "
+ testPrimitiveTypes.getTypeInt());
} else if (testPrimitiveTypes.getTypeLong() != 0L) {
response.setOut("From Server "
+ testPrimitiveTypes.getTypeLong());
} else if (testPrimitiveTypes.getTypeFloat() != 0.0f) {
response.setOut("From Server "
+ testPrimitiveTypes.getTypeFloat());
} else if (testPrimitiveTypes.getTypeDouble() != 0.0d) {
response.setOut("From Server "
+ testPrimitiveTypes.getTypeDouble());
} else if (testPrimitiveTypes.getTypeChar() != '\u0000') {
response.setOut("From Server "
+ testPrimitiveTypes.getTypeChar());
} else if (testPrimitiveTypes.isTypeBoolean() == true) {
response.setOut("From Server "
+ testPrimitiveTypes.isTypeBoolean());
}
}
return response;
}
@Override
public GetMessagesForTheDayResponse testSchemaValidationWithUPA(
GetMessagesForTheDayRequest testSchemaValidationWithUPA) {
GetMessagesForTheDayResponse resp = new GetMessagesForTheDayResponse();
List<Messsage> msgs = resp.getMessageList();
String clientid = "", siteid = "", lang = "";
Messsage msg = new Messsage();
if (testSchemaValidationWithUPA.getSiteId() != null) {
siteid = "siteid - " + testSchemaValidationWithUPA.getSiteId();
}
if (testSchemaValidationWithUPA.getClientId() != null) {
clientid = "clientid - "
+ testSchemaValidationWithUPA.getClientId();
}
if (testSchemaValidationWithUPA.getLanguage() != null) {
lang = "lang - " + testSchemaValidationWithUPA.getLanguage();
}
msg.setMessage("Call reached IMPL as schemaValidation went thru fine."
+ siteid + clientid + lang);
msgs.add(msg);
resp.setAck(AckValue.SUCCESS);
return resp;
}
}