package com.fancl.iloyalty.service.impl;
import java.io.ByteArrayInputStream;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.conn.ConnectTimeoutException;
import org.w3c.dom.Document;
import com.fancl.iloyalty.AndroidProjectApplication;
import com.fancl.iloyalty.Constants;
import com.fancl.iloyalty.Constants.HTTP_CALLING_METHOD;
import com.fancl.iloyalty.R;
import com.fancl.iloyalty.exception.GeneralException;
import com.fancl.iloyalty.service.HttpConnectionService;
import com.fancl.iloyalty.util.HttpUtil;
import com.fancl.iloyalty.util.LogController;
import com.fancl.iloyalty.util.NetworkConnective;
import com.fancl.iloyalty.util.XMLUtil;
import com.longevitysoft.android.xml.plist.PListXMLHandler;
import com.longevitysoft.android.xml.plist.PListXMLParser;
import com.longevitysoft.android.xml.plist.domain.PList;
public class HttpConnectionServiceImpl implements HttpConnectionService{
private AndroidProjectApplication application;
public HttpConnectionServiceImpl(AndroidProjectApplication application)
{
this.application = application;
}
@Override
public Document downloadXML(String url, String[] keys, String[] values, HTTP_CALLING_METHOD callingMethod) throws GeneralException {
if(!NetworkConnective.checkNetwork(this.application))
{
throw this.makeGeneralNoNetworkGeneralException();
}
try {
if(callingMethod != null)
{
if(callingMethod.equals(HTTP_CALLING_METHOD.POST))
{
byte[] byteArray = HttpUtil.downloadXMLFromPost(url, keys, values);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);
Document document = XMLUtil.toDocument(byteArrayInputStream);
return document;
}
else if(callingMethod.equals(HTTP_CALLING_METHOD.GET))
{
byte[] byteArray = HttpUtil.downloadXMLFromGet(url, keys, values);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);
Document document = XMLUtil.toDocument(byteArrayInputStream);
return document;
}
}
byte[] byteArray = HttpUtil.downloadXMLFromPost(url, keys, values);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);
Document document = XMLUtil.toDocument(byteArrayInputStream);
if(document != null)
{
if(document.getDocumentElement() != null)
{
document.getDocumentElement().normalize();
}
}
return document;
} catch (ConnectTimeoutException e) {
LogController.log("HttpConnectionManager downloadXML ConnectTimeoutException " + e);
throw makeGeneralException();
}
catch (ClientProtocolException e)
{
LogController.log("HttpConnectionManager downloadXML ClientProtocolException " + e);
throw makeGeneralException();
}
catch (Exception e)
{
LogController.log("HttpConnectionManager downloadXML Exception " + e);
e.printStackTrace();
throw makeGeneralException();
}
}
@Override
public PList downloadPList(String url, String[] keys, String[] values, HTTP_CALLING_METHOD callingMethod) throws GeneralException {
if(!NetworkConnective.checkNetwork(this.application))
{
throw this.makeGeneralNoNetworkGeneralException();
}
try {
if(callingMethod != null)
{
if(callingMethod.equals(HTTP_CALLING_METHOD.POST))
{
byte[] byteArray = HttpUtil.downloadXMLFromPost(url, keys, values);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);
PListXMLParser parser = new PListXMLParser();
PListXMLHandler handler = new PListXMLHandler();
parser.setHandler(handler);
parser.parse(byteArrayInputStream);
PList actualPList = ((PListXMLHandler) parser.getHandler()).getPlist();
return actualPList;
}
else if(callingMethod.equals(HTTP_CALLING_METHOD.GET))
{
byte[] byteArray = HttpUtil.downloadXMLFromGet(url, keys, values);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);
PListXMLParser parser = new PListXMLParser();
PListXMLHandler handler = new PListXMLHandler();
parser.setHandler(handler);
parser.parse(byteArrayInputStream);
PList actualPList = ((PListXMLHandler) parser.getHandler()).getPlist();
return actualPList;
}
}
byte[] byteArray = HttpUtil.downloadXMLFromPost(url, keys, values);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);
PListXMLParser parser = new PListXMLParser();
PListXMLHandler handler = new PListXMLHandler();
parser.setHandler(handler);
parser.parse(byteArrayInputStream);
PList actualPList = ((PListXMLHandler) parser.getHandler()).getPlist();
return actualPList;
} catch (ConnectTimeoutException e) {
LogController.log("HttpConnectionManager downloadPList ConnectTimeoutException " + e);
throw makeGeneralException();
}
catch (ClientProtocolException e)
{
LogController.log("HttpConnectionManager downloadPList ClientProtocolException " + e);
throw makeGeneralException();
}
catch (Exception e)
{
LogController.log("HttpConnectionManager downloadPList Exception " + e);
e.printStackTrace();
throw makeGeneralException();
}
}
private GeneralException makeGeneralException() {
return new GeneralException(Constants.GERENAL_STATUS_FAIL_LOCAL_FAIL, application.getResources().getString(R.string.no_network_connection));
}
private GeneralException makeGeneralNoNetworkGeneralException() {
return new GeneralException(Constants.GERENAL_STATUS_FAIL_LOCAL_FAIL, application.getResources().getString(R.string.no_network_connection));
}
}