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; } }; } }