package com.aincc.libtest;
import java.util.Iterator;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
import com.aincc.lib.network.common.BaseTrans;
import com.aincc.lib.network.common.BaseTransEx;
import com.aincc.lib.network.common.INetworkListener;
import com.aincc.lib.network.common.NetworkHandler;
import com.aincc.lib.network.http.HttpParam;
import com.aincc.lib.util.Logger;
import com.aincc.libtest.common.BaseTestCase;
import com.aincc.seoulopenapi.OpenAPI;
import com.aincc.seoulopenapi.ServiceExecutor;
import com.aincc.seoulopenapi.model.FacilSimpleInfo;
import com.aincc.seoulopenapi.model.MartInfo;
import com.aincc.seoulopenapi.model.NecessariesPrice;
import com.aincc.seoulopenapi.model.ParkInfo;
import com.aincc.seoulopenapi.model.PrivateServiceFee;
import com.aincc.seoulopenapi.model.PublicLandPrice;
import com.aincc.seoulopenapi.model.StablePriceBusiness;
import com.aincc.seoulopenapi.model.StablePriceProductList;
import com.aincc.seoulopenapi.model.ToiletPOI;
import com.aincc.seoulopenapi.model.TotalCount;
import com.aincc.seoulopenapi.model.TraditionalMartInfo;
import com.aincc.seoulopenapi.network.OpenBase;
import com.aincc.seoulopenapi.openapi.culture.OpenFacilInfo;
import com.aincc.seoulopenapi.openapi.park.OpenParkInfo;
import com.aincc.seoulopenapi.openapi.park.OpenParkInfoTotalCount;
import com.aincc.seoulopenapi.openapi.price.OpenMartInfo;
import com.aincc.seoulopenapi.openapi.price.OpenNecessariesPrice;
import com.aincc.seoulopenapi.openapi.price.OpenPrivateServiceFee;
import com.aincc.seoulopenapi.openapi.price.OpenStablePriceBusiness;
import com.aincc.seoulopenapi.openapi.price.OpenStablePriceProductList;
import com.aincc.seoulopenapi.openapi.realty.OpenPublicLandPrice;
import com.aincc.seoulopenapi.openapi.toilet.OpenToiletPOI;
import com.aincc.seoulopenapi.openapi.traditional.OpenTraditionalMartInfo;
import com.jayway.awaitility.Awaitility;
/**
*
* <h3><b>SeoulOpenAPITest</b></h3></br>
*
* @author aincc@barusoft.com
* @version 1.0.0
* @since 1.0.0
*/
public class SeoulOpenAPITest extends BaseTestCase implements INetworkListener
{
private static final int FETCH_COUNT = 20;
private NetworkHandler listener;
private boolean running = false;
public SeoulOpenAPITest(String name)
{
super(name);
listener = new NetworkHandler(this);
}
@Override
protected void setUp() throws Exception
{
super.setUp();
Awaitility.reset();
}
@Override
protected void tearDown() throws Exception
{
super.tearDown();
}
@Override
public void iNetEnabled()
{
Logger.v1(LOG, "iNetEnabled()");
running = false;
}
@Override
public void iNetDisabled()
{
Logger.v1(LOG, "iNetDisabled()");
}
@Override
public boolean iNetListenedTransaction(BaseTrans tr)
{
HttpParam param = (HttpParam) tr.getParam();
Logger.v1(LOG, "iNetListenedTransaction() " + param.getRequestKey());
if (((OpenBase) tr).isError())
{
handleError(tr);
return false;
}
switch (OpenAPI.valueOf(param.getRequestKey()))
{
case PARK_INFO_TOTAL_COUNT:
{
OpenParkInfoTotalCount item = (OpenParkInfoTotalCount) tr;
if (!item.infos.isEmpty())
{
Iterator<TotalCount> it = item.infos.iterator();
if (it.hasNext())
{
Logger.d1(LOG, "totalcount = " + Integer.parseInt(it.next().TOTALCNT));
}
}
}
break;
case PARK_INFO:
case PARK_INFO_BY_ADDRESS:
case PARK_INFO_BY_PARKNAME:
{
OpenParkInfo item = (OpenParkInfo) tr;
if (!item.infos.isEmpty())
{
Logger.d1(LOG, "infocount = " + item.infos.size());
int ii = 0;
Iterator<ParkInfo> it = item.infos.iterator();
while (it.hasNext())
{
Logger.d1(LOG, "(" + ++ii + ") : " + it.next().toString());
}
}
}
break;
case CULTURE_FACIL_INFO_BY_SUBJ:
case CULTURE_FACIL_INFO_BY_THEME:
{
OpenFacilInfo item = (OpenFacilInfo) tr;
if (!item.infos.isEmpty())
{
Logger.d1(LOG, "infocount = " + item.infos.size());
int ii = 0;
Iterator<FacilSimpleInfo> it = item.infos.iterator();
while (it.hasNext())
{
Logger.d1(LOG, "(" + ++ii + ") : " + it.next().toString());
}
}
}
break;
case PRICE_MART_INFO:
{
OpenMartInfo item = (OpenMartInfo) tr;
if (!item.infos.isEmpty())
{
int ii = 0;
Iterator<MartInfo> it = item.infos.iterator();
while (it.hasNext())
{
Logger.d1(LOG, "(" + ++ii + ") : " + it.next().toString());
}
}
}
break;
case PRICE_STABLE_PRICE_BUSINESS:
{
OpenStablePriceBusiness item = (OpenStablePriceBusiness) tr;
if (!item.infos.isEmpty())
{
int ii = 0;
Iterator<StablePriceBusiness> it = item.infos.iterator();
while (it.hasNext())
{
Logger.d1(LOG, "(" + ++ii + ") : " + it.next().toString());
}
}
}
break;
case PRICE_NECESSARIES_PRICE:
{
OpenNecessariesPrice item = (OpenNecessariesPrice) tr;
if (!item.infos.isEmpty())
{
int ii = 0;
Iterator<NecessariesPrice> it = item.infos.iterator();
while (it.hasNext())
{
Logger.d1(LOG, "(" + ++ii + ") : " + it.next().toString());
}
}
}
break;
case PRICE_STABLE_PRICE_PRODUCT_LIST:
{
OpenStablePriceProductList item = (OpenStablePriceProductList) tr;
if (!item.infos.isEmpty())
{
int ii = 0;
Iterator<StablePriceProductList> it = item.infos.iterator();
while (it.hasNext())
{
Logger.d1(LOG, "(" + ++ii + ") : " + it.next().toString());
}
}
}
break;
case PRICE_PRIVATE_SERVICE_FEE:
{
OpenPrivateServiceFee item = (OpenPrivateServiceFee) tr;
if (!item.infos.isEmpty())
{
int ii = 0;
Iterator<PrivateServiceFee> it = item.infos.iterator();
while (it.hasNext())
{
Logger.d1(LOG, "(" + ++ii + ") : " + it.next().toString());
}
}
}
break;
case TRADITIONAL_MART_INFO:
{
OpenTraditionalMartInfo item = (OpenTraditionalMartInfo) tr;
if (!item.infos.isEmpty())
{
int ii = 0;
Iterator<TraditionalMartInfo> it = item.infos.iterator();
while (it.hasNext())
{
Logger.d1(LOG, "(" + ++ii + ") : " + it.next().toString());
}
}
}
break;
case REALTY_PUBLIC_LAND_PRICE:
{
OpenPublicLandPrice item = (OpenPublicLandPrice) tr;
if (!item.infos.isEmpty())
{
int ii = 0;
Iterator<PublicLandPrice> it = item.infos.iterator();
while (it.hasNext())
{
Logger.d1(LOG, "(" + ++ii + ") : " + it.next().toString());
}
}
}
break;
case TOILET_SEOUL_POI:
{
OpenToiletPOI item = (OpenToiletPOI) tr;
if (!item.infos.isEmpty())
{
int ii = 0;
Iterator<ToiletPOI> it = item.infos.iterator();
while (it.hasNext())
{
Logger.d1(LOG, "(" + ++ii + ") : " + it.next().toString());
}
}
}
break;
case UNKNOWN:
default:
break;
}
return true;
}
@Override
public boolean iNetListenedError(BaseTransEx ex)
{
Logger.v1(LOG, "iNetListenedError()");
return true;
}
@Override
public void iNetRejectedExecution(BaseTransEx ex)
{
Logger.v1(LOG, "iNetRejectedExecution()");
}
@Override
public void iNetKeepAlive()
{
Logger.v1(LOG, "iNetKeepAlive()");
}
@Override
public void iNetKeepAlive(String param)
{
Logger.v1(LOG, "iNetKeepAlive(" + param + ")");
}
@Override
public void iNetConnected()
{
Logger.v1(LOG, "iNetConnected()");
}
@Override
public void iNetConnected(String param)
{
Logger.v1(LOG, "iNetConnected(" + param + ")");
}
@Override
public void iNetDisconnected()
{
Logger.v1(LOG, "iNetDisconnected()");
}
@Override
public void iNetDisconnected(String param)
{
Logger.v1(LOG, "iNetDisconnected(" + param + ")");
}
/**
*
* @since 1.0.0
*/
public void testAPI()
{
// // 시장마트정보
// ServiceExecutor.getInstance().getMartInfo(OpenAPI.PRICE_MART_INFO.name(), listener, 1, FETCH_COUNT);
// waiting();
//
// // 전통시장정보
// ServiceExecutor.getInstance().getTraditionalMartInfo(OpenAPI.TRADITIONAL_MART_INFO.name(), listener, 1, FETCH_COUNT);
// waiting();
//
// // 생필품가격정보
// ServiceExecutor.getInstance().getNecessariesPrice(OpenAPI.PRICE_NECESSARIES_PRICE.name(), listener, 1, FETCH_COUNT);
// waiting();
//
// // 개별공시지가
// ServiceExecutor.getInstance().getPublicLandPrice(OpenAPI.REALTY_PUBLIC_LAND_PRICE.name(), listener, 1, FETCH_COUNT, "중랑구", "면목동", 175, 103);
// waiting();
//
// // 가격안정모범업소
// ServiceExecutor.getInstance().getStablePriceBusiness(OpenAPI.PRICE_STABLE_PRICE_BUSINESS.name(), listener, 1, FETCH_COUNT);
// waiting();
//
// // 가격안정모범업소 상품목록
// ServiceExecutor.getInstance().getStablePriceProductList(OpenAPI.PRICE_STABLE_PRICE_PRODUCT_LIST.name(), listener, 1, FETCH_COUNT);
// waiting();
//
// // 개인서비스요금정보
// ServiceExecutor.getInstance().getPrivateServiceFee(OpenAPI.PRICE_PRIVATE_SERVICE_FEE.name(), listener, 1, FETCH_COUNT);
// waiting();
//
// // 서울시 화장실 공공정보 POI
// ServiceExecutor.getInstance().getToiletSeoulPOI(OpenAPI.TOILET_SEOUL_POI.name(), listener, 1, FETCH_COUNT);
// waiting();
}
/**
* 공원
*
* @since 1.0.0
*/
public void testPark()
{
Logger.v1(LOG, "testPark()");
// 공원전체 개수
ServiceExecutor.getInstance().getParkInfoTotalCount(OpenAPI.PARK_INFO_TOTAL_COUNT.name(), listener, OpenAPI.PARK_INFO_TOTAL_COUNT, null);
waiting();
// 공원정보
ServiceExecutor.getInstance().getParkInfo(OpenAPI.PARK_INFO.name(), listener, 1, FETCH_COUNT, OpenAPI.PARK_INFO, null);
waiting();
// 주소검색
ServiceExecutor.getInstance().getParkInfo(OpenAPI.PARK_INFO_BY_ADDRESS.name(), listener, 1, FETCH_COUNT, OpenAPI.PARK_INFO_BY_ADDRESS, "강남");
waiting();
// 공원명검색
ServiceExecutor.getInstance().getParkInfo(OpenAPI.PARK_INFO_BY_PARKNAME.name(), listener, 1, FETCH_COUNT, OpenAPI.PARK_INFO_BY_PARKNAME, "공원");
waiting();
}
/**
* 문화시설
*
* @since 1.0.0
*/
public void testFacil()
{
Logger.v1(LOG, "testFacil()");
// 테마 분류 코드 요청
ServiceExecutor.getInstance().getFacilCodeInfo(OpenAPI.CULTURE_FACIL_CATEGORY_BY_THEME.name(), listener, OpenAPI.CULTURE_FACIL_CATEGORY_BY_THEME, 1, FETCH_COUNT);
waiting();
// 주제 분류 코드 요청
ServiceExecutor.getInstance().getFacilCodeInfo(OpenAPI.CULTURE_FACIL_CATEGORY_BY_SUBJ.name(), listener, OpenAPI.CULTURE_FACIL_CATEGORY_BY_SUBJ, 1, FETCH_COUNT);
waiting();
// 테마분류 문화시설 조회
ServiceExecutor.getInstance().getFacilInfo(OpenAPI.CULTURE_FACIL_INFO_BY_THEME.name(), listener, OpenAPI.CULTURE_FACIL_INFO_BY_THEME, "1", 1, FETCH_COUNT);
waiting();
// 주제분류 문화시설 조회
ServiceExecutor.getInstance().getFacilInfo(OpenAPI.CULTURE_FACIL_INFO_BY_SUBJ.name(), listener, OpenAPI.CULTURE_FACIL_INFO_BY_SUBJ, "1", 1, FETCH_COUNT);
waiting();
}
/**
*
* @since 1.0.0
* @param tr
*/
private void handleError(BaseTrans tr)
{
OpenBase item = (OpenBase) tr;
Logger.d1(LOG, "error >> " + item.getErrorInfoType().getCode());
}
/**
*
* @since 1.0.0
*/
private void waiting()
{
running = true;
try
{
Awaitility.await().atMost(5, TimeUnit.SECONDS).until(IsCompleteTransaction());
}
catch (Exception e1)
{
e1.printStackTrace();
}
}
/**
*
* @since 1.0.0
* @return boolean
*/
private Callable<Boolean> IsCompleteTransaction()
{
return new Callable<Boolean>()
{
public Boolean call() throws Exception
{
return !running;
}
};
}
}