티스토리 뷰

데이터출처 : 공공데이터포터

OpenAPI05

EPowerDataCollector

 

package com.yusen.i2b.openapi05

import android.util.Log
import org.json.JSONObject


class cEPowerDataCollector{
    companion object{
        const val TAG = "EPowerDataCollector"
        const val REQUESTING = 11
        const val RESPONDED = 12
        const val NEXTREQUEST = 13
        const val PROCESSCOMPLETED = 19
        const val NOCOMMAND = 91
        const val IDLING= 1
        const val PREPARING = 2
    }
    private val Constants = cConstants()
    val mHandler:UploadHandler = UploadHandler()
    private val ServiceKey = Constants.ServiceKey_EPower5m // key#2
    private val baseURL_requestEPowerData = Constants.BaseURL_requestEPowerData
    private val baseURL_BilientServer = Constants.BilientServer
    private val Params_requestEPowerData = JSONObject()
    private val Params_loadEPowerData = JSONObject()
    private val WebAccess = cWebAccess()
    private var processID = NOCOMMAND
    var IsUploaded = false
    var UploadedString = "-"

    constructor(){
        SetParams_requestEPowerData()
        SetParams_loadSeaStationData()
    }

    public fun CreateTables(){
        val jSON1 = JSONObject()
        Log.d("[EPower-22]", "Uploading EPower data ...")
        val msg1 = mHandler.obtainMessage(UploadHandler.MSG_UPLOADWEATHERDATA)
        jSON1.accumulate("RequestType", "createTables")
        val RequestInfo = cRequestInfo(baseURL_BilientServer, jSON1)
//            val RequestInfo = cRequestInfo(baseURL_uploadTest, JSON1)
        msg1.obj = RequestInfo
        mHandler.sendMessage(msg1)
    }

    public fun Start_requestEPowerData(){
        processID = IDLING
        this.WebAccess.ClearValues()
        CheckProcess_requestEPowerData()
    }

    public fun CheckProcess_requestEPowerData():Int{
        when(processID){
            IDLING->{
                this.WebAccess.ClearValues()
                this.WebAccess.Request_GET(this.baseURL_requestEPowerData, Params_requestEPowerData)
                this.processID = REQUESTING
                Log.d("[EPower-01]", "Requesting E-Power data ...")
                return 0
            }
            REQUESTING->{
                if(!WebAccess.IsResponded) return 0
                Log.d("[EPower-02]", "Responded")
                processID = RESPONDED
                return 0
            }
            RESPONDED->{
                processID = IDLING
                Log.d("[EPower-11]", WebAccess.ResponseString)
                val ePowerData = ConvertResponse2EPowerData(WebAccess.ResponseString)
                if(ePowerData == null) return -1
                Log.d("[EPower-12]", ePowerData.ItemValues[0].getString("baseDatetime"))
                UploadEPowerData(ePowerData.ItemValues)
                IsUploaded = true
                UploadedString = ePowerData.ItemValues[0].getString("baseDatetime")
                return 1

            }
            PROCESSCOMPLETED->{
                return 2
            }
            else->{
                return -2
            }
        }
        return 0;
    }

    private fun UploadEPowerData(ePowerData_JSON:ArrayList<JSONObject>){
        for(JSON1 in ePowerData_JSON ){
            //val JSON1 = JSONObject(WeatherData_JSON.get(Index1).toString())
            if(JSON1 == null) return
            Log.d("[EPower-22]", "Uploading EPower data ...")
            val msg1 = mHandler.obtainMessage(UploadHandler.MSG_UPLOADWEATHERDATA)
            JSON1.accumulate("RequestType", "uploadEPowerData")
            val RequestInfo = cRequestInfo(baseURL_BilientServer, JSON1)
//            val RequestInfo = cRequestInfo(baseURL_uploadTest, JSON1)
            msg1.obj = RequestInfo
            mHandler.sendMessage(msg1)
        }
    }

    private fun ConvertResponse2EPowerData(ResponseString:String):cWeatherData?{
        val DataManager = cDataManager()

        val Response_XML = DataManager.String2XMLList(ResponseString, "response")
        if(Response_XML == null){
            return null
        }
        val EPowerHeader_XML = DataManager.FindtheNodeList(Response_XML, "header")
        if(EPowerHeader_XML == null){
            return null
        }
        val EPowerHeader_JSON = DataManager.XMLList2JSON(EPowerHeader_XML)
        if(EPowerHeader_JSON == null){
            return null
        }
        Log.d("[Header]", EPowerHeader_JSON.getString("resultCode")+", "+EPowerHeader_JSON.getString("resultMsg"))
        when(EPowerHeader_JSON.getString("resultCode")) {
            "00" -> {
                val Items_XML = DataManager.FindtheNodeList(Response_XML, "items")
                if (Items_XML == null) {
                    return null
                }
                val ItemNumber = Items_XML.length
                val ItemArray_JSON = ArrayList<JSONObject>()
                for (Index1 in 0..(ItemNumber - 1)) {
                    val Item1 = Items_XML.item(Index1)
                    if (Item1.nodeName == "item") {
                        val Items_JSON = DataManager.XMLList2JSON(Item1.childNodes)
                        if (Items_JSON == null) continue
                        ItemArray_JSON.add(Items_JSON)
                    }
                }
                return cWeatherData(EPowerHeader_JSON, ItemArray_JSON)
            }
            else->{
                return null
            }
        }
    }

    private fun SetParams_requestEPowerData(){
        Params_requestEPowerData.accumulate("serviceKey", this.ServiceKey)
    }

    private fun SetParams_loadSeaStationData(){
        Params_loadEPowerData.accumulate("RequestType", "loadEPowerData")
    }

}

 

반응형
반응형
250x250
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함